{"version":3,"file":"weldnote-d0fe9ce7c4987c0b6d21caffb6a16085.js","names":["_exports","default","_dec","service","_class","ApplicationAdapter","constructor","args","super","this","_descriptor","queryRecord","store","type","query","ajaxService","request","id","include","prototype","configurable","enumerable","writable","initializer","JSONAPIAdapter","_initializerDefineProperty","_descriptor2","_defineProperty","host","ENV","notesBackendEndpoint","headers","session","isAuthenticated","Authorization","data","authenticated","accessToken","handleResponse","status","_payload","requestData","UnauthorizedError","router","transitionTo","isCompanyNotAllowedError","meta","getErrorMeta","queryParams","documentType","documentLabel","siteLabel","_applyDecoratedDescriptor","applyRuntimeConfig","config","startSentry","App","Application","modulePrefix","podModulePrefix","Resolver","loadInitializers","Base","_descriptor3","_syncTokensToLocalStorage","expiresOn","refreshToken","localStorage","setItem","removeItem","_clearTokensFromLocalStorage","authenticate","credentials","Promise","resolve","reject","username","password","authenticateWithCredentials","run","restore","token","validateCurrentTokens","scheduleExpiredTokenCheck","error","invalidate","userSession","isLoggedInAsCustomerSupport","formData","FormData","append","msalWeldCloud","clientId","scope","ajax","post","authority","processData","contentType","then","response","Date","setHours","getHours","parsedResponse","access_token","originalAccessToken","refresh_token","getTime","toString","orgApiUrl","azureSubscriptionManagementId","supportRequestToken","catch","reason","timeUntilTokenExpiration","tokenResponse","now","expires","setTime","hasTokenExpired","window","clearTimeout","timeoutId","setTimeout","idToken","getItem","expiration","Error","ERROR_TYPES","NO_VALID_TOKEN","message","location","href","esabCloudLink","currentSessionToken","trigger","isSupportSession","userStr","user","JSON","parse","activeSupportRequestId","e","mobile","tablet","laptop","desktop","DynamicElementAlt","Component","DynamicElement","__COLOCATED_TEMPLATE__","_templateFactory","createTemplateFactory","block","moduleName","isStrictMode","PROJECT_TYPES","ASSEMBLY_PATHS","project","Display","instanceId","log","actionId","logExists","exists","isProjectType","includes","instanceType","assemblyUrl","segment","shouldShowAssemblyLink","targetRoute","messageText","isEmpty","messageId","intl","t","shouldShowLink","newDocumentName","context","previousDocumentName","hasDocumentInfo","_component","setComponentTemplate","AdminToolsAccountRepair","_descriptor4","_descriptor5","_descriptor6","_descriptor7","_descriptor8","_asyncArrowRuntime","buildTask","generator","event","preventDefault","email","retireEmail","trim","windowService","confirm","retireResult","adminApi","retireAccount","retireReason","moveEmail","organizationId","moveOrganizationId","moveResult","moveAccount","canRetire","retire","isRunning","canMove","move","setRetireEmail","target","value","setRetireReason","setMoveEmail","setMoveOrganizationId","tracked","action","Object","getOwnPropertyDescriptor","ORG_API_TYPES","Set","FINDINGS_PAGE_SIZE","AdminToolsDriftAudit","_descriptor9","summaryResult","driftAuditSummary","findingsRunId","latest","clearFindings","startResult","startDriftAudit","loadSummary","perform","runId","offset","findings","length","result","driftAuditFindings","findingsResult","ok","body","selectedType","findingsTotal","total","summary","summaryFailed","countRows","driftTypes","keys","counts","map","count","previous","previousCounts","label","DRIFT_TYPE_HELP","help","helpFor","change","notMeasured","has","selectedTypeAction","hasMoreFindings","setScope","showType","loadFindings","showMore","cancelAll","inspect","finding","entity","entityId","onInspect","String","meaning","RESOLUTION_LABELS","APPLIED","REFUSED_AUTHORED_DOCUMENTS","ACCOUNT_NOT_FOUND","CLIENT_NOT_FOUND","PERSON_NOT_FOUND","UNSUPPORTED_REASON","NOT_OPEN","AdminToolsIdentityConflicts","conflict","previewIdentityConflict","entry","preview","resolution","previews","listIdentityConflicts","loadResult","conflicts","decision","subject","question","actionResult","applyIdentityConflict","dismissIdentityConflict","load","loadFailed","isBusy","rows","isView","undefined","ageDays","daysSince","detectedOn","previewError","canInspect","dossierQueryFor","reasonMeaning","CONFLICT_REASON_HELP","reasonAction","entityType","existingAccountId","remoteId","REMOTE_LABELS","FOUND","NOT_FOUND","ERROR","SKIPPED","SEVERITY_CLASSES","PROBLEM","WARNING","INFO","AdminToolsIdentityDossier","identityDossier","dossier","failed","generalFlags","flags","filter","flag","accountId","withClasses","accounts","account","problemCount","severity","remoteLabel","remote","nextSyncLabel","nextSync","NEXT_SYNC_HELP","nextSyncAction","setValue","submit","search","queryChanged","element","lookup","scrollIntoView","behavior","inspectAccount","onSearch","FLAG_HELP","code","classes","detail","AdminToolsIdentityDriftReport","MAX_DRIFT_REPORT_ACCOUNT_IDS","validationError","ids","invalid","parseIds","join","maxIds","identityDriftReport","healthy","startsWith","sameOrganization","entries","AdminToolsInstructions","COMMAND_HINTS","USER","CLIENT","PERSON","COMPANY","ORG_API_SYNC_COMMANDS","command","input","AdminToolsOrgApiSync","buildRequest","confirmationFor","orgApiSync","selectedHint","selected","commands","find","option","isIdInput","isEmailInput","isListInput","listOutcomes","results","setCommand","raw","consequence","endsWith","AdminToolsResult","stringify","AdminToolsSyncAccount","syncAccount","canSubmit","setEmail","AdminToolsZombieFileCleanup","dryRun","cleanupZombieFiles","hasDryRun","lastRunWasDry","templateOnly","alert","alertMessage","modelName","model","metadata","listRoute","editRoute","visualLabel","showDeleteButton","canEdit","isNew","title","modelLabel","name","subtitle","hasDirtyAttributes","isDirty","changedAttributes","isModelSaving","saveModel","breadcrumbs","route","getModelLabel","arguments","loading","deleteInfo","translation","getActionLabel","deleteRecord","save","unloadRecord","success","postDelete","rollbackAttributes","isPermissionDenied","isForeignKeyError","foreignKeyMessage","isShowingDeleteModal","unblock","drop","beforeSave","validate","saved","showSaveSuccessMessage","postSave","isDuplicateError","duplicateMessage","validationFailed","errors","forEach","pushObject","analytics","trackEvent","EVENTS","VALIDATION_FAILED","getModelValue","attribute","get","setModelValue","set","setModelDecimalValue","decimalSeparator","separator","replace","setModelCollection","values","collection","clear","setModelCollectionValue","clearModelCollection","showDeleteModal","hideDeleteModal","and","_dec2","computed","_dec3","oneWay","_dec4","_dec5","titleValue","wps","init","_markSaving","_finishSaving","_showSaveSuccessMessage","_updateTitle","newTitle","_stopEditing","postCancelEditModel","pushValidationErrorsToAnalytics","parameters","parameter","errorParameter","pass","deleteModel","self","deleteInstance","finally","toggleProperty","stopEditing","modelIsNew","modelValid","info","wpsNumber","_postSave","editModel","beforeEditModel","later","confirmDeleteModel","toggleModal","cancelEditModel","_dec6","isEditing","isUserEditing","customDuplicateMessage","customError","add","showLoading","BaseMaterialChooser","task","restartable","_descriptor0","_descriptor1","_descriptor10","_descriptor11","canCreateNew","renderLabel","hasSearchValues","baseMaterialSpecification","baseMaterialGrade","baseMaterialGroup","noSearchResults","materialSearch","searchTask","lastSuccessful","hasHelp","helpText","industryCodeId","industryCode","searchForNullGroup","isSearchingForNullGroup","page","timeout","baseMaterialGroupStandard","groupStandard","baseMaterialGroupWelderStandard","groupWelderStandard","pageSize","baseMaterials","searchBaseMaterialsWithQuery","totalCount","records","console","hideSearch","isShowingSearch","openSearch","cancel","chooseMaterial","material","baseMaterialChosen","SELECT","specification","grade","group","updateSpecification","updateGrade","updateGroup","executeSearch","reloadData","openCreateNew","isShowingCreate","handleBaseMaterialCreated","savedMaterial","searchGroup","term","findBaseMaterialGroup","closeWindow","Creator","showMaterialGroupSearch","isUnlistedMaterial","owner","findBaseMaterialSpecification","specificationsSearched","findBaseMaterialGrade","gradesSearched","_formModel","specifications","searchSpecification","specificationOptions","spec","grades","searchGrade","gradeOptions","groups","firstObject","groupOptions","groupName","groupNumber","validateNewMaterial","materialGroup","isStandardAWSD15","newRecord","createRecord","onSave","searchValues","activeSpecificationSearch","fetchBaseMaterialSpecifications","activeGradeSearch","fetchBaseMaterialGrades","activeGroupSearch","fetchBaseMaterialGroups","valid","requiredFieldMessage","onCancel","suggestOption","setSpecification","setGrade","setGroup","createSpecification","createGrade","showWhenCreateSpec","specs","showWhenCreateGrade","openFindSpecification","publicAPI","actions","openFindGrade","openFindGroup","setUnlistedMaterial","BlankTemplate","tagName","CertificateApprovalRange","sortDirection","sortBy","isSorted","content","sortedContent","Array","isArray","sortProperty","sort","a","b","aProp","bProp","labelReference","attributeReference","CertificateAutoRenewalStatus","ConfirmDeleteModal","titleText","deleteButtonLabelText","deleteButtonLabel","cancelButtonLabelText","cancelButtonLabel","deleteButtonIcon","DigitalizePqrPageComponent","openUploadModal","isUploadModalOpen","closeUploadModal","onUploadComplete","queueRefreshSignal","SHIELDING_OPTIONS","Constants","DigitalizePqrPqrReviewModalComponent","_DigitalizePqrPqrReviewModalComponent","_descriptor12","_descriptor13","_descriptor14","_descriptor15","_descriptor16","_descriptor17","_descriptor18","_descriptor19","_descriptor20","_descriptor21","_descriptor22","_descriptor23","_descriptor24","_descriptor25","_descriptor26","_descriptor27","_descriptor28","_descriptor29","_descriptor30","_descriptor31","_descriptor32","_descriptor33","_descriptor34","_descriptor35","_descriptor36","_descriptor37","_descriptor38","_descriptor39","_descriptor40","_descriptor41","_descriptor42","_descriptor43","_descriptor44","_descriptor45","_descriptor46","_descriptor47","_descriptor48","_descriptor49","_descriptor50","_descriptor51","isLoading","loadError","pqrParseQueue","getQueueItem","item","uploadPdfPath","pdfUploadPath","parseResult","parsedData","validation","_populateFields","setter","findRecord","newExaminingBodyName","newExaminingBodyError","newExaminingBody","savedExaminingBody","form","selectedExaminingBody","bustExaminingBodyCache","isCreatingExaminingBody","newWelderFirstName","newWelderLastName","newWelderStamp","newWelderError","orgApiId","orgApiPersonnel","createPersonnel","firstName","secondName","displayName","stamp","ownerId","newWelderPolling","maxAttempts","welder","i","welders","toArray","selectedWelder","isCreatingWelder","index","_getFillerMaterialForIndex","classification","weldingProcess","_getWeldingProcessForIndex","_setFillerMaterialResult","_quickCreateCommercialDesignationIndex","_quickCreateCommercialDesignationName","fillerMaterial","designation","isCreatingCommercialDesignation","key","_quickCreateGasCDShieldingKey","_quickCreateGasCDName","gas","isCreatingGasCommercialDesignation","_quickCreateFluxCDShieldingKey","_quickCreateFluxCDName","flux","isCreatingFluxCommercialDesignation","approveAttempted","canApprove","payload","buildApprovePayload","onApprove","loadData","selectedStandard","industryCodeMismatchWarning","parsedCode","selectedCode","standardOptions","notesData","pqrStandards","unitSystemOptions","weldTypeOptions","getFilteredWeldTypes","weldTypes","productTypeOptions","weldingDetailOptions","weldingDetails","weldingProcessOptions","getFilteredWeldingProcesses","weldingProcesses","weldingPositionOptions","getFilteredWeldingPositions","weldingPositions","processMecanizationOptions","processMecanizations","arcTransferModeOptions","getFilteredArcTransferModes","arcTransferModes","typeCurrentPolarityOptions","typeCurrentPolarities","companyOptions","companies","examiningBodyOptions","examiningBodies","staffOptions","specialRequirementOptions","preparationMethodOptions","preparationMethods","shieldingTypeOptions","selectedShielding1Type","o","shielding1Type","selectedShielding2Type","shielding2Type","selectedShielding3Type","shielding3Type","selectedBackingType","backingType","isImageFile","fileName","ext","slice","lastIndexOf","toLowerCase","IMAGE_EXTENSIONS","pdfUrl","imageZoomStyle","imageZoom","zoomIn","Math","min","zoomOut","max","zoomReset","mappings","listMappings","certificateNumber","certificate_name","companyResult","resolveCompany","company","hasOnly1Company","firstCompany","selectedCompany","_parsedCompanyValue","parsedValue","examBodyResult","resolveExaminingBody","examining_body","_parsedExaminingBodyValue","dateResult","resolveEmissionDate","emission_date","emissionDate","date","_parsedEmissionDateValue","originalValue","_parsedWeldersValue","_parsedWrittenByValue","written_by","_parsedWpsUsedValue","wps_used","_parsedSpecialRequirementsValue","special_requirements","_resolveWelder","_resolveWrittenBy","_resolveWps","_resolveSpecialRequirements","address","testsConductedBy","tests_conducted_by","notes","testNotes","test_notes","resolveEntityByMapping","selectedUnitSystem","resolveUnitSystem","unit_system","testPieceDetails","test_piece_details","selectedWeldType","selectedProductType","resolveProductType","product_type","layers","_resolveWeldingDetails","side","consumable","weldingDetailsMerged","weldingLayers","selectedWeldingProcess1","selectedWeldingProcess2","selectedWeldingProcess3","selectedPosition1","selectedPosition2","selectedPosition3","selectedTransferMode1","selectedTransferMode2","selectedTransferMode3","selectedMecanization1","selectedMecanization2","selectedMecanization3","resolveMecanizationByName","welding_process_mechanization_1","welding_process_mechanization_2","welding_process_mechanization_3","selectedTypeCurrent1","selectedTypeCurrent2","selectedTypeCurrent3","preheatTemperature","pre_heat_details","temperature","interpassTemperature","interpass_heat_details","postHeatTemperature","post_heat_details","postHeatTime","time","pwhtTemperature","post_weld_heat_treatment_details","pwhtTime","pwhtHeatingRate","heating_rate","pwhtCoolingRate","cooling_rate","bm","test_piece_base_materials","_resolveBaseMaterial","base_material_1","base_material_2","weldedThickness","welded_thickness","cons","test_piece_consumables","_resolveFillerMaterial","filler_material_1","filler_material_2","filler_material_3","_resolveFillerMaterialCommercialDesignation","_resolveShielding","shielding_1","shielding_2","shielding_3","_resolveShieldingBacking","backing","passes","p","_createEditablePass","od","other_details","backGouging","back_gouging_details","pulsedWelding","pulsed_welding_details","torchAngleMin","torch_angle_min","torchAngleMax","torch_angle_max","electrodeType1","electrode_type_1","electrodeType2","electrode_type_2","electrodeType3","electrode_type_3","stickOut1","stick_out_1","stickOut2","stick_out_2","stickOut3","stick_out_3","gasNozzleDiameter1","gas_nozzle_diameter_1","gasNozzleDiameter2","gas_nozzle_diameter_2","gasNozzleDiameter3","gas_nozzle_diameter_3","weaving1","weaving_1","weaving2","weaving_2","weaving3","weaving_3","oscillation1","oscillation_1","oscillation2","oscillation_2","oscillation3","oscillation_3","_parsedPreparationMethodsValue","preparation_methods","_resolvePreparationMethods","typeOfDetails","mapping","options","found","mappingKey","parsedBm","prop","_resolveStoreRecord","suffix","thickness","diameter","parsedFm","fm","dimensions","cdMapping","cd","parsedShielding","commercial_designation","gas_mixture","flow_rate_min","flow_rate_max","GAS","fluxMapping","gasCdMapping","fluxCdMapping","parsedBacking","backingGasMixture","backingFlowRateMin","backingFlowRateMax","backingGasCommercialDesignation","backingFluxCommercialDesignation","_parsedWelders","_parsedWrittenBy","writtenBy","selectedWrittenBy","staff","_parsedWps","selectedWps","_parsedSpecialRequirements","specialRequirements","selectedSpecialRequirements","_parsedPreparationMethods","preparationsMethods","selectedPreparationMethods","pushObjects","method","methodName","EditablePass","welding_process","parsed","match","shortDesignation","selectedWeldingProcess","current_type","typeCurrent","selectedCurrentType","arc_transfer_mode","transferMode","selectedArcTransferMode","layerInfo","_resolveLayerForProcess","layer","selectedFillerMaterial","filler","arcTransfer","process","fillerMaterial1","fillerMaterial2","fillerMaterial3","temperatureLabel","unitSystem","getTemperatureUnit","unitLabel","getDistanceUnit","travelSpeedLabel","getTravelSpeedUnit","wireFeedSpeedLabel","getWireSpeedUnit","heatInputLabel","getHeatDistanceUnit","baseMaterial1SearchValues","_parsedBaseMaterialInfo","baseMaterial2SearchValues","_parsedFillerMaterialInfo","_fillerMaterialSearchValues","fillerMaterial1SearchValues","fillerMaterial2SearchValues","fillerMaterial3SearchValues","_getShieldingInfo","missingRequiredFields","missing","push","missingRequiredFieldsMessage","requiredFieldErrors","msg","standard","validationWarnings","warnings","validationErrors","unmappedValues","uv","field","toggleDocument","showDocument","updateField","prefix","_clearShieldingFields","cdMatch","hasNewExaminingBodyError","showCreateExaminingBody","text","createExaminingBodyOnEnter","select","isOpen","highlighted","isBlank","searchText","closeCreateExaminingBody","setNewExaminingBodyName","showCreateWelder","lastName","split","s","theWelders","closeCreateWelder","setNewWelderFirstName","val","setNewWelderLastName","setNewWelderStamp","setPreparationMethods","methods","openQuickCreateBaseMaterial","isCreatingBaseMaterial1","isCreatingBaseMaterial2","cancelQuickCreateBaseMaterial","baseMaterial1","baseMaterial2","openQuickCreateFillerMaterial","newMaterial","_newFillerMaterial1","isCreatingFillerMaterial1","_newFillerMaterial2","isCreatingFillerMaterial2","_newFillerMaterial3","isCreatingFillerMaterial3","cancelQuickCreateFillerMaterial","unloadFillerMaterialRelated","quickCreateFillerMaterial1","saveQuickFillerMaterialTask","quickCreateFillerMaterial2","quickCreateFillerMaterial3","openQuickCreateCommercialDesignation","hint","parsedCommercialDesignationHint","cancelQuickCreateCommercialDesignation","setQuickCreateCommercialDesignationName","openQuickCreateGasCD","shieldingKey","parsedShieldingCDHint","parseInt","cancelQuickCreateGasCD","setQuickCreateGasCDName","openQuickCreateFluxCD","cancelQuickCreateFluxCD","setQuickCreateFluxCDName","setPasses","standardId","getId","companyId","examiningBodyId","welderId","writtenById","wpsId","specialRequirementIds","r","weldTypeId","productType","weldingDetailIds","d","weldingProcessRootId","weldingProcessFillId","weldingProcessCapId","processMecanizationRootId","processMecanizationFillId","processMecanizationCapId","weldingPositionRootId","weldingPositionFillId","weldingPositionCapId","arcTransferModeRootId","arcTransferModeFillId","arcTransferModeCapId","typeCurrentRootId","typeCurrentFillId","typeCurrentCapId","baseMaterial1Id","baseMaterial1Thickness","baseMaterial1Diameter","baseMaterial2Id","baseMaterial2Thickness","baseMaterial2Diameter","weldedDiameter","fillerMaterialRootId","fillerMaterialRootDimensions","fillerMaterial1Dimensions","fillerMaterialFillId","fillerMaterialFillDimensions","fillerMaterial2Dimensions","fillerMaterialCapId","fillerMaterialCapDimensions","fillerMaterial3Dimensions","fillerMaterialRootCommercialDesignationId","fillerMaterialCommercialDesignation1","fillerMaterialFillCommercialDesignationId","fillerMaterialCommercialDesignation2","fillerMaterialCapCommercialDesignationId","fillerMaterialCommercialDesignation3","shielding1GasId","shielding1Gas","shielding1FluxId","shielding1Flux","shielding1GasCommercialDesignationId","shielding1GasCommercialDesignation","shielding1FluxCommercialDesignationId","shielding1FluxCommercialDesignation","shielding1GasMixture","shielding1FlowRateMin","shielding1FlowRateMax","shielding2GasId","shielding2Gas","shielding2FluxId","shielding2Flux","shielding2GasCommercialDesignationId","shielding2GasCommercialDesignation","shielding2FluxCommercialDesignationId","shielding2FluxCommercialDesignation","shielding2GasMixture","shielding2FlowRateMin","shielding2FlowRateMax","shielding3GasId","shielding3Gas","shielding3FluxId","shielding3Flux","shielding3GasCommercialDesignationId","shielding3GasCommercialDesignation","shielding3FluxCommercialDesignationId","shielding3FluxCommercialDesignation","shielding3GasMixture","shielding3FlowRateMin","shielding3FlowRateMax","backingGasId","backingGas","backingFluxId","backingFlux","backingGasCommercialDesignationId","backingFluxCommercialDesignationId","passNo","weldingProcessId","fillerMaterialId","currentTypeId","arcTransferModeId","currentMin","currentMax","voltageMin","voltageMax","wireFeedSpeedMin","wireFeedSpeedMax","travelSpeedMin","travelSpeedMax","heatInputMin","heatInputMax","preparationMethodIds","m","isApproving","approveTask","onReject","close","onClose","PQRFormState","templateOnlyComponent","ERROR_CODES","DigitalizePqrQueueListComponent","comboFilterOptions","selectedComboFilterOption","selectedComboFilter","filteredItems","items","getStatusFilterForApi","activeTab","QUEUE_STATUS","PARSED","QUEUED","START","PROCESSING","APPROVED","REJECTED","hasPendingItems","some","isActionInProgress","rejectTask","deleteTask","retryTask","statusFilter","listQueueItems","currentPage","_updateItems","list","reviewingCount","_fetchReviewingCount","notifyCountChanges","pollItems","pendingItemIds","POLL_INTERVAL","currentIds","disappearedIds","_checkForErroredItems","editedData","approveItem","reviewingItem","pqrId","err","errorCode","DUPLICATED_INSTANCE","fields","rejectItem","loadItems","deleteItem","retryItem","_lastRefreshSignal","refreshSignal","shouldCheckRefresh","willDestroy","onCountsChange","_calculateItemsHash","reviewingStatuses","itemIds","erroredFileNames","checks","async","all","fileNames","newItems","newHash","_lastItemsHash","createdAt","setTab","tab","setComboFilter","onPageChange","pageNumber","refresh","onUploadClick","onReview","closeReview","quickApproveItem","closeQuickApprove","switchToReview","onQuickApproveSuccess","_item","requestReject","pendingConfirmation","requestDelete","cancelConfirmation","confirmAction","onDelete","onRetry","DigitalizePqrQuickApproveModalComponent","errorMessage","_resolveEntity","_resolveUnitSystem","buildPayload","resolvedUnitSystem","parsedStandardHint","parsedUnitSystemHint","isSubmitting","isApproveDisabled","isCertificateNumberValid","Boolean","setStandard","setUnitSystem","updateCertificateNumber","openReview","trackedKey","toUpperCase","ReviewSectionBaseMaterialsComponent","parsedBaseMaterial1Hint","parsedBaseMaterialHint","parsedBaseMaterial2Hint","canQuickCreateBaseMaterial1","canQuickCreateBaseMaterial2","setBaseMaterial1","onUpdate","removeBaseMaterial1","setBaseMaterial2","removeBaseMaterial2","ReviewSectionConsumablesComponent","parsedFillerMaterial1Hint","parsedFillerMaterialHint","parsedFillerMaterial2Hint","parsedFillerMaterial3Hint","parsedCommercialDesignation1Hint","parsedCommercialDesignation2Hint","parsedCommercialDesignation3Hint","parsedShielding1Hint","parsedShieldingHint","parsedShielding2Hint","parsedShielding3Hint","parsedBackingHint","parsedShielding1CDHint","parsedShielding2CDHint","parsedShielding3CDHint","parsedBackingCDHint","isShielding1Gas","isShielding1Flux","FLUX","isShielding2Gas","isShielding2Flux","isShielding3Gas","isShielding3Flux","isBackingGas","isBackingFlux","canQuickCreateFillerMaterial1","canQuickCreateFillerMaterial2","canQuickCreateFillerMaterial3","canQuickCreateCommercialDesignation1","canQuickCreateCommercialDesignation2","canQuickCreateCommercialDesignation3","canQuickCreateShielding1GasCD","canQuickCreateShielding2GasCD","canQuickCreateShielding3GasCD","canQuickCreateBackingGasCD","canQuickCreateShielding1FluxCD","canQuickCreateShielding2FluxCD","canQuickCreateShielding3FluxCD","canQuickCreateBackingFluxCD","setFillerMaterial1","removeFillerMaterial1","setFillerMaterial2","removeFillerMaterial2","setFillerMaterial3","removeFillerMaterial3","setFillerMaterial1Dimensions","setFillerMaterial2Dimensions","setFillerMaterial3Dimensions","setCommercialDesignation1","setCommercialDesignation2","setCommercialDesignation3","setShielding1Type","setShielding2Type","setShielding3Type","setBackingType","setShielding1Gas","removeShielding1Gas","setShielding1Flux","removeShielding1Flux","setShielding2Gas","removeShielding2Gas","setShielding2Flux","removeShielding2Flux","setShielding3Gas","removeShielding3Gas","setShielding3Flux","removeShielding3Flux","setBackingGas","removeBackingGas","setBackingFlux","removeBackingFlux","setShielding1GasCD","setShielding2GasCD","setShielding3GasCD","setBackingGasCD","setShielding1FluxCD","setShielding2FluxCD","setShielding3FluxCD","setBackingFluxCD","ReviewSectionGeneralComponent","parsedCompanyHint","parsedExaminingBodyHint","parsedEmissionDateHint","parsedWeldersHint","parsedWrittenByHint","parsedWpsUsedHint","parsedSpecialRequirementsHint","setCompany","setExaminingBody","setEmissionDate","setWelder","setWrittenBy","setWps","removeWps","setSpecialRequirements","ReviewSectionMechanicalTestsComponent","ReviewSectionNdtResultsComponent","ReviewSectionOtherDetailsComponent","parsedPreparationMethodsHint","ReviewSectionStandardComponent","ReviewSectionTestPieceComponent","parsedWeldTypeHint","weld_type","parsedProductTypeHint","parsedProcess1Hint","parsedProcessHint","welding_process_1","parsedProcess2Hint","welding_process_2","parsedProcess3Hint","welding_process_3","parsedPosition1Hint","parsedPositionHint","welding_position_1","parsedPosition2Hint","welding_position_2","parsedPosition3Hint","welding_position_3","parsedTransferMode1Hint","parsedTransferModeHint","transfer_mode_1","parsedTransferMode2Hint","transfer_mode_2","parsedTransferMode3Hint","transfer_mode_3","parsedTypeCurrent1Hint","parsedTypeCurrentHint","type_of_current_1","parsedTypeCurrent2Hint","type_of_current_2","parsedTypeCurrent3Hint","type_of_current_3","parsedProcessMecanization1Hint","parsedProcessMecanizationHint","parsedProcessMecanization2Hint","parsedProcessMecanization3Hint","setWeldType","setProductType","setWeldingProcess1","setWeldingProcess2","setWeldingProcess3","setPosition1","setPosition2","setPosition3","setTransferMode1","setTransferMode2","setTransferMode3","setTypeCurrent1","setTypeCurrent2","setTypeCurrent3","setMecanization1","setMecanization2","setMecanization3","ReviewSectionThermalComponent","ReviewSectionWeldingDetailsComponent","parsedWeldingDetailsHint","welding_details","setWeldingDetails","details","ReviewSectionWeldingPassesComponent","isEditingPass","currentEditingPassIndex","layerOptions","addPass","newPasses","onPassesChanged","editPass","closePassEditor","requestRemovePass","pendingPassDeleteIndex","cancelPassDelete","confirmPassDelete","_","updatePass","updatePassWeldingProcess","inferredLayer","_inferLayerFromProcess","updatePassLayer","updatePassFillerMaterial","clearPassFillerMaterial","updatePassCurrentType","currentType","updatePassArcTransferMode","arcTransferMode","layerOption","layerValue","ROOT","FILL","CAP","pass_no","parsedWeldingProcess","parsedFillerMaterial","filler_material","parsedCurrentType","parsedArcTransferMode","current_min","current_max","voltage_min","voltage_max","wire_feed_speed_min","wire_feed_speed_max","travel_speed_min","travel_speed_max","heat_input_min","heat_input_max","_descriptor52","_descriptor53","_descriptor54","_descriptor55","_descriptor56","_descriptor57","_descriptor58","_descriptor59","_descriptor60","_descriptor61","_descriptor62","_descriptor63","_descriptor64","_descriptor65","_descriptor66","_descriptor67","_descriptor68","_descriptor69","_descriptor70","_descriptor71","_descriptor72","_descriptor73","_descriptor74","_descriptor75","_descriptor76","_descriptor77","_descriptor78","_descriptor79","_descriptor80","_descriptor81","_descriptor82","_descriptor83","_descriptor84","_descriptor85","_descriptor86","_descriptor87","_descriptor88","_descriptor89","_descriptor90","_descriptor91","_descriptor92","_descriptor93","_descriptor94","_descriptor95","_descriptor96","_descriptor97","_descriptor98","_descriptor99","_descriptor100","_descriptor101","_descriptor102","_descriptor103","_descriptor104","_descriptor105","_descriptor106","_descriptor107","_descriptor108","clearShieldingFields","resetStandardDependentFields","FILE_CONTEXT","DigitalizePqrUploadModalComponent","fetchStandards","filesUploaded","uploadErrors","_uploadQueue","file","shift","totalFilesToUpload","_uploadSingleFile","_showUploadResults","loadStandards","isLoadingStandards","selectedIndustryCodeId","isUploading","processUploadQueueTask","isDropzoneDisabled","acceptedTypes","currentUploadNumber","uploadFile","size","filename","fileService","getFileUploadRequest","DIGITALIZE_PQR","newFilename","url","fileUploadId","upload","queueFileForParsing","successCount","errorCount","queueFile","originalFilename","queueItemId","pqrParseMonitor","trackItem","validateFile","requestClose","showCloseWarning","cancelClose","confirmClose","NON_NEGATIVE_MEASUREMENTS","CERTIFICATE_TYPE","CertificateReviewModalComponent","_CertificateReviewModalComponent","_descriptor109","_descriptor110","_descriptor111","_descriptor112","_descriptor113","_descriptor114","_descriptor115","_descriptor116","_descriptor117","_descriptor118","_descriptor119","_descriptor120","_descriptor121","_descriptor122","_descriptor123","_descriptor124","_descriptor125","_descriptor126","_descriptor127","_descriptor128","_descriptor129","_descriptor130","_descriptor131","_descriptor132","_descriptor133","_descriptor134","_descriptor135","_descriptor136","_descriptor137","_descriptor138","_descriptor139","_descriptor140","_descriptor141","_descriptor142","welderCertificateParseQueue","isOperatorCertificate","weldingOperatorStandards","welderCertificateStandards","certificateTypeOptions","WELDER","OPERATOR","selectedCertificateType","isCurrentStandardAWSD11","isStandardAWSD11","isISO14732","isWelderStandardISO14732","isWeldingOperatorCertificateInAWSD11","canShowConsumables","canShowWeldingOperatorSpecificFields","showWeldingDetailJointSensor","showTypeOfCurrent","codeId","jointTypeOptions","overlayTypeOptions","weldingPositionDirectionOptions","electrodeTypeOptions","electrodeTypes","parsedConsumables","parsedBaseMaterials","parsedTestPieceDetails","validationMappings","parsedGeneralInfo","resolvedCompanyValue","resolvedExaminingBodyValue","resolvedEmissionDateValue","resolvedWeldersValue","resolvedWpsUsedValue","testResultOptions","_matchTestResultKey","upper","TEST_RESULTS","PASSED","FAILED","_matchLayerKey","LAYER_OPTIONS","SINGLE_LAYER","MULTI_LAYER","resolveCertificateType","certificate_type","tpd","selectedJointType","resolveJointType","joint_type","selectedOverlayType","resolveOverlayType","overlay_type","selectedPositionDirection1","resolvePositionDirection","welding_position_1_direction","selectedPositionDirection2","welding_position_2_direction","selectedPositionDirection3","welding_position_3_direction","thicknessRootTestPiece","thickness_root","parseFloat","thicknessRootLayerTestPiece","thickness_root_layer","thicknessFillTestPiece","thickness_fill","thicknessFillLayerTestPiece","thickness_fill_layer","thicknessCapTestPiece","thickness_cap","thicknessCapLayerTestPiece","thickness_cap_layer","thicknessTotalTestPiece","thickness_total","diameterTestPiece","selectedElectrodeType1","resolveElectrodeType","selectedElectrodeType2","selectedElectrodeType3","shielding_root","shielding_fill","shielding_cap","backingFlowRateRoot","backing_flow_rate_root","backingFlowRateFill","backing_flow_rate_fill","backingFlowRateCap","backing_flow_rate_cap","visualTestResult","visual_test","visualTestNumber","report_number","penetrantTestResult","penetrant_test","penetrantTestNumber","magneticTestResult","magnetic_test","magneticTestNumber","ultrasonicTestResult","ultrasonic_test","ultrasonicTestNumber","radiographicTestResult","radiographic_test","radiographicTestNumber","tensileTestResult","tensile_test","tensileTestNumber","bendTestResult","bend_test","bendTestNumber","macrographicTestResult","macrographic_test","macrographicTestNumber","impactTestResult","impact_test","impactTestNumber","fractureTestResult","fracture_test","fractureTestNumber","operator_details","arcLengthControlProcess1","arc_length_control_process_1","arcLengthControlProcess2","arc_length_control_process_2","arcLengthControlProcess3","arc_length_control_process_3","visualControlProcess1","visual_control_process_1","visualControlProcess2","visual_control_process_2","visualControlProcess3","visual_control_process_3","jointTrackingProcess1","joint_tracking_process_1","jointTrackingProcess2","joint_tracking_process_2","jointTrackingProcess3","joint_tracking_process_3","weldingOperatorWeldingDetailsProcess1","welding_details_process_1","weldingOperatorWeldingDetailsProcess2","welding_details_process_2","weldingOperatorWeldingDetailsProcess3","welding_details_process_3","findMapping","mappingLayer","flow_rate","parsedStandardSectionData","hasNegativeMeasurements","certificateType","measurementErrors","_clearHiddenFields","toISOString","jointType","overlayType","weldingPositionRootDirection","weldingPositionFillDirection","weldingPositionCapDirection","electrodeTypeRootId","electrodeTypeFillId","electrodeTypeCapId","shieldingRootType","shieldingRootGasId","shieldingRootGasMixture","shieldingRootGasCommercialDesignationId","shieldingRootFluxId","shieldingRootFluxCommercialDesignationId","flowRateRoot","buildFlowRate","shieldingFillType","shieldingFillGasId","shieldingFillGasMixture","shieldingFillGasCommercialDesignationId","shieldingFillFluxId","shieldingFillFluxCommercialDesignationId","flowRateFill","shieldingCapType","shieldingCapGasId","shieldingCapGasMixture","shieldingCapGasCommercialDesignationId","shieldingCapFluxId","shieldingCapFluxCommercialDesignationId","flowRateCap","backingTestPiece","arcLengthControlProcess1TestPiece","matchLovKey","arcVoltageControlOptions","visualControlProcess1TestPiece","visualControlOptions","jointTrackingProcess1TestPiece","jointTrackingOptions","arcLengthControlProcess2TestPiece","visualControlProcess2TestPiece","jointTrackingProcess2TestPiece","arcLengthControlProcess3TestPiece","visualControlProcess3TestPiece","jointTrackingProcess3TestPiece","weldingOperatorWeldingDetailsProcess1TestPiece","weldingOperatorWeldingDetailsOptions","weldingOperatorWeldingDetailsProcess2TestPiece","weldingOperatorWeldingDetailsProcess3TestPiece","DigitalizeWelderCertificatePageComponent","DigitalizeWelderCertificateQueueListComponent","isDestroying","isDestroyed","createdWelderCertificateId","DigitalizeWelderCertificateQuickApproveModalComponent","_resolveCertificateType","welderStandardOptions","resolvedCertificateType","parsedCertificateTypeHint","setCertificateType","welderOption","_canQuickCreate","_selectedLayerOption","selectedThicknessRootLayer","selectedThicknessFillLayer","selectedThicknessCapLayer","setThicknessRootLayer","setThicknessFillLayer","setThicknessCapLayer","_getGasForShieldingKey","_getFluxForShieldingKey","_getFillerMaterialInfo","parsedElectrodeType1Hint","parsedElectrodeType2Hint","parsedElectrodeType3Hint","_canQuickCreateFillerMaterial","setElectrodeType1","setElectrodeType2","setElectrodeType3","_getShieldingCDHint","_selectedTestResult","selectedTensileTestResult","selectedBendTestResult","selectedMacrographicTestResult","selectedImpactTestResult","selectedFractureTestResult","setTensileTestResult","setBendTestResult","setMacrographicTestResult","setImpactTestResult","setFractureTestResult","selectedVisualTestResult","selectedPenetrantTestResult","selectedMagneticTestResult","selectedUltrasonicTestResult","selectedRadiographicTestResult","setVisualTestResult","setPenetrantTestResult","setMagneticTestResult","setUltrasonicTestResult","setRadiographicTestResult","ReviewSectionOperatorDetailsComponent","setCertificateNumber","isOverlayWeld","parsedJointTypeHint","parsedOverlayTypeHint","parsedPositionDirection1Hint","parsedPositionDirectionHint","parsedPositionDirection2Hint","parsedPositionDirection3Hint","arc_transfer_mode_1","arc_transfer_mode_2","arc_transfer_mode_3","setJointType","setOverlayType","setPositionDirection1","setPositionDirection2","setPositionDirection3","DigitalizeWelderCertificateUploadModalComponent","fetchWelderStandards","acceptedMimeTypes","acceptedExtensions","DIGITALIZE_WELDER_CERTIFICATE","welderCertificateParseMonitor","extension","pop","DisplayApprovalRange","notEmpty","ExpiringCertificates","hasCertificatesInternalToday","hasCertificatesExternalToday","hasMiscellaneousToday","hasCertificate","internalCount","externalCount","miscellaneousCount","certificateCount","showWarningIfNeeded","once","showExpiringCertificatesWarning","timeOut","FeatureBannerComponent","isVisible","_isDismissed","dismiss","localStorageSet","_storageKey","onDismiss","show","bannerId","localStorageGet","FillerMaterialChooser","specificationLabel","classificationLabel","groupLabel","isFilteringByProcess","fillerMaterialSpecification","fillerMaterialClassification","fillerMaterialGroup","emptyResultSet","searchParameters","internalSearch","showAll","isSearching","searchFillerMaterialsWithQuery","fillerMaterials","clearFillerMaterial","fillerMaterialRemoved","showSaveError","saveNewFillerMaterial","processes","fillerMaterialChosen","debounce","updateClassification","createFillerMaterial","specificationSaved","classificationSaved","findFillerMaterialGroup","searchAll","findFillerMaterialSpecification","findFillerMaterialClassification","classifications","suggestSpecification","suggestClassification","setClassification","createClassification","showWhenCreateClassification","validateCreateMaterial","createMaterial","openFindClassification","UNIT_SYSTEM","DEFAULT_DECIMAL_SEPARATOR","FillerMaterialDiameters","classNames","_dec7","equal","METRIC","_dec8","IMPERIAL","_dec9","_dec0","or","_dec1","_dec10","_dec11","_dec12","_class2","displayValues","diameterDisplayValue1","diameterDisplayValue2","diameterDisplayValue3","diameterDisplayValue4","diameterDisplayValue5","isAWS","isValid","isNaN","_setInitialValuesFromModelToProperties","diameter1","diameter2","diameter3","diameter4","diameter5","diameters","_checkForInitialErrors","parseDiameterAsDecimal","_createComputedPropertiesForDisplayOfValue","defineProperty","valueString","isMetricSystem","fraction","toFraction","isKnownFractionString","updateModel","verifyValidity","getProperties","onUpdateValue","decimal","number","toNumber","updateDiameter1","updateDiameter2","updateDiameter3","updateDiameter4","updateDiameter5","WELDING_LAYER_OPTIONS","FillerMaterialWeldingPassSelector","_convertOption","isImperialSystem","diameter1Value","internalOptions","findBy","diameter2Value","diameter3Value","isOverlayFillerMaterialFormStrip","overlayFillerMaterialForm","_setOptions","parameterLayer","firstOption","secondOption","thirdOption","fourthOption","fifthOption","firstOptionLabel","secondOptionLabel","thirdOptionLabel","fourthOptionLabel","fifthOptionLabel","didReceiveAttrs","previousLayer","previousOverlayFillerMaterialForm","FleetMachineSelector","fleetLink","weldcloud","getFleetMachinesLink","gridColumns","valuePath","cellComponent","sortable","weldCloudData","queryMachines","powerSourceFilter","powerSources","totalSources","newPage","showRemoteUnitLink","remoteWeldingUnitId","remoteUnitLink","generateFleetMachineLink","onSelectMachine","FluxChooser","fluxSpecification","fluxFlux","searchFluxesWithQuery","labelValue","searchResults","searchResultsCount","closeCreateWindow","temporaryNewFlux","destroy","cancelSearch","chooseFlux","fluxChosen","updateFlux","fluxSpecifications","fluxSpecificationOptions","newSpecification","foundSpecification","currentSpec","createFlux","newFlux","savedFlux","FluxChooserCreator","validateCreateFlux","GasChooser","gasSpecification","composition","gasComposition","symbol","gasSymbol","searchGasesWithQuery","saveNewGas","newGas","savedGas","gasChosen","chooseGas","updateComposition","updateSymbol","createGas","validateGas","setComposition","validateCreateGas","GenericBoolean","hasTooltip","tooltipText","isChecked","hasError","DEFAULT_DATE_FORMAT","GenericDateField","isRequired","required","format","dateFormat","UNITS","GenericDistanceField","units","hasErrors","hasWarning","warningText","decimalValue","imperialValue","fractionValue","isFraction","htmlSafe","getUnitLabel","MILLIMETER","INCH","updateValue","newValue","serializedValue","GenericFillerMaterialCommercialDesignationComponent","debounceMs","filters","commercialDesignation","weldnoteData","listAllFillerMaterialCommercialDesignations","setInitialOptions","currentOptionsFillerMaterialId","searchCommercialDesignations","GenericFillerMaterialCommercialDesignationAfterOptionsComponent","maxPageSize","GenericFluxCommercialDesignationComponent","listAllFluxCommercialDesignations","fluxId","currentOptionsFluxId","GenericGasCommercialDesignationComponent","listAllGasCommercialDesignations","gasId","currentOptionsGasId","GenericLov","shouldRenderLabel","allowClearOption","allowClear","isSearchEnabled","searchEnabled","GenericMultiLov","availableOptions","setDiff","GenericNumericField","minimum","onKeyDown","onEnter","keyCode","GenericSearchLov","GenericTextField","fieldType","onBlur","allowEnterOnEmptyValue","IPanel","not","doOpen","toggle","collapsible","InputSearch","showSearch","onInput","onChange","InspiniaConfig","smoothlyMenu","jquery","$","hasClass","hide","fadeIn","css","removeClass","addClass","removeAttr","applySizeClass","document","width","fixHeight","heightWithoutNavbar","height","navbarHeigh","wrapperHeigh","windowHeight","adjustedHeight","checkIfFixHeightIsNeeded","didInsertElement","click","toggleClass","slimScroll","railOpacity","bind","on","InstanceAwareButtons","hasExistingInstance","existingInstance","createNew","confirmNew","discardAndCreate","toggleCreateNew","LoadingSpinner","style","cssClasses","LoginFormXComponent","currentYear","getFullYear","resetPasswordUrl","login","showWrongCredentialsError","setBackgroundImage","assetUrl","backgroundImage","setUsername","setPassword","GrooveDesign","alias","state","image","currentItem","imageSituation","savedDesign","newGrooveName","generateNewGrooveName","uploadNewBase64Image","GROOVE_DESIGN","description","longDescription","grooveType","imageState","renderedImage","updateExistingBase64Image","reload","closeModal","currentBackgroundImage","imageId","urlImage","completeDesignation","grooveShape","weldType","elem","listAllGrooveDesigns","resetPage","updateDescription","chooseItem","scroller","scrollVertical","duration","editDrawing","WeldLayer","newWeldLayerName","generateNewWeldLayerName","WELD_LAYER_CONFIGURATION","listAllWeldLayerConfigurations","MiscellaneousCertificateDashboardTable","currentDate","moment","MiscellaneousCertificateExpirationTable","noCertificatesMessage","translate","params","prepareOptions","revalidate","currentCertificateValidate","certificate","validateSingle","postValidate","loadCertificatesTask","dateDisplay","newDate","chooseCompany","searchPage","pageNum","Edit","extend","SystemAttribute","empty","listAllBaseMaterialGroups","baseMaterial","RSVP","hash","createGradeInternal","api","savedGrade","createSpecificationInternal","savedSpecification","searchBaseMaterialGroups","currentIndustryCodeId","setIndustryCode","createGradeOnEnter","createSpecificationOnEnter","CERTIFICATION_SPECIAL_REQUIREMENT","Rules","ModelSetter","bustSpecialRequirementsCache","setName","NAME","setDescription","DESCRIPTION","accountAdmin","findAll","selectedLanguage","languages","languageOptions","currentLanguage","bustCompanyCache","setAddress","ADDRESS","setCompanyLogo","COMPANY_LOGO","setSecondaryLogo","SECONDARY_LOGO","setWpsTemplate","WPS_TEMPLATE","setLanguage","LANGUAGE","setRenewalAccount","ACCOUNT_FOR_AUTO_CERTIFICATES_RENEWAL","canEditAccountForCertificateRenewal","certificateAccId","gt","drawing","listComponentDrawingRevisions","canShowRevisionButton","canCreateComponentDrawing","revisions","cleanupNewRevision","cleanupEditFileInRevision","clearUpdateReferenceErrors","showNewRevisionModal","revision","EmberObject","create","cancelNewRevision","saveNewRevision","createRevision","newRevision","fileUpload","newDrawing","referencedDrawing","referenceNumber","showUpdateFileInRevision","cancelUpdateFileInRevision","updateFile","drawingId","put","dataType","saveReference","updateDrawingReference","stopEditingReference","showUpdateReferenceModal","setGeneralDrawing","generalDrawingId","COMPONENT_DRAWING","Attributes","HTTP","DEBOUNCE","LookupModal","listAllComponentDrawings","buildFilters","searchDrawing","breakpoints","buildSingleFilter","controllerProperty","apiProperty","REFERENCE_NUMBER","REFERENCED_DRAWING","clearProperties","setProperties","currentDrawing","revisionList","closeSearch","clearSearch","chooseDrawing","row","loadAllDataComponentDrawing","showVersionChoice","chooseRevision","revisionId","Lookup","generalDrawing","selectedGeneralDrawing","drawingLabel","visualLabelWithRev","CONSTRUCTION_STANDARD","bustConstructionStandardCache","INDUSTRY_CODE","setDesignation","DESIGNATION","ELECTRODE_TYPE","setShortDesignation","SHORT_DESIGNATION","setLongDesignation","LONG_DESIGNATION","LookupCreate","showCreateWindow","isCreating","createOnEnter","validateExaminingBody","category","ModelFillerMaterialCommercialDesignationCreatorComponent","showCreateButton","isTermInOptions","validateDesignation","onCreate","_select","setFillerMaterial","removeFillerMaterial","filterFromCollectionByKey","listAllFillerMaterialGroups","createClassificationInternal","createClassificationOnEnter","searchFillerMaterialGroups","FITTER","person","showExpiredMiscellaneous","_activeExpired","showArchivedMiscellaneous","_activeArchived","pageNumberMiscellaneous","certificates","listAllMiscellaneousCertificates","getAttributeLabel","isGeneratingReport","contextTask","canShowCreateButton","canShowDownloadButton","columnsMiscellaneous","fetchMiscellaneousCertificates","setShowExpiredMiscellaneous","setShowArchivedMiscellaneous","generateFitterReport","taskMonitor","fitter","fitterId","hasTaskByContext","removeTaskByContext","createFitterReport","taskIdentifier","finishFitterReportGeneration","searchMiscellaneous","searchTerm","indexOf","setFlux","removeFlux","gasMixture","setGas","findGas","gasOptions","searchGas","gases","removeGas","listGeneralDrawingRevisions","canCreateGeneralDrawing","drawingContent","fetchRevisions","assemblyLink","GENERAL_DRAWING","listAllGeneralDrawings","onEnterSearch","WELD_TYPES","grooveDesign","showEditor","weldLayerConfigurationFromCopy","weldLayer","isMissingDetails","sides","showMissingValuesMessage","selectedWeldTypes","BUTT_WELD","COMPLETE_JOINT_PENETRATION_BUTT_WELD","FILLET_WELD","BRANCH_CONNECTION","OVERLAY_WELD","PARTIAL_PENETRATION_BUTT_WELD","PARTIAL_JOINT_PENETRATION_BUTT_WELD","previewLink","canCreateWeldLayerConfiguration","canCreateWeldSketch","canUserEdit","canEditWeldSketch","setImage","IMAGE","setWeldTypes","realWeldTypeOptions","filterBy","call","editImage","imageUploaded","drawEditions","operations","sprites","deleteGroove","cancelCreateWeldLayerConfiguration","confirmCreateWeldLayerConfiguration","downloadExcel","ieis","archive","unarchive","destroyRecord","listAllTestInspectionClasses","isRevisionDisabled","isArchived","canCreateWPS","isActive","isPrintOptionDisabled","originalDrawingId","componentDrawingId","dummy","removeReferenceDrawing","removeComponentDrawing","setLineClasses","lineClass","confirmArchive","cancelConfirmArchive","confirmUnarchive","cancelConfirmUnarchive","confirmDelete","cancelConfirmDelete","setPrintDrawingOption","New","newId","ieisNumber","INSPECTOR","hasFilePath","setInspectorName","INSPECTOR_NAME","setInspectorStamp","INSPECTOR_STAMP","setInspectorId","INSPECTOR_ID","setInspectorType","INSPECTOR_TYPE","setDateBirth","DATE_BIRTH","EXAMINING_BODY","generateInspectorReport","inspector","inspectorId","inspectorReportErrors","createInspectorReport","finishInspectorReportGeneration","Duplicate","newCertificateNumber","newPerson","validateDuplication","duplicate","cancelDuplication","MISCELLANEOUS_CERTIFICATE","findWelderByStamp","canCreateCertificate","welderCertificateData","clearMiscellaneousCache","archiveCertificate","CERTIFICATE_NUMBER","unarchiveCertificate","setRequalificationPeriod","REQUALIFICATION_PERIOD","openCreateType","createType","newType","savedType","reportNumber","testType","listAllNDTReportCertificates","disableTestTypeSelect","searchReport","chooseReport","report","onSelect","readOnly","reportLabel","searchOptions","searchMaterial","openModal","searchInspectors","listAllInspectors","onColumnClick","openCreateReport","isShowingCreateReport","newReport","typeOfTest","saveReport","savedReport","ndtReportNumber","onUploadFile","getFilenameWithoutExtension","closeCreateReport","system","isAdmin","testTypeOptions","nonDestructiveTestTypeOptions","PIPING_PIECE","setDiameter","DIAMETER","setThickness","THICKNESS","setDiameterInches","DIAMETER_INCHES","setThicknessInches","THICKNESS_INCHES","setSchedule","SCHEDULE","setNominalDiameter","NOMINAL_DIAMETER","PLATE_PIECE","ENTITY_TYPES","ENTITY_TYPE_CONFIG","WeldType","optionsGetter","codeAttribute","industryCodePath","WeldingProcess","WeldingPosition","ArcTransferMode","TypeCurrentPolarity","ProcessMecanization","WeldingDetail","Gas","ModelPqrLearnedMappingEditComponent","entityTypeOptions","currentEntityType","entityTypeConfig","canonicalCodeOptions","canonicalCodeAttribute","selectedCanonicalOption","currentCode","canonicalCode","setCanonicalCodeFromOption","loadGasOptions","onEntityTypeChange","entityTypeKey","AdditionalDetails","tungstenDiameterRootDisabled","isTungstenProcess","tungstenDiameterFillDisabled","tungstenDiameterCapDisabled","supplementalDeviceRootDisabled","isESW","isSAW","supplementalDeviceFillDisabled","supplementalDeviceCapDisabled","BendNottest","columnSize","showAdvancedFields","setBendType","bend","setBendAngle","setBendElongation","setBendResults","setTestType","removeTensileLine","line","confirmRemove","cancelRemove","PQR","ChemicalAnalysis","validateField","only","setCarbonContent","CHEMICAL_CARBON_CONTENT","setManganeseContent","CHEMICAL_MANGANESE_CONTENT","setSiliconContent","CHEMICAL_SILICON_CONTENT","setChromiumContent","CHEMICAL_CHROMIUM_CONTENT","setNickelContent","CHEMICAL_NICKEL_CONTENT","setMolybdenumContent","CHEMICAL_MOLYBDENUM_CONTENT","setCopperContent","CHEMICAL_COPPER_CONTENT","setPhosphorusContent","CHEMICAL_PHOSPHORUS_CONTENT","setSulphurContent","CHEMICAL_SULPHUR_CONTENT","setAluminumContent","CHEMICAL_ALUMINUM_CONTENT","setTitaniumContent","CHEMICAL_TITANIUM_CONTENT","ConfirmDelete","archivePQR","onArchive","onArchiveCallback","DisplayDecimalRange","bothEqual","showUnitSystemMessage","pqr","getUnitSystem","createPQR","copyTests","certificateError","newNumber","setCopyTests","shouldCopyTest","PQRRules","GROOVE_SHAPE_OPTIONS","OVERLAY_TYPE_OPTIONS","WELDING_PROCESSES","PRODUCT_TYPE","TASK_STATUS","OVERLAY_FILLER_METAL_FORM","jointTypeFilteredOptions","_dec13","_dec14","_dec15","_dec16","_dec17","_dec18","_dec19","_dec20","_dec21","_dec22","_dec23","_dec24","_dec25","_dec26","_dec27","_dec28","_dec29","_dec30","_dec31","_dec32","_dec33","_dec34","_dec35","_dec36","_dec37","_dec38","ESW","_dec39","_dec40","_dec41","_dec42","_dec43","_dec44","_dec45","_dec46","_dec47","_dec48","_dec49","_dec50","_dec51","_dec52","_dec53","_dec54","_dec55","_dec56","_dec57","_dec58","_dec59","_dec60","_dec61","_dec62","_dec63","_dec64","_dec65","_dec66","_dec67","_dec68","WELDING_PROCESS_ROOT_TESTPIECE","WELDING_PROCESS_FILL_TESTPIECE","WELDING_PROCESS_CAP_TEST_PIECE","_dec69","_dec70","_dec71","_dec72","_dec73","_dec74","_dec75","_dec76","_dec77","lt","_dec78","_dec79","_dec80","_dec81","_dec82","_dec83","_dec84","_dec85","_dec86","_dec87","_dec88","_dec89","_dec90","_dec91","PreviewImage","reloadPQR","WELDING_PARAMETERS","bendLines","BEND_TEST_LINES","impactLines","IMPACT_TEST_LINES","tensileLines","TENSILE_TEST_LINES","itemsToSave","isLineEmpty","impact","tensile","customLoadingMessage","reloadedPQR","loadAllDataPQR","silentSave","resetTabErrors","property","designations","searchAllFillerMaterialCommercialDesignationByFillerMaterial","savePQR","createReport","callback","section","easing","lists","w","isAWSD11","isUsingNotSupportedStandard","approvalRange","NotSupportedStandardApprovalRanges","productTypeTestPiece","allowedPositions","allowedMultiplePositionsPQR","d15Positions","position","PLATE","isPipeOnly","baseMaterial1ThicknessWarningText","hasAnyProcessSMAWorFCAWorGMAWorSAW","BASE_MATERIAL1_THICKNESS","baseMaterialThickness","unit","baseMaterial2ThicknessWarningText","BASE_MATERIAL2_THICKNESS","root","fill","cap","weldingPositionApprovalRangeOptions","isMultiple","advancedFieldHaveValue","electrodeType","electrodeTypeFill","electrodeTypeCap","numberOfElectrodes","numberOfElectrodesFill","numberOfElectrodesCap","gasNozzleDiameterRoot","gasNozzleDiameterFill","gasNozzleDiameterCap","contactTubeDistance","contactTubeDistanceFill","contactTubeDistanceCap","weaving","weavingFill","weavingCap","tungstenDiameterRoot","tungstenDiameterFill","tungstenDiameterCap","oscillationWidthRoot","oscillationWidthFill","oscillationWidthCap","oscillationFrequencyRoot","oscillationFrequencyFill","oscillationFrequencyCap","oscillationDwellTimeRoot","oscillationDwellTimeFill","oscillationDwellTimeCap","supplementalDeviceRoot","supplementalDeviceFill","supplementalDeviceCap","shieldingRootGasCommercialDesignationTestPiece","shieldingFillGasCommercialDesignationTestPiece","shieldingCapGasCommercialDesignationTestPiece","tensileTestTemperature","tensileTestLines","bendTestMandrillDiameter","impactTestDimensions","impactTestType","hardnessTestType","chemicalReportName","chemicalCarbonContent","chemicalManganeseContent","chemicalSiliconContent","chemicalChromiumContent","chemicalNickelContent","chemicalMolybdenumContent","chemicalCopperContent","chemicalPhosphorusContent","chemicalSulphurContent","chemicalAluminumContent","chemicalTitaniumContent","showAdvancedFieldsAction","contextName","contextId","IN_PROGRESS","pqrReportProgressTask","currentTasks","showMessageAboutThicknessInIsoWithImpactRequirements","STANDARD","WELDTYPE_TESTPIECE","thicknessTotal","THICKNESS_TOTAL_TESTPIECE","impactTestRequired","IMPACT_TEST_REQUIRED","impactReport","IMPACT_TEST_REPORT","isStandardISO","isButtWeld","isBranchConnection","jointTypeGrooveDesign","pqrJointType","weldLayerJointType","processNames","weldingProcessRootTestPiece","process1","weldingProcessFillTestPiece","process2","weldingProcessCapTestPiece","process3","calculateProcessLabels","writtenByLabel","isStandardASME","jointTypeWeldLayer","grooveDesignJointType","hasOnlyRoot","isFilletWeld","isPartialPenetrationButtWeld","hasDissimilarMaterials","hasBothMaterials","hasBothDiameter","hasBothThickness","baseMaterial1Label","isNotStandardISO","showJointType","hasWeldType","isNotOverlayWeld","overlayTypeLabel","OVERLAY_TYPE","isWrittenByDisabled","currentStaff","myStaff","fetchFillerMaterialRootCommercialDesignationOptions","FILLER_MATERIAL_ROOT_TESTPIECE","fetchFillerMaterialFillCommercialDesignationOptions","FILLER_MATERIAL_FILL_TESTPIECE","fetchFillerMaterialCapCommercialDesignationOptions","FILLER_MATERIAL_CAP_TEST_PIECE","showThroatThickness","isATypeOfButtWeld","weldTypeTestPiece","isFilletWeldBaseMaterial1ThicknessVisible","filletWeldBaseMaterial1ThicknessMinimumApprovalRange","filletWeldBaseMaterial1ThicknessMaximumApprovalRange","weldTypeApprovalRange","isFilletWeldBaseMaterial2ThicknessVisible","filletWeldBaseMaterial2ThicknessMinimumApprovalRange","filletWeldBaseMaterial2ThicknessMaximumApprovalRange","isDiameterDisabled","sameWeldingProcess","isSameProcess","showThicknessRoot","isPPBW","hasRoot","showThicknessFill","hasFill","showThicknessCap","hasCap","heatInputMinimumTestPiece","calculateParametersMinimumHeatInput","heatInputMaximumTestPiece","maximum","calculateParametersMaximumHeatInput","rootFillCapSum","THICKNESS_ROOT_TESTPIECE","THICKNESS_FILL_TESTPIECE","THICKNESS_CAP_TEST_PIECE","sum","rootFillCapDifferencePositive","abs","rootFillCapDifference","layerSum","toFixed","rootFillCapDifferencePercentage","totalLayers","totalThickness","getGrooveType","grooveDesignGroove","weldLayerGroove","hasSchematic","showGrooveAngle","J_SHAPE","DOUBLE_J_SHAPE","U_SHAPE","DOUBLE_U_SHAPE","SQUARE_SHAPE","NO_SHAPE","showRootFace","showRootGap","showNumberOfLayers","partialPenetrationButtWeldThicknessBaseMaterial1","weldingThickness","partialPenetrationButtWeldThicknessBaseMaterial2","partialPenetrationButtWeldDiameterBaseMaterial1","BASE_MATERIAL1_DIAMETER","partialPenetrationButtWeldDiameterBaseMaterial2","BASE_MATERIAL2_DIAMETER","grooveDesignLabel","grooveDesigns","groove","weldLayerConfigurationLabel","weldLayerConfigurations","isValidPropertyList","propertiesToCheck","calculateErrorDetailsTab","properties","TORCH_ANGLE_MINIMUM","TORCH_ANGLE_MAXIMUM","HEAT_INPUT_MINIMUM_APPROVALRANGE","HEAT_INPUT_MAXIMUM_APPROVALRANGE","PREHEAT_TEMPERATURE_TESTPIECE","PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE","PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE","INTERPASS_TEMPERATURE_TESTPIECE","INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE","INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE","POST_HEAT_TEMPERATURE_TESTPIECE","POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE","POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE","POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE","POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE","POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE","POST_WELD_HEAT_TREATMENT_TIME_TESTPIECE","POST_WELD_HEAT_TREATMENT_HEATING_RATE_TESTPIECE","POST_WELD_HEAT_TREATMENT_COOLING_RATE_TESTPIECE","WELDING_DETAILS_TESTPIECE","unitSystemValueLabel","calculateErrorOtherTab","NUMBER_OF_ELECTRODES","NUMBER_OF_ELECTRODES_FILL","NUMBER_OF_ELECTRODES_CAP","GAS_NOZZLE_DIAMETER_ROOT","GAS_NOZZLE_DIAMETER_FILL","GAS_NOZZLE_DIAMETER_CAP","OSCILLATION_WIDTH_ROOT","OSCILLATION_WIDTH_FILL","OSCILLATION_WIDTH_CAP","OSCILLATION_FREQUENCY_ROOT","OSCILLATION_FREQUENCY_FILL","OSCILLATION_FREQUENCY_CAP","OSCILLATION_DWELL_TIME_ROOT","OSCILLATION_DWELL_TIME_FILL","OSCILLATION_DWELL_TIME_CAP","calculateErrorBaseMaterialsTab","THICKNESS_ROOT_MINIMUM_APPROVALRANGE","THICKNESS_ROOT_MAXIMUM_APPROVALRANGE","THICKNESS_FILL_MINIMUM_APPROVALRANGE","THICKNESS_FILL_MAXIMUM_APPROVALRANGE","BRANCH_ANGLE_TESTPIECE","BRANCH_ANGLE_MINIMUM_APPROVALRANGE","BRANCH_ANGLE_MAXIMUM_APPROVALRANGE","GROOVE_ANGLE_MINIMUM","GROOVE_ANGLE_MAXIMUM","GROOVE_DESIGNS","WELD_LAYER_CONFIGURATIONS","ROOT_FACE_MINIMUM","ROOT_FACE_MAXIMUM","ROOT_GAP_MINIMUM","ROOT_GAP_MAXIMUM","THICKNESS_TOTAL_MINIMUM_APPROVALRANGE","THICKNESS_TOTAL_MAXIMUM_APPROVALRANGE","DIAMETER_TESTPIECE","DIAMETER_MINIMUM_APPROVALRANGE","DIAMETER_MAXIMUM_APPROVALRANGE","calculateErrorConsumablesTab","FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE","FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE","FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE","SHIELDING_ROOT","SHIELDING_ROOT_GAS_TESTPIECE","SHIELDING_ROOT_FLUX_TESTPIECE","FLOW_RATE_ROOT","SHIELDING_FILL","SHIELDING_FILL_GAS_TESTPIECE","SHIELDING_FILL_FLUX_TESTPIECE","FLOW_RATE_FILL","SHIELDING_CAP","SHIELDING_CAP_GAS_TEST_PIECE","SHIELDING_CAP_FLUX_TEST_PIECE","FLOW_RATE_CAP","BACKING_GAS_TESTPIECE","BACKING_FLUX_TESTPIECE","BACKING_FLOW_RATE_ROOT","FILLER_MATERIAL_ROOT_DIAMETERS","FILLER_MATERIAL_FILL_DIAMETERS","FILLER_MATERIAL_CAP_DIAMETERS","FLOW_RATE_PROCESS1_MINIMUM","FLOW_RATE_PROCESS1_MAXIMUM","FLOW_RATE_PROCESS2_MINIMUM","FLOW_RATE_PROCESS2_MAXIMUM","FLOW_RATE_PROCESS3_MINIMUM","FLOW_RATE_PROCESS3_MAXIMUM","calculateErrorPassesTab","passInvalid","calculateErrorTestsTab","TENSILE_TEST_TEMPERATURE","IMPACT_TEST_TYPE","IMPACT_TEST_DIMENSIONS","validBendTest","calculateImpactTestRequirementsDisabled","isImpactTestRequiredDisabled","calculateArcTransferModeRootDisabled","weldingProcessRoot","isArcTransferModeDisabled","calculateArcTransferModeFillDisabled","weldingProcessFill","calculateArcTransferModeCapDisabled","weldingProcessCap","calculateArcTransferModesDisabled","branchAngleDisabledCalculation","isBranchAngleDisabled","hardnessTestRequirementsDisabledCalculation","bm1","BASE_MATERIAL1_TESTPIECE","bm2","BASE_MATERIAL2_TESTPIECE","group1","group2","group1Name","group2Name","isHardnessTestRequirementsDisabled","diameterMaxDisabledCalculation","PRODUCT_TYPE_TESTPIECE","weldTypeString","isDiameterMaxDisabled","endOf","toDate","updateHeatInputApprovalRange","updateWeldingThicknessRoot","updateWeldingThicknessRootApprovalRange","updateWeldingThicknessFill","updateWeldingThicknessFillApprovalRange","updateWeldingThicknessCap","updateWeldingThicknessCapApprovalRange","updateWeldingThicknessTotal","updateWeldingThicknessTotalApprovalRange","updateBaseMaterial1ThicknessApprovalRange","updateBaseMaterialThicknessApprovalRange","updateBaseMaterialThicknessesApprovalRange","updateWeldingThicknesses","updateWeldingThicknessLayerApprovalRange","THICKNESS_CAP_MINIMUM_APPROVAL_RANGE","THICKNESS_CAP_MAXIMUM_APPROVAL_RANGE","updateWeldTypeApprovalRange","WELDTYPE_APPROVALRANGE","layerType","minProperty","maxProperty","thicknessValue","weldingThicknessRoot","weldingThicknessFill","weldingThicknessCap","thickness1Value","thickness2Value","BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE","BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE","BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE","BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE","material1","material2","updateBaseMaterial2ThicknessApprovalRange","updateDiameterApprovalRange","updateBranchAngleApprovalRange","branchAngle","weldTypeInstance","updateShieldingRoot","weldingProcessCode","shielding","currentShielding","clearShieldingRoot","updateShieldingFill","clearShieldingFill","updateShieldingCap","clearShieldingCap","SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TESTPIECE","SHIELDING_ROOT_GAS_MIXTURE","clearCollection","SHIELDING_ROOT_GAS_APPROVALRANGE","SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE","SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE","SHIELDING_ROOT_FLUX_APPROVALRANGE","SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE","SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TESTPIECE","SHIELDING_FILL_GAS_MIXTURE","SHIELDING_FILL_GAS_APPROVALRANGE","SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE","SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE","SHIELDING_FILL_FLUX_APPROVALRANGE","SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE","SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE","SHIELDING_CAP_GAS_MIXTURE","SHIELDING_CAP_GAS_APPROVAL_RANGE","SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE","SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE","SHIELDING_CAP_FLUX_APPROVAL_RANGE","SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE","updateBaseMaterialsApprovalRange","updateBaseMaterialApprovalRange","updateThroatThicknessApprovalRange","updateThroatThicknessApprovalRangeValue","updateImpactRequirements","updateImpactTestRequirements","updateImpactTestRequirementsDependencies","updateFillerMaterialCommercialDesignationsOnASME","hasImpactRequirements","HARD_FACING","designationRoot","FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE","designationFill","FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE","designationCap","FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE","updatePostweldHeatTreatmentTimeApprovalRange","POST_WELD_HEAT_TREATMENT_TIME_MINIMUM_APPROVAL_RANGE","POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM_APPROVAL_RANGE","updatePreHeatApprovalRange","updateTypeCurrentAndPolarityApprovalRange","updateWeldingPositionsRootApprovalRange","updateWeldingPositionsFillApprovalRange","updateWeldingPositionsCapApprovalRange","updateWeldingDetailsApprovalRange","updateInterpassApprovalRange","updateHardnessTestRequirements","updateTypeCurrentAndPolarityRootApprovalRange","updateTypeCurrentAndPolarityFillApprovalRange","updateTypeCurrentAndPolarityCapApprovalRange","updateTypeOfCurrentAndPolarityRoot","updateTypeOfCurrentAndPolarityFill","updateTypeOfCurrentAndPolarityCap","TYPE_CURRENT_ROOT_TESTPIECE","typeCurrentPolarity","TYPE_CURRENT_ROOT_APPROVALRANGE","pol","TYPE_CURRENT_FILL_TESTPIECE","TYPE_CURRENT_FILL_APPROVALRANGE","TYPE_CURRENT_CAP_TEST_PIECE","TYPE_CURRENT_CAP_APPROVAL_RANGE","preHeat","interpass","updatePostHeatApprovalRange","postHeat","updatePostWeldHeatTreatmentApprovalRange","postWeldHeat","approvalRangeBaseMaterial1","BASE_MATERIAL1_APPROVAL_RANGE","approvalRangeBaseMaterial2","BASE_MATERIAL2_APPROVAL_RANGE","updateDependenciesCallback","thicknessMaterial1","thicknessMaterial2","largestBaseMaterialThickness","hasImpactValues","IMPACT_TEST_TEMPERATURE","calculateImpactTestRequirements","update","updateFillerMaterialRootCommercialDesignationApprovalRange","fillerMaterialRootCommercialDesignation","updateFillerMaterialFillCommercialDesignationApprovalRange","fillerMaterialFillCommercialDesignation","updateFillerMaterialCapCommercialDesignationApprovalRange","fillerMaterialCapCommercialDesignation","throatThickness","THROAT_THICKNESS_MINIMUM_APPROVALRANGE","THROAT_THICKNESS_MAXIMUM_APPROVALRANGE","sortBaseMaterialGroups","aOrder","bOrder","cleanUnusedCommercialDesignations","approvalRangeProperty","approvalRangeCommercialDesignationProperty","idProperty","approvalRangeCommercialDesignation","designationsToRemove","elementId","removeObject","cleanUnusedGasCommercialDesignations","approvalRangeGasProperty","cleanUnusedFluxCommercialDesignations","approvalRangeFluxProperty","reloadFillerMaterialRootCommercialDesignationOptions","reloadFillerMaterialFillCommercialDesignationOptions","reloadFillerMaterialCapCommercialDesignationOptions","getWeldTypeCode","weldTypeCode","weldingPosition","WELDING_POSITION_ROOT_TESTPIECE","direction","WELDING_POSITION_ROOT_DIRECTION","weldingPositionsApprovalRange","WELDING_POSITION_ROOT_APPROVALRANGE","updateArcTransferModeTestPieceByWeldingProcess","ARC_TRANSFER_MODE_ROOT_TESTPIECE","WELDING_POSITION_FILL_TESTPIECE","WELDING_POSITION_FILL_DIRECTION","WELDING_POSITION_FILL_APPROVALRANGE","ARC_TRANSFER_MODE_FILL_TESTPIECE","WELDING_POSITION_CAP_TEST_PIECE","WELDING_POSITION_CAP_APPROVAL_RANGE","ARC_TRANSFER_MODE_CAP_TEST_PIECE","weldingDetail","WELDING_DETAILS_APPROVALRANGE","PqrApprovalRange","_setGrooveDesigns","resetGrooveDesignImagePreview","_setWeldLayerConfigurations","resetWeldLayerImagePreview","removeAllRootVariables","WELDING_PROCESS_ROOT_APPROVALRANGE","PROCESS_MECANIZATION_ROOT_TEST_PIECE","PROCESS_MECANIZATION_ROOT_APPROVAL_RANGE","ARC_TRANSFER_MODE_ROOT_APPROVALRANGE","THICKNESS_ROOT_LAYER_TESTPIECE","WEAVING","CONTACT_TUBE_DISTANCE","TUNGSTEN_DIAMETER_ROOT","FILLER_MATERIAL_ELECTRODE_FORM_ROOT","FILLER_MATERIAL_GUIDE_ROOT","SUPPLEMENTAL_DEVICE_ROOT","removeAllFillVariables","WELDING_PROCESS_FILL_APPROVALRANGE","PROCESS_MECANIZATION_FILL_TEST_PIECE","PROCESS_MECANIZATION_FILL_APPROVAL_RANGE","ARC_TRANSFER_MODE_FILL_APPROVALRANGE","THICKNESS_FILL_LAYER_TESTPIECE","ELECTRODE_TYPE_FILL","WEAVING_FILL","CONTACT_TUBE_DISTANCE_FILL","TUNGSTEN_DIAMETER_FILL","FILLER_MATERIAL_ELECTRODE_FORM_FILL","FILLER_MATERIAL_GUIDE_FILL","SUPPLEMENTAL_DEVICE_FILL","removeAllCapVariables","WELDING_PROCESS_CAP_APPROVAL_RANGE","PROCESS_MECANIZATION_CAP_TEST_PIECE","PROCESS_MECANIZATION_CAP_APPROVAL_RANGE","ARC_TRANSFER_MODE_CAP_APPROVAL_RANGE","WELDING_POSITION_CAP_DIRECTION","THICKNESS_CAP_LAYER_TEST_PIECE","ELECTRODE_TYPE_CAP","WEAVING_CAP","CONTACT_TUBE_DISTANCE_CAP","TUNGSTEN_DIAMETER_CAP","FILLER_MATERIAL_ELECTRODE_FORM_CAP","FILLER_MATERIAL_GUIDE_CAP","SUPPLEMENTAL_DEVICE_CAP","getBaseMaterialDiameterForApprovalRange","diameterBaseMaterial1","diameterBaseMaterial2","calculateMinMaxFromPair","thickness1","thickness2","updateWeldingDiameterApprovalRangeFromBaseMaterial","diameterMax","resultMin","resultMax","updatePJPButtWeldBaseMaterial1Thickness","pjpButtWeldBaseMaterial1Thickness","PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE","PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE","updatePJPButtWeldBaseMaterial2Thickness","pjpButtWeldBaseMaterial2Thickness","PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE","PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE","updateBaseMaterial1FilletWeldThicknessApprovalRange","FILLET_WELD_BASE_MATERIAL1_THICKNESS_TESTPIECE","FILLET_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVALRANGE","FILLET_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVALRANGE","baseMaterial1FilletWeldThickness","updateBaseMaterial2FilletWeldThicknessApprovalRange","FILLET_WELD_BASE_MATERIAL2_THICKNESS_TESTPIECE","FILLET_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVALRANGE","FILLET_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVALRANGE","baseMaterial2FilletWeldThickness","trackValidationError","checkImpactRequirements","reportFile","IMPACT_TEST_DOCUMENT","hasReport","checkHardnessRequirements","testReport","HARDNESS_TEST_REPORT","HARDNESS_TEST_TYPE","HARDNESS_TEST_DOCUMENT","HARDNESS_TEST_REQUIRED","deletePQR","updateArcTransferModeRootApprovalRange","dataService","getArcTransferModesByIndustryCode","arcTransferModeRoot","updateArcTransferModeFillApprovalRange","arcTransferModeFill","updateArcTransferModeCapApprovalRange","arcTransferModeCap","updateProcessMecanizationRoot","allProcessMecanizations","mecanization","mecanizationApprovalRange","processMecanizationRoot","updateProcessMecanizationFill","processMecanizationFill","updateProcessMecanizationCap","processMecanizationCap","updateCompany","setConstructionStandard","EMISSION_DATE","removeExaminingBody","chooseWeldType","approvalWeldTypes","JOINT_TYPE","currentDetailsTestPiece","validDetails","filterDetailsIncompatibleWithFilletWeld","currentDetailsApprovalRange","validDetailsApprovalRange","filterDetailsIncompatibleWithOverlayWeld","filterDetailsIncompatibleWithPartialPenetrationButtWeld","setWeldTypeApprovalRange","chooseWeldingProcessRoot","setWeldingProcessRootApprovalRange","setWeldingProcessFillApprovalRange","setWeldingProcessCapApprovalRange","chooseWeldingProcessFill","chooseWeldingProcessCap","chooseWeldingPositionRoot","chooseWeldingPositionFill","chooseWeldingPositionCap","setWeldingPositionRootApprovalRange","setWeldingPositionFillApprovalRange","setWeldingPositionCapApprovalRange","setWeldingDetailsTestPiece","isSingleOrMultiLayer","setWeldingDetailsApprovalRange","chooseArcTransferModeRoot","setArcTransferModeRootApprovalRange","chooseArcTransferModeFill","chooseArcTransferModeCap","setArcTransferModeFillApprovalRange","setArcTransferModeCapApprovalRange","chooseTypeCurrentRoot","setTypeCurrentRootApprovalRange","typeCurrents","chooseTypeCurrentFill","chooseTypeCurrentCap","setTypeCurrentFillApprovalRange","setTypeCurrentCapApprovalRange","setBaseMaterial1TestPiece","setBaseMaterial2TestPiece","removeBaseMaterial1TestPiece","removeBaseMaterial2TestPiece","searchBaseMaterialGroup","setBaseMaterial1ApprovalRange","sortedMaterials","setBaseMaterial2ApprovalRange","choosePreparationMethod","PREPARATION_METHODS_TESTPIECE","setProductTypeTestPiece","chooseWeldingThicknessRootLayerTestPiece","rootLayer","chooseWeldingThicknessFillLayerTestPiece","fillLayer","chooseWeldingThicknessCapLayerTestPiece","capLayer","setShieldingRoot","selection","setGasRoot","removeGasRoot","setGasRootApprovalRange","setShieldingRootGasCommercialDesignationTestPiece","gasDesignation","setShieldingRootGasMixture","setShieldingRootGasCommercialDesignationApprovalRange","setShieldingFillGasCommercialDesignationTestPiece","setShieldingFillGasMixture","setShieldingFillGasCommercialDesignationApprovalRange","setShieldingRootFluxCommercialDesignationTestPiece","setShieldingRootFluxCommercialDesignationApprovalRange","fluxes","setShieldingFillFluxCommercialDesignationTestPiece","setShieldingFillFluxCommercialDesignationApprovalRange","setFluxRoot","removeFluxRoot","setFluxRootApprovalRange","setShieldingFill","setGasFill","removeGasFill","setGasFillApprovalRange","setFluxFill","removeFluxFill","setFluxFillApprovalRange","setShieldingCap","setGasCap","removeGasCap","setGasCapApprovalRange","setFluxCap","removeFluxCap","setFluxCapApprovalRange","setShieldingCapGasCommercialDesignationTestPiece","setShieldingCapGasMixture","setShieldingCapGasCommercialDesignationApprovalRange","setShieldingCapFluxCommercialDesignationTestPiece","setShieldingCapFluxCommercialDesignationApprovalRange","setBacking","BACKING_TESTPIECE","BACKING_GAS_APPROVALRANGE","BACKING_GAS_COMMERCIAL_DESIGNATION_TESTPIECE","BACKING_GAS_MIXTURE","BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE","BACKING_FLUX_APPROVALRANGE","BACKING_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE","BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE","BACKING_FLOW_RATE_FILL","updateBackingGasApprovalRange","setBackingGasApprovalRange","setBackingGasCommercialDesignationTestPiece","setBackingGasMixture","setBackingGasCommercialDesignationApprovalRange","setBackingFluxApprovalRange","setBackingFluxCommercialDesignationTestPiece","setBackingFluxCommercialDesignationApprovalRange","setThicknessRootTestPiece","setThicknessFillTestPiece","setThicknessCapTestPiece","setThicknessTotalTestPiece","THROAT_THICKNESS_TESTPIECE","setThicknessRootMinimumApprovalRange","setThicknessRootMaximumApprovalRange","setThicknessFillMinimumApprovalRange","setThicknessFillMaximumApprovalRange","setThicknessCapMinimumApprovalRange","setThicknessCapMaximumApprovalRange","setThicknessTotalMinimumApprovalRange","setThicknessTotalMaximumApprovalRange","setDiameterTestPiece","setBranchAngleTestPiece","setDiameterMinimumApprovalRange","setDiameterMaximumApprovalRange","setBranchAngleMinimumApprovalRange","setBranchAngleMaximumApprovalRange","setFlowRateProcess1Min","setFlowRateProcess1Max","setFlowRateProcess2Min","setFlowRateProcess2Max","setFlowRateProcess3Min","setFlowRateProcess3Max","setFlowRateRoot","setFlowRateFill","setFlowRateCap","setBackingFlowRateRoot","setBackingFlowRateFill","setBackingFlowRateCap","BACKING_FLOW_RATE_CAP","setFillerMaterialRoot","removeFillerMaterialRoot","setFillerMaterialFill","setFillerMaterialCap","removeFillerMaterialFill","removeFillerMaterialCap","setFillerMaterialRootCommercialDesignationTestPiece","setFillerMaterialRootCommercialDesignationApprovalRange","commercialDesignations","setFillerMaterialFillCommercialDesignationTestPiece","setFillerMaterialCapCommercialDesignationTestPiece","setFillerMaterialFillCommercialDesignationApprovalRange","setFillerMaterialCapCommercialDesignationApprovalRange","setElectrodeType","setNumberOfElectrodes","setNumberOfElectrodesFill","setNumberOfElectrodesCap","setPulsedWeldingDetails","PULSED_WELDING_DETAILS","setWeaving","setContactTubeDistance","setBackGaugingDetails","BACK_GAUGING_DETAILS","setPreheatTemperatureTestPiece","setInterpassTemperatureTestPiece","setPostHeatTemperatureTestPiece","setPostWeldHeatTreatmentTimeTestPiece","setPostWeldHeatTreatmentTimeMinimumApprovalRange","setPostWeldHeatTreatmentTimeMaximumApprovalRange","setPostWeldHeatTreatmentTemperatureTestPiece","setPostWeldHeatTreatmentMethodTestPiece","POST_WELD_HEAT_TREATMENT_METHOD_TESTPIECE","removePostWeldHeatTreatmentMethodTestPiece","setPostWeldHeatTreatmentHeatingRateTestPiece","setPostWeldHeatTreatmentCoolingRateTestPiece","setPreheatTemperatureMinimumApprovalRange","setPreheatTemperatureMaximumApprovalRange","setInterpassTemperatureMinimumApprovalRange","setInterpassTemperatureMaximumApprovalRange","setPostHeatTemperatureMinimumApprovalRange","setPostHeatTemperatureMaximumApprovalRange","setPostWeldHeatTreatmentTemperatureMinimumApprovalRange","setPostWeldHeatTreatmentTemperatureMaximumApprovalRange","addNewWeldingParameter","newParameter","removeWeldingParameter","setTensileTestName","TENSILE_TEST_NAME","setTensileTestTemperature","addNewTensileLine","newLine","orderNum","addNewBendLine","lines","removeBendLine","setBendMandrillDiameter","BEND_TEST_MANDRILL_DIAMETER","setBendTestReport","BEND_TEST_REPORT","setMacroscopicExaminationTestReport","MACROSCOPIC_EXAMINATION_TEST_REPORT","setMacroscopicExaminationObservations","MACROSCOPIC_EXAMINATION_OBSERVATIONS","setImpactTestReport","setImpactTestRequired","setImpactTestType","setImpactTestDimensions","setImpactTestTemperature","addNewImpactLine","removeImpactLine","setHardnessTestReport","setHardnessTestRequired","setHardnessTestType","addNewHardnessLine","hardnessLines","HARDNESS_TEST_LINES","removeHardnessLine","setGrooveAngleMinimum","setGrooveAngleMaximum","setRootFaceMinimum","setRootFaceMaximum","setRootGapMinimum","setRootGapMaximum","setGrooveDesigns","setWeldLayerConfigurations","setTorchAngleMinimum","setTorchAngleMaximum","setSection","resetFillerMaterialRootCommercialDesignationOptions","resetFillerMaterialFillCommercialDesignationOptions","resetFillerMaterialCapCommercialDesignationOptions","setGasNozzleDiameterRoot","setGasNozzleDiameterFill","setGasNozzleDiameterCap","setProcessMecanizationRootTestPiece","setProcessMecanizationFillTestPiece","setProcessMecanizationCapTestPiece","setProcessMecanizationRootApprovalRange","setProcessMecanizationFillApprovalRange","setProcessMecanizationCapApprovalRange","setBaseMaterial1Thickness","setBaseMaterial1Diameter","setBaseMaterial2Thickness","setBaseMaterial2Diameter","requirements","SPECIAL_REQUIREMENTS","setWeldingPositionRootDirection","setWeldingPositionFillDirection","setWeldingPositionCapDirection","setPostHeatTimeTestPiece","POST_HEAT_TIME_TEST_PIECE","setPostHeatTimeMinimumApprovalRange","POST_HEAT_TIME_MINIMUM_APPROVAL_RANGE","setPostHeatTimeMaximumApprovalRange","POST_HEAT_TIME_MAXIMUM_APPROVAL_RANGE","setBaseMaterialsThickness","setBaseMaterialsDiameter","setBaseMaterial1ThicknessMinimumApprovalRange","setBaseMaterial1ThicknessMaximumApprovalRange","setBaseMaterial2ThicknessMinimumApprovalRange","setBaseMaterial2ThicknessMaximumApprovalRange","setBaseMaterialsThicknessMinimumApprovalRange","setBaseMaterialsThicknessMaximumApprovalRange","setFillerMaterialRootDiameter","firstDiameter","setFillerMaterialFillDiameter","setFillerMaterialCapDiameter","confirmArchivePQR","confirmUnarchivePQR","cancelArchive","cancelUnarchive","removePqrTaskFromContext","setAdvancedFields","setSectionScroll","generateReportAndScroll","generateReport","grooveName","layerName","setOverlayFillerMaterialFormRoot","WIRE","setOverlayFillerMaterialFormFill","setOverlayFillerMaterialFormCap","setDissimilarMaterials","dissimilarMaterials","FillerMaterialTest","rootColumnSize","fillColumnSize","OVERLAY_FILLER_MATERIAL_FORM","FillerMaterials","fillerMaterialSuggestions","peekRecord","fillerMaterialRootDiametersLabel","overlayFillerMaterialFormRoot","distance","STRIP","fillerMaterialFillDiametersLabel","overlayFillerMaterialFormFill","fillerMaterialCapDiametersLabel","overlayFillerMaterialFormCap","createFillerMaterialCommercialDesignation","designationName","actionName","designationSaved","successMessage","createFillerMaterialRootCommercialDesignation","createFillerMaterialFillCommercialDesignation","createFillerMaterialCapCommercialDesignation","formatDiameter","ModelPqrFlowRateDisplay","hasValue","hasOnlyOneValue","onlyValue","sameValues","HardnessNottest","hasMessages","messages","isSaved","isActionUnderWay","clearErrors","setError","clearMessages","setMessage","hardness","setBaseMetalHardnessNumber","setBaseMetalHardnessValue1","setBaseMetalHardnessValue2","setBaseMetalHardnessValue3","setHeatAffectedHardnessNumber","setHeatAffectedHardnessValue1","setHeatAffectedHardnessValue2","setHeatAffectedHardnessValue3","setDepositedMetalHardnessNumber","setDepositedMetalHardnessValue1","setDepositedMetalHardnessValue2","setDepositedMetalHardnessValue3","setHeatAffectedZone2HardnessNumber","setHeatAffectedZone2HardnessValue1","setHeatAffectedZone2HardnessValue2","setHeatAffectedZone2HardnessValue3","setBaseMetal2HardnessNumber","setBaseMetal2HardnessValue1","setBaseMetal2HardnessValue2","setBaseMetal2HardnessValue3","addNewLine","currentLine","isEditingLine","editLine","lineToDelete","removeMessages","removeLine","discardChanges","saveLine","ImpactNottest","calculateAverage","totalValues","average","setTestPieceLocation","setRequirements","setValue1Energy","setValue2Energy","setValue3Energy","setAverageEnergy","dir","listAllPQR","isThicknessSearchDisabled","disabledThicknessSearchTooltipText","getGridColumnLabel","certificateNumberLabel","weldTypeLabel","weldingProcessesLabel","diameterLabel","totalThicknessLabel","baseMaterialsLabel","postWeldHeatTreamentLabel","align","buildDecimalFilter","convertDecimals","buildPWHTFilter","pwhtPresence","pwhtTemp","postWeldHeatTreatmentTemperatureTestPiece","searchByBaseMaterial1Group","searchByBaseMaterial2Group","exportType","selectedDetails","detailsSerialized","specialRequirementOptionsSerialized","selectedProcessRoot","selectedProcessFill","selectedProcessCap","diameterDisplay","thicknessDisplay","selectedWeldingPositionRoot","selectedWeldingPositionFill","selectedWeldingPositionCap","heatInput","postWeldHeatTreament","thicknessRoot","thicknessRootDisplay","thicknessFill","thicknessFillDisplay","thicknessCap","thicknessCapDisplay","impactTemperature","hardnessRequirements","selectedFillerMaterialRoot","selectedFillerMaterialFill","throatThicknessDisplay","selectedPostWeldHeatTreament","selectedPostWeldHeatTreamentPresence","fillerMaterialGroupRootSearch","fillerMaterialGroupFillSearch","fillerMaterialGroupCapSearch","scrollToSearchResults","searchPQR","updateStandard","getWeldTypes","types","fillerMaterialRootChosen","fillerMaterialRootRemoved","fillerMaterialFillChosen","fillerMaterialFillRemoved","fillerMaterialCapChosen","fillerMaterialCapRemoved","setSelectedWeldType","column","sorted","ascending","setThicknessRoot","setThicknessFill","setThicknessCap","setThroatThickness","choosePQR","isNA","setSearchByMaterial1Group","setSearchByMaterial2Group","instanceCreated","history","back","setImpactTest","impactTest","NonDestructiveTestingTable","ProductTypeApprovalRangeHelp","PIPE","isISO","isASME","isStandardAWS","RootFillCapDisplay","allValues","allEqual","rootFillEqual","fillCapEqual","isPqrBothSides","isBothSides","labelRoot","showSequence","labelFill","labelCap","ShieldingBackingDetails","gasTestPiece","searchGasCommercialDesignationsByGases","fluxTextPiece","searchFluxCommercialDesignationsByFluxes","fetchGasRootCommercialDesignations","fetchGasFillCommercialDesignations","fetchGasCapCommercialDesignations","fetchFluxRootCommercialDesignations","fetchFluxCommercialDesignationOptions","fetchFluxFillCommercialDesignations","fetchFluxCapCommercialDesignations","fetchGasRootCommercialDesignationApprovalRangeOptions","fetchGasFillCommercialDesignationApprovalRangeOptions","fetchGasCapCommercialDesignationApprovalRangeOptions","fetchFluxRootCommercialDesignationApprovalRangeOptions","fetchFluxApprovalRangeCommercialDesignationOptions","fetchFluxFillCommercialDesignationApprovalRangeOptions","fetchFluxCapCommercialDesignationApprovalRangeOptions","fetchBackingGasCommercialDesignations","fetchGasCommercialDesignationOptions","fetchBackingFluxCommercialDesignations","fetchBackingGasCommercialDesignationApprovalRangeOptions","fetchGasApprovalRangeCommercialDesignationOptions","fetchBackingFluxCommercialDesignationApprovalRangeOptions","isGasRootCommercialDesignationTestPieceDisabled","disabled","isFluxRootCommercialDesignationTestPieceDisabled","isGasFillCommercialDesignationTestPieceDisabled","isFluxFillCommercialDesignationTestPieceDisabled","isGasCapCommercialDesignationTestPieceDisabled","isFluxCapCommercialDesignationTestPieceDisabled","isGasBackingCommercialDesignationTestPieceDisabled","isFluxBackingCommercialDesignationTestPieceDisabled","isAwsD11","_buildSuggestions","rootProperty","fillProperty","capProperty","A","gasSuggestions","fluxSuggestions","createGasCommercialDesignation","mixture","createFluxCommercialDesignation","resetGasRootCommercialDesignations","resetGasFillCommercialDesignations","resetGasCapCommercialDesignations","resetGasBackingCommercialDesignations","resetFluxRootCommercialDesignations","resetFluxFillCommercialDesignations","resetFluxCapCommercialDesignations","resetFluxBackingCommercialDesignations","resetGasCommercialDesignations","resetFluxCommercialDesignations","showCommercialDesignationSuccess","showCommercialDesignationError","searchFlux","findFlux","chooseShieldingGasRootTestPiece","gasRootChosen","chooseShieldingFluxRootTestPiece","fluxRootChosen","chooseShieldingGasRootApprovalRange","gasRootApprovalRangeChosen","chooseShieldingFluxRootApprovalRange","fluxRootApprovalRangeChosen","chooseShieldingGasFillTestPiece","gasFillChosen","chooseShieldingFluxFillTestPiece","fluxFillChosen","chooseShieldingGasFillApprovalRange","gasFillApprovalRangeChosen","chooseShieldingFluxFillApprovalRange","fluxFillApprovalRangeChosen","chooseShieldingGasCapTestPiece","gasCapChosen","chooseShieldingFluxCapTestPiece","fluxCapChosen","chooseShieldingGasCapApprovalRange","gasCapApprovalRangeChosen","chooseShieldingFluxCapApprovalRange","fluxCapApprovalRangeChosen","chooseBackingGasTestPiece","backingGasChosen","chooseBackingFluxTestPiece","backingFluxChosen","chooseBackingGasApprovalRange","backingGasApprovalRangeChosen","chooseBackingFluxApprovalRange","backingFluxApprovalRangeChosen","fluxOptions","searchFluxByCode","createShieldingRootGasCommercialDesignation","savedDesignation","updateGasRootCommercialDesignationTestPiece","createShieldingFillGasCommercialDesignation","updateGasFillCommercialDesignationTestPiece","createShieldingCapGasCommercialDesignation","updateGasCapCommercialDesignationTestPiece","createBackingGasCommercialDesignation","updateGasBackingCommercialDesignationTestPiece","createShieldingRootFluxCommercialDesignation","updateFluxRootCommercialDesignationTestPiece","createShieldingFillFluxCommercialDesignation","updateFluxFillCommercialDesignationTestPiece","createShieldingCapFluxCommercialDesignation","updateFluxCapCommercialDesignationTestPiece","createBackingFluxCommercialDesignation","updateFluxBackingCommercialDesignationTestPiece","TensileNottest","setDecimalValue","doRemoveTensileLine","ThermalParameters","postWeldTreatmentMethodOptions","hasPreHeat","preHeatActivated","preheatTemperatureTestPiece","preheatTemperatureMinimumApprovalRange","preheatTemperatureMaximumApprovalRange","hasPostHeat","postHeatActivated","postHeatTemperatureTestPiece","postHeatTemperatureMinimumApprovalRange","postHeatTemperatureMaximumApprovalRange","hasPWHT","pwhtActivated","postWeldHeatTreatmentTimeTestPiece","postWeldHeatTreatmentMethodTestPiece","postWeldHeatTreatmentHeatingRateTestPiece","postWeldHeatTreatmentCoolingRateTestPiece","postWeldHeatTreatmentTemperatureMinimumApprovalRange","postWeldHeatTreatmentTemperatureMaximumApprovalRange","postWeldHeatTreatmentTimeMinimumApprovalRange","postWeldHeatTreatmentTimeMaximumApprovalRange","checkPreHeat","updatePreheatTemperatureTestPiece","updatePreheatTemperatureMinimumApprovalRange","updatePreheatTemperatureMaximumApprovalRange","preHeatClasses","checkPostHeat","updatePostHeatTemperatureTestPiece","updatePostHeatTemperatureMinimumApprovalRange","updatePostHeatTemperatureMaximumApprovalRange","updatePostHeatTimeTestPiece","updatePostHeatTimeMinimumApprovalRange","updatePostHeatTimeMaximumApprovalRange","postHeatClasses","checkPWHT","updatePostWeldHeatTreatmentTemperatureTestPiece","updatePostWeldHeatTreatmentTemperatureMinimumApprovalRange","updatePostWeldHeatTreatmentTemperatureMaximumApprovalRange","updatePostWeldHeatTreatmentTimeTestPiece","updatePostWeldHeatTreatmentTimeMinimumApprovalRange","updatePostWeldHeatTreatmentTimeMaximumApprovalRange","updatePostWeldHeatTreatmentMethodTestPiece","updatePostWeldHeatTreatmentHeatingRateTestPiece","updatePostWeldHeatTreatmentCoolingRateTestPiece","pwhtClasses","ViewMode","somePropertyHasValue","temperatureUnit","distanceUnit","flowUnit","getFlowUnit","heatDistanceUnit","travelSpeedUnit","wireSpeedUnit","weldingDetailsTestPiece","sideType","showSingleBaseMaterialThickness","baseMaterial1ThicknessTestPiece","bm1tp","baseMaterial2ThicknessTestPiece","bm2tp","baseMaterial1ThicknessMinimumApprovalRange","bm1min","baseMaterial1ThicknessMaximumApprovalRange","bm1max","baseMaterial2ThicknessMinimumApprovalRange","bm2min","baseMaterial2ThicknessMaximumApprovalRange","bm2max","hasDiameterToShow","tp","diameterMinimumApprovalRange","diameterMaximumApprovalRange","pqrReportOutdated","pqrReportDocumentPath","reloadPQRWithData","passNumberLabel","weldingProcessLabel","fillerMaterialLabel","currentLabel","voltageLabel","onAfterResponsiveChange","matches","setEach","onAfterArchiveCallback","unarchivePQR","duplicatePQR","cancelConfirmdelete","onArchiveFromDeleteCallback","emptySearch","WELDING","WeldingParameter","WeldingParameters","observes","currentParameter","updateParameter","weldingLayerOptions","calculateLayerOptions","isCreatingNew","parameterObserver","isActionUnderway","parameterToDelete","hasObjectValue","calculateOptions","optionFill","optionCap","getFillerMaterialOverlayFillerMaterialForm","fillerMaterialAllOptions","fillerMaterialDiametersLabel","currentParameterForm","typeCurrentOptions","fillerMaterialLayer","currentParameterLayerForm","currentLayer","currentParameterLayerFormVisualLabel","layerForm","currentLayerForFillerMaterialDiameter","pqrParameter","updateHeatInputValues","updateParameterHeatInputMinimum","updateParameterHeatInputMaximum","chooseParameter","param","removeParameter","createNewParameter","setOrderNum","ORDER_NUM","setPassNumber","PASS_NUMBER","setCurrentMinimum","CURRENT_MINIMUM","setCurrentMaximum","CURRENT_MAXIMUM","setVoltageMinimum","VOLTAGE_MINIMUM","setVoltageMaximum","VOLTAGE_MAXIMUM","setTypeCurrent","TYPE_CURRENT","setWireFeedSpeedMinimum","WIRE_FEED_SPEED_MINIMUM","fromMeterMinuteToMilimeterSecond","setWireFeedSpeedMaximum","WIRE_FEED_SPEED_MAXIMUM","setTravelSpeedMinimum","TRAVEL_SPEED_MINIMUM","fromMilimeterMinuteToMilimeterSecond","setTravelSpeedMaximum","TRAVEL_SPEED_MAXIMUM","setHeatInputMinimum","HEAT_INPUT_MINIMUM","setHeatInputMaximum","HEAT_INPUT_MAXIMUM","setArcTransferMode","ARC_TRANSFER_MODE","setLayer","LAYER","FILLER_MATERIAL_DIAMETER","listAllProjectClients","findProjectClient","createClient","client","newClient","ProjectChooser","fetchInitialOptions","findProjects","ProjectComponentChooser","componentNumberAndNameMatcher","projectComponent","componentNumber","componentName","fetchProjectComponents","selectableComponents","fetchedComponentsProjectId","listAllProjectComponents","buildProjectSearchFilters","finalFilters","projectName","getProjectAttributeLabel","currentProjectPage","listAllProjects","projects","loadProjectsData","searchProject","clearFields","objectValidator","presence","createSpecialRequirement","createRequirement","requirement","savedRequirement","desc","bustStaffPositionCache","bustStaffCache","stagesSortedByDisplayOrder","stages","stagesArray","stageTests","stage","test","someInvalid","sortedStages","addTestStage","testStage","testInspection","removeTestStage","ModelTestLocationEditComponent","listAllTestLocations","findTestLocations","setInitialTestLocations","testLocations","createTest","newTestLocation","ModelTestStageNameEditComponent","listAllTestStageNames","findTestStageNames","setInitialTestStageNames","testStageNames","newTestStageName","CreateNotest","onRemove","InlineEdit","stageName","onRemoveStage","changeName","updateLocation","newTest","testName","removeStage","grooveDesignFromCopy","myWeldLayer","canCreateGrooveDesign","deleteLayer","cancelCreateGrooveDesign","confirmCreateGrooveDesign","arcLengthControl","possibleArcLength","WelderOperatorTypes","arcVoltageControlFromString","isPresent","arcLengthValue","possibleProcess","processFromString","testPieces","WelderCertificateTestPieceValues","automaticVoltageControl","AutomaticArcVoltageControl","WITH","WITHOUT","AutoRenewalStatus","refreshSupportingWelds","supportingWeldsRefreshed","DestructiveTests","findWelderByName","welderError","createCertificate","WELDER_CERTIFICATE","CERTIFICATE_REVALIDATION_TYPE","CERTIFICATE_INTERNAL_REVALIDATION_TYPE","INTERNAL","EXTERNAL","weldcloudNotesData","jobKnowledgeOptions","certificateStandard","currentIndustryCode","processMecanizationOptionsForOperators","processMecanizationsForWeldingOperators","certificateBaseMaterialGroupStandard","showValidationTab","showDetailsTab","isWelderOperatorCertificate","showSupplementaryFilletWeldTest","isWelderCertificate","isWeldingOperatorCertificate","canShowConsumablesTab","showConsumablesTab","showBaseMaterialsTab","showTestsTab","showRevalidationsTab","hasRevalidations","revalidations","hasCertificateDeleteErrors","certificateDeleteErrors","isCertificateASME","currentDay","isISO96061","productTypeOptionsCertificatesIso96061Options","isWelderStandardISO96061","diameterDisabled","isPlate","isExpired","isInternallyExpired","isExternallyExpired","isExpiringInternallyLess30Days","internalRequalificationDeadline","today","diff","isExpiringExternallyLess30Days","externalRequalificationDeadline","isExpiringInLessThan30Days","showInternalExpireButton","showExternalExpireButton","isSupplementaryFilletWeldTestNotChecked","supplementaryFilletWeldTestRequired","isSupplementaryFilletWeldTestDisabled","weldingProcessOptionsAll","weldTypeOptionsAll","arcTransferModeOptionsAll","weldingPositionOptionsAll","constructionStandardOptions","showWeldingDetailsParts","showBothBaseMaterials","certificateReportDocumentPath","isLayerSumBiggerThanTotal","isLayerSumLessThanTotal","getBelongsToId","canEditApprovalRange","canEditCertificateApprovalRange","relationName","belongsTo","getWeldingProcessShortDesignation","isArcTransferModeRootDisabled","isArcTransferModeFillDisabled","isArcTransferModeCapDisabled","certificateReportProgressTask","isExportingReport","hasErrorValidationsTab","hasErrorDetailsTab","hasErrorBaseMaterialsTab","hasErrorConsumablesTab","calculateErrorValidationsTab","calculateErrorsDetailsTab","isStandardWithExternalDates","isStandardOfTypeISO","externalDateHasAnyValue","requalificationPeriod","previousExternalRequalificationDate","showExternalRequalificationDate","showExternalRequalificationOverride","hasExportedPdfPath","allowedMultiplePositionsCertificates","internalRequalificationDisabled","externalRequalificationDisabled","isProcessMecanizationProcess1Automatic","isAutomatic","isProcessMecanizationProcess2Automatic","isProcessMecanizationProcess3Automatic","isOperatorWeldingDetailProcess1Disabled","isMechanized","isOperatorWeldingDetailProcess2Disabled","isOperatorWeldingDetailProcess3Disabled","updateElectrodeTypeRoot","updateElectrodeType","Process","PROCESS1","updateElectrodeTypeFill","PROCESS2","updateElectrodeTypeCap","PROCESS3","propertyTestPiece","propertyApprovalRange","electrode","testPieceValues","electrodeApprovalRange","updateThicknessRoot","updateWeldingThickness","updateThicknessFill","updateThicknessCap","updateThicknessTotal","propertyApprovalRangeMin","propertyApprovalRangeMax","updateAllThickness","updateWeldTypes","updateWeldType","updateWeldingPositionsRoot","updateWeldingPositionApprovalRange","updateWeldingPositionsFill","updateWeldingPositionsCap","updateAllWeldingPositions","updateFillerMaterialGroupRoot","updateFillerMaterialGroup","updateFillerMaterialGroupFill","updateFillerMaterialGroupCap","updateInternalRequalificationDeadline","internalDeadline","updateExternalRequalificationDate","externalDeadline","updateArcTransferModeRoot","updateArcTransferMode","updateArcTransferModeFill","updateArcTransferModeCap","modesApprovalRange","mode","updateWeldingDetails","detailsApprovalRange","updateBaseMaterial1","updateBaseMaterialGroups","updateBaseMaterial2","testPieceProperty","baseMaterialGroupsApprovalRange","updateWeldingProcessRootApprovalRange","updateWeldingProcessFillApprovalRange","updateWeldingProcessCapApprovalRange","updateDiameter","thicknessTestPiece","_model","_options","clearCacheAll","removeFillerMaterialRootVariables","removeElectrodeTypeRoot","removeFillerMaterialFillVariables","removeElectrodeTypeFill","removeFillerMaterialCapVariables","removeElectrodeTypeCap","deleteCertificate","formatLastWeldingDate","reloadCertificate","loadAllDataWPQ","savePendingCertificateChanges","searchWelderCertificate","weldcloudData","getMachineNameById","reloadedCertificate","replaceCertificate","saveCertificate","duplicateCertificate","afterDuplicateCertificate","showConfirmArchive","REGULAR","report1","report2","weldingDate","report1Id","report2Id","validateInternally","ndtReport1","ndtReport2","lastWeldingDate","revalidateCertificateInternallyAction","showConfirmRevalidateInternally","reloadCertificateTask","getErrorCode","CERTIFICATE_INTERNAL_DEADLINE_AFTER_EXTERNAL_DEADLINE","errorData","getErrorDetail","showInternalRevalidationSurpassesExternalDeadlineSingle","validateExternally","certificateId","WopqApprovalRange","WpqApprovalRange","updateMachineName","welderCompany","currentCompany","searchWelderByStamp","searchWelderByName","setInternalRequalificationDate","isWelderStandardISO96062","setPreviousExternalRequalificationDate","extendedTimeOut","setWeldingProcessRootTestPiece","setWeldingProcessFillTestPiece","setWeldingProcessCapTestPiece","setWeldTypeTestPiece","setSupplementaryFilletWeldTest","setSupplementaryFilletWeldTestRequired","setArcTransferModeRootTestPiece","setArcTransferModeFillTestPiece","setArcTransferModeCapTestPiece","processMecanization","_value","setWeldingDetailTestPiece","setWeldingPositionRootTestPiece","setWeldingPositionFillTestPiece","setWeldingPositionCapTestPiece","setTypeCurrentRootTestPiece","setTypeCurrentFillTestPiece","setTypeCurrentCapTestPiece","searchFillerMaterialGroup","setThicknessRootLayerTestPiece","setThicknessFillLayerTestPiece","setThicknessCapLayerTestPiece","setFillerMaterialRootTestPiece","removeFillerMaterialRootTestPiece","setFillerMaterialFillTestPiece","setFillerMaterialCapTestPiece","removeFillerMaterialFillTestPiece","removeFillerMaterialCapTestPiece","setElectrodeTypeRootTestPiece","setElectrodeTypeFillTestPiece","setElectrodeTypeCapTestPiece","setShieldingRootGasTestPiece","removeShieldingRootGasTestPiece","setShieldingRootFluxTestPiece","removeShieldingRootFluxTestPiece","setShieldingFillGasTestPiece","removeShieldingFillGasTestPiece","setShieldingFillFluxTestPiece","removeShieldingFillFluxTestPiece","setShieldingCapGasTestPiece","removeShieldingCapGasTestPiece","setShieldingCapFluxTestPiece","removeShieldingCapFluxTestPiece","setBackingTestPiece","setBackingGasTestPiece","removeBackingGasTestPiece","setBackingFluxTestPiece","removeBackingFluxTestPiece","setFillerMaterialRootApprovalRange","setFillerMaterialFillApprovalRange","setFillerMaterialCapApprovalRange","setElectrodeTypeRootApprovalRange","setElectrodeTypeFillApprovalRange","setElectrodeTypeCapApprovalRange","onSectionSelect","latestInternalRevalidation","getLatestRevalidation","internalRevalidations","latestExternalRevalidation","externalRevalidations","from","aDate","getRevalidationDateValue","bDate","revalidation","dateOfRevalidation","selectReportEvidence1","currentRevalidation","selectReportEvidence2","setCurrentEvidence1","isAddingReport1","closeEvidenceReport1Modal","setCurrentEvidence2","isAddingReport2","closeEvidenceReport2Modal","confirmRemoveReport1","isRemovingReport1","cancelRemoveReport1","removeReport1","confirmRemoveReport2","confirmDeleteRevalidation","revalidationToDelete","isDeletingRevalidation","closeDeleteRevalidation","cancelRemoveReport2","removeReport2","deleteRevalidation","saveWelderCertificate","deleteWelderCertificate","confirmArchiveCertificate","confirmUnarchiveCertificate","showConfirmUnarchive","cancelInternalDeadlineOverExternal","showConfirmRevalidateInternallyFromInternal","showConfirmRevalidateExternallyFromInternal","confirmValidateExternal","cancelValidateInternal","cancelValidateExternal","confirmValidateInternal","removeCertificateTaskFromContext","onRemoveMachine","remoteWeldingUnitDisplayName","jointTracking","tracking","jointTrackingFromString","trackingValue","automaticJointTracking","AutomaticJointTracking","ModelWelderCertificateNew","isWelderOperator","createButtonText","NonDestructiveTests","ProductTypeApprovalRange","isPipe","isPipePlate","PIPE_PLATE","isOperatorApprovalRange","isWelderStandardAWSD11","notOverlayWeld","isAWSD15","isAWSB21","isStandardAWSB21","showBaseMaterialThickness","isIsoStandard","baseMaterial1ApprovalRange","baseMaterial1TestPiece","CertificateBaseMaterialRules","isSteelAndNickelAlloys","isAluminiumAlloys","isTitaniumAndZirconiumAlloys","g","baseMaterial2ApprovalRange","baseMaterial2TestPiece","weldingDetailTestPiece","visualControl","visualControlFromString","visualValue","VisualControl","DIRECT","REMOTE","weldingOperatorDetailFromString","detailValue","weldingDetailsForOperator","WeldingOperatorSpecificWeldingDetails","ARC","JOINT","NONE","showCertificatesTab","showMiscellaneousTab","welderReportPath","hasCertificateErrors","welderReportErrors","hasCertificateError","welderReportError","columnsCertificates","weldingPositionsLabel","weldingDetailsLabel","welderLinkWeldCloud","generateWelderLink","pageNumberCertificates","showExpiredCertificates","showArchivedCertificates","listAllWelderCertificates","welderCertificates","welderCertificateCount","miscellaneousCertificates","miscellaneousCertificateCount","fetchWelderCertificates","searchCertificates","setShowExpiredCertificates","setShowArchivedCertificates","generateWelderReport","createWelderReport","finishWelderReportGeneration","createWelderCertificate","newCertificate","savedCertificate","isCreatingWelderCertificate","showCreateWelderCertificate","WelderLookup","searchWelder","findWelder","personType","bustWeldingBookStatusCache","ModelWeldingBookWeldDisplayBaseMaterialThickness","hasWeldThickness1","weld","hasWeldThickness2","hasWeldDiameter1","hasWeldDiameter2","hasSecondBaseMaterial","baseMaterial2ThicknessMinimum","baseMaterial2ThicknessMaximum","inspection","ndtOptions","nonDestructiveTestOptions","saveInspection","WELDING_PROCEDURE_SPECIFICATION","WPSRules","ChooseWpsWeld","BASE_MATERIAL1","baseMaterial1Instance","BASE_MATERIAL2","baseMaterial2Instance","WELD_TYPE","postWeldHeatTreatmentTime","postWeldHeatTreatment","WELDING_PROCESS_ROOT","WELDING_PROCESS_FILL","WELDING_PROCESS_CAP","WPS_NUMBER","plusProjectWps","FILLER_MATERIAL_ROOT","FILLER_MATERIAL_FILL","FILLER_MATERIAL_CAP","selectedFillerMaterialCap","FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION","selectedFillerMaterialRootCommercialDesignation","FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION","selectedFillerMaterialFillCommercialDesignation","FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION","selectedFillerMaterialCapCommercialDesignation","findProjectWPSsOnly","wpsSearchType","weldingBook","listAllWeldingProcedureSpecifications","showSelectMasterWps","currentWeldType","currentBaseMaterial1Thickness","currentBaseMaterial1Diameter","currentBaseMaterial2Thickness","currentBaseMaterial2Diameter","currentPwhtTemperature","postWeldHeatTreatmentTemperatureMinimum","postWeldHeatTreatmentTemperatureMaximum","currentPwhtTime","postWeldHeatTreatmentTimeMinimum","postWeldHeatTreatmentTimeMaximum","isRevisionListDisabled","hasDifferentBaseMaterial1","hasDifferentBaseMaterial2","hasDifferentWeldType","hasDifferentPwhtTemperature","hasDifferentPwhtTime","hasDifferentPreHeat","updateDimensionToMinimumValue","property1","property2","targetPropery","value1","value2","Infinity","chooseWps","selectedWpsIsDifferentFromSearchValues","pwhtMin","pwhtMax","pwhtTimeMin","pwhtTimeMax","preheatTemperatureMinimum","preHeatMin","preheatTemperatureMaximum","preHeatMax","selectedBaseMaterial1","selectedBaseMaterial2","confirmWpsCanBeChosen","wpsItem","searchWps","setBaseMaterial1Search","setBaseMaterial2Search","removeBaseMaterial1Search","removeBaseMaterial2Search","setPwhtTime","setPwhtTemperature","setBaseMaterial1ThicknessWPSChoose","setBaseMaterial1DiameterWPSChoose","setBaseMaterial2ThicknessWPSChoose","setBaseMaterial2DiameterWPSChoose","confirmCreateProjectWps","cancelProjectSpecificWps","cancelProjectSpecificWpsFromMasterWPS","confirmWpsCreate","masterWps","wpsOptions","hasBaseMaterial1","hasBaseMaterial1Thickness","hasBaseMaterial1Diameter","hasBaseMaterial2","hasBaseMaterial2Thickness","hasBaseMaterial2Diameter","hasPwhtTemperature","hasPwhtTime","createForProject","chooseMasterWps","resetSearchResults","setCurrentPwhtPresence","fillerMaterialRootCommercialDesignationChosen","fillerMaterialFillCommercialDesignationChosen","fillerMaterialCapCommercialDesignationChosen","setFindProjectWPSsOnly","EditDrawing","components","projectComponents","loadWeldingBookWelds","welds","weldingBookWelds","selectedWeldsToCopy","selectedComponent","manuallySelectedComponent","shouldCopyOnlySelectedWelds","weldsToCopyOption","checkComponentWelds","component","componentWelds","listAllProjectWelds","weldsCount","showComponentHasWeldsWarning","copyWeldsToProject","componentErrors","copyType","duplicatedBook","projectComponentUrl","createNewComponent","createdComponent","newProjectComponentName","isShowingNewComponentCreating","removeDrawing","isShowingDeleteConfirmation","drawingToBeDeleted","confirmRemoveDrawing","EditWeld","currentRevision","revisionsDisabled","isDeletingInspection","currentInspectionToDelete","afterCreateWps","validateChanges","grade1","grade2","setWpsRevision","addInspection","newInspection","currentInspection","inspectionLabel","cancelEditInspection","deleteInspection","WELDING_BOOK","PROJECT","ProjectAttributes","WPS_INCLUSION","INCLUDE_UPLOADED","GENERATE_PDF","processedRevisions","canBeDeleted","active","verifiedBy","approvedBy","revisionsCache","projectId","weldingBookId","archivalState","weldingBookExtraWps","weldsCurrentPage","weldsPageSize","weldsTotalCount","archiveWeldingBook","reloadWeldingBook","book","revisionIdToDelete","revisionToDelete","bookId","deleteRevision","fetchRevisionsTask","isShowingDeleteRevisionModal","canCreateWeldingBook","isVerified","isApproved","canEditWeldingBookProject","loadWelds","maxWeldOrderNumber","weldsWithWps","existingWps","wpsList","canAssignStaffWPS","shouldShowWeldEdit","currentlyEditingWeld","weldIdToEdit","canChangeApprovedByDate","isApprovedOrVerified","approvedById","verifiedById","canChangeVerifiedByDate","canEditWeldingBook","weldingBookProgressTask","pdfReportError","errorType","internalId","documentName","documentId","isGeneratingWeldingBook","WELDING_PROJECT","REVISION","REVISION_DATE","WELDER_STANDARD","SUPPLIER","clearNonSavedWelds","hasMany","WELDS","tracker","savedWeldingBook","padLeft","n","designationDisabled","hasFeature","fetchNewName","loadSectionData","setProject","setRevision","setRevisionStatus","REVISION_STATUS","setCustomer","CUSTOMER","setSupplier","setWelderStandard","setJobDescription","JOB_DESCRIPTION","setRevisionDate","WRITTEN_BY","setVerifiedBy","VERIFIED_BY","setApprovedBy","APPROVED_BY","setWrittenByDate","WRITTEN_BY_DATE","setVerifiedByDate","VERIFIED_BY_DATE","setApprovedByDate","APPROVED_BY_DATE","setStatus","STATUS","setNotes","NOTES","setIncludePQR","INCLUDE_PQRS","setWeldingProject","setComponent","COMPONENT","loadPqrForWelds","loadPqrForExtraWps","selectWPS","pqrs","generateWeldingBook","weldingBookWpsErrors","weldingBookPqrErrors","createBook","finishWeldingBookGeneration","cancelRevision","createNewRevision","savedBook","selectDrawing","componentDrawings","isAddingDrawing","deleteDrawing","goToRevision","navigateToRevision","addWeld","Number","isFinite","newOrderNumber","newWeldNumber","newWeld","weldNumber","confirmRemoveWeld","removeWeld","stopEditingWeld","cancelRemoveWeld","editWeld","updateRevision","updateRevisionId","newDesignation","verifyBook","isError","MISSING_STAFF","approveBook","revokeBook","revokeApproval","savedWeld","cancelNewWeld","includeWpsPdf","TYPE_OF_WPS_INCLUSION","generateWpsPdf","confirmArchiveWeldingBook","confirmUnarchiveWeldingBook","toggleShowConfirmVerify","showConfirmVerify","toggleShowConfirmApprove","showConfirmApprove","toggleShowConfirmRevoke","showConfirmRevoke","showDeleteRevisionModal","hideDeleteRevisionModal","removeWeldingBookTaskFromContext","duplicateWeldingBook","newProject","selectedProject","newComponent","newWrittenByDate","showConfirmDuplicate","newWrittenByDateErrors","newDesignationErrors","newProjectErrors","weldingBookProject","weldingBookProjectComponent","WeldingBookAttributes","stepInitial","wizardSection","stepChooseProject","stepCreateProject","stepChooseComponent","stepCreateWeldingBook","setProjectValues","moveToCreateWeldingBookSection","selectProjectLink","createProjectLink","selectProject","selectComponent","selectSupplier","saveWeldingBook","moveToCreateWeldingBook","createdProject","cancelCreateProject","createComponent","componentSaved","skipComponent","CreateProject","setProjectName","PROJECT_NAME","saveProject","projectSaved","createProjectClient","showWhenCreateClient","clients","suggestClient","EditForm","cancelWeldingBookInternal","hideCancelModal","LookupComponent","Revision","UpdateRevision","updateDesignation","updateRevisions","WELDING_MAP","CertificateMap","canCreateQMatrix","qmatrix","baseMaterialDisabled","standardName","fieldsDisabled","_searchWelder","setCertificateStandard","CERTIFICATE_STANDARD","setCertificateExaminingBody","CERTIFICATE_EXAMINING_BODY","setCertificateWeldType","CERTIFICATE_WELD_TYPE","CERTIFICATE_OVERLAY_TYPE","setCertificateWeldingProcessRoot","CERTIFICATE_WELDING_PROCESS_ROOT","setCertificateWeldingProcessFill","CERTIFICATE_WELDING_PROCESS_FILL","setCertificateWeldingProcessCap","CERTIFICATE_WELDING_PROCESS_CAP","setCertificateWeldingDetails","CERTIFICATE_WELDING_DETAILS","setCertificateBaseMaterial1Group","CERTIFICATE_BASE_MATERIAL1_GROUP","setCertificateBaseMaterial2Group","CERTIFICATE_BASE_MATERIAL2_GROUP","setCertificateFillerMaterialGroupRoot","CERTIFICATE_FILLER_MATERIAL_GROUP_ROOT","setCertificateFillerMaterialGroupFill","CERTIFICATE_FILLER_MATERIAL_GROUP_FILL","setCertificateFillerMaterialGroupCap","CERTIFICATE_FILLER_MATERIAL_GROUP_CAP","setCertificateWelders","CERTIFICATE_WELDERS","setCertificateWeldingPositionRoot","CERTIFICATE_WELDING_POSITION_ROOT","setCertificateWeldingPositionFill","CERTIFICATE_WELDING_POSITION_FILL","setCertificateWeldingPositionCap","CERTIFICATE_WELDING_POSITION_CAP","setCertificateSpecialRequirements","CERTIFICATE_SPECIAL_REQUIREMENTS","setCertificateOverlayType","setCertificateSearchExpired","CERTIFICATE_SEARCH_EXPIRED","generateMap","noPieces","retrieveAllRelations","relations","json","convertToJSON","generateCertificateMap","generateWelderMap","chooseCertificateMap","isIndexRoute","isPQRMapRoute","isCertificateMapRoute","isWPSMapRoute","savedWeldingMap","setMapDate","MAP_DATE","PqrMap","searchFillerMaterialRootGroupDisabled","PQR_FILLER_MATERIAL_ROOT","searchFillerMaterialFillGroupDisabled","PQR_FILLER_MATERIAL_FILL","searchFillerMaterialCapGroupDisabled","PQR_FILLER_MATERIAL_CAP","setPropertyIfEmpty","valueId","setPqrStandard","PQR_STANDARD","PQR_POST_WELD_HEAT_TREATMENT_PRESENCE","PQR_POST_WELD_HEAT_TREATMENT_TEMPERATURE","PQR_WELDING_PROCESS_ROOT","PQR_WELDING_PROCESS_FILL","PQR_WELDING_PROCESS_CAP","PQR_WELD_TYPE","PQR_WELDING_POSITION_ROOT","PQR_WELDING_POSITION_FILL","PQR_WELDING_POSITION_CAP","PQR_BASE_MATERIAL1_GROUP","PQR_BASE_MATERIAL2_GROUP","PQR_OVERLAY_TYPE","WPS_STANDARD","setPqrExaminingBody","PQR_EXAMINING_BODY","setPqrWeldType","WPS_WELD_TYPE","setPqrWeldingProcessRoot","WPS_WELDING_PROCESS_ROOT","setPqrWeldingProcessFill","WPS_WELDING_PROCESS_FILL","setPqrWeldingProcessCap","WPS_WELDING_PROCESS_CAP","setPqrWeldingDetails","PQR_WELDING_DETAILS","setPqrBaseMaterial1Group","setPqrBaseMaterial2Group","setPqrFillerMaterialRoot","removePqrFillerMaterialRoot","PQR_SEARCH_FILLER_MATERIAL_ROOT_GROUP","setPqrFillerMaterialFill","removePqrFillerMaterialFill","PQR_SEARCH_FILLER_MATERIAL_FILL_GROUP","setPqrFillerMaterialCap","removePqrFillerMaterialCap","PQR_SEARCH_FILLER_MATERIAL_CAP_GROUP","setPqrFillerMaterialGroupRoot","PQR_FILLER_MATERIAL_GROUP_ROOT","setPqrFillerMaterialGroupFill","PQR_FILLER_MATERIAL_GROUP_FILL","setPqrHeatInput","PQR_HEAT_INPUT","setPqrPreheatTemperature","PQR_PREHEAT_TEMPERATURE","setPqrPostWeldHeatTreatmentTemperature","setPqrImpactTestTemperature","PQR_IMPACT_TEST_TEMPERATURE","setPqrHardnessTestRequired","PQR_HARDNESS_TEST_REQUIRED","setPqrSearchFillerMaterialRootGroup","setPqrSearchFillerMaterialFillGroup","setPqrSearchFillerMaterialCapGroup","setPqrThroatThickness","PQR_THROAT_THICKNESS","setPqrSpecialRequirements","PQR_SPECIAL_REQUIREMENTS","setPqrOverlayType","setPqrWeldingPositionRoot","setPqrWeldingPositionFill","setPqrWeldingPositionCap","generatePQRMap","setPqrPostWeldHeatTreatmentTemperaturePresence","setPqrSearchByWeldedThickness","PQR_SEARCH_BY_WELDED_THICKNESS","WPS_TYPE","WpsMap","WPS_FILLER_MATERIAL_ROOT","WPS_FILLER_MATERIAL_FILL","WPS_FILLER_MATERIAL_CAP","_searchWPS","searchWPS","setWpsStandard","WPS_POST_WELD_HEAT_TREATMENT_PRESENCE","WPS_POST_WELD_HEAT_TREATMENT_TEMPERATURE","setWpsWeldType","WPS_OVERLAY_TYPE","setWpsWeldingProcessRoot","setWpsWeldingProcessFill","setWpsWeldingProcessCap","setWpsWeldingDetails","WPS_WELDING_DETAILS","setWpsBaseMaterial1Group","WPS_BASE_MATERIAL1_GROUP","setWpsBaseMaterial2Group","WPS_BASE_MATERIAL2_GROUP","setWpsFillerMaterialRoot","removeWpsFillerMaterialRoot","WPS_SEARCH_FILLER_MATERIAL_ROOT_GROUP","setWpsFillerMaterialFill","removeWpsFillerMaterialFill","WPS_SEARCH_FILLER_MATERIAL_FILL_GROUP","setWpsFillerMaterialCap","removeWpsFillerMaterialCap","WPS_SEARCH_FILLER_MATERIAL_CAP_GROUP","setWpsHeatInput","WPS_HEAT_INPUT","setWpsPreheatTemperature","WPS_PREHEAT_TEMPERATURE","setWpsPostWeldHeatTreatmentTemperature","setWpsWeldingProcedureSpecifications","WPS_WELDING_PROCEDURE_SPECIFICATIONS","setWpsSearchFillerMaterialRootGroup","setWpsSearchFillerMaterialFillGroup","setWpsSearchFillerMaterialCapGroup","setWpsThroatThickness","WPS_THROAT_THICKNESS","setWpsSpecialRequirements","WPS_SPECIAL_REQUIREMENTS","setWpsOverlayType","wpsType","PRIMARY","generateWPSMap","generatePreliminaryWpsMap","PRELIMINARY","setWpsPostWeldHeatTreatmentTemperaturePresence","setWpsSearchByWeldedThickness","WPS_SEARCH_BY_WELDED_THICKNESS","chooseWpsMap","AddNewLinkedParameter","pqrFirstId","mainPqr","pqrSecondId","multiplePositionPqrRoot","firstPqr","secondPqr","selectedLayer","processName","isAdvancedWPS","passesOfLayer","passesToChoose","isPcPlusPfPosition","multiplePositionPqr","textMessage","pqrLabel","weldNoteData","setupButtonLabels","loadPasses","chooseFirst","chooseSecond","CertificateFromPwps","source","hasNoProcesses","rootId","fillId","capId","thicknessColumnSize","isRequalificationPeriodRequired","requalificationColumnSize","ranges","thicknessMinimum","thicknessMaximum","diameterMinimum","diameterMaximum","thicknessRootMinimum","thicknessRootMaximum","thicknessFillMinimum","thicknessFillMaximum","thicknessCapMinimum","thicknessCapMaximum","weldingPositionsRoot","weldingPositionsFill","weldingPositionsCap","setRequired","validateRequiredFields","weldingPositionRoot","weldingPositionFill","weldingPositionCap","validateNumericFields","numericNumberError","period","validateThicknessForLayers","welded","validateDimensions","getOwnPropertyNames","generic","getValueOrEmpty","examiningBody","isWelderStandardNotSupported","archiveWPS","DuplicateModal","convertToStandardWps","duplicateWps","newWps","setWpsNumber","setConvertToStandardWps","checked","bool","_dec92","_dec93","_dec94","_dec95","_dec96","_dec97","_dec98","_dec99","_dec100","_dec101","_dec102","_dec103","_dec104","_dec105","_dec106","_dec107","_dec108","_dec109","_dec110","_dec111","_dec112","_dec113","_dec114","_dec115","_dec116","_dec117","_dec118","_dec119","_dec120","_dec121","_dec122","_dec123","_dec124","_dec125","_dec126","_dec127","_dec128","_dec129","_dec130","_dec131","_dec132","_dec133","_dec134","_dec135","_dec136","_dec137","_dec138","_dec139","_dec140","_dec141","_dec142","_dec143","_dec144","_dec145","_dec146","_dec147","_dec148","fetchProjectsOfWps","clientUnitSystem","fetchWeldsOfWps","_collectDirtyPasses","reloadedWPS","loadAllDataWPS","_saveDirtyPasses","isVerifiedOrApproved","validateWpsAndPasses","showConfirmSaveWithError","saveWPS","generateExportPdf","monitorTask","downloadPdf","onAfterSaveWithError","fetchProjectWps","findProject","_saveWeldingParameter","passNumber","moveSectionWithSaveWithoutSave","reloadWps","canWpsBeDeleted","currentWpsId","autoScroll","fillerMaterialColumnSize","baseMaterialColumnSize","isPreliminary","wpsLinkWeldCloud","generateWpsLink","guid","canShowSaveButton","weldingProcessDisabled","previousRoute","previousRouteLabel","wpsTitle","isPrequalified","wpsIsOfCodeAWS","isStandardOfTypeAWS","showStandardWpsButton","showDimensionsPanel","canAddLinkedParameter","isLinkedToPQR","isCreateQualificationDisabled","typeOfLayerIncorrect","isSingleLayer","isMultiLayer","hasBothThicknessMinimum","hasBothThicknessMaximum","showLinkToProject","isMultiplePqr","rootPqrId","fillPqrId","capPqrId","isSinglePqr","wpsPdfProgressTask","wpsJointType","showPreHeatPresenceMessage","validator","PREHEAT_TEMPERATURE_MINIMUM","PREHEAT_TEMPERATURE_MAXIMUM","isPreheatMinimumPresenceValid","isPreheatMaximumPresenceValid","preHeatPresenceErrorMessage","minMessage","preheatMinimumPresenceInvalidMessage","maxMessage","preheatMaximumPresenceInvalidMessage","showPostHeatPresenceMessage","POST_HEAT_TEMPERATURE_MINIMUM","POST_HEAT_TEMPERATURE_MAXIMUM","isPostHeatMinimumPresenceValid","isPostHeatMaximumPresenceValid","postHeatPresenceErrorMessage","postHeatMinimumPresenceInvalidMessage","postHeatMaximumPresenceInvalidMessage","showPWHTPresenceMessage","POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM","POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM","isPWHTMinimumPresenceValid","isPWHTMaximumPresenceValid","pwhtPresenceErrorMessage","pWHTMinimumPresenceInvalidMessage","pWHTMaximumPresenceInvalidMessage","WELDING_DETAILS","PROCESS_MECANIZATION_ROOT","PROCESS_MECANIZATION_FILL","PROCESS_MECANIZATION_CAP","TYPE_CURRENT_ROOT","TYPE_CURRENT_FILL","TYPE_CURRENT_CAP","POST_WELD_HEAT_TREATMENT_TIME_MINIMUM","POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM","POST_WELD_HEAT_TREATMENT_HEATING_RATE","POST_WELD_HEAT_TREATMENT_COOLING_RATE","INTERPASS_TEMPERATURE_MINIMUM","INTERPASS_TEMPERATURE_MAXIMUM","POST_HEAT_TIME_MINIMUM","POST_HEAT_TIME_MAXIMUM","WELDING_POSITIONS_ROOT","WELDING_POSITIONS_FILL","WELDING_POSITIONS_CAP","BRANCH_ANGLE_MINIMUM","BRANCH_ANGLE_MAXIMUM","DIAMETER_MINIMUM","DIAMETER_MAXIMUM","THICKNESS_MINIMUM","THICKNESS_MAXIMUM","THICKNESS_ROOT_MINIMUM","THICKNESS_ROOT_MAXIMUM","THICKNESS_FILL_MINIMUM","THICKNESS_FILL_MAXIMUM","THICKNESS_CAP_MINIMUM","THICKNESS_CAP_MAXIMUM","BASE_MATERIAL1_THICKNESS_MINIMUM","BASE_MATERIAL1_THICKNESS_MAXIMUM","BASE_MATERIAL2_THICKNESS_MINIMUM","BASE_MATERIAL2_THICKNESS_MAXIMUM","BACKING","SHIELDING_ROOT_GAS","SHIELDING_FILL_GAS","SHIELDING_CAP_GAS","BACKING_GAS","SHIELDING_ROOT_FLUX","SHIELDING_FILL_FLUX","SHIELDING_CAP_FLUX","BACKING_FLUX","SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION","SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION","SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION","BACKING_FLUX_COMMERCIAL_DESIGNATION","THROAT_THICKNESS_MINIMUM","THROAT_THICKNESS_MAXIMUM","showProjectWpsTab","hasRevisions","postHeatTemperatureMinimum","postHeatTemperatureMaximum","postWeldHeatTreatmentMethod","postWeldHeatTreatmentHeatingRate","postWeldHeatTreatmentCoolingRate","isHeatingRateDifferent","wpsRate","pqrRate","isCoolingRateDifferent","showWeldedLabel","translateDimension","weldedProperty","regularProperty","labelThicknessMin","labelThicknessMax","labelDiameterMin","labelDiameterMax","isFillerMaterialRootSelected","fillerMaterialRoot","isFillerMaterialFillSelected","fillerMaterialFill","isFillerMaterialCapSelected","fillerMaterialCap","_searchPQR","updateWeldingParametersProcess","oldProcess","newProcess","validateFields","fetchAllRelations","SECONDARY_PQRS","positionsRoot","positionsFill","positionsCap","weldLayers","PREPARATION_METHODS","resetTabState","ARC_TRANSFER_MODE_ROOT","ARC_TRANSFER_MODE_FILL","ARC_TRANSFER_MODE_CAP","calculateDiameterFromBaseMaterials","bm1Diameter","bm2Diameter","deleteWPS","singleRevision","setMainPqr","MAIN_PQR","copyFromPQR","currentDetails","getPQR","applyThicknessFromPQR","setWeldingProcessRoot","setWeldingProcessFill","setWeldingProcessCap","setThicknessMinimum","setThicknessMaximum","setDiameterMinimum","setDiameterMaximum","setWeldingPositionsRoot","setWeldingPositionsFill","setWeldingPositionsCap","setFillerMaterialRootCommercialDesignation","setFillerMaterialFillCommercialDesignation","setFillerMaterialCapCommercialDesignation","setShieldingRootGas","SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION","removeShieldingRootGas","setShieldingRootGasCommercialDesignation","setShieldingRootFlux","removeShieldingRootFlux","setShieldingRootFluxCommercialDesignation","setShieldingFillGas","SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION","removeShieldingFillGas","setShieldingFillGasCommercialDesignation","setShieldingFillFlux","removeShieldingFillFlux","setShieldingFillFluxCommercialDesignation","setShieldingCapGas","SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION","removeShieldingCapGas","setShieldingCapGasCommercialDesignation","setShieldingCapFlux","removeShieldingCapFlux","setShieldingCapFluxCommercialDesignation","BACKING_GAS_COMMERCIAL_DESIGNATION","setBackingGasCommercialDesignation","setBackingFluxCommercialDesignation","setPostWeldHeatTreatmentTimeMinimum","setPostWeldHeatTreatmentTimeMaximum","setPostWeldHeatTreatmentMethod","POST_WELD_HEAT_TREATMENT_METHOD","setPostWeldHeatTreatmentHeatingRate","setPostWeldHeatTreatmentCoolingRate","setWeldingParameters","addNewParameter","newParam","addNewLinkedParameter","createLinkedParameter","pqrPass","newLinkedPass","currentMinimum","currentMaximum","voltageMinimum","voltageMaximum","wireFeedSpeedMinimum","wireFeedSpeedMaximum","travelSpeedMinimum","travelSpeedMaximum","heatInputMinimum","heatInputMaximum","additionalData","program","parametersToCopy","fillerMaterialRootDiameters","fillerMaterialFillDiameters","fillerMaterialCapDiameters","newPass","validationRange","AwsB21Validator","WpsValidation","editWeldingParameter","stopEditingWeldingParameter","deleteWeldingParameter","confirmDeleteWeldingParameter","cancelDeleteWeldingParameter","setBranchAngleMinimum","setBranchAngleMaximum","setPostWeldHeatTreatmentTemperatureMinimum","setPostWeldHeatTreatmentTemperatureMaximum","setThroatThicknessMinimum","setThroatThicknessMaximum","setPreheatTemperatureMinimum","setPreheatTemperatureMaximum","setInterpassTemperatureMinimum","setInterpassTemperatureMaximum","setPostHeatTemperatureMinimum","setPostHeatTemperatureMaximum","setSecondaryPqrs","autoScrollToSection","revisionNotes","originalWps","showCopyWPSScreen","cancelShowCopyWPSScreen","setProcessMecanizationRoot","setProcessMecanizationFill","setProcessMecanizationCap","setArcTransferModeRoot","setArcTransferModeFill","setArcTransferModeCap","setTypeCurrentRoot","setTypeCurrentFill","setTypeCurrentCap","setBaseMaterial1ThicknessMinimum","setBaseMaterial1ThicknessMaximum","setBaseMaterial2ThicknessMinimum","setBaseMaterial2ThicknessMaximum","setPostHeatTimeMinimum","setPostHeatTimeMaximum","moveUp","moveDown","previousValue","shouldClearSchematics","setThicknessRootMinimum","setThicknessRootMaximum","setThicknessFillMinimum","setThicknessFillMaximum","setThicknessCapMinimum","setThicknessCapMaximum","setFillerMaterialElectrodeFormRoot","setFillerMaterialElectrodeFormFill","setFillerMaterialElectrodeFormCap","setFillerMaterialGuideRoot","setFillerMaterialGuideFill","setFillerMaterialGuideCap","setOscillationWidthRoot","setOscillationWidthFill","setOscillationWidthCap","setOscillationFrequencyRoot","setOscillationFrequencyFill","setOscillationFrequencyCap","setOscillationDwellTimeRoot","setOscillationDwellTimeFill","setOscillationDwellTimeCap","addWpsToProject","createWpsForProject","setBaseMaterialsThicknessMinimum","setBaseMaterialsThicknessMaximum","confirmArchiveWPS","confirmUnarchiveWPS","checkCanSave","saveWithoutValidating","onAfterSave","savedWps","reloadedWps","verifyWps","verifiedByDate","approveWps","approvedByDate","revokeWps","setFillerMaterialRootDiameters","setFillerMaterialFillDiameters","setFillerMaterialCapDiameters","setPrintSection","optionalAfterSaveWithError","onAfterSaveWithErrorArguments","downloadPdfFromApi","pdf","isShowingConfirmVerify","isShowingConfirmApprove","toggleShowDuplicateWindow","showDuplicateWindow","showWeldCloudLicense","isShowingWeldCloudLicense","hideWeldCloudLicense","unselectableWpsIds","unselectable","unselectableWps","thicknessLabel","preHeatLabel","THICKNESS_FILL","THICKNESS_ROOT","THICKNESS_CAP","BRANCH_ANGLE","PREHEAT_TEMPERATURE","POST_WELD_HEAT_TREATMENT_TEMPERATURE","WELDING_POSITION_ROOT","WELDING_POSITION_FILL","WELDING_POSITION_CAP","chooseWPS","showLink","createWPS","PqrFromPwps","baseMaterial1ThicknessMinimum","baseMaterial1ThicknessMaximum","interpassTemperatureMinimum","interpassTemperatureMaximum","postHeatTimeMinimum","postHeatTimeMaximum","branchAngleMinimum","branchAngleMaximum","preheat","pwpsHasPreHeat","pwpsHasInterpass","pwpsHasPostHeat","pwpsHasPostHeatTime","pwpsHasPwhtTemperature","pwpsHasPwhtTime","validateRanges","PrequalifiedWpsFromPwps","createWps","createPrequalifiedWPS","onCreateWPS","updateWpsNumber","PrintOptions","retrievePrintOptions","findWpsMetadata","printBaseMaterialGroup","printPqrBaseMaterialApprovalRange","printWeldTypeApprovalRange","inExistingRevisions","rev","newRevisionNotes","setRevisionNotes","SaveInvalidModal","localeCompare","hasErrorsParameters","weldingParameters","parametersWithErrors","SaveInvalidParameterModalComponent","sortedErrors","StandardWpsFromPwps","updateNumber","ViewModeRange","hasMin","hasMax","hasAll","hasAny","convertToFraction","linkComesFromUrl","PQR_FILL","PQR_CAP","secondary","pqrIds","hasAttachedDocument","wpsDocumentPath","columnSizeTable","rootLabel","fillLabel","capLabel","rootPqrLabel","fillPqrLabel","capPqrLabel","hasOverlayNumberOfLayer","projectFromLinkName","matchingProject","fetchProjects","fetchWelds","autoScrollToParametersTable","allowAutoScrollToWeldingParametersTable","WPS_WELDING_PARAMETER","WeldingParametersModal","showOverlayWeldTypeMinimumHelp","showOverlayWeldTypeMaximumHelp","processCode","parameterHeatInputMinimum","calculateMinimumHeatInput","parameterHeatInputMaximum","calculateMaximumHeatInput","wpsParameter","validateParameters","setProgram","PROGRAM","WELDING_POSITIONS","doConfirmEditing","confirmEditing","showInvalidParameterModal","closeInvalidParameterModal","confirmSaveInvalidParameter","saveInvalidParameter","doStopEditing","WpsFromMultiplePqr","hasStandard","hasRootPQR","hasFillPQR","hasCapPQR","rootProcessDisabled","fillProcessDisabled","capProcessDisabled","weldTypeDisabled","pqrDisabled","hasGeneralErrors","generalErrors","hasRootErrors","rootErrors","hasFillErrors","fillErrors","hasCapErrors","capErrors","hasMultiplePositionErrors","multiplePositionErrors","isStandardISO15614","isoOption","isoOptionRaw","isMultiplePositionOption","isMultiplePQROption","showMultiplePQROption","showMultiplePositionOption","validateButtonDisabled","clearError","setErrorMessage","isValidMultiplePQR","isValidMultiplePosition","insertProcess","array","createFromMultiplePQR","endpoint","rootPqr","fillPqr","capPqr","rootPqr2","fillPqr2","capPqr2","INVALID_PQR_FOR_WPS","general","multiplePosition","createMultiplePQR","createMultiplePosition","setRootPqr","setRootPqr2","setFillPqr","setCapPqr","setMultiplePosition","multiplePositionOption","multiplePQROption","setMultiplePQR","setIsoOption","createPcPlusPf","WpsFromSinglePqr","selectedPqr","productTypeDisabled","hasPqr","pqrErrors","wpsNumberErrors","weldTypeErrors","wpsRevisionErrors","rootProcessErrors","fillProcessErrors","capProcessErrors","productTypeErrors","pipeOption","plateOption","calculatePqrProductTypeApprovalRange","processOptions","selectedPQRIsIso15614","newWpsRootProcess","newWpsFillProcess","newWpsCapProcess","processRoot","getSingleProcessOption","processFill","processCap","populateFields","createWeldingProcedureSpecification","standardWps","onCreateWps","setPqr","wpsRevision","rootPocessErrors","setStandardWps","ModelWpqLearnedMappingEditComponent","NewVersionNotifier","ParseQueueQueueItemActionsComponent","isDisabled","canReject","canDelete","canRetry","isProcessing","approvedRoute","approvedModelId","approvedModelKey","approvedLabel","ParseQueueStatusBadgeComponent","progress","isQueued","isParsed","isRejected","badgeClass","statusLabel","progressDescription","step","PikadayInputComponent","_heardValue","WeakMap","_classPrivateFieldInitSpec","useUTC","utc","yearRange","yearArray","i18n","previousMonth","nextMonth","months","weekdays","weekdaysShort","firstDay","_classPrivateFieldGet","onDraw","didChange","_classPrivateFieldSet","getMonth","getDate","onSelection","PipingPieceChooser","pieces","searchPipingPieces","isMetric","isImperial","hasSearchElements","schedule","nominalDiameter","diameterInches","thicknessInches","canAddPieces","loadPieces","changePage","SEARCH","addPiece","piece","piecesCollection","updateThickness","updateThicknessInches","updateDiameterInches","updateSchedule","updateDN","dn","searchPieces","PlatePieceChooser","searchPlatePieces","PowerSelectPreSearchedBeforeOptionsComponent","BeforeOptionsComponent","extra","hasUserEditedSearch","PqrModelValue","labelParams","PWHT_PRESENCE","PwhtSearchOptionWithTemperature","temperatureDisabled","postWeldHeatTreamentPresence","NO","pwhtChecked","pwht","YES","pwhtUnchecked","noPWHT","onUpdatePWHTPresence","onUpdatePWHT","ABSENT","yesPWHT","updateText","PwhtSearchOption","isASMEAWS","ResponsiveGridComponent","noContentFoundMessageText","noContentFoundMessage","responsiveExpandedRowComponent","showPagingWidget","showPaging","currentPageSize","EDITOR_CACHE_BUSTER","VALID_ORIGINS","SchematicImageEditor5","sendMessage","imagePath","editorType","language","editorUrl","targetOrigin","origin","isValidOrigin","iframeElement","contentWindow","postMessage","setupIframe","addEventListener","onIframeLoad","messageHandler","onMessage","teardownIframe","removeEventListener","editorStarted","imageBase64","saveImage","SettingsMenu","showNewLink","pathToList","pluralize","pathToNew","newRoute","ShieldingChoiceApprovalRange","shieldingOptions","hasSecondFlowRate","secondFlowRateProperty","hasThirdFlowRate","thirdFlowRateProperty","shieldingValue","shieldingProperty","gasValue","gasProperty","fluxValue","fluxProperty","isGasTestPieceVisible","isFluxTestPieceVisible","ShieldingChoice","hasGas","hasFlux","isGasCommercialDesignationTestPieceDisabled","isFluxCommercialDesignationTestPieceDisabled","industryCodeFilter","createGasCommercialDesignationRecord","createFluxCommercialDesignationRecord","gasCommercialDesignationOptions","fluxCommercialDesignationOptions","gasCommercialDesignationChosen","fluxCommercialDesignationChosen","Horizontal","flowRateColumnSize","SidebarActivator","domElement","metisMenu","SimpleAttribute","SimpleTableComponent","visibleColumns","columns","hiddenColumns","tableRows","expanded","expandedRows","hasData","toggleRow","delete","SortedBaseMaterialGroup","TaskProgressProvider","onFinish","isTaskInError","IN_ERROR","taskDescription","isTaskRunning","hasTask","INITIAL","isTaskFinished","FINISHED","taskFinishedObserver","TaskProgress","hasContext","tasks","contextType","contextTaskDescription","hasContextTask","TooltipOnElementComponent","effect","enableLazyRendering","TrialHelpScreen","routeAndTrack","link","setVideo","showVideo","videoId","convertVideoIdToAnalyticsEvent","hideVideo","TrialNotice","reads","boxTypeClass","days","buttonTypeClass","closeNotice","UiColumn","sizes","xsmall","small","medium","large","specific","labelTranslationKey","placeholder","Errors","GenericGroup","classNameBindings","attributeBindings","Group","Checkbox","DateComponent","Decimal","Lov","MultiLov","Select","TextArea","Text","Upload","DateClass","displayValue","formatDate","currentValue","WFileUpload","extensions","uploadId","hasIcon","icon","getTranslation","isHTMLSafe","tooltip","tooltipTranslation","hasFile","fileReference","onUpload","shouldShowRemoveButton","showRemoveButton","getFile","downloadPath","uploadImageToServer","isRemoving","maxFileSize","maxSize","formatBytes","fileSize","bytes","Label","Provider","UiModal","targetAttachment","containerClasses","wrapperClasses","overlayClasses","bodyVariantClasses","bodyVariant","UiPanel","isCollapsible","openState","open","showTopBorder","toggleOnKey","UnsavedWorkList","trashWeldingMap","discardWeldingMap","trashWeldingBook","discardWeldingBook","UploadWithoutModelComponent","getFileRetrieveRequestForUpload","UserProfile","flagPath","decimalSeparatorOptions","findLanguage","userLanguage","isSavingUser","savedAccount","initSignaturePad","canvas","querySelector","signaturePad","SignaturePad","penColor","closeSignaturePad","isShowingSignaturePad","saveSignature","uploader","signatureUploadedFile","signatureImage","toDataURL","signature","SIGNATURE","removeSignature","isShowingSignatureRemovalConfirmation","NdtCredentials","_credentialsVersion","helper","credential","isBefore","newCredential","existing","_findExistingCredentialForTestType","existingCredentialToReplace","isShowingReplaceModal","_performSave","credentialToDelete","savedCredentials","peekAll","c","ndtTestTypeOptions","levelLabelsMap","L1","L2","L3","addCredential","isAddingCredential","cancelAddCredential","editCredential","confirmDeleteCredential","cancelDeleteCredential","setLevel","setNumber","setValidUntil","testTypeId","cancelReplaceCredential","ViewModeQualification","WAttributeBoolean","Attribute","onUpdateCheckbox","staticValue","onSelectDate","WAttributeDecimal","WAttributeDistance","unitTranslated","assign","onBlurUpdate","WAttributeLongText","maxLength","WAttributeLov","staticLabel","updateSelection","valueChosen","WAttributeSpeed","convertValue","fromMilimeterSecondToMilimeterMinute","fromMilimeterSecondToMeterMinute","WAttribute","showHelp","isRequiredNumeric","overrideLabel","errorList","WEditToolbarComponent","showEditButton","canSave","showSaveAndStopButton","showSaveAndStop","WImagePreview","WModelEditPanel","WModelLovWithCreate","shouldDisplayLink","linkTo","visualAttribute","displayAttribute","WPagination","current","hasPages","pages","totalPages","ceil","numPages","pagesBefore","pagesAfter","isPreviousPageDisabled","isNextPageDisabled","pageCount","setPage","nextPage","previousPage","WPowerModelLov","hasStaticComponent","staticContentComponent","hasExtraEditingComponent","extraEditingComponent","WPowerMultiLov","hasStaticContentComponent","WSidebar","gte","NewButton","WTooltip","WeldSketchDesigner","grooveDesignBaseUpload","grooveDesignBaseImageFileUpload","generateNewImageName","grooveDesignName","weldLayerConfigurationUpload","weldLayerConfigurationBaseImageFileUpload","weldLayerConfigurationName","grooveDesignUpload","grooveDesignRenderedImageFileUpload","weldLayerUpload","weldLayerConfigurationRenderedImageFileUpload","pendingGrooveDesignInstance","grooveDesignState","pendingWeldLayerConfigurationInstance","weldLayerConfigurationState","saveGrooveDesignInstance","saveWeldLayerConfigurationInstance","onFinishDrawing","baseImage","baseImageData","baseImagePath","uploadedImagePath","wizardProgress","currentStep","currentStepValue","NaN","stateList","stepNumber","complete","weldLayerConfiguration","newName","setImageName","moveStep2","onStartDrawing","moveStep2Upload","moveStep3FromUpload","returnStep2","returnStep3","moveStep4","returnStep4","moveStep5","returnStep5","moveStep6","returnStep6","returnStep7","moveStep8","setBaseImageUploaded","WelderCertificateDashboardTable","WelderCertificateExpirationTableInternal","selectedDeadline","currentSelectedDeadline","defaultDeadline","emptyListMessage","isCurrentCertificateASME","currentCertificateValidateInstance","defaultCompanies","selectedCompanies","companiesSerialized","prepareSearchOptions","showCustomDeadlineField","customDeadline","deadlineTime","loadCertificate","chooseDeadline","deadline","setCustomDeadline","validateOverideInternalSingleCertificate","validateOverideExternalSingleCertificate","WelderCertificateExpirationTable","ID_ATTRIBUTE","WeldingDetailsApprovalRange","findSelectedDetail","isSingleSideNoBacking","SINGLE_SIDE_NO_BACKING","isSingleSideMaterialBacking","SINGLE_SIDE_MATERIAL_BACKING","isSingleSideGasBacking","SINGLE_SIDE_GAS_BACKING","isSingleSideFluxBacking","SINGLE_SIDE_FLUX_BACKING","BOTH_SIDES","isConsumableInsert","CONSUMABLE_INSERT","getDetail","allDetails","removeDetail","addDetail","processDetail","addProperty","setSingleLayer","setMultiLayer","setSingleSideNoBacking","setSingleSideMaterialBacking","setSingleSideGasBacking","setSingleSideFluxBacking","setBothSides","setConsumableInsert","WeldingDetailsChooser","hasConsumableInsert","findDetail","findExistingLayer","findExistingSide","calculateLayer","resulting","calculateSides","calculateConsumable","setSide","Chooser","showSides","showOther","WpsError","weldingDetailsInApprovalRange","notQualified","notInCollectionById","notQualifiedSerialized","serializeCollection","MapTable","diameterA","diameterB","thicknessA","thicknessB","linkRoute","linkType","WeldingPassFieldRow","PersonAge","age","momentDate","WeldnoteGridPqrLinkComponent","FillerMaterial","WeldnoteGridPwpsLinkComponent","RowToggleComponent","SimpleResponsiveExpandedRowComponent","SimpleStyledRowComponent","rowConfig","cssClass","isHighlighted","isSelected","class","WeldnoteGridWelderCertificateLinkComponent","WelderCertificateRowComponent","certificateState","WeldingProcesses","WeldnoteGridWpsLinkComponent","WpsParameterRowComponent","highlightedPassHelper","inflector","Inflector","irregular","deprecationWorkflow","workflow","handler","matchId","TITLE","DRAWING_CONTENT","ProductType","PROJECT_DOCUMENT","DOCUMENT_TITLE","DOCUMENT_NUMBER","TYPE","COMMENTS","INCLUDE_IN_DATA_BOOK","DOCUMENT","PROJECT_LINE_CLASS","LINE_IDENTIFIER","WeldTypeGroup","Controller","labelPath","getLabel","getModelPluralLabel","newRoutePath","routeTitle","goToModel","internalClear","confirmUpdate","role","updateRole","currentAccount","newRole","accountName","updateAccounts","getAccounts","accountOptions","getActionLogs","dateTimeFormat","instanceTypeOptions","INSTANCE_TYPES","labelKey","actionIdOptions","selectedInstanceTypeKey","ACTION_IDS_BY_INSTANCE_TYPE","selectedInstanceType","selectedActionId","selectedActionIdKey","startDate","endDate","selectedAccount","createdBy","setStartDate","applyFilters","setEndDate","setAccount","setInstanceType","setActionId","clearFilters","cached","dossierQuery","chat","setup","hostname","isMobile","media","isTablet","isLaptop","hasSession","logout","hasUnsavedElements","showAlertLogout","checkForNewVersion","versionChecker","updateVersionTask","confirmLogout","discardAll","ArcTransferModeController","EditController","_NewController","NewController","ListController","BaseMaterialGroupController","searchButton","setCode","BaseMaterialController","listAllBaseMaterials","materialGroupLabel","isSearchingForUnassignedGroup","toggleUnassignedGroupSearch","CertificationSpecialRequirementController","CertificationSpecialRequirementsController","listAllCompanies","companyCount","nameLabel","addressLabel","isPlanQuality","weldsPerformedLabel","weldsRepairedLabel","syncSites","orgApi","reloadUser","replaceMessage","CompanyController","ComponentDrawingController","titleLabel","anywhere","ConstructionStandardController","DestructiveTestingController","DestructiveTestingsController","updateQueueCounts","pending","ready","pendingCount","readyCount","resetState","ElectrodeTypeController","goBack","hasSiteInfo","contactSupport","listAllExaminingBodies","examiningBodyCount","ExaminingBodyController","FillerMaterialCommercialDesignationController","setCommercialDesignation","FillerMaterialGroupController","FillerMaterialController","listAllFillerMaterials","FitterController","listAllFitters","setStamp","FluxCommercialDesignationController","fluxName","FluxSpecificationController","FluxController","listAllFluxes","GasCommercialDesignationController","GasSpecificationController","GasSpecificationsController","GasController","listAllGases","setSymbol","GeneralDrawingController","GrooveDesignController","setLongDescription","listAllIeis","archived","wpsNumberLabel","otherOptions","downloadExport","selectedBaseMaterial1Group","selectedBaseMaterial2Group","drawingNumber","selectedBaseMaterialGroup","baseMaterialThicknessDisplay","baseMaterial1ThicknessDisplay","baseMaterial2ThicknessDisplay","userSearch","setBaseMaterialThickness","canSeeMenuToCreate","canCreatePQR","canCreateWelder","latestDocumentRow","latestDocuments","pqrsWithType","certificateWithType","wpsWithType","document1","document2","modifiedOn","accountDataLoaded","loaded","setInternalRevalidations","internalCertificates","setExternalRevalidations","externalCertificates","setMiscellaneousRevalidations","InspectorController","MiscellaneousCertificateTypeController","MiscellaneousCertificateController","Certificate","typeLabel","expirationDateLabel","setPerson","personName","opts","getMiscellaneousCertificatesExpire30Days","revalidateCertificate","getMiscellaneousCertificatesArchived","getMiscellaneousCertificatesExpired","getMiscellaneousCertificatesExpireToday","NdtReportCertificateController","NonDestructiveTestingController","listAllNonDestructiveTesting","PipingPieceController","listAllPipingPieces","diameterInchesLabel","thicknessInchesLabel","convertDecimal","PlatePieceController","listAllPlatePieces","PostWeldTreatmentMethodController","PostWeldTreatmentMethodsController","IS_VERIFIED_OPTIONS","listAllPqrLearnedMappings","isVerifiedOptions","setEntityType","setParsedValue","setCanonicalCode","setIsVerified","PqrStandardController","PqrStandardsController","editPqr","ARCHIVAL_STATE","ARCHIVED","baseMaterialThicknessLabel","currentUnitSystem","certificateNameLabel","searchBaseMaterial1ByGroup","searchBaseMaterial2ByGroup","searchBaseMaterialByGroup","selectedConstructionStandard","selectedProcessMecanizationRoot","selectedProcessMecanizationFill","selectedProcessMecanizationCap","displayHelpVideo","pqrVideo","setBaseMaterial","removeBaseMaterial","setSearchByMaterialGroup","PreparationMethodController","PreparationMethodsController","setType","StaffPositionController","StaffController","typeCurrentLabel","TypeCurrentPolarityController","WeldLayerConfigurationController","helpVideoUrl","videoBaseUrl","startDrawing","finishedDrawing","finishDrawing","doShowHelp","showGrooveDesignTab","loadGrooveDesigns","showWeldLayerConfigurationTab","loadWeldLayerConfigurations","currentSketches","sketches","grooveColumns","weldLayerColumns","latestSketches","grooves","WeldTypeController","listAllWeldTypes","editCertificate","goToNewCertificate","selectSection","WelderCertificateNew","welderType","CertificateRules","instanceTracker","weldingProcessesAll","weldingPositionsAll","isStandardSelected","stampLabel","selectedFillerMaterialRootSpecification","selectedFillerMaterialRootClassification","selectedFillerMaterialFillSpecification","selectedFillerMaterialFillClassification","selectedWelders","selectedShowExpired","selectedShowArchived","selectedFillerMaterialRootGroup","selectedFillerMaterialFillGroup","selectedFillerMaterialCapGroup","buildSingleRelationFilter","buildMultiRelationFilter","buildSingleValueFilter","convertedValue","WELD_TYPE_TEST_PIECE","WELDING_PROCESS_ROOT_TEST_PIECE","WELDING_PROCESS_FILL_TEST_PIECE","DIAMETER_TEST_PIECE","THICKNESS_TOTAL_TEST_PIECE","THICKNESS_ROOT_TEST_PIECE","THICKNESS_FILL_TEST_PIECE","WELDING_POSITION_ROOT_TEST_PIECE","WELDING_POSITION_FILL_TEST_PIECE","PRODUCT_TYPE_TEST_PIECE","BASE_MATERIAL1_TEST_PIECE","BASE_MATERIAL2_TEST_PIECE","FILLER_MATERIAL_ROOT_TEST_PIECE","FILLER_MATERIAL_FILL_TEST_PIECE","FILLER_MATERIAL_ROOT_APPROVAL_RANGE","FILLER_MATERIAL_FILL_APPROVAL_RANGE","FILLER_MATERIAL_CAP_APPROVAL_RANGE","_all","WELDING_DETAIL_TEST_PIECE","weldersSerialized","requirementsSerialized","_searchWelders","searchFillerMaterialGroupByCode","searchWelders","wpqVideo","setShowExpired","setShowArchived","getWelderCertificatesArchived","WELDER_CERTIFICATE_REVALIDATION_DEADLINES","getWelderCertificatesToExternallyValidateCustom","MONTH","clearCacheExternal","getWelderCertificatesToExternallyValidateExpired","TODAY","certificateData","getWelderCertificatesToInternallyValidateCustom","validationParameters","getWelderCertificatesToInternallyValidateExpired","WelderStandardController","WelderStandardsController","WelderController","listAllWelders","welderCount","dateBirthLabel","idLabel","welderName","welderStamp","WeldingBookStatusController","WeldingBookStatusesController","revisionCreated","onEditWeld","createdBook","cancelWeldingBook","weldingBooks","weldingBookCount","listAllWeldingBooks","supplier","customer","weldingProject","weldingBookVideo","WeldingDetailController","WeldingMapController","CertificateMapController","WeldMapRules","removePiece","removePlate","plate","choosePipingPieceTab","choosePlatePieceTab","PqrMapController","WpsMapController","listAllQMatrix","pqrStandard","wpsStandard","qmatrixSearchVideo","WeldingPositionController","listAllWeldingPositions","afterCreateCertificate","afterCreatePQR","editWps","newWPSCreated","saveWpsFromPQR","saveWpsFromMultiplePQR","returnToList","pqrNumberLabel","WPS","WELDTYPE","throatDisplay","discardWPS","goToPQR","pwpsVideo","findProjectWPSs","selectedPQR","setFindProjectWPSs","WeldingProcessController","listAllWeldingProcesses","shortDesignationLabel","industryCodeLabel","listAllWpqLearnedMappings","ModelValidator","ObjectValidator","presenceMessage","absenceMessage","inclusionMessage","exclusionMessage","numericalityMessage","numericalityOnlyIntegerMessage","numericalityGreaterThanMessage","numericalityGreaterThanOrEqualToMessage","numericalityEqualToMessage","numericalityLessThanMessage","numericalityLessThanOrEqualToMessage","numericalityOddMessage","numericalityEvenMessage","mailMessage","formatMessage","colorMessage","subdomainMessage","acceptanceMessage","zipCodeMessage","URLMessage","wrongLengthMessage","tooShortMessage","tooLongMessage","mustContainNumberMessage","mustContainSpecialMessage","mustContainLowerMessage","mustContainCapitalMessage","customValidationMessage","matchMessage","dateMessage","dateBeforeMessage","dateAfterMessage","hhmmss","hour","minute","second","EUR","currency","minimumFractionDigits","maximumFractionDigits","USD","absolute","iso","formatInstant","arrayJoin","ignoreEmpty","path","baseUrl","assetBaseUrl","Helper","compute","providedUnitSystem","csvModels","namedArgs","models","attributeName","dateBirthAge","dateString","daysUntil","startPoint","momentStart","formatMaterial","isSameMaterial","distanceUnits","formatMaterialWithThickness","Const","formatPercentage","totalNum","valueNum","formatRange","greaterThan","idEqual","inCollection","vars","isEmptyAttribute","isObject","pageTitle","percentageFormatter","rate","decimalPlaces","rateNum","totalInt","countInt","Handlebars","Ember","progressWidth","minWidth","Utils","escapeExpression","bp","cellClassNames","headerClasses","transfermodeDisabled","wpsInvalidAttributeName","getLayer","unitName","getUnit","initialize","register","ContainerDebugAdapter","setupContainer","ResponsiveInitializer","IGNORED_WARNINGS","registerWarnHandler","next","ignoreWarning","collectionKey","propName","valueKey","emberArray","rangeKey","collectionId","allOptions","weldTypeProperty","allItems","JOINT_TYPE_OPTIONS","BUTT_JOINT","SOCKET_JOINT","isSMAW","is111","filterProcesses","PROCESS_MECANIZATION","SEMI_AUTOMATIC","AUTOMATIC","MECHANIZED","isGMAW","isMCAW","isFCAW","isFCAWS","is131","is135","is136","is137","is138","is121","is122","is123","is124","is125","MANUAL","toReject","someOk","Mixin","imagePreviewFetch","urlFetchFlag","collectionProperty","imageProperty","imageCollection","grooveDesignUrl","grooveDesignUrlFetching","grooveDesignImageLink","weldLayerUrl","weldLayerUrlFetching","weldLayerImageLink","attr","inverse","Model","hasPermission","permissionId","roles","isAny","hasRoles","counter","hasSubscriptionPlan","subscriptionPlan","isTrial","subscriptionType","isPaying","BaseModel","ARC_TRANSFER_MODES","_key","isShortArc","SHORT_ARC","isGlobular","GLOBULAR","isSpray","SPRAY","isPulsedSpray","PULSED_SPRAY","numericality","allowBlank","greaterThanOrEqualTo","heatNumber","thicknessWithUnits","custom","subgroupNumber","modelValidator","what","bendAngle","onlyInteger","lessThanOrEqualTo","elongation","defaultValue","memberAction","revisionStatus","longDesignation","filePath","batchNumber","diameterWithUnits","fitterName","fitterStamp","baseMetalHardnessNumber","baseMetalHardnessValue1","baseMetalHardnessValue2","baseMetalHardnessValue3","heatAffectedHardnessNumber","heatAffectedHardnessValue1","heatAffectedHardnessValue2","heatAffectedHardnessValue3","depositedMetalHardnessNumber","depositedMetalHardnessValue1","depositedMetalHardnessValue2","depositedMetalHardnessValue3","heatAffectedZone2HardnessNumber","heatAffectedZone2HardnessValue1","heatAffectedZone2HardnessValue2","heatAffectedZone2HardnessValue3","baseMetal2HardnessNumber","baseMetal2HardnessValue1","baseMetal2HardnessValue2","baseMetal2HardnessValue3","ACTIVE","operatingTemperature","testPieceLocation","value1Energy","value2Energy","value3Energy","averageEnergy","shearPercentage","lateralExpansion","region","inspectorName","inspectorStamp","MISCELLANEOUS_CERTIFICATE_STATE","certificatePerson","canRevalidate","expirationDate","EXPIRED","level","validUntil","if","validateMinimum","getBelowMaximumMessage","validateMaximum","getAboveMinimumMessage","propertyMaximumValue","propertyMinimumValue","fillerMaterialType","fillerMaterialRootTestPiece","fillerMaterialFillTestPiece","fillerMaterialCapTestPiece","PQRModel","_dec149","_dec150","_dec151","_dec152","_dec153","_dec154","_dec155","_dec156","_dec157","_dec158","_dec159","_dec160","_dec161","_dec162","_dec163","_dec164","_dec165","_dec166","_dec167","_dec168","_dec169","_dec170","_dec171","_dec172","_dec173","_dec174","_dec175","_dec176","_dec177","_dec178","_dec179","_dec180","_dec181","_dec182","_dec183","_dec184","_dec185","_dec186","_dec187","_dec188","_dec189","_dec190","_dec191","_dec192","_dec193","_dec194","_dec195","_dec196","_dec197","_dec198","_dec199","_dec200","_dec201","_dec202","_dec203","_dec204","_dec205","_dec206","_dec207","_dec208","_dec209","_dec210","_dec211","_dec212","_dec213","_dec214","_dec215","_dec216","_dec217","_dec218","_dec219","_dec220","_dec221","_dec222","_dec223","_dec224","_dec225","_dec226","_dec227","_dec228","_dec229","_dec230","_dec231","_dec232","_dec233","_dec234","_dec235","_dec236","_dec237","_dec238","_dec239","_dec240","_dec241","_dec242","_dec243","_dec244","_dec245","_dec246","_dec247","_dec248","_dec249","_dec250","_dec251","_dec252","_dec253","_dec254","_dec255","_dec256","_dec257","_dec258","_dec259","_dec260","_dec261","_dec262","_dec263","_dec264","_dec265","_dec266","_dec267","_dec268","_dec269","_dec270","_dec271","_dec272","_dec273","_dec274","_dec275","_dec276","_dec277","_dec278","_dec279","_dec280","_dec281","_dec282","_dec283","_dec284","_dec285","_dec286","_dec287","_dec288","_dec289","_dec290","_dec291","_dec292","_dec293","_dec294","_dec295","_dec296","_dec297","_dec298","_dec299","_dec300","_dec301","_dec302","_dec303","_dec304","_dec305","_dec306","_dec307","_dec308","_dec309","_dec310","_dec311","_dec312","_dec313","_dec314","_dec315","_dec316","_dec317","_dec318","_dec319","_dec320","_descriptor143","_descriptor144","_descriptor145","_descriptor146","_descriptor147","_descriptor148","_descriptor149","_descriptor150","_descriptor151","_descriptor152","_descriptor153","_descriptor154","_descriptor155","_descriptor156","_descriptor157","_descriptor158","_descriptor159","_descriptor160","_descriptor161","_descriptor162","_descriptor163","_descriptor164","_descriptor165","_descriptor166","_descriptor167","_descriptor168","_descriptor169","_descriptor170","_descriptor171","_descriptor172","_descriptor173","_descriptor174","_descriptor175","_descriptor176","_descriptor177","_descriptor178","_descriptor179","_descriptor180","_descriptor181","_descriptor182","_descriptor183","_descriptor184","_descriptor185","_descriptor186","_descriptor187","_descriptor188","_descriptor189","_descriptor190","_descriptor191","_descriptor192","_descriptor193","_descriptor194","_descriptor195","_descriptor196","_descriptor197","_descriptor198","_descriptor199","_descriptor200","_descriptor201","_descriptor202","_descriptor203","_descriptor204","_descriptor205","_descriptor206","_descriptor207","_descriptor208","_descriptor209","_descriptor210","_descriptor211","_descriptor212","_descriptor213","_descriptor214","_descriptor215","_descriptor216","_descriptor217","_descriptor218","_descriptor219","_descriptor220","_descriptor221","_descriptor222","_descriptor223","_descriptor224","_descriptor225","_descriptor226","_descriptor227","_descriptor228","_descriptor229","_descriptor230","_descriptor231","_descriptor232","_descriptor233","_descriptor234","_descriptor235","_descriptor236","_descriptor237","_descriptor238","_descriptor239","_descriptor240","_descriptor241","_descriptor242","_descriptor243","_descriptor244","_descriptor245","_descriptor246","_descriptor247","_descriptor248","_descriptor249","_descriptor250","_descriptor251","_descriptor252","_descriptor253","_descriptor254","_descriptor255","_descriptor256","_descriptor257","_descriptor258","_descriptor259","_descriptor260","_descriptor261","_descriptor262","_descriptor263","_descriptor264","_descriptor265","_descriptor266","_descriptor267","_descriptor268","_descriptor269","_descriptor270","_descriptor271","_descriptor272","_descriptor273","_descriptor274","_descriptor275","_descriptor276","_descriptor277","_descriptor278","_descriptor279","_descriptor280","_descriptor281","_descriptor282","_descriptor283","_descriptor284","_descriptor285","_descriptor286","_descriptor287","_descriptor288","_descriptor289","_descriptor290","_descriptor291","_descriptor292","_descriptor293","_descriptor294","_descriptor295","_descriptor296","_descriptor297","_descriptor298","_descriptor299","_descriptor300","_descriptor301","_descriptor302","_descriptor303","_descriptor304","_descriptor305","_descriptor306","_descriptor307","_descriptor308","_descriptor309","_descriptor310","_descriptor311","_descriptor312","_descriptor313","_descriptor314","_descriptor315","_descriptor316","_descriptor317","_descriptor318","isAfter","thicknessValidation","invalidResults","shieldingRoot","correctShielding","calculateShielding","shieldingFill","shieldingCap","interpassTemperatureTestPiece","heatInputMinimumApprovalRange","heatInputMaximumApprovalRange","interpassTemperatureMinimumApprovalRange","interpassTemperatureMaximumApprovalRange","grooveAngleMinimum","grooveAngleMaximum","rootFaceMinimum","rootFaceMaximum","rootGapMinimum","rootGapMaximum","branchAngleTestPiece","torchAngleMinimum","torchAngleMaximum","thicknessCapMinimumApprovalRange","thicknessCapMaximumApprovalRange","postHeatTimeTestPiece","postHeatTimeMinimumApprovalRange","postHeatTimeMaximumApprovalRange","weldingDetailValidation","validateFillerMaterialAWS","fillerMaterialRootCommercialDesignationTestPiece","fillerMaterialFillCommercialDesignationTestPiece","fillerMaterialCapCommercialDesignationTestPiece","overlayNumberOfLayers","flowRateProcess1Minimum","flowRateProcess1Maximum","flowRateProcess2Minimum","flowRateProcess2Maximum","flowRateProcess3Minimum","flowRateProcess3Maximum","clearStandardDependentFields","hasAttachement","pqrDocumentPath","tensilelineInvalid","bendLineInvalid","impactTestLineInvalid","bendTestLines","impactTestLines","passesInvalid","fetchAllRelationsForWPSValidation","processMecanizationRootApprovalRange","processMecanizationFillApprovalRange","processMecanizationCapApprovalRange","typeCurrentRootApprovalRange","typeCurrentFillApprovalRange","typeCurrentCapApprovalRange","fillerMaterialRootCommercialDesignationApprovalRange","fillerMaterialFillCommercialDesignationApprovalRange","fillerMaterialCapCommercialDesignationApprovalRange","shieldingRootGasApprovalRange","shieldingRootGasCommercialDesignationApprovalRange","shieldingRootFluxApprovalRange","shieldingRootFluxCommercialDesignationApprovalRange","shieldingFillGasApprovalRange","shieldingFillGasCommercialDesignationApprovalRange","shieldingFillFluxApprovalRange","shieldingFillFluxCommercialDesignationApprovalRange","shieldingCapGasApprovalRange","shieldingCapGasCommercialDesignationApprovalRange","shieldingCapFluxApprovalRange","shieldingCapFluxCommercialDesignationApprovalRange","backingGasApprovalRange","backingGasCommercialDesignationApprovalRange","backingFluxApprovalRange","backingFluxCommercialDesignationApprovalRange","isCompletePenetrationButtWeld","isCompleteJointPenetrationButtWeld","isPartialPenetrationButtWeldASME","impactTestTemperature","isOverlayWeldHardFacing","getLayerType","isDetailBothSides","pressureUnit","getPressureUnit","forceUnit","getForceUnit","areaUnit","getAreaUnit","energyUnit","getEnergyUnit","isManual","ProcessMecanizationType","PROJECT_REFERENCE_TYPE","isManualReference","referenceType","isAutomaticReference","REFERENCE","COMPONENT_SITUATION","isComponentDeleted","situation","DELETED","documentTitle","documentNumber","lineIdentifier","percentage","testOfReport","weldId","WELD_CONDITION","WELD_SITUATION","isActiveWeld","GOOD","currentStatus","calculateCurrentState","uniqueLayerWelders","weldersRootLayer","weldersFillLayer","weldersCapLayer","concat","isWeldDeleted","welderStandard","isSamePQRAndWelderStandard","projectClient","treatmentTime","treatmentTemperature","heatingRate","coolingRate","reportDate","tensileStrength","areaSurface","ultimateTotalLoad","ruptureLocation","observation","ALL","previousDate","nextDate","CERTIFICATE_STATE","WelderCertificateRules","WelderCertificate","thicknessRootMinimumApprovalRange","thicknessRootMaximumApprovalRange","thicknessFillMinimumApprovalRange","thicknessFillMaximumApprovalRange","thicknessTotalMinimumApprovalRange","thicknessTotalMaximumApprovalRange","internalRequalificationDate","INTERNALLY_EXPIRED","EXTERNALLY_EXPIRED","certificateDocumentPath","getIndustryCode","abbreviation","inspections","hasAssociatedPqr","visualData","pqrRootId","pqrFillId","pqrCapId","pqrPcId","hasRootPqr","hasUniqueFillPqr","hasUniqueCapPqr","revisionDate","parametersCollection","toRemove","STRING_CAMELIZE_REGEXP_1","STRING_CAMELIZE_REGEXP_2","WeldingMap","pqrHeatInput","pqrPreheatTemperature","pqrPostWeldHeatTreatmentTemperature","pqrImpactTestTemperature","wpsHeatInput","wpsPreheatTemperature","wpsPostWeldHeatTreatmentTemperature","pqrThroatThickness","wpsThroatThickness","collectionAction","pipingPieces","plates","platePieces","wpsWeldingProcedureSpecifications","certificateWelders","pqrDetails","pqrWeldingDetails","certificateDetails","certificateWeldingDetails","wpsDetails","wpsWeldingDetails","_convertToJSON","weldingMapJson","serialize","attributes","piecesArray","platesArray","camelize","_match","_separator","chr","eachAttribute","camelCaseKey","eachRelationship","keyName","resultPiece","currentPiece","pieceJson","PipingPiece","keyPiece","resultPlate","resultPlates","plateJson","PlatePiece","kind","mapBy","WPSModel","NullWpsValidation","shouldValidateSingleValue","isThicknessTotalMinimumValid","thicknessTotalMinimumInvalidMessage","isThicknessTotalMaximumValid","thicknessTotalMaximumInvalidMessage","isDiameterValid","diameterInvalidMessage","isDiameterValidForPipe","diameterForPipeInvalidMessage","isFillerMaterialDiameterRootValid","fillerMaterialDiameterRootInvalidMessage","isFillerMaterialDiameterFillValid","fillerMaterialDiameterFillInvalidMessage","isFillerMaterialDiameterCapValid","fillerMaterialDiameterCapInvalidMessage","isNumberElectrodesRootValid","numberOfElectrodesRootInvalidMessage","isPwhtTimeValid","pwthTimeInvalidMessage","isPWHTTimeMinimumPresenceValid","pWHTTimeMinimumPresenceInvalidMessage","isPWHTTimeMaximumPresenceValid","pWHTTimeMaximumPresenceInvalidMessage","isBranchAngleValid","branchAngleInvalidMessage","isPwhtTemperatureValid","pwthTemperatureInvalidMessage","throatThicknessMinimum","throatThicknessMaximum","isPreheatTemperatureValid","preheatTemperatureInvalidMessage","isInterpassTemperatureValid","interpassTemperatureInvalidMessage","isInterpassTemperatureMinimumPresenceValid","interpassTemperatureMinimumPresenceInvalidMessage","isInterpassTemperatureMaximumPresenceValid","interpassTemperatureMaximumPresenceInvalidMessage","isPostHeatTemperatureValid","postHeatTemperatureInvalidMessage","isGasNozzleDiameterRootValid","gasNozzleDiameterRootInvalidMessage","isGasNozzleDiameterFillValid","gasNozzleDiameterFillInvalidMessage","isGasNozzleDiameterCapValid","gasNozzleDiameterCapInvalidMessage","isNumberElectrodesFillValid","numberOfElectrodesFillInvalidMessage","isNumberElectrodesCapValid","numberOfElectrodesCapInvalidMessage","isBaseMaterial1ThicknessValid","baseMaterial1ThicknessInvalidMessage","isBaseMaterial2ThicknessValid","baseMaterial2ThicknessInvalidMessage","isPostHeatTimeValid","postHeatTimeInvalidMessage","isPostHeatTimeMinimumPresenceValid","postHeatTimeMinimumPresenceInvalidMessage","isPostHeatTimeMaximumPresenceValid","postHeatTimeMaximumPresenceInvalidMessage","shouldValidateRelationValue","isWeldingProcessRootValid","weldingProcessRootInvalidMessage","isWeldingProcessFillValid","weldingProcessFillInvalidMessage","isWeldingProcessCapValid","weldingProcessCapInvalidMessage","shouldValidateCollectionValue","isWeldingDetailsValid","weldingDetailsInvalidMessage","isProcessMecanizationRootValid","processMecanizationRootInvalidMessage","isProcessMecanizationFillValid","processMecanizationFillInvalidMessage","isProcessMecanizationCapValid","processMecanizationCapInvalidMessage","typeCurrentRoot","isTypeCurrentRootValid","typeCurrentRootInvalidMessage","typeCurrentFill","isTypeCurrentFillValid","typeCurrentFillInvalidMessage","typeCurrentCap","isTypeCurrentCapValid","typeCurrentCapInvalidMessage","isArcTransferModeRootValid","arcTransferModeRootInvalidMessage","isArcTransferModeFillValid","arcTransferModeFillInvalidMessage","isArcTransferModeCapValid","arcTransferModeCapInvalidMessage","isWeldTypeValid","weldTypeInvalidMessage","isBaseMaterial1Valid","baseMaterial1InvalidMessage","isBaseMaterial2Valid","baseMaterial2InvalidMessage","isOverlayTypeValid","overlayTypeInvalidMessage","wpsProductType","isProductTypeValid","_wpsProductType","productTypeInvalidMessage","isFillerMaterialRootValid","fillerMaterialRootInvalidMessage","isFillerMaterialRootAWSValid","fillerMaterialRootAWSInvalidMessage","isFillerMaterialFillValid","fillerMaterialFillInvalidMessage","isFillerMaterialFillAWSValid","fillerMaterialFillAWSInvalidMessage","isFillerMaterialCapValid","fillerMaterialCapInvalidMessage","isFillerMaterialCapAWSValid","fillerMaterialCapAWSInvalidMessage","isFillerMaterialRootCommercialDesignationValid","fillerMaterialRootCommercialDesignationInvalidMessage","isFillerMaterialFillCommercialDesignationValid","fillerMaterialFillCommercialDesignationInvalidMessage","isFillerMaterialCapCommercialDesignationValid","fillerMaterialCapCommercialDesignationInvalidMessage","isShieldingRootValid","shieldingRootInvalidMessage","isShieldingRootValidForProcess","shieldingRootInvalidMessageForProcess","isShieldingFillValid","shieldingFillInvalidMessage","isShieldingFillValidForProcess","shieldingFillInvalidMessageForProcess","isShieldingCapValid","shieldingCapInvalidMessage","isShieldingCapValidForProcess","shieldingCapInvalidMessageForProcess","isBackingValid","backingInvalidMessage","shieldingRootGas","isShieldingRootGasValid","shieldingRootGasInvalidMessage","shieldingFillGas","isShieldingFillGasValid","shieldingFillGasInvalidMessage","shieldingCapGas","isShieldingCapGasValid","shieldingCapGasInvalidMessage","isBackingGasValid","backingGasInvalidMessage","shieldingRootFlux","isShieldingRootFluxValid","shieldingRootFluxInvalidMessage","shieldingFillFlux","isShieldingFillFluxValid","shieldingFillFluxInvalidMessage","shieldingCapFlux","isShieldingCapFluxValid","shieldingCapFluxInvalidMessage","isBackingFluxValid","backingFluxInvalidMessage","shieldingRootFluxCommercialDesignation","isShieldingRootFluxCommercialDesignationValid","shieldingRootFluxCommercialDesignationInvalidMessage","shieldingFillFluxCommercialDesignation","isShieldingFillFluxCommercialDesignationValid","shieldingFillFluxCommercialDesignationInvalidMessage","shieldingCapFluxCommercialDesignation","isShieldingCapFluxCommercialDesignationValid","shieldingCapFluxCommercialDesignationInvalidMessage","isBackingFluxCommercialDesignationValid","backingFluxCommercialDesignationInvalidMessage","isWeldingPositionRootDirectionValid","weldingPositionRootDirectionInvalidMessage","isWeldingPositionFillDirectionValid","weldingPositionFillDirectionInvalidMessage","isWeldingPositionCapDirectionValid","weldingPositionCapDirectionInvalidMessage","isWeldingPositionRootValid","weldingPositionRootInvalidMessage","isWeldingPositionFillValid","weldingPositionFillInvalidMessage","isWeldingPositionCapValid","weldingPositionCapInvalidMessage","isThicknessRootMinimumValid","thicknessRootMinimumInvalidMessage","isThicknessRootMaximumValid","thicknessRootMaximumInvalidMessage","isThicknessFillMinimumValid","thicknessFillMinimumInvalidMessage","isThicknessFillMaximumValid","thicknessFillMaximumInvalidMessage","isThicknessCapMinimumValid","thicknessCapMinimumInvalidMessage","isThicknessCapMaximumValid","thicknessCapMaximumInvalidMessage","hardnessTestRequired","isHardnessRequirementsValid","hardnessRequirementsInvalidMessage","isImpactTestTemperatureValid","impactTestTemperatureInvalidMessage","isOverlayNumberOfLayerValid","overlayNumberOfLayerInvalidMessage","fillerMaterialElectrodeFormRoot","isFillerMaterialElectrodeFormRootValid","fillerMaterialElectrodeFormRootInvalidMessage","fillerMaterialElectrodeFormFill","isFillerMaterialElectrodeFormFillValid","fillerMaterialElectrodeFormFillInvalidMessage","fillerMaterialElectrodeFormCap","isFillerMaterialElectrodeFormCapValid","fillerMaterialElectrodeFormCapInvalidMessage","fillerMaterialGuideRoot","isFillerMaterialGuideRootValid","fillerMaterialGuideRootInvalidMessage","fillerMaterialGuideFill","isFillerMaterialGuideFillValid","fillerMaterialGuideFillInvalidMessage","fillerMaterialGuideCap","isFillerMaterialGuideCapValid","fillerMaterialGuideCapInvalidMessage","shieldingRootGasCommercialDesignation","shieldingFillGasCommercialDesignation","shieldingCapGasCommercialDesignation","oscillation","mainPqrId","isActiveRevision","getIdOfRelation","relation","pqrFill","pqrCap","isPartialJointPenetrationButtWeld","isDifferentMaterials","isMultiPQR","secondaryPqrs","isPrimary","isProject","PREQUALIFIED","isMultiplePositionWps","valueRaw","isPreliminaryWps","getWps","isParameterCurrentMinimumValid","parameterCurrentMinimumInvalidMessage","isParameterCurrentMaximumValid","parameterCurrentMaximumInvalidMessage","isParameterVoltageMinimumValid","parameterVoltageMinimumInvalidMessage","isParameterVoltageMaximumValid","parameterVoltageMaximumInvalidMessage","isParameterTypeCurrentValid","parameterTypeCurrentInvalidMessage","isParameterWireFeedSpeedMinimumValid","parameterWireFeedSpeedMinimumInvalidMessage","isParameterWireFeedSpeedMaximumValid","parameterWireFeedSpeedMaximumInvalidMessage","isHeatInputValid","heatInputInvalidMessage","isParameterTravelSpeedMinimumValid","parameterTravelSpeedMinimumInvalidMessage","isParameterTravelSpeedMaximumValid","parameterTravelSpeedMaximumInvalidMessage","isParameterLayerValid","parameterLayerInvalidMessage","isParameterArcTransferModeValid","parameterArcTransferModeInvalidMessage","isEmptyParameter","getPqrPass","getPqr","getWpsStandard","isLinkedToPass","getSourceInputMinimum","heatInputMinimumSource","getSourceInputMaximum","heatInputMaximumSource","getSourcePQRInputMinimum","heatInputMinimumSourcePQR","getSourcePQRInputMaximum","heatInputMaximumSourcePQR","sourceParameter","modifier","className","classList","remove","focus","indicator","Pikaday","makePikaday","_pikaday","_observer","PikadayModifier","Modifier","registerDestructor","disconnect","getPikadayOptions","positional","named","modify","pikadayOptions","setDate","syncDisabled","MutationObserver","observe","hasAttribute","SYSTEM","FITTER_NAME","FITTER_STAMP","FITTER_ID","FITTER_TYPE","JSONAPISerializer","modelNameFromPayloadKey","_super","MISCELLANEOUS_CERTIFICATE_TYPE","EXPIRATION_DATE","CERTIFICATE_DOCUMENT","PROJECT_STATUS","START_DATE","END_DATE","DRAWINGS","WELDING_PROCEDURE_SPECIFICATIONS","PQRS","MAXIMUM_REPAIRS_PER_WELD","SELECT_WELDERS_FROM_COMPANY_ONLY","SELECT_WPS_FROM_COMPANY_ONLY","SELECT_WPS_FROM_PROJECT_LIBRARY_ONLY","COVER_PICTURE","WeldnoteRouter","EmberRouter","locationType","rootURL","Route","beforeModel","transition","requireAuthentication","isAccountLocked","setupController","controller","deactivate","currentModel","isSaving","isDeleted","RedirectToAssemblyRoute","to","assemblyPath","isGlobalAdmin","currentURL","currentRouteName","trackPage","setLocale","pathname","loadUser","didCancel","stringifiedError","sentErrors","Sentry","captureException","tokenData","withScope","setTag","captureMessage","ArcTransferModeRoute","EditRoute","NewRoute","ListRoute","BadUrlRoute","BaseMaterialCertificateRoute","BaseMaterialCertificateNewRoute","BaseMaterialCertificatesRoute","BaseMaterialGroupRoute","BaseMaterialRoute","CertificationSpecialRequirementRoute","_NewRoute","CompanyRoute","ConstructionStandardRoute","DestructiveTestingRoute","ElectrodeTypeRoute","ErrorNotAllowedSiteRoute","ErrorRoute","ExaminingBodyRoute","FillerMaterialCertificateRoute","FillerMaterialCertificateNewRoute","FillerMaterialCertificatesRoute","FillerMaterialCommercialDesignationRoute","FillerMaterialGroupRoute","FillerMaterialRoute","FluxCommercialDesignationRoute","FluxSpecificationRoute","FluxRoute","GasCommercialDesignationRoute","GasSpecificationRoute","GasRoute","GeneralDrawingRoute","loadPQR","loadCertificates","loadWPS","getWelderCertificatesToInternallyValidate30Days","getWelderCertificatesToExternallyValidate30Days","getUsageLimits","loadLatestDocuments","loadActionLog","loadInternalCertificates","loadExternalCertificates","loadMiscellaneousCertificates","loadUsageData","actionLog","usageData","routeInstance","transitionToLoginRoute","InspectorRoute","LoadingRoute","authenticator","displayLoginFallbackPage","activate","MiscellaneousCertificateTypeRoute","MiscellaneousCertificateRoute","helpdesk","setSearchItems","NdtReportCertificateRoute","NdtReportCertificateNewRoute","NdtReportCertificatesRoute","NonDestructiveTestingRoute","NotFoundResource","PipingPieceRoute","PlatePieceRoute","PostWeldTreatmentMethodRoute","PqrLearnedMappingRoute","PqrStandardRoute","fetchAllData","PreparationMethodRoute","ProjectDocumentRoute","ProjectDocumentNewRoute","ProjectDocumentsRoute","ProjectSubpathRoute","ProjectRoute","ProjectNewRoute","ProjectsRoute","PwhtReportCertificateRoute","PwhtReportCertificateNewRoute","PwhtReportCertificatesRoute","StaffPositionRoute","TestLocationRoute","TestLocationNewRoute","TestStageNameRoute","TestStageNameNewRoute","TypeCurrentPolarityRoute","willTransition","abort","searchGrooveDesign","searchLatestSketches","WeldTypeRoute","constants","finalWelderType","automaticRenewal","subscribedCompanyIds","getWelderCertificatesToExternallyValidateToday","getWelderCertificatesToInternallyValidateToday","WelderStandardRoute","WeldingBookStatusRoute","WeldingBook","loadAllDataWeldingBook","afterModel","WeldingDetailRoute","CertificateMapRoute","modelFor","getWeldingMap","PqrMapRoute","WpsMapRoute","WeldingPositionRoute","inject","pass_id","highlightedPassId","WeldingProcessRoute","WpqLearnedMappingRoute","sentry","integrations","beforeSend","originalException","ApplicationSerializer","STATUS_MESSAGES","Service","newOrganizationId","limit","URLSearchParams","accountIds","jqXHR","messageOf","rawError","responseError","AjaxService","Env","authToken","buildServerUrl","namespace","adapterFor","protocol","apiHost","toast","environment","metrics","enabled","identify","plan","typeOfPlan","newOptions","distinctId","trackSaveNew","new","SAVE","trackDelete","DELETE","CrispService","chatKey","$crisp","CRISP_WEBSITE_ID","getScript","hasCrisp","_callDo","do","_callIs","is","_callSet","_callGet","getIdentifier","getData","setData","identifyUser","filesize","imageName","base64Image","fileType","binaryData","dataURItoBlob","generateSignedUploadLink","generateSignedUploadLinkForReplace","getContent","getFileRetrieveRequest","contextValue","idValue","original","filenameValue","contentTypeValue","getFileUploadSignupRequest","getFileDownloadSignupRequest","substr","binary","atob","charCodeAt","Blob","Uint8Array","VIDEO_BASE","wpsSinglePqrVideo","wpsMultiplePqrVideo","projectVideo","HelpdeskWidgetService","zE","setHelpCenterSuggestions","hasWeldingMap","weldingMap","getWeldingBook","hasWeldingBook","DISCARD","blockUI","defaults","baseZ","overlayCSS","backgroundColor","opacity","padding","border","borderRadius","color","unblockUI","newMessage","uiMessage","innerHTML","Media","computedFromConfig","hasEmberTether","hasLiquidWormhole","hasLiquidTether","destinationElementId","getDestinationElementIdFromConfig","newVersion","fetchVersionHash","updateInterval","currentVersion","isElementInViewport","getElementById","isNewVersion","versionCheckInterval","el","rect","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","base","fetch","cache","warn","siteIds","operatorId","activeUntil","nfcId","unitOfMeasurement","operatorUsername","delay","ms","getTaskProgress","taskId","startSyncProcess","startSiteSyncProcess","currentSiteTaskId","contextInfo","syncType","syncForNewAccount","currentTaskProgress","currentTaskId","itemId","_processingItems","Map","pollTask","untrackItem","_notifiedItemIds","clearAll","isMonitoring","hasItemsToTrack","_processCompletions","itemsById","completedParsed","completedError","trackedInfo","_isCompletedStatus","_sendParsedNotification","_sendErrorNotification","NOTIFICATION_TIMEOUT","closeButton","onclick","_navigateToReview","_navigateToQueue","descriptor","fileId","queryString","FIELD_NAMES","fieldSet","decorators","reverse","reduce","decorator","scrollable","getJQueryElement","jQueryElement","getVerticalCoord","animate","scrollTop","BaseSessionService","handleAuthentication","TASK_STATE","ABORT","parseTask","currentTask","parsedDescription","parsedResult","getTask","taskStatus","currentState","possibleTask","getTaskByContext","addTask","taskInfo","getUrlContent","removeTask","clearTasks","toastrOptions","debug","newestOnTop","progressBar","positionClass","preventDuplicates","showDuration","hideDuration","showEasing","hideEasing","showMethod","hideMethod","defaultToastrOptions","CELSIUS","FAHRENHEIT","LITER_MINUTE","CUBIC_FEET_HOUR","KILO_JOULE_MILLIMETER","KILO_JOULE_INCH","METER_MINUTE","INCH_MINUTE","MILLIMETER_MINUTE","NEWTON","POUNDS","SQUARE_MILLIMETER","SQUARE_INCH","NEWTON_SQUARE_MILIMETER","PSI","JOULE","FEET_PER_POUND","PERMISSIONS","WELDNOTE_PLANS","DEFAULT_SMALL_YEAR_FORMAT","applications","listOfApplications","features","loadFeatures","loadCurrentUser","userId","defaultLocale","fetchSecondaryData","userName","userEmail","configureScope","setUser","queryCertificateCount","loadApplications","crisp","userClient","userLabel","admin","clientLabel","separatorOfDecimals","subscribedCompanies","companiesSubscribed","isAccountLoaded","accountAcronym","userParts","charAt","userFeatures","feature","globalFeatures","smallDateFormat","isViewer","notesRole","isOwner","isCollaborator","isAssemblyOwner","assemblyRole","_hasPermission","permission","isWritePermission","ACCOUNT_ADMIN","isReadPermission","PQR_READ","WPS_READ","PWPS_READ","WELDER_CERTIFICATE_READ","WELDING_BOOK_READ","PROJECT_READ","PQR_CREATE","PQR_DELETE","PQR_CREATE_WPS","PQR_EDIT_APPROVAL_RANGE","PQR_ARCHIVE","WPS_CREATE","WPS_CREATE_REVISION","WPS_ASSIGN_STAFF","WPS_DELETE","WPS_ARCHIVE","WPS_VERIFY","WPS_APPROVE","WPS_REVOKE","PWPS_CREATE","PWPS_DELETE","PWPS_CREATE_CERTIFICATE","PWPS_CREATE_PQR","WELDER_CERTIFICATE_CREATE","WELDER_CERTIFICATE_DELETE","WELDER_CERTIFICATE_ARCHIVE","WELDER_CERTIFICATE_REVALIDATE","WELDER_CERTIFICATE_EDIT_APPROVAL_RANGE","WELDING_BOOK_CREATE","WELDING_BOOK_CREATE_REVISION","WELDING_BOOK_VERIFY","WELDING_BOOK_APPROVE","WELDING_BOOK_ARCHIVE","WELDING_BOOK_DELETE","FILLER_MATERIAL_CREATE","FILLER_MATERIAL_DELETE","BASE_MATERIAL_CREATE","BASE_MATERIAL_DELETE","WELDER_ARCHIVE","WELDER_CREATE","WELDER_DELETE","PROJECT_ARCHIVE","PROJECT_CREATE","PROJECT_DELETE","PROJECT_WELD_CREATE","PROJECT_WELD_DELETE","GENERIC_WRITE_PERMISSION","QMATRIX_CREATE","QMATRIX_DELETE","SYSUSER","canDeletePQR","canCreateWPSFromPQR","canEditPQRApprovalRange","canCreateRevisionWPS","canDeleteWPS","canDeleteCertificate","canArchiveCertificate","canRevalidateCertificate","canArchiveWeldingBook","canCreateWeldingBookRevision","canVerifyWeldingBook","canApproveWeldingBook","canDeleteWeldingBook","canCreateFillerMaterial","canDeleteFillerMaterial","canCreateBaseMaterial","canDeleteBaseMaterial","canDeleteWelder","isAccountAdmin","createdById","canArchivePQR","canArchiveWPS","canArchiveWelder","canArchiveProject","canVerifyWps","canApproveWps","canRevokeWps","hasProductivity","accountLocked","subscriptionInfo","isAllowedByPlan","activity","planResolver","planVerifier","isPlanWpsOnly","WPS_ONLY","isPlanCertificates","CERTIFICATES","QUALITY","permissionsLink","personnelLink","sitesLink","profileLink","customerSupportLink","WeldSearchParametersService","updateParameters","projectParameters","hasParameters","deleteParameters","getParametersForProject","queryHeaders","textResult","modules","filterName","filterQuery","pagination","finalResult","powerSource","machineId","isPrimaryDataLoaded","fetchIndustryCodes","fetchWeldingData","isSecondaryDataLoaded","fetchStaff","fetchPreparationMethods","fetchExaminingBodies","fetchCompanies","_welderStandards","sortedStandards","_weldTypes","_arcTransferModes","_weldingDetails","_weldingPositions","_baseMaterialGroups","baseMaterialGroups","_fillerMaterialGroups","fillerMaterialGroups","_electrodeTypes","_typeCurrentPolarities","_weldingProcesses","_processMecanizations","_preparationMethods","_gasSpecifications","gasSpecifications","_fluxSpecifications","_postWeldHeatTreatmentMethods","postWeldHeatTreatmentMethods","_standards","sortedMecanizations","sortedData","_companies","_examiningBodies","_industryCodes","sortedIndustryCodes","_staff","_parsePagingInformation","industryCodes","welderStandards","isStandardAWSD143","isAutomaticMecanization","isMechanizedMecanization","withLabel","withoutLabel","directLabel","arcLabel","jointLabel","noneLabel","weldTypeGroupsOptions","FULL_PENETRATION_BUTT_WELD","WeldcloudService","waitForProperty","doesPlanAllowCertificates","certificateInternallyToday","certificateInternally30Days","certificateInternallyExpired","miscellaneousToday","miscellaneous30Days","miscellaneousExpired","certificateInIsoCount","certificateExternallyToday","certificateExternally30Days","certificateExternallyExpired","getWelderCertificatesToInternallyValidateTodayCount","getWelderCertificatesToInternallyValidate30DaysCount","getWelderCertificatesToInternallyValidateExpiredCount","getWelderCertificatesToExternallyValidateTodayCount","getWelderCertificatesToExternallyValidate30DaysCount","getWelderCertificatesToExternallyValidateExpiredCount","getMiscellaneousCertificatesExpireTodayCount","getMiscellaneousCertificatesExpire30DaysCount","hasCertificatesInIso","deadlineOptions","WEEK","TWO_MONTH","THREE_MONTH","CUSTOM","_requestData","_getWelderCertificateData","paging","finalUrl","_getWelderCertificateDataCustom","_getWelderCertificateDataCustomCount","_getMiscellaneousCertificateData","getWelderCertificatesAll","getMiscellaneousCertificatesExpiredCount","clearCacheInternal","_trackedInfo","convertPaging","convertFilters","Http","WELDING_POSITION_DIRECTION_OPTIONS","JOB_KNOWLEDGE_OPTIONS","BEND_TEST_TYPE","PRODUCT_FORM","FILLER_MATERIAL_ELECTRODE_FORM","FILLER_MATERIAL_GUIDE","DOCUMENT_TYPE_OPTIONS","TYPE_OF_PERSON","COMPONENT_PROGRESS_STATE","NON_DESTRUCTIVE_TEST_TYPE","listAllProjectLineClasses","listProjects","listAllProjectDrawings","listAllProjectComponentDrawings","industryCodeOptions","gasSpecificationOptions","allBaseMaterialGroups","allFillerMaterialGroups","companiesCache","companiesFetched","getCompanies","nameA","nameB","staffPositionOptions","staffPositionCache","staffPositionFetched","getStaffPositions","staffPositions","examiningBodiesCache","examiningBodiesFetched","getExaminingBodies","specialRequirementsCache","specialRequirementsFetched","getSpecialRequirements","weldingBookStatusOptions","weldingBookStatusCache","weldingBookStatusFetched","getWeldingBookStatuses","roleOptions","rolesCache","rolesFetched","getRoles","miscellaneousCertificateTypeOptions","miscellaneousCertificateTypesCache","miscellaneousCertificateTypesFetched","getMiscellaneousCertificateTypes","constructionStandardsCache","constructionStandardsFetched","getConstructionStandards","standards","nonDestructiveTestsCache","nonDestructiveTestsFetched","getNonDestructiveTests","tests","filterBaseMaterialGroupsByIndustryCode","searchExaminingBody","searchGasOptions","symbolStrict","loadAllDataProjectComponent","loadAllDataProjectWeld","searchBaseMaterialSpecification","searchBaseMaterialGrade","searchBaseMaterialGroupByCode","searchBaseMaterials","searchFillerMaterialSpecification","searchFillerMaterialClassification","searchFillerMaterials","searchWPSQuery","allPQR","projectAndPrimary","gasIds","jsonSerialization","fluxIds","searchDrawings","searchProjects","getPipingPieces","getProjectClients","pageValue","roleId","_searchBaseMaterialSpecification","_searchBaseMaterialGrade","_searchBaseMaterialGroup","_searchFillerMaterialGroup","_searchFillerMaterialSpecification","_searchFillerMaterialClassification","_searchWelderByStamp","_searchWelderByName","_searchGas","_searchFlux","desgination","listAllFillerMaterialSpecifications","listAllFillerMaterialClassifications","dateBirth","constructionStandard","processFIll","baseMaterial1Group","baseMaterial2Group","positionRoot","positionFill","positionCap","heatInputTestPiece","pwhtPresent","fillerMaterialRootGroup","fillerMaterialFillGroup","fillerMaterialCapGroup","returnLatest","mecanizationRoot","processMecanizationRootTestPiece","mecanizationFill","processMecanizationFillTestPiece","mecanizationCap","processMecanizationCapTestPiece","projectWps","PROJECT_CLIENT","wpsRevisionState","revisionType","listAllWeldingBookStatus","listAllProjectNDTReports","listAllBaseMaterialCertificates","listAllFillerMaterialCertificates","listAllProjectDocuments","listProjectDocumentRevisions","progressState","queryProjectWelds","generalDrawings","baseMaterial1Certificate","baseMaterial2Certificate","specificFillerMaterialProcess1","specificFillerMaterialProcess2","specificFillerMaterialProcess3","fillerMaterialRootCertificate","fillerMaterialFillCertificate","fillerMaterialCapCertificate","testStatus","welderProcess","weldStage","testStageName","testLocation","queryNonDestructiveTestOptions","listAllProjectPwhtReports","listAllPwhtReportCertificates","listAllProjectWelders","listAllProjectWelderCertificates","listAllProjectBaseMaterials","listAllProjectFillerMaterials","listAllProjectDocumentLinks","listAllProjectWps","inspectionClass","hardFacing","corrosion","CORROSION_RESISTANT","uphill","downhill","UPHILL","DOWNHILL","singleLayer","multiLayer","pipe","pipePlate","none","acceptable","notTested","ACCEPTABLE","NOT_TESTED","grooveShapeOptions","veeShape","doubleVeeShape","halfVeeShape","jayShape","doubleJayShape","youShape","doubleYouShape","kayShape","exShape","squareShape","V_SHAPE","DOUBLE_V_SHAPE","HALF_V_SHAPE","K_SHAPE","X_SHAPE","buttJoint","cornerJoint","tJoint","socketJoint","CORNER_JOINT","T_JOINT","passed","bendTestTypeOptions","sideBend","transversal","faceBend","longitudinal","rootBend","bendBreak","SIDE_BEND","TRANSVERSAL","FACE_BEND","LONGITUDINAL","ROOT_BEND","BEND_BREAK","projectStatusOptions","finished","PENDING","productFormOptions","SHEET","BAR","ROD","FUSION_WELDED_PIPE","RESISTANCE_WELDED_PIPE","SEAMLESS_PIPE","CAST_PIPE","FORGED_PIPE","FLANGE","FITTING","FORGING","CASTING","I_BEAM","H_BEAM","T_BEAM","L_BEAN","U_BEAM","ELBOW_90_DEGREES","ELBOW_45_DEGREES","FLANGE_RTJ","FLANGE_RF","FLANGE_FF","ECC_RED","CONC_RED","TEE_EQ","TEE_RED","STUB_END","WELDOLET","WELDOFLANGEL","THREADOLET","GASKET_RTJ","GASKET_FLAT","GASKET","TUBE","ANGLE","ELBOW_180_SHORT","ELBOW_180_LONG","ELBOW_90_SHORT","REDUCING_ELBOW_180_SHORT","REDUCING_ELBOW_90_SHORT","SOCKOLET","fillerMaterialElectrodeFormOptions","fillerMaterialGuideOptions","CONSUMABLE","NON_CONSUMABLE","documentTypeOptions","COATING_REPORT","PAINTING_REPORT","INSPECTION_TEST_PLAN","RECEIVED_MATERIAL_REPORT","NON_CONFORMITY_REPORT","PROCEDURE","PURCHASE_ORDER","QUALITY_PLAN","REQUEST_FOR_INFORMATION","SCOPE_OF_WORK","SPECIFICATION","OTHER","typeOfPersonOptions","schematicsWeldTypeOptions","componentProgressStateOptions","COMPLETED","TESTED","PROCESSED","SHIPPED","VT","RT","PT","UT","MT","WindowService","downloadFile","newLocation","AdaptiveStore","localStorageKey","cookieName","substring","addParameter","parameterName","build","parameterValue","hasMoment","hasEventListeners","sto","addEvent","capture","attachEvent","removeEvent","detachEvent","cn","str","obj","isDate","isWeekend","day","getDay","isLeapYear","year","getDaysInMonth","month","setToStartOfDay","compareDates","overwrite","hasProp","nodeName","fireEvent","eventName","ev","createEvent","initEvent","dispatchEvent","createEventObject","adjustCalendar","calendar","floor","bound","ariaLabel","reposition","defaultDate","setDefaultDate","firstWeekOfYearMinDays","formatStrict","minDate","maxDate","showWeekNumber","pickWholeWeek","minYear","maxYear","minMonth","maxMonth","startRange","endRange","isRTL","yearSuffix","showMonthAfterYear","showDaysInNextAndPreviousMonths","enableSelectionDaysInNextAndPreviousMonths","numberOfMonths","mainCalendar","container","blurFieldOnSelect","theme","events","onOpen","keyboardInput","renderDayName","abbr","renderDay","arr","ariaSelected","isToday","hasEvent","isInRange","isStartRange","isEndRange","renderWeek","y","week","isoWeek","yearDay","weekDay","dayInFirstWeek","dayShift","prevWeekDay","jan4th","daysBetween","round","renderRow","isRowSelected","renderTitle","instance","refYear","randId","j","monthHtml","yearHtml","_o","isMinYear","isMaxYear","html","prev","_onMouseDown","_v","srcElement","parentNode","prevMonth","getAttribute","blur","_c","returnValue","_onChange","gotoMonth","gotoYear","_onKeyChange","adjustDate","_parseFieldValue","_onInputChange","firedBy","_onInputFocus","_onInputClick","_onInputBlur","pEl","activeElement","_b","_onClick","onchange","setAttribute","createElement","appendChild","insertBefore","nextSibling","defDate","gotoDate","disableWeekends","disableDayFn","nom","setMinDate","setMaxDate","fallback","_d","toDateString","getMoment","setMoment","preventOnSelect","isMoment","draw","newCalendar","calendars","firstVisibleDate","lastVisibleDate","visibleDate","setMonth","adjustCalendars","sign","newDay","difference","valueOf","gotoToday","setStartRange","setEndRange","force","_y","_m","random","render","adjustPosition","viewportWidth","viewportHeight","clientRect","leftAligned","bottomAligned","offsetWidth","offsetHeight","pageYOffset","pageXOffset","offsetLeft","offsetTop","offsetParent","before","yearOfPreviousMonth","yearOfNextMonth","daysInPreviousMonth","cells","after","isWeekSelected","dayNumber","monthNumber","yearNumber","dayConfig","unshift","renderHead","renderTable","v","removeChild","isGroup","BaseMaterialRulesASME","allWeldTypes","allBaseMaterials","allWeldingDetails","allTypeCurrentPolarity","allWeldingPositions","transferModes","allTransferModes","_baseMaterials","_transferModes","baseMaterial1ThicknessValue","baseMaterial2ThicknessValue","weldingDetailsValues","transferModeRoot","transferModeFill","transferModeCap","impactRequired","interpassMinimum","filterWeldTypes","allTypes","listToFilter","testPiece","filterCurrentWeldTypes","curryedFilterTypes","_findWeldTypes","_findWeldingDetail","_findListWeldingDetails","_isWeldingDetail","resultDetailNames","currentDetail","impactRequirements","uniq","weldingProcessName","arcModeName","filterTypeCurrent","allCurrents","toFilter","typeCurrentAndPolarity","_emptyRange","_toRange","_calculateWeldingThicknessRange","smallestBaseMaterialThickness","resultThickness1","resultThickness2","_thicknessASMEOverlayWeldMetricSystem","_thicknessASMEOtherWeldTypesMetricSystem","_thicknessASMEOverlayWeldImperialSystem","_thicknessASMEOtherWeldTypesImperialSystem","thicknessesDifferent","thickness1Numeric","thickness2Numeric","EPSILON","isOneOfGroups","baseMaterial1GroupName","baseMaterial2GroupName","_defaultResult","_findWeldingPosition","WeldingPositionApprovalRange","calculateWeldingPositions","fixDecimals","formatRangeWith2Decimals","interpassValue","isButtWeldOrPartialPenetrationWeld","isOverlayHardFacing","baseMaterial1ThicknessApprovalRangeMinimum","baseMaterial1ThicknessApprovalRangeMaximum","baseMaterial2ThicknessApprovalRangeMinimum","baseMaterial2ThicknessApprovalRangeMaximum","bm1Thickness","bm2Thickness","thicknessProcess","getBaseMaterialGroupName","asmeResult","calculate","restrictions","_isWeldingProcessGMAWShort","isWeldingProcessGMAWShort","testPieceNumber","_weldedThicknessMetric","_weldedThicknessImperial","_baseMaterialThickness","_findWeldingPositions","codes","currentPosition","isBaseMaterialSpecialGroupInterpass","isWeldingProcessSpecialForInterpass","_isSpecialInterpassWeldingProcess","isGTAW","isPAW","isSpecialInterpassCase","_thicknessProcessMetric","_thicknessProcessImperial","_getAllMaterialsOfNumber","_getAllMaterialsOfNumberAndSmaller","numberParsed","groupNumberAsNumber","baseMaterialGroup1","baseMaterialGroup2","specialGroups","_baseMaterialFilletWeldThickness","_filterCurrentWeldTypes","impactTestReport","diameterValue","specialCase","_calculateProcessMecanization","isManualMecanization","filterMecanizations","allGTAW","interpassMinimumApprovalRange","timeFloat","_filterGroups","groupModel","_thicknessAWSPlateCompleteJointButtWeldMetricSystem","_thicknessAWSPlateCompleteJointButtWeldImperialSystem","_thicknessAWSPipeCompleteJointButtWeldMetricSystem","_thicknessAWSPipeCompleteJointButtWeldImperialSystem","_thicknessAWSPartialPenetrationButtWeldMetricSystem","_thicknessAWSPartialPenetrationButtWeldImperialSystem","_awsStandardSpecialCase","specialCaseThickness1","specialCaseThickness2","fixDecimalsForUnitSystem","_calculatePjpButtWeldBaseMaterialThickness","_calculateBaseMaterialFilletWeldThickness","_allWeldType","_allBaseMaterials","_allWeldingDetails","_allProcessMecanizations","_allTypeCurrentPolarity","_allWeldingPositions","_allTransferModes","hasProcessEGW","isSingleSideMaterialBackingDetail","isSingleSideGasBackingDetail","isSingleSideNoBackingDetail","isSingleSideFluxBackingDetail","isConsumableInsertDetail","isBothSidesDetail","isSingleLayerDetail","isMultiLayerDetail","_process","_testPiece","result1","result2","calculateBaseMaterialThickness","allProcessesSameType","totalProcesses","totalProcessesOfType","isBaseMaterial100","isMaterialGroup100","_direction","minimumResult","_layer","bm1Group","bm2Group","group1ApprovalRange","group2ApprovalRange","approvalRangeGroup100","isMaterialGroup70","approvalRangeGroup70","isMaterialGroup50","approvalRangeGroup50","isMaterialGroup36","approvalRangeGroup36","isMaterialGroupUnlisted","approvalRangeGroupUnlisted","isMaterialGroup","AwsD143ApprovalRanges","AwsB21ApprovalRanges","Iso15611ApprovalRanges","Iso156141ApprovalRanges","Iso15612ApprovalRanges","Iso15613ApprovalRanges","branchConnection","transferModeName","convertInchesToMilimeters","convertMilimetersToInches","formatRangeWith3Decimals","_thicknessButtWeldBranchConnectionSingleLayer","_thicknessButtWeldBranchConnectionMultiLayer","_thicknessFilletWeld","_thicknessOverlayWeld","resultingPositions","currentPositionCode","ascendantPositions","descendentPositions","isCorrectGroupISO15614","BaseMaterialRulesISO","isGroup8","isGroupExactly40","isGroupExactly48","isGroup10","ThirtyDaysRoute","_calculateBaseMaterialGroup","isMaterial1","getRuleFor1dot1","getRuleFor1dot2","getRuleFor1dot3","getRuleFor2dot1","getRuleFor2dot2","getRuleFor3dot1","getRuleFor3dot2","getRuleFor3dot3","getSimpleRuleFor4dot1","getRuleFor4dot1","getSimpleRuleFor4dot2","getRuleFor4dot2","getSimpleRuleFor5dot1","getRuleFor5dot1","getSimpleRuleFor5dot2","getRuleFor5dot2","getSimpleRuleFor5dot3","getRuleFor5dot3","getSimpleRuleFor5dot4","getRuleFor5dot4","getSimpleRuleFor6dot1","getRuleFor6dot1","getSimpleRuleFor6dot2","getRuleFor6dot2","getSimpleRuleFor6dot3","getRuleFor6dot3","getSimpleRuleFor6dot4","getRuleFor6dot4","getRuleFor7dot1","getRuleFor7dot2","getRuleFor8dot1","getRuleFor8dot2","getRuleFor8dot3","getRuleFor10dot1","getRuleFor10dot2","getRuleFor11dot1","getRuleFor11dot2","getRuleFor11dot3","getRuleFor7dot3","getRuleFor9dot1","getRuleFor9dot2","getRuleFor9dot3","getRulesFor40","isGroup6","getSimpleRulesFor8","getRulesFor6","isGroup2","getRulesFor2","isGroup5","getRulesFor5","getRulesFor10","isGroup11","getRulesFor11","isGroup40","getSimpleRulesFor5","_calculateFillerMaterialRootCommercialDesignation","currentProcess","allData","AsmeIXApprovalRanges","AwsD11ApprovalRanges","AwsD15ApprovalRanges","isStandardISO15613","isStandardISO15611","isStandardISO15612","productTypeValue","weldTypeValue","rootLayerType","fillLayerType","capLayerType","weldingProcessRootName","weldingProcessFillName","weldingProcessCapName","pwhtTimeTestPiece","weldingProcessRootDesignation","weldingProcessFillDesignation","weldingProcessCapDesignation","_bm2","_bm1","process1Name","process2Name","process3Name","allElectrodes","allWeldingProcesses","allFillerMaterials","electrodeTypeRoot","processValues","_processValues","_filterElectrodeTypes","electrodeCodes","candidate","_allRange","_filterBaseMaterials","wanted","_filterProcessByName","_calculateWeldingProcess","_filterPositions","positions","_filterFillerMaterialGroups","groupToSelect","groupCode","CertificateFillerRules","isFillerMaterialGroup1","getFillerMaterial1Groups","isFillerMaterialGroup2","getFillerMaterial2Groups","isFillerMaterialGroup3","getFillerMaterial3Groups","isFillerMaterialGroup4","getFillerMaterial4Groups","isFillerMaterialGroup5","getFillerMaterial5Groups","isFillerMaterialGroup6","getFillerMaterial6Groups","isFillerMaterialGroupRange30to40","getFillerMaterial30to40Groups","isFillerMaterialGroup50","getFillerMaterial50Groups","_fillerMaterials","foundPosition","_findWeldingDetails","detailInstance","_fullRange","groups1","groups2","groups5","groups6","parseGroupNumber","numericValue","currentGroupNumber","_electrodeType","currentMode","findWeldingDetails","finalResults","filterPositions","allElectrodeTypes","isSupplementaryFilletWeldTestRequired","isPartialPenetrationButtWeldISO","filterElectrodeTypes","electrodeCode","_previousDate","Iso14732ApprovalRanges","WeldingOperatorAsmeIxApprovalRanges","NonSupportedApprovalRange","Optional","ofNullable","NullTestPieceValues","of","baseMaterialGroupInstance","getSteelAndNickelAlloysApprovalRange","getAluminiumAlloysApprovalRange","getTitaniumAndZirconiumAlloysApprovalRange","_weldingProcess","isEGWorESWProcess","filletWeld","partialPenetration","Iso96062ApprovalRanges","_allData","CertificateAsmeIxApprovalRanges","Iso96061ApprovalRanges","NotSupportedApprovalRanges","validations","_wpsFillerMaterialRoot","_hasImpactRequirements","pqrMaterialId","pqrMaterialGroupId","_wpsFillerMaterialFill","_wpsFillerMaterialCap","pqrDiametersSerialized","wpsDiameters","pqrDiameters","pqrDiameter","pqrDirection","wpsDirection","pqrLayers","wpsLayers","module","exports","colors","transparent","black","gray","white","red","yellow","green","blue","purple","orange","screens","sm","md","lg","xl","fontFamily","sans","serif","mono","museo","fontSize","fontWeight","hairline","thin","light","normal","semibold","bold","extrabold","lineHeight","tight","loose","letterSpacing","wide","textColor","backgroundSize","auto","cover","contain","borderWidth","borderColor","full","px","screen","minHeight","maxWidth","xs","maxHeight","margin","boxShadow","inner","outline","zIndex","stroke","variants","appearance","backgroundAttachment","backgroundPosition","backgroundRepeat","borderCollapse","borderStyle","cursor","display","flexDirection","flexWrap","alignItems","alignSelf","justifyContent","alignContent","flex","flexGrow","flexShrink","float","listStylePosition","listStyleType","negativeMargin","overflow","pointerEvents","inset","resize","textAlign","fontStyle","fontSmoothing","textDecoration","textTransform","userSelect","verticalAlign","visibility","whitespace","wordBreak","corePlugins","plugins","Transform","deserialize","serialized","deserialized","noComma","toValue","use","PROJECT_COMPONENT","PROJECT_WELD","CERTIFICATE","ORG_MISMATCH","DELETED_UPSTREAM_BUT_LIVE","REMOTE_NOT_FOUND","CLIENT_ORPHANED","CROSS_TENANT_COMPANIES","LEDGER_MISSING","LEDGER_REMOTE_ID_STALE","LEDGER_CLIENT_STALE","NO_ORG_API_USER_ID","NEVER_SYNCED","SEVERAL_LIVE_ACCOUNTS","OPEN_CONFLICTS","ORGAPI_UNREACHABLE","NO_LOCAL_ACCOUNT","UPDATE_EXISTING","CREATE_ACCOUNT","PARK_ORG_MOVE","PARK_EMAIL_DIFFERENT_CLIENT","PARK_NO_CLIENT","SKIP","ORPHANED_REMOTE_ID","WELDER_FORK_OPERATOR_ID","WELDER_FORK_STAMP_NAME","CROSS_TENANT_COMPANY","AUDIT_ERROR","ORG_MOVE","EMAIL_DIFFERENT_CLIENT","NO_CLIENT","DUPLICATE_BUSINESS_KEY","ORGANIZATION_DELETED","AMBIGUOUS_USER_DELETION","isSafeInteger","authorizeRequest","setRequestHeader","downloadAjaxFilePromise","mimeType","XMLHttpRequest","resolvedUrl","responseType","onload","dispositionHeader","getResponseHeader","exec","blob","navigator","msSaveOrOpenBlob","objectUrl","URL","createObjectURL","download","revokeObjectURL","send","UPLOAD","EDIT","ARCHIVE","UNARCHIVE","GENERATE","MASTER_WPS","CREATE_WPS_FROM_PQR","HELP","LOGIN_METRIC","LOGIN_IMPERIAL","urlType","ajaxOptions","record","modelClass","typeKey","adapter","getOwner","snapshot","_createSnapshot","buildURL","fullUrl","requestOptions","serializeAndPush","pushPayload","allPositions","potentialMatch","_calculateISOPositions","_calculateAWSPositions","_calculateASMEPositions","testPieceDirection","positions2","positions3","positions4","positionsF","inApprovalRange","notInCollection","TACK_WELD","COMPANY_NOT_ALLOWED","ERROR_SAVING","PERMISSION_DENIED","MISSING_USER","FOREIGN_KEY","WELDER_STANDARD_NOT_SUPPORTED","SESSION_EXPIRED","PROJECT_WELD_INTERMEDIATE_RESTORE","PROJECT_WELD_USED_BY_OTHERS","MILLIMETER_SECOND","GTAW","FCAW","SMAW","SAW","GMAW","MCAW","FCAWS","PAW","FEATURES","PA","PC","DAMAGED","WELD_PROGRESS_STATE","FIT","WELDED","PWHT_COMPLETED","WELD_PROGRESS_STATES_ARRAY","PQR_PDF_DOCUMENT","PQR_REPORT_DOCUMENT","PQR_TEST","WPS_PDF_DOCUMENT","IEIS_PDF_DOCUMENT","WELDER_CERTIFICATE_REPORT","WELDER_CERTIFICATE_PDF_DOCUMENT","WELDER_CERTIFICATE_TEST","MISCELLANEOUS_CERTIFICATE_PDF_DOCUMENT","WELDER_REPORT","FITTER_REPORT","INSPECTOR_REPORT","PROJECT_BASE_MATERIAL_CERTIFICATE","PROJECT_FILLER_MATERIAL_CERTIFICATE","PROJECT_REPORT_DOCUMENT","PROJECT_EXCEL_WELD_EXPORT","PROJECT_DRAWING","PROJECT_COMPONENT_DRAWING","PROJECT_TEST","PROJECT_COVER","WELDING_BOOK_REPORT","WELDING_BOOK_COVER","WELDING_BOOK_DRAWING","WPS_PDF","rawValue","rawValueString","resolveStoreRecord","defaultKey","parsedCompany","byMapping","lower","des","parsedDate","parsedExaminingBody","alternateKeys","primaryKey","parentFillerMaterial","getProperty","matchKeyLabelOption","normalized","resolveShielding","shieldingType","gasCommercialDesignation","fluxCommercialDesignation","parentGas","parentFlux","flowRateMin","flowRateMax","flowRate","relatedGas","relatedFlux","filterByIndustryCode","allModes","allProcesses","getHintFromMapping","parsedFallback","mapped","parsedCertificateType","parsedCompanyValue","parsedDateValue","parsedExaminingBodyValue","parsedJointType","parsedOverlayType","parsedDirection","parsedPosition","parsedProcess","parsedMecanization","parsedProductType","parsedStandard","parsedTransferMode","parsedTypeCurrent","parsedUnitSystem","parsedWeldType","parsedWeldersValue","parsedWelder","parsedDetails","names","welding_detail_names","consumable_insert","parsedWpsValue","parsedWps","successResult","errorResult","rec","needle","DRAWING","setA","setB","emberA","x","FILE_UPLOAD","FILE_PATH","ORIGINAL_FILENAME","CONTEXT","FILE_SIZE","LONG_DESCRIPTION","GROOVE_TYPE","convertSorting","sorting","convertToUrlParameters","locales","firstError","expected","getErrorStatus","groupExpression","isSameGroup","isGroups","groupNumberList","groupAllSameGroup","groupList","groupAllSameGroups","currentGroup","getGroupFromList","getFirstGroupOrNone","isGroup1","allGroups","currentGroup1","currentGroup2","isGroup3","isGroup4","groupInt","isGroup80","isGroup8OrAnyGroup40","dotPositionGroup1","dotPositionGroup2","getRuleFor1dot4","getRuleFor1All","getRuleFor8dot4","getRulesFor7","getRulesFor8","NON_DESTRUCTIVE_VISUAL_TESTING","NON_DESTRUCTIVE_PENETRANT_TESTING","NON_DESTRUCTIVE_MAGNETIC_TESTING","NON_DESTRUCTIVE_ULTRASONIC_TESTING","NON_DESTRUCTIVE_RADIOGRAPHIC_TESTING","CHEMICAL_REPORT_NAME","OVERLAY_NUMBER_OF_LAYERS","_groupBelongs","_fixDecimals","getSmallestBaseMaterialThickness","calculateHeatInputApprovalRange","heatInputMinParsed","heatInputMaxParsed","weldingProcessProperty","arcTransferModeProperty","calculateArcTransferModeApprovalRange","currentProcessName","calculateHardnessTestRequirements","stripWidth","materialDiameters","calculateParameterHeatInput","voltage","travelSpeed","voltageNum","currentNum","travelSpeedNum","thermalEfficiency","stripWidthNum","backingGasTestPiece","WELDING_PROCESS","FILLER_MATERIAL_TYPE","lastCompletedState","createStatesList","minimumRaw","maximumRaw","calculateISO15614ApprovalRange","isMecanization","allMecanizations","mecanizationNameList","mecanizationName","applied","FILLET_WELD_BASE_MATERIAL_THICKNESS_MINIMUM_APPROVALRANGE","FILLET_WELD_BASE_MATERIAL_THICKNESS_MAXIMUM_APPROVALRANGE","PJP_BUTT_WELD_BASE_MATERIAL_THICKNESS_MINIMUM_APPROVAL_RANGE","PJP_BUTT_WELD_BASE_MATERIAL_THICKNESS_MAXIMUM_APPROVAL_RANGE","toCheck","wrongPosition","resultArray","areAllProcess","PROCESS_NAME","is141","is142","is143","is145","is15","rootProcess","fillProcess","capProcess","envMap","runtimeEnvironments","overrides","SCALAR_KEYS","apiKeys","metricsAdapters","mixpanel","googleAnalytics","getStandardName","getWelderStandardName","isStandardISO15614Part2","isStandardISO15614Part5","isWelderStandardISO96065","isStandardAPI","isSameStandard","standard1","standard2","standard1Name","standard2Name","isStandardAnyOfISO1561X","isStandardAnyOfIso1561Type2","currentPlan","wpsPlan","certificatePlan","qualityPlan","formatRangeWithNDecimals","decimals","valueInMeterMinute","floatValue","valueInMilimeterMinute","valueInMilimeterSecond","valueParsed","valueDecimal","knownFractions","valueFraction","integer","numerator","denominator","gcd","toFractionInput","toFractionString","len","pow","divisor","trunc","pqrValidationRange","wpsMaterial","spec2","totalProperty","isWpsValid","arePassesValid","findIn","findInAndGetDesignation","resultDetail","getCompleteDesignation","ssNb","ssMb","ssGb","ssFb","bs","layer1","layer2","_toArray","relationship","isWPSFilletWeld","isPqrButtWeld","_rangeValidation","_thicknessTotalInvalidMessage","_rangeMessageValidator","_shouldValidateDiameter","_isPQRPlateAndWPSPipe","diameterMin","_isISO","_isAWS","maxDistanceForAWSPipe","_singleValueValidation","_singleValueMessage","_pwhtRangeMessage","_presenceMinimumValidation","_presenceMinimumValidationMessage","_presenceMaximumValidation","_presenceMaximumValidationMessage","_getApprovalRange","_isValidInstance","_invalidMessage","_collectionInCollectionById","_notInCollection","_collectionApprovalRange","_isSameInstance","materialLabel","_instanceHasValue","_isWeldingPositionDirectionValid","_weldingPositionDirectionInvalidMessage","_isSameLovValue","_lovInvalidMessage","_isShieldingValidForProcess","_shieldingInvalidMessageForProcess","_isSameInstanceInvalidMessage","_isFillerMaterialValid","_fillerMaterialInvalidMessage","_isFillerMaterialValidAWS","_fillerMaterialForAWSInvalidMessage","_isFillerMaterialCommercialDesignationValid","_fillerMaterialCommercialDesignationInvalidMessage","_isFillerMaterialDiameterValid","_fillerMaterialDiameterInvalidMessage","_isASME","pqrProductType","optionsOnlyIncludePositions","productTypes","serializePositions","_isWeldingPositionValid","hardnessStatus","impactStatus","currentValueNumber","valueTranslation","_lovMessage","_rangeMessageWithTranslationKey","wpsWeldingParameter","pqrMinimum","pqrValue","_getParameterProcessId","pqrMaximum","currentId","wireFeedSpeed","convertedMinimum","convertedMaximum","pqrLayer","isParameterWeldingProcessValid","parameterWeldingProcessInvalidMessage","range","heatInputRoot","heatInputFill","heatInputCap","correctValue","rangeProperty","rangeSerialization","weldingPositionProperty","_getAllWeldingPositions","validationProperty","wpsProperty","wpsWeldingProcessProperty","pqrFillerMaterial","wpsFillerMaterial","isSameSpecification","isSpecification51or55","isSpecification51or55withFillerMaterial","isSpecification517or523","isSpecification517or523withFiller","isSpecification518or528or536","isSpecification518or528or536withFiller","isSpecification520or529or536","isSpecification520or529or536withFiller","wpsFillerMaterialDiameterProperty","diameterWPS","diameterPQR","distancePQR","isWPSPartialJointPenetrationButtWeld","asmeMatchProperty","impactRequirementsProperty","metaProperty","_isEqualId","_isAWSD15","valueProperty","translationKey","lovKey","lovValue","_collectionValidation","messageKey","_angleRangeMessage","collectionPropertyId","haystack","needles","approvalRangeId","firstId","secondId","JOB_KNOWLEDGE","PREVIOUS_EXTERNAL_REQUALIFICATION_DATE","INTERNAL_REQUALIFICATION_DATE","INTERNAL_REQUALIFICATION_DEADLINE","EXTERNAL_REQUALIFICATION_DEADLINE","SUPPLEMENTARY_FILLET_WELD_TEST","ARC_TRANSFER_MODE_ROOT_TEST_PIECE","ARC_TRANSFER_MODE_FILL_TEST_PIECE","TYPE_CURRENT_ROOT_TEST_PIECE","TYPE_CURRENT_FILL_TEST_PIECE","THICKNESS_ROOT_LAYER_TEST_PIECE","THICKNESS_FILL_LAYER_TEST_PIECE","FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TEST_PIECE","FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TEST_PIECE","ELECTRODE_TYPE_ROOT_TEST_PIECE","ELECTRODE_TYPE_FILL_TEST_PIECE","SHIELDING_ROOT_GAS_TEST_PIECE","SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE","SHIELDING_ROOT_FLUX_TEST_PIECE","SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE","SHIELDING_FILL_GAS_TEST_PIECE","SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE","SHIELDING_FILL_FLUX_TEST_PIECE","SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE","BACKING_TEST_PIECE","BACKING_GAS_TEST_PIECE","BACKING_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE","BACKING_FLUX_TEST_PIECE","BACKING_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE","WELDING_PROCESS_ROOT_APPROVAL_RANGE","WELDING_PROCESS_FILL_APPROVAL_RANGE","WELD_TYPE_APPROVAL_RANGE","ARC_TRANSFER_MODE_ROOT_APPROVAL_RANGE","ARC_TRANSFER_MODE_FILL_APPROVAL_RANGE","WELDING_DETAILS_APPROVAL_RANGE","WELDING_POSITION_ROOT_APPROVAL_RANGE","WELDING_POSITION_FILL_APPROVAL_RANGE","THICKNESS_ROOT_MINIMUM_APPROVAL_RANGE","THICKNESS_ROOT_MAXIMUM_APPROVAL_RANGE","THICKNESS_FILL_MINIMUM_APPROVAL_RANGE","THICKNESS_FILL_MAXIMUM_APPROVAL_RANGE","THICKNESS_TOTAL_MINIMUM_APPROVAL_RANGE","THICKNESS_TOTAL_MAXIMUM_APPROVAL_RANGE","DIAMETER_MINIMUM_APPROVAL_RANGE","DIAMETER_MAXIMUM_APPROVAL_RANGE","ELECTRODE_TYPE_ROOT_APPROVAL_RANGE","ELECTRODE_TYPE_FILL_APPROVAL_RANGE","SUPPLEMENTARY_FILLET_WELD_TEST_REQUIRED","ELECTRODE_TYPE_CAP_TEST_PIECE","ELECTRODE_TYPE_CAP_APPROVAL_RANGE","CODE","WELDERS","BOOK_DRAWINGS","COMPONENT_DRAWINGS","PIPING_PIECES","PLATE_PIECES","WPS_FILLER_MATERIAL_GROUP_ROOT","WPS_FILLER_MATERIAL_GROUP_FILL","WPS_DOCUMENT","PQR_ROOT_LAYER","PQR_FILL_LAYER","PQR_CAP_LAYER","impactTestRequiredRaw","allLayers","hasFillLayer","hasCapLayer","SOURCE_PARAMETER","heatInputMinimumPass","standardFactor","heatInputMaximumPass","define","metaName","rawConfig","decodeURIComponent","runningTests","require"],"sources":["vendor/ember-cli/app-prefix.js","weldnote/adapters/account.js","weldnote/adapters/application.js","weldnote/app.js","weldnote/authenticators/fallback-simple-auth.js","weldnote/authenticators/indusuite-sso.js","weldnote/breakpoints.js","weldnote/components/-dynamic-element-alt.js","weldnote/components/-dynamic-element.js","weldnote/components/action-log/display.js","weldnote/components/admin-tools/account-repair.ts","weldnote/components/admin-tools/drift-audit.ts","weldnote/components/admin-tools/identity-conflicts.ts","weldnote/components/admin-tools/identity-dossier.ts","weldnote/components/admin-tools/identity-drift-report.ts","weldnote/components/admin-tools/instructions.ts","weldnote/components/admin-tools/org-api-sync.ts","weldnote/components/admin-tools/result.ts","weldnote/components/admin-tools/sync-account.ts","weldnote/components/admin-tools/zombie-file-cleanup.ts","weldnote/components/alert-message.js","weldnote/components/base-edit-glimmer.js","weldnote/components/base-edit-wps.js","weldnote/components/base-edit.js","weldnote/components/base-material-chooser.js","weldnote/components/base-material-chooser/creator.ts","weldnote/components/billing-notice.js","weldnote/components/blank-template.js","weldnote/components/bread-crumb-settings.js","weldnote/components/bread-crumb.js","weldnote/components/card-pqr.js","weldnote/components/card-welder-certificate.js","weldnote/components/card-wps.js","weldnote/components/certificate-approval-range.js","weldnote/components/certificate-auto-renewal-status.js","weldnote/components/confirm-delete-modal.js","weldnote/components/dashboard/action-log-list.js","weldnote/components/dashboard/limit-table.js","weldnote/components/dashed-separator.js","weldnote/components/digitalize-pqr/page.js","weldnote/components/digitalize-pqr/pqr-review-modal.ts","weldnote/components/digitalize-pqr/queue-item-actions.ts","weldnote/components/digitalize-pqr/queue-list.ts","weldnote/components/digitalize-pqr/quick-approve-modal.ts","weldnote/components/digitalize-pqr/review/section-base-materials.ts","weldnote/components/digitalize-pqr/review/section-consumables.ts","weldnote/components/digitalize-pqr/review/section-general.ts","weldnote/components/digitalize-pqr/review/section-mechanical-tests.ts","weldnote/components/digitalize-pqr/review/section-ndt-results.ts","weldnote/components/digitalize-pqr/review/section-other-details.ts","weldnote/components/digitalize-pqr/review/section-standard.ts","weldnote/components/digitalize-pqr/review/section-test-piece.ts","weldnote/components/digitalize-pqr/review/section-thermal.ts","weldnote/components/digitalize-pqr/review/section-welding-details.ts","weldnote/components/digitalize-pqr/review/section-welding-passes.ts","weldnote/components/digitalize-pqr/status-badge.ts","weldnote/components/digitalize-pqr/types/editable-pass.ts","weldnote/components/digitalize-pqr/types/pqr-form-state.ts","weldnote/components/digitalize-pqr/upload-modal.ts","weldnote/components/digitalize-welder-certificate/certificate-review-modal.ts","weldnote/components/digitalize-welder-certificate/page.js","weldnote/components/digitalize-welder-certificate/queue-list.ts","weldnote/components/digitalize-welder-certificate/quick-approve-modal.ts","weldnote/components/digitalize-welder-certificate/review/section-base-materials.ts","weldnote/components/digitalize-welder-certificate/review/section-consumables.ts","weldnote/components/digitalize-welder-certificate/review/section-general.ts","weldnote/components/digitalize-welder-certificate/review/section-mechanical-tests.ts","weldnote/components/digitalize-welder-certificate/review/section-ndt-results.ts","weldnote/components/digitalize-welder-certificate/review/section-operator-details.ts","weldnote/components/digitalize-welder-certificate/review/section-standard.ts","weldnote/components/digitalize-welder-certificate/review/section-test-piece.ts","weldnote/components/digitalize-welder-certificate/upload-modal.ts","weldnote/components/display-approval-range.js","weldnote/components/empty-field.js","weldnote/components/expiring-certificates.js","weldnote/components/feature-banner.ts","weldnote/components/filler-material-chooser.js","weldnote/components/filler-material-chooser/creator.js","weldnote/components/filler-material-diameters.js","weldnote/components/filler-material-welding-pass-selector.js","weldnote/components/fleet-machine-selector-modal.ts","weldnote/components/fleet-machine-selector.ts","weldnote/components/flux-chooser.js","weldnote/components/flux-chooser/creator.ts","weldnote/components/gas-approval-range-display.js","weldnote/components/gas-chooser.js","weldnote/components/gas-chooser/creator.js","weldnote/components/generic-boolean.js","weldnote/components/generic-date-field.js","weldnote/components/generic-distance-field.ts","weldnote/components/generic-filler-material-commercial-designation.js","weldnote/components/generic-filler-material-commercial-designation/after-options.js","weldnote/components/generic-flux-commercial-designation.js","weldnote/components/generic-gas-commercial-designation.js","weldnote/components/generic-lov.js","weldnote/components/generic-multi-lov.js","weldnote/components/generic-numeric-field.js","weldnote/components/generic-search-lov.js","weldnote/components/generic-text-field.js","weldnote/components/generic-value-with-label.js","weldnote/components/i-panel.js","weldnote/components/inline-create.js","weldnote/components/inline-create/base-material-part.js","weldnote/components/input-search.js","weldnote/components/inspinia-config.js","weldnote/components/instance-aware-buttons.js","weldnote/components/loading-spinner.js","weldnote/components/login-form.js","weldnote/components/lookup/groove-design.js","weldnote/components/lookup/weld-layer.js","weldnote/components/miscellaneous-certificate-dashboard-table.js","weldnote/components/miscellaneous-certificate-expiration-table.js","weldnote/components/model-arc-transfer-mode/edit.js","weldnote/components/model-base-material-group/edit.js","weldnote/components/model-base-material/edit.js","weldnote/components/model-certification-special-requirement/edit.js","weldnote/components/model-company/edit.js","weldnote/components/model-component-drawing/edit.js","weldnote/components/model-component-drawing/lookup-modal.js","weldnote/components/model-component-drawing/lookup-modal/select-drawing.js","weldnote/components/model-component-drawing/lookup.js","weldnote/components/model-construction-standard/edit.js","weldnote/components/model-destructive-testing/edit.js","weldnote/components/model-electrode-type/edit.js","weldnote/components/model-examining-body/edit.js","weldnote/components/model-examining-body/lookup-create.js","weldnote/components/model-filler-material-commercial-designation/creator.ts","weldnote/components/model-filler-material-commercial-designation/creator/after-options.js","weldnote/components/model-filler-material-commercial-designation/edit.js","weldnote/components/model-filler-material-group/edit.js","weldnote/components/model-filler-material/edit.js","weldnote/components/model-fitter/edit.js","weldnote/components/model-flux-commercial-designation/creator.js","weldnote/components/model-flux-commercial-designation/edit.js","weldnote/components/model-flux-specification/edit.js","weldnote/components/model-flux/edit.js","weldnote/components/model-gas-commercial-designation/creator.js","weldnote/components/model-gas-commercial-designation/edit.js","weldnote/components/model-gas-specification/edit.js","weldnote/components/model-gas/edit.js","weldnote/components/model-general-drawing/edit.js","weldnote/components/model-general-drawing/lookup-modal.js","weldnote/components/model-general-drawing/lookup-modal/select-drawing.js","weldnote/components/model-general-drawing/lookup.js","weldnote/components/model-groove-design/edit.js","weldnote/components/model-ieis/edit.js","weldnote/components/model-ieis/new.js","weldnote/components/model-inspector/edit.js","weldnote/components/model-miscellaneous-certificate-type/edit.js","weldnote/components/model-miscellaneous-certificate/duplicate.js","weldnote/components/model-miscellaneous-certificate/edit.js","weldnote/components/model-ndt-report-certificate/lookup-modal.js","weldnote/components/model-ndt-report-certificate/lookup-modal/select-ndt-report.js","weldnote/components/model-ndt-report-certificate/lookup.js","weldnote/components/model-ndt-report-certificate/lookup/select-ndt-report.js","weldnote/components/model-non-destructive-testing/edit.js","weldnote/components/model-piping-piece/edit.js","weldnote/components/model-plate-piece/edit.js","weldnote/components/model-post-weld-treatment-method/edit.js","weldnote/components/model-pqr-learned-mapping/edit.js","weldnote/components/model-pqr-standard/edit.js","weldnote/components/model-pqr/additional-details.js","weldnote/components/model-pqr/base-material-tests.js","weldnote/components/model-pqr/bend-test.js","weldnote/components/model-pqr/chemical-analysis.js","weldnote/components/model-pqr/confirm-delete.js","weldnote/components/model-pqr/display-decimal-range.js","weldnote/components/model-pqr/duplicate.js","weldnote/components/model-pqr/edit.js","weldnote/components/model-pqr/filler-material-tests.js","weldnote/components/model-pqr/filler-materials.js","weldnote/components/model-pqr/flow-rate-display.ts","weldnote/components/model-pqr/hardness-test.js","weldnote/components/model-pqr/hardness-test/edit-line.js","weldnote/components/model-pqr/impact-test.js","weldnote/components/model-pqr/lookup.js","weldnote/components/model-pqr/lookup/select-pqr-link.js","weldnote/components/model-pqr/lookup/select-pqr.js","weldnote/components/model-pqr/new.js","weldnote/components/model-pqr/non-destructive-testing-table.js","weldnote/components/model-pqr/product-type-approval-range-help.js","weldnote/components/model-pqr/root-fill-cap-display.js","weldnote/components/model-pqr/shielding-backing-details.js","weldnote/components/model-pqr/tensile-test.js","weldnote/components/model-pqr/thermal-parameters.ts","weldnote/components/model-pqr/view-mode.js","weldnote/components/model-pqr/view-mode/empty-thermal-parameter.js","weldnote/components/model-pqr/welding-parameters.js","weldnote/components/model-preparation-method/edit.js","weldnote/components/model-project-client/lookup-create.js","weldnote/components/model-project/chooser.js","weldnote/components/model-project/component-chooser-with-options.js","weldnote/components/model-project/component-chooser.js","weldnote/components/model-project/lookup.js","weldnote/components/model-project/lookup/select-project.js","weldnote/components/model-special-requirement/lookup-create.js","weldnote/components/model-staff-position/edit.js","weldnote/components/model-staff/edit.js","weldnote/components/model-test-inspection-class/edit.js","weldnote/components/model-test-inspection-class/new.js","weldnote/components/model-test-location/edit.js","weldnote/components/model-test-location/lookup-create.js","weldnote/components/model-test-stage-name/edit.js","weldnote/components/model-test-stage-name/lookup-create.js","weldnote/components/model-test-stage/create-test.js","weldnote/components/model-test-stage/inline-edit.js","weldnote/components/model-type-current-polarity/edit.js","weldnote/components/model-weld-layer-configuration/edit.js","weldnote/components/model-weld-type/edit.js","weldnote/components/model-welder-certificate/arc-length-control-approval-range.ts","weldnote/components/model-welder-certificate/auto-renewal-status.ts","weldnote/components/model-welder-certificate/confirm-delete.js","weldnote/components/model-welder-certificate/destructive-tests.js","weldnote/components/model-welder-certificate/duplicate.js","weldnote/components/model-welder-certificate/edit.ts","weldnote/components/model-welder-certificate/joint-tracking-approval-range.ts","weldnote/components/model-welder-certificate/new.ts","weldnote/components/model-welder-certificate/non-destructive-tests.js","weldnote/components/model-welder-certificate/product-type-approval-range.ts","weldnote/components/model-welder-certificate/view-mode.js","weldnote/components/model-welder-certificate/visual-control-approval-range.ts","weldnote/components/model-welder-certificate/welding-operator-welding-detail-approval-range.ts","weldnote/components/model-welder-standard/edit.js","weldnote/components/model-welder/edit.ts","weldnote/components/model-welder/lookup.js","weldnote/components/model-welding-book-status/edit.js","weldnote/components/model-welding-book-weld-display-base-material-thickness.js","weldnote/components/model-welding-book-weld-inspection/edit.js","weldnote/components/model-welding-book/choose-wps-weld.js","weldnote/components/model-welding-book/confirm-delete.js","weldnote/components/model-welding-book/copy-welds-to-project-modal.js","weldnote/components/model-welding-book/drawings-table.js","weldnote/components/model-welding-book/edit-weld.js","weldnote/components/model-welding-book/edit.js","weldnote/components/model-welding-book/new.js","weldnote/components/model-welding-book/new/create-project.js","weldnote/components/model-welding-book/new/edit-form.js","weldnote/components/model-welding-book/new/lookup-component.js","weldnote/components/model-welding-book/revision.js","weldnote/components/model-welding-book/update-revision.js","weldnote/components/model-welding-detail/edit.js","weldnote/components/model-welding-map/certificate-map.js","weldnote/components/model-welding-map/edit.js","weldnote/components/model-welding-map/new.js","weldnote/components/model-welding-map/pqr-map.js","weldnote/components/model-welding-map/wps-map.js","weldnote/components/model-welding-position/edit.js","weldnote/components/model-welding-procedure-specification/add-new-linked-parameter.js","weldnote/components/model-welding-procedure-specification/certificate-from-pwps.js","weldnote/components/model-welding-procedure-specification/confirm-delete.js","weldnote/components/model-welding-procedure-specification/delete-errors.js","weldnote/components/model-welding-procedure-specification/duplicate-modal.js","weldnote/components/model-welding-procedure-specification/edit.js","weldnote/components/model-welding-procedure-specification/lookup-modal.js","weldnote/components/model-welding-procedure-specification/lookup.js","weldnote/components/model-welding-procedure-specification/lookup/select-wps-link.js","weldnote/components/model-welding-procedure-specification/lookup/select-wps.js","weldnote/components/model-welding-procedure-specification/new.js","weldnote/components/model-welding-procedure-specification/pqr-from-pwps.js","weldnote/components/model-welding-procedure-specification/prequalified-wps-from-pwps.js","weldnote/components/model-welding-procedure-specification/print-options.ts","weldnote/components/model-welding-procedure-specification/project-chooser.js","weldnote/components/model-welding-procedure-specification/revision.js","weldnote/components/model-welding-procedure-specification/save-invalid-modal.js","weldnote/components/model-welding-procedure-specification/save-invalid-parameter-modal.ts","weldnote/components/model-welding-procedure-specification/standard-wps-from-pwps.js","weldnote/components/model-welding-procedure-specification/update-revision.js","weldnote/components/model-welding-procedure-specification/view-mode-range.js","weldnote/components/model-welding-procedure-specification/view-mode.js","weldnote/components/model-welding-procedure-specification/welding-parameters-modal.js","weldnote/components/model-welding-procedure-specification/wps-from-multiple-pqr.js","weldnote/components/model-welding-procedure-specification/wps-from-single-pqr.js","weldnote/components/model-welding-process/edit.js","weldnote/components/model-wpq-learned-mapping/edit.js","weldnote/components/new-version-notifier.js","weldnote/components/parse-queue/queue-item-actions.ts","weldnote/components/parse-queue/status-badge.ts","weldnote/components/pikaday/pikaday-input.js","weldnote/components/piping-piece-chooser.js","weldnote/components/plate-piece-chooser.js","weldnote/components/power-select-pre-searched-before-options.js","weldnote/components/pqr-approval-range.js","weldnote/components/pqr-model-value.js","weldnote/components/progress-bar.js","weldnote/components/pwht-search-option-with-temperature.js","weldnote/components/pwht-search-option.js","weldnote/components/responsive-grid.js","weldnote/components/save-button.js","weldnote/components/save-stop-button.js","weldnote/components/schematic-image-editor5.ts","weldnote/components/select-suggested-option.js","weldnote/components/settings-menu.js","weldnote/components/shielding-choice-approval-range.js","weldnote/components/shielding-choice.js","weldnote/components/shielding-choice/horizontal.js","weldnote/components/show-search-message-more-results.js","weldnote/components/sidebar-activator.js","weldnote/components/simple-attribute.ts","weldnote/components/simple-table.js","weldnote/components/sorted-base-material-group.js","weldnote/components/step-progress.js","weldnote/components/task-progress-provider.js","weldnote/components/task-progress.js","weldnote/components/tooltip-on-element.js","weldnote/components/trial-help-screen.js","weldnote/components/trial-help-video.js","weldnote/components/trial-notice.js","weldnote/components/ui-column.js","weldnote/components/ui-form/base.js","weldnote/components/ui-form/errors.js","weldnote/components/ui-form/generic-group.js","weldnote/components/ui-form/group.js","weldnote/components/ui-form/group/checkbox.js","weldnote/components/ui-form/group/date.js","weldnote/components/ui-form/group/decimal.js","weldnote/components/ui-form/group/lov.js","weldnote/components/ui-form/group/multi-lov.js","weldnote/components/ui-form/group/select.js","weldnote/components/ui-form/group/text-area.js","weldnote/components/ui-form/group/text.js","weldnote/components/ui-form/group/upload.js","weldnote/components/ui-form/help-text.js","weldnote/components/ui-form/input/checkbox.js","weldnote/components/ui-form/input/date.js","weldnote/components/ui-form/input/decimal.js","weldnote/components/ui-form/input/lov.js","weldnote/components/ui-form/input/multi-lov.js","weldnote/components/ui-form/input/select.js","weldnote/components/ui-form/input/text-area.js","weldnote/components/ui-form/input/text.js","weldnote/components/ui-form/input/upload.js","weldnote/components/ui-form/label.js","weldnote/components/ui-form/provider.js","weldnote/components/ui-modal.js","weldnote/components/ui-panel.js","weldnote/components/ui-row.js","weldnote/components/unsaved-work-list.js","weldnote/components/upload-base-sketch.js","weldnote/components/user-profile.js","weldnote/components/user-profile/ndt-credentials.ts","weldnote/components/view-mode-qualification.js","weldnote/components/w-attribute-boolean.js","weldnote/components/w-attribute-date.js","weldnote/components/w-attribute-decimal.js","weldnote/components/w-attribute-distance.js","weldnote/components/w-attribute-long-text.js","weldnote/components/w-attribute-lov.js","weldnote/components/w-attribute-speed.js","weldnote/components/w-attribute.js","weldnote/components/w-edit-toolbar.js","weldnote/components/w-file-upload.js","weldnote/components/w-image-preview.js","weldnote/components/w-model-edit-panel.js","weldnote/components/w-model-lov-with-create.js","weldnote/components/w-page-heading.js","weldnote/components/w-pagination.js","weldnote/components/w-power-model-lov.js","weldnote/components/w-power-multi-lov.js","weldnote/components/w-sidebar.js","weldnote/components/w-toolbar/new-button.js","weldnote/components/w-tooltip.js","weldnote/components/weld-sketch-designer.js","weldnote/components/weldcloud-license-required-modal.js","weldnote/components/welder-certificate-dashboard-table.js","weldnote/components/welder-certificate-expiration-table-internal.js","weldnote/components/welder-certificate-expiration-table.js","weldnote/components/welding-details-approval-range.js","weldnote/components/welding-details-chooser.js","weldnote/components/welding-details-chooser/horizontal.js","weldnote/components/welding-details-chooser/wps-error.js","weldnote/components/welding-map/map-table.js","weldnote/components/welding-pass-field-row.js","weldnote/components/welding-passes-field-table.js","weldnote/components/welding-processes-field-container.js","weldnote/components/welding-processes-field-row.js","weldnote/components/weldnote-grid/base-material-for-list.js","weldnote/components/weldnote-grid/base-material-group-link.js","weldnote/components/weldnote-grid/base-material-link.js","weldnote/components/weldnote-grid/base-material-thickness-for-list.js","weldnote/components/weldnote-grid/company-link.js","weldnote/components/weldnote-grid/component-drawing-link.js","weldnote/components/weldnote-grid/date-cell.js","weldnote/components/weldnote-grid/examining-body-link.js","weldnote/components/weldnote-grid/filler-material-commercial-designation-link.js","weldnote/components/weldnote-grid/filler-material-group-link.js","weldnote/components/weldnote-grid/filler-material-link.js","weldnote/components/weldnote-grid/fitter-id.js","weldnote/components/weldnote-grid/fitter-link.js","weldnote/components/weldnote-grid/flux-commercial-designation-link.js","weldnote/components/weldnote-grid/flux-link.js","weldnote/components/weldnote-grid/gas-commercial-designation-link.js","weldnote/components/weldnote-grid/gas-link.js","weldnote/components/weldnote-grid/general-drawing-link.js","weldnote/components/weldnote-grid/groove-design-link.js","weldnote/components/weldnote-grid/ieis-base-materials.js","weldnote/components/weldnote-grid/ieis-link.js","weldnote/components/weldnote-grid/ieis-test-stages.js","weldnote/components/weldnote-grid/ieis-wps-link.js","weldnote/components/weldnote-grid/ieis-wps-process.js","weldnote/components/weldnote-grid/image-cell.js","weldnote/components/weldnote-grid/inspector-link.js","weldnote/components/weldnote-grid/miscellaneous-certificate-link.js","weldnote/components/weldnote-grid/non-destructive-testing-link.js","weldnote/components/weldnote-grid/numeric-range/current.js","weldnote/components/weldnote-grid/numeric-range/heat-input.js","weldnote/components/weldnote-grid/numeric-range/travel-speed.js","weldnote/components/weldnote-grid/numeric-range/voltage.js","weldnote/components/weldnote-grid/numeric-range/wire-feed.js","weldnote/components/weldnote-grid/passes/process.js","weldnote/components/weldnote-grid/person-age.js","weldnote/components/weldnote-grid/person-name.js","weldnote/components/weldnote-grid/piping-piece-link.js","weldnote/components/weldnote-grid/plate-piece-link.js","weldnote/components/weldnote-grid/pqr-learned-mapping-link.js","weldnote/components/weldnote-grid/pqr-link-archive.js","weldnote/components/weldnote-grid/pqr-link.js","weldnote/components/weldnote-grid/pqr-view/filler-material.js","weldnote/components/weldnote-grid/pqrs-link.js","weldnote/components/weldnote-grid/project-client-link.js","weldnote/components/weldnote-grid/project-link-from-welding-book.js","weldnote/components/weldnote-grid/project-no-link.js","weldnote/components/weldnote-grid/pwps-link.js","weldnote/components/weldnote-grid/qmatrix-link.js","weldnote/components/weldnote-grid/repair-rate.js","weldnote/components/weldnote-grid/responsive-expanded-row.js","weldnote/components/weldnote-grid/row-toggle.js","weldnote/components/weldnote-grid/simple-responsive-expanded-row.js","weldnote/components/weldnote-grid/simple-styled-row.js","weldnote/components/weldnote-grid/test-inspection-class-link.js","weldnote/components/weldnote-grid/test-inspection-stages.js","weldnote/components/weldnote-grid/test-location-link.js","weldnote/components/weldnote-grid/test-stage-name-link.js","weldnote/components/weldnote-grid/verified-icon.js","weldnote/components/weldnote-grid/weld-layer-configuration-link.js","weldnote/components/weldnote-grid/weld-type-link.js","weldnote/components/weldnote-grid/weld-type.ts","weldnote/components/weldnote-grid/welder-certificate-link-archive.js","weldnote/components/weldnote-grid/welder-certificate-link.js","weldnote/components/weldnote-grid/welder-certificate-number-standard.js","weldnote/components/weldnote-grid/welder-certificate-row.js","weldnote/components/weldnote-grid/welder-id.js","weldnote/components/weldnote-grid/welder-in-certificate.js","weldnote/components/weldnote-grid/welder-link.js","weldnote/components/weldnote-grid/welding-book-link.js","weldnote/components/weldnote-grid/welding-position-link.js","weldnote/components/weldnote-grid/welding-process-link.js","weldnote/components/weldnote-grid/welding-processes.js","weldnote/components/weldnote-grid/wpq-learned-mapping-link.js","weldnote/components/weldnote-grid/wps-link-archive.js","weldnote/components/weldnote-grid/wps-link.js","weldnote/components/weldnote-grid/wps-parameter-row.js","weldnote/config/custom-inflector-rules.js","weldnote/config/deprecation-workflow.js","weldnote/config/types/component-drawing.js","weldnote/config/types/general-drawing.js","weldnote/config/types/product-type.ts","weldnote/config/types/project-document.js","weldnote/config/types/project-line-class.js","weldnote/config/types/weld-type-group.ts","weldnote/controllers/_base/edit.ts","weldnote/controllers/_base/list-js.js","weldnote/controllers/_base/list.ts","weldnote/controllers/_base/new.ts","weldnote/controllers/account-admin.js","weldnote/controllers/action-logs.js","weldnote/controllers/admin-tools.ts","weldnote/controllers/application.js","weldnote/controllers/arc-transfer-mode.ts","weldnote/controllers/arc-transfer-mode/new.ts","weldnote/controllers/arc-transfer-modes.ts","weldnote/controllers/base-material-group.ts","weldnote/controllers/base-material-group/new.ts","weldnote/controllers/base-material-groups.js","weldnote/controllers/base-material.ts","weldnote/controllers/base-material/new.ts","weldnote/controllers/base-materials.js","weldnote/controllers/certification-special-requirement.ts","weldnote/controllers/certification-special-requirement/new.ts","weldnote/controllers/certification-special-requirements.js","weldnote/controllers/companies.js","weldnote/controllers/company.ts","weldnote/controllers/component-drawing.ts","weldnote/controllers/component-drawing/new.ts","weldnote/controllers/component-drawings.js","weldnote/controllers/construction-standard.ts","weldnote/controllers/construction-standard/new.ts","weldnote/controllers/construction-standards.js","weldnote/controllers/destructive-testing.ts","weldnote/controllers/destructive-testing/new.ts","weldnote/controllers/destructive-testings.js","weldnote/controllers/digitalize-pqr.js","weldnote/controllers/digitalize-welder-certificate.js","weldnote/controllers/electrode-type.ts","weldnote/controllers/electrode-type/new.ts","weldnote/controllers/electrode-types.js","weldnote/controllers/error-not-allowed-site.ts","weldnote/controllers/examining-bodies.js","weldnote/controllers/examining-body.ts","weldnote/controllers/examining-body/new.ts","weldnote/controllers/filler-material-commercial-designation.ts","weldnote/controllers/filler-material-commercial-designation/new.ts","weldnote/controllers/filler-material-commercial-designations.js","weldnote/controllers/filler-material-group.ts","weldnote/controllers/filler-material-group/new.ts","weldnote/controllers/filler-material-groups.js","weldnote/controllers/filler-material.ts","weldnote/controllers/filler-material/new.ts","weldnote/controllers/filler-materials.js","weldnote/controllers/fitter.ts","weldnote/controllers/fitters.js","weldnote/controllers/flux-commercial-designation.ts","weldnote/controllers/flux-commercial-designation/new.ts","weldnote/controllers/flux-commercial-designations.js","weldnote/controllers/flux-specification.ts","weldnote/controllers/flux-specification/new.ts","weldnote/controllers/flux-specifications.js","weldnote/controllers/flux.ts","weldnote/controllers/flux/new.ts","weldnote/controllers/fluxes.js","weldnote/controllers/gas-commercial-designation.ts","weldnote/controllers/gas-commercial-designation/new.ts","weldnote/controllers/gas-commercial-designations.js","weldnote/controllers/gas-specification.ts","weldnote/controllers/gas-specification/new.ts","weldnote/controllers/gas-specifications.js","weldnote/controllers/gas.ts","weldnote/controllers/gas/new.ts","weldnote/controllers/gases.js","weldnote/controllers/general-drawing.ts","weldnote/controllers/general-drawing/new.ts","weldnote/controllers/general-drawings.js","weldnote/controllers/groove-design.ts","weldnote/controllers/groove-design/new.ts","weldnote/controllers/groove-designs.js","weldnote/controllers/help-center.ts","weldnote/controllers/ieis-archived.js","weldnote/controllers/ieis.js","weldnote/controllers/ieis/new.ts","weldnote/controllers/index.js","weldnote/controllers/inspector.ts","weldnote/controllers/inspectors.js","weldnote/controllers/loading.ts","weldnote/controllers/miscellaneous-certificate-type.ts","weldnote/controllers/miscellaneous-certificate-type/new.ts","weldnote/controllers/miscellaneous-certificate-types.js","weldnote/controllers/miscellaneous-certificate.ts","weldnote/controllers/miscellaneous-certificate/new.ts","weldnote/controllers/miscellaneous-certificates.js","weldnote/controllers/miscellaneous-certificates/30days.js","weldnote/controllers/miscellaneous-certificates/archived.js","weldnote/controllers/miscellaneous-certificates/expired.js","weldnote/controllers/miscellaneous-certificates/today.js","weldnote/controllers/ndt-report-certificate.ts","weldnote/controllers/ndt-report-certificate/new.ts","weldnote/controllers/non-destructive-testing.ts","weldnote/controllers/non-destructive-testing/new.ts","weldnote/controllers/non-destructive-testings.js","weldnote/controllers/piping-piece.ts","weldnote/controllers/piping-piece/new.ts","weldnote/controllers/piping-pieces.js","weldnote/controllers/plate-piece.ts","weldnote/controllers/plate-piece/new.ts","weldnote/controllers/plate-pieces.js","weldnote/controllers/post-weld-treatment-method.ts","weldnote/controllers/post-weld-treatment-method/new.ts","weldnote/controllers/post-weld-treatment-methods.js","weldnote/controllers/pqr-learned-mappings.js","weldnote/controllers/pqr-standard.ts","weldnote/controllers/pqr-standard/new.ts","weldnote/controllers/pqr-standards.js","weldnote/controllers/pqr-view.ts","weldnote/controllers/pqr.js","weldnote/controllers/pqr/new.ts","weldnote/controllers/pqrs-archived.js","weldnote/controllers/pqrs.js","weldnote/controllers/preparation-method.ts","weldnote/controllers/preparation-method/new.ts","weldnote/controllers/preparation-methods.js","weldnote/controllers/project-client/new.ts","weldnote/controllers/project-document/new.ts","weldnote/controllers/settings.js","weldnote/controllers/staff-position.ts","weldnote/controllers/staff-position/new.ts","weldnote/controllers/staff-positions.js","weldnote/controllers/staff.ts","weldnote/controllers/staffs.ts","weldnote/controllers/test-inspection-classes.js","weldnote/controllers/test-locations.js","weldnote/controllers/test-stage-names.js","weldnote/controllers/type-current-polarities.js","weldnote/controllers/type-current-polarity.ts","weldnote/controllers/type-current-polarity/new.ts","weldnote/controllers/user-settings.ts","weldnote/controllers/weld-layer-configuration.ts","weldnote/controllers/weld-layer-configuration/new.ts","weldnote/controllers/weld-layer-configurations.js","weldnote/controllers/weld-sketch-design.js","weldnote/controllers/weld-sketches.js","weldnote/controllers/weld-type.ts","weldnote/controllers/weld-type/new.ts","weldnote/controllers/weld-types.js","weldnote/controllers/welder-certificate-view.ts","weldnote/controllers/welder-certificate.js","weldnote/controllers/welder-certificate/new.ts","weldnote/controllers/welder-certificates.ts","weldnote/controllers/welder-certificates/archived.js","weldnote/controllers/welder-certificates/external/30days.js","weldnote/controllers/welder-certificates/external/expired.js","weldnote/controllers/welder-certificates/external/today.js","weldnote/controllers/welder-certificates/internal/30days.js","weldnote/controllers/welder-certificates/internal/expired.js","weldnote/controllers/welder-certificates/internal/today.js","weldnote/controllers/welder-standard.ts","weldnote/controllers/welder-standard/new.ts","weldnote/controllers/welder-standards.ts","weldnote/controllers/welder.ts","weldnote/controllers/welders-archived.js","weldnote/controllers/welders.ts","weldnote/controllers/welding-book-status.ts","weldnote/controllers/welding-book-status/new.ts","weldnote/controllers/welding-book-statuses.ts","weldnote/controllers/welding-book.js","weldnote/controllers/welding-book/new.ts","weldnote/controllers/welding-books-archived.js","weldnote/controllers/welding-books.js","weldnote/controllers/welding-detail.ts","weldnote/controllers/welding-detail/new.ts","weldnote/controllers/welding-details.ts","weldnote/controllers/welding-map.js","weldnote/controllers/welding-map/certificate-map.js","weldnote/controllers/welding-map/index.js","weldnote/controllers/welding-map/new.js","weldnote/controllers/welding-map/pqr-map.js","weldnote/controllers/welding-map/wps-map.js","weldnote/controllers/welding-maps.js","weldnote/controllers/welding-position.ts","weldnote/controllers/welding-position/new.ts","weldnote/controllers/welding-positions.js","weldnote/controllers/welding-procedure-specification-pwps-to-certificate.js","weldnote/controllers/welding-procedure-specification-pwps-to-pqr.js","weldnote/controllers/welding-procedure-specification-pwps-to-prequalified.js","weldnote/controllers/welding-procedure-specification-pwps-to-standard-wps.js","weldnote/controllers/welding-procedure-specification-view-pass.js","weldnote/controllers/welding-procedure-specification-view.js","weldnote/controllers/welding-procedure-specification.js","weldnote/controllers/welding-procedure-specification/new-from-pqr.js","weldnote/controllers/welding-procedure-specification/new-multiple.js","weldnote/controllers/welding-procedure-specification/new.js","weldnote/controllers/welding-procedure-specifications-archived.js","weldnote/controllers/welding-procedure-specifications-preliminary.js","weldnote/controllers/welding-procedure-specifications.js","weldnote/controllers/welding-process.ts","weldnote/controllers/welding-process/new.ts","weldnote/controllers/welding-processes.js","weldnote/controllers/wpq-learned-mappings.js","weldnote/decorators/model-validator.js","weldnote/decorators/object-validator.js","weldnote/ember-model-validator/messages/en.js","weldnote/formats.js","weldnote/helpers/absolute.js","weldnote/helpers/admin-instant.ts","weldnote/helpers/array-join.js","weldnote/helpers/asset-url.ts","weldnote/helpers/convert-to-meter-minute.js","weldnote/helpers/convert-to-milimeter-minute.js","weldnote/helpers/csv-models.js","weldnote/helpers/date-birth-age.js","weldnote/helpers/days-until.js","weldnote/helpers/format-base-material.js","weldnote/helpers/format-base-materials-with-thickness.js","weldnote/helpers/format-date.js","weldnote/helpers/format-decimal.js","weldnote/helpers/format-list.js","weldnote/helpers/format-message.js","weldnote/helpers/format-number.js","weldnote/helpers/format-percentage.js","weldnote/helpers/format-range.js","weldnote/helpers/format-relative.js","weldnote/helpers/format-time.js","weldnote/helpers/format-weld-type.js","weldnote/helpers/greater-than.js","weldnote/helpers/has-feature.js","weldnote/helpers/has-value.js","weldnote/helpers/help-text-value-range.js","weldnote/helpers/id-equal.js","weldnote/helpers/in-collection.js","weldnote/helpers/is-empty-attribute.js","weldnote/helpers/is-object.js","weldnote/helpers/page-title.js","weldnote/helpers/percentage-formatter.js","weldnote/helpers/progress-width.js","weldnote/helpers/t.js","weldnote/helpers/table-column-classes.js","weldnote/helpers/table-header-classes.js","weldnote/helpers/transfermode-disabled.js","weldnote/helpers/wps-format-filler-material.js","weldnote/helpers/wps-invalid-attribute-name.js","weldnote/initializers/container-debug-adapter.js","weldnote/initializers/ember-cli-mirage.js","weldnote/initializers/ember-data.js","weldnote/initializers/ember-responsive-breakpoints.js","weldnote/initializers/warnings-to-ignore.js","weldnote/instance-initializers/add-modals-container.js","weldnote/instance-initializers/ember-data.js","weldnote/macros/find-from-collection-by-key.js","weldnote/macros/joint-type-options.js","weldnote/macros/process-mecanization-options.js","weldnote/macros/property-check.js","weldnote/mixins/model-setters.js","weldnote/mixins/preview-groove-layer-images.js","weldnote/mixins/system-attribute.js","weldnote/models/account.ts","weldnote/models/action-log.ts","weldnote/models/arc-transfer-mode.ts","weldnote/models/base-material-certificate.ts","weldnote/models/base-material-grade.ts","weldnote/models/base-material-group.ts","weldnote/models/base-material-specification.ts","weldnote/models/base-material.ts","weldnote/models/base-model.ts","weldnote/models/bend-test-line.ts","weldnote/models/certification-special-requirement.ts","weldnote/models/company.ts","weldnote/models/component-drawing.ts","weldnote/models/construction-standard.ts","weldnote/models/destructive-testing.ts","weldnote/models/drawing.ts","weldnote/models/electrode-type.ts","weldnote/models/examining-body.ts","weldnote/models/feature.ts","weldnote/models/file-upload.ts","weldnote/models/filler-material-certificate.ts","weldnote/models/filler-material-classification.ts","weldnote/models/filler-material-commercial-designation.ts","weldnote/models/filler-material-group.ts","weldnote/models/filler-material-specification.ts","weldnote/models/filler-material.ts","weldnote/models/fitter.ts","weldnote/models/flux-commercial-designation.ts","weldnote/models/flux-specification.ts","weldnote/models/flux.ts","weldnote/models/gas-commercial-designation.ts","weldnote/models/gas-specification.ts","weldnote/models/gas.ts","weldnote/models/general-drawing.ts","weldnote/models/groove-design-weld-layer-copy.ts","weldnote/models/groove-design.ts","weldnote/models/hardness-test-line.ts","weldnote/models/ieis.ts","weldnote/models/impact-test-line.ts","weldnote/models/industry-code.ts","weldnote/models/inspector.ts","weldnote/models/miscellaneous-certificate-type.ts","weldnote/models/miscellaneous-certificate.ts","weldnote/models/ndt-credential.ts","weldnote/models/ndt-report-certificate.ts","weldnote/models/non-destructive-testing.ts","weldnote/models/permission.ts","weldnote/models/piping-piece.ts","weldnote/models/plate-piece.ts","weldnote/models/post-weld-treatment-method.ts","weldnote/models/pqr-learned-mapping.ts","weldnote/models/pqr-standard.ts","weldnote/models/pqr-welding-parameter.ts","weldnote/models/pqr.ts","weldnote/models/preparation-method.ts","weldnote/models/process-mecanization.ts","weldnote/models/project-base-material-certificate.ts","weldnote/models/project-client.ts","weldnote/models/project-component-drawing.ts","weldnote/models/project-component.ts","weldnote/models/project-document-link.ts","weldnote/models/project-document.ts","weldnote/models/project-filler-material-certificate.ts","weldnote/models/project-general-drawing.ts","weldnote/models/project-line-class.ts","weldnote/models/project-ndt-report-certificate.ts","weldnote/models/project-pwht-report-certificate.ts","weldnote/models/project-weld-inspection.ts","weldnote/models/project-weld.ts","weldnote/models/project-welder-certificate.ts","weldnote/models/project-welder.ts","weldnote/models/project-wps.ts","weldnote/models/project.ts","weldnote/models/pwht-report-certificate.ts","weldnote/models/role.ts","weldnote/models/staff-position.ts","weldnote/models/staff.ts","weldnote/models/tensile-test-line.ts","weldnote/models/test-inspection-class.ts","weldnote/models/test-location.ts","weldnote/models/test-stage-name.ts","weldnote/models/test-stage-test.ts","weldnote/models/test-stage.ts","weldnote/models/type-current-polarity.ts","weldnote/models/weld-layer-configuration.ts","weldnote/models/weld-layer-groove-copy.ts","weldnote/models/weld-type.ts","weldnote/models/welder-certificate-revalidation.ts","weldnote/models/welder-certificate.ts","weldnote/models/welder-standard.ts","weldnote/models/welder.ts","weldnote/models/welding-book-status.ts","weldnote/models/welding-book-weld-inspection.js","weldnote/models/welding-book-weld.js","weldnote/models/welding-book.js","weldnote/models/welding-detail.ts","weldnote/models/welding-map.ts","weldnote/models/welding-position.ts","weldnote/models/welding-procedure-specification-metadata.ts","weldnote/models/welding-procedure-specification.ts","weldnote/models/welding-process.ts","weldnote/models/welding-resource.ts","weldnote/models/wpq-learned-mapping.ts","weldnote/models/wps-welding-parameter.ts","weldnote/modifiers/add-body-class.js","weldnote/modifiers/autofocus.js","weldnote/modifiers/load-remover.js","weldnote/modifiers/pikaday.js","weldnote/pods/construction-standard/attributes.js","weldnote/pods/fitter/attributes.js","weldnote/pods/gas-commercial-designation/serializer.js","weldnote/pods/gas/serializer.js","weldnote/pods/inspector/attributes.js","weldnote/pods/miscellaneous-certificate-type/attributes.js","weldnote/pods/miscellaneous-certificate/attributes.js","weldnote/pods/project/attributes.js","weldnote/pods/welding-procedure-specification/serializer.js","weldnote/router.js","weldnote/routes/_base/edit.js","weldnote/routes/_base/list.js","weldnote/routes/_base/new.js","weldnote/routes/_base/redirect-to-assembly.ts","weldnote/routes/account-admin.js","weldnote/routes/action-logs.js","weldnote/routes/admin-tools.ts","weldnote/routes/application.js","weldnote/routes/arc-transfer-mode.js","weldnote/routes/arc-transfer-mode/new.js","weldnote/routes/arc-transfer-modes.js","weldnote/routes/bad-url.ts","weldnote/routes/base-material-certificate.ts","weldnote/routes/base-material-certificate/new.ts","weldnote/routes/base-material-certificates.ts","weldnote/routes/base-material-group.js","weldnote/routes/base-material-group/new.js","weldnote/routes/base-material-groups.js","weldnote/routes/base-material.js","weldnote/routes/base-material/new.js","weldnote/routes/base-materials.js","weldnote/routes/certification-special-requirement.js","weldnote/routes/certification-special-requirement/new.js","weldnote/routes/certification-special-requirements.js","weldnote/routes/companies.js","weldnote/routes/company.js","weldnote/routes/component-drawing.js","weldnote/routes/component-drawing/new.js","weldnote/routes/component-drawings.js","weldnote/routes/construction-standard.js","weldnote/routes/construction-standard/new.js","weldnote/routes/construction-standards.js","weldnote/routes/destructive-testing.js","weldnote/routes/destructive-testing/new.js","weldnote/routes/destructive-testings.js","weldnote/routes/digitalize-pqr.js","weldnote/routes/digitalize-welder-certificate.js","weldnote/routes/electrode-type.js","weldnote/routes/electrode-type/new.js","weldnote/routes/electrode-types.js","weldnote/routes/error-not-allowed-site.ts","weldnote/routes/error.js","weldnote/routes/examining-bodies.js","weldnote/routes/examining-body.js","weldnote/routes/examining-body/new.js","weldnote/routes/filler-material-certificate.ts","weldnote/routes/filler-material-certificate/new.ts","weldnote/routes/filler-material-certificates.ts","weldnote/routes/filler-material-commercial-designation.js","weldnote/routes/filler-material-commercial-designation/new.js","weldnote/routes/filler-material-commercial-designations.js","weldnote/routes/filler-material-group.js","weldnote/routes/filler-material-group/new.js","weldnote/routes/filler-material-groups.js","weldnote/routes/filler-material.js","weldnote/routes/filler-material/new.js","weldnote/routes/filler-materials.js","weldnote/routes/fitter.js","weldnote/routes/fitters.js","weldnote/routes/flux-commercial-designation.js","weldnote/routes/flux-commercial-designation/new.js","weldnote/routes/flux-commercial-designations.js","weldnote/routes/flux-specification.js","weldnote/routes/flux-specification/new.js","weldnote/routes/flux-specifications.js","weldnote/routes/flux.js","weldnote/routes/flux/new.js","weldnote/routes/fluxes.js","weldnote/routes/gas-commercial-designation.js","weldnote/routes/gas-commercial-designation/new.js","weldnote/routes/gas-commercial-designations.js","weldnote/routes/gas-specification.js","weldnote/routes/gas-specification/new.js","weldnote/routes/gas-specifications.js","weldnote/routes/gas.js","weldnote/routes/gas/new.js","weldnote/routes/gases.js","weldnote/routes/general-drawing.js","weldnote/routes/general-drawing/new.js","weldnote/routes/general-drawings.js","weldnote/routes/groove-design.js","weldnote/routes/groove-design/new.js","weldnote/routes/groove-designs.js","weldnote/routes/help-center.js","weldnote/routes/ieis-archived.js","weldnote/routes/ieis-edit.js","weldnote/routes/ieis.js","weldnote/routes/ieis/new.js","weldnote/routes/index.js","weldnote/routes/inspector.js","weldnote/routes/inspectors.js","weldnote/routes/loading.js","weldnote/routes/login.js","weldnote/routes/logout.js","weldnote/routes/miscellaneous-certificate-duplicate.js","weldnote/routes/miscellaneous-certificate-type.js","weldnote/routes/miscellaneous-certificate-type/new.js","weldnote/routes/miscellaneous-certificate-types.js","weldnote/routes/miscellaneous-certificate.js","weldnote/routes/miscellaneous-certificate/new.js","weldnote/routes/miscellaneous-certificates.js","weldnote/routes/miscellaneous-certificates/30days.js","weldnote/routes/miscellaneous-certificates/archived.js","weldnote/routes/miscellaneous-certificates/expired.js","weldnote/routes/miscellaneous-certificates/today.js","weldnote/routes/ndt-report-certificate.ts","weldnote/routes/ndt-report-certificate/new.ts","weldnote/routes/ndt-report-certificates.ts","weldnote/routes/non-destructive-testing.js","weldnote/routes/non-destructive-testing/new.js","weldnote/routes/non-destructive-testings.js","weldnote/routes/not-found-resource.ts","weldnote/routes/piping-piece.js","weldnote/routes/piping-piece/new.js","weldnote/routes/piping-pieces.js","weldnote/routes/plate-piece.js","weldnote/routes/plate-piece/new.js","weldnote/routes/plate-pieces.js","weldnote/routes/post-weld-treatment-method.js","weldnote/routes/post-weld-treatment-method/new.js","weldnote/routes/post-weld-treatment-methods.js","weldnote/routes/pqr-learned-mapping.js","weldnote/routes/pqr-learned-mapping/new.js","weldnote/routes/pqr-learned-mappings.js","weldnote/routes/pqr-standard.js","weldnote/routes/pqr-standard/new.js","weldnote/routes/pqr-standards.js","weldnote/routes/pqr-view.js","weldnote/routes/pqr.js","weldnote/routes/pqr/new.js","weldnote/routes/pqrs-archived.js","weldnote/routes/pqrs.js","weldnote/routes/preparation-method.js","weldnote/routes/preparation-method/new.js","weldnote/routes/preparation-methods.js","weldnote/routes/project-client/new.js","weldnote/routes/project-document.ts","weldnote/routes/project-document/new.ts","weldnote/routes/project-documents.ts","weldnote/routes/project-subpath.ts","weldnote/routes/project.ts","weldnote/routes/project/new.ts","weldnote/routes/projects.ts","weldnote/routes/pwht-report-certificate.ts","weldnote/routes/pwht-report-certificate/new.ts","weldnote/routes/pwht-report-certificates.ts","weldnote/routes/settings.js","weldnote/routes/staff-position.js","weldnote/routes/staff-position/new.js","weldnote/routes/staff-positions.js","weldnote/routes/staff.js","weldnote/routes/staffs.js","weldnote/routes/test-inspection-class.js","weldnote/routes/test-inspection-class/new.js","weldnote/routes/test-inspection-classes.js","weldnote/routes/test-location.js","weldnote/routes/test-location/new.js","weldnote/routes/test-locations.js","weldnote/routes/test-stage-name.js","weldnote/routes/test-stage-name/new.js","weldnote/routes/test-stage-names.js","weldnote/routes/type-current-polarities.js","weldnote/routes/type-current-polarity.js","weldnote/routes/type-current-polarity/new.js","weldnote/routes/user-settings.js","weldnote/routes/weld-layer-configuration.js","weldnote/routes/weld-layer-configuration/new.js","weldnote/routes/weld-layer-configurations.js","weldnote/routes/weld-sketch-design.js","weldnote/routes/weld-sketches.js","weldnote/routes/weld-type.js","weldnote/routes/weld-type/new.js","weldnote/routes/weld-types.js","weldnote/routes/welder-certificate-view.js","weldnote/routes/welder-certificate.js","weldnote/routes/welder-certificate/new.js","weldnote/routes/welder-certificates.js","weldnote/routes/welder-certificates/archived.js","weldnote/routes/welder-certificates/external/30days.js","weldnote/routes/welder-certificates/external/expired.js","weldnote/routes/welder-certificates/external/today.js","weldnote/routes/welder-certificates/internal/30days.js","weldnote/routes/welder-certificates/internal/expired.js","weldnote/routes/welder-certificates/internal/today.js","weldnote/routes/welder-standard.js","weldnote/routes/welder-standard/new.js","weldnote/routes/welder-standards.js","weldnote/routes/welder.js","weldnote/routes/welders-archived.js","weldnote/routes/welders.js","weldnote/routes/welding-book-status.js","weldnote/routes/welding-book-status/new.js","weldnote/routes/welding-book-statuses.js","weldnote/routes/welding-book.js","weldnote/routes/welding-book/new.ts","weldnote/routes/welding-books-archived.js","weldnote/routes/welding-books.js","weldnote/routes/welding-detail.js","weldnote/routes/welding-detail/new.js","weldnote/routes/welding-details.js","weldnote/routes/welding-map.js","weldnote/routes/welding-map/certificate-map.js","weldnote/routes/welding-map/new.js","weldnote/routes/welding-map/pqr-map.js","weldnote/routes/welding-map/wps-map.js","weldnote/routes/welding-maps.js","weldnote/routes/welding-position.js","weldnote/routes/welding-position/new.js","weldnote/routes/welding-positions.js","weldnote/routes/welding-procedure-specification-pwps-to-certificate.js","weldnote/routes/welding-procedure-specification-pwps-to-pqr.js","weldnote/routes/welding-procedure-specification-pwps-to-prequalified.js","weldnote/routes/welding-procedure-specification-pwps-to-standard-wps.js","weldnote/routes/welding-procedure-specification-view-pass.js","weldnote/routes/welding-procedure-specification-view.js","weldnote/routes/welding-procedure-specification.js","weldnote/routes/welding-procedure-specification/new-from-pqr.js","weldnote/routes/welding-procedure-specification/new-multiple.js","weldnote/routes/welding-procedure-specification/new.js","weldnote/routes/welding-procedure-specifications-archived.js","weldnote/routes/welding-procedure-specifications-preliminary.js","weldnote/routes/welding-procedure-specifications.js","weldnote/routes/welding-process.js","weldnote/routes/welding-process/new.js","weldnote/routes/welding-processes.js","weldnote/routes/wpq-learned-mapping.js","weldnote/routes/wpq-learned-mapping/new.js","weldnote/routes/wpq-learned-mappings.js","weldnote/sentry.js","weldnote/serializers/application.js","weldnote/services/admin-api.ts","weldnote/services/ajax.js","weldnote/services/alert-message.ts","weldnote/services/analytics.js","weldnote/services/crisp.js","weldnote/services/file-service.js","weldnote/services/help.js","weldnote/services/helpdesk-widget.js","weldnote/services/highlighted-pass-helper.js","weldnote/services/instance-tracker.js","weldnote/services/intl.js","weldnote/services/loading.js","weldnote/services/media.js","weldnote/services/modal-dialog.js","weldnote/services/new-version-checker.js","weldnote/services/org-api-personnel.ts","weldnote/services/org-api.js","weldnote/services/pqr-parse-monitor.js","weldnote/services/pqr-parse-queue.ts","weldnote/services/scroller.js","weldnote/services/session.js","weldnote/services/task-monitor.js","weldnote/services/toast.js","weldnote/services/unit-system.ts","weldnote/services/user-session.ts","weldnote/services/weld-search-parameters.js","weldnote/services/weldcloud-data.ts","weldnote/services/weldcloud-notes-data.ts","weldnote/services/weldcloud.ts","weldnote/services/welder-certificate-data.js","weldnote/services/welder-certificate-parse-monitor.js","weldnote/services/welder-certificate-parse-queue.ts","weldnote/services/weldnote-data.js","weldnote/services/window-service.ts","weldnote/session-stores/application.js","weldnote/src-weldnote/http/file-utils.ts","weldnote/src-weldnote/http/url-builder.ts","weldnote/src-weldnote/pikaday/pikaday.js","weldnote/src-weldnote/pqr/approval-ranges/asme-ix.js","weldnote/src-weldnote/pqr/approval-ranges/aws-b2-1.js","weldnote/src-weldnote/pqr/approval-ranges/aws-d1-1.js","weldnote/src-weldnote/pqr/approval-ranges/aws-d1-5.ts","weldnote/src-weldnote/pqr/approval-ranges/aws-d143.js","weldnote/src-weldnote/pqr/approval-ranges/iso-15611.js","weldnote/src-weldnote/pqr/approval-ranges/iso-15612.js","weldnote/src-weldnote/pqr/approval-ranges/iso-15613.js","weldnote/src-weldnote/pqr/approval-ranges/iso-15614-1.js","weldnote/src-weldnote/pqr/approval-ranges/not-supported.ts","weldnote/src-weldnote/pqr/approval-ranges/pqr-approval-range.ts","weldnote/src-weldnote/types/wps/null-wps-validation.ts","weldnote/src-weldnote/util/local-storage.ts","weldnote/src-weldnote/util/model-setter.js","weldnote/src-weldnote/welding/process-name-label-calculator.ts","weldnote/src-weldnote/welding/transfer-mode.ts","weldnote/src-weldnote/wopq/approval-ranges/asme-ix.ts","weldnote/src-weldnote/wopq/approval-ranges/aws-b2-1.ts","weldnote/src-weldnote/wopq/approval-ranges/aws-d1-1.ts","weldnote/src-weldnote/wopq/approval-ranges/iso-14732.ts","weldnote/src-weldnote/wopq/approval-ranges/non-supported.ts","weldnote/src-weldnote/wopq/approval-ranges/wopq-approval-range.ts","weldnote/src-weldnote/wopq/types.ts","weldnote/src-weldnote/wpq/approval-ranges/asme-ix.ts","weldnote/src-weldnote/wpq/approval-ranges/aws-b2-1.ts","weldnote/src-weldnote/wpq/approval-ranges/aws-d1-1.ts","weldnote/src-weldnote/wpq/approval-ranges/aws-d1-5.ts","weldnote/src-weldnote/wpq/approval-ranges/aws-d14-3.ts","weldnote/src-weldnote/wpq/approval-ranges/iso-9606-1.ts","weldnote/src-weldnote/wpq/approval-ranges/iso-9606-2.ts","weldnote/src-weldnote/wpq/approval-ranges/non-supported.ts","weldnote/src-weldnote/wpq/approval-ranges/wpq-approval-range.ts","weldnote/src-weldnote/wps/validation/aws-b2-1.js","weldnote/styles/tailwind.config.js","weldnote/templates/account-admin.js","weldnote/templates/action-logs.js","weldnote/templates/admin-tools.js","weldnote/templates/application.js","weldnote/templates/arc-transfer-mode.js","weldnote/templates/arc-transfer-mode/new.js","weldnote/templates/arc-transfer-modes.js","weldnote/templates/bad-url.js","weldnote/templates/base-material-group.js","weldnote/templates/base-material-group/new.js","weldnote/templates/base-material-groups.js","weldnote/templates/base-material.js","weldnote/templates/base-material/new.js","weldnote/templates/base-materials.js","weldnote/templates/certification-special-requirement.js","weldnote/templates/certification-special-requirement/new.js","weldnote/templates/certification-special-requirements.js","weldnote/templates/companies.js","weldnote/templates/company.js","weldnote/templates/component-drawing.js","weldnote/templates/component-drawing/new.js","weldnote/templates/component-drawings.js","weldnote/templates/components/fleet-machine-selector/machine-select.js","weldnote/templates/components/model-welder-certificate/arc-length-control-approval-range.js","weldnote/templates/components/model-welder-certificate/joint-tracking-approval-range.js","weldnote/templates/components/model-welder-certificate/visual-control-approval-range.js","weldnote/templates/components/model-welder-certificate/welding-operator-welding-detail-approval-range.js","weldnote/templates/components/unit-system-badge.js","weldnote/templates/components/weldnote-grid/pqr-diameter.js","weldnote/templates/components/weldnote-grid/pqr-heat-input.js","weldnote/templates/components/weldnote-grid/pqr-preheat.js","weldnote/templates/components/weldnote-grid/pqr-pwht.js","weldnote/templates/components/weldnote-grid/wpq-thickness.js","weldnote/templates/construction-standard.js","weldnote/templates/construction-standard/new.js","weldnote/templates/construction-standards.js","weldnote/templates/destructive-testing.js","weldnote/templates/destructive-testing/new.js","weldnote/templates/destructive-testings.js","weldnote/templates/digitalize-pqr.js","weldnote/templates/digitalize-welder-certificate.js","weldnote/templates/electrode-type.js","weldnote/templates/electrode-type/new.js","weldnote/templates/electrode-types.js","weldnote/templates/error-not-allowed-site.js","weldnote/templates/error.js","weldnote/templates/examining-bodies.js","weldnote/templates/examining-body.js","weldnote/templates/examining-body/new.js","weldnote/templates/filler-material-commercial-designation.js","weldnote/templates/filler-material-commercial-designation/new.js","weldnote/templates/filler-material-commercial-designations.js","weldnote/templates/filler-material-group.js","weldnote/templates/filler-material-group/new.js","weldnote/templates/filler-material-groups.js","weldnote/templates/filler-material.js","weldnote/templates/filler-material/new.js","weldnote/templates/filler-materials.js","weldnote/templates/fitter.js","weldnote/templates/fitters.js","weldnote/templates/flux-commercial-designation.js","weldnote/templates/flux-commercial-designation/new.js","weldnote/templates/flux-commercial-designations.js","weldnote/templates/flux-specification.js","weldnote/templates/flux-specification/new.js","weldnote/templates/flux-specifications.js","weldnote/templates/flux.js","weldnote/templates/flux/new.js","weldnote/templates/fluxes.js","weldnote/templates/gas-commercial-designation.js","weldnote/templates/gas-commercial-designation/new.js","weldnote/templates/gas-commercial-designations.js","weldnote/templates/gas-specification.js","weldnote/templates/gas-specification/new.js","weldnote/templates/gas-specifications.js","weldnote/templates/gas.js","weldnote/templates/gas/new.js","weldnote/templates/gases.js","weldnote/templates/general-drawing.js","weldnote/templates/general-drawing/new.js","weldnote/templates/general-drawings.js","weldnote/templates/groove-design.js","weldnote/templates/groove-design/new.js","weldnote/templates/groove-designs.js","weldnote/templates/help-center.js","weldnote/templates/ieis-archived.js","weldnote/templates/ieis-edit.js","weldnote/templates/ieis.js","weldnote/templates/ieis/new.js","weldnote/templates/index.js","weldnote/templates/inspector.js","weldnote/templates/inspectors.js","weldnote/templates/loading.js","weldnote/templates/login.js","weldnote/templates/miscellaneous-certificate-duplicate.js","weldnote/templates/miscellaneous-certificate-type.js","weldnote/templates/miscellaneous-certificate-type/new.js","weldnote/templates/miscellaneous-certificate-types.js","weldnote/templates/miscellaneous-certificate.js","weldnote/templates/miscellaneous-certificate/new.js","weldnote/templates/miscellaneous-certificates.js","weldnote/templates/miscellaneous-certificates/30days.js","weldnote/templates/miscellaneous-certificates/archived.js","weldnote/templates/miscellaneous-certificates/expired.js","weldnote/templates/miscellaneous-certificates/today.js","weldnote/templates/non-destructive-testing.js","weldnote/templates/non-destructive-testing/new.js","weldnote/templates/non-destructive-testings.js","weldnote/templates/not-found-resource.js","weldnote/templates/piping-piece.js","weldnote/templates/piping-piece/new.js","weldnote/templates/piping-pieces.js","weldnote/templates/plate-piece.js","weldnote/templates/plate-piece/new.js","weldnote/templates/plate-pieces.js","weldnote/templates/post-weld-treatment-method.js","weldnote/templates/post-weld-treatment-method/new.js","weldnote/templates/post-weld-treatment-methods.js","weldnote/templates/pqr-learned-mapping.js","weldnote/templates/pqr-learned-mapping/new.js","weldnote/templates/pqr-learned-mappings.js","weldnote/templates/pqr-standard.js","weldnote/templates/pqr-standard/new.js","weldnote/templates/pqr-standards.js","weldnote/templates/pqr-view.js","weldnote/templates/pqr.js","weldnote/templates/pqr/new.js","weldnote/templates/pqrs-archived.js","weldnote/templates/pqrs.js","weldnote/templates/preparation-method.js","weldnote/templates/preparation-method/new.js","weldnote/templates/preparation-methods.js","weldnote/templates/project-client/new.js","weldnote/templates/project-document/new.js","weldnote/templates/settings.js","weldnote/templates/staff-position.js","weldnote/templates/staff-position/new.js","weldnote/templates/staff-positions.js","weldnote/templates/staff.js","weldnote/templates/staffs.js","weldnote/templates/test-inspection-class.js","weldnote/templates/test-inspection-class/new.js","weldnote/templates/test-inspection-classes.js","weldnote/templates/test-location.js","weldnote/templates/test-location/new.js","weldnote/templates/test-locations.js","weldnote/templates/test-stage-name.js","weldnote/templates/test-stage-name/new.js","weldnote/templates/test-stage-names.js","weldnote/templates/type-current-polarities.js","weldnote/templates/type-current-polarity.js","weldnote/templates/type-current-polarity/new.js","weldnote/templates/user-settings.js","weldnote/templates/weld-layer-configuration.js","weldnote/templates/weld-layer-configuration/new.js","weldnote/templates/weld-layer-configurations.js","weldnote/templates/weld-sketch-design.js","weldnote/templates/weld-sketches.js","weldnote/templates/weld-type.js","weldnote/templates/weld-type/new.js","weldnote/templates/weld-types.js","weldnote/templates/welder-certificate-view.js","weldnote/templates/welder-certificate.js","weldnote/templates/welder-certificate/new.js","weldnote/templates/welder-certificates.js","weldnote/templates/welder-certificates/archived.js","weldnote/templates/welder-certificates/external/30days.js","weldnote/templates/welder-certificates/external/expired.js","weldnote/templates/welder-certificates/external/today.js","weldnote/templates/welder-certificates/internal/30days.js","weldnote/templates/welder-certificates/internal/expired.js","weldnote/templates/welder-certificates/internal/today.js","weldnote/templates/welder-standard.js","weldnote/templates/welder-standard/new.js","weldnote/templates/welder-standards.js","weldnote/templates/welder.js","weldnote/templates/welders-archived.js","weldnote/templates/welders.js","weldnote/templates/welding-book-status.js","weldnote/templates/welding-book-status/new.js","weldnote/templates/welding-book-statuses.js","weldnote/templates/welding-book.js","weldnote/templates/welding-book/new.js","weldnote/templates/welding-books-archived.js","weldnote/templates/welding-books.js","weldnote/templates/welding-detail.js","weldnote/templates/welding-detail/new.js","weldnote/templates/welding-details.js","weldnote/templates/welding-map.js","weldnote/templates/welding-map/certificate-map.js","weldnote/templates/welding-map/index.js","weldnote/templates/welding-map/new.js","weldnote/templates/welding-map/pqr-map.js","weldnote/templates/welding-map/wps-map.js","weldnote/templates/welding-maps.js","weldnote/templates/welding-position.js","weldnote/templates/welding-position/new.js","weldnote/templates/welding-positions.js","weldnote/templates/welding-procedure-specification-pwps-to-certificate.js","weldnote/templates/welding-procedure-specification-pwps-to-pqr.js","weldnote/templates/welding-procedure-specification-pwps-to-prequalified.js","weldnote/templates/welding-procedure-specification-pwps-to-standard-wps.js","weldnote/templates/welding-procedure-specification-view-pass.js","weldnote/templates/welding-procedure-specification-view.js","weldnote/templates/welding-procedure-specification.js","weldnote/templates/welding-procedure-specification/new-from-pqr.js","weldnote/templates/welding-procedure-specification/new-multiple.js","weldnote/templates/welding-procedure-specification/new.js","weldnote/templates/welding-procedure-specifications-archived.js","weldnote/templates/welding-procedure-specifications-preliminary.js","weldnote/templates/welding-procedure-specifications.js","weldnote/templates/welding-process.js","weldnote/templates/welding-process/new.js","weldnote/templates/welding-processes.js","weldnote/templates/wpq-learned-mapping.js","weldnote/templates/wpq-learned-mapping/new.js","weldnote/templates/wpq-learned-mappings.js","weldnote/transforms/decimal-value.ts","weldnote/transitions.js","weldnote/utils/action-log-filters.ts","weldnote/utils/admin-help.ts","weldnote/utils/admin-tools.ts","weldnote/utils/ajax/file-download.js","weldnote/utils/analytics-events.ts","weldnote/utils/api-actions.js","weldnote/utils/approval-range/pqr/product-type.js","weldnote/utils/approval-range/pqr/welding-position.ts","weldnote/utils/base-material-formatter.ts","weldnote/utils/certificate-filler-material-rules-asme.ts","weldnote/utils/certification-rules.ts","weldnote/utils/certification-special-requirement-rules.ts","weldnote/utils/collection-utils.js","weldnote/utils/company-rules.ts","weldnote/utils/constants.ts","weldnote/utils/decimal-utils.ts","weldnote/utils/digitalize/entity-resolvers.ts","weldnote/utils/digitalize/filtered-options.ts","weldnote/utils/digitalize/parsed-hints.ts","weldnote/utils/digitalize/quick-create-tasks.ts","weldnote/utils/digitalize/shared-helpers.ts","weldnote/utils/digitalize/types.ts","weldnote/utils/drawing-rules.ts","weldnote/utils/electrode-type-rules.ts","weldnote/utils/ember-computed-as-functions.js","weldnote/utils/file-upload-rules.ts","weldnote/utils/groove-design-rules.ts","weldnote/utils/http.ts","weldnote/utils/i18n/missing-message.js","weldnote/utils/intl/missing-message.js","weldnote/utils/json-api-errors.js","weldnote/utils/parse-queue-status.ts","weldnote/utils/piping-piece-rules.ts","weldnote/utils/plate-piece-rules.ts","weldnote/utils/pqr-base-material-rules-asme.ts","weldnote/utils/pqr-base-material-rules-iso.ts","weldnote/utils/pqr-rules.js","weldnote/utils/pqr-welding-parameter.js","weldnote/utils/project-weld-state-parser.js","weldnote/utils/range-utils.ts","weldnote/utils/rules/interpass-temperature.ts","weldnote/utils/rules/pre-heat.ts","weldnote/utils/rules/process-mecanization.ts","weldnote/utils/rules/thickness.js","weldnote/utils/rules/weld-type.ts","weldnote/utils/rules/welding-detail.ts","weldnote/utils/rules/welding-position.ts","weldnote/utils/rules/welding-process.ts","weldnote/utils/runtime-config.ts","weldnote/utils/standards.ts","weldnote/utils/subscription/certificate-plan.js","weldnote/utils/subscription/plan-resolver.js","weldnote/utils/subscription/quality-plan.js","weldnote/utils/subscription/wps-plan.js","weldnote/utils/unit-system/format.ts","weldnote/utils/unit-system/speed.ts","weldnote/utils/unit-system/units.js","weldnote/utils/validation/filler-material.ts","weldnote/utils/validation/thickness.js","weldnote/utils/validation/validate-wps-and-passes.js","weldnote/utils/validation/welding-details.ts","weldnote/utils/validation/wps-from-pqr.ts","weldnote/utils/weld-layer-configuration-rules.js","weldnote/utils/welder-certificate-base-material-rules-asme.js","weldnote/utils/welder-certificate-rules.ts","weldnote/utils/welder-standard-rules.ts","weldnote/utils/welding-book-rules.ts","weldnote/utils/welding-map-rules.ts","weldnote/utils/welding-procedure-specification-rules.js","weldnote/utils/welding/welding-process.js","weldnote/utils/wps-welding-parameter-rules.js","vendor/ember-cli/app-config.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["'use strict';\n\n\n","import ApplicationAdapter from './application';\nimport { service } from '@ember/service';\n\n/**\n * This adapter is here only for the purpose of working around an issue\n * that we couldn't query the account twice and have the second call make a network call\n * we always got the response from cache\n */\nexport default class AccountAdapter extends ApplicationAdapter {\n // This is called ajaxService because the application adapter already\n // has an ajax function... having an ajax service clashes with the thing\n @service('ajax') ajaxService;\n\n queryRecord(store, type, query) {\n return this.ajaxService.request(`/api/accounts/${query.id}?include=${query.include}`);\n }\n}\n","import JSONAPIAdapter from '@ember-data/adapter/json-api';\nimport { service } from '@ember/service';\nimport { UnauthorizedError } from '@ember-data/adapter/error';\nimport { isCompanyNotAllowedError, getErrorMeta } from 'weldnote/utils/json-api-errors';\nimport ENV from 'weldnote/config/environment';\n\nexport default class ApplicationAdapter extends JSONAPIAdapter {\n @service session;\n\n @service router;\n\n namespace = 'api';\n\n get host() {\n // Use configured backend endpoint when available (for Azure deployments)\n // Otherwise, rely on relative paths (same domain) for local development\n if (ENV.notesBackendEndpoint) {\n return ENV.notesBackendEndpoint;\n }\n return undefined; // Use relative URLs (same domain)\n }\n\n get headers() {\n let headers = {\n 'Client-Application': 'weldcloud-notes',\n };\n if (this.session.isAuthenticated) {\n headers.Authorization = `Bearer ${this.session.data.authenticated?.accessToken}`;\n }\n return headers;\n }\n\n /**\n * Goal of overriding this is to catch a 401 response from the server and throw an error that can be caught in time to request a new token\n * from azure. Otherwise we're really signed out and might need to reload\n */\n handleResponse(status, headers, _payload, requestData) {\n if (status === 401) {\n return new UnauthorizedError();\n }\n if (status === 404) {\n this.router.transitionTo('not-found-resource');\n }\n if (status === 403) {\n if (isCompanyNotAllowedError(_payload)) {\n const meta = getErrorMeta(_payload);\n this.router.transitionTo('error-not-allowed-site', {\n queryParams: {\n documentType: meta.documentType,\n documentLabel: meta.documentLabel,\n siteLabel: meta.siteLabel,\n },\n });\n } else {\n this.router.transitionTo('error-not-allowed-site', {\n queryParams: {\n documentType: '',\n documentLabel: '',\n siteLabel: '',\n },\n });\n }\n }\n\n return super.handleResponse(status, headers, _payload, requestData);\n }\n}\n","import Application from '@ember/application';\nimport Resolver from 'ember-resolver';\nimport loadInitializers from 'ember-load-initializers';\nimport config from './config/environment';\nimport './config/custom-inflector-rules';\nimport { applyRuntimeConfig } from './utils/runtime-config';\nimport { startSentry } from './sentry';\nimport './config/deprecation-workflow';\n\napplyRuntimeConfig(config);\nstartSentry();\n\nexport default class App extends Application {\n modulePrefix = config.modulePrefix;\n\n podModulePrefix = config.podModulePrefix;\n\n Resolver = Resolver;\n}\n\nloadInitializers(App, config.modulePrefix);\n","import classic from 'ember-classic-decorator';\nimport Base from 'ember-simple-auth/authenticators/base';\nimport { run } from '@ember/runloop';\nimport ENV from 'weldnote/config/environment';\nimport { service } from '@ember/service';\n\n@classic\nexport default class SimplifiedMsalAuthenticator extends Base {\n @service\n session;\n\n @service\n ajax;\n\n @service\n userSession;\n\n timeoutId = -1;\n\n _syncTokensToLocalStorage(accessToken, expiresOn, refreshToken) {\n localStorage.setItem('msal.idtoken', accessToken);\n localStorage.setItem('msal.expiration', expiresOn);\n if (refreshToken) {\n localStorage.setItem('msal.refreshtoken', refreshToken);\n } else {\n localStorage.removeItem('msal.refreshtoken');\n }\n }\n\n _clearTokensFromLocalStorage() {\n localStorage.removeItem('msal.idtoken');\n localStorage.removeItem('msal.expiration');\n localStorage.removeItem('msal.refreshtoken');\n }\n\n async authenticate(credentials) {\n return new Promise((resolve, reject) => {\n if (credentials && credentials.username && credentials.password) {\n this.authenticateWithCredentials(\n resolve,\n reject,\n credentials.username,\n credentials.password\n );\n } else {\n run(null, reject, 'Email not provided');\n }\n });\n }\n\n restore() {\n return new Promise((resolve, reject) => {\n try {\n const token = this.validateCurrentTokens();\n this.scheduleExpiredTokenCheck();\n run(null, resolve, token);\n } catch (error) {\n run(null, reject, 'Invalid token, needs to login again');\n }\n });\n }\n\n invalidate() {\n return new Promise((resolve, reject) => {\n this.userSession.isLoggedInAsCustomerSupport = false;\n this._clearTokensFromLocalStorage();\n run(null, resolve, null);\n });\n }\n\n authenticateWithCredentials(resolve, reject, username, password) {\n let formData = new FormData();\n formData.append('client_id', ENV.msalWeldCloud.clientId);\n formData.append('scope', `${ENV.msalWeldCloud.scope} openid profile offline_access`);\n formData.append('grant_type', 'password');\n formData.append('username', username);\n formData.append('password', password);\n\n this.ajax\n .post(`${ENV.msalWeldCloud.authority}/oauth2/v2.0/token`, {\n processData: false,\n contentType: false,\n data: formData,\n })\n .then((response) => {\n // We consider that the token expires after 12 hours, although the real expiration date\n // is available in the response token. This time interval can be configured in Azure's\n // User Flow. However, this implementation (the one used in WeldCloud) makes it easier\n // to handle token renewals, as it simplifies the process.\n let expiresOn = new Date();\n expiresOn.setHours(expiresOn.getHours() + 12);\n\n let parsedResponse = {\n accessToken: response.access_token,\n originalAccessToken: response.access_token,\n refreshToken: response.refresh_token,\n expiresOn: expiresOn.getTime().toString(),\n };\n\n // Fetch the /me endpoint to check if we have a support session ongoing\n this.ajax\n .request(`${ENV.orgApiUrl}/org/odata/users/me`, {\n headers: {\n 'Client-Application': 'weldcloud-notes',\n Authorization: `Bearer ${response.access_token}`,\n 'ocp-apim-subscription-key': ENV.azureSubscriptionManagementId,\n },\n })\n .then((response) => {\n // If there's a support request token, use that, otherwise we use the original\n // access token\n if (response.supportRequestToken && response.supportRequestToken != '') {\n parsedResponse.accessToken = response.supportRequestToken;\n }\n\n // Sync the original token to msal.* localStorage keys so the Vue app\n // sees the user as authenticated\n this._syncTokensToLocalStorage(\n parsedResponse.originalAccessToken,\n parsedResponse.expiresOn,\n parsedResponse.refreshToken\n );\n\n this.scheduleExpiredTokenCheck();\n run(null, resolve, parsedResponse);\n });\n })\n .catch((reason) => {\n run(null, reject, reason);\n });\n }\n\n timeUntilTokenExpiration(tokenResponse) {\n if (tokenResponse && tokenResponse.accessToken && tokenResponse.expiresOn) {\n let now = new Date();\n let expires = new Date();\n expires.setTime(tokenResponse.expiresOn);\n let timeUntilExpiration = expires - now;\n return timeUntilExpiration;\n } else {\n return 0;\n }\n }\n\n hasTokenExpired(tokenResponse) {\n return this.timeUntilTokenExpiration(tokenResponse) <= 0;\n }\n\n scheduleExpiredTokenCheck() {\n window.clearTimeout(this.timeoutId);\n this.timeoutId = window.setTimeout(() => {\n try {\n this.validateCurrentTokens();\n this.scheduleExpiredTokenCheck();\n } catch (error) {\n this.session.invalidate();\n }\n }, 30000);\n }\n\n validateCurrentTokens() {\n // msal.* keys are the source of truth — if they're gone, session is invalid\n // (e.g. the Vue app cleared them on logout)\n const idToken = localStorage.getItem('msal.idtoken');\n const expiration = localStorage.getItem('msal.expiration');\n if (!idToken || !expiration) {\n throw new Error('No valid msal tokens in localStorage');\n }\n const token = {\n accessToken: idToken,\n expiresOn: expiration,\n refreshToken: localStorage.getItem('msal.refreshtoken'),\n };\n if (this.hasTokenExpired(token)) {\n throw new Error('Token expired');\n }\n return token;\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Base from 'ember-simple-auth/authenticators/base';\nimport { run } from '@ember/runloop';\nimport ENV from 'weldnote/config/environment';\nimport { service } from '@ember/service';\n\nexport const ERROR_TYPES = {\n NO_VALID_TOKEN: 'NO_VALID_TOKEN',\n};\n\n@classic\nexport default class InduSuiteSsoAuthenticator extends Base {\n @service\n session;\n\n @service\n userSession;\n\n timeoutId = -1;\n\n async authenticate() {\n const token = this.validateCurrentTokens();\n if (token) {\n this.scheduleExpiredTokenCheck();\n return token;\n }\n throw { type: ERROR_TYPES.NO_VALID_TOKEN, message: 'No valid token found' };\n }\n\n restore() {\n return new Promise((resolve, reject) => {\n const token = this.validateCurrentTokens();\n if (token) {\n this.scheduleExpiredTokenCheck();\n run(null, resolve, token);\n } else {\n run(null, reject, 'Token expired');\n }\n });\n }\n\n invalidate() {\n // Return a Promise that never resolves — the page will navigate away before\n // it matters. This prevents ember-simple-auth from calling .then() on undefined,\n // which would throw and skip session store cleanup.\n return new Promise(() => {\n window.location.href = `${ENV.esabCloudLink}/logout`;\n });\n }\n\n timeUntilTokenExpiration(tokenResponse) {\n if (tokenResponse && tokenResponse.accessToken && tokenResponse.expiresOn) {\n let now = new Date();\n let expires = new Date();\n expires.setTime(tokenResponse.expiresOn);\n let timeUntilExpiration = expires - now;\n return timeUntilExpiration;\n } else {\n return 0;\n }\n }\n\n hasTokenExpired(tokenResponse) {\n return this.timeUntilTokenExpiration(tokenResponse) <= 0;\n }\n\n scheduleExpiredTokenCheck() {\n window.clearTimeout(this.timeoutId);\n this.timeoutId = window.setTimeout(() => {\n const token = this.validateCurrentTokens();\n if (token) {\n // If the Vue parent app refreshed the token in localStorage,\n // sync it into the ember-simple-auth session so API calls use the new token\n const currentSessionToken = this.session?.data?.authenticated?.accessToken;\n if (currentSessionToken && token.accessToken !== currentSessionToken) {\n this.trigger('sessionDataUpdated', token);\n }\n this.scheduleExpiredTokenCheck();\n } else {\n this.session.invalidate();\n }\n }, 30000);\n }\n\n validateCurrentTokens() {\n const idToken = localStorage.getItem('msal.idtoken');\n const expiration = localStorage.getItem('msal.expiration');\n\n if (idToken && expiration) {\n let accessToken = idToken;\n let isSupportSession = false;\n\n try {\n const userStr = localStorage.getItem('msal.user');\n if (userStr) {\n const user = JSON.parse(userStr);\n if (user.activeSupportRequestId && user.supportRequestToken) {\n accessToken = user.supportRequestToken;\n isSupportSession = true;\n }\n }\n } catch (e) {\n // Invalid JSON in msal.user — treat as no support session\n }\n\n const token = {\n accessToken,\n expiresOn: expiration,\n refreshToken: localStorage.getItem('msal.refreshtoken'),\n };\n\n if (!this.hasTokenExpired(token)) {\n this.userSession.isLoggedInAsCustomerSupport = isSupportSession;\n return token;\n }\n }\n\n return null;\n }\n}\n","export default {\n mobile: '(max-width: 767px)',\n tablet: '(min-width: 768px) and (max-width: 991px)',\n laptop: '(min-width: 992px) and (max-width: 1199px)',\n desktop: '(min-width: 1200px)',\n};\n","import Component from '@glimmer/component';\n\n// This component is not needed anymore. However we can only safely remove it once we have an Embroider release that\n// has the special dependency rule for this addon removed:\n// https://github.com/embroider-build/embroider/blob/4fad67f16f811e7f93199a1ee92dba8254c42978/packages/compat/src/addon-dependency-rules/ember-element-helper.ts\n// eslint-disable-next-line ember/no-empty-glimmer-component-classes\nexport default class DynamicElementAlt extends Component {}\n","import Component from '@glimmer/component';\n\n// This component is not needed anymore. However we can only safely remove it once we have an Embroider release that\n// has the special dependency rule for this addon removed:\n// https://github.com/embroider-build/embroider/blob/4fad67f16f811e7f93199a1ee92dba8254c42978/packages/compat/src/addon-dependency-rules/ember-element-helper.ts\n// eslint-disable-next-line ember/no-empty-glimmer-component-classes\nexport default class DynamicElement extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if this.shouldShowAssemblyLink}}\\n \\n {{this.messageText}}\\n \\n {{else if this.shouldShowLink}}\\n \\n {{this.messageText}}\\n \\n {{else}}\\n {{this.messageText}}\\n \\n {{/if}}\\n {{#if this.hasDocumentInfo}}\\n
\\n {{#if this.newDocumentName}}\\n {{t \\\"components.action-log/display.document-new\\\" name=this.newDocumentName}}\\n {{/if}}\\n {{#if this.previousDocumentName}}\\n {{#if this.newDocumentName}}
{{/if}}\\n {{t\\n \\\"components.action-log/display.document-previous\\\"\\n name=this.previousDocumentName\\n }}\\n {{/if}}\\n {{/if}}\\n
\", {\"contents\":\"\\n {{#if this.shouldShowAssemblyLink}}\\n \\n {{this.messageText}}\\n \\n {{else if this.shouldShowLink}}\\n \\n {{this.messageText}}\\n \\n {{else}}\\n {{this.messageText}}\\n \\n {{/if}}\\n {{#if this.hasDocumentInfo}}\\n
\\n {{#if this.newDocumentName}}\\n {{t \\\"components.action-log/display.document-new\\\" name=this.newDocumentName}}\\n {{/if}}\\n {{#if this.previousDocumentName}}\\n {{#if this.newDocumentName}}
{{/if}}\\n {{t\\n \\\"components.action-log/display.document-previous\\\"\\n name=this.previousDocumentName\\n }}\\n {{/if}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/action-log/display.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/action-log/display.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport ENV from 'weldnote/config/environment';\n\nconst PROJECT_TYPES = ['project', 'project-weld', 'project-component'];\n\nconst ASSEMBLY_PATHS = {\n project: 'assembly',\n 'project-weld': 'weld',\n 'project-component': 'part',\n};\n\nexport default class Display extends Component {\n @service\n intl;\n\n get instanceId() {\n return this.args.log.instanceId;\n }\n\n get actionId() {\n return this.args.log.actionId;\n }\n\n get logExists() {\n return this.args.log.exists ?? false;\n }\n\n get isProjectType() {\n return PROJECT_TYPES.includes(this.args.log.instanceType);\n }\n\n get assemblyUrl() {\n let type = this.args.log.instanceType;\n let segment = ASSEMBLY_PATHS[type];\n return `${ENV.esabCloudLink}/assembly/r/${segment}/${this.instanceId}`;\n }\n\n get shouldShowAssemblyLink() {\n return this.logExists && this.isProjectType;\n }\n\n get targetRoute() {\n let type = this.args.log.instanceType;\n if (type === 'pqr') {\n return 'pqr-view';\n } else if (type === 'wps') {\n return 'welding-procedure-specification-view';\n } else if (type === 'certificate') {\n return 'welder-certificate';\n } else if (type === 'welder') {\n return 'welder';\n } else if (type === 'welding-map') {\n return 'welding-map';\n } else if (type === 'welding-book') {\n return 'welding-book';\n } else if (type === 'miscellaneous-certificate') {\n return 'miscellaneous-certificate';\n } else if (type === 'ndt-certificate') {\n return 'ndt-report-certificate';\n } else {\n return undefined;\n }\n }\n\n get messageText() {\n if (!isEmpty(this.args.message)) {\n return this.args.message;\n }\n let messageId = `components.action-log/display.${this.actionId}`;\n return this.intl.t(messageId);\n }\n\n get shouldShowLink() {\n if (!this.logExists || !this.targetRoute) {\n return false;\n }\n return true;\n }\n\n get newDocumentName() {\n return this.args.log.context?.newDocumentName;\n }\n\n get previousDocumentName() {\n return this.args.log.context?.previousDocumentName;\n }\n\n get hasDocumentInfo() {\n return this.args.log.context?.newDocumentName || this.args.log.context?.previousDocumentName;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n

Retire account

\\n

\\n For an account that should no longer exist: a user deleted upstream, a duplicate, someone who\\n left. It can no longer log in, and who retired it and why is recorded. The email is freed for\\n a new account. This cannot be undone. Replaces renaming the email to \\\"…_deleted\\\".\\n

\\n \\n \\n \\n \\n \\n Retire account\\n \\n \\n \\n\\n \\n

Move account to another organization

\\n

\\n Moves the account and its staff to the Notes client of another OrgApi organization, and\\n clears the roles and company grants it had in the old one. Refused, with nothing changed,\\n when the staff authored, verified or approved a WPS, PQR or welding book. Prefer applying a\\n parked ORG_MOVE conflict: that is recorded, while a move made here is only in the logs.\\n

\\n \\n \\n \\n \\n \\n Move account\\n \\n \\n \\n
\", {\"contents\":\"
\\n \\n

Retire account

\\n

\\n For an account that should no longer exist: a user deleted upstream, a duplicate, someone who\\n left. It can no longer log in, and who retired it and why is recorded. The email is freed for\\n a new account. This cannot be undone. Replaces renaming the email to \\\"…_deleted\\\".\\n

\\n \\n \\n \\n \\n \\n Retire account\\n \\n \\n \\n\\n \\n

Move account to another organization

\\n

\\n Moves the account and its staff to the Notes client of another OrgApi organization, and\\n clears the roles and company grants it had in the old one. Refused, with nothing changed,\\n when the staff authored, verified or approved a WPS, PQR or welding book. Prefer applying a\\n parked ORG_MOVE conflict: that is recorded, while a move made here is only in the logs.\\n

\\n \\n \\n \\n \\n \\n Move account\\n \\n \\n \\n
\",\"moduleName\":\"weldnote/components/admin-tools/account-repair.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/account-repair.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type { AdminCallResult } from 'weldnote/services/admin-api';\nimport type WindowService from 'weldnote/services/window-service';\n\n/**\n * Audited account repair: `POST /api/admin/retire-account` (tombstones a live account; the caller is\n * recorded as `deletedBy`) and `POST /api/admin/move-account` (moves an account and its staff to\n * another organization; refused when the staff authored, verified or approved documents).\n */\nexport default class AdminToolsAccountRepair extends Component {\n @service declare adminApi: AdminApiService;\n @service declare windowService: WindowService;\n\n @tracked retireEmail = '';\n @tracked retireReason = '';\n @tracked retireResult: AdminCallResult | null = null;\n\n @tracked moveEmail = '';\n @tracked moveOrganizationId = '';\n @tracked moveResult: AdminCallResult | null = null;\n\n get canRetire(): boolean {\n return (\n this.retireEmail.trim() !== '' && this.retireReason.trim() !== '' && !this.retire.isRunning\n );\n }\n\n get canMove(): boolean {\n return (\n this.moveEmail.trim() !== '' && this.moveOrganizationId.trim() !== '' && !this.move.isRunning\n );\n }\n\n @action\n setRetireEmail(event: Event) {\n this.retireEmail = (event.target as HTMLInputElement).value;\n }\n\n @action\n setRetireReason(event: Event) {\n this.retireReason = (event.target as HTMLInputElement).value;\n }\n\n @action\n setMoveEmail(event: Event) {\n this.moveEmail = (event.target as HTMLInputElement).value;\n }\n\n @action\n setMoveOrganizationId(event: Event) {\n this.moveOrganizationId = (event.target as HTMLInputElement).value;\n }\n\n retire = dropTask(async (event?: Event) => {\n event?.preventDefault();\n const email = this.retireEmail.trim();\n if (\n !this.windowService.confirm(\n `Retire account ${email}?\\n\\nIt will no longer be able to log in, and the retirement is recorded against you.`\n )\n ) {\n return;\n }\n this.retireResult = await this.adminApi.retireAccount(email, this.retireReason.trim());\n });\n\n move = dropTask(async (event?: Event) => {\n event?.preventDefault();\n const email = this.moveEmail.trim();\n const organizationId = this.moveOrganizationId.trim();\n if (\n !this.windowService.confirm(\n `Move account ${email} and its staff to organization ${organizationId}?\\n\\nThey leave their current client and its data.`\n )\n ) {\n return;\n }\n this.moveResult = await this.adminApi.moveAccount(email, organizationId);\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n

\\n Finds accounts and welders whose Notes data has drifted from the OrgApi. Start here: run\\n local checks first (seconds), then a full audit (minutes). Both are read-only. After fixing\\n things, run the audit again and check the counts went down.\\n

\\n\\n
\\n \\n Run full audit\\n \\n \\n Run local checks\\n \\n \\n \\n Refresh\\n \\n
\\n\\n \\n\\n {{#if this.summaryFailed}}\\n \\n {{else if this.summary}}\\n {{#if this.summary.running}}\\n \\n Run\\n {{this.summary.running.id}}\\n ({{this.summary.running.scope}}) started\\n {{admin-instant this.summary.running.startedOn}}\\n and is still running. Press Refresh to check on it.\\n
\\n {{/if}}\\n\\n
\\n Full audits\\n Local checks\\n
\\n\\n {{#if this.latest}}\\n
\\n Latest completed run\\n {{this.latest.id}}\\n ({{this.latest.trigger}}), finished\\n {{admin-instant this.latest.finishedOn}},\\n {{this.latest.findingCount}}\\n finding(s).\\n {{#if this.latest.previousRunId}}\\n Compared with run\\n {{this.latest.previousRunId}}.\\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.countRows as |row|}}\\n \\n \\n {{#if row.notMeasured}}\\n \\n {{else}}\\n \\n \\n \\n {{#if (eq row.change null)}}—{{else if (gt row.change 0)}}+{{row.change}}{{else}}{{row.change}}{{/if}}\\n \\n {{/if}}\\n \\n \\n {{/each}}\\n \\n
DriftNowPreviousChange
\\n
{{row.label}}
\\n
{{row.type}}
\\n
needs a full audit{{row.count}}{{if (eq row.previous null) \\\"—\\\" row.previous}}\\n {{#if (gt row.count 0)}}\\n Show\\n {{/if}}\\n
\\n
\\n {{else}}\\n
\\n No completed run of this kind yet.\\n
\\n {{/if}}\\n\\n {{#if this.findingsResult}}\\n {{#unless this.findingsResult.ok}}\\n \\n {{/unless}}\\n {{/if}}\\n\\n {{#if this.selectedType}}\\n
\\n
\\n

\\n {{this.selectedType}}\\n \\n ({{this.findings.length}}\\n of\\n {{this.findingsTotal}})\\n \\n

\\n \\n
\\n {{#if this.selectedTypeAction}}\\n

\\n What to do:\\n {{this.selectedTypeAction}}\\n

\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.findings as |finding|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
EntityRowsDetail
{{finding.entity}} {{finding.entityId}}{{join \\\", \\\" finding.relatedIds}}{{finding.detail}}\\n {{#if (and (eq finding.entity \\\"account\\\") finding.entityId)}}\\n Dossier\\n {{/if}}\\n
\\n
\\n {{#if this.hasMoreFindings}}\\n Show more\\n {{/if}}\\n
\\n {{/if}}\\n\\n {{#if this.summary.recentRuns.length}}\\n
\\n Recent runs\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.summary.recentRuns as |run|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
RunScopeTriggerStateStartedFinishedFindingsError
{{run.id}}{{run.scope}}{{run.trigger}}{{run.state}}{{admin-instant run.startedOn}}{{admin-instant run.finishedOn}}{{run.findingCount}}{{run.error}}
\\n
\\n
\\n {{/if}}\\n {{else}}\\n
Loading…
\\n {{/if}}\\n\\n\", {\"contents\":\"
\\n

\\n Finds accounts and welders whose Notes data has drifted from the OrgApi. Start here: run\\n local checks first (seconds), then a full audit (minutes). Both are read-only. After fixing\\n things, run the audit again and check the counts went down.\\n

\\n\\n
\\n \\n Run full audit\\n \\n \\n Run local checks\\n \\n \\n \\n Refresh\\n \\n
\\n\\n \\n\\n {{#if this.summaryFailed}}\\n \\n {{else if this.summary}}\\n {{#if this.summary.running}}\\n \\n Run\\n {{this.summary.running.id}}\\n ({{this.summary.running.scope}}) started\\n {{admin-instant this.summary.running.startedOn}}\\n and is still running. Press Refresh to check on it.\\n
\\n {{/if}}\\n\\n
\\n Full audits\\n Local checks\\n
\\n\\n {{#if this.latest}}\\n
\\n Latest completed run\\n {{this.latest.id}}\\n ({{this.latest.trigger}}), finished\\n {{admin-instant this.latest.finishedOn}},\\n {{this.latest.findingCount}}\\n finding(s).\\n {{#if this.latest.previousRunId}}\\n Compared with run\\n {{this.latest.previousRunId}}.\\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.countRows as |row|}}\\n \\n \\n {{#if row.notMeasured}}\\n \\n {{else}}\\n \\n \\n \\n {{#if (eq row.change null)}}—{{else if (gt row.change 0)}}+{{row.change}}{{else}}{{row.change}}{{/if}}\\n \\n {{/if}}\\n \\n \\n {{/each}}\\n \\n
DriftNowPreviousChange
\\n
{{row.label}}
\\n
{{row.type}}
\\n
needs a full audit{{row.count}}{{if (eq row.previous null) \\\"—\\\" row.previous}}\\n {{#if (gt row.count 0)}}\\n Show\\n {{/if}}\\n
\\n
\\n {{else}}\\n
\\n No completed run of this kind yet.\\n
\\n {{/if}}\\n\\n {{#if this.findingsResult}}\\n {{#unless this.findingsResult.ok}}\\n \\n {{/unless}}\\n {{/if}}\\n\\n {{#if this.selectedType}}\\n
\\n
\\n

\\n {{this.selectedType}}\\n \\n ({{this.findings.length}}\\n of\\n {{this.findingsTotal}})\\n \\n

\\n \\n
\\n {{#if this.selectedTypeAction}}\\n

\\n What to do:\\n {{this.selectedTypeAction}}\\n

\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.findings as |finding|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
EntityRowsDetail
{{finding.entity}} {{finding.entityId}}{{join \\\", \\\" finding.relatedIds}}{{finding.detail}}\\n {{#if (and (eq finding.entity \\\"account\\\") finding.entityId)}}\\n Dossier\\n {{/if}}\\n
\\n
\\n {{#if this.hasMoreFindings}}\\n Show more\\n {{/if}}\\n
\\n {{/if}}\\n\\n {{#if this.summary.recentRuns.length}}\\n
\\n Recent runs\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.summary.recentRuns as |run|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
RunScopeTriggerStateStartedFinishedFindingsError
{{run.id}}{{run.scope}}{{run.trigger}}{{run.state}}{{admin-instant run.startedOn}}{{admin-instant run.finishedOn}}{{run.findingCount}}{{run.error}}
\\n
\\n
\\n {{/if}}\\n {{else}}\\n
Loading…
\\n {{/if}}\\n\\n\",\"moduleName\":\"weldnote/components/admin-tools/drift-audit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/drift-audit.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { dropTask, restartableTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type {\n AdminCallResult,\n DriftAuditLatest,\n DriftAuditScope,\n DriftAuditSummary,\n DriftFinding,\n} from 'weldnote/services/admin-api';\nimport { DRIFT_TYPE_HELP } from 'weldnote/utils/admin-help';\n\ninterface AdminToolsDriftAuditArgs {\n /** Opens an account in the identity dossier panel. */\n onInspect?: (query: string) => void;\n}\n\n/** Types that need the OrgApi, so a LOCAL run cannot find them. */\nconst ORG_API_TYPES = new Set(['ORG_MISMATCH', 'ORPHANED_REMOTE_ID', 'AUDIT_ERROR']);\n\nexport const FINDINGS_PAGE_SIZE = 50;\n\nexport interface CountRow {\n type: string;\n label: string;\n /** What the type means and what to do, for the row's tooltip. */\n help: string;\n count: number;\n previous: number | null;\n change: number | null;\n /** Not measured by this scope (an OrgApi type in a LOCAL run). */\n notMeasured: boolean;\n}\n\n/**\n * Stored identity drift audits (`/api/admin/identity-drift-audit`): start a run, see counts per\n * drift type against the previous run, and page through the findings. A full run makes an OrgApi\n * call or two per linked account and takes minutes, so it runs in the background; press Refresh to\n * see it finish.\n */\nexport default class AdminToolsDriftAudit extends Component {\n @service declare adminApi: AdminApiService;\n\n @tracked summaryResult: AdminCallResult | null = null;\n @tracked startResult: AdminCallResult | null = null;\n @tracked scope: DriftAuditScope = 'FULL';\n @tracked selectedType: string | null = null;\n @tracked findings: DriftFinding[] = [];\n @tracked findingsTotal = 0;\n @tracked findingsResult: AdminCallResult | null = null;\n /** The run the loaded findings belong to; paging always continues within that run. */\n @tracked findingsRunId: number | null = null;\n\n get summary(): DriftAuditSummary | null {\n return this.summaryResult?.ok ? this.summaryResult.body : null;\n }\n\n get summaryFailed(): boolean {\n return this.summaryResult !== null && !this.summaryResult.ok;\n }\n\n get latest(): DriftAuditLatest | null {\n return this.summary?.latest[this.scope] ?? null;\n }\n\n get countRows(): CountRow[] {\n const latest = this.latest;\n if (!latest) {\n return [];\n }\n return (this.summary?.driftTypes ?? Object.keys(latest.counts)).map((type) => {\n const count = latest.counts[type] ?? 0;\n const previous = latest.previousCounts ? latest.previousCounts[type] ?? 0 : null;\n return {\n type,\n label: DRIFT_TYPE_HELP[type]?.label ?? type,\n help: helpFor(type),\n count,\n previous,\n change: previous === null ? null : count - previous,\n notMeasured: this.scope === 'LOCAL' && ORG_API_TYPES.has(type),\n };\n });\n }\n\n /** What to do about the findings being listed. */\n get selectedTypeAction(): string | null {\n return this.selectedType ? DRIFT_TYPE_HELP[this.selectedType]?.action ?? null : null;\n }\n\n get hasMoreFindings(): boolean {\n return this.findings.length < this.findingsTotal;\n }\n\n loadSummary = restartableTask(async () => {\n this.summaryResult = await this.adminApi.driftAuditSummary();\n // A refresh can bring a newer run; findings of the old one must not mix with it.\n if (this.findingsRunId !== null && this.findingsRunId !== this.latest?.id) {\n this.clearFindings();\n }\n });\n\n start = dropTask(async (scope: DriftAuditScope) => {\n this.startResult = await this.adminApi.startDriftAudit(scope);\n await this.loadSummary.perform();\n });\n\n loadFindings = restartableTask(async (type: string, append: boolean) => {\n const runId = append ? this.findingsRunId : this.latest?.id ?? null;\n if (runId === null) {\n return;\n }\n const offset = append ? this.findings.length : 0;\n const result = await this.adminApi.driftAuditFindings(\n runId,\n type,\n offset,\n FINDINGS_PAGE_SIZE\n );\n this.findingsResult = result;\n if (!result.ok || !result.body) {\n return;\n }\n this.findingsRunId = runId;\n this.selectedType = type;\n this.findings = append ? [...this.findings, ...result.body.findings] : result.body.findings;\n this.findingsTotal = result.body.total;\n });\n\n @action\n setScope(scope: DriftAuditScope): void {\n this.scope = scope;\n this.clearFindings();\n }\n\n @action\n showType(type: string): void {\n this.loadFindings.perform(type, false);\n }\n\n @action\n showMore(): void {\n if (this.selectedType) {\n this.loadFindings.perform(this.selectedType, true);\n }\n }\n\n @action\n clearFindings(): void {\n this.loadFindings.cancelAll();\n this.findingsRunId = null;\n this.selectedType = null;\n this.findings = [];\n this.findingsTotal = 0;\n this.findingsResult = null;\n }\n\n @action\n inspect(finding: DriftFinding): void {\n if (finding.entity === 'account' && finding.entityId !== null) {\n this.args.onInspect?.(String(finding.entityId));\n }\n }\n}\n\nfunction helpFor(type: string): string {\n const help = DRIFT_TYPE_HELP[type];\n return help ? `${help.meaning}\\n\\nWhat to do: ${help.action}` : type;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

\\n Cases the OrgApi sync parked for a person instead of guessing; nothing has been applied yet.\\n Press Preview before Apply: it shows exactly what Apply would do. Each row says what its\\n reason means and what to do.\\n

\\n \\n \\n Refresh\\n \\n
\\n\\n \\n\\n {{#if this.loadFailed}}\\n \\n {{else if this.loadResult}}\\n {{#if this.conflicts.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.rows as |row|}}\\n {{#let row.conflict as |conflict|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if row.preview}}\\n {{#let row.preview.preview as |preview|}}\\n \\n \\n \\n
\\n {{row.preview.label}}\\n
\\n {{#if preview.move}}\\n
\\n {{#if preview.move.targetClientName}}\\n Moves to\\n {{preview.move.targetClientName}}\\n (client\\n {{preview.move.targetClientId}}).\\n {{/if}}\\n {{#if preview.move.authoredDocuments}}\\n Authored, verified or approved:\\n \\n {{preview.move.authoredDocuments.wps}}\\n WPS,\\n {{preview.move.authoredDocuments.pqrs}}\\n PQR,\\n {{preview.move.authoredDocuments.weldingBooks}}\\n welding books.\\n \\n {{/if}}\\n {{#if (not-eq preview.move.outcome \\\"UNKNOWN_ACCOUNT\\\")}}\\n A move clears\\n {{preview.move.rolesCleared}}\\n role(s),\\n {{preview.move.companiesAllowedCleared}}\\n allowed and\\n {{preview.move.companiesSubscribedCleared}}\\n subscribed company grant(s) from the old tenant.\\n {{/if}}\\n
\\n {{/if}}\\n {{#if preview.welder}}\\n
\\n Links welder\\n {{preview.welder.id}}\\n ({{preview.welder.name}}, stamp\\n {{preview.welder.stamp}}) to remote id\\n {{conflict.remoteId}}. Its certificates stay where they are.\\n
\\n {{/if}}\\n \\n
\\n {{/let}}\\n {{else if row.previewError}}\\n \\n \\n \\n \\n {{/if}}\\n {{/let}}\\n {{/each}}\\n \\n
IDOpen forReasonWhoNow inTarget
{{conflict.id}}\\n {{#if (eq row.ageDays null)}}—{{else}}{{row.ageDays}} d{{/if}}\\n \\n
{{conflict.reason}}
\\n
\\n {{conflict.entityType}}\\n {{#if conflict.matchedBy}}· matched by {{conflict.matchedBy}}{{/if}}\\n
\\n {{#if row.reasonMeaning}}\\n
\\n {{row.reasonMeaning}}\\n
\\n {{/if}}\\n {{#if row.reasonAction}}\\n
\\n What to do:\\n {{row.reasonAction}}\\n
\\n {{/if}}\\n
\\n {{#if conflict.account}}\\n
{{conflict.account.email}}
\\n
\\n account\\n {{conflict.account.id}}\\n {{conflict.account.name}}\\n {{#if conflict.account.retired}}\\n (retired)\\n {{/if}}\\n
\\n {{else if conflict.person}}\\n
{{conflict.person.name}}
\\n
\\n welder\\n {{conflict.person.id}}\\n · stamp\\n {{conflict.person.stamp}}\\n · operator\\n {{conflict.person.operatorId}}\\n {{#if conflict.person.deleted}}\\n (deleted)\\n {{/if}}\\n
\\n {{else}}\\n
{{conflict.email}}
\\n {{#if conflict.existingPersonId}}\\n
welder {{conflict.existingPersonId}}
\\n {{else if (eq conflict.reason \\\"DUPLICATE_BUSINESS_KEY\\\")}}\\n
several welders matched
\\n {{/if}}\\n {{/if}}\\n
{{conflict.remoteId}}
\\n
\\n {{#if conflict.account.client}}\\n {{conflict.account.client.name}}\\n
client {{conflict.account.client.id}}
\\n {{else if conflict.person.client}}\\n {{conflict.person.client.name}}\\n
client {{conflict.person.client.id}}
\\n {{else}}\\n —\\n {{/if}}\\n
\\n {{#if conflict.client}}\\n {{conflict.client.name}}\\n
\\n client\\n {{conflict.client.id}}\\n {{#if conflict.client.orphaned}}\\n (orphaned)\\n {{/if}}\\n
\\n {{else if conflict.organizationId}}\\n
No Notes client
\\n {{/if}}\\n
{{conflict.organizationId}}
\\n
\\n \\n Preview\\n \\n \\n Apply\\n \\n \\n Dismiss\\n \\n {{#if row.canInspect}}\\n \\n Dossier\\n \\n {{/if}}\\n
\\n
\\n {{else}}\\n
\\n No open conflicts.\\n
\\n {{/if}}\\n {{else}}\\n
Loading…
\\n {{/if}}\\n
\", {\"contents\":\"
\\n
\\n

\\n Cases the OrgApi sync parked for a person instead of guessing; nothing has been applied yet.\\n Press Preview before Apply: it shows exactly what Apply would do. Each row says what its\\n reason means and what to do.\\n

\\n \\n \\n Refresh\\n \\n
\\n\\n \\n\\n {{#if this.loadFailed}}\\n \\n {{else if this.loadResult}}\\n {{#if this.conflicts.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.rows as |row|}}\\n {{#let row.conflict as |conflict|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if row.preview}}\\n {{#let row.preview.preview as |preview|}}\\n \\n \\n \\n
\\n {{row.preview.label}}\\n
\\n {{#if preview.move}}\\n
\\n {{#if preview.move.targetClientName}}\\n Moves to\\n {{preview.move.targetClientName}}\\n (client\\n {{preview.move.targetClientId}}).\\n {{/if}}\\n {{#if preview.move.authoredDocuments}}\\n Authored, verified or approved:\\n \\n {{preview.move.authoredDocuments.wps}}\\n WPS,\\n {{preview.move.authoredDocuments.pqrs}}\\n PQR,\\n {{preview.move.authoredDocuments.weldingBooks}}\\n welding books.\\n \\n {{/if}}\\n {{#if (not-eq preview.move.outcome \\\"UNKNOWN_ACCOUNT\\\")}}\\n A move clears\\n {{preview.move.rolesCleared}}\\n role(s),\\n {{preview.move.companiesAllowedCleared}}\\n allowed and\\n {{preview.move.companiesSubscribedCleared}}\\n subscribed company grant(s) from the old tenant.\\n {{/if}}\\n
\\n {{/if}}\\n {{#if preview.welder}}\\n
\\n Links welder\\n {{preview.welder.id}}\\n ({{preview.welder.name}}, stamp\\n {{preview.welder.stamp}}) to remote id\\n {{conflict.remoteId}}. Its certificates stay where they are.\\n
\\n {{/if}}\\n \\n
\\n {{/let}}\\n {{else if row.previewError}}\\n \\n \\n \\n \\n {{/if}}\\n {{/let}}\\n {{/each}}\\n \\n
IDOpen forReasonWhoNow inTarget
{{conflict.id}}\\n {{#if (eq row.ageDays null)}}—{{else}}{{row.ageDays}} d{{/if}}\\n \\n
{{conflict.reason}}
\\n
\\n {{conflict.entityType}}\\n {{#if conflict.matchedBy}}· matched by {{conflict.matchedBy}}{{/if}}\\n
\\n {{#if row.reasonMeaning}}\\n
\\n {{row.reasonMeaning}}\\n
\\n {{/if}}\\n {{#if row.reasonAction}}\\n
\\n What to do:\\n {{row.reasonAction}}\\n
\\n {{/if}}\\n
\\n {{#if conflict.account}}\\n
{{conflict.account.email}}
\\n
\\n account\\n {{conflict.account.id}}\\n {{conflict.account.name}}\\n {{#if conflict.account.retired}}\\n (retired)\\n {{/if}}\\n
\\n {{else if conflict.person}}\\n
{{conflict.person.name}}
\\n
\\n welder\\n {{conflict.person.id}}\\n · stamp\\n {{conflict.person.stamp}}\\n · operator\\n {{conflict.person.operatorId}}\\n {{#if conflict.person.deleted}}\\n (deleted)\\n {{/if}}\\n
\\n {{else}}\\n
{{conflict.email}}
\\n {{#if conflict.existingPersonId}}\\n
welder {{conflict.existingPersonId}}
\\n {{else if (eq conflict.reason \\\"DUPLICATE_BUSINESS_KEY\\\")}}\\n
several welders matched
\\n {{/if}}\\n {{/if}}\\n
{{conflict.remoteId}}
\\n
\\n {{#if conflict.account.client}}\\n {{conflict.account.client.name}}\\n
client {{conflict.account.client.id}}
\\n {{else if conflict.person.client}}\\n {{conflict.person.client.name}}\\n
client {{conflict.person.client.id}}
\\n {{else}}\\n —\\n {{/if}}\\n
\\n {{#if conflict.client}}\\n {{conflict.client.name}}\\n
\\n client\\n {{conflict.client.id}}\\n {{#if conflict.client.orphaned}}\\n (orphaned)\\n {{/if}}\\n
\\n {{else if conflict.organizationId}}\\n
No Notes client
\\n {{/if}}\\n
{{conflict.organizationId}}
\\n
\\n \\n Preview\\n \\n \\n Apply\\n \\n \\n Dismiss\\n \\n {{#if row.canInspect}}\\n \\n Dossier\\n \\n {{/if}}\\n
\\n
\\n {{else}}\\n
\\n No open conflicts.\\n
\\n {{/if}}\\n {{else}}\\n
Loading…
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/admin-tools/identity-conflicts.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/identity-conflicts.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type {\n AdminCallResult,\n IdentityConflict,\n IdentityConflictPreview,\n} from 'weldnote/services/admin-api';\nimport type WindowService from 'weldnote/services/window-service';\nimport { CONFLICT_REASON_HELP } from 'weldnote/utils/admin-help';\nimport { daysSince } from 'weldnote/utils/admin-tools';\n\ninterface AdminToolsIdentityConflictsArgs {\n /** Opens an account in the identity dossier panel. */\n onInspect?: (query: string) => void;\n}\n\n/** What each apply outcome means for the person about to press Apply. */\nconst RESOLUTION_LABELS: Record = {\n APPLIED: 'Apply would succeed.',\n REFUSED_AUTHORED_DOCUMENTS:\n \"Apply would be refused: the account's staff authored, verified or approved documents.\",\n ACCOUNT_NOT_FOUND: 'Apply would fail: there is no live account to move.',\n CLIENT_NOT_FOUND: 'Apply would fail: the target organization has no Notes client.',\n PERSON_NOT_FOUND:\n 'Apply would fail: no single live welder in this client to link. Resolve it by hand.',\n UNSUPPORTED_REASON: 'This reason cannot be applied automatically; dismiss it once fixed.',\n NOT_OPEN: 'This conflict is no longer open.',\n};\n\nexport interface PreviewView {\n preview: IdentityConflictPreview;\n label: string;\n}\n\nexport interface ConflictRow {\n conflict: IdentityConflict;\n /** Whole days since the sync parked it. */\n ageDays: number | null;\n preview: PreviewView | null;\n previewError: AdminCallResult | null;\n /** Whether the dossier can show anything for this conflict. */\n canInspect: boolean;\n /** What the reason means, for the tooltip, and what to do about it. */\n reasonMeaning: string | null;\n reasonAction: string | null;\n}\n\n/**\n * The identity-conflict queue: `GET /api/admin/identity-conflicts` lists the OPEN conflicts the sync\n * parked instead of auto-applying, with the account, client and welder each names. Each row can be\n * previewed (`GET .../:id/preview`, what apply would do, without doing it), applied or dismissed\n * (`POST .../:id/apply|dismiss`). The list reloads after every action.\n */\nexport default class AdminToolsIdentityConflicts extends Component {\n @service declare adminApi: AdminApiService;\n @service declare windowService: WindowService;\n\n @tracked conflicts: IdentityConflict[] = [];\n @tracked loadResult: AdminCallResult | null = null;\n @tracked actionResult: AdminCallResult | null = null;\n /** Apply previews by conflict id; a failed preview request is kept as its call result. */\n @tracked previews: Record = {};\n\n get loadFailed(): boolean {\n return this.loadResult !== null && !this.loadResult.ok;\n }\n\n get isBusy(): boolean {\n return this.load.isRunning || this.resolve.isRunning || this.preview.isRunning;\n }\n\n get rows(): ConflictRow[] {\n return this.conflicts.map((conflict) => {\n const entry = this.previews[conflict.id];\n const isView = entry !== undefined && 'preview' in entry;\n return {\n conflict,\n ageDays: daysSince(conflict.detectedOn),\n preview: isView ? (entry as PreviewView) : null,\n previewError: entry !== undefined && !isView ? (entry as AdminCallResult) : null,\n canInspect: this.dossierQueryFor(conflict) !== null,\n reasonMeaning: CONFLICT_REASON_HELP[conflict.reason ?? '']?.meaning ?? null,\n reasonAction: CONFLICT_REASON_HELP[conflict.reason ?? '']?.action ?? null,\n };\n });\n }\n\n preview = dropTask(async (conflict: IdentityConflict) => {\n const result = await this.adminApi.previewIdentityConflict(conflict.id);\n const entry: PreviewView | AdminCallResult =\n result.ok && result.body\n ? {\n preview: result.body,\n label: RESOLUTION_LABELS[result.body.resolution] ?? result.body.resolution,\n }\n : result;\n this.previews = { ...this.previews, [conflict.id]: entry };\n });\n\n load = dropTask(async () => {\n const result = await this.adminApi.listIdentityConflicts();\n this.loadResult = result;\n this.conflicts = result.ok ? result.body?.conflicts ?? [] : [];\n // A preview describes the rows as they were; after any change, ask again.\n this.previews = {};\n });\n\n resolve = dropTask(async (conflict: IdentityConflict, decision: 'apply' | 'dismiss') => {\n const subject = `conflict ${conflict.id} (${conflict.reason ?? 'unknown reason'}, ${\n conflict.email ?? 'no email'\n })`;\n const question =\n decision === 'apply'\n ? `Apply ${subject}?\\n\\nThis changes the account now.`\n : `Dismiss ${subject}?\\n\\nIt leaves the queue and will not be applied.`;\n if (!this.windowService.confirm(question)) {\n return;\n }\n this.actionResult =\n decision === 'apply'\n ? await this.adminApi.applyIdentityConflict(conflict.id)\n : await this.adminApi.dismissIdentityConflict(conflict.id);\n await this.load.perform();\n });\n\n /**\n * The dossier query for a conflict, or null when the dossier has nothing to show for it. The\n * dossier looks up accounts, so a welder conflict has none; an account conflict falls back from\n * the account id to the email to the remote id (a B2C id, or the OrgApi user id of an\n * AMBIGUOUS_USER_DELETION), all of which the dossier resolves.\n */\n dossierQueryFor(conflict: IdentityConflict): string | null {\n if (conflict.entityType !== 'ACCOUNT') {\n return null;\n }\n const query = conflict.existingAccountId ?? conflict.email ?? conflict.remoteId;\n return query === null || query === undefined ? null : String(query);\n }\n\n @action\n inspect(conflict: IdentityConflict): void {\n const query = this.dossierQueryFor(conflict);\n if (query !== null) {\n this.args.onInspect?.(query);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n

\\n Everything Notes and the OrgApi know about one person: local accounts (retired ones too),\\n identity history, conflicts, recent syncs, the live OrgApi record and what the next sync\\n would do. Use it before and after every fix. Read-only: looking someone up changes nothing.\\n

\\n \\n
\\n \\n \\n {{if this.lookup.isRunning \\\"Looking up…\\\" \\\"Look up\\\"}}\\n \\n
\\n
\\n\\n {{#if this.failed}}\\n \\n {{/if}}\\n\\n {{#if this.dossier}}\\n {{#let this.dossier as |dossier|}}\\n
\\n
\\n Read\\n {{dossier.query}}\\n as\\n {{dossier.kind}}.\\n {{dossier.accounts.length}}\\n local account(s),\\n {{this.problemCount}}\\n problem(s).\\n {{#if dossier.truncated}}\\n \\n Only the first\\n {{dossier.maxAccounts}}\\n accounts are shown; narrow the query.\\n \\n {{/if}}\\n
\\n\\n {{#each this.generalFlags as |flag|}}\\n
\\n {{flag.code}}\\n {{flag.meaning}}\\n {{#if flag.detail}}\\n
\\n {{flag.detail}}\\n
\\n {{/if}}\\n {{#if flag.action}}\\n
\\n What to do:\\n {{flag.action}}\\n
\\n {{/if}}\\n
\\n {{/each}}\\n\\n
\\n
\\n

OrgApi record

\\n
\\n {{this.remoteLabel}}\\n {{#if dossier.remote.matchedBy}}\\n (by {{dossier.remote.matchedBy}})\\n {{/if}}\\n {{#if dossier.remote.error}}\\n {{dossier.remote.error}}\\n {{/if}}\\n
\\n {{#if (eq dossier.remote.status \\\"FOUND\\\")}}\\n
\\n
Name
\\n
{{dossier.remote.displayName}}
\\n
Email
\\n
{{dossier.remote.email}}
\\n
OrgApi user id
\\n
{{dossier.remote.userId}}
\\n
B2C id
\\n
{{dossier.remote.b2cId}}
\\n
Organization
\\n
\\n {{dossier.remote.ownerId}}\\n {{#if dossier.remote.ownerClient}}\\n
\\n Notes client\\n {{dossier.remote.ownerClient.id}}\\n ·\\n {{dossier.remote.ownerClient.name}}\\n {{#if dossier.remote.ownerClient.orphaned}}\\n (orphaned)\\n {{/if}}\\n
\\n {{else}}\\n
No Notes client for this organization
\\n {{/if}}\\n
\\n
Deleted
\\n
{{if dossier.remote.deleted \\\"yes\\\" \\\"no\\\"}}
\\n
\\n {{/if}}\\n
\\n\\n
\\n

Next sync would

\\n {{#if dossier.nextSync}}\\n
\\n {{this.nextSyncLabel}}\\n
\\n {{#if this.nextSyncAction}}\\n
\\n What to do:\\n {{this.nextSyncAction}}\\n
\\n {{/if}}\\n
\\n {{#if dossier.nextSync.accountId}}\\n
Account
\\n
{{dossier.nextSync.accountId}}
\\n {{/if}}\\n {{#if dossier.nextSync.matchedBy}}\\n
Matched by
\\n
{{dossier.nextSync.matchedBy}}
\\n {{/if}}\\n {{#if dossier.nextSync.targetClient}}\\n
Client
\\n
\\n {{dossier.nextSync.targetClient.id}}\\n ·\\n {{dossier.nextSync.targetClient.name}}\\n
\\n {{/if}}\\n {{#if dossier.nextSync.reason}}\\n
Reason
\\n
{{dossier.nextSync.reason}}
\\n {{/if}}\\n
\\n {{else}}\\n
\\n {{#if (eq dossier.remote.status \\\"ERROR\\\")}}\\n Unknown: the OrgApi could not be asked, so the next sync cannot be\\n predicted. Try again later.\\n {{else}}\\n Unknown: there is no OrgApi record to resolve.\\n {{/if}}\\n
\\n {{/if}}\\n
\\n
\\n\\n {{#each this.accounts as |view|}}\\n {{#let view.account as |account|}}\\n \\n
\\n

\\n Account\\n {{account.id}}\\n

\\n {{account.email}}\\n {{account.name}}\\n {{#if account.retired}}\\n RETIRED {{admin-instant account.deletedOn}}\\n {{else}}\\n LIVE\\n {{/if}}\\n
\\n\\n {{#each view.flags as |flag|}}\\n \\n {{flag.code}}\\n {{flag.meaning}}\\n {{#if flag.detail}}\\n
\\n {{flag.detail}}\\n
\\n {{/if}}\\n {{#if flag.action}}\\n
\\n What to do:\\n {{flag.action}}\\n
\\n {{/if}}\\n
\\n {{/each}}\\n\\n
\\n
\\n
Client
\\n
\\n {{#if account.client}}\\n {{account.client.id}}\\n ·\\n {{account.client.name}}\\n {{#if account.client.orphaned}}\\n (orphaned)\\n {{/if}}\\n
{{account.client.organizationId}}
\\n {{else}}\\n —\\n {{/if}}\\n
\\n
\\n
\\n
B2C id
\\n
{{if account.azureId account.azureId \\\"—\\\"}}
\\n
\\n
\\n
OrgApi user id
\\n
{{if account.orgApiUserId account.orgApiUserId \\\"—\\\"}}
\\n
\\n
\\n
Last sync
\\n
{{if account.lastSync (admin-instant account.lastSync) \\\"never\\\"}}
\\n
\\n
\\n\\n \\n \\n Identity ledger ({{account.ledger.length}})\\n \\n {{#if account.ledger.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each account.ledger as |row|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
RowReasonMatched byB2C idClientFromTo
{{row.id}}{{row.reason}}{{row.matchedBy}}{{row.remoteId}}{{row.clientId}}{{admin-instant row.validFrom}}\\n {{if row.current \\\"current\\\" (admin-instant row.validTo)}}\\n
\\n
\\n {{else}}\\n
No ledger rows.
\\n {{/if}}\\n \\n\\n {{#if account.retirements.length}}\\n
\\n \\n Retirements ({{account.retirements.length}})\\n \\n
    \\n {{#each account.retirements as |retirement|}}\\n
  • \\n {{admin-instant retirement.retiredOn}}\\n —\\n {{retirement.reason}}\\n {{#if retirement.upstream}}\\n (deleted upstream)\\n {{else}}\\n (by staff account {{retirement.retiredBy}})\\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{/if}}\\n\\n
\\n \\n Recent sync tasks ({{account.recentSyncTasks.length}})\\n \\n {{#if account.recentSyncTasks.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each account.recentSyncTasks as |task|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
TaskTypeStateStartedFinishedResult
{{task.id}}{{task.discriminator}}{{task.state}}{{admin-instant task.startTime}}{{admin-instant task.finishTime}}{{task.result}}
\\n
\\n {{else}}\\n
No sync tasks recorded.
\\n {{/if}}\\n
\\n \\n {{/let}}\\n {{/each}}\\n\\n
\\n

Identity conflicts ({{dossier.conflicts.length}})

\\n {{#if dossier.conflicts.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each dossier.conflicts as |conflict|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
IDReasonStateDetectedResolvedAccountTarget organization
{{conflict.id}}{{conflict.reason}}{{conflict.state}}{{admin-instant conflict.detectedOn}}{{admin-instant conflict.resolvedOn}}\\n {{#if conflict.existingAccountId}}\\n {{conflict.existingAccountId}}\\n {{/if}}\\n {{conflict.organizationId}}
\\n
\\n {{else}}\\n
None.
\\n {{/if}}\\n
\\n \\n {{/let}}\\n {{/if}}\\n\\n\", {\"contents\":\"\\n
\\n

\\n Everything Notes and the OrgApi know about one person: local accounts (retired ones too),\\n identity history, conflicts, recent syncs, the live OrgApi record and what the next sync\\n would do. Use it before and after every fix. Read-only: looking someone up changes nothing.\\n

\\n \\n
\\n \\n \\n {{if this.lookup.isRunning \\\"Looking up…\\\" \\\"Look up\\\"}}\\n \\n
\\n
\\n\\n {{#if this.failed}}\\n \\n {{/if}}\\n\\n {{#if this.dossier}}\\n {{#let this.dossier as |dossier|}}\\n
\\n
\\n Read\\n {{dossier.query}}\\n as\\n {{dossier.kind}}.\\n {{dossier.accounts.length}}\\n local account(s),\\n {{this.problemCount}}\\n problem(s).\\n {{#if dossier.truncated}}\\n \\n Only the first\\n {{dossier.maxAccounts}}\\n accounts are shown; narrow the query.\\n \\n {{/if}}\\n
\\n\\n {{#each this.generalFlags as |flag|}}\\n
\\n {{flag.code}}\\n {{flag.meaning}}\\n {{#if flag.detail}}\\n
\\n {{flag.detail}}\\n
\\n {{/if}}\\n {{#if flag.action}}\\n
\\n What to do:\\n {{flag.action}}\\n
\\n {{/if}}\\n
\\n {{/each}}\\n\\n
\\n
\\n

OrgApi record

\\n
\\n {{this.remoteLabel}}\\n {{#if dossier.remote.matchedBy}}\\n (by {{dossier.remote.matchedBy}})\\n {{/if}}\\n {{#if dossier.remote.error}}\\n {{dossier.remote.error}}\\n {{/if}}\\n
\\n {{#if (eq dossier.remote.status \\\"FOUND\\\")}}\\n
\\n
Name
\\n
{{dossier.remote.displayName}}
\\n
Email
\\n
{{dossier.remote.email}}
\\n
OrgApi user id
\\n
{{dossier.remote.userId}}
\\n
B2C id
\\n
{{dossier.remote.b2cId}}
\\n
Organization
\\n
\\n {{dossier.remote.ownerId}}\\n {{#if dossier.remote.ownerClient}}\\n
\\n Notes client\\n {{dossier.remote.ownerClient.id}}\\n ·\\n {{dossier.remote.ownerClient.name}}\\n {{#if dossier.remote.ownerClient.orphaned}}\\n (orphaned)\\n {{/if}}\\n
\\n {{else}}\\n
No Notes client for this organization
\\n {{/if}}\\n
\\n
Deleted
\\n
{{if dossier.remote.deleted \\\"yes\\\" \\\"no\\\"}}
\\n
\\n {{/if}}\\n
\\n\\n
\\n

Next sync would

\\n {{#if dossier.nextSync}}\\n
\\n {{this.nextSyncLabel}}\\n
\\n {{#if this.nextSyncAction}}\\n
\\n What to do:\\n {{this.nextSyncAction}}\\n
\\n {{/if}}\\n
\\n {{#if dossier.nextSync.accountId}}\\n
Account
\\n
{{dossier.nextSync.accountId}}
\\n {{/if}}\\n {{#if dossier.nextSync.matchedBy}}\\n
Matched by
\\n
{{dossier.nextSync.matchedBy}}
\\n {{/if}}\\n {{#if dossier.nextSync.targetClient}}\\n
Client
\\n
\\n {{dossier.nextSync.targetClient.id}}\\n ·\\n {{dossier.nextSync.targetClient.name}}\\n
\\n {{/if}}\\n {{#if dossier.nextSync.reason}}\\n
Reason
\\n
{{dossier.nextSync.reason}}
\\n {{/if}}\\n
\\n {{else}}\\n
\\n {{#if (eq dossier.remote.status \\\"ERROR\\\")}}\\n Unknown: the OrgApi could not be asked, so the next sync cannot be\\n predicted. Try again later.\\n {{else}}\\n Unknown: there is no OrgApi record to resolve.\\n {{/if}}\\n
\\n {{/if}}\\n
\\n
\\n\\n {{#each this.accounts as |view|}}\\n {{#let view.account as |account|}}\\n \\n
\\n

\\n Account\\n {{account.id}}\\n

\\n {{account.email}}\\n {{account.name}}\\n {{#if account.retired}}\\n RETIRED {{admin-instant account.deletedOn}}\\n {{else}}\\n LIVE\\n {{/if}}\\n
\\n\\n {{#each view.flags as |flag|}}\\n \\n {{flag.code}}\\n {{flag.meaning}}\\n {{#if flag.detail}}\\n
\\n {{flag.detail}}\\n
\\n {{/if}}\\n {{#if flag.action}}\\n
\\n What to do:\\n {{flag.action}}\\n
\\n {{/if}}\\n
\\n {{/each}}\\n\\n
\\n
\\n
Client
\\n
\\n {{#if account.client}}\\n {{account.client.id}}\\n ·\\n {{account.client.name}}\\n {{#if account.client.orphaned}}\\n (orphaned)\\n {{/if}}\\n
{{account.client.organizationId}}
\\n {{else}}\\n —\\n {{/if}}\\n
\\n
\\n
\\n
B2C id
\\n
{{if account.azureId account.azureId \\\"—\\\"}}
\\n
\\n
\\n
OrgApi user id
\\n
{{if account.orgApiUserId account.orgApiUserId \\\"—\\\"}}
\\n
\\n
\\n
Last sync
\\n
{{if account.lastSync (admin-instant account.lastSync) \\\"never\\\"}}
\\n
\\n
\\n\\n \\n \\n Identity ledger ({{account.ledger.length}})\\n \\n {{#if account.ledger.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each account.ledger as |row|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
RowReasonMatched byB2C idClientFromTo
{{row.id}}{{row.reason}}{{row.matchedBy}}{{row.remoteId}}{{row.clientId}}{{admin-instant row.validFrom}}\\n {{if row.current \\\"current\\\" (admin-instant row.validTo)}}\\n
\\n
\\n {{else}}\\n
No ledger rows.
\\n {{/if}}\\n \\n\\n {{#if account.retirements.length}}\\n
\\n \\n Retirements ({{account.retirements.length}})\\n \\n
    \\n {{#each account.retirements as |retirement|}}\\n
  • \\n {{admin-instant retirement.retiredOn}}\\n —\\n {{retirement.reason}}\\n {{#if retirement.upstream}}\\n (deleted upstream)\\n {{else}}\\n (by staff account {{retirement.retiredBy}})\\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{/if}}\\n\\n
\\n \\n Recent sync tasks ({{account.recentSyncTasks.length}})\\n \\n {{#if account.recentSyncTasks.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each account.recentSyncTasks as |task|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
TaskTypeStateStartedFinishedResult
{{task.id}}{{task.discriminator}}{{task.state}}{{admin-instant task.startTime}}{{admin-instant task.finishTime}}{{task.result}}
\\n
\\n {{else}}\\n
No sync tasks recorded.
\\n {{/if}}\\n
\\n \\n {{/let}}\\n {{/each}}\\n\\n
\\n

Identity conflicts ({{dossier.conflicts.length}})

\\n {{#if dossier.conflicts.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each dossier.conflicts as |conflict|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
IDReasonStateDetectedResolvedAccountTarget organization
{{conflict.id}}{{conflict.reason}}{{conflict.state}}{{admin-instant conflict.detectedOn}}{{admin-instant conflict.resolvedOn}}\\n {{#if conflict.existingAccountId}}\\n {{conflict.existingAccountId}}\\n {{/if}}\\n {{conflict.organizationId}}
\\n
\\n {{else}}\\n
None.
\\n {{/if}}\\n
\\n \\n {{/let}}\\n {{/if}}\\n\\n\",\"moduleName\":\"weldnote/components/admin-tools/identity-dossier.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/identity-dossier.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { restartableTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type {\n AdminCallResult,\n DossierAccount,\n DossierFlag,\n IdentityDossier,\n} from 'weldnote/services/admin-api';\nimport { FLAG_HELP, NEXT_SYNC_HELP } from 'weldnote/utils/admin-help';\n\ninterface AdminToolsIdentityDossierArgs {\n /** A query set from outside (another panel's \"Dossier\" button); looked up when it changes. */\n query?: string | null;\n /** Called with the query when the user searches here, so the page keeps one current query. */\n onSearch?: (query: string) => void;\n}\n\nconst REMOTE_LABELS: Record = {\n FOUND: 'Found in the OrgApi',\n NOT_FOUND: 'Not found in the OrgApi',\n ERROR: 'The OrgApi could not be asked',\n SKIPPED: 'Nothing to look the user up by',\n};\n\nconst SEVERITY_CLASSES: Record = {\n PROBLEM: 'border-red-400 bg-red-50',\n WARNING: 'border-yellow-400 bg-yellow-50',\n INFO: 'border-gray-300 bg-gray-50',\n};\n\nexport interface FlagView extends DossierFlag {\n classes: string;\n /** What it means, from the shared help texts; the backend's message for an unknown code. */\n meaning: string;\n /** The backend's account-specific message, when a shared meaning is shown instead. */\n detail: string | null;\n /** What to do about it, from the shared help texts; null for an unknown code. */\n action: string | null;\n}\n\nexport interface AccountView {\n account: DossierAccount;\n flags: FlagView[];\n}\n\n/**\n * `POST /api/admin/identity-dossier`: everything Notes and the OrgApi know about one person, from\n * an account id, email, B2C id or OrgApi user id. Read-only. The response carries PII, so it is\n * only rendered here.\n */\nexport default class AdminToolsIdentityDossier extends Component {\n @service declare adminApi: AdminApiService;\n\n @tracked value = this.args.query ?? '';\n @tracked result: AdminCallResult | null = null;\n\n get dossier(): IdentityDossier | null {\n return this.result?.ok ? this.result.body : null;\n }\n\n get failed(): boolean {\n return this.result !== null && !this.result.ok;\n }\n\n /** Flags that are about the whole dossier rather than one account. */\n get generalFlags(): FlagView[] {\n return (this.dossier?.flags ?? [])\n .filter((flag) => flag.accountId === null)\n .map(withClasses);\n }\n\n get accounts(): AccountView[] {\n const flags = this.dossier?.flags ?? [];\n return (this.dossier?.accounts ?? []).map((account) => ({\n account,\n flags: flags.filter((flag) => flag.accountId === account.id).map(withClasses),\n }));\n }\n\n get problemCount(): number {\n return (this.dossier?.flags ?? []).filter((flag) => flag.severity === 'PROBLEM').length;\n }\n\n get remoteLabel(): string {\n const status = this.dossier?.remote.status;\n return status ? REMOTE_LABELS[status] ?? status : '';\n }\n\n get nextSyncLabel(): string {\n const decision = this.dossier?.nextSync?.decision;\n return decision ? NEXT_SYNC_HELP[decision]?.meaning ?? decision : '';\n }\n\n get nextSyncAction(): string | null {\n const decision = this.dossier?.nextSync?.decision;\n return decision ? NEXT_SYNC_HELP[decision]?.action ?? null : null;\n }\n\n lookup = restartableTask(async (query: string) => {\n this.result = await this.adminApi.identityDossier(query);\n });\n\n @action\n setValue(event: Event): void {\n this.value = (event.target as HTMLInputElement).value;\n }\n\n @action\n submit(event: Event): void {\n event.preventDefault();\n const query = this.value.trim();\n if (query === '') {\n return;\n }\n this.search(query);\n }\n\n /** Runs when `@query` is set or changes: look it up and bring the panel into view. */\n @action\n queryChanged(element: HTMLElement): void {\n const query = this.args.query?.trim();\n if (!query) {\n return;\n }\n this.value = query;\n this.lookup.perform(query);\n element.scrollIntoView?.({ block: 'start', behavior: 'smooth' });\n }\n\n @action\n inspectAccount(id: number): void {\n this.value = String(id);\n this.search(this.value);\n }\n\n /**\n * Hands a new query to the page, whose change of `@query` triggers the lookup; looks up directly\n * when there is no page to tell, or when the query is already the page's (a repeat search).\n */\n private search(query: string): void {\n if (this.args.onSearch && query !== this.args.query) {\n this.args.onSearch(query);\n } else {\n this.lookup.perform(query);\n }\n }\n}\n\nfunction withClasses(flag: DossierFlag): FlagView {\n const help = FLAG_HELP[flag.code];\n return {\n ...flag,\n classes: SEVERITY_CLASSES[flag.severity] ?? SEVERITY_CLASSES.INFO,\n // The shared meaning where there is one; the backend's message stays as the specific detail.\n meaning: help?.meaning ?? flag.message,\n detail: help && flag.message !== help.meaning ? flag.message : null,\n action: help?.action ?? null,\n };\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n

\\n Looks each Notes account up in OrgApi (by B2C id, then by email) and compares the\\n organization. Read-only. At most\\n {{this.maxIds}}\\n accounts per run; each needs up to two OrgApi calls. Useful to check a batch, such as the\\n accounts from a drift audit finding list. For one person, the Identity dossier shows more.\\n

\\n \\n \\n {{#if this.validationError}}\\n {{this.validationError}}\\n {{/if}}\\n \\n {{if this.submit.isRunning \\\"Inspecting…\\\" \\\"Run report\\\"}}\\n \\n\\n\\n\\n {{#if this.rows.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.rows as |row|}}\\n {{#let row.account as |account|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/let}}\\n {{/each}}\\n \\n
AccountEmailClientLocal orgStatusSame orgOrgApi emailOrgApi ownerStored B2C idOrgApi B2C idOrgApi userError
\\n {{account.accountId}}\\n {{#if account.retired}}(retired){{/if}}\\n {{account.accountEmail}}{{account.clientName}} ({{account.clientId}}){{account.localOrganizationId}}{{account.status}}\\n {{#if (eq account.sameOrganization true)}}yes{{else if\\n (eq account.sameOrganization false)\\n }}NO{{else}}—{{/if}}\\n {{account.orgApiEmail}}{{account.orgApiOwnerId}}{{account.storedB2cId}}{{account.orgApiB2cId}}{{account.orgApiUserId}}{{account.errorType}}
\\n
\\n {{/if}}\\n
\", {\"contents\":\"
\\n

\\n Looks each Notes account up in OrgApi (by B2C id, then by email) and compares the\\n organization. Read-only. At most\\n {{this.maxIds}}\\n accounts per run; each needs up to two OrgApi calls. Useful to check a batch, such as the\\n accounts from a drift audit finding list. For one person, the Identity dossier shows more.\\n

\\n \\n \\n {{#if this.validationError}}\\n {{this.validationError}}\\n {{/if}}\\n \\n {{if this.submit.isRunning \\\"Inspecting…\\\" \\\"Run report\\\"}}\\n \\n\\n\\n\\n {{#if this.rows.length}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.rows as |row|}}\\n {{#let row.account as |account|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/let}}\\n {{/each}}\\n \\n
AccountEmailClientLocal orgStatusSame orgOrgApi emailOrgApi ownerStored B2C idOrgApi B2C idOrgApi userError
\\n {{account.accountId}}\\n {{#if account.retired}}(retired){{/if}}\\n {{account.accountEmail}}{{account.clientName}} ({{account.clientId}}){{account.localOrganizationId}}{{account.status}}\\n {{#if (eq account.sameOrganization true)}}yes{{else if\\n (eq account.sameOrganization false)\\n }}NO{{else}}—{{/if}}\\n {{account.orgApiEmail}}{{account.orgApiOwnerId}}{{account.storedB2cId}}{{account.orgApiB2cId}}{{account.orgApiUserId}}{{account.errorType}}
\\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/admin-tools/identity-drift-report.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/identity-drift-report.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport {\n MAX_DRIFT_REPORT_ACCOUNT_IDS,\n type AdminCallResult,\n type IdentityDriftAccount,\n type IdentityDriftReport,\n} from 'weldnote/services/admin-api';\nimport { parseIds } from 'weldnote/utils/admin-tools';\n\ninterface DriftRow {\n account: IdentityDriftAccount;\n /** Found in OrgApi and in the same organization: nothing to repair. */\n healthy: boolean;\n}\n\n/**\n * `POST /api/admin/identity-drift-report`: read-only comparison of selected Notes accounts against\n * OrgApi. The response carries PII, so it is only rendered here and never logged or cached.\n */\nexport default class AdminToolsIdentityDriftReport extends Component {\n @service declare adminApi: AdminApiService;\n\n maxIds = MAX_DRIFT_REPORT_ACCOUNT_IDS;\n\n @tracked value = '';\n @tracked validationError: string | null = null;\n @tracked result: AdminCallResult | null = null;\n\n get rows(): DriftRow[] {\n const accounts = this.result?.ok ? this.result.body?.accounts ?? [] : [];\n return accounts.map((account) => ({\n account,\n healthy: account.status.startsWith('MATCHED_BY_') && account.sameOrganization === true,\n }));\n }\n\n @action\n setValue(event: Event) {\n this.value = (event.target as HTMLTextAreaElement).value;\n }\n\n submit = dropTask(async (event?: Event) => {\n event?.preventDefault();\n this.validationError = null;\n const { ids, invalid } = parseIds(this.value);\n if (invalid.length > 0) {\n this.validationError = `Not a positive integer ID: ${invalid.join(', ')}`;\n return;\n }\n if (ids.length === 0) {\n this.validationError = 'Enter at least one account ID.';\n return;\n }\n if (ids.length > this.maxIds) {\n this.validationError = `At most ${this.maxIds} account IDs per report (got ${ids.length}).`;\n return;\n }\n this.result = null;\n this.result = await this.adminApi.identityDriftReport(ids);\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

What this console is for

\\n

\\n Notes keeps a copy of the users, organizations and welders that ESAB's OrgApi owns. When the\\n copy drifts, for example when a user moves company or is re-created upstream, these panels\\n find it, explain it and fix it. Every call acts on any tenant and is refused (403) for anyone\\n but the staff account.\\n

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

Work in this order

\\n
    \\n
  1. \\n Find: Drift audit. Run local checks (seconds), then a full audit (minutes).\\n Note the counts: they are your \\\"before\\\".\\n
  2. \\n
  3. \\n Triage: Identity conflicts. Cases the sync already parked for you. Preview\\n each one before applying it.\\n
  4. \\n
  5. \\n Diagnose: Identity dossier. Everything about one person, including what the\\n next sync would do. Every Dossier button in the other panels opens it.\\n
  6. \\n
  7. \\n Fix: OrgApi sync to refresh from the OrgApi, Account repair to retire\\n or move an account, or Apply in Identity conflicts.\\n
  8. \\n
  9. \\n Verify: open the dossier again, then run another full audit and check the counts\\n went down.\\n
  10. \\n
\\n
\\n\\n
\\n

Read-only or not

\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
PanelChanges data?Can it be undone?
Drift audit, Identity dossier, Identity drift report, conflict PreviewNoNothing to undo
OrgApi sync, Queue account syncYes: overwrites Notes with the OrgApi's dataNo, but the next sync reapplies the OrgApi's data
Conflict Apply (ORG_MOVE)Yes: moves the account and clears the roles and company grants it had under the old organizationPartly: moving it back does not restore the roles and grants
Conflict Apply (DUPLICATE_BUSINESS_KEY)Yes: links the existing welder to the new upstream id; its certificates stay where they areNo undo in the console
Conflict Apply (any other reason)No: the server refuses it and the conflict stays openNothing to undo
Conflict DismissCloses the conflictNo; a later sync parks a new one if it still applies
Account repair: RetireYes: the account can no longer log inNo
Account repair: MoveYes, like an ORG_MOVE apply (clears the old roles and company grants); recorded only in the logsPartly: moving it back does not restore the roles and grants
Zombie file cleanup (real run)Yes: deletes files and rowsNo
\\n
\\n\\n
\\n

Panel guides

\\n\\n
\\n Drift audit\\n
    \\n
  • Run local checks looks for welder forks and cross-tenant companies with SQL only.
  • \\n
  • \\n Run full audit also asks the OrgApi about every linked account, which finds\\n organization mismatches and B2C ids the OrgApi no longer knows. It takes a few minutes and\\n runs in the background: press Refresh to see it finish.\\n
  • \\n
  • Only one audit runs at a time. The newest 30 runs are kept.
  • \\n
  • \\n The table compares the latest run with the one before it. Red means more findings than\\n last time, green fewer. Show lists the findings of a type; Dossier opens an\\n account.\\n
  • \\n
  • \\n Findings are a snapshot. After you fix something, run the audit again before trusting the\\n list.\\n
  • \\n
\\n
\\n\\n
\\n Identity conflicts\\n
    \\n
  • \\n The sync parks a conflict whenever a decision is ambiguous, instead of guessing. Nothing\\n has been applied yet.\\n
  • \\n
  • \\n Always press Preview first. It shows what Apply would do, including the documents\\n that block a move and the roles and company grants a move clears.\\n
  • \\n
  • \\n Only ORG_MOVE and DUPLICATE_BUSINESS_KEY can be applied. The other reasons are fixed by\\n hand, then dismissed.\\n
  • \\n
  • See the reason table below for what to do with each one.
  • \\n
\\n
\\n\\n
\\n Identity dossier\\n
    \\n
  • Search by account id, email, B2C id (current or old) or OrgApi user id.
  • \\n
  • \\n It shows every matching account, retired ones too; the live OrgApi record; the identity\\n history; recent syncs; and related conflicts. It changes nothing.\\n
  • \\n
  • \\n OrgApi record says how the user was found. \\\"By B2C_ID\\\" means the account's id still\\n exists upstream. \\\"By EMAIL\\\" means that id is gone and only the email matched: the user was\\n probably re-created.\\n
  • \\n
  • \\n Next sync would is the most useful line: it is exactly what a sync would do now.\\n Problems are listed with what to do next.\\n
  • \\n
\\n
\\n\\n
\\n OrgApi sync and Queue account sync\\n
    \\n
  • \\n Both copy the OrgApi's data onto existing Notes records. They commit at once and have no\\n dry run.\\n
  • \\n
  • \\n OrgApi sync runs now and shows the result. USER-EMAIL is the command you will\\n use most. The -CLIENT and -LIST commands can take a long time.\\n
  • \\n
  • Queue account sync runs the same account sync in the background as a task.
  • \\n
  • \\n Neither ever creates an account. New accounts are created by the OrgApi event sync when\\n the user changes upstream.\\n
  • \\n
  • \\n A sync never applies an ambiguous change. It parks a conflict instead, which then appears\\n in Identity conflicts.\\n
  • \\n
\\n
\\n\\n
\\n Account repair\\n
    \\n
  • \\n Retire soft-deletes the account and records who did it and why. The account keeps\\n its B2C id, so that login stays refused, and its email is freed for a new live account.\\n It cannot be undone.\\n
  • \\n
  • \\n Move moves an account and its staff to another organization, by the OrgApi\\n organization id. It is refused, with nothing changed, when the staff authored, verified or\\n approved a WPS, PQR or welding book. It clears the roles and company grants from the old\\n tenant.\\n
  • \\n
  • \\n Prefer applying a parked ORG_MOVE conflict to a manual move: the conflict records who\\n resolved it and when, while a manual move is only in the logs.\\n
  • \\n
\\n
\\n\\n
\\n Other tools\\n
    \\n
  • \\n Identity drift report compares up to 50 chosen account ids with the OrgApi in one\\n table. The dossier covers the same ground for one person, in more depth.\\n
  • \\n
  • \\n Zombie file cleanup has nothing to do with identity. It deletes orphaned uploads.\\n Always do a dry run first.\\n
  • \\n
\\n
\\n
\\n\\n
\\n

Recipes

\\n\\n
\\n A user moved to another company\\n
    \\n
  1. Open the dossier. \\\"Next sync would\\\" says park ORG_MOVE.
  2. \\n
  3. OrgApi sync → USER-EMAIL for the user. It parks an ORG_MOVE conflict.
  4. \\n
  5. In Identity conflicts, press Preview on the conflict. If it would succeed, press Apply.
  6. \\n
  7. \\n If the preview says documents block the move, stop: moving would break document\\n provenance, so it needs a product decision.\\n
  8. \\n
\\n
\\n\\n
\\n \\n Same email, different organization (EMAIL_DIFFERENT_CLIENT)\\n \\n
    \\n
  1. \\n Open the dossier. If the OrgApi record was found by EMAIL, the old user is gone and\\n was re-created in the other organization.\\n
  2. \\n
  3. \\n If it was found by B2C_ID, the OrgApi has two users with this email. Notes can't\\n represent that: remove the duplicate upstream, or dismiss the conflict.\\n
  4. \\n
  5. \\n For a re-creation: Account repair → Move, to the new organization id shown in the\\n dossier.\\n
  6. \\n
  7. \\n OrgApi sync → USER-EMAIL. The email now matches in the right organization, so the account\\n is rebound to the new B2C id.\\n
  8. \\n
  9. Check the dossier: \\\"Next sync would\\\" says update the existing account. Then Dismiss the conflict.
  10. \\n
  11. \\n If the move is refused for authored documents, retire the old account instead. The next\\n OrgApi event for the user creates a fresh one in the new organization, and the documents\\n stay with the old one.\\n
  12. \\n
\\n
\\n\\n
\\n A user was deleted upstream but is still live in Notes\\n
    \\n
  1. The dossier shows DELETED_UPSTREAM_BUT_LIVE, or REMOTE_NOT_FOUND.
  2. \\n
  3. Confirm the user is really gone in the OrgApi.
  4. \\n
  5. Account repair → Retire, with a reason such as \\\"Deleted upstream in the OrgApi\\\".
  6. \\n
\\n
\\n\\n
\\n A welder was re-created upstream\\n
    \\n
  1. A DUPLICATE_BUSINESS_KEY conflict appears in Identity conflicts.
  2. \\n
  3. \\n Press Preview. If it names one welder, press Apply: the new id is linked to that welder,\\n and its certificates stay put.\\n
  4. \\n
  5. If several welders matched, it can't be applied; link it by hand.
  6. \\n
\\n
\\n
\\n\\n
\\n

Reference

\\n\\n
\\n Dossier problems ({{this.flags.length}})\\n
\\n \\n \\n \\n {{#each this.flags as |row|}}\\n \\n {{/each}}\\n \\n
CodeMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n\\n
\\n \\\"Next sync would\\\" decisions\\n
\\n \\n \\n \\n {{#each this.nextSyncDecisions as |row|}}\\n \\n {{/each}}\\n \\n
DecisionMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n\\n
\\n Conflict reasons\\n
\\n \\n \\n \\n {{#each this.conflictReasons as |row|}}\\n \\n {{/each}}\\n \\n
ReasonMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n\\n
\\n Drift audit types\\n
\\n \\n \\n \\n {{#each this.driftTypes as |row|}}\\n \\n {{/each}}\\n \\n
TypeMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n
\\n
\\n\", {\"contents\":\"
\\n
\\n

What this console is for

\\n

\\n Notes keeps a copy of the users, organizations and welders that ESAB's OrgApi owns. When the\\n copy drifts, for example when a user moves company or is re-created upstream, these panels\\n find it, explain it and fix it. Every call acts on any tenant and is refused (403) for anyone\\n but the staff account.\\n

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

Work in this order

\\n
    \\n
  1. \\n Find: Drift audit. Run local checks (seconds), then a full audit (minutes).\\n Note the counts: they are your \\\"before\\\".\\n
  2. \\n
  3. \\n Triage: Identity conflicts. Cases the sync already parked for you. Preview\\n each one before applying it.\\n
  4. \\n
  5. \\n Diagnose: Identity dossier. Everything about one person, including what the\\n next sync would do. Every Dossier button in the other panels opens it.\\n
  6. \\n
  7. \\n Fix: OrgApi sync to refresh from the OrgApi, Account repair to retire\\n or move an account, or Apply in Identity conflicts.\\n
  8. \\n
  9. \\n Verify: open the dossier again, then run another full audit and check the counts\\n went down.\\n
  10. \\n
\\n
\\n\\n
\\n

Read-only or not

\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
PanelChanges data?Can it be undone?
Drift audit, Identity dossier, Identity drift report, conflict PreviewNoNothing to undo
OrgApi sync, Queue account syncYes: overwrites Notes with the OrgApi's dataNo, but the next sync reapplies the OrgApi's data
Conflict Apply (ORG_MOVE)Yes: moves the account and clears the roles and company grants it had under the old organizationPartly: moving it back does not restore the roles and grants
Conflict Apply (DUPLICATE_BUSINESS_KEY)Yes: links the existing welder to the new upstream id; its certificates stay where they areNo undo in the console
Conflict Apply (any other reason)No: the server refuses it and the conflict stays openNothing to undo
Conflict DismissCloses the conflictNo; a later sync parks a new one if it still applies
Account repair: RetireYes: the account can no longer log inNo
Account repair: MoveYes, like an ORG_MOVE apply (clears the old roles and company grants); recorded only in the logsPartly: moving it back does not restore the roles and grants
Zombie file cleanup (real run)Yes: deletes files and rowsNo
\\n
\\n\\n
\\n

Panel guides

\\n\\n
\\n Drift audit\\n
    \\n
  • Run local checks looks for welder forks and cross-tenant companies with SQL only.
  • \\n
  • \\n Run full audit also asks the OrgApi about every linked account, which finds\\n organization mismatches and B2C ids the OrgApi no longer knows. It takes a few minutes and\\n runs in the background: press Refresh to see it finish.\\n
  • \\n
  • Only one audit runs at a time. The newest 30 runs are kept.
  • \\n
  • \\n The table compares the latest run with the one before it. Red means more findings than\\n last time, green fewer. Show lists the findings of a type; Dossier opens an\\n account.\\n
  • \\n
  • \\n Findings are a snapshot. After you fix something, run the audit again before trusting the\\n list.\\n
  • \\n
\\n
\\n\\n
\\n Identity conflicts\\n
    \\n
  • \\n The sync parks a conflict whenever a decision is ambiguous, instead of guessing. Nothing\\n has been applied yet.\\n
  • \\n
  • \\n Always press Preview first. It shows what Apply would do, including the documents\\n that block a move and the roles and company grants a move clears.\\n
  • \\n
  • \\n Only ORG_MOVE and DUPLICATE_BUSINESS_KEY can be applied. The other reasons are fixed by\\n hand, then dismissed.\\n
  • \\n
  • See the reason table below for what to do with each one.
  • \\n
\\n
\\n\\n
\\n Identity dossier\\n
    \\n
  • Search by account id, email, B2C id (current or old) or OrgApi user id.
  • \\n
  • \\n It shows every matching account, retired ones too; the live OrgApi record; the identity\\n history; recent syncs; and related conflicts. It changes nothing.\\n
  • \\n
  • \\n OrgApi record says how the user was found. \\\"By B2C_ID\\\" means the account's id still\\n exists upstream. \\\"By EMAIL\\\" means that id is gone and only the email matched: the user was\\n probably re-created.\\n
  • \\n
  • \\n Next sync would is the most useful line: it is exactly what a sync would do now.\\n Problems are listed with what to do next.\\n
  • \\n
\\n
\\n\\n
\\n OrgApi sync and Queue account sync\\n
    \\n
  • \\n Both copy the OrgApi's data onto existing Notes records. They commit at once and have no\\n dry run.\\n
  • \\n
  • \\n OrgApi sync runs now and shows the result. USER-EMAIL is the command you will\\n use most. The -CLIENT and -LIST commands can take a long time.\\n
  • \\n
  • Queue account sync runs the same account sync in the background as a task.
  • \\n
  • \\n Neither ever creates an account. New accounts are created by the OrgApi event sync when\\n the user changes upstream.\\n
  • \\n
  • \\n A sync never applies an ambiguous change. It parks a conflict instead, which then appears\\n in Identity conflicts.\\n
  • \\n
\\n
\\n\\n
\\n Account repair\\n
    \\n
  • \\n Retire soft-deletes the account and records who did it and why. The account keeps\\n its B2C id, so that login stays refused, and its email is freed for a new live account.\\n It cannot be undone.\\n
  • \\n
  • \\n Move moves an account and its staff to another organization, by the OrgApi\\n organization id. It is refused, with nothing changed, when the staff authored, verified or\\n approved a WPS, PQR or welding book. It clears the roles and company grants from the old\\n tenant.\\n
  • \\n
  • \\n Prefer applying a parked ORG_MOVE conflict to a manual move: the conflict records who\\n resolved it and when, while a manual move is only in the logs.\\n
  • \\n
\\n
\\n\\n
\\n Other tools\\n
    \\n
  • \\n Identity drift report compares up to 50 chosen account ids with the OrgApi in one\\n table. The dossier covers the same ground for one person, in more depth.\\n
  • \\n
  • \\n Zombie file cleanup has nothing to do with identity. It deletes orphaned uploads.\\n Always do a dry run first.\\n
  • \\n
\\n
\\n
\\n\\n
\\n

Recipes

\\n\\n
\\n A user moved to another company\\n
    \\n
  1. Open the dossier. \\\"Next sync would\\\" says park ORG_MOVE.
  2. \\n
  3. OrgApi sync → USER-EMAIL for the user. It parks an ORG_MOVE conflict.
  4. \\n
  5. In Identity conflicts, press Preview on the conflict. If it would succeed, press Apply.
  6. \\n
  7. \\n If the preview says documents block the move, stop: moving would break document\\n provenance, so it needs a product decision.\\n
  8. \\n
\\n
\\n\\n
\\n \\n Same email, different organization (EMAIL_DIFFERENT_CLIENT)\\n \\n
    \\n
  1. \\n Open the dossier. If the OrgApi record was found by EMAIL, the old user is gone and\\n was re-created in the other organization.\\n
  2. \\n
  3. \\n If it was found by B2C_ID, the OrgApi has two users with this email. Notes can't\\n represent that: remove the duplicate upstream, or dismiss the conflict.\\n
  4. \\n
  5. \\n For a re-creation: Account repair → Move, to the new organization id shown in the\\n dossier.\\n
  6. \\n
  7. \\n OrgApi sync → USER-EMAIL. The email now matches in the right organization, so the account\\n is rebound to the new B2C id.\\n
  8. \\n
  9. Check the dossier: \\\"Next sync would\\\" says update the existing account. Then Dismiss the conflict.
  10. \\n
  11. \\n If the move is refused for authored documents, retire the old account instead. The next\\n OrgApi event for the user creates a fresh one in the new organization, and the documents\\n stay with the old one.\\n
  12. \\n
\\n
\\n\\n
\\n A user was deleted upstream but is still live in Notes\\n
    \\n
  1. The dossier shows DELETED_UPSTREAM_BUT_LIVE, or REMOTE_NOT_FOUND.
  2. \\n
  3. Confirm the user is really gone in the OrgApi.
  4. \\n
  5. Account repair → Retire, with a reason such as \\\"Deleted upstream in the OrgApi\\\".
  6. \\n
\\n
\\n\\n
\\n A welder was re-created upstream\\n
    \\n
  1. A DUPLICATE_BUSINESS_KEY conflict appears in Identity conflicts.
  2. \\n
  3. \\n Press Preview. If it names one welder, press Apply: the new id is linked to that welder,\\n and its certificates stay put.\\n
  4. \\n
  5. If several welders matched, it can't be applied; link it by hand.
  6. \\n
\\n
\\n
\\n\\n
\\n

Reference

\\n\\n
\\n Dossier problems ({{this.flags.length}})\\n
\\n \\n \\n \\n {{#each this.flags as |row|}}\\n \\n {{/each}}\\n \\n
CodeMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n\\n
\\n \\\"Next sync would\\\" decisions\\n
\\n \\n \\n \\n {{#each this.nextSyncDecisions as |row|}}\\n \\n {{/each}}\\n \\n
DecisionMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n\\n
\\n Conflict reasons\\n
\\n \\n \\n \\n {{#each this.conflictReasons as |row|}}\\n \\n {{/each}}\\n \\n
ReasonMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n\\n
\\n Drift audit types\\n
\\n \\n \\n \\n {{#each this.driftTypes as |row|}}\\n \\n {{/each}}\\n \\n
TypeMeansWhat to do
{{row.code}}{{row.meaning}}{{row.action}}
\\n
\\n
\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/admin-tools/instructions.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/instructions.hbs\"}});\nimport Component from '@glimmer/component';\nimport {\n CONFLICT_REASON_HELP,\n DRIFT_TYPE_HELP,\n FLAG_HELP,\n NEXT_SYNC_HELP,\n type HelpEntry,\n} from 'weldnote/utils/admin-help';\n\nexport interface HelpRow extends HelpEntry {\n code: string;\n}\n\nfunction rows(help: Record): HelpRow[] {\n return Object.entries(help).map(([code, entry]) => ({ code, ...entry }));\n}\n\n/**\n * The staff console's user guide: the order to work in, what each panel is for, recipes for the\n * common identity problems, and reference tables built from the same help texts the panels show.\n */\nexport default class AdminToolsInstructions extends Component {\n driftTypes = rows(DRIFT_TYPE_HELP);\n conflictReasons = rows(CONFLICT_REASON_HELP);\n flags = rows(FLAG_HELP);\n nextSyncDecisions = rows(NEXT_SYNC_HELP);\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n

\\n Copies the OrgApi's current data onto existing Notes records, now. There is no dry run and it\\n cannot be undone. It never creates accounts, and when a change is ambiguous (an organization\\n move, the same email in another organization) it parks a conflict instead of applying it.\\n Client-wide and list commands can take a while.\\n

\\n \\n \\n {{#each this.commands as |entry|}}\\n \\n {{/each}}\\n \\n {{#if this.selectedHint}}\\n

\\n {{this.selectedHint}}\\n

\\n {{/if}}\\n\\n {{#if this.isListInput}}\\n \\n \\n {{else}}\\n \\n \\n {{/if}}\\n\\n {{#if this.validationError}}\\n {{this.validationError}}\\n {{/if}}\\n\\n \\n {{if this.submit.isRunning \\\"Syncing…\\\" \\\"Run sync\\\"}}\\n \\n\\n\\n\\n {{#if this.listOutcomes.length}}\\n \\n \\n \\n \\n \\n {{#each this.listOutcomes as |outcome|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
IDResultMessage
{{outcome.id}}\\n {{if outcome.success \\\"OK\\\" \\\"Failed\\\"}}\\n {{outcome.message}}
\\n {{/if}}\\n
\", {\"contents\":\"
\\n

\\n Copies the OrgApi's current data onto existing Notes records, now. There is no dry run and it\\n cannot be undone. It never creates accounts, and when a change is ambiguous (an organization\\n move, the same email in another organization) it parks a conflict instead of applying it.\\n Client-wide and list commands can take a while.\\n

\\n \\n \\n {{#each this.commands as |entry|}}\\n \\n {{/each}}\\n \\n {{#if this.selectedHint}}\\n

\\n {{this.selectedHint}}\\n

\\n {{/if}}\\n\\n {{#if this.isListInput}}\\n \\n \\n {{else}}\\n \\n \\n {{/if}}\\n\\n {{#if this.validationError}}\\n {{this.validationError}}\\n {{/if}}\\n\\n \\n {{if this.submit.isRunning \\\"Syncing…\\\" \\\"Run sync\\\"}}\\n \\n\\n\\n\\n {{#if this.listOutcomes.length}}\\n \\n \\n \\n \\n \\n {{#each this.listOutcomes as |outcome|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
IDResultMessage
{{outcome.id}}\\n {{if outcome.success \\\"OK\\\" \\\"Failed\\\"}}\\n {{outcome.message}}
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/admin-tools/org-api-sync.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/org-api-sync.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type {\n AdminCallResult,\n OrgApiSyncCommand,\n OrgApiSyncRequest,\n} from 'weldnote/services/admin-api';\nimport type WindowService from 'weldnote/services/window-service';\nimport { parseIds } from 'weldnote/utils/admin-tools';\n\ntype InputKind = 'id' | 'email' | 'ids';\n\ninterface CommandOption {\n command: OrgApiSyncCommand;\n input: InputKind;\n label: string;\n /** When to use it, shown under the picker. */\n hint?: string;\n}\n\n/** When to use each command. Kept apart from the list so the labels stay one line. */\nconst COMMAND_HINTS: Partial> = {\n USER: 'Refresh one account from the OrgApi, by Notes account id.',\n 'USER-EMAIL':\n 'The one you will use most. Refresh one account by email; parks a conflict instead if the change is ambiguous.',\n CLIENT: \"Refresh one client (the organization's name and structure) by Notes client id.\",\n PERSON: 'Refresh one welder by Notes person id.',\n COMPANY: 'Refresh one company by Notes company id.',\n 'USER-CLIENT': 'Refresh every account of a client. Slow for a large client.',\n 'PERSON-CLIENT': 'Refresh every welder of a client. Slow for a large client.',\n 'COMPANY-CLIENT': 'Refresh every company of a client.',\n 'USER-LIST': 'Refresh several accounts by id; results are listed per id.',\n 'CLIENT-LIST': 'Refresh several clients by id.',\n 'PERSON-LIST': 'Refresh several welders by id.',\n 'COMPANY-LIST': 'Refresh several companies by id.',\n};\n\n/** Mirrors the command matrix in `OrgApiAdminSyncController` / `ManualOrgApiSyncTask`. */\nexport const ORG_API_SYNC_COMMANDS: CommandOption[] = [\n { command: 'USER', input: 'id', label: 'USER: one account, by account ID' },\n { command: 'USER-EMAIL', input: 'email', label: 'USER-EMAIL: one account, by email' },\n { command: 'CLIENT', input: 'id', label: 'CLIENT: one client, by client ID' },\n { command: 'PERSON', input: 'id', label: 'PERSON: one welder, by person ID' },\n { command: 'COMPANY', input: 'id', label: 'COMPANY: one company, by company ID' },\n {\n command: 'USER-CLIENT',\n input: 'id',\n label: 'USER-CLIENT: every account of a client ID',\n },\n {\n command: 'PERSON-CLIENT',\n input: 'id',\n label: 'PERSON-CLIENT: every welder of a client ID',\n },\n {\n command: 'COMPANY-CLIENT',\n input: 'id',\n label: 'COMPANY-CLIENT: every company of a client ID',\n },\n { command: 'USER-LIST', input: 'ids', label: 'USER-LIST: list of account IDs' },\n { command: 'CLIENT-LIST', input: 'ids', label: 'CLIENT-LIST: list of client IDs' },\n { command: 'PERSON-LIST', input: 'ids', label: 'PERSON-LIST: list of person IDs' },\n { command: 'COMPANY-LIST', input: 'ids', label: 'COMPANY-LIST: list of company IDs' },\n];\n\ninterface ListOutcome {\n id: number;\n success: boolean;\n message: string | null;\n}\n\n/**\n * `POST /api/admin/sync`: runs one OrgApi sync command inline and returns its outcome. The\n * `*-CLIENT` and `*-LIST` commands are synchronous on the server and can take a while for a large\n * client.\n */\nexport default class AdminToolsOrgApiSync extends Component {\n @service declare adminApi: AdminApiService;\n @service declare windowService: WindowService;\n\n commands = ORG_API_SYNC_COMMANDS;\n\n @tracked command: OrgApiSyncCommand = 'USER';\n @tracked value = '';\n @tracked validationError: string | null = null;\n @tracked result: AdminCallResult | null = null;\n\n get selectedHint(): string | null {\n return COMMAND_HINTS[this.command] ?? null;\n }\n\n get selected(): CommandOption {\n return this.commands.find((option) => option.command === this.command) ?? this.commands[0]!;\n }\n\n get isIdInput(): boolean {\n return this.selected.input === 'id';\n }\n\n get isEmailInput(): boolean {\n return this.selected.input === 'email';\n }\n\n get isListInput(): boolean {\n return this.selected.input === 'ids';\n }\n\n get listOutcomes(): ListOutcome[] {\n const body = this.result?.body as { results?: ListOutcome[] } | null | undefined;\n return body?.results ?? [];\n }\n\n @action\n setCommand(event: Event) {\n this.command = (event.target as HTMLSelectElement).value as OrgApiSyncCommand;\n this.validationError = null;\n this.result = null;\n }\n\n @action\n setValue(event: Event) {\n this.value = (event.target as HTMLInputElement | HTMLTextAreaElement).value;\n }\n\n buildRequest(): OrgApiSyncRequest | null {\n const { command } = this;\n const raw = this.value.trim();\n if (this.isEmailInput) {\n if (raw === '') {\n this.validationError = 'Enter an email.';\n return null;\n }\n return { command, email: raw };\n }\n const { ids, invalid } = parseIds(raw);\n if (invalid.length > 0) {\n this.validationError = `Not a positive integer ID: ${invalid.join(', ')}`;\n return null;\n }\n if (ids.length === 0) {\n this.validationError = this.isListInput\n ? 'Enter at least one ID.'\n : 'Enter an ID.';\n return null;\n }\n if (this.isIdInput) {\n if (ids.length > 1) {\n this.validationError = `${command} takes a single ID; use the -LIST variant for several.`;\n return null;\n }\n return { command, id: ids[0] };\n }\n return { command, ids };\n }\n\n submit = dropTask(async (event?: Event) => {\n event?.preventDefault();\n this.validationError = null;\n const request = this.buildRequest();\n if (!request || !this.windowService.confirm(confirmationFor(request))) {\n return;\n }\n this.result = null;\n this.result = await this.adminApi.orgApiSync(request);\n });\n}\n\n/**\n * Over HTTP the sync has no dry run: it commits as it goes, and can update or soft-delete Notes\n * records to match OrgApi. So every command is confirmed, naming exactly what it will touch.\n */\nexport function confirmationFor(request: OrgApiSyncRequest): string {\n const { command } = request;\n const consequence =\n 'This commits immediately and may overwrite or remove Notes data to match OrgApi. It cannot be undone.';\n if (command === 'USER-EMAIL') {\n return `Run ${command} for ${request.email}?\\n\\n${consequence}`;\n }\n if (request.ids) {\n return `Run ${command} for ${request.ids.length} record(s): ${request.ids.join(\n ', '\n )}?\\n\\n${consequence}`;\n }\n if (command.endsWith('-CLIENT')) {\n return `Run ${command} for EVERY record of client ${request.id}?\\n\\n${consequence}`;\n }\n return `Run ${command} for ID ${request.id}?\\n\\n${consequence}`;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @result}}\\n \\n
\\n {{#if @result.ok}}Success{{else}}Failed{{/if}}\\n (HTTP {{@result.status}})\\n
\\n {{#if @result.message}}\\n
{{@result.message}}
\\n {{/if}}\\n {{yield}}\\n {{#if @result.body}}\\n
\\n Raw response\\n {{this.raw}}\\n
\\n {{/if}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @result}}\\n \\n
\\n {{#if @result.ok}}Success{{else}}Failed{{/if}}\\n (HTTP {{@result.status}})\\n
\\n {{#if @result.message}}\\n
{{@result.message}}
\\n {{/if}}\\n {{yield}}\\n {{#if @result.body}}\\n
\\n Raw response\\n {{this.raw}}\\n
\\n {{/if}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/admin-tools/result.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/result.hbs\"}});\nimport Component from '@glimmer/component';\nimport type { AdminCallResult } from 'weldnote/services/admin-api';\n\ninterface AdminToolsResultArgs {\n result: AdminCallResult | null;\n}\n\n/** Shows the outcome of one admin call: status, the backend's message, and the raw JSON body. */\nexport default class AdminToolsResult extends Component {\n get raw(): string {\n return JSON.stringify(this.args.result?.body, null, 2);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n

\\n Queues the same account sync as OrgApi sync → USER-EMAIL, but in the background as a task,\\n and also refreshes the account's sites. It refreshes an existing account only: it never\\n creates one. Use OrgApi sync instead when you want to see the result straight away.\\n

\\n \\n
\\n \\n \\n Queue sync\\n \\n
\\n
\\n\", {\"contents\":\"
\\n

\\n Queues the same account sync as OrgApi sync → USER-EMAIL, but in the background as a task,\\n and also refreshes the account's sites. It refreshes an existing account only: it never\\n creates one. Use OrgApi sync instead when you want to see the result straight away.\\n

\\n \\n
\\n \\n \\n Queue sync\\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/admin-tools/sync-account.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/sync-account.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type { AdminCallResult } from 'weldnote/services/admin-api';\nimport type WindowService from 'weldnote/services/window-service';\n\n/**\n * `POST /api/admin/sync-account`: queues the asynchronous OrgApi account sync that login normally\n * triggers. The response is the queued task; its progress is client-scoped on the backend, so it is\n * not polled from here.\n */\nexport default class AdminToolsSyncAccount extends Component {\n @service declare adminApi: AdminApiService;\n @service declare windowService: WindowService;\n\n @tracked email = '';\n @tracked result: AdminCallResult | null = null;\n\n get canSubmit(): boolean {\n return this.email.trim() !== '' && !this.submit.isRunning;\n }\n\n @action\n setEmail(event: Event) {\n this.email = (event.target as HTMLInputElement).value;\n }\n\n submit = dropTask(async (event?: Event) => {\n event?.preventDefault();\n const email = this.email.trim();\n const question =\n `Queue an OrgApi sync for ${email}?\\n\\n` +\n \"It refreshes the existing account and its sites from the OrgApi, overwriting Notes' copy. \" +\n 'It never creates an account: new accounts come from the OrgApi event sync.';\n if (!this.windowService.confirm(question)) {\n return;\n }\n this.result = await this.adminApi.syncAccount(email);\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"

\\n Finds uploads that are soft-deleted, attached to nothing, or expired ephemeral files, and\\n deletes them from the database and S3. Unrelated to identity. Run a dry run first to see the\\n counts; a real run cannot be undone.\\n

\\n
\\n \\n Dry run\\n \\n \\n Delete for real\\n \\n
\\n\\n {{#if this.result.ok}}\\n
\\n {{if\\n this.lastRunWasDry\\n \\\"Dry run: nothing was deleted.\\\"\\n \\\"Committed: files were deleted.\\\"\\n }}\\n
\\n {{/if}}\\n
\", {\"contents\":\"

\\n Finds uploads that are soft-deleted, attached to nothing, or expired ephemeral files, and\\n deletes them from the database and S3. Unrelated to identity. Run a dry run first to see the\\n counts; a real run cannot be undone.\\n

\\n
\\n \\n Dry run\\n \\n \\n Delete for real\\n \\n
\\n\\n {{#if this.result.ok}}\\n
\\n {{if\\n this.lastRunWasDry\\n \\\"Dry run: nothing was deleted.\\\"\\n \\\"Committed: files were deleted.\\\"\\n }}\\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/admin-tools/zombie-file-cleanup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/admin-tools/zombie-file-cleanup.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport { dropTask } from 'ember-concurrency';\nimport type AdminApiService from 'weldnote/services/admin-api';\nimport type { AdminCallResult } from 'weldnote/services/admin-api';\nimport type WindowService from 'weldnote/services/window-service';\n\n/**\n * `POST /api/admin/cleanup-zombie-files`: removes soft-deleted, unattached and expired ephemeral\n * uploads from the database and S3. The backend defaults to a dry run; the real run is only offered\n * after a dry run has shown what it would touch.\n */\nexport default class AdminToolsZombieFileCleanup extends Component {\n @service declare adminApi: AdminApiService;\n @service declare windowService: WindowService;\n\n @tracked result: AdminCallResult | null = null;\n @tracked hasDryRun = false;\n\n get isRunning(): boolean {\n return this.run.isRunning;\n }\n\n get lastRunWasDry(): boolean {\n return (this.result?.body as { dryRun?: boolean } | null)?.dryRun === true;\n }\n\n run = dropTask(async (dryRun: boolean) => {\n if (\n !dryRun &&\n !this.windowService.confirm(\n 'Delete the zombie files for real?\\n\\nThey are removed from the database and S3. This cannot be undone.'\n )\n ) {\n return;\n }\n this.result = await this.adminApi.cleanupZombieFiles(dryRun);\n // A real run consumes the preview, so the next real run needs a fresh dry run first.\n this.hasDryRun = dryRun && this.result.ok;\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n
\\n
\\n
\\n {{#if (not (is-empty-attribute @title))}}\\n

{{@title}}

\\n {{/if}}\\n
\\n {{yield}}\\n
\\n
\\n
\\n\", {\"contents\":\"\\n
\\n
\\n
\\n
\\n {{#if (not (is-empty-attribute @title))}}\\n

{{@title}}

\\n {{/if}}\\n
\\n {{yield}}\\n
\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/alert-message.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/alert-message.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { get, set, action } from '@ember/object';\nimport {\n isPermissionDenied,\n isDuplicateError,\n isForeignKeyError,\n} from 'weldnote/utils/json-api-errors';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { tracked } from '@glimmer/tracking';\nimport { task } from 'ember-concurrency';\nimport { assert } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\nexport default class BaseEdit extends Component {\n @service\n intl;\n\n @service\n store;\n\n @service\n analytics;\n\n @service\n alertMessage;\n\n @service\n userSession;\n\n @service\n loading;\n\n @service\n router;\n\n @tracked\n isShowingDeleteModal = false;\n\n // Just an alias for the alert message service\n get alert() {\n return this.alertMessage;\n }\n\n get modelName() {\n return this.args.model.metadata.modelName;\n }\n\n get listRoute() {\n return this.args.model.metadata.listRoute;\n }\n\n get editRoute() {\n return this.args.model.metadata.editRoute;\n }\n\n get visualLabel() {\n return this.args.model.visualLabel;\n }\n\n get showDeleteButton() {\n return this.canEdit && !this.args.model.isNew;\n }\n\n get canEdit() {\n return this.args.canEdit ?? true;\n }\n\n get title() {\n let { intl } = this;\n if (this.args.model.isNew) {\n let modelLabel = intl.t(`model.${this.modelName}.model-name`);\n return intl.t('edit-view.new-item', { name: modelLabel });\n }\n return this.visualLabel;\n }\n\n get subtitle() {\n let { hasDirtyAttributes: isDirty } = this.args.model;\n let changedAttributes = this.args.model.changedAttributes();\n // Something's odd, changedAttributes returns empty, but hasDirtyAttributes returns true?\n if (isDirty && Object.keys(changedAttributes).length > 0) {\n return '*';\n } else {\n return '';\n }\n }\n\n get isModelSaving() {\n return this.saveModel.isRunning;\n }\n\n get breadcrumbs() {\n return [\n {\n route: this.listRoute,\n label: this.getModelLabel('model-plural'),\n },\n {\n label: this.title,\n },\n ];\n }\n\n constructor() {\n super(...arguments);\n assert(`Requires a model`, !isEmpty(this.args.model));\n assert(\n 'Requires the list route present in model metadata under the listRoute key',\n !isEmpty(this.listRoute)\n );\n assert(\n 'Requires the edit route present in model metadata under the editRoute key',\n !isEmpty(this.editRoute)\n );\n }\n\n getModelValue(attribute) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n return get(this.args.model, attribute);\n }\n\n setModelValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n set(this.args.model, attribute, value);\n }\n\n setModelDecimalValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let {\n userSession: { decimalSeparator: separator },\n } = this;\n if (separator === ',') {\n if (!isEmpty(value)) {\n value = `${value}`.replace(',', '.');\n }\n }\n set(this.args.model, attribute, value);\n }\n\n setModelCollection(attribute, values) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = get(this.args.model, attribute);\n collection.clear();\n if (!isEmpty(values)) {\n values.forEach((value) => {\n collection.pushObject(value);\n });\n }\n }\n\n setModelCollectionValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n if (!isEmpty(value)) {\n this.setModelCollection(attribute, [value]);\n }\n }\n\n clearModelCollection(attribute) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = get(this.args.model, attribute);\n collection.clear();\n }\n\n getActionLabel(title) {\n return this.intl.t(title, { name: this.visualLabel });\n }\n\n getModelLabel(label) {\n return this.intl.t(`model.${this.modelName}.${label}`);\n }\n\n validationFailed() {\n // empty method to override\n }\n\n postDelete() {\n this.router.transitionTo(this.listRoute);\n }\n\n beforeSave() {\n // empty method to override\n }\n\n postSave(saved, { isNew }) {\n if (isNew) {\n this.router.transitionTo(this.editRoute, saved.id);\n }\n }\n\n showSaveSuccessMessage() {\n this.alertMessage.success(this.getActionLabel('edit-view.actions.saved'));\n }\n\n deleteModel = task(\n {\n drop: true,\n },\n async () => {\n let { model } = this.args;\n let { loading, alertMessage, intl, store } = this;\n let deleteInfo = {\n id: model.id,\n type: this.modelName,\n };\n let translation = this.getActionLabel('edit-view.actions.deleted');\n loading.block();\n try {\n model.deleteRecord();\n await model.save();\n store.unloadRecord(model);\n alertMessage.success(translation);\n this.postDelete(deleteInfo);\n } catch (reason) {\n model.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n if (isForeignKeyError(reason)) {\n let foreignKeyMessage = intl.t('edit-view.actions.foreign-key-error', {\n name: this.visualLabel,\n });\n alertMessage.error(foreignKeyMessage);\n this.isShowingDeleteModal = false;\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.generic-delete-error', {\n name: this.visualLabel,\n })\n );\n }\n }\n } finally {\n loading.unblock();\n this.isShowingDeleteModal = false;\n }\n }\n );\n\n saveModel = task(\n {\n drop: true,\n },\n async () => {\n let { model } = this.args;\n let { alertMessage, intl, loading } = this;\n let { isNew } = model;\n this.beforeSave();\n\n if (model.validate()) {\n loading.block();\n try {\n let saved = await model.save();\n this.showSaveSuccessMessage();\n this.postSave(saved, { isNew });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n if (isDuplicateError(reason)) {\n let duplicateMessage = intl.t('edit-view.actions.unique-violation');\n alertMessage.error(duplicateMessage);\n } else {\n alertMessage.error(intl.t('edit-view.actions.error', { name: this.title }));\n }\n }\n } finally {\n loading.unblock();\n }\n } else {\n this.validationFailed(model);\n let errors = [];\n model.errors.forEach((error) => {\n errors.pushObject(error);\n });\n this.analytics.trackEvent(EVENTS.VALIDATION_FAILED, {\n id: model.id,\n type: this.modelName,\n errors,\n });\n\n alertMessage.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n );\n\n @action\n showDeleteModal() {\n this.isShowingDeleteModal = true;\n }\n\n @action\n hideDeleteModal() {\n this.isShowingDeleteModal = false;\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { oneWay, and } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { later } from '@ember/runloop';\nimport { set, get, action, computed } from '@ember/object';\nimport { isPermissionDenied, isForeignKeyError } from 'weldnote/utils/json-api-errors';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class BaseEditWps extends Component {\n @service\n intl;\n\n @service\n store;\n\n @service\n analytics;\n\n @service\n alertMessage;\n\n @service\n loading;\n\n showLoading = true;\n\n /* Whether the Model is being edited or not*/\n isUserEditing = false;\n\n title = '';\n\n createAction = null;\n\n isComponentSaving = false;\n\n @and('wps.isSaving', 'isComponentSaving')\n isModelSaving;\n\n @computed('wps.{isNew,visualLabel}')\n get titleValue() {\n let { model: wps, intl } = this;\n if (get(wps, 'isNew')) {\n let modelLabel = intl\n .t(`model.${get(this, 'model.metadata.modelName')}.model-name`)\n .toString();\n return intl.t('edit-view.new-item', { name: modelLabel });\n }\n return get(this, 'wps.wpsNumber');\n }\n\n @oneWay('model.hasDirtyAttributes')\n isDirty;\n\n @computed('isDirty')\n get subtitle() {\n let isDirty = get(this, 'isDirty');\n let changedAttributes = get(this, 'model').changedAttributes();\n // Something's odd, changedAttributes returns empty, but hasDirtyAttributes returns true?\n if (isDirty && Object.keys(changedAttributes).length > 0) {\n return '*';\n } else {\n return '';\n }\n }\n\n getActionLabel(title) {\n return this.intl.t(title, { name: get(this, 'model.visualLabel') });\n }\n\n getModelLabel(label) {\n return this.intl.t(`model.${get(this, 'model.metadata.modelName')}.${label}`);\n }\n\n init() {\n super.init(...arguments);\n set(this, 'title', get(this, 'titleValue'));\n }\n\n _markSaving() {\n set(this, 'isComponentSaving', true);\n }\n\n _finishSaving() {\n set(this, 'isComponentSaving', false);\n }\n\n _showSaveSuccessMessage() {\n let translation = this.getActionLabel('edit-view.actions.saved');\n get(this, 'alertMessage').success(translation.toString());\n }\n\n _updateTitle() {\n let newTitle = get(this, 'titleValue');\n set(this, 'title', newTitle);\n }\n\n _stopEditing() {\n set(this, 'isUserEditing', false);\n }\n\n postCancelEditModel() {\n /* Hook to override */\n }\n\n // The breadcrumb for a given model\n @computed('model')\n get breadcrumbs() {\n return [\n {\n route: get(this, 'listRoute'),\n label: this.getModelLabel('model-plural'),\n },\n {\n label: get(this, 'titleValue'),\n },\n ];\n }\n\n pushValidationErrorsToAnalytics() {\n let { model: wps, analytics } = this;\n let errors = [];\n get(wps, 'errors').forEach((error) => {\n errors.pushObject(error);\n });\n let parameters = get(wps, 'weldingParameters');\n if (parameters) {\n parameters.forEach((parameter) => {\n let errorParameter = get(parameter, 'errors.content');\n if (!isEmpty(errorParameter)) {\n errors.pushObject({\n pass: get(parameter, 'passNumber'),\n error: errorParameter,\n });\n }\n });\n analytics.trackEvent(EVENTS.VALIDATION_FAILED, {\n id: get(wps, 'id'),\n type: 'welding-procedure-specification',\n errors,\n });\n }\n }\n\n @action\n deleteModel() {\n let self = this;\n let { model } = this;\n let deleteInfo = {\n id: model.get('id'),\n type: self.get('model.metadata.modelName'),\n };\n let translation = self.getActionLabel('edit-view.actions.deleted');\n get(this, 'loading').block();\n model.deleteRecord();\n model\n .save()\n .then(() => {\n self.get('alertMessage').success(translation);\n if (self.postDelete) {\n self.postDelete(deleteInfo);\n }\n self.deleteInstance();\n })\n .catch((reason) => {\n model.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n get(this, 'alertMessage').error(this.intl.t('edit-view.actions.permission-denied'));\n } else {\n if (isForeignKeyError(reason)) {\n let foreignKeyMessage = this.intl\n .t('edit-view.actions.foreign-key-error', { name: get(this, 'model.visualLabel') })\n .toString();\n get(this, 'alertMessage').error(foreignKeyMessage);\n set(this, 'isShowingModal', false);\n } else {\n get(this, 'alertMessage').error(\n this.intl\n .t('edit-view.actions.generic-delete-error', {\n name: this.get('model.visualLabel'),\n })\n .toString()\n );\n }\n }\n })\n .finally(() => {\n this.loading.unblock();\n this.toggleProperty('isShowingModal');\n });\n }\n\n @action\n saveModel(stopEditing = false) {\n let { model } = this;\n let self = this;\n let modelIsNew = model.get('isNew');\n if (this.beforeSave) {\n this.beforeSave();\n }\n\n // An invalid WPS can always be saved, the user is warned about the errors instead of\n // being blocked\n let modelValid = model.validate();\n this.loading.block();\n self._markSaving();\n model\n .save()\n .then((model) => {\n if (modelValid) {\n self._showSaveSuccessMessage();\n } else {\n get(this, 'alertMessage').info(\n this.intl\n .t(\n 'components.model-welding-procedure-specification/edit.save-with-errors.messages.saved-with-errors',\n { wpsNumber: get(model, 'wpsNumber') }\n )\n .toString()\n );\n }\n if (stopEditing) {\n this._stopEditing();\n }\n self._updateTitle();\n if (this._postSave) {\n this._postSave(model, { isNew: modelIsNew });\n }\n if (modelIsNew) {\n get(this, 'instanceCreated')();\n }\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n get(this, 'alertMessage').error(this.intl.t('edit-view.actions.permission-denied'));\n } else {\n if (reason && reason.errors) {\n if (reason.errors[0].code === '23000') {\n let duplicateMessage = this.intl.t('edit-view.actions.unique-violation').toString();\n get(this, 'alertMessage').error(duplicateMessage);\n } else {\n get(this, 'alertMessage').error(\n this.intl\n .t('edit-view.actions.generic-error', {\n name: get(this, 'model.visualLabel'),\n })\n .toString()\n );\n }\n } else {\n get(this, 'alertMessage').error(\n this.intl.t('edit-view.actions.error', { name: get(this, 'titleValue') }).toString()\n );\n }\n }\n })\n .finally(() => {\n self._finishSaving();\n this.loading.unblock();\n });\n }\n\n @action\n editModel() {\n if (get(this, 'showLoading')) {\n get(this, 'loading').block();\n }\n if (this.beforeEditModel) {\n this.beforeEditModel();\n }\n set(this, 'isUserEditing', true);\n if (get(this, 'showLoading')) {\n later(\n this,\n () => {\n get(this, 'loading').unblock();\n },\n 600\n );\n }\n }\n\n @action\n confirmDeleteModel() {\n this.toggleProperty('isShowingModal');\n }\n\n @action\n toggleModal() {\n this.toggleProperty('isShowingModal');\n }\n\n @action\n cancelEditModel() {\n if (get(this, 'showLoading')) {\n get(this, 'loading').block();\n }\n let model = get(this, 'model');\n model.rollbackAttributes();\n set(this, 'isUserEditing', false);\n this.postCancelEditModel();\n if (get(this, 'showLoading')) {\n later(\n this,\n () => {\n get(this, 'loading').unblock();\n },\n 1000\n );\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { oneWay, and } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { later } from '@ember/runloop';\nimport { set, get, action, computed } from '@ember/object';\nimport { isPermissionDenied } from 'weldnote/utils/json-api-errors';\nimport EVENTS from 'weldnote/utils/analytics-events';\n\n@classic\nexport default class BaseEdit extends Component {\n @service\n intl;\n\n @service\n store;\n\n @service\n analytics;\n\n @service\n alertMessage;\n\n @service\n loading;\n\n showLoading = true;\n\n isUserEditing = false;\n\n @computed('isUserEditing')\n get isEditing() {\n return this.isUserEditing;\n }\n\n title = '';\n\n createAction = null;\n\n isComponentSaving = false;\n\n @and('model.isSaving', 'isComponentSaving')\n isModelSaving;\n\n @computed('model.isNew', 'model.visualLabel')\n get titleValue() {\n if (this.get('model.isNew')) {\n let modelLabel = this.intl.t(`model.${this.get('model.metadata.modelName')}.model-name`);\n return this.intl.t('edit-view.new-item', { name: modelLabel });\n }\n return this.get('model.visualLabel');\n }\n\n @oneWay('model.hasDirtyAttributes')\n isDirty;\n\n @computed('isDirty')\n get subtitle() {\n let isDirty = get(this, 'isDirty');\n let changedAttributes = get(this, 'model').changedAttributes();\n // Something's odd, changedAttributes returns empty, but hasDirtyAttributes returns true?\n if (isDirty && Object.keys(changedAttributes).length > 0) {\n return '*';\n } else {\n return '';\n }\n }\n\n getActionLabel(title) {\n return this.intl.t(title, { name: get(this, 'model.visualLabel') });\n }\n\n getModelLabel(label) {\n return this.intl.t(`model.${get(this, 'model.metadata.modelName')}.${label}`);\n }\n\n init() {\n super.init(...arguments);\n set(this, 'title', get(this, 'titleValue'));\n }\n\n _markSaving() {\n set(this, 'isComponentSaving', true);\n }\n\n _finishSaving() {\n set(this, 'isComponentSaving', false);\n }\n\n _showSaveSuccessMessage() {\n let translation = this.getActionLabel('edit-view.actions.saved');\n this.alertMessage.success(translation);\n }\n\n _updateTitle() {\n let newTitle = this.titleValue;\n set(this, 'title', newTitle);\n }\n\n _stopEditing() {\n set(this, 'isUserEditing', false);\n }\n\n postCancelEditModel() {\n /* Hook to override */\n }\n\n // The breadcrumb for a given model\n @computed('model')\n get breadcrumbs() {\n return [\n {\n route: this.listRoute,\n label: this.getModelLabel('model-plural'),\n },\n {\n label: this.titleValue,\n },\n ];\n }\n\n @action\n deleteModel() {\n let { model, alertMessage, loading, intl } = this;\n let deleteInfo = {\n id: model.get('id'),\n type: model.get('metadata.modelName'),\n };\n let translation = this.getActionLabel('edit-view.actions.deleted');\n loading.block();\n model.deleteRecord();\n model\n .save()\n .then(() => {\n alertMessage.success(translation);\n if (this.postDelete) {\n this.postDelete(deleteInfo);\n }\n this.deleteInstance();\n })\n .catch((reason) => {\n // https://github.com/emberjs/data/pull/3859\n // It appears that I need to upgrade to ember data 2.2 to have this issue fixed\n model.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n if (reason && reason.errors) {\n if (reason.errors[0].code === '23503') {\n let foreignKeyMessage = intl.t('edit-view.actions.foreign-key-error', {\n name: this.get('model.visualLabel'),\n });\n alertMessage.error(foreignKeyMessage);\n set(this, 'isShowingModal', false);\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.generic-delete-error', {\n name: this.get('model.visualLabel'),\n })\n );\n }\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.generic-delete-error', {\n name: this.get('model.visualLabel'),\n })\n );\n }\n }\n })\n .finally(() => {\n loading.unblock();\n this.toggleProperty('isShowingModal');\n });\n }\n\n @action\n saveModel(stopEditing = false) {\n let { model, loading, alertMessage, intl } = this;\n let modelIsNew = model.get('isNew');\n if (this.beforeSave) {\n this.beforeSave();\n }\n\n if (model.validate()) {\n loading.block();\n this._markSaving();\n model\n .save()\n .then((model) => {\n this._showSaveSuccessMessage();\n if (stopEditing) {\n this._stopEditing();\n }\n this._updateTitle();\n if (this._postSave) {\n this._postSave(model, { isNew: modelIsNew });\n }\n if (modelIsNew) {\n get(this, 'instanceCreated')();\n }\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n if (reason && reason.errors) {\n if (reason.errors[0].code === '23000') {\n let duplicateMessage = intl.t('edit-view.actions.unique-violation');\n if (this.customDuplicateMessage) {\n let customError = this.customDuplicateMessage();\n let errors = get(model, 'errors');\n errors.add(customError.attribute, customError.message);\n duplicateMessage = customError.message;\n }\n alertMessage.error(duplicateMessage);\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.generic-error', {\n name: get(this, 'model.visualLabel'),\n })\n );\n }\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.error', { name: get(this, 'titleValue') })\n );\n }\n }\n })\n .finally(() => {\n this._finishSaving();\n loading.unblock();\n });\n } else {\n if (this.validationFailed) {\n this.validationFailed(this.model);\n let errors = [];\n get(this, 'model.errors').forEach((error) => {\n errors.pushObject(error);\n });\n this.analytics.trackEvent(EVENTS.VALIDATION_FAILED, {\n id: get(this, 'model.id'),\n type: get(this, 'model.metadata.modelName'),\n errors,\n });\n }\n alertMessage.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n editModel() {\n if (this.showLoading) {\n this.loading.block();\n }\n if (this.beforeEditModel) {\n this.beforeEditModel();\n }\n set(this, 'isUserEditing', true);\n if (this.showLoading) {\n later(\n this,\n () => {\n this.loading.unblock();\n },\n 600\n );\n }\n }\n\n @action\n confirmDeleteModel() {\n this.toggleProperty('isShowingModal');\n }\n\n @action\n toggleModal() {\n this.toggleProperty('isShowingModal');\n }\n\n @action\n cancelEditModel() {\n if (this.showLoading) {\n this.loading.block();\n }\n this.model.rollbackAttributes();\n set(this, 'isUserEditing', false);\n this.postCancelEditModel();\n if (this.showLoading) {\n later(\n this,\n () => {\n this.loading.unblock();\n },\n 1000\n );\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n \\n {{#if (has-value @baseMaterial.id)}}\\n {{concat\\n @baseMaterial.specification.specification\\n \\\" \\\"\\n @baseMaterial.grade.grade\\n \\\" \\\"\\n @baseMaterial.materialGroup.visualLabel\\n }}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n
\\n \\n {{#if (has-value @baseMaterial.id)}}\\n {{format-base-material material=@baseMaterial}}\\n {{else}}\\n {{t\\n \\\"components.base-material-chooser.messages.placeholder\\\"\\n }}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n {{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

{{format-base-material\\n material=@baseMaterial\\n }}

\\n
\\n {{/if}}\\n\\n {{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.base-material-chooser.close-btn\\\"}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.searchTask.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#each this.materialSearch as |material index|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.base-material-chooser.specification\\\"\\n }}{{t\\n \\\"components.base-material-chooser.grade\\\"\\n }}{{t\\n \\\"components.base-material-chooser.group\\\"\\n }}
\\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n \\n {{t \\\"components.base-material-chooser.loading-results\\\"}}\\n
{{material.specification.specification}}{{material.grade.grade}}{{material.materialGroup.visualLabel}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.base-material-chooser.no-results\\\"}}\\n {{#if this.canCreateNew}}\\n :\\n {{t\\n \\\"components.base-material-chooser.add-new\\\"\\n }}?\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.totalCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.isShowingCreate}}\\n \\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n \\n {{#if (has-value @baseMaterial.id)}}\\n {{concat\\n @baseMaterial.specification.specification\\n \\\" \\\"\\n @baseMaterial.grade.grade\\n \\\" \\\"\\n @baseMaterial.materialGroup.visualLabel\\n }}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n
\\n \\n {{#if (has-value @baseMaterial.id)}}\\n {{format-base-material material=@baseMaterial}}\\n {{else}}\\n {{t\\n \\\"components.base-material-chooser.messages.placeholder\\\"\\n }}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n {{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

{{format-base-material\\n material=@baseMaterial\\n }}

\\n
\\n {{/if}}\\n\\n {{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.base-material-chooser.close-btn\\\"}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.searchTask.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#each this.materialSearch as |material index|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.base-material-chooser.specification\\\"\\n }}{{t\\n \\\"components.base-material-chooser.grade\\\"\\n }}{{t\\n \\\"components.base-material-chooser.group\\\"\\n }}
\\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n \\n {{t \\\"components.base-material-chooser.loading-results\\\"}}\\n
{{material.specification.specification}}{{material.grade.grade}}{{material.materialGroup.visualLabel}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.base-material-chooser.no-results\\\"}}\\n {{#if this.canCreateNew}}\\n :\\n {{t\\n \\\"components.base-material-chooser.add-new\\\"\\n }}?\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.totalCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.isShowingCreate}}\\n \\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/base-material-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/base-material-chooser.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action, get } from '@ember/object';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout } from 'ember-concurrency';\n\nconst DEBOUNCE_MS = 300;\n\nexport default class BaseMaterialChooser extends Component {\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service\n analytics;\n\n @service('alertMessage')\n alert;\n\n @tracked\n currentPage = 1;\n\n @tracked\n totalCount = 0;\n\n pageSize = 10;\n\n @tracked\n isShowingSearch = false;\n\n // Properties to store the search queries for the various parts of\n // the base material\n @tracked\n baseMaterialSpecification = '';\n\n @tracked\n baseMaterialGrade = '';\n\n @tracked\n baseMaterialGroup = '';\n\n @tracked\n isShowingCreate = false;\n\n @tracked\n materialSearch = null;\n\n @tracked\n isSearchingForNullGroup = false;\n\n get canCreateNew() {\n return this.args.canCreateNew ?? false;\n }\n\n get renderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get hasSearchValues() {\n return (\n !isEmpty(this.baseMaterialSpecification) ||\n !isEmpty(this.baseMaterialGrade) ||\n !isEmpty(this.baseMaterialGroup)\n );\n }\n\n get noSearchResults() {\n let { materialSearch } = this;\n return (\n this.searchTask.lastSuccessful &&\n materialSearch &&\n materialSearch.length === 0 &&\n this.hasSearchValues\n );\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get industryCodeId() {\n if (this.args.industryCode) {\n return this.args.industryCode.id;\n }\n return null;\n }\n\n @action\n searchForNullGroup() {\n this.isSearchingForNullGroup = !this.isSearchingForNullGroup;\n this.searchTask.perform();\n }\n\n @task({ restartable: true })\n *searchTask(page = 1) {\n yield timeout(DEBOUNCE_MS);\n\n let baseMaterialGroupStandard = this.args.groupStandard ? this.args.groupStandard.id : '';\n let baseMaterialGroupWelderStandard = this.args.groupWelderStandard\n ? this.args.groupWelderStandard.id\n : '';\n let query = {\n baseMaterialSpecification: this.baseMaterialSpecification,\n baseMaterialGrade: this.baseMaterialGrade,\n // The backend interprets 'N/A' as a filter for materials without an assigned group\n baseMaterialGroup: this.isSearchingForNullGroup ? 'N/A' : this.baseMaterialGroup,\n pageSize: this.pageSize,\n baseMaterialGroupStandard,\n baseMaterialGroupWelderStandard,\n page,\n };\n // If we pass Group Standard or a Welder Standard, means we want to search\n // for a specific standard and not the\n if (isEmpty(this.args.groupStandard) && isEmpty(this.args.groupWelderStandard)) {\n query.industryCode = this.industryCodeId;\n }\n\n try {\n let baseMaterials = yield this.data.searchBaseMaterialsWithQuery(query);\n this.materialSearch = baseMaterials;\n this.totalCount = baseMaterials.meta.records;\n } catch (e) {\n console.error(e);\n }\n }\n\n hideSearch() {\n this.isShowingSearch = false;\n this.baseMaterialSpecification = '';\n this.baseMaterialGrade = '';\n this.baseMaterialGroup = '';\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n this.searchTask.perform();\n }\n\n @action\n cancel() {\n this.hideSearch();\n }\n\n @action\n chooseMaterial(material) {\n this.hideSearch();\n this.args.baseMaterialChosen(material);\n this.analytics.trackEvent(EVENTS.SELECT, {\n type: 'base-material',\n specification: get(material, 'specification.specification'),\n grade: get(material, 'grade.grade'),\n group: get(material, 'materialGroup.groupName'),\n });\n }\n\n @action\n updateSpecification(value) {\n this.baseMaterialSpecification = value;\n this.searchTask.perform();\n }\n\n @action\n updateGrade(value) {\n this.baseMaterialGrade = value;\n this.searchTask.perform();\n }\n\n @action\n updateGroup(value) {\n this.baseMaterialGroup = value;\n this.searchTask.perform();\n }\n\n @action\n executeSearch() {\n this.searchTask.perform();\n }\n\n @action\n reloadData(page) {\n this.searchTask.perform(page);\n }\n\n @action\n openCreateNew() {\n this.isShowingCreate = true;\n }\n\n @action\n handleBaseMaterialCreated(savedMaterial) {\n this.args.baseMaterialChosen(savedMaterial);\n this.isShowingCreate = false;\n this.hideSearch();\n }\n\n @action\n searchGroup(term) {\n let industryCode = get(this.args, 'industryCode.id');\n return this.data.findBaseMaterialGroup(\n term,\n industryCode,\n this.args.groupStandard,\n this.args.groupWelderStandard\n );\n }\n\n @action\n closeWindow() {\n this.isShowingCreate = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n {{#if this.saveTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.base-material-chooser/creator.create-material-btn\\\"}}\\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n {{#if this.saveTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.base-material-chooser/creator.create-material-btn\\\"}}\\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/base-material-chooser/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/base-material-chooser/creator.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action, get, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout, dropTask } from 'ember-concurrency';\nimport { isStandardAWSD15 } from 'weldnote/utils/standards';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport type IntlService from 'ember-intl/services/intl';\nimport type Store from '@ember-data/store';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\n\nconst DEBOUNCE_MS = 300;\n\ninterface CreatorArgs {\n industryCode?: any;\n searchValues?: { specification?: string; grade?: string; group?: string };\n groupStandard?: any;\n groupWelderStandard?: any;\n onSave: (savedMaterial: any) => void;\n onCancel: () => void;\n wrapperClass?: string;\n overlayClass?: string;\n}\n\nexport default class Creator extends Component {\n @service('weldnoteData') declare data: WeldnoteDataService;\n @service declare intl: IntlService;\n @service declare store: Store;\n @service declare alertMessage: AlertMessageService;\n\n @tracked specificationsSearched: any = null;\n @tracked gradesSearched: any = null;\n @tracked specificationOptions: any[] = [];\n @tracked gradeOptions: any[] = [];\n @tracked groupOptions: any[] = [];\n @tracked isUnlistedMaterial = false;\n\n /**\n * Local mutable form model. The W-model child components (WModelLovWithCreate,\n * WPowerModelLov) require a mutable object to read values from via\n * `get(model, attribute)` and display errors from `model.errors.{attribute}`.\n *\n * This replaces the old `@newMaterial` arg — the Creator now owns its form state.\n */\n _formModel: any;\n\n /**\n * Local copies of search values. The `@searchValues` arg is often created via\n * a `{{hash}}` helper which produces an immutable object in Ember 4.4+.\n */\n @tracked activeSpecificationSearch: string | null = null;\n @tracked activeGradeSearch: string | null = null;\n @tracked activeGroupSearch: string | null = null;\n\n get showMaterialGroupSearch() {\n return !this.isUnlistedMaterial;\n }\n\n constructor(owner: unknown, args: CreatorArgs) {\n super(owner, args);\n\n this._formModel = {\n industryCode: this.args.industryCode,\n errors: {},\n metadata: { modelName: 'base-material' },\n };\n\n if (!isEmpty(this.args.searchValues?.specification)) {\n let specification = this.args.searchValues!.specification!;\n this.activeSpecificationSearch = specification;\n this.fetchBaseMaterialSpecifications.perform(specification);\n }\n if (!isEmpty(this.args.searchValues?.grade)) {\n let grade = this.args.searchValues!.grade!;\n this.activeGradeSearch = grade;\n this.fetchBaseMaterialGrades.perform(grade);\n }\n if (!isEmpty(this.args.searchValues?.group)) {\n let group = this.args.searchValues!.group!;\n this.activeGroupSearch = group;\n this.fetchBaseMaterialGroups.perform(group);\n }\n }\n\n // ── Validation ────────────────────────────────────────────\n\n validateNewMaterial(): boolean {\n let material = this._formModel;\n let valid = true;\n let { intl } = this;\n set(material, 'errors', {});\n\n let requiredFieldMessage = intl.t('edit-view.attributes.required');\n\n if (isEmpty(material.specification)) {\n set(material, 'errors.specification', [\n { message: requiredFieldMessage, attribute: 'specification' },\n ]);\n valid = false;\n }\n if (isEmpty(material.grade)) {\n set(material, 'errors.grade', [{ message: requiredFieldMessage, attribute: 'grade' }]);\n valid = false;\n }\n if (isEmpty(material.materialGroup) && !this.isUnlistedMaterial) {\n set(material, 'errors.materialGroup', [\n { message: requiredFieldMessage, attribute: 'materialGroup' },\n ]);\n valid = false;\n }\n\n if (!valid) {\n this.alertMessage.error(intl.t('edit-view.actions.validation-failed'));\n }\n\n return valid;\n }\n\n // ── Search tasks ──────────────────────────────────────────\n\n searchSpecification = task({ restartable: true }, async (term: string) => {\n await timeout(DEBOUNCE_MS);\n let data = await this.data.findBaseMaterialSpecification(term);\n this.specificationsSearched = data;\n return data;\n });\n\n searchGrade = task({ restartable: true }, async (term: string) => {\n await timeout(DEBOUNCE_MS);\n let data = await this.data.findBaseMaterialGrade(term);\n this.gradesSearched = data;\n return data;\n });\n\n searchGroup = task({ restartable: true }, async (term: string) => {\n await timeout(DEBOUNCE_MS);\n if (this.args.groupStandard) {\n return await this.data.findBaseMaterialGroup(\n term,\n get(this.args.groupStandard, 'code.id'),\n this.args.groupStandard,\n null\n );\n } else if (this.args.groupWelderStandard) {\n return await this.data.findBaseMaterialGroup(\n term,\n get(this.args.groupWelderStandard, 'code.id'),\n null,\n this.args.groupWelderStandard\n );\n } else {\n let industryCode = this._formModel?.industryCode?.id ?? null;\n return await this.data.findBaseMaterialGroup(term, industryCode);\n }\n });\n\n fetchBaseMaterialSpecifications = task({ restartable: true }, async (term: string) => {\n if (isEmpty(term)) return [];\n let specifications = await this.searchSpecification.perform(term);\n if (specifications.length === 1) {\n set(this._formModel, 'specification', specifications[0]);\n }\n this.specificationOptions = specifications;\n specifications.forEach((spec: any) => {\n if (spec.specification === term) {\n set(this._formModel, 'specification', spec);\n }\n });\n return this.specificationOptions;\n });\n\n fetchBaseMaterialGrades = task({ restartable: true }, async (term: string) => {\n if (isEmpty(term)) return [];\n let grades = await this.searchGrade.perform(term);\n if (grades.length === 1) {\n set(this._formModel, 'grade', grades[0]);\n }\n this.gradeOptions = grades;\n grades.forEach((grade: any) => {\n if (grade.grade === term) {\n set(this._formModel, 'grade', grade);\n }\n });\n return this.gradeOptions;\n });\n\n fetchBaseMaterialGroups = task({ restartable: true }, async (term: string) => {\n if (isEmpty(term)) return [];\n let groups = await this.searchGroup.perform(term);\n if (groups.length === 1) {\n set(this._formModel, 'materialGroup', groups.firstObject);\n }\n this.groupOptions = groups;\n groups.forEach((group: any) => {\n if (group.groupName === term || group.groupNumber === term) {\n set(this._formModel, 'materialGroup', group);\n }\n });\n return this.groupOptions;\n });\n\n // ── Save task (full lifecycle) ────────────────────────────\n\n saveTask = dropTask(async () => {\n if (!this.validateNewMaterial()) return;\n\n let { _formModel: material } = this;\n\n // Handle unlisted material: auto-assign N/A group\n if (this.isUnlistedMaterial && isEmpty(material.materialGroup)) {\n let groups;\n if (\n isStandardAWSD15(this.args.groupStandard) ||\n isStandardAWSD15(this.args.groupWelderStandard)\n ) {\n groups = await this.searchGroup.perform('U AWS D1.5');\n } else {\n groups = await this.searchGroup.perform('N/A');\n }\n\n if (groups.length === 1) {\n set(material, 'materialGroup', groups.firstObject);\n } else {\n groups.forEach((e: any) => {\n if (\n isStandardAWSD15(this.args.groupStandard) ||\n isStandardAWSD15(this.args.groupWelderStandard)\n ) {\n if (e.groupName === 'U AWS D1.5') {\n set(material, 'materialGroup', e);\n }\n } else {\n if (e.groupName === 'N/A' && isEmpty(e.groupNumber)) {\n set(material, 'materialGroup', e);\n }\n }\n });\n }\n }\n\n let { specification, grade } = material;\n\n try {\n // Save new spec/grade records if they were just created\n if (get(specification, 'isNew')) {\n specification = await specification.save();\n }\n if (get(grade, 'isNew')) {\n grade = await grade.save();\n }\n\n let newRecord = this.store.createRecord('base-material');\n newRecord.set('specification', specification);\n newRecord.set('grade', grade);\n newRecord.set('materialGroup', material.materialGroup);\n\n let industryCode = material.industryCode;\n if (isEmpty(industryCode)) {\n newRecord.set('industryCode', get(material, 'materialGroup.code'));\n } else {\n newRecord.set('industryCode', industryCode);\n }\n\n let saved = await newRecord.save();\n this.args.onSave(saved);\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('components.base-material-chooser.error.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('components.base-material-chooser.error.generic')\n );\n }\n }\n });\n\n // ── Cancel (cleanup new records) ──────────────────────────\n\n @action cancel() {\n let material = this._formModel;\n if (material) {\n if (get(material, 'specification.isNew')) {\n this.store.unloadRecord(material.specification);\n }\n if (get(material, 'grade.isNew')) {\n this.store.unloadRecord(material.grade);\n }\n }\n this.args.onCancel();\n }\n\n // ── Field actions ─────────────────────────────────────────\n\n @action suggestOption(term: string) {\n return this.intl.t('generic.actions.add-something', { option: term });\n }\n\n @action setSpecification(spec: any) {\n set(this._formModel, 'specification', spec);\n this.specificationsSearched = null;\n this.specificationOptions = [];\n this.activeSpecificationSearch = null;\n }\n\n @action setGrade(grade: any) {\n set(this._formModel, 'grade', grade);\n this.gradesSearched = null;\n this.gradeOptions = [];\n this.activeGradeSearch = null;\n }\n\n @action setGroup(group: any) {\n set(this._formModel, 'materialGroup', group);\n this.groupOptions = [];\n this.activeGroupSearch = null;\n }\n\n @action createSpecification(term: string) {\n let specification = this.store.createRecord('base-material-specification');\n set(specification, 'specification', term);\n set(this._formModel, 'specification', specification);\n }\n\n @action createGrade(term: string) {\n let grade = this.store.createRecord('base-material-grade');\n set(grade, 'grade', term);\n set(this._formModel, 'grade', grade);\n }\n\n @action showWhenCreateSpec() {\n let specs = this.specificationsSearched;\n if (specs != null) {\n if (specs.length === 0) return true;\n }\n return false;\n }\n\n @action showWhenCreateGrade() {\n let specs = this.gradesSearched;\n if (specs != null) {\n if (specs.length === 0) return true;\n }\n return false;\n }\n\n @action openFindSpecification(publicAPI: any) {\n if (!isEmpty(this.activeSpecificationSearch)) {\n publicAPI.actions.search(this.activeSpecificationSearch);\n }\n }\n\n @action openFindGrade(publicAPI: any) {\n if (!isEmpty(this.activeGradeSearch)) {\n publicAPI.actions.search(this.activeGradeSearch);\n }\n }\n\n @action openFindGroup(publicAPI: any) {\n if (!isEmpty(this.activeGroupSearch)) {\n publicAPI.actions.search(this.activeGroupSearch);\n }\n }\n\n @action setUnlistedMaterial(value: boolean) {\n if (value) {\n set(this._formModel, 'materialGroup', null);\n }\n this.isUnlistedMaterial = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{t \\\"components.billing-notice.account-locked\\\"}}\\n Please contact support\\n
\", {\"contents\":\"
\\n {{t \\\"components.billing-notice.account-locked\\\"}}\\n Please contact support\\n
\",\"moduleName\":\"weldnote/components/billing-notice.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/billing-notice.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{yield}}\", {\"contents\":\"{{yield}}\",\"moduleName\":\"weldnote/components/blank-template.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/blank-template.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport Component from '@ember/component';\n\n@classic\n@tagName('')\nexport default class BlankTemplate extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{!\\n Breadcrumb navigation component for settings pages.\\n \\n Displays a hierarchical navigation path: Home > Settings > [Category] > [Breadcrumbs]\\n \\n The component handles:\\n - Link to home page\\n - Link to settings overview with the appropriate category filter\\n - Dynamic breadcrumb trail based on the current location\\n - Visual separation with chevron icons\\n - Active state styling for the last breadcrumb item\\n \\n Arguments:\\n @param {string} category - The settings category for the Settings link query parameter\\n @param {Array} breadcrumbs - Array of breadcrumb objects with 'label' and 'route' properties\\n}}\\n
    \\n
  1. \\n \\n {{t \\\"components.breadcrumb-settings.home-link\\\"}}\\n \\n
  2. \\n
  3. \\n \\n
  4. \\n \\n \\n {{t \\\"components.breadcrumb-settings.settings-link\\\"}}\\n \\n \\n
  5. \\n \\n
  6. \\n {{#each @breadcrumbs as |breadcrumb|}}\\n {{#if (eq @breadcrumbs.lastObject breadcrumb)}}\\n {{breadcrumb.label}}\\n {{else}}\\n
  7. \\n \\n {{breadcrumb.label}}\\n \\n
  8. \\n {{#if (not-eq @breadcrumbs.lastObject breadcrumb)}}\\n
  9. \\n \\n
  10. \\n {{/if}}\\n {{/if}}\\n {{/each}}\\n
\", {\"contents\":\"{{!\\n Breadcrumb navigation component for settings pages.\\n \\n Displays a hierarchical navigation path: Home > Settings > [Category] > [Breadcrumbs]\\n \\n The component handles:\\n - Link to home page\\n - Link to settings overview with the appropriate category filter\\n - Dynamic breadcrumb trail based on the current location\\n - Visual separation with chevron icons\\n - Active state styling for the last breadcrumb item\\n \\n Arguments:\\n @param {string} category - The settings category for the Settings link query parameter\\n @param {Array} breadcrumbs - Array of breadcrumb objects with 'label' and 'route' properties\\n}}\\n
    \\n
  1. \\n \\n {{t \\\"components.breadcrumb-settings.home-link\\\"}}\\n \\n
  2. \\n
  3. \\n \\n
  4. \\n \\n \\n {{t \\\"components.breadcrumb-settings.settings-link\\\"}}\\n \\n \\n
  5. \\n \\n
  6. \\n {{#each @breadcrumbs as |breadcrumb|}}\\n {{#if (eq @breadcrumbs.lastObject breadcrumb)}}\\n {{breadcrumb.label}}\\n {{else}}\\n
  7. \\n \\n {{breadcrumb.label}}\\n \\n
  8. \\n {{#if (not-eq @breadcrumbs.lastObject breadcrumb)}}\\n
  9. \\n \\n
  10. \\n {{/if}}\\n {{/if}}\\n {{/each}}\\n
\",\"moduleName\":\"weldnote/components/bread-crumb-settings.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/bread-crumb-settings.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
    \\n
  1. \\n {{t \\\"components.breadcrumb.home-link\\\"}}\\n
  2. \\n
  3. \\n \\n
  4. \\n
  5. \\n \\n {{@previousRouteLabel}}\\n \\n
  6. \\n
  7. \\n \\n
  8. \\n
  9. \\n {{#if @isNew}}\\n {{t \\\"edit-view.breadcrumb-new\\\"}}\\n {{else}}\\n {{#if (has-value @itemLabel)}}\\n {{@itemLabel}}\\n {{else}}\\n {{t \\\"edit-view.breadcrumb-edit\\\"}}\\n {{/if}}\\n {{/if}}\\n
  10. \\n
\", {\"contents\":\"
    \\n
  1. \\n {{t \\\"components.breadcrumb.home-link\\\"}}\\n
  2. \\n
  3. \\n \\n
  4. \\n
  5. \\n \\n {{@previousRouteLabel}}\\n \\n
  6. \\n
  7. \\n \\n
  8. \\n
  9. \\n {{#if @isNew}}\\n {{t \\\"edit-view.breadcrumb-new\\\"}}\\n {{else}}\\n {{#if (has-value @itemLabel)}}\\n {{@itemLabel}}\\n {{else}}\\n {{t \\\"edit-view.breadcrumb-edit\\\"}}\\n {{/if}}\\n {{/if}}\\n
  10. \\n
\",\"moduleName\":\"weldnote/components/bread-crumb.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/bread-crumb.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n {{@pqr.certificateNumber}}\\n {{t \\\"generic.welding.pqr\\\"}}\\n ({{@pqr.standard}})\\n
\\n
\\n \\n {{array-join @pqr.weldingProcesses separator=\\\" + \\\"}}\\n \\n {{#if (has-value @pqr.weldType.weldType)}}\\n {{@pqr.weldType.weldType}}\\n {{#if (has-value @pqr.productType)}}\\n \\n -\\n {{@pqr.productType.productTypeDesignation}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (has-value @pqr.baseMaterial1All.id)}}\\n \\n {{@pqr.baseMaterial1All.specification}}\\n {{@pqr.baseMaterial1All.grade}}\\n \\n -\\n {{@pqr.baseMaterial1All.group}}\\n \\n \\n {{/if}}\\n {{#if (has-value @pqr.baseMaterial2All.id)}}\\n {{#if (not-eq @pqr.baseMaterial1All.id @pqr.baseMaterial2All.id)}}\\n \\n {{@pqr.baseMaterial2All.specification}}\\n {{@pqr.baseMaterial2All.grade}}\\n \\n -\\n {{@pqr.baseMaterial2All.group}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value @pqr.totalThickness)}}\\n {{format-decimal @pqr.totalThickness convertToFraction=true}}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.thickness\\\"}}\\n {{/if}}\\n {{#if (has-value @pqr.diameter)}}\\n {{format-decimal @pqr.diameter convertToFraction=true}}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.diameter-no-unit\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\", {\"contents\":\"
\\n \\n
\\n {{@pqr.certificateNumber}}\\n {{t \\\"generic.welding.pqr\\\"}}\\n ({{@pqr.standard}})\\n
\\n
\\n \\n {{array-join @pqr.weldingProcesses separator=\\\" + \\\"}}\\n \\n {{#if (has-value @pqr.weldType.weldType)}}\\n {{@pqr.weldType.weldType}}\\n {{#if (has-value @pqr.productType)}}\\n \\n -\\n {{@pqr.productType.productTypeDesignation}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (has-value @pqr.baseMaterial1All.id)}}\\n \\n {{@pqr.baseMaterial1All.specification}}\\n {{@pqr.baseMaterial1All.grade}}\\n \\n -\\n {{@pqr.baseMaterial1All.group}}\\n \\n \\n {{/if}}\\n {{#if (has-value @pqr.baseMaterial2All.id)}}\\n {{#if (not-eq @pqr.baseMaterial1All.id @pqr.baseMaterial2All.id)}}\\n \\n {{@pqr.baseMaterial2All.specification}}\\n {{@pqr.baseMaterial2All.grade}}\\n \\n -\\n {{@pqr.baseMaterial2All.group}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value @pqr.totalThickness)}}\\n {{format-decimal @pqr.totalThickness convertToFraction=true}}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.thickness\\\"}}\\n {{/if}}\\n {{#if (has-value @pqr.diameter)}}\\n {{format-decimal @pqr.diameter convertToFraction=true}}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.diameter-no-unit\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\",\"moduleName\":\"weldnote/components/card-pqr.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/card-pqr.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n {{@certificate.certificateNumber}}\\n {{t \\\"generic.welding.welder-certificate\\\"}}\\n ({{@certificate.standard}})\\n
\\n
\\n \\n {{array-join @certificate.weldingProcesses separator=\\\" + \\\"}}\\n \\n {{#if (has-value @certificate.weldType.weldType)}}\\n {{@certificate.weldType.weldType}}\\n {{#if (has-value @certificate.productType)}}\\n \\n -\\n {{@certificate.productType.productTypeDesignation}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (has-value @certificate.baseMaterial1All.id)}}\\n \\n {{@certificate.baseMaterial1All.specification}}\\n {{@certificate.baseMaterial1All.grade}}\\n \\n -\\n {{@certificate.baseMaterial1All.group}}\\n \\n \\n {{/if}}\\n {{#if (has-value @certificate.baseMaterial2All.id)}}\\n {{#if (not-eq @certificate.baseMaterial1All.id @certificate.baseMaterial2All.id)}}\\n \\n {{@certificate.baseMaterial2All.specification}}\\n {{@certificate.baseMaterial2All.grade}}\\n \\n -\\n {{@certificate.baseMaterial2All.group}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value @certificate.totalThickness)}}\\n {{format-decimal\\n @certificate.totalThickness\\n convertToFraction=true\\n }}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.thickness\\\"}}\\n {{/if}}\\n {{#if (has-value @certificate.diameter)}}\\n {{format-decimal @certificate.diameter convertToFraction=true}}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.diameter-no-unit\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\", {\"contents\":\"
\\n \\n
\\n {{@certificate.certificateNumber}}\\n {{t \\\"generic.welding.welder-certificate\\\"}}\\n ({{@certificate.standard}})\\n
\\n
\\n \\n {{array-join @certificate.weldingProcesses separator=\\\" + \\\"}}\\n \\n {{#if (has-value @certificate.weldType.weldType)}}\\n {{@certificate.weldType.weldType}}\\n {{#if (has-value @certificate.productType)}}\\n \\n -\\n {{@certificate.productType.productTypeDesignation}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (has-value @certificate.baseMaterial1All.id)}}\\n \\n {{@certificate.baseMaterial1All.specification}}\\n {{@certificate.baseMaterial1All.grade}}\\n \\n -\\n {{@certificate.baseMaterial1All.group}}\\n \\n \\n {{/if}}\\n {{#if (has-value @certificate.baseMaterial2All.id)}}\\n {{#if (not-eq @certificate.baseMaterial1All.id @certificate.baseMaterial2All.id)}}\\n \\n {{@certificate.baseMaterial2All.specification}}\\n {{@certificate.baseMaterial2All.grade}}\\n \\n -\\n {{@certificate.baseMaterial2All.group}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value @certificate.totalThickness)}}\\n {{format-decimal\\n @certificate.totalThickness\\n convertToFraction=true\\n }}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.thickness\\\"}}\\n {{/if}}\\n {{#if (has-value @certificate.diameter)}}\\n {{format-decimal @certificate.diameter convertToFraction=true}}\\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.diameter-no-unit\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\",\"moduleName\":\"weldnote/components/card-welder-certificate.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/card-welder-certificate.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n
{{@wps.wpsNumber}}\\n {{t \\\"generic.welding.wps\\\"}}\\n ({{@wps.standard}})\\n
\\n
\\n \\n {{array-join @wps.weldingProcesses separator=\\\" + \\\"}}\\n \\n {{#if (has-value @wps.weldType.weldType)}}\\n {{@wps.weldType.weldType}}\\n {{#if (has-value @wps.productType)}}\\n \\n -\\n {{@wps.productType.productTypeDesignation}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (has-value @wps.baseMaterial1All.id)}}\\n \\n {{@wps.baseMaterial1All.specification}}\\n {{@wps.baseMaterial1All.grade}}\\n \\n -\\n {{@wps.baseMaterial1All.group}}\\n \\n \\n {{/if}}\\n {{#if (has-value @wps.baseMaterial2All.id)}}\\n {{#if (not-eq @wps.baseMaterial1All.id @wps.baseMaterial2All.id)}}\\n \\n {{@wps.baseMaterial2All.specification}}\\n {{@wps.baseMaterial2All.grade}}\\n \\n -\\n {{@wps.baseMaterial2All.group}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value @wps.thickness)}}\\n \\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.thickness\\\"}}\\n {{/if}}\\n {{#if (has-value @wps.diameter)}}\\n \\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.diameter-no-unit\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n
\", {\"contents\":\"
\\n \\n
\\n
{{@wps.wpsNumber}}\\n {{t \\\"generic.welding.wps\\\"}}\\n ({{@wps.standard}})\\n
\\n
\\n \\n {{array-join @wps.weldingProcesses separator=\\\" + \\\"}}\\n \\n {{#if (has-value @wps.weldType.weldType)}}\\n {{@wps.weldType.weldType}}\\n {{#if (has-value @wps.productType)}}\\n \\n -\\n {{@wps.productType.productTypeDesignation}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (has-value @wps.baseMaterial1All.id)}}\\n \\n {{@wps.baseMaterial1All.specification}}\\n {{@wps.baseMaterial1All.grade}}\\n \\n -\\n {{@wps.baseMaterial1All.group}}\\n \\n \\n {{/if}}\\n {{#if (has-value @wps.baseMaterial2All.id)}}\\n {{#if (not-eq @wps.baseMaterial1All.id @wps.baseMaterial2All.id)}}\\n \\n {{@wps.baseMaterial2All.specification}}\\n {{@wps.baseMaterial2All.grade}}\\n \\n -\\n {{@wps.baseMaterial2All.group}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value @wps.thickness)}}\\n \\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.thickness\\\"}}\\n {{/if}}\\n {{#if (has-value @wps.diameter)}}\\n \\n ({{@distanceUnit}})\\n {{t \\\"generic.welding.diameter-no-unit\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/card-wps.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/card-wps.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (is-array this.content)}}\\n {{#if this.isSorted}}\\n {{#each this.sortedContent as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.sortedContent.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{else}}\\n {{#each this.content as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.content.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n {{else}}\\n {{get this.content this.attributeReference}}\\n {{/if}}\\n

\\n
\", {\"contents\":\"
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (is-array this.content)}}\\n {{#if this.isSorted}}\\n {{#each this.sortedContent as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.sortedContent.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{else}}\\n {{#each this.content as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.content.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n {{else}}\\n {{get this.content this.attributeReference}}\\n {{/if}}\\n

\\n
\",\"moduleName\":\"weldnote/components/certificate-approval-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/certificate-approval-range.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nexport default class CertificateApprovalRange extends Component {\n get sortDirection() {\n return this.args.sortDirection ?? 'ASC';\n }\n\n get sortBy() {\n return this.args.sortBy;\n }\n\n get isSorted() {\n return !isEmpty(this.sortBy);\n }\n\n get renderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get content() {\n return this.args.content;\n }\n\n get sortedContent() {\n if (!this.isSorted || !Array.isArray(this.content)) {\n return this.content;\n }\n\n const sortProperty = this.sortBy;\n const { sortDirection } = this;\n\n return [...this.content].sort((a, b) => {\n const aProp = get(a, sortProperty);\n const bProp = get(b, sortProperty);\n\n if (aProp > bProp) {\n return sortDirection === 'ASC' ? 1 : -1;\n } else if (aProp < bProp) {\n return sortDirection === 'ASC' ? -1 : 1;\n }\n return 0;\n });\n }\n\n get labelReference() {\n return `model.welder-certificate.${this.args.label}.label`;\n }\n\n get attributeReference() {\n if (isEmpty(this.args.attribute)) {\n return 'visualLabel';\n }\n return this.args.attribute;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @automaticRenewal}}\\n {{#if (gt (get @supportingWelds \\\"length\\\") 0)}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.will-be-renewed\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"}}:\\n \\n {{#each @supportingWelds as |weld|}}\\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n {{/each}}\\n \\n {{else}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.could-not-find\\\"}}\\n \\n {{/if}}\\n{{else}}\\n {{#if (gt (get @supportingWelds \\\"length\\\") 0)}}\\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}.\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n \\n \\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if @automaticRenewal}}\\n {{#if (gt (get @supportingWelds \\\"length\\\") 0)}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.will-be-renewed\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"}}:\\n \\n {{#each @supportingWelds as |weld|}}\\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n {{/each}}\\n \\n {{else}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.could-not-find\\\"}}\\n \\n {{/if}}\\n{{else}}\\n {{#if (gt (get @supportingWelds \\\"length\\\") 0)}}\\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}.\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n \\n \\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/certificate-auto-renewal-status.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/certificate-auto-renewal-status.hbs\"}});\nimport Component from '@glimmer/component';\nimport ENV from 'weldnote/config/environment';\n\nexport default class CertificateAutoRenewalStatus extends Component {\n get esabCloudLink() {\n return ENV.esabCloudLink;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{#if (has-value @message)}}\\n {{@message}}\\n {{else}}\\n {{#if (not (has-block))}}\\n {{t \\\"components.confirm-delete-modal.text\\\"}}\\n {{/if}}\\n {{/if}}\\n {{yield}}\\n \\n \\n \\n \\n {{this.cancelButtonLabelText}}\\n {{this.deleteButtonLabelText}}\\n \\n\", {\"contents\":\"\\n \\n \\n \\n {{#if (has-value @message)}}\\n {{@message}}\\n {{else}}\\n {{#if (not (has-block))}}\\n {{t \\\"components.confirm-delete-modal.text\\\"}}\\n {{/if}}\\n {{/if}}\\n {{yield}}\\n \\n \\n \\n \\n {{this.cancelButtonLabelText}}\\n {{this.deleteButtonLabelText}}\\n \\n\",\"moduleName\":\"weldnote/components/confirm-delete-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/confirm-delete-modal.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class ConfirmDeleteModal extends Component {\n @service\n intl;\n\n get titleText() {\n if (!isEmpty(this.args.title)) {\n return this.args.title;\n }\n return this.intl.t('components.confirm-delete-modal.title');\n }\n\n get deleteButtonLabelText() {\n if (!isEmpty(this.args.deleteButtonLabel)) {\n return this.args.deleteButtonLabel;\n }\n return this.intl.t('components.confirm-delete-modal.delete-btn');\n }\n\n get cancelButtonLabelText() {\n if (!isEmpty(this.args.cancelButtonLabel)) {\n return this.args.cancelButtonLabel;\n }\n return this.intl.t('components.confirm-delete-modal.cancel-btn');\n }\n\n get deleteButtonIcon() {\n return this.args.deleteButtonIcon ?? 'trash';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @actionList as |theLog|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"action-log-list.author-column-title\\\"}}{{t \\\"action-log-list.what-column-title\\\"}}{{t \\\"action-log-list.which-column-title\\\"}}{{t \\\"action-log-list.when-column-title\\\"}}
{{theLog.author}}{{t (concat \\\"components.action-log/display.\\\" theLog.actionId)}}{{format-date date=theLog.actionTime format=@dateFormat}}
{{t \\\"action-log-list.no-actions\\\"}}
\\n
\", {\"contents\":\"
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @actionList as |theLog|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"action-log-list.author-column-title\\\"}}{{t \\\"action-log-list.what-column-title\\\"}}{{t \\\"action-log-list.which-column-title\\\"}}{{t \\\"action-log-list.when-column-title\\\"}}
{{theLog.author}}{{t (concat \\\"components.action-log/display.\\\" theLog.actionId)}}{{format-date date=theLog.actionTime format=@dateFormat}}
{{t \\\"action-log-list.no-actions\\\"}}
\\n
\",\"moduleName\":\"weldnote/components/dashboard/action-log-list.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/dashboard/action-log-list.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t \\\"dashboard.limits-table.total-column\\\"}}
{{t \\\"dashboard.limits-table.pqr-row\\\"}}{{@data.pqr.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.wps-row\\\"}}{{@data.wps.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.pwps-row\\\"}}{{@data.pwps.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.welder-row\\\"}}{{@data.welder.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.certificate-row\\\"}}{{@data.certificate.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t \\\"dashboard.limits-table.total-column\\\"}}
{{t \\\"dashboard.limits-table.pqr-row\\\"}}{{@data.pqr.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.wps-row\\\"}}{{@data.wps.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.pwps-row\\\"}}{{@data.pwps.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.welder-row\\\"}}{{@data.welder.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
{{t \\\"dashboard.limits-table.certificate-row\\\"}}{{@data.certificate.total}}{{t\\n \\\"dashboard.limits-table.list-row-link\\\"\\n }}
\",\"moduleName\":\"weldnote/components/dashboard/limit-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/dashboard/limit-table.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\", {\"contents\":\"
\",\"moduleName\":\"weldnote/components/dashed-separator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/dashed-separator.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n {{t \\\"routes.digitalize-pqr.buttons.upload-pqr\\\"}}\\n \\n\\n\\n\\n

{{t \\\"feature-banner.digitalize-pqr.description\\\"}}

\\n

{{t \\\"feature-banner.digitalize-pqr.how-it-works\\\"}}

\\n
\\n\\n
\\n
\\n {{t \\\"routes.digitalize-pqr.queue.title\\\"}}\\n
\\n
\\n \\n
\\n
\\n\\n{{#if this.isUploadModalOpen}}\\n \\n{{/if}}\", {\"contents\":\"\\n \\n \\n {{t \\\"routes.digitalize-pqr.buttons.upload-pqr\\\"}}\\n \\n\\n\\n\\n

{{t \\\"feature-banner.digitalize-pqr.description\\\"}}

\\n

{{t \\\"feature-banner.digitalize-pqr.how-it-works\\\"}}

\\n
\\n\\n
\\n
\\n {{t \\\"routes.digitalize-pqr.queue.title\\\"}}\\n
\\n
\\n \\n
\\n
\\n\\n{{#if this.isUploadModalOpen}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-pqr/page.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/page.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class DigitalizePqrPageComponent extends Component {\n @tracked isUploadModalOpen = false;\n @tracked queueRefreshSignal = 0;\n\n @action\n openUploadModal() {\n this.isUploadModalOpen = true;\n }\n\n @action\n closeUploadModal() {\n this.isUploadModalOpen = false;\n }\n\n @action\n onUploadComplete() {\n // Close the modal after successful upload\n this.isUploadModalOpen = false;\n // Trigger queue refresh to show newly uploaded items\n this.queueRefreshSignal++;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.review.loading\\\"}}

\\n
\\n {{else if this.loadError}}\\n
\\n \\n {{this.loadError}}\\n
\\n {{else}}\\n {{! ── Header bar with file info and PDF toggle ── }}\\n
\\n
\\n \\n {{@item.fileName}}\\n
\\n \\n \\n {{if\\n this.showDocument\\n (t \\\"routes.digitalize-pqr.review.hide-pdf\\\")\\n (t \\\"routes.digitalize-pqr.review.show-pdf\\\")\\n }}\\n \\n
\\n\\n {{! ── Main content: optional PDF + form ── }}\\n
\\n {{! Document Panel }}\\n {{#if this.showDocument}}\\n \\n {{#if this.pdfUrl}}\\n {{#if this.isImageFile}}\\n {{! Image viewer with zoom controls }}\\n
\\n \\n \\n \\n \\n {{this.imageZoom}}%\\n \\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n {{else}}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.review.pdf-not-available\\\"}}

\\n
\\n {{/if}}\\n \\n {{/if}}\\n\\n {{! Form Panel }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 1: Standard & Unit System & Certificate Number (required)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 2: Test Piece Details\\n ════════════════════════════════════════════════════ }}\\n \\n\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 3: General Information\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 4: Thermal Parameters\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 5: Base Materials\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 6: Consumables / Filler Materials\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 7: Welding Passes (editable table)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 8: Other Details\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 9: Non-Destructive Tests (read-only)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.parsedData}}\\n \\n {{/if}}\\n\\n {{! ════════════════════════════════════════════════════\\n Section 10: Mechanical Tests (read-only)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.parsedData}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n
\\n\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.buttons.reject\\\"}}\\n \\n \\n {{#if this.isApproving}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\\n\\n{{! Inline Create Examining Body Modal }}\\n{{#if this.isCreatingExaminingBody}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasNewExaminingBodyError}}\\n {{this.newExaminingBodyError}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createExaminingBodyTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-examining-body/lookup-create.buttons.create\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Inline Create Welder Modal }}\\n{{#if this.isCreatingWelder}}\\n \\n \\n
\\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.info\\\"}}\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n {{#if this.newWelderError}}\\n
\\n {{this.newWelderError}}\\n
\\n {{/if}}\\n {{#if this.newWelderPolling}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.polling\\\"}}\\n
\\n {{else if this.createPersonTask.isRunning}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.creating\\\"}}\\n
\\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createPersonTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-welder.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Base Material 1 Modal }}\\n{{#if this.isCreatingBaseMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Base Material 2 Modal }}\\n{{#if this.isCreatingBaseMaterial2}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 1 Modal }}\\n{{#if this.isCreatingFillerMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 2 Modal }}\\n{{#if this.isCreatingFillerMaterial2}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 3 Modal }}\\n{{#if this.isCreatingFillerMaterial3}}\\n \\n{{/if}}\\n\\n{{! Quick Create Commercial Designation Modal }}\\n{{#if this.isCreatingCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickCommercialDesignationTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Gas Commercial Designation Modal }}\\n{{#if this.isCreatingGasCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickGasCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Flux Commercial Designation Modal }}\\n{{#if this.isCreatingFluxCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickFluxCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n \\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.review.loading\\\"}}

\\n
\\n {{else if this.loadError}}\\n
\\n \\n {{this.loadError}}\\n
\\n {{else}}\\n {{! ── Header bar with file info and PDF toggle ── }}\\n
\\n
\\n \\n {{@item.fileName}}\\n
\\n \\n \\n {{if\\n this.showDocument\\n (t \\\"routes.digitalize-pqr.review.hide-pdf\\\")\\n (t \\\"routes.digitalize-pqr.review.show-pdf\\\")\\n }}\\n \\n
\\n\\n {{! ── Main content: optional PDF + form ── }}\\n
\\n {{! Document Panel }}\\n {{#if this.showDocument}}\\n \\n {{#if this.pdfUrl}}\\n {{#if this.isImageFile}}\\n {{! Image viewer with zoom controls }}\\n
\\n \\n \\n \\n \\n {{this.imageZoom}}%\\n \\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n {{else}}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.review.pdf-not-available\\\"}}

\\n
\\n {{/if}}\\n \\n {{/if}}\\n\\n {{! Form Panel }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 1: Standard & Unit System & Certificate Number (required)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 2: Test Piece Details\\n ════════════════════════════════════════════════════ }}\\n \\n\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 3: General Information\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 4: Thermal Parameters\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 5: Base Materials\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 6: Consumables / Filler Materials\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 7: Welding Passes (editable table)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 8: Other Details\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 9: Non-Destructive Tests (read-only)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.parsedData}}\\n \\n {{/if}}\\n\\n {{! ════════════════════════════════════════════════════\\n Section 10: Mechanical Tests (read-only)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.parsedData}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n
\\n\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.buttons.reject\\\"}}\\n \\n \\n {{#if this.isApproving}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\\n\\n{{! Inline Create Examining Body Modal }}\\n{{#if this.isCreatingExaminingBody}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasNewExaminingBodyError}}\\n {{this.newExaminingBodyError}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createExaminingBodyTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-examining-body/lookup-create.buttons.create\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Inline Create Welder Modal }}\\n{{#if this.isCreatingWelder}}\\n \\n \\n
\\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.info\\\"}}\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n {{#if this.newWelderError}}\\n
\\n {{this.newWelderError}}\\n
\\n {{/if}}\\n {{#if this.newWelderPolling}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.polling\\\"}}\\n
\\n {{else if this.createPersonTask.isRunning}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.creating\\\"}}\\n
\\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createPersonTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-welder.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Base Material 1 Modal }}\\n{{#if this.isCreatingBaseMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Base Material 2 Modal }}\\n{{#if this.isCreatingBaseMaterial2}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 1 Modal }}\\n{{#if this.isCreatingFillerMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 2 Modal }}\\n{{#if this.isCreatingFillerMaterial2}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 3 Modal }}\\n{{#if this.isCreatingFillerMaterial3}}\\n \\n{{/if}}\\n\\n{{! Quick Create Commercial Designation Modal }}\\n{{#if this.isCreatingCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickCommercialDesignationTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Gas Commercial Designation Modal }}\\n{{#if this.isCreatingGasCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickGasCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Flux Commercial Designation Modal }}\\n{{#if this.isCreatingFluxCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickFluxCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-pqr/pqr-review-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/pqr-review-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action, get } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty, isBlank } from '@ember/utils';\nimport { task, dropTask } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\nimport EditablePass from 'weldnote/components/digitalize-pqr/types/editable-pass';\nimport type IntlService from 'ember-intl/services/intl';\nimport type Store from '@ember-data/store';\nimport type PqrParseQueueService from 'weldnote/services/pqr-parse-queue';\nimport type { QueueItem } from 'weldnote/services/pqr-parse-queue';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport type WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport type UnitSystemService from 'weldnote/services/unit-system';\nimport type UserSessionService from 'weldnote/services/user-session';\nimport type OrgApiPersonnelService from 'weldnote/services/org-api-personnel';\nimport Welder from 'weldnote/models/welder';\nimport DS from 'ember-data';\nimport _AjaxService from 'weldnote/services/ajax';\nimport type Staff from 'weldnote/models/staff';\nimport FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport GasCommercialDesignation from 'weldnote/models/gas-commercial-designation';\nimport FluxCommercialDesignation from 'weldnote/models/flux-commercial-designation';\nimport { ListMappedValue, PQRParseApiResponse, ShieldingInfo } from 'weldnote/components/digitalize-pqr/types/pqr-api-response-types';\nimport PQRFormState from './types/pqr-form-state';\nimport { MappingKey, PQRValidationResult } from \"./types/pqr-api-response-types\";\nimport { getId } from 'weldnote/utils/digitalize/shared-helpers';\nimport {\n resolveEntityByMapping,\n resolveUnitSystem,\n resolveProductType,\n resolveMecanizationByName,\n resolveEmissionDate,\n resolveCompany,\n resolveExaminingBody,\n} from 'weldnote/utils/digitalize/entity-resolvers';\nimport {\n getFilteredWeldTypes,\n getFilteredWeldingProcesses,\n getFilteredWeldingPositions,\n getFilteredArcTransferModes,\n} from 'weldnote/utils/digitalize/filtered-options';\nimport {\n parsedCommercialDesignationHint,\n parsedShieldingCDHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\nimport {\n unloadFillerMaterialRelated,\n} from 'weldnote/utils/digitalize/quick-create-tasks';\n\nconst SHIELDING_OPTIONS = Constants.SHIELDING_OPTIONS;\n\ninterface PqrReviewModalArgs {\n item: QueueItem;\n onClose: () => void;\n // Returns a promise when the caller performs the approval itself, so the\n // modal can keep its buttons disabled until it settles.\n onApprove: (item: QueueItem, editedData: Record) => void | Promise;\n onReject: (item: QueueItem) => void;\n}\n\nexport default class DigitalizePqrPqrReviewModalComponent extends Component {\n @service('pqr-parse-queue') declare pqrParseQueue: PqrParseQueueService;\n @service('weldnote-data') declare data: WeldnoteDataService;\n @service('weldcloud-notes-data') declare notesData: WeldcloudNotesData;\n @service declare intl: IntlService;\n @service declare store: Store;\n @service declare userSession: UserSessionService;\n @service declare alertMessage: AlertMessageService;\n @service declare unitSystem: UnitSystemService;\n @service declare ajax: _AjaxService;\n @service('org-api-personnel') declare orgApiPersonnel: OrgApiPersonnelService;\n\n // ── UI state ──────────────────────────────────────────────\n @tracked isLoading = true;\n @tracked showDocument = false;\n @tracked loadError: string | null = null;\n @tracked pdfUploadPath: string | null = null;\n @tracked approveAttempted = false;\n @tracked imageZoom = 100;\n\n // ── Raw data from API ─────────────────────────────────────\n @tracked parsedData: PQRParseApiResponse | null = null;\n @tracked validation: PQRValidationResult | null = null;\n\n // ── Form state (all user-editable data) ───────────────────\n @tracked form = new PQRFormState();\n\n // ── Quick Create: Examining Body ──────────────────────────\n @tracked isCreatingExaminingBody = false;\n @tracked newExaminingBodyName = '';\n @tracked newExaminingBodyError: string | null = null;\n\n // ── Quick Create: Welder ──────────────────────────────────\n @tracked isCreatingWelder = false;\n @tracked newWelderFirstName = '';\n @tracked newWelderLastName = '';\n @tracked newWelderStamp = '';\n @tracked newWelderError: string | null = null;\n @tracked newWelderPolling = false;\n\n // ── Parsed value hints (set once during _populateFields) ──\n @tracked _parsedCompanyValue = '';\n @tracked _parsedExaminingBodyValue = '';\n @tracked _parsedEmissionDateValue = '';\n @tracked _parsedWeldersValue = '';\n @tracked _parsedWrittenByValue = '';\n @tracked _parsedWpsUsedValue = '';\n @tracked _parsedSpecialRequirementsValue = '';\n @tracked _parsedPreparationMethodsValue = '';\n\n // ── Quick Create: Base Material ───────────────────────────\n @tracked isCreatingBaseMaterial1 = false;\n @tracked isCreatingBaseMaterial2 = false;\n\n // ── Quick Create: Filler Material ─────────────────────────\n @tracked isCreatingFillerMaterial1 = false;\n @tracked isCreatingFillerMaterial2 = false;\n @tracked isCreatingFillerMaterial3 = false;\n @tracked _newFillerMaterial1: Record | null = null;\n @tracked _newFillerMaterial2: Record | null = null;\n @tracked _newFillerMaterial3: Record | null = null;\n\n // ── Quick Create: Commercial Designation ──────────────────\n @tracked isCreatingCommercialDesignation = false;\n @tracked _quickCreateCommercialDesignationIndex: number = 0;\n @tracked _quickCreateCommercialDesignationName = '';\n\n // ── Quick Create: Gas Commercial Designation ──────────────\n @tracked isCreatingGasCommercialDesignation = false;\n @tracked _quickCreateGasCDShieldingKey = '';\n @tracked _quickCreateGasCDName = '';\n\n // ── Quick Create: Flux Commercial Designation ─────────────\n @tracked isCreatingFluxCommercialDesignation = false;\n @tracked _quickCreateFluxCDShieldingKey = '';\n @tracked _quickCreateFluxCDName = '';\n\n // ── Lifecycle ─────────────────────────────────────────────\n\n constructor(owner: unknown, args: PqrReviewModalArgs) {\n super(owner, args);\n this.loadData.perform();\n }\n\n // ── Getters: options filtered by standard ─────────────────\n\n /**\n * The industry code ID derived from the selected standard.\n * Used to filter dependent option lists (weld types, processes, positions, etc.).\n * @returns {string|null}\n */\n get industryCodeId(){\n return this.form.selectedStandard?.industryCodeId ?? null;\n }\n\n /**\n * The industry code record derived from the selected standard.\n * Passed to quick-create forms for base/filler materials.\n * @returns {Object|null}\n */\n get industryCode() {\n return this.form.selectedStandard?.get?.('code') ?? this.form.selectedStandard?.code ?? null;\n }\n\n /**\n * Warning message when the selected standard's industry code differs\n * from the one originally assigned to the queue item (e.g. user uploaded\n * as ISO but selects an ASME standard).\n */\n get industryCodeMismatchWarning(): string | null {\n const parsedCode = this.industryCode?.code;\n const selectedCode = this.args.item?.industryCode;\n if (!selectedCode || !parsedCode) return null;\n if (selectedCode === parsedCode) return null;\n return this.intl.t('routes.digitalize-pqr.review.industry-code-mismatch', {\n selectedCode,\n parsedCode,\n });\n }\n\n get standardOptions() {\n return this.notesData.pqrStandards;\n }\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n get weldTypeOptions() {\n return getFilteredWeldTypes(this.notesData.weldTypes, this.industryCodeId);\n }\n\n get productTypeOptions() {\n return this.data.productTypeOptions;\n }\n\n get weldingDetailOptions() {\n return this.notesData.weldingDetails;\n }\n\n get weldingProcessOptions() {\n return getFilteredWeldingProcesses(this.notesData.weldingProcesses, this.industryCodeId);\n }\n\n get weldingPositionOptions() {\n return getFilteredWeldingPositions(this.notesData.weldingPositions, this.industryCodeId);\n }\n\n get processMecanizationOptions() {\n return this.notesData.processMecanizations;\n }\n\n get arcTransferModeOptions() {\n return getFilteredArcTransferModes(this.notesData.arcTransferModes, this.industryCodeId);\n }\n\n get typeCurrentPolarityOptions() {\n return this.notesData.typeCurrentPolarities;\n }\n\n get companyOptions() {\n return this.notesData.companies;\n }\n\n get examiningBodyOptions() {\n return this.notesData.examiningBodies;\n }\n\n get staffOptions() {\n return this.data.staffOptions;\n }\n\n get specialRequirementOptions() {\n return this.data.specialRequirementOptions;\n }\n\n get preparationMethodOptions() {\n return this.notesData.preparationMethods;\n }\n\n get shieldingTypeOptions() {\n return this.data.shieldingTypeOptions;\n }\n\n get selectedShielding1Type() {\n return this.shieldingTypeOptions?.find((o) => o.key === this.form.shielding1Type) || null;\n }\n\n get selectedShielding2Type() {\n return this.shieldingTypeOptions?.find((o) => o.key === this.form.shielding2Type) || null;\n }\n\n get selectedShielding3Type() {\n return this.shieldingTypeOptions?.find((o) => o.key === this.form.shielding3Type) || null;\n }\n\n get selectedBackingType() {\n return this.shieldingTypeOptions?.find((o) => o.key === this.form.backingType) || null;\n }\n\n\n // ── Document URL & type detection ────────────────────────\n\n private static IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp', '.tiff', '.tif'];\n\n get isImageFile(): boolean {\n const fileName = this.args.item.fileName || '';\n const ext = fileName.slice(fileName.lastIndexOf('.')).toLowerCase();\n return DigitalizePqrPqrReviewModalComponent.IMAGE_EXTENSIONS.includes(ext);\n }\n\n get pdfUrl() {\n if (!this.pdfUploadPath) {\n return null;\n }\n return this.pdfUploadPath;\n }\n\n get imageZoomStyle(): string {\n return `min-width: ${this.imageZoom}%; width: ${this.imageZoom}%; height: auto;`;\n }\n\n @action\n zoomIn() {\n this.imageZoom = Math.min(this.imageZoom + 25, 300);\n }\n\n @action\n zoomOut() {\n this.imageZoom = Math.max(this.imageZoom - 25, 25);\n }\n\n @action\n zoomReset() {\n this.imageZoom = 100;\n }\n\n // ── Data loading ──────────────────────────────────────────\n\n loadData = task(this, { drop: true }, async () => {\n this.isLoading = true;\n this.loadError = null;\n try {\n let result: QueueItem = await this.pqrParseQueue.getQueueItem(this.args.item.id);\n if (result.uploadPdfPath) {\n this.pdfUploadPath = result.uploadPdfPath;\n }\n let parseResult = result.parseResult || result;\n this.parsedData = parseResult.parsedData || null;\n this.validation = (parseResult.validation as PQRValidationResult) || null;\n this._populateFields();\n } catch (error: any) {\n this.loadError = error.message || 'Failed to load data';\n this.alertMessage.error(this.intl.t('routes.digitalize-pqr.review.errors.load-failed'));\n } finally {\n this.isLoading = false;\n }\n });\n\n /**\n * Load a single record from the store. Auto-cancels on component destruction.\n */\n _resolveStoreRecord = task(this, async (modelName: string, entityId: string, setter: (record: any) => void) => {\n try {\n let record = await this.store.findRecord(modelName, entityId);\n setter(record);\n } catch {\n // Entity not found — user picks manually\n }\n });\n\n /**\n * Populate tracked fields from validation mappings (priority) then parsedData (fallback).\n */\n _populateFields() {\n let parsedData = this.parsedData || {};\n let mappings = this.validation?.mappings || {};\n let listMappings = this.validation?.listMappings || {};\n\n // Section 1: General info\n this.form.certificateNumber = parsedData.certificate_name || '';\n let companyResult = resolveCompany(\n mappings, this.companyOptions, parsedData.company,\n this.data.hasOnly1Company, this.data.firstCompany\n );\n this.form.selectedCompany = companyResult.selectedCompany;\n this._parsedCompanyValue = companyResult.parsedValue;\n\n let examBodyResult = resolveExaminingBody(mappings, this.examiningBodyOptions, parsedData.examining_body);\n this.form.selectedExaminingBody = examBodyResult.selectedExaminingBody;\n this._parsedExaminingBodyValue = examBodyResult.parsedValue;\n\n let dateResult = resolveEmissionDate(parsedData.emission_date);\n this.form.emissionDate = dateResult.date;\n this._parsedEmissionDateValue = dateResult.originalValue;\n // Store parsed hints for display\n this._parsedWeldersValue = Array.isArray(parsedData.welders)\n ? parsedData.welders.join(', ')\n : parsedData.welders || '';\n this._parsedWrittenByValue = parsedData.written_by || '';\n this._parsedWpsUsedValue = parsedData.wps_used || '';\n this._parsedSpecialRequirementsValue = parsedData.special_requirements || '';\n // Resolve entities from mappings if available\n this._resolveWelder(parsedData.welders, mappings);\n this._resolveWrittenBy(parsedData.written_by, mappings);\n this._resolveWps(parsedData.wps_used, mappings);\n this._resolveSpecialRequirements(parsedData.special_requirements, mappings);\n this.form.address = parsedData.address || '';\n this.form.testsConductedBy = parsedData.tests_conducted_by || '';\n this.form.notes = parsedData.notes || '';\n this.form.testNotes = parsedData.test_notes || '';\n\n // Section 2: Standard & Unit System (entity lookups)\n this.form.selectedStandard = resolveEntityByMapping('standard', mappings, this.standardOptions);\n this.form.selectedUnitSystem = resolveUnitSystem(this.unitSystemOptions, parsedData.unit_system);\n\n // Section 3: Test Piece Details\n let testPieceDetails = parsedData.test_piece_details || {};\n this.form.selectedWeldType = resolveEntityByMapping('weldType', mappings, this.weldTypeOptions);\n this.form.selectedProductType = resolveProductType(this.productTypeOptions, testPieceDetails.product_type);\n // The backend parser separates the welding details in 3 parts, so here we merge then all together\n let layers = this._resolveWeldingDetails(mappings, 'weldingDetailLayers');\n let side = this._resolveWeldingDetails(mappings, 'weldingDetailSides');\n let consumable = this._resolveWeldingDetails(mappings, 'weldingDetailConsumableInsert');\n let weldingDetailsMerged = [\n ...new Set([...(layers || []), ...(side || []), ...(consumable || [])]),\n ];\n this.form.weldingLayers = weldingDetailsMerged;\n this.form.selectedWeldingProcess1 = resolveEntityByMapping('weldingProcess1', mappings, this.weldingProcessOptions);\n this.form.selectedWeldingProcess2 = resolveEntityByMapping('weldingProcess2', mappings, this.weldingProcessOptions);\n this.form.selectedWeldingProcess3 = resolveEntityByMapping('weldingProcess3', mappings, this.weldingProcessOptions);\n this.form.selectedPosition1 = resolveEntityByMapping('weldingPositions1', mappings, this.weldingPositionOptions);\n this.form.selectedPosition2 = resolveEntityByMapping('weldingPositions2', mappings, this.weldingPositionOptions);\n this.form.selectedPosition3 = resolveEntityByMapping('weldingPositions3', mappings, this.weldingPositionOptions);\n this.form.selectedTransferMode1 = resolveEntityByMapping('transferMode1', mappings, this.arcTransferModeOptions);\n this.form.selectedTransferMode2 = resolveEntityByMapping('transferMode2', mappings, this.arcTransferModeOptions);\n this.form.selectedTransferMode3 = resolveEntityByMapping('transferMode3', mappings, this.arcTransferModeOptions);\n this.form.selectedMecanization1 = resolveEntityByMapping('processMecanization1', mappings, this.processMecanizationOptions);\n this.form.selectedMecanization2 = resolveEntityByMapping('processMecanization2', mappings, this.processMecanizationOptions);\n this.form.selectedMecanization3 = resolveEntityByMapping('processMecanization3', mappings, this.processMecanizationOptions);\n // Fallback: match mechanization by name from parsed data when backend doesn't provide a mapping\n if (!this.form.selectedMecanization1) {\n this.form.selectedMecanization1 = resolveMecanizationByName(this.data.processMecanizationOptions, testPieceDetails.welding_process_mechanization_1);\n }\n if (!this.form.selectedMecanization2) {\n this.form.selectedMecanization2 = resolveMecanizationByName(this.data.processMecanizationOptions, testPieceDetails.welding_process_mechanization_2);\n }\n if (!this.form.selectedMecanization3) {\n this.form.selectedMecanization3 = resolveMecanizationByName(this.data.processMecanizationOptions, testPieceDetails.welding_process_mechanization_3);\n }\n this.form.selectedTypeCurrent1 = resolveEntityByMapping('typeOfCurrent1', mappings, this.typeCurrentPolarityOptions);\n this.form.selectedTypeCurrent2 = resolveEntityByMapping('typeOfCurrent2', mappings, this.typeCurrentPolarityOptions);\n this.form.selectedTypeCurrent3 = resolveEntityByMapping('typeOfCurrent3', mappings, this.typeCurrentPolarityOptions);\n\n // Section 4: Thermal Parameters\n this.form.preheatTemperature = testPieceDetails.pre_heat_details?.temperature ?? null;\n this.form.interpassTemperature = testPieceDetails.interpass_heat_details?.temperature ?? null;\n this.form.postHeatTemperature = testPieceDetails.post_heat_details?.temperature ?? null;\n this.form.postHeatTime = testPieceDetails.post_heat_details?.time ?? null;\n this.form.pwhtTemperature = testPieceDetails.post_weld_heat_treatment_details?.temperature ?? null;\n this.form.pwhtTime = testPieceDetails.post_weld_heat_treatment_details?.time ?? null;\n this.form.pwhtHeatingRate = testPieceDetails.post_weld_heat_treatment_details?.heating_rate ?? null;\n this.form.pwhtCoolingRate = testPieceDetails.post_weld_heat_treatment_details?.cooling_rate ?? null;\n\n // Section 5: Base Materials\n let bm = parsedData.test_piece_base_materials || {};\n this._resolveBaseMaterial('baseMaterial1', mappings, bm.base_material_1);\n this._resolveBaseMaterial('baseMaterial2', mappings, bm.base_material_2);\n this.form.weldedThickness = bm.welded_thickness ?? null;\n\n // Section 6: Consumables\n let cons = parsedData.test_piece_consumables || {};\n this._resolveFillerMaterial(1, cons.filler_material_1, mappings);\n this._resolveFillerMaterial(2, cons.filler_material_2, mappings);\n this._resolveFillerMaterial(3, cons.filler_material_3, mappings);\n this._resolveFillerMaterialCommercialDesignation(1, mappings);\n this._resolveFillerMaterialCommercialDesignation(2, mappings);\n this._resolveFillerMaterialCommercialDesignation(3, mappings);\n this._resolveShielding(1, cons.shielding_1, mappings);\n this._resolveShielding(2, cons.shielding_2, mappings);\n this._resolveShielding(3, cons.shielding_3, mappings);\n this._resolveShieldingBacking(cons.backing, mappings);\n\n // Section 7: Welding Passes\n this.form.passes = (parsedData.passes || []).map((p: any) => this._createEditablePass(p));\n\n // Section 8: Other Details\n let od = parsedData.other_details || {};\n this.form.backGouging = od.back_gouging_details || '';\n this.form.pulsedWelding = od.pulsed_welding_details || '';\n this.form.torchAngleMin = od.torch_angle_min ?? null;\n this.form.torchAngleMax = od.torch_angle_max ?? null;\n this.form.electrodeType1 = od.electrode_type_1 || '';\n this.form.electrodeType2 = od.electrode_type_2 || '';\n this.form.electrodeType3 = od.electrode_type_3 || '';\n this.form.stickOut1 = od.stick_out_1 || '';\n this.form.stickOut2 = od.stick_out_2 || '';\n this.form.stickOut3 = od.stick_out_3 || '';\n this.form.gasNozzleDiameter1 = od.gas_nozzle_diameter_1 ?? null;\n this.form.gasNozzleDiameter2 = od.gas_nozzle_diameter_2 ?? null;\n this.form.gasNozzleDiameter3 = od.gas_nozzle_diameter_3 ?? null;\n this.form.weaving1 = od.weaving_1 || '';\n this.form.weaving2 = od.weaving_2 || '';\n this.form.weaving3 = od.weaving_3 || '';\n this.form.oscillation1 = od.oscillation_1 || '';\n this.form.oscillation2 = od.oscillation_2 || '';\n this.form.oscillation3 = od.oscillation_3 || '';\n this._parsedPreparationMethodsValue = Array.isArray(parsedData.preparation_methods)\n ? parsedData.preparation_methods.join(', ')\n : parsedData.preparation_methods || '';\n this._resolvePreparationMethods(parsedData.preparation_methods, listMappings);\n }\n\n /**\n * Resolve welding detail records (layers, sides, consumable inserts) from\n * backend mappings. Returns an array of matched welding detail options.\n *\n * @param {Object} mappings - The `validation.mappings` hash.\n * @param {string} typeOfDetails - Mapping key: 'weldingDetailLayers', 'weldingDetailSides', or 'weldingDetailConsumableInsert'.\n * @returns {Array} Matched welding detail records, or empty array.\n */\n _resolveWeldingDetails(mappings: PQRValidationResult['mappings'], typeOfDetails: string) {\n let mapping = mappings[typeOfDetails as MappingKey];\n if (mapping && mapping.entityId) {\n let options = this.data.weldingDetailOptions;\n if (options) {\n let found = options.filter((o: any) => {\n let id = o.get ? o.get('id') : o.id;\n return mapping?.entityId == id;\n });\n if (found.length > 0) {\n return found;\n }\n }\n }\n return [];\n }\n\n /**\n * Resolve a base material from backend mappings via an async store lookup,\n * and populate the related thickness/diameter fields from parsed data.\n *\n * @param {string} mappingKey - 'baseMaterial1' or 'baseMaterial2'.\n * @param {Object} mappings - The `validation.mappings` hash.\n * @param {Object} parsedBm - Parsed base material object with `thickness` and `diameter`.\n */\n _resolveBaseMaterial(mappingKey: string, mappings: PQRValidationResult['mappings'], parsedBm: any) {\n let mapping = mappings[mappingKey as MappingKey];\n if (mapping && mapping.entityId) {\n let prop = mappingKey === 'baseMaterial1' ? 'baseMaterial1' : 'baseMaterial2';\n this._resolveStoreRecord.perform('base-material', String(mapping?.entityId), (bm) => {\n this.form[prop] = bm;\n });\n }\n // Set thickness / diameter from parsed data\n if (parsedBm) {\n let suffix = mappingKey === 'baseMaterial1' ? '1' : '2';\n this.form[`baseMaterial${suffix}Thickness`] = parsedBm.thickness ?? null;\n this.form[`baseMaterial${suffix}Diameter`] = parsedBm.diameter ?? null;\n }\n }\n\n /**\n * Resolve a filler material from backend mappings via an async store lookup,\n * and populate the dimensions array from parsed data.\n *\n * @param {number} index - 1, 2, or 3 (root, fill, cap).\n * @param {Object} parsedFm - Parsed filler material object with `dimensions`.\n * @param {Object} mappings - The `validation.mappings` hash.\n */\n _resolveFillerMaterial(index: number, parsedFm: any, mappings: PQRValidationResult['mappings']) {\n let mappingKey = `fillerMaterial${index}`;\n let mapping = mappings[mappingKey as MappingKey];\n if (mapping && mapping.entityId) {\n this._resolveStoreRecord.perform('filler-material', String(mapping?.entityId), (fm) => {\n this.form[`fillerMaterial${index}`] = fm;\n });\n }\n // Set dimensions from parsed data\n if (parsedFm) {\n this.form[`fillerMaterial${index}Dimensions`] = parsedFm.dimensions || [];\n }\n }\n\n /**\n * Resolve a filler material commercial designation from backend mappings\n * via an async store lookup.\n *\n * @param {number} index - 1, 2, or 3 (root, fill, cap).\n * @param {Object} mappings - The `validation.mappings` hash.\n */\n _resolveFillerMaterialCommercialDesignation(index: number, mappings: PQRValidationResult['mappings']) {\n let cdMappingKey = `fillerMaterial${index}CommercialDesignation` as MappingKey;\n let cdMapping = mappings[cdMappingKey];\n if (cdMapping && cdMapping.entityId) {\n this._resolveStoreRecord.perform(\n 'filler-material-commercial-designation',\n String(cdMapping.entityId),\n (cd: FillerMaterialCommercialDesignation) => {\n this.form[`fillerMaterialCommercialDesignation${index}`] = cd;\n }\n );\n }\n }\n\n /**\n * Resolve shielding fields (type, gas entity, mixture, flow rates) from\n * parsed data and backend mappings. Defaults the shielding type to GAS\n * when any shielding data is present.\n *\n * @param {number} index - 1, 2, or 3.\n * @param {Object} parsedShielding - Parsed shielding data from the PDF.\n * @param {Object} mappings - The `validation.mappings` hash.\n */\n _resolveShielding(index: number, parsedShielding: ShieldingInfo | undefined, mappings: PQRValidationResult['mappings']) {\n if (!parsedShielding) {\n return;\n }\n let mappingKey: MappingKey = `shielding${index}` as MappingKey;\n let designation = parsedShielding.designation || parsedShielding.commercial_designation || '';\n this.form[`${mappingKey}Designation`] = designation;\n this.form[`${mappingKey}GasMixture`] = parsedShielding.gas_mixture || '';\n this.form[`${mappingKey}FlowRateMin`] = parsedShielding.flow_rate_min ?? null;\n this.form[`${mappingKey}FlowRateMax`] = parsedShielding.flow_rate_max ?? null;\n // Default to Gas type if any shielding data is present\n if (designation || parsedShielding.gas_mixture || parsedShielding.flow_rate_min != null) {\n this.form[`${mappingKey}Type`] = SHIELDING_OPTIONS.GAS;\n }\n // Resolve mapped gas entity\n let mapping = mappings[mappingKey];\n if (mapping && mapping.entityId && parsedShielding.type === 'gas') {\n this._resolveStoreRecord.perform('gas', String(mapping?.entityId), (gas) => {\n this.form[`${mappingKey}Gas`] = gas;\n });\n }\n\n // Resolve mapped flux entity\n let fluxMapping = mappings[mappingKey];\n if (fluxMapping && fluxMapping.entityId && parsedShielding.type === 'flux') {\n this._resolveStoreRecord.perform('flux', String(fluxMapping.entityId), (flux) => {\n this.form[`${mappingKey}Flux`] = flux;\n });\n }\n\n // Resolve mapped gas commercial designation\n let gasCdKey = `shielding${index}GasCommercialDesignation` as MappingKey;\n let gasCdMapping = mappings[gasCdKey];\n if (gasCdMapping && gasCdMapping.entityId && parsedShielding.type === 'gas') {\n this._resolveStoreRecord.perform('gas-commercial-designation', String(gasCdMapping.entityId), (cd: GasCommercialDesignation) => {\n this.form[`shielding${index}GasCommercialDesignation`] = cd;\n });\n }\n // Resolve mapped flux commercial designation\n let fluxCdKey = `shielding${index}FluxCommercialDesignation` as MappingKey;\n let fluxCdMapping = mappings[fluxCdKey];\n if (fluxCdMapping && fluxCdMapping.entityId && parsedShielding.type === 'flux') {\n this._resolveStoreRecord.perform('flux-commercial-designation', String(fluxCdMapping.entityId), (cd: FluxCommercialDesignation) => {\n this.form[`shielding${index}FluxCommercialDesignation`] = cd;\n });\n }\n }\n\n _resolveShieldingBacking(parsedBacking: any, mappings: PQRValidationResult['mappings']) {\n if (!parsedBacking) return;\n this.form.backingGasMixture = parsedBacking.gas_mixture || '';\n this.form.backingFlowRateMin = parsedBacking.flow_rate_min ?? null;\n this.form.backingFlowRateMax = parsedBacking.flow_rate_max ?? null;\n // Default to Gas type if any backing data is present\n if (this.form.backingGasMixture || parsedBacking.flow_rate_min != null) {\n this.form.backingType = SHIELDING_OPTIONS.GAS;\n }\n // Resolve mapped gas commercial designation\n let gasCdMapping = mappings['backingGasCommercialDesignation'];\n if (gasCdMapping && gasCdMapping.entityId && parsedBacking.type === 'gas') {\n this._resolveStoreRecord.perform('gas-commercial-designation', String(gasCdMapping.entityId), (cd: GasCommercialDesignation) => {\n this.form.backingGasCommercialDesignation = cd;\n });\n }\n // Resolve mapped flux commercial designation\n let fluxCdMapping = mappings['backingFluxCommercialDesignation'];\n if (fluxCdMapping && fluxCdMapping.entityId && parsedBacking.type === 'flux') {\n this._resolveStoreRecord.perform('flux-commercial-designation', String(fluxCdMapping.entityId), (cd: FluxCommercialDesignation) => {\n this.form.backingFluxCommercialDesignation = cd;\n });\n }\n }\n\n _resolveWelder(_parsedWelders: any, mappings: PQRValidationResult['mappings']) {\n let mapping = mappings.welder;\n if (mapping && mapping.entityId) {\n this._resolveStoreRecord.perform('welder', String(mapping?.entityId), (welder) => {\n this.form.selectedWelder = welder;\n });\n }\n }\n\n _resolveWrittenBy(_parsedWrittenBy: any, mappings: PQRValidationResult['mappings']) {\n let mapping = mappings.writtenBy;\n if (mapping && mapping.entityId) {\n let options = this.staffOptions;\n if (options) {\n let found = options.find((o: any) => {\n let id = o.get ? o.get('id') : o.id;\n return String(id) === String(mapping?.entityId);\n });\n if (found) {\n this.form.selectedWrittenBy = found;\n return;\n }\n }\n // Not found in cached options — fetch directly from the store\n this._resolveStoreRecord.perform('staff', String(mapping?.entityId), (staff: Staff) => {\n this.form.selectedWrittenBy = staff;\n });\n }\n }\n\n _resolveWps(_parsedWps: any, mappings: PQRValidationResult['mappings']) {\n let mapping = mappings.wps;\n if (mapping && mapping.entityId) {\n this._resolveStoreRecord.perform(\n 'welding-procedure-specification',\n String(mapping?.entityId),\n (wps) => {\n this.form.selectedWps = wps;\n }\n );\n }\n }\n\n _resolveSpecialRequirements(_parsedSpecialRequirements: any, mappings: PQRValidationResult['mappings']) {\n let mapping = mappings.specialRequirements;\n if (mapping && mapping.entityId && Array.isArray(mapping.entityId)) {\n let options = this.specialRequirementOptions;\n if (options) {\n let found = options.filter((o: any) => {\n let id = o.get ? o.get('id') : o.id;\n return String(mapping?.entityId) == String(id);\n });\n if (found.length > 0) {\n this.form.selectedSpecialRequirements = found;\n }\n }\n }\n }\n\n _resolvePreparationMethods(_parsedPreparationMethods: string[] | undefined, mappings: PQRValidationResult['listMappings']) {\n\n let preparationsMethods = mappings.preparationMethods;\n preparationsMethods?.forEach((mapping: ListMappedValue) => {\n if (mapping && mapping.entityId) {\n let entityId = mapping.entityId;\n let options = this.preparationMethodOptions;\n if (options) {\n let found = options.filter((o: any) => {\n let id = get(o, 'id');\n return String(entityId) === String(id);\n });\n if (found.length > 0) {\n this.form.selectedPreparationMethods.pushObjects(found);\n }\n }\n }\n });\n if (!this.form.selectedPreparationMethods && Array.isArray(_parsedPreparationMethods)) {\n // No mapping resolved — try to match by name from parsed data when backend doesn't provide mappings\n let options = this.preparationMethodOptions;\n if (options) {\n _parsedPreparationMethods.forEach((method: string) => {\n let found = options.filter((o: any) => {\n let methodName = get(o, 'method');\n return String(method) === String(methodName);\n });\n if (found.length > 0) {\n this.form.selectedPreparationMethods.pushObjects(found);\n }\n });\n }\n }\n }\n\n /**\n * Convert a raw parsed pass object into a tracked `EditablePass` instance,\n * resolving entity references (welding process, current type, arc transfer mode)\n * by matching parsed string values against the available options.\n *\n * @param {Object} p - Raw pass data from `parsedData.passes[]`.\n * @returns {EditablePass}\n */\n _createEditablePass(p: any) {\n // Return a tracked-compatible POJO. We use class instances for tracking.\n let pass = new EditablePass(p);\n\n // Resolve welding process entity from parsed string\n if (p.welding_process && this.data.weldingProcessOptions) {\n let parsed = p.welding_process.toLowerCase();\n let match = this.data.weldingProcessOptions.find((o: any) => {\n let designation = o.get ? o.get('shortDesignation') : o.shortDesignation;\n return designation && designation.toLowerCase() === parsed;\n });\n if (match) {\n pass.selectedWeldingProcess = match;\n }\n }\n\n // Resolve current type entity from parsed string\n if (p.current_type && this.data.typeCurrentPolarityOptions) {\n let parsed = p.current_type.toLowerCase();\n let match = this.data.typeCurrentPolarityOptions.find((o: any) => {\n let typeCurrent = o.get ? o.get('typeCurrent') : o.typeCurrent;\n return typeCurrent && typeCurrent.toLowerCase() === parsed;\n });\n if (match) {\n pass.selectedCurrentType = match;\n }\n }\n\n // Resolve arc transfer mode entity from parsed string\n if (p.arc_transfer_mode && this.data.arcTransferModeOptions) {\n let parsed = p.arc_transfer_mode.toLowerCase();\n let match = this.data.arcTransferModeOptions.find((o: any) => {\n let transferMode = o.get ? o.get('transferMode') : o.transferMode;\n return transferMode && transferMode.toLowerCase() === parsed;\n });\n if (match) {\n pass.selectedArcTransferMode = match;\n }\n }\n\n // Auto-assign layer if process matches one of the PQR welding processes\n if (pass.selectedWeldingProcess) {\n const layerInfo = this._resolveLayerForProcess(pass.selectedWeldingProcess);\n if (layerInfo) {\n pass.layer = layerInfo.layer;\n pass.selectedFillerMaterial = layerInfo.filler;\n pass.selectedArcTransferMode = layerInfo.arcTransfer;\n }\n }\n\n return pass;\n }\n\n /**\n * Given a welding process, check if it matches one of the PQR's three welding\n * processes and return the corresponding layer info (ROOT, FILL, or CAP) along\n * with the associated filler material and arc transfer mode.\n */\n _resolveLayerForProcess(process: unknown): {\n layer: { value: string; label: string };\n filler: unknown;\n arcTransfer: unknown;\n } | null {\n if (process === this.form.selectedWeldingProcess1 && this.form.selectedWeldingProcess1) {\n return {\n layer: { value: 'ROOT', label: this.intl.t('routes.digitalize-pqr.review.passes.layer-root') },\n filler: this.form.fillerMaterial1,\n arcTransfer: this.form.selectedTransferMode1,\n };\n }\n if (process === this.form.selectedWeldingProcess2 && this.form.selectedWeldingProcess2) {\n return {\n layer: { value: 'FILL', label: this.intl.t('routes.digitalize-pqr.review.passes.layer-fill') },\n filler: this.form.fillerMaterial2,\n arcTransfer: this.form.selectedTransferMode2,\n };\n }\n if (process === this.form.selectedWeldingProcess3 && this.form.selectedWeldingProcess3) {\n return {\n layer: { value: 'CAP', label: this.intl.t('routes.digitalize-pqr.review.passes.layer-cap') },\n filler: this.form.fillerMaterial3,\n arcTransfer: this.form.selectedTransferMode3,\n };\n }\n return null;\n }\n\n // ── Parsed value hints ────────────────────────────────────\n\n get temperatureLabel() {\n return this.unitSystem.getTemperatureUnit(this.form.selectedUnitSystem?.key ?? '');\n }\n\n get unitLabel() {\n return this.unitSystem.getDistanceUnit(this.form.selectedUnitSystem?.key ?? '');\n }\n\n get travelSpeedLabel() {\n return this.unitSystem.getTravelSpeedUnit(this.form.selectedUnitSystem?.key ?? '');\n }\n\n get wireFeedSpeedLabel() {\n return this.unitSystem.getWireSpeedUnit(this.form.selectedUnitSystem?.key ?? '');\n }\n\n get heatInputLabel() {\n return this.unitSystem.getHeatDistanceUnit(this.form.selectedUnitSystem?.key ?? '');\n }\n\n\n get baseMaterial1SearchValues() {\n let bm = this._parsedBaseMaterialInfo(1);\n return {\n specification: bm?.specification || '',\n grade: bm?.grade || '',\n group: bm?.group || '',\n };\n }\n\n get baseMaterial2SearchValues() {\n let bm = this._parsedBaseMaterialInfo(2);\n return {\n specification: bm?.specification || '',\n grade: bm?.grade || '',\n group: bm?.group || '',\n };\n }\n\n _parsedBaseMaterialInfo(index: number) {\n if (index === 1) {\n return this.parsedData?.test_piece_base_materials?.base_material_1 || null;\n } else if (index === 2) {\n return this.parsedData?.test_piece_base_materials?.base_material_2 || null;\n }\n return null;\n }\n\n _parsedFillerMaterialInfo(index: number) {\n if (index < 1 || index > 3) return null;\n if (index === 1) {\n return this.parsedData?.test_piece_consumables?.filler_material_1 || null;\n } else if (index === 2) {\n return this.parsedData?.test_piece_consumables?.filler_material_2 || null;\n } else if (index === 3) {\n return this.parsedData?.test_piece_consumables?.filler_material_3 || null;\n }\n return null;\n }\n\n _fillerMaterialSearchValues(index: number) {\n let fm = this._parsedFillerMaterialInfo(index);\n return {\n specification: fm?.specification || '',\n classification: fm?.classification || '',\n group: fm?.group || '',\n };\n }\n\n get fillerMaterial1SearchValues() {\n return this._fillerMaterialSearchValues(1);\n }\n get fillerMaterial2SearchValues() {\n return this._fillerMaterialSearchValues(2);\n }\n get fillerMaterial3SearchValues() {\n return this._fillerMaterialSearchValues(3);\n }\n\n\n\n _getShieldingInfo(index: number): ShieldingInfo | null | undefined {\n if (index === 1) return this.parsedData?.test_piece_consumables?.shielding_1;\n if (index === 2) return this.parsedData?.test_piece_consumables?.shielding_2;\n if (index === 3) return this.parsedData?.test_piece_consumables?.shielding_3;\n return null;\n }\n\n // ── Required field validation ─────────────────────────────\n\n /**\n * List of human-readable labels for required fields that are still empty.\n * Used both for the validation message and to gate the approve action.\n * @returns {string[]}\n */\n get missingRequiredFields() {\n let missing = [];\n if (!this.form.certificateNumber?.trim()) {\n missing.push(this.intl.t('routes.digitalize-pqr.review.fields.certificate-number'));\n }\n if (!this.form.selectedStandard) {\n missing.push(this.intl.t('routes.digitalize-pqr.review.fields.standard'));\n }\n if (!this.form.selectedUnitSystem) {\n missing.push(this.intl.t('routes.digitalize-pqr.review.fields.unit-system'));\n }\n return missing;\n }\n\n get missingRequiredFieldsMessage() {\n return this.missingRequiredFields.join(', ');\n }\n\n get canApprove() {\n return this.missingRequiredFields.length === 0;\n }\n\n /**\n * Per-field error objects for required fields, keyed by field name.\n * Only populated after the user has attempted to approve (to avoid premature errors).\n * @returns {Object.>}\n */\n get requiredFieldErrors() {\n if (!this.approveAttempted) return {};\n let errors: Record = {};\n let msg = { message: this.intl.t('generic.error.field-required').toString() };\n if (!this.form.certificateNumber?.trim()) {\n errors.certificateNumber = [msg];\n }\n if (!this.form.selectedStandard) {\n errors.standard = [msg];\n }\n if (!this.form.selectedUnitSystem) {\n errors.unitSystem = [msg];\n }\n return errors;\n }\n\n // ── Validation warnings / errors ──────────────────────────\n\n get validationWarnings() {\n return this.validation?.warnings || [];\n }\n\n get validationErrors() {\n return this.validation?.errors || [];\n }\n\n get unmappedValues() {\n let uv = this.validation?.unmappedValues;\n if (!uv) return [];\n return Object.entries(uv).map(([field, value]) => ({ field, value }));\n }\n\n // ── Actions ───────────────────────────────────────────────\n\n @action\n toggleDocument() {\n this.showDocument = !this.showDocument;\n }\n\n @action\n updateField(field: string, value: any) {\n this.form[field] = value;\n\n // Reset industry-code-dependent fields when standard changes\n if (field === 'selectedStandard') {\n this.form.selectedWeldType = null;\n this.form.selectedWeldingProcess1 = null;\n this.form.selectedWeldingProcess2 = null;\n this.form.selectedWeldingProcess3 = null;\n this.form.selectedPosition1 = null;\n this.form.selectedPosition2 = null;\n this.form.selectedPosition3 = null;\n this.form.selectedTransferMode1 = null;\n this.form.selectedTransferMode2 = null;\n this.form.selectedTransferMode3 = null;\n }\n\n // Clear shielding sub-fields when shielding type changes\n if (['shielding1Type', 'shielding2Type', 'shielding3Type', 'backingType'].includes(field)) {\n const prefix = field.replace('Type', '');\n this._clearShieldingFields(prefix);\n }\n\n // Auto-fill filler material when commercial designation is selected\n const cdMatch = field.match(/^fillerMaterialCommercialDesignation(\\d)$/);\n if (cdMatch && value && !this.form[`fillerMaterial${cdMatch[1]}`]) {\n const fm = value.fillerMaterial;\n if (fm && !isEmpty(fm.id)) {\n this.form[`fillerMaterial${cdMatch[1]}`] = fm;\n }\n }\n\n // Auto-fill gas when gas commercial designation is selected\n if (field.endsWith('GasCommercialDesignation') && value) {\n const prefix = field.replace('GasCommercialDesignation', '');\n if (!this.form[`${prefix}Gas`]) {\n this.form[`${prefix}Gas`] = value.gas;\n }\n }\n\n // Auto-fill flux when flux commercial designation is selected\n if (field.endsWith('FluxCommercialDesignation') && value) {\n const prefix = field.replace('FluxCommercialDesignation', '');\n if (!this.form[`${prefix}Flux`]) {\n this.form[`${prefix}Flux`] = value.flux;\n }\n }\n }\n\n get hasNewExaminingBodyError() {\n return !isEmpty(this.newExaminingBodyError);\n }\n\n @action showCreateExaminingBody(text: string) {\n this.isCreatingExaminingBody = true;\n this.newExaminingBodyName = text || '';\n this.newExaminingBodyError = null;\n }\n\n @action createExaminingBodyOnEnter(select: any, e: KeyboardEvent) {\n if (e.key === 'Enter' && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.isCreatingExaminingBody = true;\n this.newExaminingBodyName = select.searchText;\n this.newExaminingBodyError = null;\n }\n }\n\n @action closeCreateExaminingBody() {\n this.isCreatingExaminingBody = false;\n this.newExaminingBodyName = '';\n this.newExaminingBodyError = null;\n }\n\n @action setNewExaminingBodyName(name: string) {\n this.newExaminingBodyName = name;\n }\n\n createExaminingBodyTask = dropTask(async () => {\n let { newExaminingBodyName, store, intl, data, alertMessage } = this;\n\n if (isEmpty(newExaminingBodyName)) {\n this.newExaminingBodyError = intl.t(\n 'components.model-examining-body/lookup-create.messages.errors.required'\n );\n alertMessage.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.required')\n );\n return;\n }\n\n let newExaminingBody = store.createRecord('examining-body');\n newExaminingBody.name = newExaminingBodyName;\n\n try {\n let savedExaminingBody = await newExaminingBody.save();\n this.form.selectedExaminingBody = savedExaminingBody;\n data.bustExaminingBodyCache();\n alertMessage.success(\n intl.t('components.model-examining-body/lookup-create.messages.success')\n );\n this.isCreatingExaminingBody = false;\n this.newExaminingBodyName = '';\n this.newExaminingBodyError = null;\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alertMessage.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.duplicate')\n );\n } else if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('generic.error.permission-denied'));\n } else {\n alertMessage.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.generic')\n );\n }\n }\n });\n\n @action showCreateWelder() {\n this.isCreatingWelder = true;\n let welders = this.parsedData?.welders;\n // Try to pre-fill first and last name if parsed welders value is present in \"Last, First\" format\n if (welders && Array.isArray(welders)) {\n if (welders.length > 0) {\n let [firstName, lastName] = welders[0].split(',').map((s: string) => s.trim());\n this.newWelderFirstName = firstName || '';\n this.newWelderLastName = lastName || '';\n }\n } else if (welders && typeof welders === 'string') {\n let theWelders: string = welders\n let [firstName, lastName] = theWelders.split(',').map((s: string) => s.trim());\n this.newWelderFirstName = firstName || '';\n this.newWelderLastName = lastName || '';\n }\n this.newWelderStamp = '';\n this.newWelderError = null;\n this.newWelderPolling = false;\n }\n\n @action closeCreateWelder() {\n this.isCreatingWelder = false;\n this.newWelderFirstName = '';\n this.newWelderLastName = '';\n this.newWelderStamp = '';\n this.newWelderError = null;\n this.newWelderPolling = false;\n }\n\n @action setNewWelderFirstName(val: string) {\n this.newWelderFirstName = val;\n }\n\n @action setNewWelderLastName(val: string) {\n this.newWelderLastName = val;\n }\n\n @action setNewWelderStamp(val: string) {\n this.newWelderStamp = val;\n }\n\n createPersonTask = dropTask(async () => {\n let { newWelderFirstName, newWelderLastName, newWelderStamp, intl, alertMessage } = this;\n\n if (isEmpty(newWelderFirstName) || isEmpty(newWelderLastName) || isEmpty(newWelderStamp)) {\n this.newWelderError = intl.t('routes.digitalize-pqr.review.create-welder.errors.required');\n alertMessage.error(intl.t('routes.digitalize-pqr.review.create-welder.errors.required'));\n return;\n }\n\n let organizationId = this.userSession.account?.organizationId;\n if (!organizationId) {\n this.newWelderError = intl.t(\n 'routes.digitalize-pqr.review.create-welder.errors.no-organization'\n );\n alertMessage.error(\n intl.t('routes.digitalize-pqr.review.create-welder.errors.no-organization')\n );\n return;\n }\n\n this.newWelderError = null;\n\n try {\n let response = await this.orgApiPersonnel.createPersonnel({\n firstName: newWelderFirstName,\n secondName: newWelderLastName,\n displayName: `${newWelderFirstName} ${newWelderLastName}`,\n stamp: newWelderStamp,\n ownerId: organizationId,\n });\n\n let orgApiId = response.id;\n\n // Poll for the welder to be synced back to our system\n this.newWelderPolling = true;\n let maxAttempts = 15;\n let welder = null;\n\n for (let i = 0; i < maxAttempts; i++) {\n await new Promise((resolve) => setTimeout(resolve, 1000));\n let welders: DS.AdapterPopulatedRecordArray = await this.store.query('welder', {\n 'filter[remote-id]': orgApiId,\n });\n let weldersTotal = welders.toArray().length;\n if (weldersTotal > 0) {\n welder = welders.firstObject;\n break;\n }\n }\n\n this.newWelderPolling = false;\n\n if (welder) {\n this.form.selectedWelder = welder;\n alertMessage.success(intl.t('routes.digitalize-pqr.review.create-welder.success'));\n } else {\n alertMessage.info(intl.t('routes.digitalize-pqr.review.create-welder.sync-timeout'));\n }\n\n this.isCreatingWelder = false;\n this.newWelderFirstName = '';\n this.newWelderLastName = '';\n this.newWelderStamp = '';\n this.newWelderError = null;\n } catch (error) {\n this.newWelderPolling = false;\n let status = error?.status;\n if (String(status) === '409') {\n this.newWelderError = intl.t('routes.digitalize-pqr.review.create-welder.errors.duplicate');\n alertMessage.error(intl.t('routes.digitalize-pqr.review.create-welder.errors.duplicate'));\n } else if (String(status) === '503') {\n this.newWelderError = intl.t(\n 'routes.digitalize-pqr.review.create-welder.errors.service-unavailable'\n );\n alertMessage.error(\n intl.t('routes.digitalize-pqr.review.create-welder.errors.service-unavailable')\n );\n } else {\n this.newWelderError = intl.t('routes.digitalize-pqr.review.create-welder.errors.generic');\n alertMessage.error(intl.t('routes.digitalize-pqr.review.create-welder.errors.generic'));\n }\n }\n });\n\n\n @action setPreparationMethods(methods: any) {\n this.form.selectedPreparationMethods = methods;\n }\n\n\n // ── Quick Create Base Material actions ──────────────────\n\n @action openQuickCreateBaseMaterial(index: number) {\n if (index === 1) {\n this.isCreatingBaseMaterial1 = true;\n } else {\n this.isCreatingBaseMaterial2 = true;\n }\n }\n\n @action cancelQuickCreateBaseMaterial(index: number) {\n if (index === 1) {\n this.isCreatingBaseMaterial1 = false;\n } else {\n this.isCreatingBaseMaterial2 = false;\n }\n }\n\n @action handleBaseMaterialCreated(index: number, savedMaterial: any) {\n if (index === 1) {\n this.form.baseMaterial1 = savedMaterial;\n this.isCreatingBaseMaterial1 = false;\n } else {\n this.form.baseMaterial2 = savedMaterial;\n this.isCreatingBaseMaterial2 = false;\n }\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-pqr.review.create-base-material.success')\n );\n }\n\n\n // ── Quick Create Filler Material actions ────────────────\n\n @action openQuickCreateFillerMaterial(index: number) {\n let newMaterial = {\n code: this.industryCode,\n errors: {},\n metadata: { modelName: 'filler-material' },\n };\n if (index === 1) {\n this._newFillerMaterial1 = newMaterial;\n this.isCreatingFillerMaterial1 = true;\n } else if (index === 2) {\n this._newFillerMaterial2 = newMaterial;\n this.isCreatingFillerMaterial2 = true;\n } else {\n this._newFillerMaterial3 = newMaterial;\n this.isCreatingFillerMaterial3 = true;\n }\n }\n\n\n @action cancelQuickCreateFillerMaterial(index: number) {\n if (index === 1) {\n unloadFillerMaterialRelated(this.store,this._newFillerMaterial1);\n this.isCreatingFillerMaterial1 = false;\n this._newFillerMaterial1 = null;\n } else if (index === 2) {\n unloadFillerMaterialRelated(this.store,this._newFillerMaterial2);\n this.isCreatingFillerMaterial2 = false;\n this._newFillerMaterial2 = null;\n } else {\n unloadFillerMaterialRelated(this.store,this._newFillerMaterial3);\n this.isCreatingFillerMaterial3 = false;\n this._newFillerMaterial3 = null;\n }\n }\n\n @action quickCreateFillerMaterial1() {\n this.saveQuickFillerMaterialTask.perform(1);\n }\n @action quickCreateFillerMaterial2() {\n this.saveQuickFillerMaterialTask.perform(2);\n }\n @action quickCreateFillerMaterial3() {\n this.saveQuickFillerMaterialTask.perform(3);\n }\n\n _getFillerMaterialForIndex(index: number) {\n if (index === 1) return this._newFillerMaterial1;\n if (index === 2) return this._newFillerMaterial2;\n return this._newFillerMaterial3;\n }\n\n _getWeldingProcessForIndex(index: number) {\n if (index === 1) return this.form.selectedWeldingProcess1;\n if (index === 2) return this.form.selectedWeldingProcess2;\n return this.form.selectedWeldingProcess3;\n }\n\n _setFillerMaterialResult(index: number, saved: any) {\n if (index === 1) {\n this.form.fillerMaterial1 = saved;\n this.isCreatingFillerMaterial1 = false;\n this._newFillerMaterial1 = null;\n } else if (index === 2) {\n this.form.fillerMaterial2 = saved;\n this.isCreatingFillerMaterial2 = false;\n this._newFillerMaterial2 = null;\n } else {\n this.form.fillerMaterial3 = saved;\n this.isCreatingFillerMaterial3 = false;\n this._newFillerMaterial3 = null;\n }\n }\n\n saveQuickFillerMaterialTask = dropTask(async (index: number) => {\n let material = this._getFillerMaterialForIndex(index); \n if (material == null) {\n return;\n }\n let { specification, classification } = material as any;\n let weldingProcess = this._getWeldingProcessForIndex(index);\n\n try {\n if (specification.get('isNew')) {\n specification = await specification.save();\n }\n if (classification?.get('isNew')) {\n classification = await classification.save();\n }\n\n let newRecord = this.store.createRecord('filler-material');\n newRecord.set('specification', specification);\n newRecord.set('classification', classification);\n newRecord.set('group', material.group);\n\n let code = material.code as any;\n if (isEmpty(code) || isEmpty(code.id)) {\n newRecord.set('code', (material.group as any)?.code);\n } else {\n newRecord.set('code', code);\n }\n\n if (weldingProcess && !isEmpty(weldingProcess.id)) {\n let processes = await newRecord.get('weldingProcesses');\n processes.pushObject(weldingProcess);\n }\n\n let saved = await newRecord.save();\n this._setFillerMaterialResult(index, saved);\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-pqr.review.create-filler-material.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-filler-material.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-filler-material.errors.generic')\n );\n }\n }\n });\n\n\n @action openQuickCreateCommercialDesignation(index: number) {\n let hint = parsedCommercialDesignationHint(this._parsedFillerMaterialInfo(index));\n this._quickCreateCommercialDesignationIndex = index;\n this._quickCreateCommercialDesignationName = hint;\n this.isCreatingCommercialDesignation = true;\n }\n\n @action cancelQuickCreateCommercialDesignation() {\n this.isCreatingCommercialDesignation = false;\n this._quickCreateCommercialDesignationIndex = 0;\n this._quickCreateCommercialDesignationName = '';\n }\n\n @action setQuickCreateCommercialDesignationName(name: string) {\n this._quickCreateCommercialDesignationName = name;\n }\n\n saveQuickCommercialDesignationTask = dropTask(async () => {\n let index = this._quickCreateCommercialDesignationIndex;\n let name = this._quickCreateCommercialDesignationName;\n let fillerMaterial = this.form[`fillerMaterial${index}`];\n\n if (isEmpty(name) || !fillerMaterial) {\n return;\n }\n\n try {\n let designation = this.store.createRecord('filler-material-commercial-designation');\n designation.set('fillerMaterial', fillerMaterial);\n designation.set('commercialDesignation', name);\n let saved = await designation.save();\n\n this.form[`fillerMaterialCommercialDesignation${index}`] = saved;\n this.isCreatingCommercialDesignation = false;\n this._quickCreateCommercialDesignationIndex = 0;\n this._quickCreateCommercialDesignationName = '';\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-pqr.review.create-commercial-designation.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-commercial-designation.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-commercial-designation.errors.generic')\n );\n }\n }\n });\n\n // ── Quick Create Gas Commercial Designation ──────────────\n\n @action openQuickCreateGasCD(shieldingKey: string) {\n let hint =\n shieldingKey === 'backing'\n ? parsedShieldingCDHint(this.parsedData?.test_piece_consumables?.backing)\n : parsedShieldingCDHint(this._getShieldingInfo(parseInt(shieldingKey.slice(-1))));\n this._quickCreateGasCDShieldingKey = shieldingKey;\n this._quickCreateGasCDName = hint;\n this.isCreatingGasCommercialDesignation = true;\n }\n\n @action cancelQuickCreateGasCD() {\n this.isCreatingGasCommercialDesignation = false;\n this._quickCreateGasCDShieldingKey = '';\n this._quickCreateGasCDName = '';\n }\n\n @action setQuickCreateGasCDName(name: string) {\n this._quickCreateGasCDName = name;\n }\n\n saveQuickGasCDTask = dropTask(async () => {\n let key = this._quickCreateGasCDShieldingKey;\n let name = this._quickCreateGasCDName;\n let gas = this.form[`${key}Gas`];\n\n if (isEmpty(name) || !gas) {\n return;\n }\n\n try {\n let designation = this.store.createRecord('gas-commercial-designation');\n designation.set('gas', gas);\n designation.set('commercialDesignation', name);\n let saved = await designation.save();\n\n this.form[`${key}GasCommercialDesignation`] = saved;\n this.isCreatingGasCommercialDesignation = false;\n this._quickCreateGasCDShieldingKey = '';\n this._quickCreateGasCDName = '';\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-pqr.review.create-gas-commercial-designation.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-gas-commercial-designation.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-gas-commercial-designation.errors.generic')\n );\n }\n }\n });\n\n // ── Quick Create Flux Commercial Designation ─────────────\n\n @action openQuickCreateFluxCD(shieldingKey: string) {\n let hint =\n shieldingKey === 'backing'\n ? parsedShieldingCDHint(this.parsedData?.test_piece_consumables?.backing)\n : parsedShieldingCDHint(this._getShieldingInfo(parseInt(shieldingKey.slice(-1))));\n this._quickCreateFluxCDShieldingKey = shieldingKey;\n this._quickCreateFluxCDName = hint;\n this.isCreatingFluxCommercialDesignation = true;\n }\n\n @action cancelQuickCreateFluxCD() {\n this.isCreatingFluxCommercialDesignation = false;\n this._quickCreateFluxCDShieldingKey = '';\n this._quickCreateFluxCDName = '';\n }\n\n @action setQuickCreateFluxCDName(name: string) {\n this._quickCreateFluxCDName = name;\n }\n\n saveQuickFluxCDTask = dropTask(async () => {\n let key = this._quickCreateFluxCDShieldingKey;\n let name = this._quickCreateFluxCDName;\n let flux = this.form[`${key}Flux`];\n\n if (isEmpty(name) || !flux) {\n return;\n }\n\n try {\n let designation = this.store.createRecord('flux-commercial-designation');\n designation.set('flux', flux);\n designation.set('commercialDesignation', name);\n let saved = await designation.save();\n\n this.form[`${key}FluxCommercialDesignation`] = saved;\n this.isCreatingFluxCommercialDesignation = false;\n this._quickCreateFluxCDShieldingKey = '';\n this._quickCreateFluxCDName = '';\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-pqr.review.create-flux-commercial-designation.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-flux-commercial-designation.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.review.create-flux-commercial-designation.errors.generic')\n );\n }\n }\n });\n\n // ── Shielding type / gas / flux actions ─────────────────\n\n /**\n * Reset all shielding sub-fields (gas, flux, designation, mixture, flow rates,\n * and commercial designations) for a given prefix when the shielding type changes.\n * @param {string} prefix - e.g. 'shielding1', 'shielding2', 'backing'.\n */\n _clearShieldingFields(prefix: string) {\n this.form[`${prefix}Gas`] = null;\n this.form[`${prefix}Flux`] = null;\n this.form[`${prefix}Designation`] = '';\n this.form[`${prefix}GasMixture`] = '';\n this.form[`${prefix}FlowRateMin`] = null;\n this.form[`${prefix}FlowRateMax`] = null;\n this.form[`${prefix}GasCommercialDesignation`] = null;\n this.form[`${prefix}FluxCommercialDesignation`] = null;\n }\n\n\n @action\n setPasses(passes: any) {\n this.form.passes = passes;\n }\n\n // ── Build payload & approve ───────────────────────────────\n\n /**\n * Extract the ID from an Ember Data record or plain object.\n * Handles both `.get('id')` (proxy) and `.id` (POJO) access patterns.\n * @param {Object|null} entity\n * @returns {string|undefined}\n */\n /**\n * Build the JSON payload sent to the backend when the user approves a PQR.\n *\n * Collects every tracked field in the form — IDs for entity relationships,\n * raw values for text/numeric fields, and the welding passes array — into\n * a flat object matching the API's expected shape.\n *\n * @returns {Object} The PQR approval payload.\n */\n buildApprovePayload() {\n return {\n // Required\n standardId: getId(this.form.selectedStandard),\n unitSystem: this.form.selectedUnitSystem?.key || undefined,\n certificateNumber: this.form.certificateNumber || undefined,\n\n // General information\n companyId: getId(this.form.selectedCompany),\n examiningBodyId: getId(this.form.selectedExaminingBody),\n emissionDate: this.form.emissionDate || undefined,\n welderId: getId(this.form.selectedWelder),\n writtenById: getId(this.form.selectedWrittenBy),\n wpsId: getId(this.form.selectedWps),\n specialRequirementIds: this.form.selectedSpecialRequirements?.map((r: any) => getId(r)) || [],\n address: this.form.address || undefined,\n testsConductedBy: this.form.testsConductedBy || undefined,\n notes: this.form.notes || undefined,\n testNotes: this.form.testNotes || undefined,\n\n // Test piece details\n weldTypeId: getId(this.form.selectedWeldType),\n productType: this.form.selectedProductType?.key || undefined,\n weldingDetailIds: this.form.weldingLayers?.map((d: any) => getId(d)) || [],\n\n // Processes\n weldingProcessRootId: getId(this.form.selectedWeldingProcess1),\n weldingProcessFillId: getId(this.form.selectedWeldingProcess2),\n weldingProcessCapId: getId(this.form.selectedWeldingProcess3),\n\n // Mechanization\n processMecanizationRootId: getId(this.form.selectedMecanization1),\n processMecanizationFillId: getId(this.form.selectedMecanization2),\n processMecanizationCapId: getId(this.form.selectedMecanization3),\n\n // Positions\n weldingPositionRootId: getId(this.form.selectedPosition1),\n weldingPositionFillId: getId(this.form.selectedPosition2),\n weldingPositionCapId: getId(this.form.selectedPosition3),\n\n // Transfer modes\n arcTransferModeRootId: getId(this.form.selectedTransferMode1),\n arcTransferModeFillId: getId(this.form.selectedTransferMode2),\n arcTransferModeCapId: getId(this.form.selectedTransferMode3),\n\n // Type current\n typeCurrentRootId: getId(this.form.selectedTypeCurrent1),\n typeCurrentFillId: getId(this.form.selectedTypeCurrent2),\n typeCurrentCapId: getId(this.form.selectedTypeCurrent3),\n\n // Base materials\n baseMaterial1Id: getId(this.form.baseMaterial1),\n baseMaterial1Thickness: this.form.baseMaterial1Thickness,\n baseMaterial1Diameter: this.form.baseMaterial1Diameter,\n baseMaterial2Id: getId(this.form.baseMaterial2),\n baseMaterial2Thickness: this.form.baseMaterial2Thickness,\n baseMaterial2Diameter: this.form.baseMaterial2Diameter,\n weldedThickness: this.form.weldedThickness,\n weldedDiameter: this.form.weldedDiameter,\n\n // Filler materials\n fillerMaterialRootId: getId(this.form.fillerMaterial1),\n fillerMaterialRootDimensions: this.form.fillerMaterial1Dimensions?.length\n ? this.form.fillerMaterial1Dimensions\n : undefined,\n fillerMaterialFillId: getId(this.form.fillerMaterial2),\n fillerMaterialFillDimensions: this.form.fillerMaterial2Dimensions?.length\n ? this.form.fillerMaterial2Dimensions\n : undefined,\n fillerMaterialCapId: getId(this.form.fillerMaterial3),\n fillerMaterialCapDimensions: this.form.fillerMaterial3Dimensions?.length\n ? this.form.fillerMaterial3Dimensions\n : undefined,\n fillerMaterialRootCommercialDesignationId: getId(this.form.fillerMaterialCommercialDesignation1),\n fillerMaterialFillCommercialDesignationId: getId(this.form.fillerMaterialCommercialDesignation2),\n fillerMaterialCapCommercialDesignationId: getId(this.form.fillerMaterialCommercialDesignation3),\n\n // Shielding 1\n shielding1Type: this.form.shielding1Type || undefined,\n shielding1GasId: getId(this.form.shielding1Gas),\n shielding1FluxId: getId(this.form.shielding1Flux),\n shielding1GasCommercialDesignationId: getId(this.form.shielding1GasCommercialDesignation),\n shielding1FluxCommercialDesignationId: getId(this.form.shielding1FluxCommercialDesignation),\n shielding1GasMixture: this.form.shielding1GasMixture || undefined,\n shielding1FlowRateMin: this.form.shielding1FlowRateMin,\n shielding1FlowRateMax: this.form.shielding1FlowRateMax,\n\n // Shielding 2\n shielding2Type: this.form.shielding2Type || undefined,\n shielding2GasId: getId(this.form.shielding2Gas),\n shielding2FluxId: getId(this.form.shielding2Flux),\n shielding2GasCommercialDesignationId: getId(this.form.shielding2GasCommercialDesignation),\n shielding2FluxCommercialDesignationId: getId(this.form.shielding2FluxCommercialDesignation),\n shielding2GasMixture: this.form.shielding2GasMixture || undefined,\n shielding2FlowRateMin: this.form.shielding2FlowRateMin,\n shielding2FlowRateMax: this.form.shielding2FlowRateMax,\n\n // Shielding 3\n shielding3Type: this.form.shielding3Type || undefined,\n shielding3GasId: getId(this.form.shielding3Gas),\n shielding3FluxId: getId(this.form.shielding3Flux),\n shielding3GasCommercialDesignationId: getId(this.form.shielding3GasCommercialDesignation),\n shielding3FluxCommercialDesignationId: getId(this.form.shielding3FluxCommercialDesignation),\n shielding3GasMixture: this.form.shielding3GasMixture || undefined,\n shielding3FlowRateMin: this.form.shielding3FlowRateMin,\n shielding3FlowRateMax: this.form.shielding3FlowRateMax,\n\n // Backing\n backingType: this.form.backingType || undefined,\n backingGasId: getId(this.form.backingGas),\n backingFluxId: getId(this.form.backingFlux),\n backingGasCommercialDesignationId: getId(this.form.backingGasCommercialDesignation),\n backingFluxCommercialDesignationId: getId(this.form.backingFluxCommercialDesignation),\n backingGasMixture: this.form.backingGasMixture || undefined,\n backingFlowRateMin: this.form.backingFlowRateMin,\n backingFlowRateMax: this.form.backingFlowRateMax,\n\n // Thermal parameters\n preheatTemperature: this.form.preheatTemperature,\n interpassTemperature: this.form.interpassTemperature,\n postHeatTemperature: this.form.postHeatTemperature,\n postHeatTime: this.form.postHeatTime,\n pwhtTemperature: this.form.pwhtTemperature,\n pwhtTime: this.form.pwhtTime,\n pwhtHeatingRate: this.form.pwhtHeatingRate,\n pwhtCoolingRate: this.form.pwhtCoolingRate,\n\n // Welding passes\n passes: this.form.passes.map((p: any) => ({\n passNo: p.passNo || undefined,\n weldingProcessId: getId(p.selectedWeldingProcess),\n fillerMaterialId: getId(p.selectedFillerMaterial),\n currentTypeId: getId(p.selectedCurrentType),\n arcTransferModeId: getId(p.selectedArcTransferMode),\n currentMin: p.currentMin,\n currentMax: p.currentMax,\n voltageMin: p.voltageMin,\n voltageMax: p.voltageMax,\n wireFeedSpeedMin: p.wireFeedSpeedMin,\n wireFeedSpeedMax: p.wireFeedSpeedMax,\n travelSpeedMin: p.travelSpeedMin,\n travelSpeedMax: p.travelSpeedMax,\n heatInputMin: p.heatInputMin,\n heatInputMax: p.heatInputMax,\n })),\n\n // Other details\n backGouging: this.form.backGouging || undefined,\n pulsedWelding: this.form.pulsedWelding || undefined,\n torchAngleMin: this.form.torchAngleMin,\n torchAngleMax: this.form.torchAngleMax,\n electrodeType1: this.form.electrodeType1 || undefined,\n electrodeType2: this.form.electrodeType2 || undefined,\n electrodeType3: this.form.electrodeType3 || undefined,\n stickOut1: this.form.stickOut1 || undefined,\n stickOut2: this.form.stickOut2 || undefined,\n stickOut3: this.form.stickOut3 || undefined,\n gasNozzleDiameter1: this.form.gasNozzleDiameter1,\n gasNozzleDiameter2: this.form.gasNozzleDiameter2,\n gasNozzleDiameter3: this.form.gasNozzleDiameter3,\n weaving1: this.form.weaving1 || undefined,\n weaving2: this.form.weaving2 || undefined,\n weaving3: this.form.weaving3 || undefined,\n oscillation1: this.form.oscillation1 || undefined,\n oscillation2: this.form.oscillation2 || undefined,\n oscillation3: this.form.oscillation3 || undefined,\n preparationMethodIds: this.form.selectedPreparationMethods?.map((m: any) => getId(m)) || [],\n };\n }\n\n /**\n * Validate required fields and, if valid, build the payload and invoke\n * the `@onApprove` callback with the queue item and edited data.\n * Sets `approveAttempted` to true so that validation errors become visible.\n *\n * Awaits `@onApprove` so the footer buttons stay disabled for as long as the\n * approval is in flight — the request creates the PQR and reports the parse\n * assessments, so it is far from instant. Dropped rather than restartable: a\n * second click while the first is running must be ignored, never re-sent.\n */\n approveTask = dropTask(async () => {\n this.approveAttempted = true;\n if (!this.canApprove) return;\n let payload = this.buildApprovePayload();\n if (this.args.onApprove) {\n await this.args.onApprove(this.args.item, payload);\n }\n });\n\n get isApproving() {\n return this.approveTask.isRunning;\n }\n\n @action\n reject() {\n // The buttons are disabled while approving; this also covers the paths that\n // bypass them (keyboard, the modal's own dismiss affordances).\n if (this.isApproving) return;\n if (this.args.onReject) {\n this.args.onReject(this.args.item);\n }\n }\n\n @action\n close() {\n if (this.isApproving) return;\n if (this.args.onClose) {\n this.args.onClose();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/digitalize-pqr/queue-item-actions.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/queue-item-actions.hbs\"}});\nimport templateOnlyComponent from '@ember/component/template-only';\n\nexport default templateOnlyComponent();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Trigger refresh check when refreshSignal changes }}\\n{{this.shouldCheckRefresh}}\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.queue.buttons.refresh\\\"}}\\n \\n
\\n
\\n\\n {{#if (eq this.activeTab \\\"all\\\")}}\\n
\\n
\\n \\n {{option.label}}\\n \\n
\\n
\\n {{/if}}\\n\\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.queue.messages.loading\\\"}}

\\n
\\n {{else if this.isEmpty}}\\n \\n {{else}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.filteredItems as |item|}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n (eq item.status this.QUEUE_STATUS.PROCESSING)\\n (eq item.status this.QUEUE_STATUS.START)\\n )\\n }}\\n \\n \\n \\n {{else if (eq item.status this.QUEUE_STATUS.ERROR)}}\\n \\n \\n \\n {{/if}}\\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.queue.columns.file-name\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.status\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.uploaded-by\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.date\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.actions\\\"}}
\\n \\n {{#if (eq item.status this.QUEUE_STATUS.PARSED)}}\\n \\n {{item.fileName}}\\n \\n {{else}}\\n {{item.fileName}}\\n {{/if}}\\n \\n \\n {{item.uploadedBy}}{{item.createdAt}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.queue.messages.processing-time\\\"}}\\n \\n
\\n \\n \\n {{item.errorMessage}}\\n \\n
\\n
\\n\\n {{! Pagination - only show when there are more items than page size }}\\n {{#if (gt this.totalCount this.pageSize)}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.hasPendingItems}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.queue.messages.auto-refreshing\\\"}}\\n
\\n {{/if}}\\n
\\n\\n{{#if this.reviewingItem}}\\n \\n{{/if}}\\n\\n{{! Quick Approve Modal }}\\n{{#if this.quickApproveItem}}\\n \\n{{/if}}\\n\\n{{! Confirmation Modal for Destructive Actions }}\\n{{#if this.pendingConfirmation}}\\n \\n \\n

{{this.pendingConfirmation.message}}

\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n {{#if (eq this.pendingConfirmation.type \\\"delete\\\")}}\\n {{t \\\"routes.digitalize-pqr.queue.actions.delete\\\"}}\\n {{else}}\\n {{t \\\"routes.digitalize-pqr.queue.actions.reject\\\"}}\\n {{/if}}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{! Trigger refresh check when refreshSignal changes }}\\n{{this.shouldCheckRefresh}}\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.queue.buttons.refresh\\\"}}\\n \\n
\\n
\\n\\n {{#if (eq this.activeTab \\\"all\\\")}}\\n
\\n
\\n \\n {{option.label}}\\n \\n
\\n
\\n {{/if}}\\n\\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.queue.messages.loading\\\"}}

\\n
\\n {{else if this.isEmpty}}\\n \\n {{else}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.filteredItems as |item|}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n (eq item.status this.QUEUE_STATUS.PROCESSING)\\n (eq item.status this.QUEUE_STATUS.START)\\n )\\n }}\\n \\n \\n \\n {{else if (eq item.status this.QUEUE_STATUS.ERROR)}}\\n \\n \\n \\n {{/if}}\\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.queue.columns.file-name\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.status\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.uploaded-by\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.date\\\"}}{{t \\\"routes.digitalize-pqr.queue.columns.actions\\\"}}
\\n \\n {{#if (eq item.status this.QUEUE_STATUS.PARSED)}}\\n \\n {{item.fileName}}\\n \\n {{else}}\\n {{item.fileName}}\\n {{/if}}\\n \\n \\n {{item.uploadedBy}}{{item.createdAt}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.queue.messages.processing-time\\\"}}\\n \\n
\\n \\n \\n {{item.errorMessage}}\\n \\n
\\n
\\n\\n {{! Pagination - only show when there are more items than page size }}\\n {{#if (gt this.totalCount this.pageSize)}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.hasPendingItems}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.queue.messages.auto-refreshing\\\"}}\\n
\\n {{/if}}\\n
\\n\\n{{#if this.reviewingItem}}\\n \\n{{/if}}\\n\\n{{! Quick Approve Modal }}\\n{{#if this.quickApproveItem}}\\n \\n{{/if}}\\n\\n{{! Confirmation Modal for Destructive Actions }}\\n{{#if this.pendingConfirmation}}\\n \\n \\n

{{this.pendingConfirmation.message}}

\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n {{#if (eq this.pendingConfirmation.type \\\"delete\\\")}}\\n {{t \\\"routes.digitalize-pqr.queue.actions.delete\\\"}}\\n {{else}}\\n {{t \\\"routes.digitalize-pqr.queue.actions.reject\\\"}}\\n {{/if}}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-pqr/queue-list.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/queue-list.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { dropTask, task, timeout } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport RouterService from '@ember/routing/router-service';\nimport PqrParseQueueService, {\n QUEUE_STATUS,\n type QueueItem,\n type QueueStatus,\n} from 'weldnote/services/pqr-parse-queue';\nimport type { ApprovePayload } from \"./types/pqr-api-response-types\";\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ERROR_CODES } = Constants;\n\ninterface ComboFilterOption {\n value: string;\n label: string;\n}\n\ninterface ConfirmationState {\n type: 'reject' | 'delete';\n item: QueueItem;\n title: string;\n message: string;\n}\n\ninterface QueueListArgs {\n refreshSignal?: number | null;\n onCountsChange?: (pendingCount: number, readyCount: number) => void;\n onUploadClick?: () => void;\n}\n\nexport default class DigitalizePqrQueueListComponent extends Component {\n @service declare intl: IntlService;\n @service declare pqrParseQueue: PqrParseQueueService;\n @service declare alertMessage: AlertMessageService;\n @service declare router: RouterService;\n\n @tracked items: QueueItem[] = [];\n @tracked isLoading = true;\n @tracked activeTab: 'reviewing' | 'all' = 'reviewing';\n @tracked selectedComboFilter = 'all';\n @tracked reviewingItem: QueueItem | null = null;\n @tracked quickApproveItem: QueueItem | null = null;\n @tracked pendingConfirmation: ConfirmationState | null = null;\n\n // Stable count of items in reviewing states (fetched via independent API call)\n @tracked reviewingCount = 0;\n\n // Pagination state\n @tracked currentPage = 1;\n @tracked totalCount = 0;\n @tracked pageSize = 20;\n\n POLL_INTERVAL = 5000; // 5 seconds\n QUEUE_STATUS = QUEUE_STATUS;\n\n // Track items hash to avoid unnecessary re-sorting\n _lastItemsHash: string | null = null;\n\n get comboFilterOptions(): ComboFilterOption[] {\n return [\n { value: 'all', label: this.intl.t('routes.digitalize-pqr.queue.filters.all') },\n { value: 'pending', label: this.intl.t('routes.digitalize-pqr.queue.filters.pending') },\n { value: 'ready', label: this.intl.t('routes.digitalize-pqr.queue.filters.ready') },\n { value: 'completed', label: this.intl.t('routes.digitalize-pqr.queue.filters.completed') },\n { value: 'errors', label: this.intl.t('routes.digitalize-pqr.queue.filters.errors') },\n ];\n }\n\n get selectedComboFilterOption(): ComboFilterOption | undefined {\n return this.comboFilterOptions.find((o) => o.value === this.selectedComboFilter);\n }\n\n /**\n * With server-side filtering, filteredItems just returns the items\n * since filtering is already done on the backend.\n */\n get filteredItems(): QueueItem[] {\n return this.items;\n }\n\n /**\n * Convert current tab + combo filter to API status filter array.\n */\n getStatusFilterForApi(): QueueStatus[] | null {\n if (this.activeTab === 'reviewing') {\n return [this.QUEUE_STATUS.PARSED, this.QUEUE_STATUS.QUEUED, this.QUEUE_STATUS.START, this.QUEUE_STATUS.PROCESSING];\n }\n\n // \"all\" tab uses the combo box filter\n switch (this.selectedComboFilter) {\n case 'pending':\n return [this.QUEUE_STATUS.QUEUED, this.QUEUE_STATUS.START, this.QUEUE_STATUS.PROCESSING];\n case 'ready':\n return [this.QUEUE_STATUS.PARSED];\n case 'completed':\n return [this.QUEUE_STATUS.APPROVED, this.QUEUE_STATUS.REJECTED];\n case 'errors':\n return [this.QUEUE_STATUS.ERROR];\n default:\n return null; // 'all' - no filter\n }\n }\n\n get hasPendingItems(): boolean {\n return this.items.some(\n (item) =>\n item.status === this.QUEUE_STATUS.QUEUED ||\n item.status === this.QUEUE_STATUS.START ||\n item.status === this.QUEUE_STATUS.PROCESSING\n );\n }\n\n get isEmpty(): boolean {\n return this.filteredItems.length === 0;\n }\n\n get isActionInProgress(): boolean {\n return (\n this.approveTask.isRunning ||\n this.rejectTask.isRunning ||\n this.deleteTask.isRunning ||\n this.retryTask.isRunning\n );\n }\n\n // Track the last refresh signal to detect changes\n _lastRefreshSignal: number | null | undefined = null;\n\n constructor(owner: unknown, args: QueueListArgs) {\n super(owner, args);\n this._lastRefreshSignal = this.args.refreshSignal;\n this.loadItems.perform();\n }\n\n /**\n * Check if refresh signal changed and trigger refresh if needed\n * Called from template using did-update modifier or getter\n */\n get shouldCheckRefresh(): null {\n if (this.args.refreshSignal !== this._lastRefreshSignal) {\n this._lastRefreshSignal = this.args.refreshSignal;\n // Trigger refresh asynchronously to avoid issues during render\n if (this.args.refreshSignal !== null && this.args.refreshSignal !== undefined) {\n this.loadItems.perform();\n }\n }\n return null;\n }\n\n willDestroy(): void {\n super.willDestroy();\n this.pollItems.cancelAll();\n this.loadItems.cancelAll();\n }\n\n /**\n * Notify parent of count changes for tab badges\n */\n notifyCountChanges(): void {\n if (this.args.onCountsChange) {\n this.args.onCountsChange(this.reviewingCount, 0);\n }\n }\n\n /**\n * Calculate a hash of items to detect changes\n */\n _calculateItemsHash(items: QueueItem[]): string {\n return items.map((item) => `${item.id}:${item.status}`).join('|');\n }\n\n /**\n * Fetch the reviewing count independently so the badge stays stable\n * regardless of which tab or filter is active.\n */\n async _fetchReviewingCount(): Promise {\n try {\n const reviewingStatuses: QueueStatus[] = [\n this.QUEUE_STATUS.PARSED,\n this.QUEUE_STATUS.QUEUED,\n this.QUEUE_STATUS.START,\n this.QUEUE_STATUS.PROCESSING,\n ];\n let result = await this.pqrParseQueue.listQueueItems(reviewingStatuses, 1, 1);\n this.reviewingCount = result.count;\n } catch {\n // Don't fail the main load if count fetch fails\n }\n }\n\n /**\n * Check if disappeared items went to ERROR status.\n * If so, alert the user and switch to the \"all\" tab with the errors filter.\n */\n async _checkForErroredItems(itemIds: string[]): Promise {\n try {\n let erroredFileNames: string[] = [];\n let checks = itemIds.map(async (id) => {\n let item = await this.pqrParseQueue.getQueueItem(id);\n if (item.status === this.QUEUE_STATUS.ERROR) {\n erroredFileNames.push(item.fileName ?? id);\n }\n });\n await Promise.all(checks);\n\n if (erroredFileNames.length > 0) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.processing-failed', {\n fileNames: erroredFileNames.join(', '),\n })\n );\n\n // Switch to \"all\" tab with errors filter so the user can see what happened\n this.activeTab = 'all';\n this.selectedComboFilter = 'errors';\n this.currentPage = 1;\n this.loadItems.perform();\n }\n } catch {\n // Don't fail the poll cycle if this check fails\n }\n }\n\n /**\n * Update items with sorting only when data has changed\n */\n _updateItems(newItems: QueueItem[]): void {\n let items = Array.isArray(newItems) ? newItems : [];\n let newHash = this._calculateItemsHash(items);\n\n // Only sort if items have changed\n if (newHash !== this._lastItemsHash) {\n items.sort(\n (a, b) =>\n new Date(b.createdAt as string).getTime() - new Date(a.createdAt as string).getTime()\n );\n this._lastItemsHash = newHash;\n }\n\n this.items = items;\n }\n\n loadItems = task(this, { drop: true }, async () => {\n this.isLoading = true;\n try {\n const statusFilter = this.getStatusFilterForApi();\n let result = await this.pqrParseQueue.listQueueItems(\n statusFilter,\n this.currentPage,\n this.pageSize\n );\n\n // Handle paginated response format: { list: [...], count: N }\n this._updateItems(result.list);\n this.totalCount = result.count;\n\n // Update reviewing count: use totalCount directly when on the reviewing\n // tab (same filter), otherwise make an independent API call.\n if (this.activeTab === 'reviewing') {\n this.reviewingCount = result.count;\n } else {\n await this._fetchReviewingCount();\n }\n\n // Notify parent of count changes\n this.notifyCountChanges();\n\n // Start polling if there are pending items and not already polling\n if (this.hasPendingItems && !this.pollItems.isRunning) {\n this.pollItems.perform();\n }\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.load-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n } finally {\n this.isLoading = false;\n }\n });\n\n pollItems = task(this, { restartable: true }, async () => {\n while (this.hasPendingItems) {\n // Capture IDs of pending items before polling so we can detect if they disappear\n let pendingItemIds = this.items\n .filter(\n (item) =>\n item.status === this.QUEUE_STATUS.QUEUED ||\n item.status === this.QUEUE_STATUS.START ||\n item.status === this.QUEUE_STATUS.PROCESSING\n )\n .map((item) => item.id);\n\n await timeout(this.POLL_INTERVAL);\n\n try {\n const statusFilter = this.getStatusFilterForApi();\n let result = await this.pqrParseQueue.listQueueItems(\n statusFilter,\n this.currentPage,\n this.pageSize\n );\n\n // Handle paginated response format: { list: [...], count: N }\n this._updateItems(result.list);\n this.totalCount = result.count;\n\n // Keep reviewing count in sync\n if (this.activeTab === 'reviewing') {\n this.reviewingCount = result.count;\n } else {\n await this._fetchReviewingCount();\n }\n\n // Notify parent of count changes\n this.notifyCountChanges();\n\n // Detect items that disappeared from the reviewing tab (may have errored)\n if (this.activeTab === 'reviewing' && pendingItemIds.length > 0) {\n let currentIds = new Set(result.list.map((item: QueueItem) => item.id));\n let disappearedIds = pendingItemIds.filter((id) => !currentIds.has(id));\n\n if (disappearedIds.length > 0) {\n await this._checkForErroredItems(disappearedIds);\n }\n }\n } catch {\n // Don't show alert for polling errors to avoid spam\n }\n }\n });\n\n @action\n setTab(tab: 'reviewing' | 'all'): void {\n if (this.activeTab === tab) {\n return;\n }\n this.activeTab = tab;\n this.currentPage = 1;\n this.loadItems.perform();\n }\n\n @action\n setComboFilter(option: ComboFilterOption): void {\n if (this.selectedComboFilter === option.value) {\n return;\n }\n this.selectedComboFilter = option.value;\n this.currentPage = 1;\n this.loadItems.perform();\n }\n\n @action\n onPageChange(pageNumber: number): void {\n this.currentPage = pageNumber;\n this.loadItems.perform();\n }\n\n @action\n refresh(): void {\n this.loadItems.perform();\n }\n\n @action\n onUploadClick(): void {\n this.args.onUploadClick?.();\n }\n\n @action\n onReview(item: QueueItem): void {\n this.reviewingItem = item;\n }\n\n @action\n closeReview(): void {\n this.reviewingItem = null;\n }\n\n /**\n * Returns the running task instance when it actually approves, so the review\n * modal can await it and keep its buttons disabled meanwhile. The early\n * returns (quick-approve flow, failed validation) have nothing to wait on.\n */\n @action\n onApprove(item: QueueItem, editedData: ApprovePayload | null = null): Promise | void {\n // If called without editedData, open the quick approve modal\n // (this is the flow from queue-item-actions button)\n if (!editedData) {\n this.quickApproveItem = item;\n return;\n }\n\n // If called with editedData, this is from the review modal - do full approval\n // Validate required fields before making API call\n if (!editedData.standardId || !editedData.unitSystem) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.validation-required-fields')\n );\n return;\n }\n\n return this.approveTask.perform(item, editedData);\n }\n\n approveTask = dropTask(async (item: QueueItem, editedData: ApprovePayload) => {\n try {\n let result = await this.pqrParseQueue.approveItem(item.id, editedData);\n this.alertMessage.success(this.intl.t('routes.digitalize-pqr.queue.messages.approved'));\n\n // Close review modal if open\n if (this.reviewingItem?.id === item.id) {\n this.reviewingItem = null;\n }\n\n if (result.pqrId) {\n this.router.transitionTo('pqr', result.pqrId);\n }\n } catch (error) {\n let err = error as { payload?: { errorCode?: number }; message?: string };\n if (err.payload?.errorCode === parseInt(ERROR_CODES.DUPLICATED_INSTANCE)) {\n // Handle duplicate or specific error\n this.alertMessage.error(\n this.intl\n .t('edit-view.actions.unique-violation-fields', {\n fields: this.intl.t('model.pqr.certificateNumber.label'),\n })\n .toString()\n );\n return;\n }\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.approve-failed') +\n (err.message ? `: ${err.message}` : '')\n );\n }\n });\n\n @action\n closeQuickApprove(): void {\n this.quickApproveItem = null;\n }\n\n @action\n switchToReview(item: QueueItem): void {\n this.quickApproveItem = null;\n this.reviewingItem = item;\n }\n\n @action\n onQuickApproveSuccess(_item: QueueItem): void {\n // Close quick approve modal after successful approval\n this.quickApproveItem = null;\n // Refresh list to show updated status\n this.loadItems.perform();\n }\n\n @action\n requestReject(item: QueueItem): void {\n // Show confirmation for reject\n this.pendingConfirmation = {\n type: 'reject',\n item,\n title: this.intl.t('routes.digitalize-pqr.queue.confirm.reject-title'),\n message: this.intl.t('routes.digitalize-pqr.queue.confirm.reject-message', {\n fileName: item.fileName,\n }),\n };\n }\n\n @action\n requestDelete(item: QueueItem): void {\n // Show confirmation for delete\n this.pendingConfirmation = {\n type: 'delete',\n item,\n title: this.intl.t('routes.digitalize-pqr.queue.confirm.delete-title'),\n message: this.intl.t('routes.digitalize-pqr.queue.confirm.delete-message', {\n fileName: item.fileName,\n }),\n };\n }\n\n @action\n cancelConfirmation(): void {\n this.pendingConfirmation = null;\n }\n\n @action\n confirmAction(): void {\n if (!this.pendingConfirmation) {\n return;\n }\n\n let { type, item } = this.pendingConfirmation;\n this.pendingConfirmation = null;\n\n if (type === 'reject') {\n this.rejectTask.perform(item);\n } else if (type === 'delete') {\n this.deleteTask.perform(item);\n }\n }\n\n @action\n onReject(item: QueueItem): void {\n // Called from review modal - show confirmation\n this.requestReject(item);\n }\n\n rejectTask = dropTask(async (item: QueueItem) => {\n try {\n await this.pqrParseQueue.rejectItem(item.id);\n this.alertMessage.success(this.intl.t('routes.digitalize-pqr.queue.messages.rejected'));\n\n // Close review modal if open\n if (this.reviewingItem?.id === item.id) {\n this.reviewingItem = null;\n }\n\n await this.loadItems.perform();\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.reject-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n }\n });\n\n @action\n onDelete(item: QueueItem): void {\n // Show confirmation before delete\n this.requestDelete(item);\n }\n\n deleteTask = dropTask(async (item: QueueItem) => {\n try {\n await this.pqrParseQueue.deleteItem(item.id);\n this.alertMessage.success(this.intl.t('routes.digitalize-pqr.queue.messages.deleted'));\n await this.loadItems.perform();\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.delete-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n }\n });\n\n @action\n onRetry(item: QueueItem): void {\n this.retryTask.perform(item);\n }\n\n retryTask = dropTask(async (item: QueueItem) => {\n try {\n await this.pqrParseQueue.retryItem(item.id);\n this.alertMessage.success(this.intl.t('routes.digitalize-pqr.queue.messages.retried'));\n await this.loadItems.perform();\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-pqr.queue.errors.retry-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n }\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if this.isLoading}}\\n {{! ═══ Loading State ═══ }}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.review.loading\\\"}}

\\n
\\n {{else}}\\n {{! ═══ Ready to Approve State ═══ }}\\n

\\n {{t \\\"routes.digitalize-pqr.quick-approve.confirm-message\\\" fileName=@item.fileName}}\\n

\\n\\n {{! Standard & Unit System Fields (required) }}\\n \\n \\n {{! Certificate Number Field (always editable, required) }}\\n
\\n \\n
\\n
\\n \\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n
\\n \\n
\\n \\n {{unit.label}}\\n \\n
\\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n
\\n
\\n\\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.quick-approve.buttons.review\\\"}}\\n \\n
\\n\\n {{! Error Message (for 422 duplicate) }}\\n {{#if this.errorMessage}}\\n
\\n \\n {{this.errorMessage}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n \\n
\\n {{! Cancel Button }}\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n\\n
\\n {{! Approve Button — `isApproveDisabled` covers the missing-required-field case }}\\n \\n {{#if this.isSubmitting}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.quick-approve.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\", {\"contents\":\"\\n \\n {{#if this.isLoading}}\\n {{! ═══ Loading State ═══ }}\\n
\\n \\n

{{t \\\"routes.digitalize-pqr.review.loading\\\"}}

\\n
\\n {{else}}\\n {{! ═══ Ready to Approve State ═══ }}\\n

\\n {{t \\\"routes.digitalize-pqr.quick-approve.confirm-message\\\" fileName=@item.fileName}}\\n

\\n\\n {{! Standard & Unit System Fields (required) }}\\n \\n \\n {{! Certificate Number Field (always editable, required) }}\\n
\\n \\n
\\n
\\n \\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n
\\n \\n
\\n \\n {{unit.label}}\\n \\n
\\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n
\\n
\\n\\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.quick-approve.buttons.review\\\"}}\\n \\n
\\n\\n {{! Error Message (for 422 duplicate) }}\\n {{#if this.errorMessage}}\\n
\\n \\n {{this.errorMessage}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n \\n
\\n {{! Cancel Button }}\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n\\n
\\n {{! Approve Button — `isApproveDisabled` covers the missing-required-field case }}\\n \\n {{#if this.isSubmitting}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-pqr.quick-approve.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/quick-approve-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/quick-approve-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { dropTask, task } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport RouterService from '@ember/routing/router-service';\nimport Constants from 'weldnote/utils/constants';\nimport PqrParseQueueService, { type QueueItem } from 'weldnote/services/pqr-parse-queue';\nimport type { PQRParseApiResponse, PQRValidationResult, MappedValue, ApprovePayload } from 'weldnote/components/digitalize-pqr/types/pqr-api-response-types';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport type WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\n\nconst { ERROR_CODES } = Constants;\n\n\n\ninterface EntityOption {\n id?: string;\n key?: string;\n get?: (key: string) => unknown;\n}\n\ninterface QuickApproveModalArgs {\n item: QueueItem;\n onClose: () => void;\n onReview: (item: QueueItem) => void;\n onApprove: (item: QueueItem, result: { pqrId?: string }) => void;\n}\n\nexport default class DigitalizePqrQuickApproveModalComponent extends Component {\n @service('pqr-parse-queue') declare pqrParseQueue: PqrParseQueueService;\n @service('weldnote-data') declare data: WeldnoteDataService;\n @service('weldcloud-notes-data') declare notesData: WeldcloudNotesData;\n @service declare intl: IntlService;\n @service declare alertMessage: AlertMessageService;\n @service declare router: RouterService;\n\n @tracked isLoading = true;\n @tracked errorMessage: string | null = null;\n @tracked certificateNumber = '';\n @tracked selectedStandard: EntityOption | null = null;\n @tracked selectedUnitSystem: EntityOption | null = null;\n\n // Parsed data from API\n @tracked parsedData: PQRParseApiResponse | null = null;\n @tracked validation: PQRValidationResult | null = null;\n\n constructor(owner: unknown, args: QuickApproveModalArgs) {\n super(owner, args);\n this.loadData.perform();\n }\n\n /**\n * Load queue item data to check if required fields are mapped\n */\n loadData = task(this, { drop: true }, async () => {\n this.isLoading = true;\n this.errorMessage = null;\n try {\n let result = await this.pqrParseQueue.getQueueItem(this.args.item.id);\n let parseResult = result.parseResult || result;\n this.parsedData = (parseResult.parsedData as PQRParseApiResponse) || null;\n this.validation = (parseResult.validation as PQRValidationResult) || null;\n\n // Pre-fill certificate number from parsed data\n this.certificateNumber = this.parsedData?.certificate_name || '';\n\n // Resolve standard and unit system from validation mappings\n let mappings = this.validation?.mappings || {};\n this._resolveEntity('standard', mappings, 'selectedStandard', this.standardOptions);\n this._resolveUnitSystem(this.parsedData?.unit_system);\n } catch (error) {\n this.errorMessage =\n (error as Error).message ||\n this.intl.t('routes.digitalize-pqr.queue.errors.load-details-failed');\n } finally {\n this.isLoading = false;\n }\n });\n\n // ── Options ──────────────────────────────────────────────\n\n get standardOptions(): EntityOption[] {\n return (this.data as any).standardOptions;\n }\n\n get unitSystemOptions(): EntityOption[] {\n return (this.notesData as any).unitSystemOptions;\n }\n\n // ── Derived values ──────────────────────────────────────\n\n get standardId(): string | null {\n let id =\n (this.selectedStandard?.get?.('id') as string | undefined) ?? this.selectedStandard?.id;\n return id || null;\n }\n\n get resolvedUnitSystem(): string | null {\n let key =\n (this.selectedStandard?.get?.('key') as string | undefined) ??\n (this.selectedUnitSystem?.key ||\n (this.selectedUnitSystem?.get?.('key') as string | undefined));\n return key || null;\n }\n\n // ── Parsed value hints ──────────────────────────────────\n\n get parsedStandardHint(): string {\n return this.validation?.mappings?.standard?.originalValue || this.parsedData?.standard || '';\n }\n\n get parsedUnitSystemHint(): string {\n return this.parsedData?.unit_system || '';\n }\n\n get isSubmitting(): boolean {\n return this.approveTask.isRunning;\n }\n\n /**\n * Check if the approve button should be disabled\n */\n get isApproveDisabled(): boolean {\n return (\n this.isSubmitting ||\n !this.isCertificateNumberValid ||\n !this.standardId ||\n !this.resolvedUnitSystem\n );\n }\n\n get isCertificateNumberValid(): boolean {\n return Boolean(this.certificateNumber && this.certificateNumber.trim().length > 0);\n }\n\n /**\n * Build the payload for quick approval\n */\n buildPayload(): ApprovePayload {\n return {\n standardId: this.standardId || undefined,\n unitSystem: this.resolvedUnitSystem || undefined,\n certificateNumber: this.certificateNumber,\n };\n }\n\n @action\n setStandard(standard: EntityOption): void {\n this.selectedStandard = standard;\n }\n\n @action\n setUnitSystem(val: EntityOption): void {\n this.selectedUnitSystem = val;\n }\n\n @action\n updateCertificateNumber(val: string | undefined): void {\n this.certificateNumber = val || '';\n // Clear error message when user edits the field\n if (this.errorMessage) {\n this.errorMessage = null;\n }\n }\n\n @action\n close(): void {\n // The buttons are disabled while submitting; this also covers the paths that\n // bypass them (keyboard, the modal's own dismiss affordances).\n if (this.isSubmitting) return;\n if (this.args.onClose) {\n this.args.onClose();\n }\n }\n\n @action\n openReview(): void {\n if (this.isSubmitting) return;\n if (this.args.onReview) {\n this.args.onReview(this.args.item);\n }\n }\n\n /**\n * Dropped rather than restartable: a second click while the first is running\n * must be ignored, never re-sent.\n */\n approveTask = dropTask(async () => {\n this.errorMessage = null;\n\n try {\n let payload = this.buildPayload();\n let result = await this.pqrParseQueue.approveItem(this.args.item.id, payload);\n\n this.alertMessage.success(this.intl.t('routes.digitalize-pqr.queue.messages.approved'));\n\n // Notify parent of successful approval\n if (this.args.onApprove) {\n this.args.onApprove(this.args.item, result);\n }\n\n // Navigate to newly created PQR\n if (result.pqrId) {\n this.router.transitionTo('pqr', result.pqrId);\n }\n } catch (error) {\n // Handle duplicate certificate number error\n let err = error as { payload?: { errorCode?: number }; message?: string };\n if (err.payload?.errorCode === parseInt(ERROR_CODES.DUPLICATED_INSTANCE)) {\n this.errorMessage = this.intl.t('routes.digitalize-pqr.quick-approve.duplicate-error');\n return;\n }\n\n // Generic error\n this.errorMessage =\n this.intl.t('routes.digitalize-pqr.queue.errors.approve-failed') +\n (err.message ? `: ${err.message}` : '');\n }\n });\n\n _resolveEntity(\n mappingKey: string,\n mappings: Partial>,\n trackedKey: 'selectedStandard' | 'selectedUnitSystem',\n options: EntityOption[] | null\n ): void {\n let mapping = mappings[mappingKey];\n if (mapping !== undefined && mapping.entityId && options) {\n let found = Array.isArray(options)\n ? options.find((o) => {\n let id = o.get ? (o.get('id') as string) : o.id;\n return String(id) === String(mapping?.entityId);\n })\n : null;\n if (found) {\n this[trackedKey] = found;\n return;\n }\n }\n this[trackedKey] = null;\n }\n\n _resolveUnitSystem(parsedValue: string | undefined): void {\n if (!parsedValue) return;\n let options = this.unitSystemOptions;\n if (!options) return;\n let match = options.find((o) => {\n let key = o.key || (o.get?.('key') as string | undefined);\n return key && parsedValue.toUpperCase().startsWith(key.toUpperCase());\n });\n if (match) {\n this.selectedUnitSystem = match;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n \\n \\n {{#if this.parsedBaseMaterial1Hint}}\\n \\n {{this.parsedBaseMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBaseMaterial2Hint}}\\n \\n {{this.parsedBaseMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\", {\"contents\":\"\\n\\n \\n \\n \\n {{#if this.parsedBaseMaterial1Hint}}\\n \\n {{this.parsedBaseMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBaseMaterial2Hint}}\\n \\n {{this.parsedBaseMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-base-materials.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-base-materials.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { PQRParseApiResponse, PQRValidationMappings } from '../types/pqr-api-response-types';\nimport { parsedBaseMaterialHint } from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionBaseMaterialsArgs {\n baseMaterial1: unknown;\n baseMaterial1Thickness: number | null;\n baseMaterial1Diameter: number | null;\n baseMaterial2: unknown;\n baseMaterial2Thickness: number | null;\n baseMaterial2Diameter: number | null;\n weldedThickness: number | null;\n weldedDiameter: number | null;\n industryCode: unknown;\n unitLabel: string;\n // Parsed data for hint + quick-create computation\n parsedData: PQRParseApiResponse | null;\n mappings: PQRValidationMappings | null;\n // Callbacks\n onUpdate: (field: string, value: unknown) => void;\n onQuickCreate: (index: number) => void;\n}\n\nexport default class ReviewSectionBaseMaterialsComponent extends Component {\n // ── Hints ──────────────────────────────────────────────────\n\n get parsedBaseMaterial1Hint(): string {\n return parsedBaseMaterialHint(\n this.args.mappings,\n 1,\n this.args.parsedData?.test_piece_base_materials?.base_material_1\n );\n }\n\n get parsedBaseMaterial2Hint(): string {\n return parsedBaseMaterialHint(\n this.args.mappings,\n 2,\n this.args.parsedData?.test_piece_base_materials?.base_material_2\n );\n }\n\n // ── Quick-create eligibility ───────────────────────────────\n\n get canQuickCreateBaseMaterial1(): boolean {\n if (this.args.baseMaterial1) return false;\n if (!this.args.industryCode) return false;\n const bm = this.args.parsedData?.test_piece_base_materials?.base_material_1;\n if (!bm) return false;\n return [bm.specification, bm.grade, bm.group].filter(Boolean).length >= 2;\n }\n\n get canQuickCreateBaseMaterial2(): boolean {\n if (this.args.baseMaterial2) return false;\n if (!this.args.industryCode) return false;\n const bm = this.args.parsedData?.test_piece_base_materials?.base_material_2;\n if (!bm) return false;\n return [bm.specification, bm.grade, bm.group].filter(Boolean).length >= 2;\n }\n\n // ── Actions ────────────────────────────────────────────────\n\n @action setBaseMaterial1(material: unknown) {\n this.args.onUpdate('baseMaterial1', material);\n }\n\n @action removeBaseMaterial1() {\n this.args.onUpdate('baseMaterial1', null);\n }\n\n @action setBaseMaterial2(material: unknown) {\n this.args.onUpdate('baseMaterial2', material);\n }\n\n @action removeBaseMaterial2() {\n this.args.onUpdate('baseMaterial2', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{! Filler Materials }}\\n \\n \\n \\n {{#if this.parsedFillerMaterial1Hint}}\\n \\n {{this.parsedFillerMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation1Hint}}\\n \\n {{this.parsedCommercialDesignation1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation1}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial2Hint}}\\n \\n {{this.parsedFillerMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation2Hint}}\\n \\n {{this.parsedCommercialDesignation2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation2}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial3Hint}}\\n \\n {{this.parsedFillerMaterial3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial3}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation3Hint}}\\n \\n {{this.parsedCommercialDesignation3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation3}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if @selectedUnitSystem}}\\n \\n {{/if}}\\n \\n \\n {{#if @selectedUnitSystem}}\\n \\n {{/if}}\\n \\n \\n {{#if @selectedUnitSystem}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Shielding 1/2/3 - unrolled to avoid focus loss from array re-creation }}\\n
{{t \\\"routes.digitalize-pqr.review.fields.shielding\\\"}}
\\n\\n {{! Shielding 1 }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding1Hint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedShielding1Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding1Flux}}\\n \\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1FluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1GasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding 2 }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding2Hint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedShielding2Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding2Flux}}\\n \\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2FluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2GasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding 3 }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding3Hint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedShielding3Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding3Flux}}\\n \\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3FluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3GasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Backing }}\\n
{{t \\\"routes.digitalize-pqr.review.fields.backing\\\"}}
\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedBackingHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedBackingHint}}\\n \\n {{/if}}\\n \\n \\n {{#if this.isBackingGas}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingGasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n {{else if this.isBackingFlux}}\\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingFluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n\", {\"contents\":\"\\n\\n {{! Filler Materials }}\\n \\n \\n \\n {{#if this.parsedFillerMaterial1Hint}}\\n \\n {{this.parsedFillerMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation1Hint}}\\n \\n {{this.parsedCommercialDesignation1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation1}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial2Hint}}\\n \\n {{this.parsedFillerMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation2Hint}}\\n \\n {{this.parsedCommercialDesignation2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation2}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial3Hint}}\\n \\n {{this.parsedFillerMaterial3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial3}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation3Hint}}\\n \\n {{this.parsedCommercialDesignation3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation3}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if @selectedUnitSystem}}\\n \\n {{/if}}\\n \\n \\n {{#if @selectedUnitSystem}}\\n \\n {{/if}}\\n \\n \\n {{#if @selectedUnitSystem}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Shielding 1/2/3 - unrolled to avoid focus loss from array re-creation }}\\n
{{t \\\"routes.digitalize-pqr.review.fields.shielding\\\"}}
\\n\\n {{! Shielding 1 }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding1Hint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedShielding1Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding1Flux}}\\n \\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1FluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1GasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding 2 }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding2Hint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedShielding2Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding2Flux}}\\n \\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2FluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2GasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding 3 }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding3Hint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedShielding3Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding3Flux}}\\n \\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3FluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3GasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Backing }}\\n
{{t \\\"routes.digitalize-pqr.review.fields.backing\\\"}}
\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedBackingHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedBackingHint}}\\n \\n {{/if}}\\n \\n \\n {{#if this.isBackingGas}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingGasCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-gas-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n {{else if this.isBackingFlux}}\\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingFluxCD}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-flux-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-consumables.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-consumables.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport type { PQRParseApiResponse, PQRValidationMappings, ShieldingInfo } from '../types/pqr-api-response-types';\nimport {\n parsedFillerMaterialHint,\n parsedCommercialDesignationHint,\n parsedShieldingHint,\n parsedShieldingCDHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\nconst SHIELDING_OPTIONS = Constants.SHIELDING_OPTIONS;\n\ninterface ShieldingTypeOption {\n key: string;\n label: string;\n}\n\ninterface SectionConsumablesArgs {\n // Filler materials\n fillerMaterial1: unknown;\n fillerMaterial2: unknown;\n fillerMaterial3: unknown;\n fillerMaterial1Dimensions: unknown[];\n fillerMaterial2Dimensions: unknown[];\n fillerMaterial3Dimensions: unknown[];\n // Commercial designations\n fillerMaterialCommercialDesignation1: unknown;\n fillerMaterialCommercialDesignation2: unknown;\n fillerMaterialCommercialDesignation3: unknown;\n selectedWeldingProcess1: unknown;\n selectedWeldingProcess2: unknown;\n selectedWeldingProcess3: unknown;\n // Filler material dimensions\n selectedUnitSystem: unknown;\n selectedStandard: unknown;\n separator: string;\n // Shielding 1/2/3\n selectedShielding1Type: ShieldingTypeOption | null;\n shielding1Gas: unknown;\n shielding1Flux: unknown;\n shielding1GasMixture: string;\n shielding1FlowRateMin: number | null;\n shielding1FlowRateMax: number | null;\n shielding1GasCommercialDesignation: unknown;\n shielding1FluxCommercialDesignation: unknown;\n selectedShielding2Type: ShieldingTypeOption | null;\n shielding2Gas: unknown;\n shielding2Flux: unknown;\n shielding2GasMixture: string;\n shielding2FlowRateMin: number | null;\n shielding2FlowRateMax: number | null;\n shielding2GasCommercialDesignation: unknown;\n shielding2FluxCommercialDesignation: unknown;\n selectedShielding3Type: ShieldingTypeOption | null;\n shielding3Gas: unknown;\n shielding3Flux: unknown;\n shielding3GasMixture: string;\n shielding3FlowRateMin: number | null;\n shielding3FlowRateMax: number | null;\n shielding3GasCommercialDesignation: unknown;\n shielding3FluxCommercialDesignation: unknown;\n // Backing\n selectedBackingType: ShieldingTypeOption | null;\n backingGas: unknown;\n backingFlux: unknown;\n backingGasMixture: string;\n backingFlowRateMin: number | null;\n backingFlowRateMax: number | null;\n backingGasCommercialDesignation: unknown;\n backingFluxCommercialDesignation: unknown;\n // Options\n shieldingTypeOptions: unknown[];\n industryCode: unknown;\n industryCodeId: string | null;\n // Parsed data for hints + quick-create checks\n parsedData: PQRParseApiResponse | null;\n mappings: PQRValidationMappings | null;\n // Callbacks\n onUpdate: (field: string, value: unknown) => void;\n onQuickCreateFillerMaterial: (index: number) => void;\n onQuickCreateCommercialDesignation: (index: number) => void;\n onQuickCreateGasCD: (shieldingKey: string) => void;\n onQuickCreateFluxCD: (shieldingKey: string) => void;\n}\n\nexport default class ReviewSectionConsumablesComponent extends Component {\n // ── Filler Material hints ──────────────────────────────────\n\n get parsedFillerMaterial1Hint(): string {\n return parsedFillerMaterialHint(this.args.parsedData?.test_piece_consumables?.filler_material_1);\n }\n get parsedFillerMaterial2Hint(): string {\n return parsedFillerMaterialHint(this.args.parsedData?.test_piece_consumables?.filler_material_2);\n }\n get parsedFillerMaterial3Hint(): string {\n return parsedFillerMaterialHint(this.args.parsedData?.test_piece_consumables?.filler_material_3);\n }\n\n // ── Commercial Designation hints ───────────────────────────\n\n get parsedCommercialDesignation1Hint(): string {\n return parsedCommercialDesignationHint(this.args.parsedData?.test_piece_consumables?.filler_material_1);\n }\n get parsedCommercialDesignation2Hint(): string {\n return parsedCommercialDesignationHint(this.args.parsedData?.test_piece_consumables?.filler_material_2);\n }\n get parsedCommercialDesignation3Hint(): string {\n return parsedCommercialDesignationHint(this.args.parsedData?.test_piece_consumables?.filler_material_3);\n }\n\n // ── Shielding hints ────────────────────────────────────────\n\n get parsedShielding1Hint(): string {\n return parsedShieldingHint(this.args.parsedData?.test_piece_consumables?.shielding_1);\n }\n get parsedShielding2Hint(): string {\n return parsedShieldingHint(this.args.parsedData?.test_piece_consumables?.shielding_2);\n }\n get parsedShielding3Hint(): string {\n return parsedShieldingHint(this.args.parsedData?.test_piece_consumables?.shielding_3);\n }\n get parsedBackingHint(): string {\n return parsedShieldingHint(this.args.parsedData?.test_piece_consumables?.backing);\n }\n\n // ── Shielding CD hints ─────────────────────────────────────\n\n private _getShieldingInfo(index: number): ShieldingInfo | null | undefined {\n if (index === 1) return this.args.parsedData?.test_piece_consumables?.shielding_1;\n if (index === 2) return this.args.parsedData?.test_piece_consumables?.shielding_2;\n if (index === 3) return this.args.parsedData?.test_piece_consumables?.shielding_3;\n return null;\n }\n\n get parsedShielding1CDHint(): string {\n return parsedShieldingCDHint(this._getShieldingInfo(1));\n }\n get parsedShielding2CDHint(): string {\n return parsedShieldingCDHint(this._getShieldingInfo(2));\n }\n get parsedShielding3CDHint(): string {\n return parsedShieldingCDHint(this._getShieldingInfo(3));\n }\n get parsedBackingCDHint(): string {\n return parsedShieldingCDHint(this.args.parsedData?.test_piece_consumables?.backing);\n }\n\n // ── Shielding type derived state ───────────────────────────\n\n get isShielding1Gas(): boolean {\n return this.args.selectedShielding1Type?.key === SHIELDING_OPTIONS.GAS;\n }\n get isShielding1Flux(): boolean {\n return this.args.selectedShielding1Type?.key === SHIELDING_OPTIONS.FLUX;\n }\n get isShielding2Gas(): boolean {\n return this.args.selectedShielding2Type?.key === SHIELDING_OPTIONS.GAS;\n }\n get isShielding2Flux(): boolean {\n return this.args.selectedShielding2Type?.key === SHIELDING_OPTIONS.FLUX;\n }\n get isShielding3Gas(): boolean {\n return this.args.selectedShielding3Type?.key === SHIELDING_OPTIONS.GAS;\n }\n get isShielding3Flux(): boolean {\n return this.args.selectedShielding3Type?.key === SHIELDING_OPTIONS.FLUX;\n }\n get isBackingGas(): boolean {\n return this.args.selectedBackingType?.key === SHIELDING_OPTIONS.GAS;\n }\n get isBackingFlux(): boolean {\n return this.args.selectedBackingType?.key === SHIELDING_OPTIONS.FLUX;\n }\n\n // ── Quick-create eligibility: Filler Materials ─────────────\n\n get canQuickCreateFillerMaterial1(): boolean {\n if (this.args.fillerMaterial1) return false;\n if (!this.args.industryCode) return false;\n const fm = this.args.parsedData?.test_piece_consumables?.filler_material_1;\n if (!fm) return false;\n return [fm.specification, fm.classification, fm.group].filter(Boolean).length >= 2;\n }\n get canQuickCreateFillerMaterial2(): boolean {\n if (this.args.fillerMaterial2) return false;\n if (!this.args.industryCode) return false;\n const fm = this.args.parsedData?.test_piece_consumables?.filler_material_2;\n if (!fm) return false;\n return [fm.specification, fm.classification, fm.group].filter(Boolean).length >= 2;\n }\n get canQuickCreateFillerMaterial3(): boolean {\n if (this.args.fillerMaterial3) return false;\n if (!this.args.industryCode) return false;\n const fm = this.args.parsedData?.test_piece_consumables?.filler_material_3;\n if (!fm) return false;\n return [fm.specification, fm.classification, fm.group].filter(Boolean).length >= 2;\n }\n\n // ── Quick-create eligibility: Commercial Designations ──────\n\n get canQuickCreateCommercialDesignation1(): boolean {\n if (this.args.fillerMaterialCommercialDesignation1) return false;\n return !!this.args.fillerMaterial1;\n }\n get canQuickCreateCommercialDesignation2(): boolean {\n if (this.args.fillerMaterialCommercialDesignation2) return false;\n return !!this.args.fillerMaterial2;\n }\n get canQuickCreateCommercialDesignation3(): boolean {\n if (this.args.fillerMaterialCommercialDesignation3) return false;\n return !!this.args.fillerMaterial3;\n }\n\n // ── Quick-create eligibility: Gas/Flux CDs ─────────────────\n\n get canQuickCreateShielding1GasCD(): boolean {\n if (this.args.shielding1GasCommercialDesignation) return false;\n return !!this.args.shielding1Gas;\n }\n get canQuickCreateShielding2GasCD(): boolean {\n if (this.args.shielding2GasCommercialDesignation) return false;\n return !!this.args.shielding2Gas;\n }\n get canQuickCreateShielding3GasCD(): boolean {\n if (this.args.shielding3GasCommercialDesignation) return false;\n return !!this.args.shielding3Gas;\n }\n get canQuickCreateBackingGasCD(): boolean {\n if (this.args.backingGasCommercialDesignation) return false;\n return !!this.args.backingGas;\n }\n get canQuickCreateShielding1FluxCD(): boolean {\n if (this.args.shielding1FluxCommercialDesignation) return false;\n return !!this.args.shielding1Flux;\n }\n get canQuickCreateShielding2FluxCD(): boolean {\n if (this.args.shielding2FluxCommercialDesignation) return false;\n return !!this.args.shielding2Flux;\n }\n get canQuickCreateShielding3FluxCD(): boolean {\n if (this.args.shielding3FluxCommercialDesignation) return false;\n return !!this.args.shielding3Flux;\n }\n get canQuickCreateBackingFluxCD(): boolean {\n if (this.args.backingFluxCommercialDesignation) return false;\n return !!this.args.backingFlux;\n }\n\n // ── Filler Material actions ────────────────────────────────\n\n @action setFillerMaterial1(fm: unknown) { this.args.onUpdate('fillerMaterial1', fm); }\n @action removeFillerMaterial1() { this.args.onUpdate('fillerMaterial1', null); }\n @action setFillerMaterial2(fm: unknown) { this.args.onUpdate('fillerMaterial2', fm); }\n @action removeFillerMaterial2() { this.args.onUpdate('fillerMaterial2', null); }\n @action setFillerMaterial3(fm: unknown) { this.args.onUpdate('fillerMaterial3', fm); }\n @action removeFillerMaterial3() { this.args.onUpdate('fillerMaterial3', null); }\n\n @action setFillerMaterial1Dimensions(val: unknown[]) { this.args.onUpdate('fillerMaterial1Dimensions', val); }\n @action setFillerMaterial2Dimensions(val: unknown[]) { this.args.onUpdate('fillerMaterial2Dimensions', val); }\n @action setFillerMaterial3Dimensions(val: unknown[]) { this.args.onUpdate('fillerMaterial3Dimensions', val); }\n\n // ── Commercial Designation actions (cascade handled by parent updateField) ──\n\n @action setCommercialDesignation1(cd: unknown) { this.args.onUpdate('fillerMaterialCommercialDesignation1', cd); }\n @action setCommercialDesignation2(cd: unknown) { this.args.onUpdate('fillerMaterialCommercialDesignation2', cd); }\n @action setCommercialDesignation3(cd: unknown) { this.args.onUpdate('fillerMaterialCommercialDesignation3', cd); }\n\n // ── Shielding type actions (cascade handled by parent updateField) ──\n\n @action setShielding1Type(option: ShieldingTypeOption | null) {\n this.args.onUpdate('shielding1Type', option?.key || null);\n }\n @action setShielding2Type(option: ShieldingTypeOption | null) {\n this.args.onUpdate('shielding2Type', option?.key || null);\n }\n @action setShielding3Type(option: ShieldingTypeOption | null) {\n this.args.onUpdate('shielding3Type', option?.key || null);\n }\n @action setBackingType(option: ShieldingTypeOption | null) {\n this.args.onUpdate('backingType', option?.key || null);\n }\n\n // ── Shielding gas/flux actions ─────────────────────────────\n\n @action setShielding1Gas(gas: unknown) { this.args.onUpdate('shielding1Gas', gas); }\n @action removeShielding1Gas() { this.args.onUpdate('shielding1Gas', null); }\n @action setShielding1Flux(flux: unknown) { this.args.onUpdate('shielding1Flux', flux); }\n @action removeShielding1Flux() { this.args.onUpdate('shielding1Flux', null); }\n\n @action setShielding2Gas(gas: unknown) { this.args.onUpdate('shielding2Gas', gas); }\n @action removeShielding2Gas() { this.args.onUpdate('shielding2Gas', null); }\n @action setShielding2Flux(flux: unknown) { this.args.onUpdate('shielding2Flux', flux); }\n @action removeShielding2Flux() { this.args.onUpdate('shielding2Flux', null); }\n\n @action setShielding3Gas(gas: unknown) { this.args.onUpdate('shielding3Gas', gas); }\n @action removeShielding3Gas() { this.args.onUpdate('shielding3Gas', null); }\n @action setShielding3Flux(flux: unknown) { this.args.onUpdate('shielding3Flux', flux); }\n @action removeShielding3Flux() { this.args.onUpdate('shielding3Flux', null); }\n\n @action setBackingGas(gas: unknown) { this.args.onUpdate('backingGas', gas); }\n @action removeBackingGas() { this.args.onUpdate('backingGas', null); }\n @action setBackingFlux(flux: unknown) { this.args.onUpdate('backingFlux', flux); }\n @action removeBackingFlux() { this.args.onUpdate('backingFlux', null); }\n\n // ── Gas/Flux CD actions (cascade handled by parent updateField) ──\n\n @action setShielding1GasCD(cd: unknown) { this.args.onUpdate('shielding1GasCommercialDesignation', cd); }\n @action setShielding2GasCD(cd: unknown) { this.args.onUpdate('shielding2GasCommercialDesignation', cd); }\n @action setShielding3GasCD(cd: unknown) { this.args.onUpdate('shielding3GasCommercialDesignation', cd); }\n @action setBackingGasCD(cd: unknown) { this.args.onUpdate('backingGasCommercialDesignation', cd); }\n\n @action setShielding1FluxCD(cd: unknown) { this.args.onUpdate('shielding1FluxCommercialDesignation', cd); }\n @action setShielding2FluxCD(cd: unknown) { this.args.onUpdate('shielding2FluxCommercialDesignation', cd); }\n @action setShielding3FluxCD(cd: unknown) { this.args.onUpdate('shielding3FluxCommercialDesignation', cd); }\n @action setBackingFluxCD(cd: unknown) { this.args.onUpdate('backingFluxCommercialDesignation', cd); }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{company.name}}\\n \\n {{#if this.parsedCompanyHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedCompanyHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{body.name}}\\n \\n {{#if this.parsedExaminingBodyHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedExaminingBodyHint}}\\n \\n {{/if}}\\n \\n \\n
\\n \\n \\n {{#if this.parsedEmissionDateHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedEmissionDateHint}}\\n \\n {{/if}}\\n
\\n
\\n
\\n \\n \\n \\n {{#if this.parsedWeldersHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWeldersHint}}\\n \\n {{/if}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.button\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{staff.name}}\\n \\n {{#if this.parsedWrittenByHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWrittenByHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.parsedWpsUsedHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWpsUsedHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{requirement.name}}\\n \\n {{#if this.parsedSpecialRequirementsHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedSpecialRequirementsHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n \\n \\n \\n {{company.name}}\\n \\n {{#if this.parsedCompanyHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedCompanyHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{body.name}}\\n \\n {{#if this.parsedExaminingBodyHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedExaminingBodyHint}}\\n \\n {{/if}}\\n \\n \\n
\\n \\n \\n {{#if this.parsedEmissionDateHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedEmissionDateHint}}\\n \\n {{/if}}\\n
\\n
\\n
\\n \\n \\n \\n {{#if this.parsedWeldersHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWeldersHint}}\\n \\n {{/if}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.create-welder.button\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{staff.name}}\\n \\n {{#if this.parsedWrittenByHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWrittenByHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.parsedWpsUsedHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWpsUsedHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{requirement.name}}\\n \\n {{#if this.parsedSpecialRequirementsHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedSpecialRequirementsHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-general.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-general.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { PQRParseApiResponse, PQRValidationMappings } from '../types/pqr-api-response-types';\nimport {\n parsedCompanyHint,\n parsedExaminingBodyHint,\n parsedEmissionDateHint,\n parsedWeldersHint,\n parsedWpsUsedHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionGeneralArgs {\n // Company\n selectedCompany: unknown;\n companyOptions: unknown[];\n // Examining body\n selectedExaminingBody: unknown;\n examiningBodyOptions: unknown[];\n onShowCreateExaminingBody: (text: string) => void;\n onCreateExaminingBodyOnEnter: (select: unknown, e: KeyboardEvent) => void;\n // Emission date\n emissionDate: Date | null;\n // Welder\n selectedWelder: unknown;\n onShowCreateWelder: () => void;\n // Staff\n selectedWrittenBy: unknown;\n staffOptions: unknown[];\n // WPS\n selectedWps: unknown;\n // Special requirements\n selectedSpecialRequirements: unknown[];\n specialRequirementOptions: unknown[];\n // Simple text fields\n address: string;\n testsConductedBy: string;\n notes: string;\n testNotes: string;\n // Parsed data for hint computation\n parsedData: PQRParseApiResponse | null;\n mappings: PQRValidationMappings | null;\n // Callbacks\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionGeneralComponent extends Component {\n // ── Hints ──────────────────────────────────────────────────\n\n get parsedCompanyHint(): string {\n return parsedCompanyHint(\n this.args.mappings,\n this.args.parsedData?.company || '',\n this.args.parsedData?.company\n );\n }\n\n get parsedExaminingBodyHint(): string {\n return parsedExaminingBodyHint(\n this.args.mappings,\n this.args.parsedData?.examining_body || '',\n this.args.parsedData?.examining_body\n );\n }\n\n get parsedEmissionDateHint(): string {\n return parsedEmissionDateHint(\n this.args.parsedData?.emission_date || '',\n this.args.parsedData?.emission_date\n );\n }\n\n get parsedWeldersHint(): string {\n const welders = this.args.parsedData?.welders;\n const parsedValue = Array.isArray(welders) ? welders.join(', ') : (welders || '');\n return parsedWeldersHint(parsedValue, welders);\n }\n\n get parsedWrittenByHint(): string {\n return this.args.parsedData?.written_by || '';\n }\n\n get parsedWpsUsedHint(): string {\n return parsedWpsUsedHint(\n this.args.parsedData?.wps_used || '',\n this.args.parsedData?.wps_used\n );\n }\n\n get parsedSpecialRequirementsHint(): string {\n return this.args.parsedData?.special_requirements || '';\n }\n\n // ── Actions ────────────────────────────────────────────────\n\n @action setCompany(val: unknown) {\n this.args.onUpdate('selectedCompany', val);\n }\n\n @action setExaminingBody(val: unknown) {\n this.args.onUpdate('selectedExaminingBody', val);\n }\n\n @action setEmissionDate(val: Date | null) {\n this.args.onUpdate('emissionDate', val);\n }\n\n @action setWelder(val: unknown) {\n this.args.onUpdate('selectedWelder', val);\n }\n\n @action setWrittenBy(val: unknown) {\n this.args.onUpdate('selectedWrittenBy', val);\n }\n\n @action setWps(val: unknown) {\n this.args.onUpdate('selectedWps', val);\n }\n\n @action removeWps() {\n this.args.onUpdate('selectedWps', null);\n }\n\n @action setSpecialRequirements(val: unknown[]) {\n this.args.onUpdate('selectedSpecialRequirements', val);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{! Tensile Test }}\\n {{#if @parsedData.tensile_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.tensile\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.tensile_test.test_report}}\\n {{#if @parsedData.tensile_test.temperature}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.temperature\\\"}}:\\n {{@parsedData.tensile_test.temperature}}\\n {{/if}}\\n

\\n {{#if @parsedData.tensile_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.tensile_test.entries as |e|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.location\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.width\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.thickness\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.area\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.tensile-strength\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.fracture-location\\\"}}
{{e.location}}{{e.width}}{{e.thickness}}{{e.area}}{{e.tensile_strength}}{{e.fracture_location}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Bend Test }}\\n {{#if @parsedData.bend_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.bend\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.bend_test.test_report}}\\n {{#if @parsedData.bend_test.mandrill_diameter}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.mandrill-diameter\\\"}}:\\n {{@parsedData.bend_test.mandrill_diameter}}\\n {{/if}}\\n

\\n {{#if @parsedData.bend_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.bend_test.entries as |e|}}\\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.type\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.result\\\"}}
{{e.type}}{{e.result}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Macroscopic }}\\n {{#if @parsedData.macroscopic_examination_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.macroscopic\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.macroscopic_examination_test.report_name}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.result\\\"}}:\\n {{@parsedData.macroscopic_examination_test.result}}\\n

\\n {{/if}}\\n\\n {{! Impact Test }}\\n {{#if @parsedData.impact_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.impact\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.impact_test.test_report}}\\n {{#if @parsedData.impact_test.type}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.type\\\"}}:\\n {{@parsedData.impact_test.type}}{{/if}}\\n {{#if @parsedData.impact_test.temperature}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.temperature\\\"}}:\\n {{@parsedData.impact_test.temperature}}{{/if}}\\n

\\n {{#if @parsedData.impact_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.impact_test.entries as |e|}}\\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.location\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}} 1{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}} 2{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}} 3{{t \\\"routes.digitalize-pqr.review.tests.average\\\"}}
{{e.location}}{{e.value1}}{{e.value2}}{{e.value3}}{{e.average}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Hardness Test }}\\n {{#if @parsedData.hardness_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.hardness\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.hardness_test.test_report}}\\n {{#if @parsedData.hardness_test.type}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.type\\\"}}:\\n {{@parsedData.hardness_test.type}}{{/if}}\\n

\\n {{#if @parsedData.hardness_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.hardness_test.entries as |e|}}\\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.location\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}}
{{e.location}}{{e.value}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Chemical Analysis }}\\n {{#if @parsedData.chemical_analysis_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.chemical-analysis\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.chemical_analysis_test.report_name}}\\n

\\n
\\n {{#each\\n (array\\n (hash label=\\\"C\\\" value=@parsedData.chemical_analysis_test.carbon)\\n (hash label=\\\"Mn\\\" value=@parsedData.chemical_analysis_test.manganese)\\n (hash label=\\\"Si\\\" value=@parsedData.chemical_analysis_test.silicon)\\n (hash label=\\\"Cr\\\" value=@parsedData.chemical_analysis_test.chromium)\\n (hash label=\\\"Ni\\\" value=@parsedData.chemical_analysis_test.nickel)\\n (hash label=\\\"Mo\\\" value=@parsedData.chemical_analysis_test.molybdenum)\\n (hash label=\\\"Cu\\\" value=@parsedData.chemical_analysis_test.copper)\\n (hash label=\\\"P\\\" value=@parsedData.chemical_analysis_test.phosphorus)\\n (hash label=\\\"S\\\" value=@parsedData.chemical_analysis_test.sulphur)\\n (hash label=\\\"Al\\\" value=@parsedData.chemical_analysis_test.aluminum)\\n (hash label=\\\"Ti\\\" value=@parsedData.chemical_analysis_test.titanium)\\n )\\n as |element|\\n }}\\n {{#if element.value}}\\n
\\n
\\n \\n
{{element.value}}
\\n
\\n
\\n {{/if}}\\n {{/each}}\\n
\\n {{/if}}\\n\\n\\n\", {\"contents\":\"\\n\\n {{! Tensile Test }}\\n {{#if @parsedData.tensile_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.tensile\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.tensile_test.test_report}}\\n {{#if @parsedData.tensile_test.temperature}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.temperature\\\"}}:\\n {{@parsedData.tensile_test.temperature}}\\n {{/if}}\\n

\\n {{#if @parsedData.tensile_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.tensile_test.entries as |e|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.location\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.width\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.thickness\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.area\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.tensile-strength\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.fracture-location\\\"}}
{{e.location}}{{e.width}}{{e.thickness}}{{e.area}}{{e.tensile_strength}}{{e.fracture_location}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Bend Test }}\\n {{#if @parsedData.bend_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.bend\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.bend_test.test_report}}\\n {{#if @parsedData.bend_test.mandrill_diameter}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.mandrill-diameter\\\"}}:\\n {{@parsedData.bend_test.mandrill_diameter}}\\n {{/if}}\\n

\\n {{#if @parsedData.bend_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.bend_test.entries as |e|}}\\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.type\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.result\\\"}}
{{e.type}}{{e.result}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Macroscopic }}\\n {{#if @parsedData.macroscopic_examination_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.macroscopic\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.macroscopic_examination_test.report_name}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.result\\\"}}:\\n {{@parsedData.macroscopic_examination_test.result}}\\n

\\n {{/if}}\\n\\n {{! Impact Test }}\\n {{#if @parsedData.impact_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.impact\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.impact_test.test_report}}\\n {{#if @parsedData.impact_test.type}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.type\\\"}}:\\n {{@parsedData.impact_test.type}}{{/if}}\\n {{#if @parsedData.impact_test.temperature}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.temperature\\\"}}:\\n {{@parsedData.impact_test.temperature}}{{/if}}\\n

\\n {{#if @parsedData.impact_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.impact_test.entries as |e|}}\\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.location\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}} 1{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}} 2{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}} 3{{t \\\"routes.digitalize-pqr.review.tests.average\\\"}}
{{e.location}}{{e.value1}}{{e.value2}}{{e.value3}}{{e.average}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Hardness Test }}\\n {{#if @parsedData.hardness_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.hardness\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.hardness_test.test_report}}\\n {{#if @parsedData.hardness_test.type}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.type\\\"}}:\\n {{@parsedData.hardness_test.type}}{{/if}}\\n

\\n {{#if @parsedData.hardness_test.entries.length}}\\n \\n \\n \\n \\n \\n \\n {{#each @parsedData.hardness_test.entries as |e|}}\\n \\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.tests.location\\\"}}{{t \\\"routes.digitalize-pqr.review.tests.value\\\"}}
{{e.location}}{{e.value}}
\\n {{/if}}\\n {{/if}}\\n\\n {{! Chemical Analysis }}\\n {{#if @parsedData.chemical_analysis_test}}\\n
{{t \\\"routes.digitalize-pqr.review.tests.chemical-analysis\\\"}}
\\n

\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{@parsedData.chemical_analysis_test.report_name}}\\n

\\n
\\n {{#each\\n (array\\n (hash label=\\\"C\\\" value=@parsedData.chemical_analysis_test.carbon)\\n (hash label=\\\"Mn\\\" value=@parsedData.chemical_analysis_test.manganese)\\n (hash label=\\\"Si\\\" value=@parsedData.chemical_analysis_test.silicon)\\n (hash label=\\\"Cr\\\" value=@parsedData.chemical_analysis_test.chromium)\\n (hash label=\\\"Ni\\\" value=@parsedData.chemical_analysis_test.nickel)\\n (hash label=\\\"Mo\\\" value=@parsedData.chemical_analysis_test.molybdenum)\\n (hash label=\\\"Cu\\\" value=@parsedData.chemical_analysis_test.copper)\\n (hash label=\\\"P\\\" value=@parsedData.chemical_analysis_test.phosphorus)\\n (hash label=\\\"S\\\" value=@parsedData.chemical_analysis_test.sulphur)\\n (hash label=\\\"Al\\\" value=@parsedData.chemical_analysis_test.aluminum)\\n (hash label=\\\"Ti\\\" value=@parsedData.chemical_analysis_test.titanium)\\n )\\n as |element|\\n }}\\n {{#if element.value}}\\n
\\n
\\n \\n
{{element.value}}
\\n
\\n
\\n {{/if}}\\n {{/each}}\\n
\\n {{/if}}\\n\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-mechanical-tests.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-mechanical-tests.hbs\"}});\nimport Component from '@glimmer/component';\nimport type { PQRParseApiResponse } from '../types/pqr-api-response-types';\n\ninterface SectionMechanicalTestsArgs {\n parsedData: PQRParseApiResponse;\n}\n\nexport default class ReviewSectionMechanicalTestsComponent extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{#each\\n (array\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.visual\\\")\\n data=@parsedData.visual_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.penetrant\\\")\\n data=@parsedData.penetrant_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.magnetic\\\")\\n data=@parsedData.magnetic_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.ultrasonic\\\")\\n data=@parsedData.ultrasonic_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.radiographic\\\")\\n data=@parsedData.radiographic_test\\n )\\n )\\n as |test|\\n }}\\n {{#if test.data}}\\n \\n \\n
\\n \\n
\\n {{#if test.data.report_name}}\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{test.data.report_name}}\\n {{/if}}\\n {{#if test.data.result}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.result\\\"}}:\\n {{test.data.result}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n {{/if}}\\n {{/each}}\\n\\n\\n\", {\"contents\":\"\\n\\n {{#each\\n (array\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.visual\\\")\\n data=@parsedData.visual_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.penetrant\\\")\\n data=@parsedData.penetrant_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.magnetic\\\")\\n data=@parsedData.magnetic_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.ultrasonic\\\")\\n data=@parsedData.ultrasonic_test\\n )\\n (hash\\n label=(t \\\"routes.digitalize-pqr.review.tests.radiographic\\\")\\n data=@parsedData.radiographic_test\\n )\\n )\\n as |test|\\n }}\\n {{#if test.data}}\\n \\n \\n
\\n \\n
\\n {{#if test.data.report_name}}\\n {{t \\\"routes.digitalize-pqr.review.tests.report\\\"}}:\\n {{test.data.report_name}}\\n {{/if}}\\n {{#if test.data.result}}\\n —\\n {{t \\\"routes.digitalize-pqr.review.tests.result\\\"}}:\\n {{test.data.result}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n {{/if}}\\n {{/each}}\\n\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-ndt-results.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-ndt-results.hbs\"}});\nimport Component from '@glimmer/component';\nimport type { PQRParseApiResponse } from '../types/pqr-api-response-types';\n\ninterface SectionNdtResultsArgs {\n parsedData: PQRParseApiResponse;\n}\n\nexport default class ReviewSectionNdtResultsComponent extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{method.method}}\\n \\n {{#if this.parsedPreparationMethodsHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedPreparationMethodsHint}}\\n \\n {{/if}}\\n \\n \\n\\n\\n\", {\"contents\":\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{method.method}}\\n \\n {{#if this.parsedPreparationMethodsHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedPreparationMethodsHint}}\\n \\n {{/if}}\\n \\n \\n\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-other-details.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-other-details.hbs\"}});\nimport Component from '@glimmer/component';\nimport type { PQRParseApiResponse } from '../types/pqr-api-response-types';\n\ninterface SectionOtherDetailsArgs {\n backGouging: string;\n pulsedWelding: string;\n torchAngleMin: number | null;\n torchAngleMax: number | null;\n electrodeType1: string;\n electrodeType2: string;\n electrodeType3: string;\n stickOut1: string;\n stickOut2: string;\n stickOut3: string;\n gasNozzleDiameter1: number | null;\n gasNozzleDiameter2: number | null;\n gasNozzleDiameter3: number | null;\n weaving1: string;\n weaving2: string;\n weaving3: string;\n oscillation1: string;\n oscillation2: string;\n oscillation3: string;\n selectedPreparationMethods: unknown[];\n preparationMethodOptions: unknown[];\n unitLabel: string;\n // Parsed data for hint computation\n parsedData: PQRParseApiResponse | null;\n // Callbacks\n onUpdate: (field: string, value: unknown) => void;\n onSetPreparationMethods: (methods: unknown[]) => void;\n}\n\nexport default class ReviewSectionOtherDetailsComponent extends Component {\n get parsedPreparationMethodsHint(): string {\n const methods = this.args.parsedData?.preparation_methods;\n if (Array.isArray(methods)) return methods.join(', ');\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{#if @industryCodeMismatchWarning}}\\n
\\n \\n {{@industryCodeMismatchWarning}}\\n \\n
\\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{unit.label}}\\n \\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n \\n \\n\", {\"contents\":\"\\n\\n {{#if @industryCodeMismatchWarning}}\\n
\\n \\n {{@industryCodeMismatchWarning}}\\n \\n
\\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{unit.label}}\\n \\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n \\n \\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-standard.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-standard.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { PQRParseApiResponse, PQRValidationMappings } from '../types/pqr-api-response-types';\nimport { parsedStandardHint, parsedUnitSystemHint } from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionStandardArgs {\n certificateNumber: string;\n selectedStandard: unknown;\n selectedUnitSystem: unknown;\n standardOptions: unknown[];\n unitSystemOptions: unknown[];\n industryCodeMismatchWarning: string | null;\n errors: Record> | undefined;\n // Parsed data for hint computation\n parsedData: PQRParseApiResponse | null;\n mappings: PQRValidationMappings | null;\n // Callback\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionStandardComponent extends Component {\n get parsedStandardHint() {\n return parsedStandardHint(this.args.mappings, this.args.parsedData?.standard);\n }\n\n get parsedUnitSystemHint() {\n return parsedUnitSystemHint(this.args.parsedData?.unit_system);\n }\n\n @action setStandard(standard: unknown) {\n this.args.onUpdate('selectedStandard', standard);\n }\n\n @action setUnitSystem(unitSystem: unknown) {\n this.args.onUpdate('selectedUnitSystem', unitSystem);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n {{#if this.parsedWeldTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWeldTypeHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pt.label}}\\n \\n {{#if this.parsedProductTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedProductTypeHint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Processes 1/2/3 }}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess1Hint}}\\n \\n {{this.parsedProcess1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess2Hint}}\\n \\n {{this.parsedProcess2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess3Hint}}\\n \\n {{this.parsedProcess3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Positions 1/2/3 }}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition1Hint}}\\n \\n {{this.parsedPosition1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition2Hint}}\\n \\n {{this.parsedPosition2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition3Hint}}\\n \\n {{this.parsedPosition3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Transfer Modes 1/2/3 }}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode1Hint}}\\n \\n {{this.parsedTransferMode1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode2Hint}}\\n \\n {{this.parsedTransferMode2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode3Hint}}\\n \\n {{this.parsedTransferMode3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Type of Current 1/2/3 }}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent1Hint}}\\n \\n {{this.parsedTypeCurrent1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent2Hint}}\\n \\n {{this.parsedTypeCurrent2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent3Hint}}\\n \\n {{this.parsedTypeCurrent3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Mechanization 1/2/3 }}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization1Hint}}\\n \\n {{this.parsedProcessMecanization1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization2Hint}}\\n \\n {{this.parsedProcessMecanization2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization3Hint}}\\n \\n {{this.parsedProcessMecanization3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n\", {\"contents\":\"\\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n {{#if this.parsedWeldTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWeldTypeHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pt.label}}\\n \\n {{#if this.parsedProductTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedProductTypeHint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Processes 1/2/3 }}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess1Hint}}\\n \\n {{this.parsedProcess1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess2Hint}}\\n \\n {{this.parsedProcess2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess3Hint}}\\n \\n {{this.parsedProcess3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Positions 1/2/3 }}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition1Hint}}\\n \\n {{this.parsedPosition1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition2Hint}}\\n \\n {{this.parsedPosition2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition3Hint}}\\n \\n {{this.parsedPosition3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Transfer Modes 1/2/3 }}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode1Hint}}\\n \\n {{this.parsedTransferMode1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode2Hint}}\\n \\n {{this.parsedTransferMode2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode3Hint}}\\n \\n {{this.parsedTransferMode3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Type of Current 1/2/3 }}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent1Hint}}\\n \\n {{this.parsedTypeCurrent1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent2Hint}}\\n \\n {{this.parsedTypeCurrent2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent3Hint}}\\n \\n {{this.parsedTypeCurrent3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Mechanization 1/2/3 }}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization1Hint}}\\n \\n {{this.parsedProcessMecanization1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization2Hint}}\\n \\n {{this.parsedProcessMecanization2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization3Hint}}\\n \\n {{this.parsedProcessMecanization3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-test-piece.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-test-piece.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { PQRParseApiResponse, PQRValidationMappings } from '../types/pqr-api-response-types';\nimport {\n parsedWeldTypeHint,\n parsedProductTypeHint,\n parsedProcessHint,\n parsedPositionHint,\n parsedTransferModeHint,\n parsedTypeCurrentHint,\n parsedProcessMecanizationHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionTestPieceArgs {\n // Selected values (parent owns state)\n selectedWeldType: unknown;\n selectedProductType: unknown;\n selectedWeldingProcess1: unknown;\n selectedWeldingProcess2: unknown;\n selectedWeldingProcess3: unknown;\n selectedPosition1: unknown;\n selectedPosition2: unknown;\n selectedPosition3: unknown;\n selectedTransferMode1: unknown;\n selectedTransferMode2: unknown;\n selectedTransferMode3: unknown;\n selectedTypeCurrent1: unknown;\n selectedTypeCurrent2: unknown;\n selectedTypeCurrent3: unknown;\n selectedMecanization1: unknown;\n selectedMecanization2: unknown;\n selectedMecanization3: unknown;\n // Options\n weldTypeOptions: unknown[];\n productTypeOptions: unknown[];\n weldingProcessOptions: unknown[];\n weldingPositionOptions: unknown[];\n arcTransferModeOptions: unknown[];\n typeCurrentPolarityOptions: unknown[];\n processMecanizationOptions: unknown[];\n // Parsed data for hint computation\n parsedData: PQRParseApiResponse | null;\n mappings: PQRValidationMappings | null;\n // Callback\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionTestPieceComponent extends Component {\n // ── Hint getters ──────────────────────────────────────────\n\n get parsedWeldTypeHint() {\n return parsedWeldTypeHint(this.args.mappings, this.args.parsedData?.test_piece_details?.weld_type);\n }\n\n get parsedProductTypeHint() {\n return parsedProductTypeHint(this.args.parsedData?.test_piece_details?.product_type);\n }\n\n get parsedProcess1Hint() {\n return parsedProcessHint(this.args.mappings, 1, this.args.parsedData?.test_piece_details?.welding_process_1);\n }\n\n get parsedProcess2Hint() {\n return parsedProcessHint(this.args.mappings, 2, this.args.parsedData?.test_piece_details?.welding_process_2);\n }\n\n get parsedProcess3Hint() {\n return parsedProcessHint(this.args.mappings, 3, this.args.parsedData?.test_piece_details?.welding_process_3);\n }\n\n get parsedPosition1Hint() {\n return parsedPositionHint(this.args.mappings, 1, this.args.parsedData?.test_piece_details?.welding_position_1);\n }\n\n get parsedPosition2Hint() {\n return parsedPositionHint(this.args.mappings, 2, this.args.parsedData?.test_piece_details?.welding_position_2);\n }\n\n get parsedPosition3Hint() {\n return parsedPositionHint(this.args.mappings, 3, this.args.parsedData?.test_piece_details?.welding_position_3);\n }\n\n get parsedTransferMode1Hint() {\n return parsedTransferModeHint(this.args.mappings, 1, this.args.parsedData?.test_piece_details?.transfer_mode_1);\n }\n\n get parsedTransferMode2Hint() {\n return parsedTransferModeHint(this.args.mappings, 2, this.args.parsedData?.test_piece_details?.transfer_mode_2);\n }\n\n get parsedTransferMode3Hint() {\n return parsedTransferModeHint(this.args.mappings, 3, this.args.parsedData?.test_piece_details?.transfer_mode_3);\n }\n\n get parsedTypeCurrent1Hint() {\n return parsedTypeCurrentHint(this.args.mappings, 1, this.args.parsedData?.test_piece_details?.type_of_current_1);\n }\n\n get parsedTypeCurrent2Hint() {\n return parsedTypeCurrentHint(this.args.mappings, 2, this.args.parsedData?.test_piece_details?.type_of_current_2);\n }\n\n get parsedTypeCurrent3Hint() {\n return parsedTypeCurrentHint(this.args.mappings, 3, this.args.parsedData?.test_piece_details?.type_of_current_3);\n }\n\n get parsedProcessMecanization1Hint() {\n return parsedProcessMecanizationHint(this.args.mappings, 1, this.args.parsedData?.test_piece_details?.welding_process_mechanization_1);\n }\n\n get parsedProcessMecanization2Hint() {\n return parsedProcessMecanizationHint(this.args.mappings, 2, this.args.parsedData?.test_piece_details?.welding_process_mechanization_2);\n }\n\n get parsedProcessMecanization3Hint() {\n return parsedProcessMecanizationHint(this.args.mappings, 3, this.args.parsedData?.test_piece_details?.welding_process_mechanization_3);\n }\n\n // ── Setter actions ────────────────────────────────────────\n\n @action setWeldType(val: unknown) { this.args.onUpdate('selectedWeldType', val); }\n @action setProductType(val: unknown) { this.args.onUpdate('selectedProductType', val); }\n @action setWeldingProcess1(val: unknown) { this.args.onUpdate('selectedWeldingProcess1', val); }\n @action setWeldingProcess2(val: unknown) { this.args.onUpdate('selectedWeldingProcess2', val); }\n @action setWeldingProcess3(val: unknown) { this.args.onUpdate('selectedWeldingProcess3', val); }\n @action setPosition1(val: unknown) { this.args.onUpdate('selectedPosition1', val); }\n @action setPosition2(val: unknown) { this.args.onUpdate('selectedPosition2', val); }\n @action setPosition3(val: unknown) { this.args.onUpdate('selectedPosition3', val); }\n @action setTransferMode1(val: unknown) { this.args.onUpdate('selectedTransferMode1', val); }\n @action setTransferMode2(val: unknown) { this.args.onUpdate('selectedTransferMode2', val); }\n @action setTransferMode3(val: unknown) { this.args.onUpdate('selectedTransferMode3', val); }\n @action setTypeCurrent1(val: unknown) { this.args.onUpdate('selectedTypeCurrent1', val); }\n @action setTypeCurrent2(val: unknown) { this.args.onUpdate('selectedTypeCurrent2', val); }\n @action setTypeCurrent3(val: unknown) { this.args.onUpdate('selectedTypeCurrent3', val); }\n @action setMecanization1(val: unknown) { this.args.onUpdate('selectedMecanization1', val); }\n @action setMecanization2(val: unknown) { this.args.onUpdate('selectedMecanization2', val); }\n @action setMecanization3(val: unknown) { this.args.onUpdate('selectedMecanization3', val); }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\", {\"contents\":\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-thermal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-thermal.hbs\"}});\nimport Component from '@glimmer/component';\n\ninterface SectionThermalArgs {\n preheatTemperature: number | null;\n interpassTemperature: number | null;\n postHeatTemperature: number | null;\n postHeatTime: number | null;\n pwhtTemperature: number | null;\n pwhtTime: number | null;\n pwhtHeatingRate: number | null;\n pwhtCoolingRate: number | null;\n temperatureLabel: string;\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionThermalComponent extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{! Welding Details }}\\n \\n \\n \\n {{#if this.parsedWeldingDetailsHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWeldingDetailsHint}}\\n \\n {{/if}}\\n \\n \\n\\n\\n\", {\"contents\":\"\\n {{! Welding Details }}\\n \\n \\n \\n {{#if this.parsedWeldingDetailsHint}}\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.parsed-value\\\"}}:\\n {{this.parsedWeldingDetailsHint}}\\n \\n {{/if}}\\n \\n \\n\\n\\n\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-welding-details.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-welding-details.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { PQRParseApiResponse } from '../types/pqr-api-response-types';\nimport { parsedWeldingDetailsHint } from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionWeldingDetailsArgs {\n weldingDetailOptions: unknown[];\n weldingLayers: unknown[];\n selectedWeldType: unknown;\n // Parsed data for hint computation\n parsedData: PQRParseApiResponse | null;\n // Callback\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionWeldingDetailsComponent extends Component {\n get parsedWeldingDetailsHint() {\n return parsedWeldingDetailsHint(this.args.parsedData?.test_piece_details?.welding_details);\n }\n\n @action setWeldingDetails(details: unknown[]) {\n this.args.onUpdate('weldingLayers', details || []);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @passes as |pass index|}}\\n {{#if (eq index this.currentEditingPassIndex)}}\\n {{! ═══ EDIT MODE: Expanded form ═══ }}\\n \\n \\n \\n {{else}}\\n {{! ═══ READ-ONLY MODE: Summary row ═══ }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.passes.pass-no\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.process\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.filler-material\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.current\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.voltage\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.travel-speed\\\" unit=@travelSpeedLabel}}{{t \\\"routes.digitalize-pqr.review.passes.wire-feed\\\" unit=@wireFeedSpeedLabel}}{{t \\\"routes.digitalize-pqr.review.passes.heat-input\\\" unit=@heatInputLabel}}{{t \\\"routes.digitalize-pqr.review.passes.current-type\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.arc-transfer\\\"}}
\\n
\\n {{! Row 1: Pass No, Layer, Process, Filler Material }}\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n \\n {{l.label}}\\n \\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if pass.parsedWeldingProcess}}\\n \\n {{pass.parsedWeldingProcess}}\\n \\n {{/if}}\\n \\n
\\n \\n \\n \\n {{#if pass.parsedFillerMaterial}}\\n \\n {{pass.parsedFillerMaterial}}\\n \\n {{/if}}\\n \\n \\n {{! Row 2: Current, Voltage }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{! Row 3: Travel Speed, Wire Feed Speed }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{! Row 4: Heat Input, Current Type, Arc Transfer }}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if pass.parsedCurrentType}}\\n \\n {{pass.parsedCurrentType}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if pass.parsedArcTransferMode}}\\n \\n {{pass.parsedArcTransferMode}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Row 5: Actions }}\\n \\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.done\\\"}}\\n \\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.delete\\\"}}\\n \\n
\\n
\\n
\\n
\\n
{{pass.passNo}}{{if\\n pass.selectedWeldingProcess\\n pass.selectedWeldingProcess.shortDesignation\\n pass.parsedWeldingProcess\\n }}{{if\\n pass.selectedFillerMaterial\\n pass.selectedFillerMaterial.classification.classification\\n pass.parsedFillerMaterial\\n }}{{format-range pass.currentMin pass.currentMax}}{{format-range pass.voltageMin pass.voltageMax}}{{format-range pass.travelSpeedMin pass.travelSpeedMax}}{{format-range pass.wireFeedSpeedMin pass.wireFeedSpeedMax}}{{format-range pass.heatInputMin pass.heatInputMax}}{{if\\n pass.selectedCurrentType\\n pass.selectedCurrentType.typeCurrent\\n pass.parsedCurrentType\\n }}{{if\\n pass.selectedArcTransferMode\\n pass.selectedArcTransferMode.transferMode\\n pass.parsedArcTransferMode\\n }}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.add-pass\\\"}}\\n \\n\\n\\n\\n{{! Confirmation Modal for Pass Deletion }}\\n{{#if (not-eq this.pendingPassDeleteIndex null)}}\\n \\n \\n

\\n {{t \\\"routes.digitalize-pqr.review.passes.confirm-delete-message\\\"}}\\n

\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.delete\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @passes as |pass index|}}\\n {{#if (eq index this.currentEditingPassIndex)}}\\n {{! ═══ EDIT MODE: Expanded form ═══ }}\\n \\n \\n \\n {{else}}\\n {{! ═══ READ-ONLY MODE: Summary row ═══ }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-pqr.review.passes.pass-no\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.process\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.filler-material\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.current\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.voltage\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.travel-speed\\\" unit=@travelSpeedLabel}}{{t \\\"routes.digitalize-pqr.review.passes.wire-feed\\\" unit=@wireFeedSpeedLabel}}{{t \\\"routes.digitalize-pqr.review.passes.heat-input\\\" unit=@heatInputLabel}}{{t \\\"routes.digitalize-pqr.review.passes.current-type\\\"}}{{t \\\"routes.digitalize-pqr.review.passes.arc-transfer\\\"}}
\\n
\\n {{! Row 1: Pass No, Layer, Process, Filler Material }}\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n \\n {{l.label}}\\n \\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if pass.parsedWeldingProcess}}\\n \\n {{pass.parsedWeldingProcess}}\\n \\n {{/if}}\\n \\n
\\n \\n \\n \\n {{#if pass.parsedFillerMaterial}}\\n \\n {{pass.parsedFillerMaterial}}\\n \\n {{/if}}\\n \\n \\n {{! Row 2: Current, Voltage }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{! Row 3: Travel Speed, Wire Feed Speed }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{! Row 4: Heat Input, Current Type, Arc Transfer }}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if pass.parsedCurrentType}}\\n \\n {{pass.parsedCurrentType}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if pass.parsedArcTransferMode}}\\n \\n {{pass.parsedArcTransferMode}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Row 5: Actions }}\\n \\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.done\\\"}}\\n \\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.delete\\\"}}\\n \\n
\\n
\\n
\\n
\\n
{{pass.passNo}}{{if\\n pass.selectedWeldingProcess\\n pass.selectedWeldingProcess.shortDesignation\\n pass.parsedWeldingProcess\\n }}{{if\\n pass.selectedFillerMaterial\\n pass.selectedFillerMaterial.classification.classification\\n pass.parsedFillerMaterial\\n }}{{format-range pass.currentMin pass.currentMax}}{{format-range pass.voltageMin pass.voltageMax}}{{format-range pass.travelSpeedMin pass.travelSpeedMax}}{{format-range pass.wireFeedSpeedMin pass.wireFeedSpeedMax}}{{format-range pass.heatInputMin pass.heatInputMax}}{{if\\n pass.selectedCurrentType\\n pass.selectedCurrentType.typeCurrent\\n pass.parsedCurrentType\\n }}{{if\\n pass.selectedArcTransferMode\\n pass.selectedArcTransferMode.transferMode\\n pass.parsedArcTransferMode\\n }}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.add-pass\\\"}}\\n \\n\\n\\n\\n{{! Confirmation Modal for Pass Deletion }}\\n{{#if (not-eq this.pendingPassDeleteIndex null)}}\\n \\n \\n

\\n {{t \\\"routes.digitalize-pqr.review.passes.confirm-delete-message\\\"}}\\n

\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n {{t \\\"routes.digitalize-pqr.review.passes.delete\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-pqr/review/section-welding-passes.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/review/section-welding-passes.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport type IntlService from 'ember-intl/services/intl';\nimport EditablePass from 'weldnote/components/digitalize-pqr/types/editable-pass';\n\ninterface SectionWeldingPassesArgs {\n passes: EditablePass[];\n weldingProcessOptions: unknown[];\n typeCurrentPolarityOptions: unknown[];\n arcTransferModeOptions: unknown[];\n industryCode: unknown;\n // Layer mappings (for layer auto-populate)\n selectedWeldingProcess1: unknown;\n selectedWeldingProcess2: unknown;\n selectedWeldingProcess3: unknown;\n fillerMaterial1: unknown;\n fillerMaterial2: unknown;\n fillerMaterial3: unknown;\n selectedTransferMode1: unknown;\n selectedTransferMode2: unknown;\n selectedTransferMode3: unknown;\n // Unit labels\n travelSpeedLabel: string;\n wireFeedSpeedLabel: string;\n heatInputLabel: string;\n // Callbacks\n onPassesChanged: (passes: EditablePass[]) => void;\n}\n\nexport default class ReviewSectionWeldingPassesComponent extends Component {\n @service declare intl: IntlService;\n\n @tracked currentEditingPassIndex: number | null = null;\n @tracked pendingPassDeleteIndex: number | null = null;\n\n get isEditingPass(): boolean {\n return this.currentEditingPassIndex !== null;\n }\n\n get layerOptions() {\n return [\n { value: 'ROOT', label: this.intl.t('routes.digitalize-pqr.review.passes.layer-root') },\n { value: 'FILL', label: this.intl.t('routes.digitalize-pqr.review.passes.layer-fill') },\n { value: 'CAP', label: this.intl.t('routes.digitalize-pqr.review.passes.layer-cap') },\n ];\n }\n\n @action\n addPass() {\n const newPasses = [...this.args.passes, new EditablePass({})];\n this.args.onPassesChanged(newPasses);\n this.currentEditingPassIndex = newPasses.length - 1;\n }\n\n @action\n editPass(index: number) {\n this.currentEditingPassIndex = index;\n }\n\n @action\n closePassEditor() {\n this.currentEditingPassIndex = null;\n }\n\n @action\n requestRemovePass(index: number) {\n this.pendingPassDeleteIndex = index;\n }\n\n @action\n cancelPassDelete() {\n this.pendingPassDeleteIndex = null;\n }\n\n @action\n confirmPassDelete() {\n let index = this.pendingPassDeleteIndex;\n this.pendingPassDeleteIndex = null;\n if (index === null) return;\n let newPasses = this.args.passes.filter((_: unknown, i: number) => i !== index);\n this.args.onPassesChanged(newPasses);\n if (this.currentEditingPassIndex === index) {\n this.currentEditingPassIndex = null;\n } else if (this.currentEditingPassIndex !== null && this.currentEditingPassIndex > index) {\n this.currentEditingPassIndex = this.currentEditingPassIndex - 1;\n }\n }\n\n @action\n updatePass(index: number, field: string, event: Event | unknown) {\n let pass = this.args.passes[index];\n if (pass) {\n let value = (event as any)?.target?.value ?? event;\n (pass as any)[field] = value;\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n\n @action\n updatePassWeldingProcess(index: number, process: unknown) {\n let pass = this.args.passes[index];\n if (pass) {\n pass.selectedWeldingProcess = process;\n pass.selectedFillerMaterial = null;\n\n // Auto-assign layer if the selected process matches one of the PQR processes\n const inferredLayer = this._inferLayerFromProcess(process);\n if (inferredLayer) {\n this.updatePassLayer(index, inferredLayer);\n return; // updatePassLayer already calls onPassesChanged\n }\n\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n\n @action\n updatePassFillerMaterial(index: number, fillerMaterial: unknown) {\n let pass = this.args.passes[index];\n if (pass) {\n pass.selectedFillerMaterial = fillerMaterial;\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n\n @action\n clearPassFillerMaterial(index: number) {\n let pass = this.args.passes[index];\n if (pass) {\n pass.selectedFillerMaterial = null;\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n\n @action\n updatePassCurrentType(index: number, currentType: unknown) {\n let pass = this.args.passes[index];\n if (pass) {\n pass.selectedCurrentType = currentType;\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n\n @action\n updatePassArcTransferMode(index: number, arcTransferMode: unknown) {\n let pass = this.args.passes[index];\n if (pass) {\n pass.selectedArcTransferMode = arcTransferMode;\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n\n _inferLayerFromProcess(process: unknown): { value: string; label: string } | null {\n if (!process) return null;\n if (process === this.args.selectedWeldingProcess1 && this.args.selectedWeldingProcess1) {\n return this.layerOptions.find((o) => o.value === 'ROOT') || null;\n }\n if (process === this.args.selectedWeldingProcess2 && this.args.selectedWeldingProcess2) {\n return this.layerOptions.find((o) => o.value === 'FILL') || null;\n }\n if (process === this.args.selectedWeldingProcess3 && this.args.selectedWeldingProcess3) {\n return this.layerOptions.find((o) => o.value === 'CAP') || null;\n }\n return null;\n }\n\n @action\n updatePassLayer(index: number, layerOption: { value: string; label: string } | null) {\n let pass = this.args.passes[index];\n if (pass) {\n pass.layer = layerOption;\n\n if (layerOption) {\n const layerValue = layerOption.value;\n const layerMapping: Record = {\n ROOT: {\n process: this.args.selectedWeldingProcess1,\n filler: this.args.fillerMaterial1,\n arcTransfer: this.args.selectedTransferMode1,\n },\n FILL: {\n process: this.args.selectedWeldingProcess2,\n filler: this.args.fillerMaterial2,\n arcTransfer: this.args.selectedTransferMode2,\n },\n CAP: {\n process: this.args.selectedWeldingProcess3,\n filler: this.args.fillerMaterial3,\n arcTransfer: this.args.selectedTransferMode3,\n },\n };\n\n const mapping = layerMapping[layerValue];\n if (mapping) {\n pass.selectedWeldingProcess = mapping.process || null;\n pass.selectedFillerMaterial = mapping.filler || null;\n pass.selectedArcTransferMode = mapping.arcTransfer || null;\n }\n } else {\n pass.selectedWeldingProcess = null;\n pass.selectedFillerMaterial = null;\n pass.selectedArcTransferMode = null;\n }\n\n this.args.onPassesChanged([...this.args.passes]);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/digitalize-pqr/status-badge.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/status-badge.hbs\"}});\nimport templateOnlyComponent from '@ember/component/template-only';\n\ninterface StatusBadgeArgs {\n status?: string;\n progress?: number;\n progressDescription?: string;\n}\n\nexport default templateOnlyComponent();\n","import { tracked } from '@glimmer/tracking';\n\nexport interface WeldPassData {\n pass_no?: string;\n welding_process?: string;\n filler_material?: { specification?: string; classification?: string };\n current_type?: string;\n arc_transfer_mode?: string;\n current_min?: number | null;\n current_max?: number | null;\n voltage_min?: number | null;\n voltage_max?: number | null;\n wire_feed_speed_min?: number | null;\n wire_feed_speed_max?: number | null;\n travel_speed_min?: number | null;\n travel_speed_max?: number | null;\n heat_input_min?: number | null;\n heat_input_max?: number | null;\n}\n\n/**\n * Tracked POJO representing a single editable welding pass row in the review form.\n *\n * Contains two kinds of data per field category:\n * - **Selected entities** (e.g. `selectedWeldingProcess`) — chosen by the user via dropdowns.\n * - **Parsed hints** (e.g. `parsedWeldingProcess`) — raw text extracted from the PDF parser,\n * shown as helper text to guide the user.\n * - **Numeric fields** (current, voltage, wire feed speed, travel speed, heat input) — min/max pairs.\n *\n * @param data - Raw pass object from `parsedData.passes[]` with snake_case keys.\n */\nexport default class EditablePass {\n @tracked passNo = '';\n /** Layer selection (ROOT, FILL, CAP) */\n @tracked layer: { value: string; label: string } | null = null;\n @tracked selectedWeldingProcess: unknown = null;\n @tracked selectedFillerMaterial: unknown = null;\n @tracked selectedCurrentType: unknown = null;\n @tracked selectedArcTransferMode: unknown = null;\n @tracked parsedWeldingProcess = '';\n @tracked parsedFillerMaterial = '';\n @tracked parsedCurrentType = '';\n @tracked parsedArcTransferMode = '';\n @tracked currentMin: number | null = null;\n @tracked currentMax: number | null = null;\n @tracked voltageMin: number | null = null;\n @tracked voltageMax: number | null = null;\n @tracked wireFeedSpeedMin: number | null = null;\n @tracked wireFeedSpeedMax: number | null = null;\n @tracked travelSpeedMin: number | null = null;\n @tracked travelSpeedMax: number | null = null;\n @tracked heatInputMin: number | null = null;\n @tracked heatInputMax: number | null = null;\n\n constructor(data: WeldPassData = {}) {\n this.passNo = data.pass_no || '';\n // Store parsed values for hints (entities will be null, user selects from dropdown)\n this.parsedWeldingProcess = data.welding_process || '';\n this.parsedFillerMaterial =\n [data.filler_material?.specification, data.filler_material?.classification]\n .filter(Boolean)\n .join(' / ') || '';\n this.parsedCurrentType = data.current_type || '';\n this.parsedArcTransferMode = data.arc_transfer_mode || '';\n // Numeric fields\n this.currentMin = data.current_min ?? null;\n this.currentMax = data.current_max ?? null;\n this.voltageMin = data.voltage_min ?? null;\n this.voltageMax = data.voltage_max ?? null;\n this.wireFeedSpeedMin = data.wire_feed_speed_min ?? null;\n this.wireFeedSpeedMax = data.wire_feed_speed_max ?? null;\n this.travelSpeedMin = data.travel_speed_min ?? null;\n this.travelSpeedMax = data.travel_speed_max ?? null;\n this.heatInputMin = data.heat_input_min ?? null;\n this.heatInputMax = data.heat_input_max ?? null;\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport type PqrStandard from 'weldnote/models/pqr-standard';\nimport type WeldType from 'weldnote/models/weld-type';\nimport type WeldingProcess from 'weldnote/models/welding-process';\nimport type ProcessMecanization from 'weldnote/models/process-mecanization';\nimport type WeldingPosition from 'weldnote/models/welding-position';\nimport type ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport type TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport type WeldingDetail from 'weldnote/models/welding-detail';\nimport type Company from 'weldnote/models/company';\nimport type ExaminingBody from 'weldnote/models/examining-body';\nimport type Welder from 'weldnote/models/welder';\nimport type Staff from 'weldnote/models/staff';\nimport type WPSModel from 'weldnote/models/welding-procedure-specification';\nimport type CertificationSpecialRequirement from 'weldnote/models/certification-special-requirement';\nimport type BaseMaterial from 'weldnote/models/base-material';\nimport type FillerMaterial from 'weldnote/models/filler-material';\nimport type FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport type Gas from 'weldnote/models/gas';\nimport type Flux from 'weldnote/models/flux';\nimport type GasCommercialDesignation from 'weldnote/models/gas-commercial-designation';\nimport type FluxCommercialDesignation from 'weldnote/models/flux-commercial-designation';\nimport type PreparationMethod from 'weldnote/models/preparation-method';\nimport type EditablePass from './editable-pass';\n\ninterface UnitSystemOption {\n key: string;\n label: string;\n}\n\ninterface ProductTypeOption {\n key: string;\n label: string;\n}\n\n/**\n * Strongly-typed form state for the PQR Review Modal.\n *\n * Holds all user-editable form data as @tracked properties.\n * The parent component owns an instance of this class and passes\n * individual fields down to section sub-components as args.\n *\n * The index signature allows dynamic property access in `updateField`\n * and resolve methods that build field names at runtime.\n */\nexport default class PQRFormState {\n [key: string]: any;\n\n // ── Section 1: Standard & Unit System ──────────────────────\n @tracked certificateNumber = '';\n @tracked selectedStandard: PqrStandard | null = null;\n @tracked selectedUnitSystem: UnitSystemOption | null = null;\n\n // ── Section 2: Test Piece Details ─────────────────────────\n @tracked selectedWeldType: WeldType | null = null;\n @tracked selectedProductType: ProductTypeOption | null = null;\n @tracked selectedWeldingProcess1: WeldingProcess | null = null;\n @tracked selectedWeldingProcess2: WeldingProcess | null = null;\n @tracked selectedWeldingProcess3: WeldingProcess | null = null;\n @tracked selectedMecanization1: ProcessMecanization | null = null;\n @tracked selectedMecanization2: ProcessMecanization | null = null;\n @tracked selectedMecanization3: ProcessMecanization | null = null;\n @tracked selectedPosition1: WeldingPosition | null = null;\n @tracked selectedPosition2: WeldingPosition | null = null;\n @tracked selectedPosition3: WeldingPosition | null = null;\n @tracked selectedTransferMode1: ArcTransferMode | null = null;\n @tracked selectedTransferMode2: ArcTransferMode | null = null;\n @tracked selectedTransferMode3: ArcTransferMode | null = null;\n @tracked selectedTypeCurrent1: TypeCurrentPolarity | null = null;\n @tracked selectedTypeCurrent2: TypeCurrentPolarity | null = null;\n @tracked selectedTypeCurrent3: TypeCurrentPolarity | null = null;\n @tracked weldingLayers: WeldingDetail[] = [];\n\n // ── Section 3: General Information ────────────────────────\n @tracked selectedCompany: Company | null = null;\n @tracked selectedExaminingBody: ExaminingBody | null = null;\n @tracked emissionDate: Date | null = null;\n @tracked selectedWelder: Welder | null = null;\n @tracked address = '';\n @tracked testsConductedBy = '';\n @tracked selectedWrittenBy: Staff | null = null;\n @tracked selectedWps: WPSModel | null = null;\n @tracked selectedSpecialRequirements: CertificationSpecialRequirement[] = [];\n @tracked notes = '';\n @tracked testNotes = '';\n\n // ── Section 4: Thermal Parameters ─────────────────────────\n @tracked preheatTemperature: number | null = null;\n @tracked interpassTemperature: number | null = null;\n @tracked postHeatTemperature: number | null = null;\n @tracked postHeatTime: number | null = null;\n @tracked pwhtTemperature: number | null = null;\n @tracked pwhtTime: number | null = null;\n @tracked pwhtHeatingRate: number | null = null;\n @tracked pwhtCoolingRate: number | null = null;\n\n // ── Section 5: Base Materials ─────────────────────────────\n @tracked baseMaterial1: BaseMaterial | null = null;\n @tracked baseMaterial1Thickness: number | null = null;\n @tracked baseMaterial1Diameter: number | null = null;\n @tracked baseMaterial2: BaseMaterial | null = null;\n @tracked baseMaterial2Thickness: number | null = null;\n @tracked baseMaterial2Diameter: number | null = null;\n @tracked weldedThickness: number | null = null;\n @tracked weldedDiameter: number | null = null;\n\n // ── Section 6: Filler Materials ───────────────────────────\n @tracked fillerMaterial1: FillerMaterial | null = null;\n @tracked fillerMaterial1Dimensions: string[] = [];\n @tracked fillerMaterial2: FillerMaterial | null = null;\n @tracked fillerMaterial2Dimensions: string[] = [];\n @tracked fillerMaterial3: FillerMaterial | null = null;\n @tracked fillerMaterial3Dimensions: string[] = [];\n @tracked fillerMaterialCommercialDesignation1: FillerMaterialCommercialDesignation | null = null;\n @tracked fillerMaterialCommercialDesignation2: FillerMaterialCommercialDesignation | null = null;\n @tracked fillerMaterialCommercialDesignation3: FillerMaterialCommercialDesignation | null = null;\n\n // ── Section 6: Shielding ──────────────────────────────────\n @tracked shielding1Type: string | null = null;\n @tracked shielding1Gas: Gas | null = null;\n @tracked shielding1Flux: Flux | null = null;\n @tracked shielding1GasMixture = '';\n @tracked shielding1FlowRateMin: number | null = null;\n @tracked shielding1FlowRateMax: number | null = null;\n @tracked shielding2Type: string | null = null;\n @tracked shielding2Gas: Gas | null = null;\n @tracked shielding2Flux: Flux | null = null;\n @tracked shielding2GasMixture = '';\n @tracked shielding2FlowRateMin: number | null = null;\n @tracked shielding2FlowRateMax: number | null = null;\n @tracked shielding3Type: string | null = null;\n @tracked shielding3Gas: Gas | null = null;\n @tracked shielding3Flux: Flux | null = null;\n @tracked shielding3GasMixture = '';\n @tracked shielding3FlowRateMin: number | null = null;\n @tracked shielding3FlowRateMax: number | null = null;\n @tracked backingType: string | null = null;\n @tracked backingGas: Gas | null = null;\n @tracked backingFlux: Flux | null = null;\n @tracked backingGasMixture = '';\n @tracked backingFlowRateMin: number | null = null;\n @tracked backingFlowRateMax: number | null = null;\n\n // ── Section 6: Gas/Flux Commercial Designations ───────────\n @tracked shielding1GasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked shielding2GasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked shielding3GasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked backingGasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked shielding1FluxCommercialDesignation: FluxCommercialDesignation | null = null;\n @tracked shielding2FluxCommercialDesignation: FluxCommercialDesignation | null = null;\n @tracked shielding3FluxCommercialDesignation: FluxCommercialDesignation | null = null;\n @tracked backingFluxCommercialDesignation: FluxCommercialDesignation | null = null;\n\n // ── Section 7: Welding Passes ─────────────────────────────\n @tracked passes: EditablePass[] = [];\n\n // ── Section 8: Other Details ──────────────────────────────\n @tracked backGouging = '';\n @tracked pulsedWelding = '';\n @tracked torchAngleMin: number | null = null;\n @tracked torchAngleMax: number | null = null;\n @tracked electrodeType1 = '';\n @tracked electrodeType2 = '';\n @tracked electrodeType3 = '';\n @tracked stickOut1 = '';\n @tracked stickOut2 = '';\n @tracked stickOut3 = '';\n @tracked gasNozzleDiameter1: number | null = null;\n @tracked gasNozzleDiameter2: number | null = null;\n @tracked gasNozzleDiameter3: number | null = null;\n @tracked weaving1 = '';\n @tracked weaving2 = '';\n @tracked weaving3 = '';\n @tracked oscillation1 = '';\n @tracked oscillation2 = '';\n @tracked oscillation3 = '';\n @tracked selectedPreparationMethods: PreparationMethod[] = [];\n\n /**\n * Reset all shielding sub-fields for a given prefix when the shielding type changes.\n * @param prefix - e.g. 'shielding1', 'shielding2', 'backing'.\n */\n clearShieldingFields(prefix: string) {\n this[`${prefix}Gas`] = null;\n this[`${prefix}Flux`] = null;\n this[`${prefix}GasMixture`] = '';\n this[`${prefix}FlowRateMin`] = null;\n this[`${prefix}FlowRateMax`] = null;\n this[`${prefix}GasCommercialDesignation`] = null;\n this[`${prefix}FluxCommercialDesignation`] = null;\n }\n\n /**\n * Reset all fields that depend on the selected standard's industry code.\n */\n resetStandardDependentFields() {\n this.selectedWeldType = null;\n this.selectedWeldingProcess1 = null;\n this.selectedWeldingProcess2 = null;\n this.selectedWeldingProcess3 = null;\n this.selectedPosition1 = null;\n this.selectedPosition2 = null;\n this.selectedPosition3 = null;\n this.selectedTransferMode1 = null;\n this.selectedTransferMode2 = null;\n this.selectedTransferMode3 = null;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n

\\n {{t \\\"routes.digitalize-pqr.sections.upload.description\\\"}}\\n

\\n\\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n\\n {{#let (file-queue name=\\\"digitalize-pqr-upload\\\" onFileAdded=this.uploadFile) as |queue|}}\\n \\n {{#if queue.files.length}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.messages.uploading\\\"}}\\n
\\n \\n {{queue.progress}}%\\n
\\n
\\n \\n {{else}}\\n \\n {{#if dropzone.active}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-pqr.messages.drop-files\\\"}}\\n

\\n
\\n {{else}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-pqr.messages.drag-drop\\\"}}\\n

\\n

\\n {{t\\n \\\"routes.digitalize-pqr.sections.upload.supported-formats\\\"\\n default=\\\"Supported format: PDF+Images (JPEG/PNG)\\\"\\n }}\\n

\\n {{#if this.isDropzoneDisabled}}\\n

\\n \\n {{t \\\"routes.digitalize-pqr.sections.upload.standard-required-hint\\\"}}\\n

\\n {{/if}}\\n \\n \\n \\n {{t \\\"routes.digitalize-pqr.buttons.select-files\\\"}}\\n \\n
\\n {{/if}}\\n \\n {{/if}}\\n
\\n {{/let}}\\n\\n {{#if this.isUploading}}\\n
\\n \\n

\\n {{#if (gt this.totalFilesToUpload 1)}}\\n {{t\\n \\\"routes.digitalize-pqr.messages.queuing-multiple\\\"\\n current=this.currentUploadNumber\\n total=this.totalFilesToUpload\\n }}\\n {{else}}\\n {{t \\\"routes.digitalize-pqr.messages.queuing\\\"}}\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.buttons.close\\\"}}\\n \\n \\n\\n\\n{{! Close confirmation dialog }}\\n{{#if this.showCloseWarning}}\\n \\n \\n

{{t \\\"routes.digitalize-pqr.modal.close-warning-message\\\"}}

\\n
\\n \\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"\\n \\n

\\n {{t \\\"routes.digitalize-pqr.sections.upload.description\\\"}}\\n

\\n\\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n\\n {{#let (file-queue name=\\\"digitalize-pqr-upload\\\" onFileAdded=this.uploadFile) as |queue|}}\\n \\n {{#if queue.files.length}}\\n
\\n \\n {{t \\\"routes.digitalize-pqr.messages.uploading\\\"}}\\n
\\n \\n {{queue.progress}}%\\n
\\n
\\n \\n {{else}}\\n \\n {{#if dropzone.active}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-pqr.messages.drop-files\\\"}}\\n

\\n
\\n {{else}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-pqr.messages.drag-drop\\\"}}\\n

\\n

\\n {{t\\n \\\"routes.digitalize-pqr.sections.upload.supported-formats\\\"\\n default=\\\"Supported format: PDF+Images (JPEG/PNG)\\\"\\n }}\\n

\\n {{#if this.isDropzoneDisabled}}\\n

\\n \\n {{t \\\"routes.digitalize-pqr.sections.upload.standard-required-hint\\\"}}\\n

\\n {{/if}}\\n \\n \\n \\n {{t \\\"routes.digitalize-pqr.buttons.select-files\\\"}}\\n \\n
\\n {{/if}}\\n \\n {{/if}}\\n
\\n {{/let}}\\n\\n {{#if this.isUploading}}\\n
\\n \\n

\\n {{#if (gt this.totalFilesToUpload 1)}}\\n {{t\\n \\\"routes.digitalize-pqr.messages.queuing-multiple\\\"\\n current=this.currentUploadNumber\\n total=this.totalFilesToUpload\\n }}\\n {{else}}\\n {{t \\\"routes.digitalize-pqr.messages.queuing\\\"}}\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n \\n \\n {{t \\\"routes.digitalize-pqr.review.buttons.close\\\"}}\\n \\n \\n\\n\\n{{! Close confirmation dialog }}\\n{{#if this.showCloseWarning}}\\n \\n \\n

{{t \\\"routes.digitalize-pqr.modal.close-warning-message\\\"}}

\\n
\\n \\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-pqr/upload-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-pqr/upload-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { dropTask, task } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport DS from 'ember-data';\nimport Constants from 'weldnote/utils/constants';\nimport PqrParseQueueService from 'weldnote/services/pqr-parse-queue';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport type WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport FileUpload from 'weldnote/models/file-upload';\nimport type PqrStandard from 'weldnote/models/pqr-standard';\n\nconst { FILE_CONTEXT } = Constants;\nconst MAX_FILE_SIZE = 50 * 1024 * 1024; // 50MB\n\ninterface UploadFile {\n name: string;\n size: number;\n type: string;\n upload: (url: string, options: { data: Record }) => Promise;\n}\n\ninterface FileUploadResult {\n filename: string;\n url: string;\n credentials: Record;\n fileUploadId: string;\n}\n\ninterface UploadError {\n fileName: string;\n error: unknown;\n}\n\ninterface UploadModalArgs {\n onClose: () => void;\n onUploadComplete?: () => void;\n}\n\nexport default class DigitalizePqrUploadModalComponent extends Component {\n @service declare intl: IntlService;\n @service declare fileService: any;\n @service declare store: DS.Store;\n @service declare alertMessage: AlertMessageService;\n @service declare pqrParseQueue: PqrParseQueueService;\n @service declare pqrParseMonitor: any;\n @service('weldnote-data') declare data: WeldnoteDataService;\n @service('weldcloud-notes-data') declare notesData: WeldcloudNotesData;\n\n @tracked showCloseWarning = false;\n @tracked selectedStandard: PqrStandard | null = null;\n\n // Multi-file upload tracking\n @tracked totalFilesToUpload = 0;\n @tracked filesUploaded = 0;\n @tracked uploadErrors: UploadError[] = [];\n _uploadQueue: UploadFile[] = [];\n\n constructor(owner: unknown, args: UploadModalArgs) {\n super(owner, args);\n this.loadStandards.perform();\n }\n\n loadStandards = task(this, { drop: true }, async () => {\n await (this.notesData as any).fetchStandards.perform();\n });\n\n get isLoadingStandards(): boolean {\n return this.loadStandards.isRunning;\n }\n\n get standardOptions(): PqrStandard[] {\n return (this.data as any).standardOptions;\n }\n\n get selectedIndustryCodeId(): string | null {\n if (this.selectedStandard) {\n return this.selectedStandard.industryCodeId || null;\n }\n return null;\n }\n\n get isUploading(): boolean {\n return this.processUploadQueueTask.isRunning;\n }\n\n get isDropzoneDisabled(): boolean {\n return !this.selectedStandard || this.isLoadingStandards;\n }\n\n get acceptedTypes(): string[] {\n return ['.pdf', 'application/pdf', '.jpg', 'image/jpeg', '.jpeg', 'image/jpeg', '.png', 'image/png'];\n }\n\n // Current file number being uploaded (1-indexed for display)\n get currentUploadNumber(): number {\n return this.filesUploaded + 1;\n }\n\n @action\n setStandard(standard: PqrStandard | null): void {\n this.selectedStandard = standard;\n }\n\n @action\n uploadFile(file: UploadFile): void {\n if (this.isDropzoneDisabled) {\n return;\n }\n\n // Add file to queue and start processing if not already running\n this._uploadQueue.push(file);\n this.totalFilesToUpload = this._uploadQueue.length + this.filesUploaded;\n\n if (!this.processUploadQueueTask.isRunning) {\n this.processUploadQueueTask.perform();\n }\n }\n\n processUploadQueueTask = dropTask(async () => {\n this.filesUploaded = 0;\n this.uploadErrors = [];\n\n while (this._uploadQueue.length > 0) {\n const file = this._uploadQueue.shift()!;\n // Update total in case more files were added while processing\n this.totalFilesToUpload = this._uploadQueue.length + this.filesUploaded + 1;\n\n try {\n await this._uploadSingleFile(file);\n this.filesUploaded++;\n } catch (error) {\n this.uploadErrors = [...this.uploadErrors, { fileName: file.name, error }];\n }\n }\n\n // All files processed - show results and close modal\n this._showUploadResults();\n });\n\n async _uploadSingleFile(file: UploadFile): Promise {\n let { size, name: filename, type: contentType } = file;\n\n // Upload to S3, and get the file-upload record\n let result: FileUploadResult = await this.fileService.getFileUploadRequest(\n filename,\n FILE_CONTEXT.DIGITALIZE_PQR,\n contentType,\n size\n );\n\n let { filename: newFilename, url, credentials, fileUploadId } = result;\n\n await file.upload(url, { data: { ...credentials, name: newFilename } });\n let upload: FileUpload = await this.store.findRecord('file-upload', fileUploadId);\n\n // Queue the file for parsing\n await this.queueFileForParsing(upload);\n }\n\n _showUploadResults(): void {\n const successCount = this.filesUploaded;\n const errorCount = this.uploadErrors.length;\n\n if (successCount > 0 && errorCount === 0) {\n // All successful\n if (successCount === 1) {\n this.alertMessage.success(this.intl.t('routes.digitalize-pqr.messages.file-queued'));\n } else {\n this.alertMessage.success(\n this.intl.t('routes.digitalize-pqr.messages.files-queued', { count: successCount })\n );\n }\n // Close modal and notify parent\n if (this.args.onUploadComplete) {\n this.args.onUploadComplete();\n }\n } else if (successCount > 0 && errorCount > 0) {\n // Partial success\n this.alertMessage.info(\n this.intl.t('routes.digitalize-pqr.messages.files-queued-with-errors', {\n successCount,\n errorCount,\n })\n );\n // Still close modal\n if (this.args.onUploadComplete) {\n this.args.onUploadComplete();\n }\n } else {\n // All failed - don't close modal, show error\n this.alertMessage.error(this.intl.t('routes.digitalize-pqr.errors.upload-failed'));\n }\n\n // Reset counters\n this.totalFilesToUpload = 0;\n this.filesUploaded = 0;\n }\n\n // Send the uploaded file to the PQR parse queue\n async queueFileForParsing(upload: FileUpload): Promise {\n const result = await this.pqrParseQueue.queueFile(\n parseInt(upload.id),\n upload.originalFilename,\n this.selectedIndustryCodeId\n );\n\n // Track the item in the global monitor for notifications\n if (result && result.queueItemId) {\n this.pqrParseMonitor.trackItem(result.queueItemId, upload.originalFilename);\n }\n }\n\n @action\n validateFile(file: UploadFile): boolean {\n if (!this.acceptedTypes.includes(file.type)) {\n this.alertMessage.error(this.intl.t('routes.digitalize-pqr.errors.invalid-file-type'));\n return false;\n }\n\n if (file.size > MAX_FILE_SIZE) {\n this.alertMessage.error(this.intl.t('routes.digitalize-pqr.errors.file-too-large'));\n return false;\n }\n\n return true;\n }\n\n @action\n requestClose(): void {\n if (this.isUploading) {\n // Show confirmation dialog\n this.showCloseWarning = true;\n } else {\n this.args.onClose();\n }\n }\n\n @action\n cancelClose(): void {\n this.showCloseWarning = false;\n }\n\n @action\n confirmClose(): void {\n // Cancel any pending uploads\n this._uploadQueue = [];\n this.processUploadQueueTask.cancelAll();\n this.showCloseWarning = false;\n\n // Close the modal\n this.args.onClose();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.review.loading\\\"}}

\\n
\\n {{else if this.loadError}}\\n
\\n \\n {{this.loadError}}\\n
\\n {{else}}\\n {{! ── Header bar with file info and PDF toggle ── }}\\n
\\n
\\n \\n {{@item.fileName}}\\n
\\n \\n \\n {{if\\n this.showDocument\\n (t \\\"routes.digitalize-welder-certificate.review.hide-pdf\\\")\\n (t \\\"routes.digitalize-welder-certificate.review.show-pdf\\\")\\n }}\\n \\n
\\n\\n {{! ── Main content: optional PDF + form ── }}\\n
\\n {{! Document Panel }}\\n {{#if this.showDocument}}\\n \\n {{#if this.pdfUrl}}\\n {{#if this.isImageFile}}\\n {{! Image viewer with zoom controls }}\\n
\\n \\n \\n \\n \\n {{this.imageZoom}}%\\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n \\n {{else}}\\n \\n {{/if}}\\n {{else}}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.review.pdf-not-available\\\"}}

\\n
\\n {{/if}}\\n \\n {{/if}}\\n\\n {{! Form Panel }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 1: Standard, Unit System, Certificate Type & Number\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 2: Test Piece Details\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 3: General Information\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 4: Base Materials\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 5: Consumables / Filler Materials\\n (Hidden for OPERATOR certificates not on AWS D1.1)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.canShowConsumables}}\\n \\n {{/if}}\\n\\n {{! ════════════════════════════════════════════════════\\n Section 6: Non-Destructive Tests (editable)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 7: Mechanical Tests (editable)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 8: Operator Details\\n (Only for OPERATOR certificates not on AWS D1.1)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n
\\n\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.buttons.reject\\\"}}\\n \\n \\n {{#if this.isApproving}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-welder-certificate.review.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\", {\"contents\":\"\\n \\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.review.loading\\\"}}

\\n
\\n {{else if this.loadError}}\\n
\\n \\n {{this.loadError}}\\n
\\n {{else}}\\n {{! ── Header bar with file info and PDF toggle ── }}\\n
\\n
\\n \\n {{@item.fileName}}\\n
\\n \\n \\n {{if\\n this.showDocument\\n (t \\\"routes.digitalize-welder-certificate.review.hide-pdf\\\")\\n (t \\\"routes.digitalize-welder-certificate.review.show-pdf\\\")\\n }}\\n \\n
\\n\\n {{! ── Main content: optional PDF + form ── }}\\n
\\n {{! Document Panel }}\\n {{#if this.showDocument}}\\n \\n {{#if this.pdfUrl}}\\n {{#if this.isImageFile}}\\n {{! Image viewer with zoom controls }}\\n
\\n \\n \\n \\n \\n {{this.imageZoom}}%\\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n \\n {{else}}\\n \\n {{/if}}\\n {{else}}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.review.pdf-not-available\\\"}}

\\n
\\n {{/if}}\\n \\n {{/if}}\\n\\n {{! Form Panel }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 1: Standard, Unit System, Certificate Type & Number\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 2: Test Piece Details\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 3: General Information\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 4: Base Materials\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 5: Consumables / Filler Materials\\n (Hidden for OPERATOR certificates not on AWS D1.1)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.canShowConsumables}}\\n \\n {{/if}}\\n\\n {{! ════════════════════════════════════════════════════\\n Section 6: Non-Destructive Tests (editable)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 7: Mechanical Tests (editable)\\n ════════════════════════════════════════════════════ }}\\n \\n\\n {{! ════════════════════════════════════════════════════\\n Section 8: Operator Details\\n (Only for OPERATOR certificates not on AWS D1.1)\\n ════════════════════════════════════════════════════ }}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n
\\n\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.buttons.reject\\\"}}\\n \\n \\n {{#if this.isApproving}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-welder-certificate.review.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/certificate-review-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/certificate-review-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action, get } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { task, dropTask } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport type IntlService from 'ember-intl/services/intl';\nimport type Store from '@ember-data/store';\nimport type WelderCertificateParseQueueService from 'weldnote/services/welder-certificate-parse-queue';\nimport type { QueueItem } from 'weldnote/services/welder-certificate-parse-queue';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport type WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport type UnitSystemService from 'weldnote/services/unit-system';\nimport Gas from 'weldnote/models/gas';\nimport Flux from 'weldnote/models/flux';\nimport Welder from 'weldnote/models/welder';\nimport _AjaxService from 'weldnote/services/ajax';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport WeldType from 'weldnote/models/weld-type';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport Company from 'weldnote/models/company';\nimport ExaminingBody from 'weldnote/models/examining-body';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport WPSModel from 'weldnote/models/welding-procedure-specification';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport GasCommercialDesignation from 'weldnote/models/gas-commercial-designation';\nimport FluxCommercialDesignation from 'weldnote/models/flux-commercial-designation';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport {\n WelderCertificateParseApiResponse,\n WelderCertificateValidationResult,\n WelderCertificateApprovePayload,\n MappedValue,\n MappingKey,\n ShieldingInfo,\n KeyLabelOption,\n} from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport { getId, buildFlowRate, findMapping, matchLovKey } from 'weldnote/utils/digitalize/shared-helpers';\nimport {\n resolveEntityByMapping,\n resolveUnitSystem,\n resolveCertificateType,\n resolveProductType,\n resolveJointType,\n resolveOverlayType,\n resolvePositionDirection,\n resolveMecanizationByName,\n resolveElectrodeType,\n resolveEmissionDate,\n resolveCompany,\n resolveExaminingBody,\n} from 'weldnote/utils/digitalize/entity-resolvers';\nimport {\n getFilteredWeldingProcesses,\n getFilteredWeldingPositions,\n getFilteredArcTransferModes,\n} from 'weldnote/utils/digitalize/filtered-options';\nimport { isStandardAWSD11, isWelderStandardISO14732 } from 'weldnote/utils/standards';\n\n/** Measurement fields that must not be negative (the backend's `@DecimalMin(\"0.00\")`). */\nconst NON_NEGATIVE_MEASUREMENTS = [\n 'baseMaterial1Thickness',\n 'baseMaterial1Diameter',\n 'baseMaterial2Thickness',\n 'baseMaterial2Diameter',\n 'thicknessRootTestPiece',\n 'thicknessFillTestPiece',\n 'thicknessCapTestPiece',\n 'thicknessTotalTestPiece',\n 'diameterTestPiece',\n] as const;\n\nconst SHIELDING_OPTIONS = Constants.SHIELDING_OPTIONS;\nconst { CERTIFICATE_TYPE } = Constants;\n\ninterface CertificateReviewModalArgs {\n item: QueueItem;\n onClose: () => void;\n // Returns a promise when the caller performs the approval itself, so the\n // modal can keep its buttons disabled until it settles.\n onApprove: (item: QueueItem, editedData: Record) => void | Promise;\n onReject: (item: QueueItem) => void;\n}\n\nexport default class CertificateReviewModalComponent extends Component {\n // Index signature for dynamic property access via updateField, _resolveEntity, etc.\n [key: string]: any;\n\n @service('welder-certificate-parse-queue')\n declare welderCertificateParseQueue: WelderCertificateParseQueueService;\n @service('weldnote-data') declare data: WeldnoteDataService;\n @service('weldcloud-notes-data') declare notesData: WeldcloudNotesData;\n @service declare intl: IntlService;\n @service declare store: Store;\n @service declare alertMessage: AlertMessageService;\n @service declare unitSystem: UnitSystemService;\n @service declare ajax: _AjaxService;\n\n // ── UI state ──────────────────────────────────────────────\n @tracked isLoading = true;\n @tracked showDocument = false;\n @tracked loadError: string | null = null;\n @tracked pdfUploadPath: string | null = null;\n @tracked approveAttempted = false;\n @tracked imageZoom = 100;\n\n // ── Raw data from API ─────────────────────────────────────\n @tracked parsedData: WelderCertificateParseApiResponse | null = null;\n @tracked validation: WelderCertificateValidationResult | null = null;\n\n // ── Section 1: Standard, Unit System, Certificate Type ────\n @tracked certificateNumber = '';\n @tracked selectedStandard: WelderStandard | null = null;\n @tracked selectedUnitSystem: KeyLabelOption | null = null;\n @tracked selectedCertificateType: KeyLabelOption | null = null;\n\n // ── Section 2: Test Piece Details ─────────────────────────\n @tracked selectedWeldType: WeldType | null = null;\n @tracked selectedProductType: KeyLabelOption | null = null;\n @tracked selectedJointType: KeyLabelOption | null = null;\n @tracked selectedOverlayType: KeyLabelOption | null = null;\n @tracked selectedWeldingProcess1: WeldingProcess | null = null;\n @tracked selectedWeldingProcess2: WeldingProcess | null = null;\n @tracked selectedWeldingProcess3: WeldingProcess | null = null;\n @tracked selectedMecanization1: ProcessMecanization | null = null;\n @tracked selectedMecanization2: ProcessMecanization | null = null;\n @tracked selectedMecanization3: ProcessMecanization | null = null;\n @tracked selectedPosition1: WeldingPosition | null = null;\n @tracked selectedPosition2: WeldingPosition | null = null;\n @tracked selectedPosition3: WeldingPosition | null = null;\n @tracked selectedPositionDirection1: KeyLabelOption | null = null;\n @tracked selectedPositionDirection2: KeyLabelOption | null = null;\n @tracked selectedPositionDirection3: KeyLabelOption | null = null;\n @tracked selectedTransferMode1: ArcTransferMode | null = null;\n @tracked selectedTransferMode2: ArcTransferMode | null = null;\n @tracked selectedTransferMode3: ArcTransferMode | null = null;\n @tracked selectedTypeCurrent1: TypeCurrentPolarity | null = null;\n @tracked selectedTypeCurrent2: TypeCurrentPolarity | null = null;\n @tracked selectedTypeCurrent3: TypeCurrentPolarity | null = null;\n @tracked weldingLayers: WeldingDetail[] = [];\n\n // ── Section 3: General Information ────────────────────────\n @tracked selectedCompany: Company | null = null;\n @tracked selectedExaminingBody: ExaminingBody | null = null;\n @tracked emissionDate: Date | null = null;\n @tracked selectedWelder: Welder | null = null;\n @tracked designation = '';\n @tracked testsConductedBy = '';\n @tracked selectedWps: WPSModel | null = null;\n @tracked notes = '';\n\n // ── Parsed value hints ────────────────────────────────────\n @tracked _parsedCompanyValue = '';\n @tracked _parsedExaminingBodyValue = '';\n @tracked _parsedEmissionDateValue = '';\n @tracked _parsedWeldersValue = '';\n @tracked _parsedWpsUsedValue = '';\n\n // ── Section 4: Base Materials ─────────────────────────────\n @tracked baseMaterial1: BaseMaterial | null = null;\n @tracked baseMaterial1Thickness: number | null = null;\n @tracked baseMaterial1Diameter: number | null = null;\n @tracked baseMaterial2: BaseMaterial | null = null;\n @tracked baseMaterial2Thickness: number | null = null;\n @tracked baseMaterial2Diameter: number | null = null;\n @tracked thicknessRootTestPiece: number | null = null;\n @tracked thicknessRootLayerTestPiece = '';\n @tracked thicknessFillTestPiece: number | null = null;\n @tracked thicknessFillLayerTestPiece = '';\n @tracked thicknessCapTestPiece: number | null = null;\n @tracked thicknessCapLayerTestPiece = '';\n @tracked thicknessTotalTestPiece: number | null = null;\n @tracked diameterTestPiece: number | null = null;\n\n // ── Section 5: Consumables ────────────────────────────────\n @tracked fillerMaterial1: FillerMaterial | null = null;\n @tracked fillerMaterial2: FillerMaterial | null = null;\n @tracked fillerMaterial3: FillerMaterial | null = null;\n @tracked fillerMaterialCommercialDesignation1: FillerMaterialCommercialDesignation | null = null;\n @tracked fillerMaterialCommercialDesignation2: FillerMaterialCommercialDesignation | null = null;\n @tracked fillerMaterialCommercialDesignation3: FillerMaterialCommercialDesignation | null = null;\n\n // Electrode types (root/fill/cap)\n @tracked selectedElectrodeType1: ElectrodeType | null = null;\n @tracked selectedElectrodeType2: ElectrodeType | null = null;\n @tracked selectedElectrodeType3: ElectrodeType | null = null;\n\n // Shielding per layer (root/fill/cap)\n @tracked shielding1Type: string | null = null;\n @tracked shielding1Gas: Gas | null = null;\n @tracked shielding1Flux: Flux | null = null;\n @tracked shielding1GasMixture = '';\n @tracked shielding1FlowRateMin: number | null = null;\n @tracked shielding1FlowRateMax: number | null = null;\n @tracked shielding2Type: string | null = null;\n @tracked shielding2Gas: Gas | null = null;\n @tracked shielding2Flux: Flux | null = null;\n @tracked shielding2GasMixture = '';\n @tracked shielding2FlowRateMin: number | null = null;\n @tracked shielding2FlowRateMax: number | null = null;\n @tracked shielding3Type: string | null = null;\n @tracked shielding3Gas: Gas | null = null;\n @tracked shielding3Flux: Flux | null = null;\n @tracked shielding3GasMixture = '';\n @tracked shielding3FlowRateMin: number | null = null;\n @tracked shielding3FlowRateMax: number | null = null;\n\n // Backing\n @tracked backingType: string | null = null;\n @tracked backingGas: Gas | null = null;\n @tracked backingFlux: Flux | null = null;\n @tracked backingGasMixture = '';\n @tracked backingFlowRateRoot = '';\n @tracked backingFlowRateFill = '';\n @tracked backingFlowRateCap = '';\n\n // Gas/Flux Commercial Designations\n @tracked shielding1GasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked shielding2GasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked shielding3GasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked backingGasCommercialDesignation: GasCommercialDesignation | null = null;\n @tracked shielding1FluxCommercialDesignation: FluxCommercialDesignation | null = null;\n @tracked shielding2FluxCommercialDesignation: FluxCommercialDesignation | null = null;\n @tracked shielding3FluxCommercialDesignation: FluxCommercialDesignation | null = null;\n @tracked backingFluxCommercialDesignation: FluxCommercialDesignation | null = null;\n\n // ── Section 6: NDT Tests ──────────────────────────────────\n @tracked visualTestResult: string | null = null;\n @tracked visualTestNumber = '';\n @tracked penetrantTestResult: string | null = null;\n @tracked penetrantTestNumber = '';\n @tracked magneticTestResult: string | null = null;\n @tracked magneticTestNumber = '';\n @tracked ultrasonicTestResult: string | null = null;\n @tracked ultrasonicTestNumber = '';\n @tracked radiographicTestResult: string | null = null;\n @tracked radiographicTestNumber = '';\n\n // ── Section 7: Mechanical Tests ───────────────────────────\n @tracked tensileTestResult: string | null = null;\n @tracked tensileTestNumber = '';\n @tracked bendTestResult: string | null = null;\n @tracked bendTestNumber = '';\n @tracked macrographicTestResult: string | null = null;\n @tracked macrographicTestNumber = '';\n @tracked impactTestResult: string | null = null;\n @tracked impactTestNumber = '';\n @tracked fractureTestResult: string | null = null;\n @tracked fractureTestNumber = '';\n\n // ── Section 8: Operator Details ───────────────────────────\n @tracked arcLengthControlProcess1 = '';\n @tracked arcLengthControlProcess2 = '';\n @tracked arcLengthControlProcess3 = '';\n @tracked visualControlProcess1 = '';\n @tracked visualControlProcess2 = '';\n @tracked visualControlProcess3 = '';\n @tracked jointTrackingProcess1 = '';\n @tracked jointTrackingProcess2 = '';\n @tracked jointTrackingProcess3 = '';\n @tracked weldingOperatorWeldingDetailsProcess1 = '';\n @tracked weldingOperatorWeldingDetailsProcess2 = '';\n @tracked weldingOperatorWeldingDetailsProcess3 = '';\n\n // ── Lifecycle ─────────────────────────────────────────────\n\n constructor(owner: unknown, args: CertificateReviewModalArgs) {\n super(owner, args);\n this.loadData.perform();\n }\n\n // ── Getters: options ──────────────────────────────────────\n\n get industryCodeId() {\n return this.selectedStandard?.industryCodeId ?? null;\n }\n\n get industryCode() {\n return this.selectedStandard?.get?.('code') ?? this.selectedStandard?.code ?? null;\n }\n\n get industryCodeMismatchWarning(): string | null {\n const parsedCode = this.industryCode?.code;\n const selectedCode = this.args.item?.industryCode;\n if (!selectedCode || !parsedCode) return null;\n if (selectedCode === parsedCode) return null;\n return this.intl.t('routes.digitalize-welder-certificate.review.industry-code-mismatch', {\n selectedCode,\n parsedCode,\n });\n }\n\n // Filter standards by certificate type — same source as upload-modal:\n // OPERATOR → ISO 14732 + ASME + AWS B2.1 + AWS D1.1 + AWS D14.3\n // WELDER → all welder standards except ISO 14732\n get standardOptions() {\n if (this.isOperatorCertificate) {\n return this.notesData.weldingOperatorStandards;\n }\n return this.notesData.welderCertificateStandards;\n }\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n get certificateTypeOptions() {\n return [\n { key: CERTIFICATE_TYPE.WELDER, label: this.intl.t('lov.certificate-type.WELDER') },\n { key: CERTIFICATE_TYPE.OPERATOR, label: this.intl.t('lov.certificate-type.OPERATOR') },\n ];\n }\n\n get isOperatorCertificate(): boolean {\n return this.selectedCertificateType?.key === CERTIFICATE_TYPE.OPERATOR;\n }\n\n // ── Visibility rules: mirror model-welder-certificate/edit.ts ──\n\n get isCurrentStandardAWSD11(): boolean {\n return isStandardAWSD11(this.selectedStandard as any);\n }\n\n get isISO14732(): boolean {\n return isWelderStandardISO14732(this.selectedStandard as any);\n }\n\n get isWeldingOperatorCertificateInAWSD11(): boolean {\n return this.isOperatorCertificate && this.isCurrentStandardAWSD11;\n }\n\n // Mirrors canShowConsumablesTab in edit.ts:271\n get canShowConsumables(): boolean {\n return !this.isOperatorCertificate || this.isWeldingOperatorCertificateInAWSD11;\n }\n\n // Mirrors canShowWeldingOperatorSpecificFields in edit.ts:263\n get canShowWeldingOperatorSpecificFields(): boolean {\n return this.isOperatorCertificate && !this.isCurrentStandardAWSD11;\n }\n\n // Mirrors edit.hbs:1784 — joint sensor row only when ISO 14732 + operator + non-AWS D1.1\n get showWeldingDetailJointSensor(): boolean {\n return this.isISO14732 && this.canShowWeldingOperatorSpecificFields;\n }\n\n // Mirrors showTypeOfCurrent in edit.ts:255 (same rule as consumables)\n get showTypeOfCurrent(): boolean {\n return !this.isOperatorCertificate || this.isWeldingOperatorCertificateInAWSD11;\n }\n\n get weldTypeOptions() {\n let all = this.notesData.weldTypes;\n if (!all || !this.industryCodeId) return all || [];\n return all.filter((t: WeldType) => {\n // Path-based get() for nested Ember Data relationships\n let codeId = (t.get as (key: string) => string | undefined)?.('industryCode.id');\n return codeId === this.industryCodeId;\n });\n }\n\n get productTypeOptions() {\n return this.data.productTypeOptions;\n }\n\n get jointTypeOptions() {\n return this.data.jointTypeOptions;\n }\n\n get overlayTypeOptions() {\n return this.data.overlayTypeOptions;\n }\n\n get weldingDetailOptions() {\n return this.notesData.weldingDetails;\n }\n\n get weldingProcessOptions() {\n return getFilteredWeldingProcesses(this.notesData.weldingProcesses, this.industryCodeId);\n }\n\n get weldingPositionOptions() {\n return getFilteredWeldingPositions(this.notesData.weldingPositions, this.industryCodeId);\n }\n\n get weldingPositionDirectionOptions() {\n return this.data.weldingPositionDirectionOptions;\n }\n\n get processMecanizationOptions() {\n return this.notesData.processMecanizations;\n }\n\n get arcTransferModeOptions() {\n return getFilteredArcTransferModes(this.notesData.arcTransferModes, this.industryCodeId);\n }\n\n get typeCurrentPolarityOptions() {\n return this.notesData.typeCurrentPolarities;\n }\n\n get companyOptions() {\n return this.notesData.companies;\n }\n\n get examiningBodyOptions() {\n return this.notesData.examiningBodies;\n }\n\n get electrodeTypeOptions() {\n return this.notesData.electrodeTypes;\n }\n\n get shieldingTypeOptions() {\n return this.data.shieldingTypeOptions;\n }\n\n get parsedConsumables() {\n return this.parsedData?.test_piece_consumables || null;\n }\n\n get parsedBaseMaterials() {\n return this.parsedData?.test_piece_base_materials || null;\n }\n\n get parsedTestPieceDetails() {\n return this.parsedData?.test_piece_details || null;\n }\n\n get validationMappings() {\n return this.validation?.mappings || null;\n }\n\n get parsedGeneralInfo() {\n return {\n resolvedCompanyValue: this._parsedCompanyValue,\n resolvedExaminingBodyValue: this._parsedExaminingBodyValue,\n resolvedEmissionDateValue: this._parsedEmissionDateValue,\n resolvedWeldersValue: this._parsedWeldersValue,\n resolvedWpsUsedValue: this._parsedWpsUsedValue,\n company: this.parsedData?.company,\n examining_body: this.parsedData?.examining_body,\n emission_date: this.parsedData?.emission_date,\n welder: this.parsedData?.welder,\n wps_used: this.parsedData?.wps_used,\n };\n }\n\n // ── Test Result Options ─────────────────────────────────────\n get testResultOptions() {\n return this.data.testResultOptions;\n }\n\n _matchTestResultKey(parsedValue: string | undefined): string | null {\n if (!parsedValue) return null;\n let upper = parsedValue.toUpperCase().trim();\n if (upper === 'P' || upper.startsWith('PASS') || upper.startsWith('ACCEPT')) {\n return Constants.TEST_RESULTS.PASSED;\n }\n if (\n upper === 'F' ||\n upper.startsWith('FAIL') ||\n upper.startsWith('NOT') ||\n upper.startsWith('REJECT')\n ) {\n return Constants.TEST_RESULTS.FAILED;\n }\n return null;\n }\n\n // ── Layer Options ───────────────────────────────────────────\n get layerOptions() {\n return this.data.layerOptions;\n }\n\n _matchLayerKey(parsedValue: string | undefined): string {\n if (!parsedValue) return '';\n let upper = parsedValue.toUpperCase().trim();\n if (upper === 'SL' || upper.startsWith('SINGLE')) {\n return Constants.LAYER_OPTIONS.SINGLE_LAYER;\n }\n if (upper === 'ML' || upper.startsWith('MULTI')) {\n return Constants.LAYER_OPTIONS.MULTI_LAYER;\n }\n return '';\n }\n\n // ── Document URL & type detection ─────────────────────────\n\n private static IMAGE_EXTENSIONS = [\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.bmp',\n '.webp',\n '.tiff',\n '.tif',\n ];\n\n get isImageFile(): boolean {\n const fileName = this.args.item.fileName || '';\n const ext = fileName.slice(fileName.lastIndexOf('.')).toLowerCase();\n return CertificateReviewModalComponent.IMAGE_EXTENSIONS.includes(ext);\n }\n\n get pdfUrl() {\n return this.pdfUploadPath || null;\n }\n\n get imageZoomStyle(): string {\n return `min-width: ${this.imageZoom}%; width: ${this.imageZoom}%; height: auto;`;\n }\n\n @action zoomIn() {\n this.imageZoom = Math.min(this.imageZoom + 25, 300);\n }\n @action zoomOut() {\n this.imageZoom = Math.max(this.imageZoom - 25, 25);\n }\n @action zoomReset() {\n this.imageZoom = 100;\n }\n\n get unitLabel() {\n return this.unitSystem.getDistanceUnit(this.selectedUnitSystem?.key || '');\n }\n\n // ── Data loading ──────────────────────────────────────────\n\n loadData = task(this, { drop: true }, async () => {\n this.isLoading = true;\n this.loadError = null;\n try {\n let result: QueueItem = await this.welderCertificateParseQueue.getQueueItem(\n this.args.item.id\n );\n if (result.uploadPdfPath) {\n this.pdfUploadPath = result.uploadPdfPath;\n }\n let parseResult = result.parseResult || result;\n this.parsedData = (parseResult.parsedData as WelderCertificateParseApiResponse) || null;\n this.validation = (parseResult.validation as WelderCertificateValidationResult) || null;\n this._populateFields();\n } catch (error: any) {\n this.loadError = error.message || 'Failed to load data';\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.errors.load-failed')\n );\n } finally {\n this.isLoading = false;\n }\n });\n\n _resolveStoreRecord = task(\n this,\n async (modelName: string, entityId: string, setter: (record: any) => void) => {\n try {\n let record = await this.store.findRecord(modelName, entityId);\n setter(record);\n } catch {\n // Entity not found — user picks manually\n }\n }\n );\n\n // ── Populate fields from parsed data ──────────────────────\n\n _populateFields() {\n let parsedData = this.parsedData || ({} as WelderCertificateParseApiResponse);\n let mappings = this.validation?.mappings || {};\n\n // Standard & Unit System\n this.certificateNumber = parsedData.certificate_name || '';\n this.selectedStandard = resolveEntityByMapping('standard', mappings, this.standardOptions);\n this.selectedUnitSystem = resolveUnitSystem(this.unitSystemOptions, parsedData.unit_system);\n this.selectedCertificateType = resolveCertificateType(\n this.certificateTypeOptions,\n parsedData.certificate_type,\n CERTIFICATE_TYPE.WELDER\n );\n\n // General info\n {\n const result = resolveCompany(mappings, this.companyOptions, parsedData.company, this.data.hasOnly1Company, this.data.firstCompany);\n this.selectedCompany = result.selectedCompany;\n this._parsedCompanyValue = result.parsedValue;\n }\n {\n const result = resolveExaminingBody(mappings, this.examiningBodyOptions, parsedData.examining_body);\n this.selectedExaminingBody = result.selectedExaminingBody;\n this._parsedExaminingBodyValue = result.parsedValue;\n }\n {\n const { date, originalValue } = resolveEmissionDate(parsedData.emission_date);\n this.emissionDate = date;\n this._parsedEmissionDateValue = originalValue;\n }\n this._parsedWeldersValue = parsedData.welder || '';\n this._parsedWpsUsedValue = parsedData.wps_used || '';\n this._resolveWelder(parsedData.welder, mappings);\n this._resolveWps(parsedData.wps_used, mappings);\n this.designation = parsedData.designation || '';\n this.testsConductedBy = parsedData.tests_conducted_by || '';\n this.notes = parsedData.notes || '';\n\n // Test piece details\n let tpd = parsedData.test_piece_details || {};\n this.selectedWeldType = resolveEntityByMapping('weldType', mappings, this.weldTypeOptions);\n this.selectedProductType = resolveProductType(this.productTypeOptions, tpd.product_type);\n this.selectedJointType = resolveJointType(this.jointTypeOptions, tpd.joint_type);\n this.selectedOverlayType = resolveOverlayType(this.overlayTypeOptions, tpd.overlay_type);\n this.selectedWeldingProcess1 = resolveEntityByMapping('weldingProcess1', mappings, this.weldingProcessOptions);\n this.selectedWeldingProcess2 = resolveEntityByMapping('weldingProcess2', mappings, this.weldingProcessOptions);\n this.selectedWeldingProcess3 = resolveEntityByMapping('weldingProcess3', mappings, this.weldingProcessOptions);\n this.selectedPosition1 = resolveEntityByMapping('weldingPositions1', mappings, this.weldingPositionOptions);\n this.selectedPosition2 = resolveEntityByMapping('weldingPositions2', mappings, this.weldingPositionOptions);\n this.selectedPosition3 = resolveEntityByMapping('weldingPositions3', mappings, this.weldingPositionOptions);\n this.selectedPositionDirection1 = resolvePositionDirection(this.weldingPositionDirectionOptions, tpd.welding_position_1_direction);\n this.selectedPositionDirection2 = resolvePositionDirection(this.weldingPositionDirectionOptions, tpd.welding_position_2_direction);\n this.selectedPositionDirection3 = resolvePositionDirection(this.weldingPositionDirectionOptions, tpd.welding_position_3_direction);\n this.selectedTransferMode1 = resolveEntityByMapping('transferMode1', mappings, this.arcTransferModeOptions);\n this.selectedTransferMode2 = resolveEntityByMapping('transferMode2', mappings, this.arcTransferModeOptions);\n this.selectedTransferMode3 = resolveEntityByMapping('transferMode3', mappings, this.arcTransferModeOptions);\n this.selectedTypeCurrent1 = resolveEntityByMapping('typeOfCurrent1', mappings, this.typeCurrentPolarityOptions);\n this.selectedTypeCurrent2 = resolveEntityByMapping('typeOfCurrent2', mappings, this.typeCurrentPolarityOptions);\n this.selectedTypeCurrent3 = resolveEntityByMapping('typeOfCurrent3', mappings, this.typeCurrentPolarityOptions);\n this.selectedMecanization1 = resolveEntityByMapping('processMecanization1', mappings, this.processMecanizationOptions);\n this.selectedMecanization2 = resolveEntityByMapping('processMecanization2', mappings, this.processMecanizationOptions);\n this.selectedMecanization3 = resolveEntityByMapping('processMecanization3', mappings, this.processMecanizationOptions);\n if (!this.selectedMecanization1) {\n this.selectedMecanization1 = resolveMecanizationByName(this.processMecanizationOptions, tpd.welding_process_mechanization_1);\n }\n if (!this.selectedMecanization2) {\n this.selectedMecanization2 = resolveMecanizationByName(this.processMecanizationOptions, tpd.welding_process_mechanization_2);\n }\n if (!this.selectedMecanization3) {\n this.selectedMecanization3 = resolveMecanizationByName(this.processMecanizationOptions, tpd.welding_process_mechanization_3);\n }\n\n // Base Materials\n let bm = parsedData.test_piece_base_materials || {};\n this._resolveBaseMaterial('baseMaterial1', mappings, bm.base_material_1);\n this._resolveBaseMaterial('baseMaterial2', mappings, bm.base_material_2);\n this.thicknessRootTestPiece = bm.thickness_root != null ? parseFloat(bm.thickness_root) : null;\n this.thicknessRootLayerTestPiece = this._matchLayerKey(bm.thickness_root_layer);\n this.thicknessFillTestPiece = bm.thickness_fill != null ? parseFloat(bm.thickness_fill) : null;\n this.thicknessFillLayerTestPiece = this._matchLayerKey(bm.thickness_fill_layer);\n this.thicknessCapTestPiece = bm.thickness_cap != null ? parseFloat(bm.thickness_cap) : null;\n this.thicknessCapLayerTestPiece = this._matchLayerKey(bm.thickness_cap_layer);\n this.thicknessTotalTestPiece =\n bm.thickness_total != null ? parseFloat(bm.thickness_total) : null;\n this.diameterTestPiece = bm.diameter != null ? parseFloat(bm.diameter) : null;\n\n // Consumables\n let cons = parsedData.test_piece_consumables || {};\n this._resolveFillerMaterial(1, mappings);\n this._resolveFillerMaterial(2, mappings);\n this._resolveFillerMaterial(3, mappings);\n this._resolveFillerMaterialCommercialDesignation(1, mappings);\n this._resolveFillerMaterialCommercialDesignation(2, mappings);\n this._resolveFillerMaterialCommercialDesignation(3, mappings);\n this.selectedElectrodeType1 = resolveElectrodeType('electrodeType1', mappings, this.electrodeTypeOptions, cons.electrode_type_1);\n this.selectedElectrodeType2 = resolveElectrodeType('electrodeType2', mappings, this.electrodeTypeOptions, cons.electrode_type_2);\n this.selectedElectrodeType3 = resolveElectrodeType('electrodeType3', mappings, this.electrodeTypeOptions, cons.electrode_type_3);\n this._resolveShielding(1, 'Root', cons.shielding_root, mappings);\n this._resolveShielding(2, 'Fill', cons.shielding_fill, mappings);\n this._resolveShielding(3, 'Cap', cons.shielding_cap, mappings);\n this._resolveShieldingBacking(cons.backing, mappings);\n this.backingFlowRateRoot = cons.backing_flow_rate_root || '';\n this.backingFlowRateFill = cons.backing_flow_rate_fill || '';\n this.backingFlowRateCap = cons.backing_flow_rate_cap || '';\n\n // NDT Tests\n this.visualTestResult = this._matchTestResultKey(parsedData.visual_test?.result);\n this.visualTestNumber = parsedData.visual_test?.report_number || '';\n this.penetrantTestResult = this._matchTestResultKey(parsedData.penetrant_test?.result);\n this.penetrantTestNumber = parsedData.penetrant_test?.report_number || '';\n this.magneticTestResult = this._matchTestResultKey(parsedData.magnetic_test?.result);\n this.magneticTestNumber = parsedData.magnetic_test?.report_number || '';\n this.ultrasonicTestResult = this._matchTestResultKey(parsedData.ultrasonic_test?.result);\n this.ultrasonicTestNumber = parsedData.ultrasonic_test?.report_number || '';\n this.radiographicTestResult = this._matchTestResultKey(parsedData.radiographic_test?.result);\n this.radiographicTestNumber = parsedData.radiographic_test?.report_number || '';\n\n // Mechanical Tests\n this.tensileTestResult = this._matchTestResultKey(parsedData.tensile_test?.result);\n this.tensileTestNumber = parsedData.tensile_test?.report_number || '';\n this.bendTestResult = this._matchTestResultKey(parsedData.bend_test?.result);\n this.bendTestNumber = parsedData.bend_test?.report_number || '';\n this.macrographicTestResult = this._matchTestResultKey(parsedData.macrographic_test?.result);\n this.macrographicTestNumber = parsedData.macrographic_test?.report_number || '';\n this.impactTestResult = this._matchTestResultKey(parsedData.impact_test?.result);\n this.impactTestNumber = parsedData.impact_test?.report_number || '';\n this.fractureTestResult = this._matchTestResultKey(parsedData.fracture_test?.result);\n this.fractureTestNumber = parsedData.fracture_test?.report_number || '';\n\n // Operator Details\n let od = parsedData.operator_details || {};\n this.arcLengthControlProcess1 = od.arc_length_control_process_1 || '';\n this.arcLengthControlProcess2 = od.arc_length_control_process_2 || '';\n this.arcLengthControlProcess3 = od.arc_length_control_process_3 || '';\n this.visualControlProcess1 = od.visual_control_process_1 || '';\n this.visualControlProcess2 = od.visual_control_process_2 || '';\n this.visualControlProcess3 = od.visual_control_process_3 || '';\n this.jointTrackingProcess1 = od.joint_tracking_process_1 || '';\n this.jointTrackingProcess2 = od.joint_tracking_process_2 || '';\n this.jointTrackingProcess3 = od.joint_tracking_process_3 || '';\n this.weldingOperatorWeldingDetailsProcess1 = od.welding_details_process_1 || '';\n this.weldingOperatorWeldingDetailsProcess2 = od.welding_details_process_2 || '';\n this.weldingOperatorWeldingDetailsProcess3 = od.welding_details_process_3 || '';\n }\n\n // ── Resolve helpers ───────────────────────────────────────\n\n\n\n\n\n _resolveWelder(_parsedWelders: any, mappings: Record) {\n let mapping = mappings.welder;\n if (mapping && mapping.entityId) {\n this._resolveStoreRecord.perform('welder', String(mapping.entityId), (welder: any) => {\n this.selectedWelder = welder;\n });\n }\n }\n\n _resolveWps(_parsedWps: any, mappings: Record) {\n let mapping = mappings.wps;\n if (mapping && mapping.entityId) {\n this._resolveStoreRecord.perform(\n 'welding-procedure-specification',\n String(mapping.entityId),\n (wps: any) => {\n this.selectedWps = wps;\n }\n );\n }\n }\n\n _resolveBaseMaterial(mappingKey: string, mappings: Record, parsedBm: any) {\n let mapping = mappings[mappingKey as MappingKey];\n if (mapping && mapping.entityId) {\n let prop = mappingKey === 'baseMaterial1' ? 'baseMaterial1' : 'baseMaterial2';\n this._resolveStoreRecord.perform('base-material', String(mapping.entityId), (bm: any) => {\n this[prop] = bm;\n });\n }\n if (parsedBm) {\n let suffix = mappingKey === 'baseMaterial1' ? '1' : '2';\n this[`baseMaterial${suffix}Thickness`] = parsedBm.thickness ?? null;\n this[`baseMaterial${suffix}Diameter`] = parsedBm.diameter ?? null;\n }\n }\n\n _resolveFillerMaterial(index: number, mappings: Record) {\n let mappingKey = `fillerMaterial${index}`;\n let mapping = mappings[mappingKey as MappingKey];\n if (mapping && mapping.entityId) {\n this._resolveStoreRecord.perform('filler-material', String(mapping.entityId), (fm: any) => {\n this[`fillerMaterial${index}`] = fm;\n });\n }\n }\n\n _resolveFillerMaterialCommercialDesignation(\n index: number,\n mappings: Record\n ) {\n let layer = index === 1 ? 'Root' : index === 2 ? 'Fill' : 'Cap';\n let mapping = findMapping(mappings, [\n `fillerMaterial${index}CommercialDesignation`,\n `fillerMaterial${layer}CommercialDesignation`,\n ]);\n\n if (!mapping?.entityId) {\n return;\n }\n\n this._resolveStoreRecord.perform(\n 'filler-material-commercial-designation',\n String(mapping.entityId),\n (cd: FillerMaterialCommercialDesignation) => {\n this[`fillerMaterialCommercialDesignation${index}`] = cd;\n if (cd && !this[`fillerMaterial${index}`]) {\n let fillerMaterial = get(cd, 'fillerMaterial');\n if (fillerMaterial && get(fillerMaterial, 'id')) {\n this[`fillerMaterial${index}`] = fillerMaterial;\n }\n }\n }\n );\n }\n\n\n _resolveShielding(\n index: number,\n mappingLayer: string,\n parsedShielding: ShieldingInfo | undefined,\n mappings: Record\n ) {\n if (!parsedShielding) return;\n let key = `shielding${index}`;\n this[`${key}GasMixture`] = parsedShielding.gas_mixture || '';\n if (parsedShielding.type === 'flux') {\n this[`${key}Type`] = SHIELDING_OPTIONS.FLUX;\n } else if (\n parsedShielding.designation ||\n parsedShielding.gas_mixture ||\n parsedShielding.flow_rate\n ) {\n this[`${key}Type`] = SHIELDING_OPTIONS.GAS;\n }\n let mapping = mappings[`shielding${mappingLayer}` as MappingKey];\n if (mapping && mapping.entityId && parsedShielding.type === 'gas') {\n this._resolveStoreRecord.perform('gas', String(mapping.entityId), (gas: any) => {\n this[`${key}Gas`] = gas;\n });\n } else if (mapping && mapping.entityId && parsedShielding.type === 'flux') {\n this._resolveStoreRecord.perform('flux', String(mapping.entityId), (flux: any) => {\n this[`${key}Flux`] = flux;\n });\n }\n\n let gasCdMapping = findMapping(mappings, [`shielding${mappingLayer}GasCommercialDesignation`]);\n if (gasCdMapping?.entityId && parsedShielding.type === 'gas') {\n this._resolveStoreRecord.perform(\n 'gas-commercial-designation',\n String(gasCdMapping.entityId),\n (cd: GasCommercialDesignation) => {\n this[`${key}GasCommercialDesignation`] = cd;\n if (cd && !this[`${key}Gas`]) {\n let gas = get(cd, 'gas');\n if (gas && get(gas, 'id')) {\n this[`${key}Gas`] = gas;\n }\n }\n }\n );\n }\n\n let fluxCdMapping = findMapping(mappings, [`shielding${mappingLayer}FluxCommercialDesignation`]);\n if (fluxCdMapping?.entityId && parsedShielding.type === 'flux') {\n this._resolveStoreRecord.perform(\n 'flux-commercial-designation',\n String(fluxCdMapping.entityId),\n (cd: FluxCommercialDesignation) => {\n this[`${key}FluxCommercialDesignation`] = cd;\n if (cd && !this[`${key}Flux`]) {\n let flux = get(cd, 'flux');\n if (flux && get(flux, 'id')) {\n this[`${key}Flux`] = flux;\n }\n }\n }\n );\n }\n }\n\n _resolveShieldingBacking(parsedBacking: any, mappings: Record) {\n if (!parsedBacking) return;\n this.backingGasMixture = parsedBacking.gas_mixture || '';\n if (parsedBacking.type === 'flux') {\n this.backingType = SHIELDING_OPTIONS.FLUX;\n } else if (this.backingGasMixture || parsedBacking.flow_rate) {\n this.backingType = SHIELDING_OPTIONS.GAS;\n }\n\n let mapping = mappings.backing;\n if (mapping?.entityId && parsedBacking.type === 'gas') {\n this._resolveStoreRecord.perform('gas', String(mapping.entityId), (gas: Gas) => {\n this.backingGas = gas;\n });\n } else if (mapping?.entityId && parsedBacking.type === 'flux') {\n this._resolveStoreRecord.perform('flux', String(mapping.entityId), (flux: Flux) => {\n this.backingFlux = flux;\n });\n }\n\n let gasCdMapping = findMapping(mappings, ['backingGasCommercialDesignation']);\n if (gasCdMapping?.entityId && parsedBacking.type === 'gas') {\n this._resolveStoreRecord.perform(\n 'gas-commercial-designation',\n String(gasCdMapping.entityId),\n (cd: GasCommercialDesignation) => {\n this.backingGasCommercialDesignation = cd;\n if (cd && !this.backingGas) {\n let gas = get(cd, 'gas');\n if (gas && get(gas, 'id')) {\n this.backingGas = gas;\n }\n }\n }\n );\n }\n\n let fluxCdMapping = findMapping(mappings, ['backingFluxCommercialDesignation']);\n if (fluxCdMapping?.entityId && parsedBacking.type === 'flux') {\n this._resolveStoreRecord.perform(\n 'flux-commercial-designation',\n String(fluxCdMapping.entityId),\n (cd: FluxCommercialDesignation) => {\n this.backingFluxCommercialDesignation = cd;\n if (cd && !this.backingFlux) {\n let flux = get(cd, 'flux');\n if (flux && get(flux, 'id')) {\n this.backingFlux = flux;\n }\n }\n }\n );\n }\n }\n\n // ── Parsed value hints ────────────────────────────────────\n\n get parsedStandardSectionData() {\n return {\n standard: this.parsedData?.standard,\n unit_system: this.parsedData?.unit_system,\n certificate_type: this.parsedData?.certificate_type,\n };\n }\n // ── Required field validation ─────────────────────────────\n\n get missingRequiredFields() {\n let missing = [];\n if (!this.certificateNumber?.trim()) {\n missing.push(\n this.intl.t('routes.digitalize-welder-certificate.review.fields.certificate-number')\n );\n }\n if (!this.selectedStandard) {\n missing.push(this.intl.t('routes.digitalize-welder-certificate.review.fields.standard'));\n }\n if (!this.selectedUnitSystem) {\n missing.push(this.intl.t('routes.digitalize-welder-certificate.review.fields.unit-system'));\n }\n if (!this.selectedCertificateType) {\n missing.push(\n this.intl.t('routes.digitalize-welder-certificate.review.fields.certificate-type')\n );\n }\n return missing;\n }\n\n get canApprove() {\n return this.missingRequiredFields.length === 0 && !this.hasNegativeMeasurements;\n }\n\n get requiredFieldErrors() {\n if (!this.approveAttempted) return {};\n let errors: Record> = {};\n let msg = { message: this.intl.t('generic.error.field-required').toString() };\n if (!this.certificateNumber?.trim()) {\n errors.certificateNumber = [msg];\n }\n if (!this.selectedStandard) {\n errors.standard = [msg];\n }\n if (!this.selectedUnitSystem) {\n errors.unitSystem = [msg];\n }\n if (!this.selectedCertificateType) {\n errors.certificateType = [msg];\n }\n return errors;\n }\n\n // ── Measurement validation ────────────────────────────────\n\n /**\n * Measurements the backend rejects below zero. The parser prefills them, so a misread negative\n * value is flagged as soon as the modal opens rather than only after an approve attempt.\n */\n get measurementErrors() {\n let errors: Record> = {};\n let msg = {\n message: this.intl\n .t('routes.digitalize-welder-certificate.review.validation.negative-measurement')\n .toString(),\n };\n for (let field of NON_NEGATIVE_MEASUREMENTS) {\n // Values typed into the form arrive as strings, prefilled ones as numbers.\n let value = this[field] as number | string | null;\n if (value != null && value !== '' && parseFloat(String(value)) < 0) {\n errors[field] = [msg];\n }\n }\n return errors;\n }\n\n get hasNegativeMeasurements() {\n return Object.keys(this.measurementErrors).length > 0;\n }\n\n // ── Actions ───────────────────────────────────────────────\n\n @action toggleDocument() {\n this.showDocument = !this.showDocument;\n }\n\n @action updateField(field: string, value: unknown) {\n (this as Record)[field] = value;\n\n // Cross-section cascade: standard change resets dependent fields\n if (field === 'selectedStandard') {\n this.selectedWeldType = null;\n this.selectedWeldingProcess1 = null;\n this.selectedWeldingProcess2 = null;\n this.selectedWeldingProcess3 = null;\n this.selectedPosition1 = null;\n this.selectedPosition2 = null;\n this.selectedPosition3 = null;\n this.selectedTransferMode1 = null;\n this.selectedTransferMode2 = null;\n this.selectedTransferMode3 = null;\n }\n\n // Cross-section cascade: changing certificate type may invalidate the\n // currently selected standard if it's not in the new filtered list.\n if (field === 'selectedCertificateType') {\n const standard = this.selectedStandard;\n if (standard && !this.standardOptions.includes(standard)) {\n // Recurse so the 'selectedStandard' branch above clears the dependent\n // weld type / processes / positions / transfer modes.\n this.updateField('selectedStandard', null);\n }\n }\n\n // Re-evaluate visibility-driven clearing whenever the standard or certificate\n // type changes — fields that just became hidden must not leak into the payload.\n if (field === 'selectedStandard' || field === 'selectedCertificateType') {\n this._clearHiddenFields();\n }\n }\n\n // ── Build payload & approve ───────────────────────────────\n\n\n _clearHiddenFields() {\n if (!this.canShowConsumables) {\n this.fillerMaterial1 = null;\n this.fillerMaterial2 = null;\n this.fillerMaterial3 = null;\n this.fillerMaterialCommercialDesignation1 = null;\n this.fillerMaterialCommercialDesignation2 = null;\n this.fillerMaterialCommercialDesignation3 = null;\n this.selectedElectrodeType1 = null;\n this.selectedElectrodeType2 = null;\n this.selectedElectrodeType3 = null;\n this.shielding1Type = null;\n this.shielding1Gas = null;\n this.shielding1Flux = null;\n this.shielding1GasMixture = '';\n this.shielding1FlowRateMin = null;\n this.shielding1FlowRateMax = null;\n this.shielding1GasCommercialDesignation = null;\n this.shielding1FluxCommercialDesignation = null;\n this.shielding2Type = null;\n this.shielding2Gas = null;\n this.shielding2Flux = null;\n this.shielding2GasMixture = '';\n this.shielding2FlowRateMin = null;\n this.shielding2FlowRateMax = null;\n this.shielding2GasCommercialDesignation = null;\n this.shielding2FluxCommercialDesignation = null;\n this.shielding3Type = null;\n this.shielding3Gas = null;\n this.shielding3Flux = null;\n this.shielding3GasMixture = '';\n this.shielding3FlowRateMin = null;\n this.shielding3FlowRateMax = null;\n this.shielding3GasCommercialDesignation = null;\n this.shielding3FluxCommercialDesignation = null;\n this.backingType = null;\n this.backingGas = null;\n this.backingFlux = null;\n this.backingGasMixture = '';\n this.backingFlowRateRoot = '';\n this.backingFlowRateFill = '';\n this.backingFlowRateCap = '';\n this.backingGasCommercialDesignation = null;\n this.backingFluxCommercialDesignation = null;\n }\n if (!this.canShowWeldingOperatorSpecificFields) {\n this.arcLengthControlProcess1 = '';\n this.arcLengthControlProcess2 = '';\n this.arcLengthControlProcess3 = '';\n this.visualControlProcess1 = '';\n this.visualControlProcess2 = '';\n this.visualControlProcess3 = '';\n this.jointTrackingProcess1 = '';\n this.jointTrackingProcess2 = '';\n this.jointTrackingProcess3 = '';\n this.selectedMecanization1 = null;\n this.selectedMecanization2 = null;\n this.selectedMecanization3 = null;\n }\n if (!this.showWeldingDetailJointSensor) {\n this.weldingOperatorWeldingDetailsProcess1 = '';\n this.weldingOperatorWeldingDetailsProcess2 = '';\n this.weldingOperatorWeldingDetailsProcess3 = '';\n }\n if (!this.showTypeOfCurrent) {\n this.selectedTypeCurrent1 = null;\n this.selectedTypeCurrent2 = null;\n this.selectedTypeCurrent3 = null;\n }\n }\n\n buildApprovePayload(): WelderCertificateApprovePayload {\n return {\n // Required\n standardId: getId(this.selectedStandard),\n unitSystem: this.selectedUnitSystem?.key || undefined,\n certificateNumber: this.certificateNumber || undefined,\n certificateType: this.selectedCertificateType?.key || undefined,\n\n // General\n companyId: getId(this.selectedCompany),\n examiningBodyId: getId(this.selectedExaminingBody),\n emissionDate: this.emissionDate ? this.emissionDate.toISOString() : undefined,\n welderId: getId(this.selectedWelder),\n wpsId: getId(this.selectedWps),\n designation: this.designation || undefined,\n testsConductedBy: this.testsConductedBy || undefined,\n notes: this.notes || undefined,\n\n // Test piece\n weldTypeId: getId(this.selectedWeldType),\n productType: this.selectedProductType?.key || undefined,\n jointType: this.selectedJointType?.key || undefined,\n overlayType: this.selectedOverlayType?.key || undefined,\n weldingDetailIds: this.weldingLayers?.map((d: any) => getId(d)).filter(Boolean) as string[] || [],\n\n // Process 1 (Root)\n weldingProcessRootId: getId(this.selectedWeldingProcess1),\n weldingPositionRootId: getId(this.selectedPosition1),\n weldingPositionRootDirection: this.selectedPositionDirection1?.key || undefined,\n arcTransferModeRootId: getId(this.selectedTransferMode1),\n\n // Process 2 (Fill)\n weldingProcessFillId: getId(this.selectedWeldingProcess2),\n weldingPositionFillId: getId(this.selectedPosition2),\n weldingPositionFillDirection: this.selectedPositionDirection2?.key || undefined,\n arcTransferModeFillId: getId(this.selectedTransferMode2),\n\n // Process 3 (Cap)\n weldingProcessCapId: getId(this.selectedWeldingProcess3),\n weldingPositionCapId: getId(this.selectedPosition3),\n weldingPositionCapDirection: this.selectedPositionDirection3?.key || undefined,\n arcTransferModeCapId: getId(this.selectedTransferMode3),\n\n // Type of Current — only when isWelder OR (operator + AWS D1.1)\n ...(this.showTypeOfCurrent\n ? {\n typeCurrentRootId: getId(this.selectedTypeCurrent1 as any),\n typeCurrentFillId: getId(this.selectedTypeCurrent2 as any),\n typeCurrentCapId: getId(this.selectedTypeCurrent3 as any),\n }\n : {}),\n\n // Process Mechanization — only when operator + non-AWS D1.1\n ...(this.canShowWeldingOperatorSpecificFields\n ? {\n processMecanizationRootId: getId(this.selectedMecanization1 as any),\n processMecanizationFillId: getId(this.selectedMecanization2 as any),\n processMecanizationCapId: getId(this.selectedMecanization3 as any),\n }\n : {}),\n\n // Base Materials\n baseMaterial1Id: getId(this.baseMaterial1),\n baseMaterial1Thickness:\n this.baseMaterial1Thickness != null ? String(this.baseMaterial1Thickness) : undefined,\n baseMaterial1Diameter:\n this.baseMaterial1Diameter != null ? String(this.baseMaterial1Diameter) : undefined,\n baseMaterial2Id: getId(this.baseMaterial2),\n baseMaterial2Thickness:\n this.baseMaterial2Thickness != null ? String(this.baseMaterial2Thickness) : undefined,\n baseMaterial2Diameter:\n this.baseMaterial2Diameter != null ? String(this.baseMaterial2Diameter) : undefined,\n\n // Test piece thicknesses\n thicknessRootTestPiece:\n this.thicknessRootTestPiece != null ? String(this.thicknessRootTestPiece) : undefined,\n thicknessRootLayerTestPiece: this.thicknessRootLayerTestPiece || undefined,\n thicknessFillTestPiece:\n this.thicknessFillTestPiece != null ? String(this.thicknessFillTestPiece) : undefined,\n thicknessFillLayerTestPiece: this.thicknessFillLayerTestPiece || undefined,\n thicknessTotalTestPiece:\n this.thicknessTotalTestPiece != null ? String(this.thicknessTotalTestPiece) : undefined,\n thicknessCapTestPiece:\n this.thicknessCapTestPiece != null ? String(this.thicknessCapTestPiece) : undefined,\n thicknessCapLayerTestPiece: this.thicknessCapLayerTestPiece || undefined,\n diameterTestPiece:\n this.diameterTestPiece != null ? String(this.diameterTestPiece) : undefined,\n\n // Consumables (filler materials, electrodes, shielding, backing) —\n // only when isWelder OR (operator + AWS D1.1)\n ...(this.canShowConsumables\n ? {\n // Filler Materials\n fillerMaterialRootId: getId(this.fillerMaterial1 as any),\n fillerMaterialRootCommercialDesignationId: getId(\n this.fillerMaterialCommercialDesignation1 as any\n ),\n fillerMaterialFillId: getId(this.fillerMaterial2 as any),\n fillerMaterialFillCommercialDesignationId: getId(\n this.fillerMaterialCommercialDesignation2 as any\n ),\n fillerMaterialCapId: getId(this.fillerMaterial3 as any),\n fillerMaterialCapCommercialDesignationId: getId(\n this.fillerMaterialCommercialDesignation3 as any\n ),\n\n // Electrode Types\n electrodeTypeRootId: getId(this.selectedElectrodeType1 as any),\n electrodeTypeFillId: getId(this.selectedElectrodeType2 as any),\n electrodeTypeCapId: getId(this.selectedElectrodeType3 as any),\n\n // Shielding Root\n shieldingRootType: this.shielding1Type || undefined,\n shieldingRootGasId: getId(this.shielding1Gas as any),\n shieldingRootGasMixture: this.shielding1GasMixture || undefined,\n shieldingRootGasCommercialDesignationId: getId(\n this.shielding1GasCommercialDesignation as any\n ),\n shieldingRootFluxId: getId(this.shielding1Flux as any),\n shieldingRootFluxCommercialDesignationId: getId(\n this.shielding1FluxCommercialDesignation as any\n ),\n flowRateRoot: buildFlowRate(\n this.shielding1FlowRateMin,\n this.shielding1FlowRateMax\n ),\n\n // Shielding Fill\n shieldingFillType: this.shielding2Type || undefined,\n shieldingFillGasId: getId(this.shielding2Gas as any),\n shieldingFillGasMixture: this.shielding2GasMixture || undefined,\n shieldingFillGasCommercialDesignationId: getId(\n this.shielding2GasCommercialDesignation as any\n ),\n shieldingFillFluxId: getId(this.shielding2Flux as any),\n shieldingFillFluxCommercialDesignationId: getId(\n this.shielding2FluxCommercialDesignation as any\n ),\n flowRateFill: buildFlowRate(\n this.shielding2FlowRateMin,\n this.shielding2FlowRateMax\n ),\n\n // Shielding Cap\n shieldingCapType: this.shielding3Type || undefined,\n shieldingCapGasId: getId(this.shielding3Gas as any),\n shieldingCapGasMixture: this.shielding3GasMixture || undefined,\n shieldingCapGasCommercialDesignationId: getId(\n this.shielding3GasCommercialDesignation as any\n ),\n shieldingCapFluxId: getId(this.shielding3Flux as any),\n shieldingCapFluxCommercialDesignationId: getId(\n this.shielding3FluxCommercialDesignation as any\n ),\n flowRateCap: buildFlowRate(this.shielding3FlowRateMin, this.shielding3FlowRateMax),\n\n // Backing\n backingTestPiece: this.backingType || undefined,\n backingGasId: getId(this.backingGas as any),\n backingGasMixture: this.backingGasMixture || undefined,\n backingGasCommercialDesignationId: getId(this.backingGasCommercialDesignation as any),\n backingFluxId: getId(this.backingFlux as any),\n backingFluxCommercialDesignationId: getId(this.backingFluxCommercialDesignation as any),\n backingFlowRateRoot: this.backingFlowRateRoot || undefined,\n backingFlowRateFill: this.backingFlowRateFill || undefined,\n backingFlowRateCap: this.backingFlowRateCap || undefined,\n }\n : {}),\n\n // NDT Tests\n visualTestResult: this.visualTestResult || undefined,\n visualTestNumber: this.visualTestNumber || undefined,\n penetrantTestResult: this.penetrantTestResult || undefined,\n penetrantTestNumber: this.penetrantTestNumber || undefined,\n magneticTestResult: this.magneticTestResult || undefined,\n magneticTestNumber: this.magneticTestNumber || undefined,\n ultrasonicTestResult: this.ultrasonicTestResult || undefined,\n ultrasonicTestNumber: this.ultrasonicTestNumber || undefined,\n radiographicTestResult: this.radiographicTestResult || undefined,\n radiographicTestNumber: this.radiographicTestNumber || undefined,\n\n // Mechanical Tests\n tensileTestResult: this.tensileTestResult || undefined,\n tensileTestNumber: this.tensileTestNumber || undefined,\n bendTestResult: this.bendTestResult || undefined,\n bendTestNumber: this.bendTestNumber || undefined,\n macrographicTestResult: this.macrographicTestResult || undefined,\n macrographicTestNumber: this.macrographicTestNumber || undefined,\n impactTestResult: this.impactTestResult || undefined,\n impactTestNumber: this.impactTestNumber || undefined,\n fractureTestResult: this.fractureTestResult || undefined,\n fractureTestNumber: this.fractureTestNumber || undefined,\n\n // Operator-specific fields — only when operator + non-AWS D1.1.\n // These map to enum columns on the backend, so normalise the (free-text) values to the LOV\n // option keys before sending; unrecognised values are omitted rather than rejected server-side.\n ...(this.canShowWeldingOperatorSpecificFields\n ? {\n arcLengthControlProcess1TestPiece: matchLovKey(\n this.arcLengthControlProcess1, this.notesData.arcVoltageControlOptions),\n visualControlProcess1TestPiece: matchLovKey(\n this.visualControlProcess1, this.notesData.visualControlOptions),\n jointTrackingProcess1TestPiece: matchLovKey(\n this.jointTrackingProcess1, this.notesData.jointTrackingOptions),\n arcLengthControlProcess2TestPiece: matchLovKey(\n this.arcLengthControlProcess2, this.notesData.arcVoltageControlOptions),\n visualControlProcess2TestPiece: matchLovKey(\n this.visualControlProcess2, this.notesData.visualControlOptions),\n jointTrackingProcess2TestPiece: matchLovKey(\n this.jointTrackingProcess2, this.notesData.jointTrackingOptions),\n arcLengthControlProcess3TestPiece: matchLovKey(\n this.arcLengthControlProcess3, this.notesData.arcVoltageControlOptions),\n visualControlProcess3TestPiece: matchLovKey(\n this.visualControlProcess3, this.notesData.visualControlOptions),\n jointTrackingProcess3TestPiece: matchLovKey(\n this.jointTrackingProcess3, this.notesData.jointTrackingOptions),\n // Welding Operator Welding Details — stricter gate: also requires ISO 14732\n ...(this.showWeldingDetailJointSensor\n ? {\n weldingOperatorWeldingDetailsProcess1TestPiece: matchLovKey(\n this.weldingOperatorWeldingDetailsProcess1,\n this.notesData.weldingOperatorWeldingDetailsOptions),\n weldingOperatorWeldingDetailsProcess2TestPiece: matchLovKey(\n this.weldingOperatorWeldingDetailsProcess2,\n this.notesData.weldingOperatorWeldingDetailsOptions),\n weldingOperatorWeldingDetailsProcess3TestPiece: matchLovKey(\n this.weldingOperatorWeldingDetailsProcess3,\n this.notesData.weldingOperatorWeldingDetailsOptions),\n }\n : {}),\n }\n : {}),\n };\n }\n\n /**\n * Validate required fields and, if valid, build the payload and invoke\n * the `@onApprove` callback with the queue item and edited data.\n *\n * Awaits `@onApprove` so the footer buttons stay disabled for as long as the\n * approval is in flight — the request creates the certificate and reports the\n * parse assessments, so it is far from instant. Dropped rather than\n * restartable: a second click while the first is running must be ignored,\n * never re-sent.\n */\n approveTask = dropTask(async () => {\n this.approveAttempted = true;\n if (!this.canApprove) {\n this.alertMessage.error(\n this.intl.t(\n this.missingRequiredFields.length > 0\n ? 'routes.digitalize-welder-certificate.queue.errors.validation-required-fields'\n : 'routes.digitalize-welder-certificate.queue.errors.validation-negative-measurements'\n )\n );\n return;\n }\n let payload = this.buildApprovePayload();\n if (this.args.onApprove) {\n await this.args.onApprove(this.args.item, payload);\n }\n });\n\n get isApproving() {\n return this.approveTask.isRunning;\n }\n\n @action\n reject() {\n // The buttons are disabled while approving; this also covers the paths that\n // bypass them (keyboard, the modal's own dismiss affordances).\n if (this.isApproving) return;\n if (this.args.onReject) {\n this.args.onReject(this.args.item);\n }\n }\n\n @action\n close() {\n if (this.isApproving) return;\n if (this.args.onClose) {\n this.args.onClose();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.buttons.upload-certificate\\\"}}\\n \\n\\n\\n
\\n
\\n {{t \\\"routes.digitalize-welder-certificate.queue.title\\\"}}\\n
\\n
\\n \\n
\\n
\\n\\n{{#if this.isUploadModalOpen}}\\n \\n{{/if}}\\n\", {\"contents\":\"\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.buttons.upload-certificate\\\"}}\\n \\n\\n\\n
\\n
\\n {{t \\\"routes.digitalize-welder-certificate.queue.title\\\"}}\\n
\\n
\\n \\n
\\n
\\n\\n{{#if this.isUploadModalOpen}}\\n \\n{{/if}}\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/page.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/page.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class DigitalizeWelderCertificatePageComponent extends Component {\n @tracked isUploadModalOpen = false;\n @tracked queueRefreshSignal = 0;\n\n @action\n openUploadModal() {\n this.isUploadModalOpen = true;\n }\n\n @action\n closeUploadModal() {\n this.isUploadModalOpen = false;\n }\n\n @action\n onUploadComplete() {\n // Close the modal after successful upload\n this.isUploadModalOpen = false;\n // Trigger queue refresh to show newly uploaded items\n this.queueRefreshSignal++;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Trigger refresh check when refreshSignal changes }}\\n{{this.shouldCheckRefresh}}\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.queue.buttons.refresh\\\"}}\\n \\n
\\n
\\n\\n {{#if (eq this.activeTab \\\"all\\\")}}\\n
\\n
\\n \\n {{option.label}}\\n \\n
\\n
\\n {{/if}}\\n\\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.queue.messages.loading\\\"}}

\\n
\\n {{else if this.isEmpty}}\\n \\n {{else}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.filteredItems as |item|}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n (eq item.status this.QUEUE_STATUS.PROCESSING)\\n (eq item.status this.QUEUE_STATUS.START)\\n )\\n }}\\n \\n \\n \\n {{else if (eq item.status this.QUEUE_STATUS.ERROR)}}\\n \\n \\n \\n {{/if}}\\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-welder-certificate.queue.columns.file-name\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.status\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.uploaded-by\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.date\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.actions\\\"}}
\\n \\n {{#if (eq item.status this.QUEUE_STATUS.PARSED)}}\\n \\n {{item.fileName}}\\n \\n {{else}}\\n {{item.fileName}}\\n {{/if}}\\n \\n \\n {{item.uploadedBy}}{{item.createdAt}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.queue.messages.processing-time\\\"}}\\n \\n
\\n \\n \\n {{item.errorMessage}}\\n \\n
\\n
\\n\\n {{! Pagination - only show when there are more items than page size }}\\n {{#if (gt this.totalCount this.pageSize)}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.hasPendingItems}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.queue.messages.auto-refreshing\\\"}}\\n
\\n {{/if}}\\n
\\n\\n{{#if this.reviewingItem}}\\n \\n{{/if}}\\n\\n{{! Quick Approve Modal }}\\n{{#if this.quickApproveItem}}\\n \\n{{/if}}\\n\\n{{! Confirmation Modal for Destructive Actions }}\\n{{#if this.pendingConfirmation}}\\n \\n \\n

{{this.pendingConfirmation.message}}

\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n {{#if (eq this.pendingConfirmation.type \\\"delete\\\")}}\\n {{t \\\"routes.digitalize-welder-certificate.queue.actions.delete\\\"}}\\n {{else}}\\n {{t \\\"routes.digitalize-welder-certificate.queue.actions.reject\\\"}}\\n {{/if}}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{! Trigger refresh check when refreshSignal changes }}\\n{{this.shouldCheckRefresh}}\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.queue.buttons.refresh\\\"}}\\n \\n
\\n
\\n\\n {{#if (eq this.activeTab \\\"all\\\")}}\\n
\\n
\\n \\n {{option.label}}\\n \\n
\\n
\\n {{/if}}\\n\\n {{#if this.isLoading}}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.queue.messages.loading\\\"}}

\\n
\\n {{else if this.isEmpty}}\\n \\n {{else}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.filteredItems as |item|}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n (eq item.status this.QUEUE_STATUS.PROCESSING)\\n (eq item.status this.QUEUE_STATUS.START)\\n )\\n }}\\n \\n \\n \\n {{else if (eq item.status this.QUEUE_STATUS.ERROR)}}\\n \\n \\n \\n {{/if}}\\n {{/each}}\\n \\n
{{t \\\"routes.digitalize-welder-certificate.queue.columns.file-name\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.status\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.uploaded-by\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.date\\\"}}{{t \\\"routes.digitalize-welder-certificate.queue.columns.actions\\\"}}
\\n \\n {{#if (eq item.status this.QUEUE_STATUS.PARSED)}}\\n \\n {{item.fileName}}\\n \\n {{else}}\\n {{item.fileName}}\\n {{/if}}\\n \\n \\n {{item.uploadedBy}}{{item.createdAt}}\\n \\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.queue.messages.processing-time\\\"}}\\n \\n
\\n \\n \\n {{item.errorMessage}}\\n \\n
\\n
\\n\\n {{! Pagination - only show when there are more items than page size }}\\n {{#if (gt this.totalCount this.pageSize)}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.hasPendingItems}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.queue.messages.auto-refreshing\\\"}}\\n
\\n {{/if}}\\n
\\n\\n{{#if this.reviewingItem}}\\n \\n{{/if}}\\n\\n{{! Quick Approve Modal }}\\n{{#if this.quickApproveItem}}\\n \\n{{/if}}\\n\\n{{! Confirmation Modal for Destructive Actions }}\\n{{#if this.pendingConfirmation}}\\n \\n \\n

{{this.pendingConfirmation.message}}

\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n {{#if (eq this.pendingConfirmation.type \\\"delete\\\")}}\\n {{t \\\"routes.digitalize-welder-certificate.queue.actions.delete\\\"}}\\n {{else}}\\n {{t \\\"routes.digitalize-welder-certificate.queue.actions.reject\\\"}}\\n {{/if}}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/queue-list.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/queue-list.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { dropTask, task, timeout } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport RouterService from '@ember/routing/router-service';\nimport WelderCertificateParseQueueService, {\n type WelderCertificateApproveResponse,\n} from 'weldnote/services/welder-certificate-parse-queue';\nimport {\n QUEUE_STATUS,\n type QueueItem,\n type QueueStatus,\n} from 'weldnote/utils/parse-queue-status';\nimport type { WelderCertificateApprovePayload } from './types/welder-certificate-api-response-types';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ERROR_CODES } = Constants;\n\ninterface ComboFilterOption {\n value: string;\n label: string;\n}\n\ninterface ConfirmationState {\n type: 'reject' | 'delete';\n item: QueueItem;\n title: string;\n message: string;\n}\n\ninterface QueueListArgs {\n refreshSignal?: number | null;\n onCountsChange?: (pendingCount: number, readyCount: number) => void;\n onUploadClick?: () => void;\n}\n\nexport default class DigitalizeWelderCertificateQueueListComponent extends Component {\n @service declare intl: IntlService;\n @service declare welderCertificateParseQueue: WelderCertificateParseQueueService;\n @service declare alertMessage: AlertMessageService;\n @service declare router: RouterService;\n\n @tracked items: QueueItem[] = [];\n @tracked isLoading = true;\n @tracked activeTab: 'reviewing' | 'all' = 'reviewing';\n @tracked selectedComboFilter = 'all';\n @tracked reviewingItem: QueueItem | null = null;\n @tracked quickApproveItem: QueueItem | null = null;\n @tracked pendingConfirmation: ConfirmationState | null = null;\n\n // Stable count of items in reviewing states (fetched via independent API call)\n @tracked reviewingCount = 0;\n\n // Pagination state\n @tracked currentPage = 1;\n @tracked totalCount = 0;\n @tracked pageSize = 20;\n\n POLL_INTERVAL = 5000; // 5 seconds\n QUEUE_STATUS = QUEUE_STATUS;\n\n // Track items hash to avoid unnecessary re-sorting\n _lastItemsHash: string | null = null;\n\n get isActionInProgress(): boolean {\n return (\n this.approveTask.isRunning ||\n this.rejectTask.isRunning ||\n this.deleteTask.isRunning ||\n this.retryTask.isRunning\n );\n }\n\n get comboFilterOptions(): ComboFilterOption[] {\n return [\n { value: 'all', label: this.intl.t('routes.digitalize-welder-certificate.queue.filters.all') },\n { value: 'pending', label: this.intl.t('routes.digitalize-welder-certificate.queue.filters.pending') },\n { value: 'ready', label: this.intl.t('routes.digitalize-welder-certificate.queue.filters.ready') },\n { value: 'completed', label: this.intl.t('routes.digitalize-welder-certificate.queue.filters.completed') },\n { value: 'errors', label: this.intl.t('routes.digitalize-welder-certificate.queue.filters.errors') },\n ];\n }\n\n get selectedComboFilterOption(): ComboFilterOption | undefined {\n return this.comboFilterOptions.find((o) => o.value === this.selectedComboFilter);\n }\n\n /**\n * With server-side filtering, filteredItems just returns the items\n * since filtering is already done on the backend.\n */\n get filteredItems(): QueueItem[] {\n return this.items;\n }\n\n /**\n * Convert current tab + combo filter to API status filter array.\n */\n getStatusFilterForApi(): QueueStatus[] | null {\n if (this.activeTab === 'reviewing') {\n return [this.QUEUE_STATUS.PARSED, this.QUEUE_STATUS.QUEUED, this.QUEUE_STATUS.START, this.QUEUE_STATUS.PROCESSING];\n }\n\n // \"all\" tab uses the combo box filter\n switch (this.selectedComboFilter) {\n case 'pending':\n return [this.QUEUE_STATUS.QUEUED, this.QUEUE_STATUS.START, this.QUEUE_STATUS.PROCESSING];\n case 'ready':\n return [this.QUEUE_STATUS.PARSED];\n case 'completed':\n return [this.QUEUE_STATUS.APPROVED, this.QUEUE_STATUS.REJECTED];\n case 'errors':\n return [this.QUEUE_STATUS.ERROR];\n default:\n return null; // 'all' - no filter\n }\n }\n\n get hasPendingItems(): boolean {\n return this.items.some(\n (item) =>\n item.status === this.QUEUE_STATUS.QUEUED ||\n item.status === this.QUEUE_STATUS.START ||\n item.status === this.QUEUE_STATUS.PROCESSING\n );\n }\n\n get isEmpty(): boolean {\n return this.filteredItems.length === 0;\n }\n\n // Track the last refresh signal to detect changes\n _lastRefreshSignal: number | null | undefined = null;\n\n constructor(owner: unknown, args: QueueListArgs) {\n super(owner, args);\n this._lastRefreshSignal = this.args.refreshSignal;\n this.loadItems.perform();\n }\n\n /**\n * Check if refresh signal changed and trigger refresh if needed\n * Called from template using did-update modifier or getter\n */\n get shouldCheckRefresh(): null {\n if (this.args.refreshSignal !== this._lastRefreshSignal) {\n this._lastRefreshSignal = this.args.refreshSignal;\n // Trigger refresh asynchronously to avoid issues during render\n if (this.args.refreshSignal !== null && this.args.refreshSignal !== undefined) {\n this.loadItems.perform();\n }\n }\n return null;\n }\n\n willDestroy(): void {\n super.willDestroy();\n this.pollItems.cancelAll();\n this.loadItems.cancelAll();\n }\n\n /**\n * Notify parent of count changes for tab badges\n */\n notifyCountChanges(): void {\n if (this.args.onCountsChange) {\n this.args.onCountsChange(this.reviewingCount, 0);\n }\n }\n\n /**\n * Calculate a hash of items to detect changes\n */\n _calculateItemsHash(items: QueueItem[]): string {\n return items.map((item) => `${item.id}:${item.status}`).join('|');\n }\n\n /**\n * Fetch the reviewing count independently so the badge stays stable\n * regardless of which tab or filter is active.\n */\n async _fetchReviewingCount(): Promise {\n try {\n const reviewingStatuses: QueueStatus[] = [\n this.QUEUE_STATUS.PARSED,\n this.QUEUE_STATUS.QUEUED,\n this.QUEUE_STATUS.START,\n this.QUEUE_STATUS.PROCESSING,\n ];\n let result = await this.welderCertificateParseQueue.listQueueItems(reviewingStatuses, 1, 1);\n this.reviewingCount = result.count;\n } catch {\n // Don't fail the main load if count fetch fails\n }\n }\n\n /**\n * Check if disappeared items went to ERROR status.\n * If so, alert the user and switch to the \"all\" tab with the errors filter.\n */\n async _checkForErroredItems(itemIds: string[]): Promise {\n try {\n let erroredFileNames: string[] = [];\n let checks = itemIds.map(async (id) => {\n let item = await this.welderCertificateParseQueue.getQueueItem(id);\n if (item.status === this.QUEUE_STATUS.ERROR) {\n erroredFileNames.push(item.fileName ?? id);\n }\n });\n await Promise.all(checks);\n\n if (erroredFileNames.length > 0) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.processing-failed', {\n fileNames: erroredFileNames.join(', '),\n })\n );\n\n // Switch to \"all\" tab with errors filter so the user can see what happened\n this.activeTab = 'all';\n this.selectedComboFilter = 'errors';\n this.currentPage = 1;\n this.loadItems.perform();\n }\n } catch {\n // Don't fail the poll cycle if this check fails\n }\n }\n\n /**\n * Update items with sorting only when data has changed\n */\n _updateItems(newItems: QueueItem[]): void {\n let items = Array.isArray(newItems) ? newItems : [];\n let newHash = this._calculateItemsHash(items);\n\n // Only sort if items have changed\n if (newHash !== this._lastItemsHash) {\n items.sort(\n (a, b) =>\n new Date(b.createdAt as string).getTime() - new Date(a.createdAt as string).getTime()\n );\n this._lastItemsHash = newHash;\n }\n\n this.items = items;\n }\n\n loadItems = task(this, { drop: true }, async () => {\n this.isLoading = true;\n try {\n const statusFilter = this.getStatusFilterForApi();\n let result = await this.welderCertificateParseQueue.listQueueItems(\n statusFilter,\n this.currentPage,\n this.pageSize\n );\n\n // Handle paginated response format: { list: [...], count: N }\n this._updateItems(result.list);\n this.totalCount = result.count;\n\n // Update reviewing count: use totalCount directly when on the reviewing\n // tab (same filter), otherwise make an independent API call.\n if (this.activeTab === 'reviewing') {\n this.reviewingCount = result.count;\n } else {\n await this._fetchReviewingCount();\n }\n\n // Notify parent of count changes\n this.notifyCountChanges();\n\n // Start polling if there are pending items and not already polling\n if (this.hasPendingItems && !this.pollItems.isRunning) {\n this.pollItems.perform();\n }\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.load-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n } finally {\n this.isLoading = false;\n }\n });\n\n pollItems = task(this, { restartable: true }, async () => {\n // Keep polling while there are pending items and component is not destroyed\n while (this.hasPendingItems && !this.isDestroying && !this.isDestroyed) {\n // Capture IDs of pending items before polling so we can detect if they disappear\n let pendingItemIds = this.items\n .filter(\n (item) =>\n item.status === this.QUEUE_STATUS.QUEUED ||\n item.status === this.QUEUE_STATUS.START ||\n item.status === this.QUEUE_STATUS.PROCESSING\n )\n .map((item) => item.id);\n\n await timeout(this.POLL_INTERVAL);\n\n // Double check we're not destroyed after timeout\n if (this.isDestroying || this.isDestroyed) {\n return;\n }\n\n try {\n const statusFilter = this.getStatusFilterForApi();\n let result = await this.welderCertificateParseQueue.listQueueItems(\n statusFilter,\n this.currentPage,\n this.pageSize\n );\n\n // Handle paginated response format: { list: [...], count: N }\n this._updateItems(result.list);\n this.totalCount = result.count;\n\n // Keep reviewing count in sync\n if (this.activeTab === 'reviewing') {\n this.reviewingCount = result.count;\n } else {\n await this._fetchReviewingCount();\n }\n\n // Notify parent of count changes\n this.notifyCountChanges();\n\n // Detect items that disappeared from the reviewing tab (may have errored)\n if (this.activeTab === 'reviewing' && pendingItemIds.length > 0) {\n let currentIds = new Set(result.list.map((item: QueueItem) => item.id));\n let disappearedIds = pendingItemIds.filter((id) => !currentIds.has(id));\n\n if (disappearedIds.length > 0) {\n await this._checkForErroredItems(disappearedIds);\n }\n }\n } catch {\n // Don't show alert for polling errors to avoid spam\n }\n }\n });\n\n @action\n setTab(tab: 'reviewing' | 'all'): void {\n if (this.activeTab === tab) {\n return;\n }\n this.activeTab = tab;\n this.currentPage = 1;\n this.loadItems.perform();\n }\n\n @action\n setComboFilter(option: ComboFilterOption): void {\n if (this.selectedComboFilter === option.value) {\n return;\n }\n this.selectedComboFilter = option.value;\n this.currentPage = 1;\n this.loadItems.perform();\n }\n\n @action\n onPageChange(pageNumber: number): void {\n this.currentPage = pageNumber;\n this.loadItems.perform();\n }\n\n @action\n refresh(): void {\n this.loadItems.perform();\n }\n\n @action\n onUploadClick(): void {\n this.args.onUploadClick?.();\n }\n\n @action\n onReview(item: QueueItem): void {\n this.reviewingItem = item;\n }\n\n @action\n closeReview(): void {\n this.reviewingItem = null;\n }\n\n /**\n * Returns the running task instance when it actually approves, so the review\n * modal can await it and keep its buttons disabled meanwhile. The early\n * returns (quick-approve flow, failed validation) have nothing to wait on.\n */\n @action\n onApprove(\n item: QueueItem,\n editedData: WelderCertificateApprovePayload | null = null\n ): Promise | void {\n // If called without editedData, open the quick approve modal\n // (this is the flow from queue-item-actions button)\n if (!editedData) {\n this.quickApproveItem = item;\n return;\n }\n\n // If called with editedData, this is from the review modal - do full approval\n // Validate required fields before making API call\n if (!editedData.standardId || !editedData.unitSystem) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.validation-required-fields')\n );\n return;\n }\n\n return this.approveTask.perform(item, editedData);\n }\n\n approveTask = dropTask(async (item: QueueItem, editedData: WelderCertificateApprovePayload) => {\n try {\n let result: WelderCertificateApproveResponse = await this.welderCertificateParseQueue.approveItem(item.id, editedData);\n this.alertMessage.success(this.intl.t('routes.digitalize-welder-certificate.queue.messages.approved'));\n\n // Close review modal if open\n if (this.reviewingItem?.id === item.id) {\n this.reviewingItem = null;\n }\n\n if (result.createdWelderCertificateId) {\n this.router.transitionTo('welder-certificate', result.createdWelderCertificateId);\n }\n } catch (error) {\n let err = error as { payload?: { errorCode?: number }; message?: string };\n if (err.payload?.errorCode === parseInt(ERROR_CODES.DUPLICATED_INSTANCE)) {\n this.alertMessage.error(\n this.intl\n .t('edit-view.actions.unique-violation-fields', {\n fields: this.intl.t('model.welder-certificate.certificateNumber.label'),\n })\n .toString()\n );\n return;\n }\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.approve-failed') +\n (err.message ? `: ${err.message}` : '')\n );\n }\n });\n\n @action\n closeQuickApprove(): void {\n this.quickApproveItem = null;\n }\n\n @action\n switchToReview(item: QueueItem): void {\n this.quickApproveItem = null;\n this.reviewingItem = item;\n }\n\n @action\n onQuickApproveSuccess(_item: QueueItem): void {\n // Close quick approve modal after successful approval\n this.quickApproveItem = null;\n // Refresh list to show updated status\n this.loadItems.perform();\n }\n\n @action\n requestReject(item: QueueItem): void {\n // Show confirmation for reject\n this.pendingConfirmation = {\n type: 'reject',\n item,\n title: this.intl.t('routes.digitalize-welder-certificate.queue.confirm.reject-title'),\n message: this.intl.t('routes.digitalize-welder-certificate.queue.confirm.reject-message', {\n fileName: item.fileName,\n }),\n };\n }\n\n @action\n requestDelete(item: QueueItem): void {\n // Show confirmation for delete\n this.pendingConfirmation = {\n type: 'delete',\n item,\n title: this.intl.t('routes.digitalize-welder-certificate.queue.confirm.delete-title'),\n message: this.intl.t('routes.digitalize-welder-certificate.queue.confirm.delete-message', {\n fileName: item.fileName,\n }),\n };\n }\n\n @action\n cancelConfirmation(): void {\n this.pendingConfirmation = null;\n }\n\n @action\n confirmAction(): void {\n if (!this.pendingConfirmation) {\n return;\n }\n\n let { type, item } = this.pendingConfirmation;\n this.pendingConfirmation = null;\n\n if (type === 'reject') {\n this.rejectTask.perform(item);\n } else if (type === 'delete') {\n this.deleteTask.perform(item);\n }\n }\n\n @action\n onReject(item: QueueItem): void {\n // Called from review modal - show confirmation\n this.requestReject(item);\n }\n\n rejectTask = dropTask(async (item: QueueItem) => {\n try {\n await this.welderCertificateParseQueue.rejectItem(item.id);\n this.alertMessage.success(this.intl.t('routes.digitalize-welder-certificate.queue.messages.rejected'));\n\n // Close review modal if open\n if (this.reviewingItem?.id === item.id) {\n this.reviewingItem = null;\n }\n\n await this.loadItems.perform();\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.reject-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n }\n });\n\n @action\n onDelete(item: QueueItem): void {\n // Show confirmation before delete\n this.requestDelete(item);\n }\n\n deleteTask = dropTask(async (item: QueueItem) => {\n try {\n await this.welderCertificateParseQueue.deleteItem(item.id);\n this.alertMessage.success(this.intl.t('routes.digitalize-welder-certificate.queue.messages.deleted'));\n await this.loadItems.perform();\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.delete-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n }\n });\n\n @action\n onRetry(item: QueueItem): void {\n this.retryTask.perform(item);\n }\n\n retryTask = dropTask(async (item: QueueItem) => {\n try {\n await this.welderCertificateParseQueue.retryItem(item.id);\n this.alertMessage.success(this.intl.t('routes.digitalize-welder-certificate.queue.messages.retried'));\n await this.loadItems.perform();\n } catch (error) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.queue.errors.retry-failed') +\n ((error as Error).message ? `: ${(error as Error).message}` : '')\n );\n }\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if this.isLoading}}\\n {{! ═══ Loading State ═══ }}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.review.loading\\\"}}

\\n
\\n {{else}}\\n {{! ═══ Ready to Approve State ═══ }}\\n

\\n {{t\\n \\\"routes.digitalize-welder-certificate.quick-approve.confirm-message\\\"\\n fileName=@item.fileName\\n }}\\n

\\n\\n {{! Required Fields: Certificate Number, Standard, Unit System, Certificate Type }}\\n \\n \\n {{! Certificate Number Field (always editable, required) }}\\n
\\n \\n
\\n
\\n \\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n
\\n \\n {{unit.label}}\\n \\n
\\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n
\\n \\n
\\n \\n {{certType.label}}\\n \\n
\\n {{#if this.parsedCertificateTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedCertificateTypeHint}}\\n \\n {{/if}}\\n
\\n
\\n\\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.quick-approve.buttons.review\\\"}}\\n \\n
\\n\\n {{! Error Message (for 422 duplicate) }}\\n {{#if this.errorMessage}}\\n
\\n \\n {{this.errorMessage}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n \\n
\\n {{! Cancel Button }}\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n\\n
\\n {{! Approve Button }}\\n \\n {{#if this.isSubmitting}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-welder-certificate.quick-approve.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\", {\"contents\":\"\\n \\n {{#if this.isLoading}}\\n {{! ═══ Loading State ═══ }}\\n
\\n \\n

{{t \\\"routes.digitalize-welder-certificate.review.loading\\\"}}

\\n
\\n {{else}}\\n {{! ═══ Ready to Approve State ═══ }}\\n

\\n {{t\\n \\\"routes.digitalize-welder-certificate.quick-approve.confirm-message\\\"\\n fileName=@item.fileName\\n }}\\n

\\n\\n {{! Required Fields: Certificate Number, Standard, Unit System, Certificate Type }}\\n \\n \\n {{! Certificate Number Field (always editable, required) }}\\n
\\n \\n
\\n
\\n \\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n
\\n \\n {{unit.label}}\\n \\n
\\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n
\\n \\n
\\n \\n {{certType.label}}\\n \\n
\\n {{#if this.parsedCertificateTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedCertificateTypeHint}}\\n \\n {{/if}}\\n
\\n
\\n\\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.quick-approve.buttons.review\\\"}}\\n \\n
\\n\\n {{! Error Message (for 422 duplicate) }}\\n {{#if this.errorMessage}}\\n
\\n \\n {{this.errorMessage}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n \\n
\\n {{! Cancel Button }}\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n\\n
\\n {{! Approve Button }}\\n \\n {{#if this.isSubmitting}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-welder-certificate.quick-approve.buttons.approve\\\"}}\\n \\n
\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/quick-approve-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/quick-approve-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { dropTask, task } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport RouterService from '@ember/routing/router-service';\nimport Constants from 'weldnote/utils/constants';\nimport WelderCertificateParseQueueService, {\n type QueueItem,\n} from 'weldnote/services/welder-certificate-parse-queue';\nimport type {\n WelderCertificateParseApiResponse,\n WelderCertificateValidationResult,\n WelderCertificateApprovePayload,\n MappedValue,\n} from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport type WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\n\nconst { ERROR_CODES, CERTIFICATE_TYPE } = Constants;\n\ninterface EntityOption {\n id?: string;\n key?: string;\n label?: string;\n get?: (key: string) => unknown;\n}\n\ninterface QuickApproveModalArgs {\n item: QueueItem;\n onClose: () => void;\n onReview: (item: QueueItem) => void;\n onApprove: (item: QueueItem, result: { createdWelderCertificateId?: string }) => void;\n}\n\nexport default class DigitalizeWelderCertificateQuickApproveModalComponent extends Component {\n @service('welder-certificate-parse-queue')\n declare welderCertificateParseQueue: WelderCertificateParseQueueService;\n @service('weldnote-data') declare data: WeldnoteDataService;\n @service('weldcloud-notes-data') declare notesData: WeldcloudNotesData;\n @service declare intl: IntlService;\n @service declare alertMessage: AlertMessageService;\n @service declare router: RouterService;\n\n @tracked isLoading = true;\n @tracked errorMessage: string | null = null;\n @tracked certificateNumber = '';\n @tracked selectedStandard: EntityOption | null = null;\n @tracked selectedUnitSystem: EntityOption | null = null;\n @tracked selectedCertificateType: EntityOption | null = null;\n\n // Parsed data from API\n @tracked parsedData: WelderCertificateParseApiResponse | null = null;\n @tracked validation: WelderCertificateValidationResult | null = null;\n\n constructor(owner: unknown, args: QuickApproveModalArgs) {\n super(owner, args);\n this.loadData.perform();\n }\n\n /**\n * Load queue item data to check if required fields are mapped\n */\n loadData = task(this, { drop: true }, async () => {\n this.isLoading = true;\n this.errorMessage = null;\n try {\n let result = await this.welderCertificateParseQueue.getQueueItem(\n this.args.item.id\n );\n let parseResult = result.parseResult || result;\n this.parsedData =\n (parseResult.parsedData as WelderCertificateParseApiResponse) || null;\n this.validation =\n (parseResult.validation as WelderCertificateValidationResult) || null;\n\n // Pre-fill certificate number from parsed data\n this.certificateNumber = this.parsedData?.certificate_name || '';\n\n // Resolve standard, unit system, and certificate type from validation mappings\n let mappings = this.validation?.mappings || {};\n this._resolveEntity(\n 'standard',\n mappings,\n 'selectedStandard',\n this.standardOptions\n );\n this._resolveUnitSystem(this.parsedData?.unit_system);\n this._resolveCertificateType(this.parsedData?.certificate_type);\n } catch (error) {\n this.errorMessage =\n (error as Error).message ||\n this.intl.t(\n 'routes.digitalize-welder-certificate.queue.errors.load-details-failed'\n );\n } finally {\n this.isLoading = false;\n }\n });\n\n // ── Options ──────────────────────────────────────────────\n\n get standardOptions(): EntityOption[] {\n return (this.data as any).welderStandardOptions;\n }\n\n get unitSystemOptions(): EntityOption[] {\n return (this.notesData as any).unitSystemOptions;\n }\n\n get certificateTypeOptions(): EntityOption[] {\n return [\n {\n key: CERTIFICATE_TYPE.WELDER,\n label: this.intl.t('lov.certificate-type.WELDER'),\n },\n {\n key: CERTIFICATE_TYPE.OPERATOR,\n label: this.intl.t('lov.certificate-type.OPERATOR'),\n },\n ];\n }\n\n // ── Derived values ──────────────────────────────────────\n\n get standardId(): string | null {\n let id =\n (this.selectedStandard?.get?.('id') as string | undefined) ??\n this.selectedStandard?.id;\n return id || null;\n }\n\n get resolvedUnitSystem(): string | null {\n let key =\n (this.selectedUnitSystem?.get?.('key') as string | undefined) ??\n this.selectedUnitSystem?.key;\n return key || null;\n }\n\n get resolvedCertificateType(): string | null {\n return this.selectedCertificateType?.key || null;\n }\n\n // ── Parsed value hints ──────────────────────────────────\n\n get parsedStandardHint(): string {\n return (\n this.validation?.mappings?.standard?.originalValue ||\n this.parsedData?.standard ||\n ''\n );\n }\n\n get parsedUnitSystemHint(): string {\n return this.parsedData?.unit_system || '';\n }\n\n get parsedCertificateTypeHint(): string {\n return this.parsedData?.certificate_type || '';\n }\n\n /**\n * Check if the approve button should be disabled\n */\n get isApproveDisabled(): boolean {\n return (\n this.isSubmitting ||\n !this.isCertificateNumberValid ||\n !this.standardId ||\n !this.resolvedUnitSystem ||\n !this.resolvedCertificateType\n );\n }\n\n get isCertificateNumberValid(): boolean {\n return Boolean(\n this.certificateNumber && this.certificateNumber.trim().length > 0\n );\n }\n\n /**\n * Build the payload for quick approval\n */\n buildPayload(): WelderCertificateApprovePayload {\n return {\n standardId: this.standardId || undefined,\n unitSystem: this.resolvedUnitSystem || undefined,\n certificateNumber: this.certificateNumber,\n certificateType: this.resolvedCertificateType || undefined,\n };\n }\n\n @action\n setStandard(standard: EntityOption): void {\n this.selectedStandard = standard;\n }\n\n @action\n setUnitSystem(val: EntityOption): void {\n this.selectedUnitSystem = val;\n }\n\n @action\n setCertificateType(val: EntityOption): void {\n this.selectedCertificateType = val;\n }\n\n @action\n updateCertificateNumber(val: string | undefined): void {\n this.certificateNumber = val || '';\n // Clear error message when user edits the field\n if (this.errorMessage) {\n this.errorMessage = null;\n }\n }\n\n @action\n close(): void {\n // The buttons are disabled while submitting; this also covers the paths that\n // bypass them (keyboard, the modal's own dismiss affordances).\n if (this.isSubmitting) return;\n if (this.args.onClose) {\n this.args.onClose();\n }\n }\n\n @action\n openReview(): void {\n if (this.isSubmitting) return;\n if (this.args.onReview) {\n this.args.onReview(this.args.item);\n }\n }\n\n get isSubmitting(): boolean {\n return this.approveTask.isRunning;\n }\n\n /**\n * Approve the queue item with the quick payload.\n *\n * Dropped rather than restartable: a second click while the first is running\n * must be ignored, never re-sent. The task also replaces a manual submitting\n * flag, so the state cannot be left stuck — and it is cancelled if the modal\n * is torn down mid-flight (this navigates away on success).\n */\n approveTask = dropTask(async () => {\n this.errorMessage = null;\n\n try {\n let payload = this.buildPayload();\n let result = await this.welderCertificateParseQueue.approveItem(\n this.args.item.id,\n payload\n );\n\n this.alertMessage.success(\n this.intl.t(\n 'routes.digitalize-welder-certificate.queue.messages.approved'\n )\n );\n\n // Notify parent of successful approval\n if (this.args.onApprove) {\n this.args.onApprove(this.args.item, result);\n }\n\n // Navigate to newly created welder certificate\n if (result.createdWelderCertificateId) {\n this.router.transitionTo(\n 'welder-certificate',\n result.createdWelderCertificateId\n );\n }\n } catch (error) {\n // Handle duplicate certificate number error\n let err = error as {\n payload?: { errorCode?: number };\n message?: string;\n };\n if (\n err.payload?.errorCode ===\n parseInt(ERROR_CODES.DUPLICATED_INSTANCE)\n ) {\n this.errorMessage = this.intl.t(\n 'routes.digitalize-welder-certificate.quick-approve.duplicate-error'\n );\n return;\n }\n\n // Generic error\n this.errorMessage =\n this.intl.t(\n 'routes.digitalize-welder-certificate.queue.errors.approve-failed'\n ) + (err.message ? `: ${err.message}` : '');\n }\n });\n\n _resolveEntity(\n mappingKey: string,\n mappings: Partial>,\n trackedKey: 'selectedStandard' | 'selectedUnitSystem',\n options: EntityOption[] | null\n ): void {\n let mapping = mappings[mappingKey];\n if (mapping !== undefined && mapping.entityId && options) {\n let found = Array.isArray(options)\n ? options.find((o) => {\n let id = o.get ? (o.get('id') as string) : o.id;\n return String(id) === String(mapping?.entityId);\n })\n : null;\n if (found) {\n this[trackedKey] = found;\n return;\n }\n }\n this[trackedKey] = null;\n }\n\n _resolveUnitSystem(parsedValue: string | undefined): void {\n if (!parsedValue) return;\n let options = this.unitSystemOptions;\n if (!options) return;\n let match = options.find((o) => {\n let key = o.key || (o.get?.('key') as string | undefined);\n return key && parsedValue.toUpperCase().startsWith(key.toUpperCase());\n });\n if (match) {\n this.selectedUnitSystem = match;\n }\n }\n\n _resolveCertificateType(parsedValue: string | undefined): void {\n let options = this.certificateTypeOptions;\n if (parsedValue) {\n let match = options.find(\n (o) => o.key?.toUpperCase() === parsedValue.toUpperCase()\n );\n if (match) {\n this.selectedCertificateType = match;\n return;\n }\n }\n // Default to welder certificate when parser returns nothing\n let welderOption = options.find((o) => o.key === CERTIFICATE_TYPE.WELDER);\n if (welderOption) {\n this.selectedCertificateType = welderOption;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n \\n \\n {{#if this.parsedBaseMaterial1Hint}}\\n \\n {{this.parsedBaseMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBaseMaterial2Hint}}\\n \\n {{this.parsedBaseMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{! Test piece thicknesses per layer }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.test-piece-dimensions\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n {{opt.label}}\\n \\n \\n \\n \\n \\n \\n \\n {{opt.label}}\\n \\n \\n \\n \\n \\n \\n \\n {{opt.label}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n{{! Quick Create Base Material 1 Modal }}\\n{{#if this.isCreatingBaseMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Base Material 2 Modal }}\\n{{#if this.isCreatingBaseMaterial2}}\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n \\n \\n {{#if this.parsedBaseMaterial1Hint}}\\n \\n {{this.parsedBaseMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.parsedBaseMaterial2Hint}}\\n \\n {{this.parsedBaseMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBaseMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-base-material.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{! Test piece thicknesses per layer }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.test-piece-dimensions\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n {{opt.label}}\\n \\n \\n \\n \\n \\n \\n \\n {{opt.label}}\\n \\n \\n \\n \\n \\n \\n \\n {{opt.label}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n{{! Quick Create Base Material 1 Modal }}\\n{{#if this.isCreatingBaseMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Base Material 2 Modal }}\\n{{#if this.isCreatingBaseMaterial2}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-base-materials.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-base-materials.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport type IntlService from 'ember-intl/services/intl';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type BaseMaterial from 'weldnote/models/base-material';\nimport type {\n TestPieceBaseMaterials,\n BaseMaterialInfo,\n KeyLabelOption,\n MappedValue,\n} from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport { parsedBaseMaterialHint } from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionBaseMaterialsArgs {\n // Canonical state (owned by parent)\n baseMaterial1: BaseMaterial | null;\n baseMaterial1Thickness: number | null;\n baseMaterial1Diameter: number | null;\n baseMaterial2: BaseMaterial | null;\n baseMaterial2Thickness: number | null;\n baseMaterial2Diameter: number | null;\n thicknessRootTestPiece: number | null;\n thicknessRootLayerTestPiece: string;\n thicknessFillTestPiece: number | null;\n thicknessFillLayerTestPiece: string;\n thicknessCapTestPiece: number | null;\n thicknessCapLayerTestPiece: string;\n thicknessTotalTestPiece: number | null;\n diameterTestPiece: number | null;\n\n // Context\n industryCode: unknown;\n unitLabel: string;\n layerOptions: KeyLabelOption[];\n\n // Parsed data for hint computation\n parsedBaseMaterials: TestPieceBaseMaterials | null;\n validationMappings: Record | null;\n\n // Field errors for negative measurements, keyed by field name\n measurementErrors: Record>;\n\n // Generic callback for updating parent state\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionBaseMaterialsComponent extends Component {\n @service declare intl: IntlService;\n @service declare alertMessage: AlertMessageService;\n\n // ── Quick Create: Base Material ─────────────────────────\n @tracked isCreatingBaseMaterial1 = false;\n @tracked isCreatingBaseMaterial2 = false;\n\n // ── Computed: Parsed Hints ──────────────────────────────\n\n get parsedBaseMaterial1Hint() {\n return parsedBaseMaterialHint(\n this.args.validationMappings,\n 1,\n this.args.parsedBaseMaterials?.base_material_1\n );\n }\n\n get parsedBaseMaterial2Hint() {\n return parsedBaseMaterialHint(\n this.args.validationMappings,\n 2,\n this.args.parsedBaseMaterials?.base_material_2\n );\n }\n\n // ── Computed: Can Quick Create ──────────────────────────\n\n _canQuickCreate(index: number): boolean {\n let material = index === 1 ? this.args.baseMaterial1 : this.args.baseMaterial2;\n if (material) return false;\n if (!this.args.industryCode) return false;\n let bm: BaseMaterialInfo | undefined =\n index === 1\n ? this.args.parsedBaseMaterials?.base_material_1\n : this.args.parsedBaseMaterials?.base_material_2;\n if (!bm) return false;\n return [bm.specification, bm.grade, bm.group].filter(Boolean).length >= 2;\n }\n\n get canQuickCreateBaseMaterial1() {\n return this._canQuickCreate(1);\n }\n\n get canQuickCreateBaseMaterial2() {\n return this._canQuickCreate(2);\n }\n\n // ── Computed: Search Values ─────────────────────────────\n\n _parsedBaseMaterialInfo(index: number): BaseMaterialInfo | null {\n if (index === 1) return this.args.parsedBaseMaterials?.base_material_1 || null;\n return this.args.parsedBaseMaterials?.base_material_2 || null;\n }\n\n get baseMaterial1SearchValues() {\n let bm = this._parsedBaseMaterialInfo(1);\n return {\n specification: bm?.specification || '',\n grade: bm?.grade || '',\n group: bm?.group || '',\n };\n }\n\n get baseMaterial2SearchValues() {\n let bm = this._parsedBaseMaterialInfo(2);\n return {\n specification: bm?.specification || '',\n grade: bm?.grade || '',\n group: bm?.group || '',\n };\n }\n\n // ── Computed: Layer Selection ────────────────────────────\n\n _selectedLayerOption(key: string): KeyLabelOption | null {\n if (!key) return null;\n return this.args.layerOptions?.find((o: KeyLabelOption) => o.key === key) || null;\n }\n\n get selectedThicknessRootLayer() {\n return this._selectedLayerOption(this.args.thicknessRootLayerTestPiece);\n }\n\n get selectedThicknessFillLayer() {\n return this._selectedLayerOption(this.args.thicknessFillLayerTestPiece);\n }\n\n get selectedThicknessCapLayer() {\n return this._selectedLayerOption(this.args.thicknessCapLayerTestPiece);\n }\n\n // ── Actions: Base Material Selection ────────────────────\n\n @action setBaseMaterial1(material: BaseMaterial | null) {\n this.args.onUpdate('baseMaterial1', material);\n }\n\n @action removeBaseMaterial1() {\n this.args.onUpdate('baseMaterial1', null);\n }\n\n @action setBaseMaterial2(material: BaseMaterial | null) {\n this.args.onUpdate('baseMaterial2', material);\n }\n\n @action removeBaseMaterial2() {\n this.args.onUpdate('baseMaterial2', null);\n }\n\n // ── Actions: Layer Selection ────────────────────────────\n\n @action setThicknessRootLayer(option: KeyLabelOption | null) {\n this.args.onUpdate('thicknessRootLayerTestPiece', option?.key || '');\n }\n\n @action setThicknessFillLayer(option: KeyLabelOption | null) {\n this.args.onUpdate('thicknessFillLayerTestPiece', option?.key || '');\n }\n\n @action setThicknessCapLayer(option: KeyLabelOption | null) {\n this.args.onUpdate('thicknessCapLayerTestPiece', option?.key || '');\n }\n\n // ── Actions: Quick Create ───────────────────────────────\n\n @action openQuickCreateBaseMaterial(index: number) {\n if (index === 1) {\n this.isCreatingBaseMaterial1 = true;\n } else {\n this.isCreatingBaseMaterial2 = true;\n }\n }\n\n @action cancelQuickCreateBaseMaterial(index: number) {\n if (index === 1) {\n this.isCreatingBaseMaterial1 = false;\n } else {\n this.isCreatingBaseMaterial2 = false;\n }\n }\n\n @action handleBaseMaterialCreated(index: number, saved: BaseMaterial) {\n this.args.onUpdate(index === 1 ? 'baseMaterial1' : 'baseMaterial2', saved);\n if (index === 1) {\n this.isCreatingBaseMaterial1 = false;\n } else {\n this.isCreatingBaseMaterial2 = false;\n }\n this.alertMessage.success(\n this.intl.t('routes.digitalize-welder-certificate.review.create-base-material.success')\n );\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{! Filler Materials }}\\n \\n \\n \\n {{#if this.parsedFillerMaterial1Hint}}\\n \\n {{this.parsedFillerMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation1Hint}}\\n \\n {{this.parsedCommercialDesignation1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation1}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial2Hint}}\\n \\n {{this.parsedFillerMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation2Hint}}\\n \\n {{this.parsedCommercialDesignation2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation2}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial3Hint}}\\n \\n {{this.parsedFillerMaterial3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial3}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation3Hint}}\\n \\n {{this.parsedCommercialDesignation3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation3}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Electrode Types (Root/Fill/Cap) }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.electrode-types\\\"\\n }}
\\n \\n \\n \\n {{et.shortDesignation}}\\n \\n {{#if this.parsedElectrodeType1Hint}}\\n \\n {{this.parsedElectrodeType1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{et.shortDesignation}}\\n \\n {{#if this.parsedElectrodeType2Hint}}\\n \\n {{this.parsedElectrodeType2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{et.shortDesignation}}\\n \\n {{#if this.parsedElectrodeType3Hint}}\\n \\n {{this.parsedElectrodeType3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Shielding Root/Fill/Cap }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.shielding\\\"\\n }}
\\n\\n {{! Shielding Root }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding1Hint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedShielding1Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding1Flux}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1GasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isShielding1Flux}}\\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1FluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding Fill }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding2Hint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedShielding2Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding2Flux}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2GasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isShielding2Flux}}\\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2FluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding Cap }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding3Hint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedShielding3Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding3Flux}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3GasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isShielding3Flux}}\\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3FluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Backing }}\\n
{{t \\\"routes.digitalize-welder-certificate.review.fields.backing\\\"}}
\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedBackingHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedBackingHint}}\\n \\n {{/if}}\\n \\n \\n {{#if this.isBackingGas}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else if this.isBackingFlux}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isBackingGas}}\\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingGasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isBackingFlux}}\\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingFluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Backing flow rates per layer }}\\n {{#if this.isBackingGas}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n\\n\\n\\n{{! ── Quick Create Modals (owned by this section) ───────────── }}\\n\\n{{! Quick Create Filler Material 1 Modal }}\\n{{#if this.isCreatingFillerMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 2 Modal }}\\n{{#if this.isCreatingFillerMaterial2}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 3 Modal }}\\n{{#if this.isCreatingFillerMaterial3}}\\n \\n{{/if}}\\n\\n{{! Quick Create Commercial Designation Modal }}\\n{{#if this.isCreatingCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickCommercialDesignationTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.create-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Gas Commercial Designation Modal }}\\n{{#if this.isCreatingGasCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickGasCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.create-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Flux Commercial Designation Modal }}\\n{{#if this.isCreatingFluxCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickFluxCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.create-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n {{! Filler Materials }}\\n \\n \\n \\n {{#if this.parsedFillerMaterial1Hint}}\\n \\n {{this.parsedFillerMaterial1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial1}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation1Hint}}\\n \\n {{this.parsedCommercialDesignation1Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation1}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial2Hint}}\\n \\n {{this.parsedFillerMaterial2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial2}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation2Hint}}\\n \\n {{this.parsedCommercialDesignation2Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation2}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if this.parsedFillerMaterial3Hint}}\\n \\n {{this.parsedFillerMaterial3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateFillerMaterial3}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-filler-material.button\\\"}}\\n \\n {{/if}}\\n \\n {{#if this.parsedCommercialDesignation3Hint}}\\n \\n {{this.parsedCommercialDesignation3Hint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateCommercialDesignation3}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.button\\\"}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Electrode Types (Root/Fill/Cap) }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.electrode-types\\\"\\n }}
\\n \\n \\n \\n {{et.shortDesignation}}\\n \\n {{#if this.parsedElectrodeType1Hint}}\\n \\n {{this.parsedElectrodeType1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{et.shortDesignation}}\\n \\n {{#if this.parsedElectrodeType2Hint}}\\n \\n {{this.parsedElectrodeType2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{et.shortDesignation}}\\n \\n {{#if this.parsedElectrodeType3Hint}}\\n \\n {{this.parsedElectrodeType3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Shielding Root/Fill/Cap }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.shielding\\\"\\n }}
\\n\\n {{! Shielding Root }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding1Hint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedShielding1Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding1Flux}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if this.isShielding1Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1GasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isShielding1Flux}}\\n \\n \\n \\n \\n {{#if this.parsedShielding1CDHint}}\\n \\n {{this.parsedShielding1CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding1FluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding Fill }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding2Hint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedShielding2Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding2Flux}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if this.isShielding2Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2GasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isShielding2Flux}}\\n \\n \\n \\n \\n {{#if this.parsedShielding2CDHint}}\\n \\n {{this.parsedShielding2CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding2FluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Shielding Cap }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedShielding3Hint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedShielding3Hint}}\\n \\n {{/if}}\\n \\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{else if this.isShielding3Flux}}\\n \\n \\n \\n {{/if}}\\n
\\n {{#if this.isShielding3Gas}}\\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3GasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isShielding3Flux}}\\n \\n \\n \\n \\n {{#if this.parsedShielding3CDHint}}\\n \\n {{this.parsedShielding3CDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateShielding3FluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Backing }}\\n
{{t \\\"routes.digitalize-welder-certificate.review.fields.backing\\\"}}
\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if this.parsedBackingHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedBackingHint}}\\n \\n {{/if}}\\n \\n \\n {{#if this.isBackingGas}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else if this.isBackingFlux}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isBackingGas}}\\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingGasCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{else if this.isBackingFlux}}\\n \\n \\n \\n {{#if this.parsedBackingCDHint}}\\n \\n {{this.parsedBackingCDHint}}\\n \\n {{/if}}\\n {{#if this.canQuickCreateBackingFluxCD}}\\n \\n \\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.button\\\"\\n }}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Backing flow rates per layer }}\\n {{#if this.isBackingGas}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n\\n\\n\\n{{! ── Quick Create Modals (owned by this section) ───────────── }}\\n\\n{{! Quick Create Filler Material 1 Modal }}\\n{{#if this.isCreatingFillerMaterial1}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 2 Modal }}\\n{{#if this.isCreatingFillerMaterial2}}\\n \\n{{/if}}\\n\\n{{! Quick Create Filler Material 3 Modal }}\\n{{#if this.isCreatingFillerMaterial3}}\\n \\n{{/if}}\\n\\n{{! Quick Create Commercial Designation Modal }}\\n{{#if this.isCreatingCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickCommercialDesignationTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-commercial-designation.create-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Gas Commercial Designation Modal }}\\n{{#if this.isCreatingGasCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickGasCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-gas-commercial-designation.create-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Quick Create Flux Commercial Designation Modal }}\\n{{#if this.isCreatingFluxCommercialDesignation}}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.saveQuickFluxCDTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.review.create-flux-commercial-designation.create-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-consumables.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-consumables.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action, get } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\nimport { dropTask } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport type IntlService from 'ember-intl/services/intl';\nimport type Store from '@ember-data/store';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type FillerMaterial from 'weldnote/models/filler-material';\nimport type FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport type Gas from 'weldnote/models/gas';\nimport type Flux from 'weldnote/models/flux';\nimport type GasCommercialDesignation from 'weldnote/models/gas-commercial-designation';\nimport type FluxCommercialDesignation from 'weldnote/models/flux-commercial-designation';\nimport type ElectrodeType from 'weldnote/models/electrode-type';\nimport type WeldingProcess from 'weldnote/models/welding-process';\nimport type { TestPieceConsumables, KeyLabelOption } from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport { unloadFillerMaterialRelated } from 'weldnote/utils/digitalize/quick-create-tasks';\nimport {\n parsedFillerMaterialHint,\n parsedCommercialDesignationHint,\n parsedShieldingHint,\n parsedShieldingCDHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\nconst SHIELDING_OPTIONS = Constants.SHIELDING_OPTIONS;\n\ninterface SectionConsumablesArgs {\n // Canonical filler material state (owned by parent)\n fillerMaterial1: FillerMaterial | null;\n fillerMaterial2: FillerMaterial | null;\n fillerMaterial3: FillerMaterial | null;\n fillerMaterialCommercialDesignation1: FillerMaterialCommercialDesignation | null;\n fillerMaterialCommercialDesignation2: FillerMaterialCommercialDesignation | null;\n fillerMaterialCommercialDesignation3: FillerMaterialCommercialDesignation | null;\n\n // Welding processes (context for filler material operations)\n selectedWeldingProcess1: WeldingProcess | null;\n selectedWeldingProcess2: WeldingProcess | null;\n selectedWeldingProcess3: WeldingProcess | null;\n\n // Canonical electrode type state\n selectedElectrodeType1: ElectrodeType | null;\n selectedElectrodeType2: ElectrodeType | null;\n selectedElectrodeType3: ElectrodeType | null;\n electrodeTypeOptions: unknown[];\n\n // Canonical shielding state per layer (raw type key + entities)\n shielding1Type: string | null;\n shielding1Gas: Gas | null;\n shielding1Flux: Flux | null;\n shielding1GasMixture: string;\n shielding1FlowRateMin: number | null;\n shielding1FlowRateMax: number | null;\n shielding1GasCommercialDesignation: GasCommercialDesignation | null;\n shielding1FluxCommercialDesignation: FluxCommercialDesignation | null;\n\n shielding2Type: string | null;\n shielding2Gas: Gas | null;\n shielding2Flux: Flux | null;\n shielding2GasMixture: string;\n shielding2FlowRateMin: number | null;\n shielding2FlowRateMax: number | null;\n shielding2GasCommercialDesignation: GasCommercialDesignation | null;\n shielding2FluxCommercialDesignation: FluxCommercialDesignation | null;\n\n shielding3Type: string | null;\n shielding3Gas: Gas | null;\n shielding3Flux: Flux | null;\n shielding3GasMixture: string;\n shielding3FlowRateMin: number | null;\n shielding3FlowRateMax: number | null;\n shielding3GasCommercialDesignation: GasCommercialDesignation | null;\n shielding3FluxCommercialDesignation: FluxCommercialDesignation | null;\n\n // Canonical backing state\n backingType: string | null;\n backingGas: Gas | null;\n backingFlux: Flux | null;\n backingGasMixture: string;\n backingGasCommercialDesignation: GasCommercialDesignation | null;\n backingFluxCommercialDesignation: FluxCommercialDesignation | null;\n backingFlowRateRoot: string;\n backingFlowRateFill: string;\n backingFlowRateCap: string;\n\n // Options\n shieldingTypeOptions: KeyLabelOption[];\n industryCode: unknown;\n industryCodeId: string | null;\n\n // Parsed data for hint computation\n parsedConsumables: TestPieceConsumables | null;\n\n // Generic callback for updating parent state\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionConsumablesComponent extends Component {\n @service declare store: Store;\n @service declare intl: IntlService;\n @service declare alertMessage: AlertMessageService;\n\n // ── Quick Create: Filler Material ─────────────────────────\n @tracked isCreatingFillerMaterial1 = false;\n @tracked isCreatingFillerMaterial2 = false;\n @tracked isCreatingFillerMaterial3 = false;\n @tracked _newFillerMaterial1: Record | null = null;\n @tracked _newFillerMaterial2: Record | null = null;\n @tracked _newFillerMaterial3: Record | null = null;\n\n // ── Quick Create: Commercial Designation ───────────────────\n @tracked isCreatingCommercialDesignation = false;\n @tracked _quickCreateCommercialDesignationIndex = 0;\n @tracked _quickCreateCommercialDesignationName = '';\n\n // ── Quick Create: Gas Commercial Designation ───────────────\n @tracked isCreatingGasCommercialDesignation = false;\n @tracked _quickCreateGasCDShieldingKey = '';\n @tracked _quickCreateGasCDName = '';\n\n // ── Quick Create: Flux Commercial Designation ──────────────\n @tracked isCreatingFluxCommercialDesignation = false;\n @tracked _quickCreateFluxCDShieldingKey = '';\n @tracked _quickCreateFluxCDName = '';\n\n // ── Shielding type resolution ─────────────────────────────\n\n get selectedShielding1Type() {\n return this.args.shieldingTypeOptions?.find((o) => o.key === this.args.shielding1Type) || null;\n }\n get selectedShielding2Type() {\n return this.args.shieldingTypeOptions?.find((o) => o.key === this.args.shielding2Type) || null;\n }\n get selectedShielding3Type() {\n return this.args.shieldingTypeOptions?.find((o) => o.key === this.args.shielding3Type) || null;\n }\n get selectedBackingType() {\n return this.args.shieldingTypeOptions?.find((o) => o.key === this.args.backingType) || null;\n }\n\n // ── Shielding type booleans ───────────────────────────────\n\n get isShielding1Gas() { return this.args.shielding1Type === SHIELDING_OPTIONS.GAS; }\n get isShielding1Flux() { return this.args.shielding1Type === SHIELDING_OPTIONS.FLUX; }\n get isShielding2Gas() { return this.args.shielding2Type === SHIELDING_OPTIONS.GAS; }\n get isShielding2Flux() { return this.args.shielding2Type === SHIELDING_OPTIONS.FLUX; }\n get isShielding3Gas() { return this.args.shielding3Type === SHIELDING_OPTIONS.GAS; }\n get isShielding3Flux() { return this.args.shielding3Type === SHIELDING_OPTIONS.FLUX; }\n get isBackingGas() { return this.args.backingType === SHIELDING_OPTIONS.GAS; }\n get isBackingFlux() { return this.args.backingType === SHIELDING_OPTIONS.FLUX; }\n\n // ── Parsed hints ──────────────────────────────────────────\n\n private _getFillerMaterialInfo(index: number) {\n const cons = this.args.parsedConsumables;\n if (index === 1) return cons?.filler_material_1 || null;\n if (index === 2) return cons?.filler_material_2 || null;\n return cons?.filler_material_3 || null;\n }\n\n private _getShieldingInfo(index: number) {\n const cons = this.args.parsedConsumables;\n if (index === 1) return cons?.shielding_root || null;\n if (index === 2) return cons?.shielding_fill || null;\n return cons?.shielding_cap || null;\n }\n\n get parsedFillerMaterial1Hint() { return parsedFillerMaterialHint(this._getFillerMaterialInfo(1)); }\n get parsedFillerMaterial2Hint() { return parsedFillerMaterialHint(this._getFillerMaterialInfo(2)); }\n get parsedFillerMaterial3Hint() { return parsedFillerMaterialHint(this._getFillerMaterialInfo(3)); }\n\n get parsedCommercialDesignation1Hint() { return parsedCommercialDesignationHint(this._getFillerMaterialInfo(1)); }\n get parsedCommercialDesignation2Hint() { return parsedCommercialDesignationHint(this._getFillerMaterialInfo(2)); }\n get parsedCommercialDesignation3Hint() { return parsedCommercialDesignationHint(this._getFillerMaterialInfo(3)); }\n\n get parsedElectrodeType1Hint() { return this.args.parsedConsumables?.electrode_type_1 || ''; }\n get parsedElectrodeType2Hint() { return this.args.parsedConsumables?.electrode_type_2 || ''; }\n get parsedElectrodeType3Hint() { return this.args.parsedConsumables?.electrode_type_3 || ''; }\n\n get parsedShielding1Hint() { return parsedShieldingHint(this._getShieldingInfo(1)); }\n get parsedShielding2Hint() { return parsedShieldingHint(this._getShieldingInfo(2)); }\n get parsedShielding3Hint() { return parsedShieldingHint(this._getShieldingInfo(3)); }\n get parsedBackingHint() { return parsedShieldingHint(this.args.parsedConsumables?.backing); }\n\n get parsedShielding1CDHint() { return parsedShieldingCDHint(this._getShieldingInfo(1)); }\n get parsedShielding2CDHint() { return parsedShieldingCDHint(this._getShieldingInfo(2)); }\n get parsedShielding3CDHint() { return parsedShieldingCDHint(this._getShieldingInfo(3)); }\n get parsedBackingCDHint() { return parsedShieldingCDHint(this.args.parsedConsumables?.backing); }\n\n // ── canQuickCreate getters ────────────────────────────────\n\n private _canQuickCreateFillerMaterial(index: number) {\n const fillerMaterial = index === 1 ? this.args.fillerMaterial1 : index === 2 ? this.args.fillerMaterial2 : this.args.fillerMaterial3;\n if (fillerMaterial) return false;\n if (!this.args.industryCode) return false;\n let fm = parsedFillerMaterialHint(this._getFillerMaterialInfo(index));\n return !isEmpty(fm);\n }\n\n get canQuickCreateFillerMaterial1() { return this._canQuickCreateFillerMaterial(1); }\n get canQuickCreateFillerMaterial2() { return this._canQuickCreateFillerMaterial(2); }\n get canQuickCreateFillerMaterial3() { return this._canQuickCreateFillerMaterial(3); }\n\n get canQuickCreateCommercialDesignation1() {\n if (this.args.fillerMaterialCommercialDesignation1) return false;\n return !!this.args.fillerMaterial1;\n }\n get canQuickCreateCommercialDesignation2() {\n if (this.args.fillerMaterialCommercialDesignation2) return false;\n return !!this.args.fillerMaterial2;\n }\n get canQuickCreateCommercialDesignation3() {\n if (this.args.fillerMaterialCommercialDesignation3) return false;\n return !!this.args.fillerMaterial3;\n }\n\n get canQuickCreateShielding1GasCD() {\n if (this.args.shielding1GasCommercialDesignation) return false;\n return !!this.args.shielding1Gas;\n }\n get canQuickCreateShielding2GasCD() {\n if (this.args.shielding2GasCommercialDesignation) return false;\n return !!this.args.shielding2Gas;\n }\n get canQuickCreateShielding3GasCD() {\n if (this.args.shielding3GasCommercialDesignation) return false;\n return !!this.args.shielding3Gas;\n }\n get canQuickCreateBackingGasCD() {\n if (this.args.backingGasCommercialDesignation) return false;\n return !!this.args.backingGas;\n }\n get canQuickCreateShielding1FluxCD() {\n if (this.args.shielding1FluxCommercialDesignation) return false;\n return !!this.args.shielding1Flux;\n }\n get canQuickCreateShielding2FluxCD() {\n if (this.args.shielding2FluxCommercialDesignation) return false;\n return !!this.args.shielding2Flux;\n }\n get canQuickCreateShielding3FluxCD() {\n if (this.args.shielding3FluxCommercialDesignation) return false;\n return !!this.args.shielding3Flux;\n }\n get canQuickCreateBackingFluxCD() {\n if (this.args.backingFluxCommercialDesignation) return false;\n return !!this.args.backingFlux;\n }\n\n // ── Filler Material search values ─────────────────────────\n\n private _fillerMaterialSearchValues(index: number) {\n let fm = this._getFillerMaterialInfo(index);\n return {\n specification: fm?.specification || '',\n classification: fm?.classification || '',\n group: fm?.group || '',\n };\n }\n\n get fillerMaterial1SearchValues() { return this._fillerMaterialSearchValues(1); }\n get fillerMaterial2SearchValues() { return this._fillerMaterialSearchValues(2); }\n get fillerMaterial3SearchValues() { return this._fillerMaterialSearchValues(3); }\n\n // ── Actions: Filler Material setters (delegate to parent) ─\n\n @action setFillerMaterial1(fm: FillerMaterial | null) {\n this.args.onUpdate('fillerMaterial1', fm);\n }\n @action removeFillerMaterial1() {\n this.args.onUpdate('fillerMaterial1', null);\n }\n @action setFillerMaterial2(fm: FillerMaterial | null) {\n this.args.onUpdate('fillerMaterial2', fm);\n }\n @action removeFillerMaterial2() {\n this.args.onUpdate('fillerMaterial2', null);\n }\n @action setFillerMaterial3(fm: FillerMaterial | null) {\n this.args.onUpdate('fillerMaterial3', fm);\n }\n @action removeFillerMaterial3() {\n this.args.onUpdate('fillerMaterial3', null);\n }\n\n // ── Actions: Commercial Designation setters (with auto-fill side effect) ─\n\n @action setCommercialDesignation1(cd: FillerMaterialCommercialDesignation | null) {\n this.args.onUpdate('fillerMaterialCommercialDesignation1', cd);\n if (cd && !this.args.fillerMaterial1) {\n const fm = get(cd, 'fillerMaterial');\n if (fm && get(fm, 'id')) {\n this.args.onUpdate('fillerMaterial1', fm);\n }\n }\n }\n @action setCommercialDesignation2(cd: FillerMaterialCommercialDesignation | null) {\n this.args.onUpdate('fillerMaterialCommercialDesignation2', cd);\n if (cd && !this.args.fillerMaterial2) {\n const fm = get(cd, 'fillerMaterial');\n if (fm && get(fm, 'id')) {\n this.args.onUpdate('fillerMaterial2', fm);\n }\n }\n }\n @action setCommercialDesignation3(cd: FillerMaterialCommercialDesignation | null) {\n this.args.onUpdate('fillerMaterialCommercialDesignation3', cd);\n if (cd && !this.args.fillerMaterial3) {\n const fm = get(cd, 'fillerMaterial');\n if (fm && get(fm, 'id')) {\n this.args.onUpdate('fillerMaterial3', fm);\n }\n }\n }\n\n // ── Actions: Electrode Type setters ───────────────────────\n\n @action setElectrodeType1(val: ElectrodeType | null) {\n this.args.onUpdate('selectedElectrodeType1', val);\n }\n @action setElectrodeType2(val: ElectrodeType | null) {\n this.args.onUpdate('selectedElectrodeType2', val);\n }\n @action setElectrodeType3(val: ElectrodeType | null) {\n this.args.onUpdate('selectedElectrodeType3', val);\n }\n\n // ── Actions: Shielding setters (with clear side effect for type) ─\n\n private _clearShieldingFields(prefix: string) {\n this.args.onUpdate(`${prefix}Gas`, null);\n this.args.onUpdate(`${prefix}Flux`, null);\n this.args.onUpdate(`${prefix}GasMixture`, '');\n this.args.onUpdate(`${prefix}FlowRateMin`, null);\n this.args.onUpdate(`${prefix}FlowRateMax`, null);\n this.args.onUpdate(`${prefix}GasCommercialDesignation`, null);\n this.args.onUpdate(`${prefix}FluxCommercialDesignation`, null);\n }\n\n @action setShielding1Type(option: KeyLabelOption | null) {\n this.args.onUpdate('shielding1Type', option?.key || null);\n this._clearShieldingFields('shielding1');\n }\n @action setShielding1Gas(gas: Gas | null) {\n this.args.onUpdate('shielding1Gas', gas);\n }\n @action removeShielding1Gas() {\n this.args.onUpdate('shielding1Gas', null);\n }\n @action setShielding1Flux(flux: Flux | null) {\n this.args.onUpdate('shielding1Flux', flux);\n }\n @action removeShielding1Flux() {\n this.args.onUpdate('shielding1Flux', null);\n }\n\n @action setShielding2Type(option: KeyLabelOption | null) {\n this.args.onUpdate('shielding2Type', option?.key || null);\n this._clearShieldingFields('shielding2');\n }\n @action setShielding2Gas(gas: Gas | null) {\n this.args.onUpdate('shielding2Gas', gas);\n }\n @action removeShielding2Gas() {\n this.args.onUpdate('shielding2Gas', null);\n }\n @action setShielding2Flux(flux: Flux | null) {\n this.args.onUpdate('shielding2Flux', flux);\n }\n @action removeShielding2Flux() {\n this.args.onUpdate('shielding2Flux', null);\n }\n\n @action setShielding3Type(option: KeyLabelOption | null) {\n this.args.onUpdate('shielding3Type', option?.key || null);\n this._clearShieldingFields('shielding3');\n }\n @action setShielding3Gas(gas: Gas | null) {\n this.args.onUpdate('shielding3Gas', gas);\n }\n @action removeShielding3Gas() {\n this.args.onUpdate('shielding3Gas', null);\n }\n @action setShielding3Flux(flux: Flux | null) {\n this.args.onUpdate('shielding3Flux', flux);\n }\n @action removeShielding3Flux() {\n this.args.onUpdate('shielding3Flux', null);\n }\n\n @action setBackingType(option: KeyLabelOption | null) {\n this.args.onUpdate('backingType', option?.key || null);\n this._clearShieldingFields('backing');\n }\n @action setBackingGas(gas: Gas | null) {\n this.args.onUpdate('backingGas', gas);\n }\n @action removeBackingGas() {\n this.args.onUpdate('backingGas', null);\n }\n @action setBackingFlux(flux: Flux | null) {\n this.args.onUpdate('backingFlux', flux);\n }\n @action removeBackingFlux() {\n this.args.onUpdate('backingFlux', null);\n }\n\n // ── Actions: Gas/Flux CD setters (with auto-fill side effect) ─\n\n @action setShielding1GasCD(cd: GasCommercialDesignation | null) {\n this.args.onUpdate('shielding1GasCommercialDesignation', cd);\n if (cd && !this.args.shielding1Gas) {\n this.args.onUpdate('shielding1Gas', get(cd, 'gas'));\n }\n }\n @action setShielding2GasCD(cd: GasCommercialDesignation | null) {\n this.args.onUpdate('shielding2GasCommercialDesignation', cd);\n if (cd && !this.args.shielding2Gas) {\n this.args.onUpdate('shielding2Gas', get(cd, 'gas'));\n }\n }\n @action setShielding3GasCD(cd: GasCommercialDesignation | null) {\n this.args.onUpdate('shielding3GasCommercialDesignation', cd);\n if (cd && !this.args.shielding3Gas) {\n this.args.onUpdate('shielding3Gas', get(cd, 'gas'));\n }\n }\n @action setBackingGasCD(cd: GasCommercialDesignation | null) {\n this.args.onUpdate('backingGasCommercialDesignation', cd);\n if (cd && !this.args.backingGas) {\n this.args.onUpdate('backingGas', get(cd, 'gas'));\n }\n }\n @action setShielding1FluxCD(cd: FluxCommercialDesignation | null) {\n this.args.onUpdate('shielding1FluxCommercialDesignation', cd);\n if (cd && !this.args.shielding1Flux) {\n this.args.onUpdate('shielding1Flux', get(cd, 'flux'));\n }\n }\n @action setShielding2FluxCD(cd: FluxCommercialDesignation | null) {\n this.args.onUpdate('shielding2FluxCommercialDesignation', cd);\n if (cd && !this.args.shielding2Flux) {\n this.args.onUpdate('shielding2Flux', get(cd, 'flux'));\n }\n }\n @action setShielding3FluxCD(cd: FluxCommercialDesignation | null) {\n this.args.onUpdate('shielding3FluxCommercialDesignation', cd);\n if (cd && !this.args.shielding3Flux) {\n this.args.onUpdate('shielding3Flux', get(cd, 'flux'));\n }\n }\n @action setBackingFluxCD(cd: FluxCommercialDesignation | null) {\n this.args.onUpdate('backingFluxCommercialDesignation', cd);\n if (cd && !this.args.backingFlux) {\n this.args.onUpdate('backingFlux', get(cd, 'flux'));\n }\n }\n\n // ── Quick Create: Filler Material ─────────────────────────\n\n @action openQuickCreateFillerMaterial(index: number) {\n let newMaterial = {\n code: this.args.industryCode,\n errors: {},\n metadata: { modelName: 'filler-material' },\n };\n if (index === 1) {\n this._newFillerMaterial1 = newMaterial;\n this.isCreatingFillerMaterial1 = true;\n } else if (index === 2) {\n this._newFillerMaterial2 = newMaterial;\n this.isCreatingFillerMaterial2 = true;\n } else {\n this._newFillerMaterial3 = newMaterial;\n this.isCreatingFillerMaterial3 = true;\n }\n }\n\n @action cancelQuickCreateFillerMaterial(index: number) {\n if (index === 1) {\n unloadFillerMaterialRelated(this.store, this._newFillerMaterial1);\n this.isCreatingFillerMaterial1 = false;\n this._newFillerMaterial1 = null;\n } else if (index === 2) {\n unloadFillerMaterialRelated(this.store, this._newFillerMaterial2);\n this.isCreatingFillerMaterial2 = false;\n this._newFillerMaterial2 = null;\n } else {\n unloadFillerMaterialRelated(this.store, this._newFillerMaterial3);\n this.isCreatingFillerMaterial3 = false;\n this._newFillerMaterial3 = null;\n }\n }\n\n @action quickCreateFillerMaterial1() {\n this.saveQuickFillerMaterialTask.perform(1);\n }\n @action quickCreateFillerMaterial2() {\n this.saveQuickFillerMaterialTask.perform(2);\n }\n @action quickCreateFillerMaterial3() {\n this.saveQuickFillerMaterialTask.perform(3);\n }\n\n private _getFillerMaterialForIndex(index: number) {\n if (index === 1) return this._newFillerMaterial1;\n if (index === 2) return this._newFillerMaterial2;\n return this._newFillerMaterial3;\n }\n\n private _getWeldingProcessForIndex(index: number) {\n if (index === 1) return this.args.selectedWeldingProcess1;\n if (index === 2) return this.args.selectedWeldingProcess2;\n return this.args.selectedWeldingProcess3;\n }\n\n private _setFillerMaterialResult(index: number, saved: FillerMaterial) {\n this.args.onUpdate(`fillerMaterial${index}`, saved);\n if (index === 1) {\n this.isCreatingFillerMaterial1 = false;\n this._newFillerMaterial1 = null;\n } else if (index === 2) {\n this.isCreatingFillerMaterial2 = false;\n this._newFillerMaterial2 = null;\n } else {\n this.isCreatingFillerMaterial3 = false;\n this._newFillerMaterial3 = null;\n }\n }\n\n saveQuickFillerMaterialTask = dropTask(async (index: number) => {\n let material = this._getFillerMaterialForIndex(index);\n if (material == null) {\n return;\n }\n\n let { specification, classification } = material as any;\n let weldingProcess = this._getWeldingProcessForIndex(index);\n\n try {\n if (specification.get('isNew')) {\n specification = await specification.save();\n }\n if (classification?.get('isNew')) {\n classification = await classification.save();\n }\n\n let newRecord = this.store.createRecord('filler-material');\n newRecord.set('specification', specification);\n newRecord.set('classification', classification);\n newRecord.set('group', material.group);\n\n let code = material.code as any;\n if (isEmpty(code) || isEmpty(code.id)) {\n newRecord.set('code', (material.group as any)?.code);\n } else {\n newRecord.set('code', code);\n }\n\n if (weldingProcess && !isEmpty(weldingProcess.id)) {\n let processes = await newRecord.get('weldingProcesses');\n processes.pushObject(weldingProcess);\n }\n\n let saved = await newRecord.save();\n this._setFillerMaterialResult(index, saved);\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-welder-certificate.review.create-filler-material.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-filler-material.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-filler-material.errors.generic')\n );\n }\n }\n });\n\n // ── Quick Create: Commercial Designation ───────────────────\n\n @action openQuickCreateCommercialDesignation(index: number) {\n let hint = parsedCommercialDesignationHint(this._getFillerMaterialInfo(index));\n this._quickCreateCommercialDesignationIndex = index;\n this._quickCreateCommercialDesignationName = hint;\n this.isCreatingCommercialDesignation = true;\n }\n\n @action cancelQuickCreateCommercialDesignation() {\n this.isCreatingCommercialDesignation = false;\n this._quickCreateCommercialDesignationIndex = 0;\n this._quickCreateCommercialDesignationName = '';\n }\n\n @action setQuickCreateCommercialDesignationName(name: string) {\n this._quickCreateCommercialDesignationName = name;\n }\n\n saveQuickCommercialDesignationTask = dropTask(async () => {\n let index = this._quickCreateCommercialDesignationIndex;\n let name = this._quickCreateCommercialDesignationName;\n let fillerMaterial = index === 1 ? this.args.fillerMaterial1 : index === 2 ? this.args.fillerMaterial2 : this.args.fillerMaterial3;\n\n if (isEmpty(name) || !fillerMaterial) {\n return;\n }\n\n try {\n let designation = this.store.createRecord('filler-material-commercial-designation');\n designation.set('fillerMaterial', fillerMaterial);\n designation.set('commercialDesignation', name);\n let saved = await designation.save();\n\n this.args.onUpdate(`fillerMaterialCommercialDesignation${index}`, saved);\n this.isCreatingCommercialDesignation = false;\n this._quickCreateCommercialDesignationIndex = 0;\n this._quickCreateCommercialDesignationName = '';\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-welder-certificate.review.create-commercial-designation.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-commercial-designation.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-commercial-designation.errors.generic')\n );\n }\n }\n });\n\n // ── Quick Create: Gas Commercial Designation ───────────────\n\n private _getShieldingCDHint(shieldingKey: string) {\n if (shieldingKey === 'shielding1') return this.parsedShielding1CDHint;\n if (shieldingKey === 'shielding2') return this.parsedShielding2CDHint;\n if (shieldingKey === 'shielding3') return this.parsedShielding3CDHint;\n if (shieldingKey === 'backing') return this.parsedBackingCDHint;\n return '';\n }\n\n @action openQuickCreateGasCD(shieldingKey: string) {\n this._quickCreateGasCDShieldingKey = shieldingKey;\n this._quickCreateGasCDName = this._getShieldingCDHint(shieldingKey);\n this.isCreatingGasCommercialDesignation = true;\n }\n\n @action cancelQuickCreateGasCD() {\n this.isCreatingGasCommercialDesignation = false;\n this._quickCreateGasCDShieldingKey = '';\n this._quickCreateGasCDName = '';\n }\n\n @action setQuickCreateGasCDName(name: string) {\n this._quickCreateGasCDName = name;\n }\n\n private _getGasForShieldingKey(key: string): Gas | null {\n if (key === 'shielding1') return this.args.shielding1Gas;\n if (key === 'shielding2') return this.args.shielding2Gas;\n if (key === 'shielding3') return this.args.shielding3Gas;\n if (key === 'backing') return this.args.backingGas;\n return null;\n }\n\n saveQuickGasCDTask = dropTask(async () => {\n let key = this._quickCreateGasCDShieldingKey;\n let name = this._quickCreateGasCDName;\n let gas = this._getGasForShieldingKey(key);\n\n if (isEmpty(name) || !gas) {\n return;\n }\n\n try {\n let designation = this.store.createRecord('gas-commercial-designation');\n designation.set('gas', gas);\n designation.set('commercialDesignation', name);\n let saved = await designation.save();\n\n this.args.onUpdate(`${key}GasCommercialDesignation`, saved);\n this.isCreatingGasCommercialDesignation = false;\n this._quickCreateGasCDShieldingKey = '';\n this._quickCreateGasCDName = '';\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-welder-certificate.review.create-gas-commercial-designation.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-gas-commercial-designation.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-gas-commercial-designation.errors.generic')\n );\n }\n }\n });\n\n // ── Quick Create: Flux Commercial Designation ──────────────\n\n @action openQuickCreateFluxCD(shieldingKey: string) {\n this._quickCreateFluxCDShieldingKey = shieldingKey;\n this._quickCreateFluxCDName = this._getShieldingCDHint(shieldingKey);\n this.isCreatingFluxCommercialDesignation = true;\n }\n\n @action cancelQuickCreateFluxCD() {\n this.isCreatingFluxCommercialDesignation = false;\n this._quickCreateFluxCDShieldingKey = '';\n this._quickCreateFluxCDName = '';\n }\n\n @action setQuickCreateFluxCDName(name: string) {\n this._quickCreateFluxCDName = name;\n }\n\n private _getFluxForShieldingKey(key: string): Flux | null {\n if (key === 'shielding1') return this.args.shielding1Flux;\n if (key === 'shielding2') return this.args.shielding2Flux;\n if (key === 'shielding3') return this.args.shielding3Flux;\n if (key === 'backing') return this.args.backingFlux;\n return null;\n }\n\n saveQuickFluxCDTask = dropTask(async () => {\n let key = this._quickCreateFluxCDShieldingKey;\n let name = this._quickCreateFluxCDName;\n let flux = this._getFluxForShieldingKey(key);\n\n if (isEmpty(name) || !flux) {\n return;\n }\n\n try {\n let designation = this.store.createRecord('flux-commercial-designation');\n designation.set('flux', flux);\n designation.set('commercialDesignation', name);\n let saved = await designation.save();\n\n this.args.onUpdate(`${key}FluxCommercialDesignation`, saved);\n this.isCreatingFluxCommercialDesignation = false;\n this._quickCreateFluxCDShieldingKey = '';\n this._quickCreateFluxCDName = '';\n\n this.alertMessage.success(\n this.intl.t('routes.digitalize-welder-certificate.review.create-flux-commercial-designation.success')\n );\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-flux-commercial-designation.errors.duplicate')\n );\n } else {\n this.alertMessage.error(\n this.intl.t('routes.digitalize-welder-certificate.review.create-flux-commercial-designation.errors.generic')\n );\n }\n }\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{company.name}}\\n \\n {{#if this.parsedCompanyHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedCompanyHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{body.name}}\\n \\n {{#if this.parsedExaminingBodyHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedExaminingBodyHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.parsedEmissionDateHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedEmissionDateHint}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n {{#if this.parsedWeldersHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWeldersHint}}\\n \\n {{/if}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.button\\\"}}\\n \\n \\n
\\n \\n \\n \\n {{#if this.parsedWpsUsedHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWpsUsedHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{! Inline Create Examining Body Modal }}\\n{{#if this.isCreatingExaminingBody}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.newExaminingBodyError}}\\n {{this.newExaminingBodyError}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createExaminingBodyTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-examining-body/lookup-create.buttons.create\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Inline Create Welder Modal }}\\n{{#if this.isCreatingWelder}}\\n \\n \\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.info\\\"}}\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n {{#if this.newWelderError}}\\n
\\n {{this.newWelderError}}\\n
\\n {{/if}}\\n {{#if this.newWelderPolling}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.polling\\\"}}\\n
\\n {{else if this.createPersonTask.isRunning}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.creating\\\"}}\\n
\\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createPersonTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n {{company.name}}\\n \\n {{#if this.parsedCompanyHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedCompanyHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{body.name}}\\n \\n {{#if this.parsedExaminingBodyHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedExaminingBodyHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.parsedEmissionDateHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedEmissionDateHint}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n {{#if this.parsedWeldersHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWeldersHint}}\\n \\n {{/if}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.button\\\"}}\\n \\n \\n
\\n \\n \\n \\n {{#if this.parsedWpsUsedHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWpsUsedHint}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{! Inline Create Examining Body Modal }}\\n{{#if this.isCreatingExaminingBody}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.newExaminingBodyError}}\\n {{this.newExaminingBodyError}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createExaminingBodyTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-examining-body/lookup-create.buttons.create\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{! Inline Create Welder Modal }}\\n{{#if this.isCreatingWelder}}\\n \\n \\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.info\\\"}}\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n {{#if this.newWelderError}}\\n
\\n {{this.newWelderError}}\\n
\\n {{/if}}\\n {{#if this.newWelderPolling}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.polling\\\"}}\\n
\\n {{else if this.createPersonTask.isRunning}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.creating\\\"}}\\n
\\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{#if this.createPersonTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"routes.digitalize-welder-certificate.review.create-welder.create-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-general.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-general.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty, isBlank } from '@ember/utils';\nimport { dropTask } from 'ember-concurrency';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport DS from 'ember-data';\nimport type IntlService from 'ember-intl/services/intl';\nimport type Store from '@ember-data/store';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport type UserSessionService from 'weldnote/services/user-session';\nimport type OrgApiPersonnelService from 'weldnote/services/org-api-personnel';\nimport type Company from 'weldnote/models/company';\nimport type ExaminingBody from 'weldnote/models/examining-body';\nimport type Welder from 'weldnote/models/welder';\nimport type WPSModel from 'weldnote/models/welding-procedure-specification';\nimport type { MappedValue } from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport {\n parsedCompanyHint,\n parsedExaminingBodyHint,\n parsedEmissionDateHint,\n parsedWeldersHint,\n parsedWpsUsedHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\nexport interface ParsedGeneralInfo {\n resolvedCompanyValue: string;\n resolvedExaminingBodyValue: string;\n resolvedEmissionDateValue: string;\n resolvedWeldersValue: string;\n resolvedWpsUsedValue: string;\n company?: string;\n examining_body?: string;\n emission_date?: string;\n welder?: string;\n wps_used?: string;\n}\n\ninterface SectionGeneralArgs {\n // Canonical state (owned by parent)\n selectedCompany: Company | null;\n selectedExaminingBody: ExaminingBody | null;\n emissionDate: Date | null;\n selectedWelder: Welder | null;\n selectedWps: WPSModel | null;\n designation: string;\n testsConductedBy: string;\n notes: string;\n\n // Options\n companyOptions: Company[];\n examiningBodyOptions: ExaminingBody[];\n\n // Parsed data for hint computation\n parsedGeneralInfo: ParsedGeneralInfo | null;\n validationMappings: Record | null;\n\n // Generic callback for updating parent state\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionGeneralComponent extends Component {\n @service declare store: Store;\n @service declare intl: IntlService;\n @service declare alertMessage: AlertMessageService;\n @service('weldnote-data') declare data: WeldnoteDataService;\n @service declare userSession: UserSessionService;\n @service('org-api-personnel') declare orgApiPersonnel: OrgApiPersonnelService;\n\n // ── Examining Body Create State ───────────────────────────\n @tracked isCreatingExaminingBody = false;\n @tracked newExaminingBodyName = '';\n @tracked newExaminingBodyError: string | null = null;\n\n // ── Welder Create State ───────────────────────────────────\n @tracked isCreatingWelder = false;\n @tracked newWelderFirstName = '';\n @tracked newWelderLastName = '';\n @tracked newWelderStamp = '';\n @tracked newWelderError: string | null = null;\n @tracked newWelderPolling = false;\n\n // ── Computed: Parsed Hints ────────────────────────────────\n\n get parsedCompanyHint() {\n let info = this.args.parsedGeneralInfo;\n return parsedCompanyHint(\n this.args.validationMappings,\n info?.resolvedCompanyValue || '',\n info?.company\n );\n }\n\n get parsedExaminingBodyHint() {\n let info = this.args.parsedGeneralInfo;\n return parsedExaminingBodyHint(\n this.args.validationMappings,\n info?.resolvedExaminingBodyValue || '',\n info?.examining_body\n );\n }\n\n get parsedEmissionDateHint() {\n let info = this.args.parsedGeneralInfo;\n return parsedEmissionDateHint(\n info?.resolvedEmissionDateValue || '',\n info?.emission_date\n );\n }\n\n get parsedWeldersHint() {\n let info = this.args.parsedGeneralInfo;\n return parsedWeldersHint(\n info?.resolvedWeldersValue || '',\n info?.welder\n );\n }\n\n get parsedWpsUsedHint() {\n let info = this.args.parsedGeneralInfo;\n return parsedWpsUsedHint(\n info?.resolvedWpsUsedValue || '',\n info?.wps_used\n );\n }\n\n // ── Computed: Examining Body Error ────────────────────────\n\n get hasNewExaminingBodyError() {\n return !isEmpty(this.newExaminingBodyError);\n }\n\n // ── Actions: Simple Setters ───────────────────────────────\n\n @action setCompany(val: Company | null) {\n this.args.onUpdate('selectedCompany', val);\n }\n\n @action setExaminingBody(val: ExaminingBody | null) {\n this.args.onUpdate('selectedExaminingBody', val);\n }\n\n @action setEmissionDate(val: Date | null) {\n this.args.onUpdate('emissionDate', val);\n }\n\n @action setWelder(welder: Welder | null) {\n this.args.onUpdate('selectedWelder', welder);\n }\n\n @action setWps(wps: WPSModel | null) {\n this.args.onUpdate('selectedWps', wps);\n }\n\n @action removeWps() {\n this.args.onUpdate('selectedWps', null);\n }\n\n // ── Actions: Examining Body Create ────────────────────────\n\n @action showCreateExaminingBody(text: string) {\n this.isCreatingExaminingBody = true;\n this.newExaminingBodyName = text || '';\n this.newExaminingBodyError = null;\n }\n\n @action createExaminingBodyOnEnter(\n select: { isOpen: boolean; highlighted: unknown; searchText: string },\n e: KeyboardEvent\n ) {\n if (e.key === 'Enter' && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.isCreatingExaminingBody = true;\n this.newExaminingBodyName = select.searchText;\n this.newExaminingBodyError = null;\n }\n }\n\n @action closeCreateExaminingBody() {\n this.isCreatingExaminingBody = false;\n this.newExaminingBodyName = '';\n this.newExaminingBodyError = null;\n }\n\n @action setNewExaminingBodyName(name: string) {\n this.newExaminingBodyName = name;\n }\n\n createExaminingBodyTask = dropTask(async () => {\n let { newExaminingBodyName, store, intl, data, alertMessage } = this;\n if (isEmpty(newExaminingBodyName)) {\n this.newExaminingBodyError = intl.t(\n 'components.model-examining-body/lookup-create.messages.errors.required'\n );\n return;\n }\n let newExaminingBody = store.createRecord('examining-body');\n newExaminingBody.name = newExaminingBodyName;\n try {\n let savedExaminingBody = await newExaminingBody.save();\n this.args.onUpdate('selectedExaminingBody', savedExaminingBody);\n data.bustExaminingBodyCache();\n alertMessage.success(\n intl.t('components.model-examining-body/lookup-create.messages.success')\n );\n this.isCreatingExaminingBody = false;\n this.newExaminingBodyName = '';\n this.newExaminingBodyError = null;\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alertMessage.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.duplicate')\n );\n } else {\n alertMessage.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.generic')\n );\n }\n }\n });\n\n // ── Actions: Welder Create ────────────────────────────────\n\n @action showCreateWelder() {\n this.isCreatingWelder = true;\n let welder = this.args.parsedGeneralInfo?.welder;\n if (welder && typeof welder === 'string') {\n let [firstName, lastName] = welder.split(',').map((s: string) => s.trim());\n this.newWelderFirstName = firstName || '';\n this.newWelderLastName = lastName || '';\n }\n this.newWelderStamp = '';\n this.newWelderError = null;\n this.newWelderPolling = false;\n }\n\n @action closeCreateWelder() {\n this.isCreatingWelder = false;\n this.newWelderFirstName = '';\n this.newWelderLastName = '';\n this.newWelderStamp = '';\n this.newWelderError = null;\n this.newWelderPolling = false;\n }\n\n @action setNewWelderFirstName(val: string) {\n this.newWelderFirstName = val;\n }\n\n @action setNewWelderLastName(val: string) {\n this.newWelderLastName = val;\n }\n\n @action setNewWelderStamp(val: string) {\n this.newWelderStamp = val;\n }\n\n createPersonTask = dropTask(async () => {\n let { newWelderFirstName, newWelderLastName, newWelderStamp, intl, alertMessage } = this;\n if (isEmpty(newWelderFirstName) || isEmpty(newWelderLastName) || isEmpty(newWelderStamp)) {\n this.newWelderError = intl.t(\n 'routes.digitalize-welder-certificate.review.create-welder.errors.required'\n );\n alertMessage.error(\n intl.t('routes.digitalize-welder-certificate.review.create-welder.errors.required')\n );\n return;\n }\n let organizationId = this.userSession.account?.organizationId;\n if (!organizationId) {\n this.newWelderError = intl.t(\n 'routes.digitalize-welder-certificate.review.create-welder.errors.no-organization'\n );\n alertMessage.error(\n intl.t('routes.digitalize-welder-certificate.review.create-welder.errors.no-organization')\n );\n return;\n }\n this.newWelderError = null;\n try {\n let response = await this.orgApiPersonnel.createPersonnel({\n firstName: newWelderFirstName,\n secondName: newWelderLastName,\n displayName: `${newWelderFirstName} ${newWelderLastName}`,\n stamp: newWelderStamp,\n ownerId: organizationId,\n });\n let orgApiId = response.id;\n this.newWelderPolling = true;\n let maxAttempts = 15;\n let welder = null;\n for (let i = 0; i < maxAttempts; i++) {\n await new Promise((resolve) => setTimeout(resolve, 1000));\n let welders: DS.AdapterPopulatedRecordArray = await this.store.query('welder', {\n 'filter[remote-id]': orgApiId,\n });\n if (welders.toArray().length > 0) {\n welder = welders.firstObject;\n break;\n }\n }\n this.newWelderPolling = false;\n if (welder) {\n this.args.onUpdate('selectedWelder', welder);\n alertMessage.success(\n intl.t('routes.digitalize-welder-certificate.review.create-welder.success')\n );\n } else {\n alertMessage.info(\n intl.t('routes.digitalize-welder-certificate.review.create-welder.sync-timeout')\n );\n }\n this.isCreatingWelder = false;\n this.newWelderFirstName = '';\n this.newWelderLastName = '';\n this.newWelderStamp = '';\n this.newWelderError = null;\n } catch (error: unknown) {\n this.newWelderPolling = false;\n let status = (error as Record)?.status;\n if (String(status) === '409') {\n this.newWelderError = intl.t(\n 'routes.digitalize-welder-certificate.review.create-welder.errors.duplicate'\n );\n alertMessage.error(\n intl.t('routes.digitalize-welder-certificate.review.create-welder.errors.duplicate')\n );\n } else if (String(status) === '503') {\n this.newWelderError = intl.t(\n 'routes.digitalize-welder-certificate.review.create-welder.errors.service-unavailable'\n );\n alertMessage.error(\n intl.t(\n 'routes.digitalize-welder-certificate.review.create-welder.errors.service-unavailable'\n )\n );\n } else {\n this.newWelderError = intl.t(\n 'routes.digitalize-welder-certificate.review.create-welder.errors.generic'\n );\n alertMessage.error(\n intl.t('routes.digitalize-welder-certificate.review.create-welder.errors.generic')\n );\n }\n }\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{! Tensile Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.tensile_test.result}}\\n \\n {{@parsedData.tensile_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.tensile_test.report_number}}\\n \\n {{@parsedData.tensile_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Bend Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.bend_test.result}}\\n \\n {{@parsedData.bend_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.bend_test.report_number}}\\n \\n {{@parsedData.bend_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Macrographic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.macrographic_test.result}}\\n \\n {{@parsedData.macrographic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.macrographic_test.report_number}}\\n \\n {{@parsedData.macrographic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Impact Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.impact_test.result}}\\n \\n {{@parsedData.impact_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.impact_test.report_number}}\\n \\n {{@parsedData.impact_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Fracture Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.fracture_test.result}}\\n \\n {{@parsedData.fracture_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.fracture_test.report_number}}\\n \\n {{@parsedData.fracture_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n\", {\"contents\":\"\\n\\n {{! Tensile Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.tensile_test.result}}\\n \\n {{@parsedData.tensile_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.tensile_test.report_number}}\\n \\n {{@parsedData.tensile_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Bend Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.bend_test.result}}\\n \\n {{@parsedData.bend_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.bend_test.report_number}}\\n \\n {{@parsedData.bend_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Macrographic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.macrographic_test.result}}\\n \\n {{@parsedData.macrographic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.macrographic_test.report_number}}\\n \\n {{@parsedData.macrographic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Impact Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.impact_test.result}}\\n \\n {{@parsedData.impact_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.impact_test.report_number}}\\n \\n {{@parsedData.impact_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Fracture Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.fracture_test.result}}\\n \\n {{@parsedData.fracture_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.fracture_test.report_number}}\\n \\n {{@parsedData.fracture_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-mechanical-tests.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-mechanical-tests.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { KeyLabelOption } from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\n\ninterface SectionMechanicalTestsArgs {\n // Raw key strings (owned by parent)\n tensileTestResult: string;\n tensileTestNumber: string;\n bendTestResult: string;\n bendTestNumber: string;\n macrographicTestResult: string;\n macrographicTestNumber: string;\n impactTestResult: string;\n impactTestNumber: string;\n fractureTestResult: string;\n fractureTestNumber: string;\n\n // Options\n testResultOptions: KeyLabelOption[];\n\n // Parsed hints\n parsedData: unknown;\n\n // Callback\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionMechanicalTestsComponent extends Component {\n // ── Helper: resolve key → option object ─────────────────────\n\n _selectedTestResult(key: string | null): KeyLabelOption | null {\n if (!key) return null;\n return this.args.testResultOptions?.find((o) => o.key === key) || null;\n }\n\n // ── Computed: selected option objects ────────────────────────\n\n get selectedTensileTestResult() {\n return this._selectedTestResult(this.args.tensileTestResult);\n }\n get selectedBendTestResult() {\n return this._selectedTestResult(this.args.bendTestResult);\n }\n get selectedMacrographicTestResult() {\n return this._selectedTestResult(this.args.macrographicTestResult);\n }\n get selectedImpactTestResult() {\n return this._selectedTestResult(this.args.impactTestResult);\n }\n get selectedFractureTestResult() {\n return this._selectedTestResult(this.args.fractureTestResult);\n }\n\n // ── Actions: extract key and update parent ──────────────────\n\n @action setTensileTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('tensileTestResult', option?.key || '');\n }\n @action setBendTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('bendTestResult', option?.key || '');\n }\n @action setMacrographicTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('macrographicTestResult', option?.key || '');\n }\n @action setImpactTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('impactTestResult', option?.key || '');\n }\n @action setFractureTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('fractureTestResult', option?.key || '');\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{! Visual Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.visual_test.result}}\\n \\n {{@parsedData.visual_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.visual_test.report_number}}\\n \\n {{@parsedData.visual_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Penetrant Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.penetrant_test.result}}\\n \\n {{@parsedData.penetrant_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.penetrant_test.report_number}}\\n \\n {{@parsedData.penetrant_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Magnetic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.magnetic_test.result}}\\n \\n {{@parsedData.magnetic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.magnetic_test.report_number}}\\n \\n {{@parsedData.magnetic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Ultrasonic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.ultrasonic_test.result}}\\n \\n {{@parsedData.ultrasonic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.ultrasonic_test.report_number}}\\n \\n {{@parsedData.ultrasonic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Radiographic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.radiographic_test.result}}\\n \\n {{@parsedData.radiographic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.radiographic_test.report_number}}\\n \\n {{@parsedData.radiographic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n\", {\"contents\":\"\\n\\n {{! Visual Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.visual_test.result}}\\n \\n {{@parsedData.visual_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.visual_test.report_number}}\\n \\n {{@parsedData.visual_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Penetrant Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.penetrant_test.result}}\\n \\n {{@parsedData.penetrant_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.penetrant_test.report_number}}\\n \\n {{@parsedData.penetrant_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Magnetic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.magnetic_test.result}}\\n \\n {{@parsedData.magnetic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.magnetic_test.report_number}}\\n \\n {{@parsedData.magnetic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Ultrasonic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.ultrasonic_test.result}}\\n \\n {{@parsedData.ultrasonic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.ultrasonic_test.report_number}}\\n \\n {{@parsedData.ultrasonic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Radiographic Test }}\\n \\n \\n \\n {{opt.label}}\\n \\n {{#if @parsedData.radiographic_test.result}}\\n \\n {{@parsedData.radiographic_test.result}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.radiographic_test.report_number}}\\n \\n {{@parsedData.radiographic_test.report_number}}\\n \\n {{/if}}\\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-ndt-results.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-ndt-results.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type { KeyLabelOption } from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\n\ninterface SectionNdtResultsArgs {\n // Raw key strings (owned by parent)\n visualTestResult: string;\n visualTestNumber: string;\n penetrantTestResult: string;\n penetrantTestNumber: string;\n magneticTestResult: string;\n magneticTestNumber: string;\n ultrasonicTestResult: string;\n ultrasonicTestNumber: string;\n radiographicTestResult: string;\n radiographicTestNumber: string;\n\n // Options\n testResultOptions: KeyLabelOption[];\n\n // Parsed hints\n parsedData: unknown;\n\n // Callback\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionNdtResultsComponent extends Component {\n // ── Helper: resolve key → option object ─────────────────────\n\n _selectedTestResult(key: string | null): KeyLabelOption | null {\n if (!key) return null;\n return this.args.testResultOptions?.find((o) => o.key === key) || null;\n }\n\n // ── Computed: selected option objects ────────────────────────\n\n get selectedVisualTestResult() {\n return this._selectedTestResult(this.args.visualTestResult);\n }\n get selectedPenetrantTestResult() {\n return this._selectedTestResult(this.args.penetrantTestResult);\n }\n get selectedMagneticTestResult() {\n return this._selectedTestResult(this.args.magneticTestResult);\n }\n get selectedUltrasonicTestResult() {\n return this._selectedTestResult(this.args.ultrasonicTestResult);\n }\n get selectedRadiographicTestResult() {\n return this._selectedTestResult(this.args.radiographicTestResult);\n }\n\n // ── Actions: extract key and update parent ──────────────────\n\n @action setVisualTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('visualTestResult', option?.key || '');\n }\n @action setPenetrantTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('penetrantTestResult', option?.key || '');\n }\n @action setMagneticTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('magneticTestResult', option?.key || '');\n }\n @action setUltrasonicTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('ultrasonicTestResult', option?.key || '');\n }\n @action setRadiographicTestResult(option: KeyLabelOption | null) {\n this.args.onUpdate('radiographicTestResult', option?.key || '');\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{! Arc Length Control }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.arc-length-control\\\"\\n }}
\\n \\n \\n \\n {{#if @parsedData.operator_details.arc_length_control_process_1}}\\n \\n {{@parsedData.operator_details.arc_length_control_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.arc_length_control_process_2}}\\n \\n {{@parsedData.operator_details.arc_length_control_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.arc_length_control_process_3}}\\n \\n {{@parsedData.operator_details.arc_length_control_process_3}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Visual Control }}\\n
{{t \\\"routes.digitalize-welder-certificate.review.fields.visual-control\\\"}}
\\n \\n \\n \\n {{#if @parsedData.operator_details.visual_control_process_1}}\\n \\n {{@parsedData.operator_details.visual_control_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.visual_control_process_2}}\\n \\n {{@parsedData.operator_details.visual_control_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.visual_control_process_3}}\\n \\n {{@parsedData.operator_details.visual_control_process_3}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Joint Tracking }}\\n
{{t \\\"routes.digitalize-welder-certificate.review.fields.joint-tracking\\\"}}
\\n \\n \\n \\n {{#if @parsedData.operator_details.joint_tracking_process_1}}\\n \\n {{@parsedData.operator_details.joint_tracking_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.joint_tracking_process_2}}\\n \\n {{@parsedData.operator_details.joint_tracking_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.joint_tracking_process_3}}\\n \\n {{@parsedData.operator_details.joint_tracking_process_3}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Operator Welding Details — only when ISO 14732 (joint sensor row) }}\\n {{#if @showWeldingDetailJointSensor}}\\n
\\n {{t \\\"routes.digitalize-welder-certificate.review.fields.welding-operator-details\\\"}}\\n
\\n \\n \\n \\n {{#if @parsedData.operator_details.welding_details_process_1}}\\n \\n {{@parsedData.operator_details.welding_details_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.welding_details_process_2}}\\n \\n {{@parsedData.operator_details.welding_details_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.welding_details_process_3}}\\n \\n {{@parsedData.operator_details.welding_details_process_3}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\", {\"contents\":\"\\n\\n {{! Arc Length Control }}\\n
{{t\\n \\\"routes.digitalize-welder-certificate.review.fields.arc-length-control\\\"\\n }}
\\n \\n \\n \\n {{#if @parsedData.operator_details.arc_length_control_process_1}}\\n \\n {{@parsedData.operator_details.arc_length_control_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.arc_length_control_process_2}}\\n \\n {{@parsedData.operator_details.arc_length_control_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.arc_length_control_process_3}}\\n \\n {{@parsedData.operator_details.arc_length_control_process_3}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Visual Control }}\\n
{{t \\\"routes.digitalize-welder-certificate.review.fields.visual-control\\\"}}
\\n \\n \\n \\n {{#if @parsedData.operator_details.visual_control_process_1}}\\n \\n {{@parsedData.operator_details.visual_control_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.visual_control_process_2}}\\n \\n {{@parsedData.operator_details.visual_control_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.visual_control_process_3}}\\n \\n {{@parsedData.operator_details.visual_control_process_3}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Joint Tracking }}\\n
{{t \\\"routes.digitalize-welder-certificate.review.fields.joint-tracking\\\"}}
\\n \\n \\n \\n {{#if @parsedData.operator_details.joint_tracking_process_1}}\\n \\n {{@parsedData.operator_details.joint_tracking_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.joint_tracking_process_2}}\\n \\n {{@parsedData.operator_details.joint_tracking_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.joint_tracking_process_3}}\\n \\n {{@parsedData.operator_details.joint_tracking_process_3}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Operator Welding Details — only when ISO 14732 (joint sensor row) }}\\n {{#if @showWeldingDetailJointSensor}}\\n
\\n {{t \\\"routes.digitalize-welder-certificate.review.fields.welding-operator-details\\\"}}\\n
\\n \\n \\n \\n {{#if @parsedData.operator_details.welding_details_process_1}}\\n \\n {{@parsedData.operator_details.welding_details_process_1}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.welding_details_process_2}}\\n \\n {{@parsedData.operator_details.welding_details_process_2}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if @parsedData.operator_details.welding_details_process_3}}\\n \\n {{@parsedData.operator_details.welding_details_process_3}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-operator-details.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-operator-details.hbs\"}});\nimport Component from '@glimmer/component';\nimport type { WelderCertificateParseApiResponse } from '../types/welder-certificate-api-response-types';\n\ninterface SectionOperatorDetailsArgs {\n parsedData: WelderCertificateParseApiResponse | null;\n // Arc length control\n arcLengthControlProcess1: string;\n arcLengthControlProcess2: string;\n arcLengthControlProcess3: string;\n // Visual control\n visualControlProcess1: string;\n visualControlProcess2: string;\n visualControlProcess3: string;\n // Joint tracking\n jointTrackingProcess1: string;\n jointTrackingProcess2: string;\n jointTrackingProcess3: string;\n // Welding operator welding details\n weldingOperatorWeldingDetailsProcess1: string;\n weldingOperatorWeldingDetailsProcess2: string;\n weldingOperatorWeldingDetailsProcess3: string;\n // Visibility flag from parent: only show welding details when ISO 14732\n // (mirrors model-welder-certificate/edit.hbs:1784)\n showWeldingDetailJointSensor: boolean;\n // Callback\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionOperatorDetailsComponent extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n {{#if @industryCodeMismatchWarning}}\\n
\\n \\n {{@industryCodeMismatchWarning}}\\n \\n
\\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{unit.label}}\\n \\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{ct.label}}\\n \\n {{#if this.parsedCertificateTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedCertificateTypeHint}}\\n \\n {{/if}}\\n \\n \\n\\n\", {\"contents\":\"\\n\\n {{#if @industryCodeMismatchWarning}}\\n
\\n \\n {{@industryCodeMismatchWarning}}\\n \\n
\\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if this.parsedStandardHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedStandardHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{unit.label}}\\n \\n {{#if this.parsedUnitSystemHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedUnitSystemHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{ct.label}}\\n \\n {{#if this.parsedCertificateTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedCertificateTypeHint}}\\n \\n {{/if}}\\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-standard.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-standard.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport type WelderStandard from 'weldnote/models/welder-standard';\nimport type {\n KeyLabelOption,\n MappedValue,\n} from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport {\n parsedStandardHint,\n parsedUnitSystemHint,\n parsedCertificateTypeHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface ParsedStandardSectionData {\n standard?: string;\n unit_system?: string;\n certificate_type?: string;\n}\n\ninterface SectionStandardArgs {\n // Canonical state (owned by parent)\n certificateNumber: string;\n selectedStandard: WelderStandard | null;\n selectedUnitSystem: KeyLabelOption | null;\n selectedCertificateType: KeyLabelOption | null;\n\n // Options\n standardOptions: WelderStandard[];\n unitSystemOptions: KeyLabelOption[];\n certificateTypeOptions: KeyLabelOption[];\n\n // Warnings & errors\n industryCodeMismatchWarning: string | null;\n errors: Record> | undefined;\n\n // Parsed data for hint computation\n parsedStandardSectionData: ParsedStandardSectionData | null;\n validationMappings: Record | null;\n\n // Generic callback for updating parent state\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionStandardComponent extends Component {\n // ── Computed: Parsed Hints ────────────────────────────────\n\n get parsedStandardHint() {\n return parsedStandardHint(\n this.args.validationMappings,\n this.args.parsedStandardSectionData?.standard\n );\n }\n\n get parsedUnitSystemHint() {\n return parsedUnitSystemHint(this.args.parsedStandardSectionData?.unit_system);\n }\n\n get parsedCertificateTypeHint() {\n return parsedCertificateTypeHint(this.args.parsedStandardSectionData?.certificate_type);\n }\n\n // ── Actions: Setter Callbacks ─────────────────────────────\n\n @action setCertificateNumber(value: string) {\n this.args.onUpdate('certificateNumber', value);\n }\n\n @action setStandard(standard: WelderStandard | null) {\n this.args.onUpdate('selectedStandard', standard);\n }\n\n @action setUnitSystem(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedUnitSystem', val);\n }\n\n @action setCertificateType(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedCertificateType', val);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n {{#if this.parsedWeldTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWeldTypeHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pt.label}}\\n \\n {{#if this.parsedProductTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedProductTypeHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{jt.label}}\\n \\n {{#if this.parsedJointTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedJointTypeHint}}\\n \\n {{/if}}\\n \\n \\n\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n {{ot.label}}\\n \\n {{#if this.parsedOverlayTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedOverlayTypeHint}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Welding Processes 1/2/3 }}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess1Hint}}\\n \\n {{this.parsedProcess1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess2Hint}}\\n \\n {{this.parsedProcess2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess3Hint}}\\n \\n {{this.parsedProcess3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Positions 1/2/3 + Directions }}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition1Hint}}\\n \\n {{this.parsedPosition1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{dir.label}}\\n \\n {{#if this.parsedPositionDirection1Hint}}\\n \\n {{this.parsedPositionDirection1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition2Hint}}\\n \\n {{this.parsedPosition2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{dir.label}}\\n \\n {{#if this.parsedPositionDirection2Hint}}\\n \\n {{this.parsedPositionDirection2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition3Hint}}\\n \\n {{this.parsedPosition3Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{dir.label}}\\n \\n {{#if this.parsedPositionDirection3Hint}}\\n \\n {{this.parsedPositionDirection3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Transfer Modes 1/2/3 }}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode1Hint}}\\n \\n {{this.parsedTransferMode1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode2Hint}}\\n \\n {{this.parsedTransferMode2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode3Hint}}\\n \\n {{this.parsedTransferMode3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Type of Current 1/2/3 — only when isWelder OR (operator + AWS D1.1) }}\\n {{#if @showTypeOfCurrent}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent1Hint}}\\n \\n {{this.parsedTypeCurrent1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent2Hint}}\\n \\n {{this.parsedTypeCurrent2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent3Hint}}\\n \\n {{this.parsedTypeCurrent3Hint}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Mechanization 1/2/3 — only for OPERATOR certificates not on AWS D1.1 }}\\n {{#if @canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization1Hint}}\\n \\n {{this.parsedProcessMecanization1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization2Hint}}\\n \\n {{this.parsedProcessMecanization2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization3Hint}}\\n \\n {{this.parsedProcessMecanization3Hint}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Welding Details }}\\n \\n \\n \\n {{#if this.parsedWeldingDetailsHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWeldingDetailsHint}}\\n \\n {{/if}}\\n \\n \\n\", {\"contents\":\"\\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n {{#if this.parsedWeldTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWeldTypeHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pt.label}}\\n \\n {{#if this.parsedProductTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedProductTypeHint}}\\n \\n {{/if}}\\n \\n \\n \\n {{jt.label}}\\n \\n {{#if this.parsedJointTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedJointTypeHint}}\\n \\n {{/if}}\\n \\n \\n\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n {{ot.label}}\\n \\n {{#if this.parsedOverlayTypeHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedOverlayTypeHint}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Welding Processes 1/2/3 }}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess1Hint}}\\n \\n {{this.parsedProcess1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess2Hint}}\\n \\n {{this.parsedProcess2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{p.shortDesignation}}\\n \\n {{#if this.parsedProcess3Hint}}\\n \\n {{this.parsedProcess3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Welding Positions 1/2/3 + Directions }}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition1Hint}}\\n \\n {{this.parsedPosition1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{dir.label}}\\n \\n {{#if this.parsedPositionDirection1Hint}}\\n \\n {{this.parsedPositionDirection1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition2Hint}}\\n \\n {{this.parsedPosition2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{dir.label}}\\n \\n {{#if this.parsedPositionDirection2Hint}}\\n \\n {{this.parsedPositionDirection2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{pos.code}}\\n \\n {{#if this.parsedPosition3Hint}}\\n \\n {{this.parsedPosition3Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{dir.label}}\\n \\n {{#if this.parsedPositionDirection3Hint}}\\n \\n {{this.parsedPositionDirection3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Transfer Modes 1/2/3 }}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode1Hint}}\\n \\n {{this.parsedTransferMode1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode2Hint}}\\n \\n {{this.parsedTransferMode2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.transferMode}}\\n \\n {{#if this.parsedTransferMode3Hint}}\\n \\n {{this.parsedTransferMode3Hint}}\\n \\n {{/if}}\\n \\n \\n\\n {{! Type of Current 1/2/3 — only when isWelder OR (operator + AWS D1.1) }}\\n {{#if @showTypeOfCurrent}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent1Hint}}\\n \\n {{this.parsedTypeCurrent1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent2Hint}}\\n \\n {{this.parsedTypeCurrent2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{tc.typeCurrent}}\\n \\n {{#if this.parsedTypeCurrent3Hint}}\\n \\n {{this.parsedTypeCurrent3Hint}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Mechanization 1/2/3 — only for OPERATOR certificates not on AWS D1.1 }}\\n {{#if @canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization1Hint}}\\n \\n {{this.parsedProcessMecanization1Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization2Hint}}\\n \\n {{this.parsedProcessMecanization2Hint}}\\n \\n {{/if}}\\n \\n \\n \\n {{m.name}}\\n \\n {{#if this.parsedProcessMecanization3Hint}}\\n \\n {{this.parsedProcessMecanization3Hint}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n\\n {{! Welding Details }}\\n \\n \\n \\n {{#if this.parsedWeldingDetailsHint}}\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.parsed-value\\\"}}:\\n {{this.parsedWeldingDetailsHint}}\\n \\n {{/if}}\\n \\n \\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/review/section-test-piece.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/review/section-test-piece.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action, get } from '@ember/object';\nimport type WeldType from 'weldnote/models/weld-type';\nimport type WeldingProcess from 'weldnote/models/welding-process';\nimport type WeldingPosition from 'weldnote/models/welding-position';\nimport type ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport type TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport type ProcessMecanization from 'weldnote/models/process-mecanization';\nimport type WeldingDetail from 'weldnote/models/welding-detail';\nimport type {\n TestPieceDetails,\n KeyLabelOption,\n MappedValue,\n} from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport {\n parsedWeldTypeHint,\n parsedProductTypeHint,\n parsedJointTypeHint,\n parsedOverlayTypeHint,\n parsedProcessHint,\n parsedPositionHint,\n parsedPositionDirectionHint,\n parsedTransferModeHint,\n parsedTypeCurrentHint,\n parsedProcessMecanizationHint,\n parsedWeldingDetailsHint,\n} from 'weldnote/utils/digitalize/parsed-hints';\n\ninterface SectionTestPieceArgs {\n // Canonical state (owned by parent)\n selectedWeldType: WeldType | null;\n selectedProductType: KeyLabelOption | null;\n selectedJointType: KeyLabelOption | null;\n selectedOverlayType: KeyLabelOption | null;\n selectedWeldingProcess1: WeldingProcess | null;\n selectedWeldingProcess2: WeldingProcess | null;\n selectedWeldingProcess3: WeldingProcess | null;\n selectedPosition1: WeldingPosition | null;\n selectedPosition2: WeldingPosition | null;\n selectedPosition3: WeldingPosition | null;\n selectedPositionDirection1: KeyLabelOption | null;\n selectedPositionDirection2: KeyLabelOption | null;\n selectedPositionDirection3: KeyLabelOption | null;\n selectedTransferMode1: ArcTransferMode | null;\n selectedTransferMode2: ArcTransferMode | null;\n selectedTransferMode3: ArcTransferMode | null;\n selectedTypeCurrent1: TypeCurrentPolarity | null;\n selectedTypeCurrent2: TypeCurrentPolarity | null;\n selectedTypeCurrent3: TypeCurrentPolarity | null;\n selectedMecanization1: ProcessMecanization | null;\n selectedMecanization2: ProcessMecanization | null;\n selectedMecanization3: ProcessMecanization | null;\n weldingLayers: WeldingDetail[];\n\n // Options (filtered by parent)\n weldTypeOptions: WeldType[];\n productTypeOptions: KeyLabelOption[];\n jointTypeOptions: KeyLabelOption[];\n overlayTypeOptions: KeyLabelOption[];\n weldingProcessOptions: WeldingProcess[];\n weldingPositionOptions: WeldingPosition[];\n weldingPositionDirectionOptions: KeyLabelOption[];\n arcTransferModeOptions: ArcTransferMode[];\n typeCurrentPolarityOptions: TypeCurrentPolarity[];\n processMecanizationOptions: ProcessMecanization[];\n weldingDetailOptions: WeldingDetail[];\n\n // Parsed data for hint computation\n parsedTestPieceDetails: TestPieceDetails | null;\n validationMappings: Record | null;\n\n // Visibility flags from parent (mirror model-welder-certificate/edit.ts rules)\n showTypeOfCurrent: boolean;\n canShowWeldingOperatorSpecificFields: boolean;\n\n // Generic callback for updating parent state\n onUpdate: (field: string, value: unknown) => void;\n}\n\nexport default class ReviewSectionTestPieceComponent extends Component {\n // ── Computed: isOverlayWeld ───────────────────────────────\n\n get isOverlayWeld(): boolean {\n return !!get(this.args, 'selectedWeldType.isOverlayWeld');\n }\n\n // ── Computed: Parsed Hints ────────────────────────────────\n\n get parsedWeldTypeHint() {\n return parsedWeldTypeHint(this.args.validationMappings, this.args.parsedTestPieceDetails?.weld_type);\n }\n\n get parsedProductTypeHint() {\n return parsedProductTypeHint(this.args.parsedTestPieceDetails?.product_type);\n }\n\n get parsedJointTypeHint() {\n return parsedJointTypeHint(this.args.parsedTestPieceDetails?.joint_type);\n }\n\n get parsedOverlayTypeHint() {\n return parsedOverlayTypeHint(this.args.parsedTestPieceDetails?.overlay_type);\n }\n\n get parsedProcess1Hint() {\n return parsedProcessHint(this.args.validationMappings, 1, this.args.parsedTestPieceDetails?.welding_process_1);\n }\n\n get parsedProcess2Hint() {\n return parsedProcessHint(this.args.validationMappings, 2, this.args.parsedTestPieceDetails?.welding_process_2);\n }\n\n get parsedProcess3Hint() {\n return parsedProcessHint(this.args.validationMappings, 3, this.args.parsedTestPieceDetails?.welding_process_3);\n }\n\n get parsedPosition1Hint() {\n return parsedPositionHint(this.args.validationMappings, 1, this.args.parsedTestPieceDetails?.welding_position_1);\n }\n\n get parsedPosition2Hint() {\n return parsedPositionHint(this.args.validationMappings, 2, this.args.parsedTestPieceDetails?.welding_position_2);\n }\n\n get parsedPosition3Hint() {\n return parsedPositionHint(this.args.validationMappings, 3, this.args.parsedTestPieceDetails?.welding_position_3);\n }\n\n get parsedPositionDirection1Hint() {\n return parsedPositionDirectionHint(this.args.parsedTestPieceDetails?.welding_position_1_direction);\n }\n\n get parsedPositionDirection2Hint() {\n return parsedPositionDirectionHint(this.args.parsedTestPieceDetails?.welding_position_2_direction);\n }\n\n get parsedPositionDirection3Hint() {\n return parsedPositionDirectionHint(this.args.parsedTestPieceDetails?.welding_position_3_direction);\n }\n\n get parsedTransferMode1Hint() {\n return parsedTransferModeHint(this.args.validationMappings, 1, this.args.parsedTestPieceDetails?.arc_transfer_mode_1);\n }\n\n get parsedTransferMode2Hint() {\n return parsedTransferModeHint(this.args.validationMappings, 2, this.args.parsedTestPieceDetails?.arc_transfer_mode_2);\n }\n\n get parsedTransferMode3Hint() {\n return parsedTransferModeHint(this.args.validationMappings, 3, this.args.parsedTestPieceDetails?.arc_transfer_mode_3);\n }\n\n get parsedTypeCurrent1Hint() {\n return parsedTypeCurrentHint(this.args.validationMappings, 1, this.args.parsedTestPieceDetails?.type_of_current_1);\n }\n\n get parsedTypeCurrent2Hint() {\n return parsedTypeCurrentHint(this.args.validationMappings, 2, this.args.parsedTestPieceDetails?.type_of_current_2);\n }\n\n get parsedTypeCurrent3Hint() {\n return parsedTypeCurrentHint(this.args.validationMappings, 3, this.args.parsedTestPieceDetails?.type_of_current_3);\n }\n\n get parsedProcessMecanization1Hint() {\n return parsedProcessMecanizationHint(this.args.validationMappings, 1, this.args.parsedTestPieceDetails?.welding_process_mechanization_1);\n }\n\n get parsedProcessMecanization2Hint() {\n return parsedProcessMecanizationHint(this.args.validationMappings, 2, this.args.parsedTestPieceDetails?.welding_process_mechanization_2);\n }\n\n get parsedProcessMecanization3Hint() {\n return parsedProcessMecanizationHint(this.args.validationMappings, 3, this.args.parsedTestPieceDetails?.welding_process_mechanization_3);\n }\n\n get parsedWeldingDetailsHint() {\n return parsedWeldingDetailsHint(this.args.parsedTestPieceDetails?.welding_details);\n }\n\n // ── Actions: Setter Callbacks ─────────────────────────────\n\n @action setWeldType(val: WeldType | null) {\n this.args.onUpdate('selectedWeldType', val);\n }\n\n @action setProductType(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedProductType', val);\n }\n\n @action setJointType(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedJointType', val);\n }\n\n @action setOverlayType(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedOverlayType', val);\n }\n\n @action setWeldingProcess1(val: WeldingProcess | null) {\n this.args.onUpdate('selectedWeldingProcess1', val);\n }\n\n @action setWeldingProcess2(val: WeldingProcess | null) {\n this.args.onUpdate('selectedWeldingProcess2', val);\n }\n\n @action setWeldingProcess3(val: WeldingProcess | null) {\n this.args.onUpdate('selectedWeldingProcess3', val);\n }\n\n @action setPosition1(val: WeldingPosition | null) {\n this.args.onUpdate('selectedPosition1', val);\n }\n\n @action setPosition2(val: WeldingPosition | null) {\n this.args.onUpdate('selectedPosition2', val);\n }\n\n @action setPosition3(val: WeldingPosition | null) {\n this.args.onUpdate('selectedPosition3', val);\n }\n\n @action setPositionDirection1(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedPositionDirection1', val);\n }\n\n @action setPositionDirection2(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedPositionDirection2', val);\n }\n\n @action setPositionDirection3(val: KeyLabelOption | null) {\n this.args.onUpdate('selectedPositionDirection3', val);\n }\n\n @action setTransferMode1(val: ArcTransferMode | null) {\n this.args.onUpdate('selectedTransferMode1', val);\n }\n\n @action setTransferMode2(val: ArcTransferMode | null) {\n this.args.onUpdate('selectedTransferMode2', val);\n }\n\n @action setTransferMode3(val: ArcTransferMode | null) {\n this.args.onUpdate('selectedTransferMode3', val);\n }\n\n @action setTypeCurrent1(val: TypeCurrentPolarity | null) {\n this.args.onUpdate('selectedTypeCurrent1', val);\n }\n\n @action setTypeCurrent2(val: TypeCurrentPolarity | null) {\n this.args.onUpdate('selectedTypeCurrent2', val);\n }\n\n @action setTypeCurrent3(val: TypeCurrentPolarity | null) {\n this.args.onUpdate('selectedTypeCurrent3', val);\n }\n\n @action setMecanization1(val: ProcessMecanization | null) {\n this.args.onUpdate('selectedMecanization1', val);\n }\n\n @action setMecanization2(val: ProcessMecanization | null) {\n this.args.onUpdate('selectedMecanization2', val);\n }\n\n @action setMecanization3(val: ProcessMecanization | null) {\n this.args.onUpdate('selectedMecanization3', val);\n }\n\n @action setWeldingDetails(val: WeldingDetail[] | null) {\n this.args.onUpdate('weldingLayers', val || []);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n

\\n {{t \\\"routes.digitalize-welder-certificate.sections.upload.description\\\"}}\\n

\\n\\n
\\n \\n
\\n {{#each this.certificateTypeOptions as |option|}}\\n \\n {{/each}}\\n
\\n
\\n\\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n\\n {{#let (file-queue name=\\\"digitalize-welder-certificate-upload\\\" onFileAdded=this.uploadFile) as |queue|}}\\n \\n {{#if queue.files.length}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.messages.uploading\\\"}}\\n
\\n \\n {{queue.progress}}%\\n
\\n
\\n \\n {{else}}\\n \\n {{#if dropzone.active}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-welder-certificate.messages.drop-files\\\"}}\\n

\\n
\\n {{else}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-welder-certificate.messages.drag-drop\\\"}}\\n

\\n

\\n {{t\\n \\\"routes.digitalize-welder-certificate.sections.upload.supported-formats\\\"\\n default=\\\"Supported format: PDF+Images (JPEG/PNG)\\\"\\n }}\\n

\\n {{#if this.isDropzoneDisabled}}\\n

\\n \\n {{t \\\"routes.digitalize-welder-certificate.sections.upload.standard-required-hint\\\"}}\\n

\\n {{/if}}\\n \\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.buttons.select-files\\\"}}\\n \\n
\\n {{/if}}\\n \\n {{/if}}\\n
\\n {{/let}}\\n\\n {{#if this.isUploading}}\\n
\\n \\n

\\n {{#if (gt this.totalFilesToUpload 1)}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.messages.queuing-multiple\\\"\\n current=this.currentUploadNumber\\n total=this.totalFilesToUpload\\n }}\\n {{else}}\\n {{t \\\"routes.digitalize-welder-certificate.messages.queuing\\\"}}\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.buttons.close\\\"}}\\n \\n \\n\\n\\n{{! Close confirmation dialog }}\\n{{#if this.showCloseWarning}}\\n \\n \\n

{{t \\\"routes.digitalize-welder-certificate.modal.close-warning-message\\\"}}

\\n
\\n \\n \\n \\n \\n \\n{{/if}}\\n\", {\"contents\":\"\\n \\n

\\n {{t \\\"routes.digitalize-welder-certificate.sections.upload.description\\\"}}\\n

\\n\\n
\\n \\n
\\n {{#each this.certificateTypeOptions as |option|}}\\n \\n {{/each}}\\n
\\n
\\n\\n
\\n \\n {{standard.visualLabel}}\\n \\n
\\n\\n {{#let (file-queue name=\\\"digitalize-welder-certificate-upload\\\" onFileAdded=this.uploadFile) as |queue|}}\\n \\n {{#if queue.files.length}}\\n
\\n \\n {{t \\\"routes.digitalize-welder-certificate.messages.uploading\\\"}}\\n
\\n \\n {{queue.progress}}%\\n
\\n
\\n \\n {{else}}\\n \\n {{#if dropzone.active}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-welder-certificate.messages.drop-files\\\"}}\\n

\\n
\\n {{else}}\\n
\\n \\n

\\n {{t \\\"routes.digitalize-welder-certificate.messages.drag-drop\\\"}}\\n

\\n

\\n {{t\\n \\\"routes.digitalize-welder-certificate.sections.upload.supported-formats\\\"\\n default=\\\"Supported format: PDF+Images (JPEG/PNG)\\\"\\n }}\\n

\\n {{#if this.isDropzoneDisabled}}\\n

\\n \\n {{t \\\"routes.digitalize-welder-certificate.sections.upload.standard-required-hint\\\"}}\\n

\\n {{/if}}\\n \\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.buttons.select-files\\\"}}\\n \\n
\\n {{/if}}\\n \\n {{/if}}\\n
\\n {{/let}}\\n\\n {{#if this.isUploading}}\\n
\\n \\n

\\n {{#if (gt this.totalFilesToUpload 1)}}\\n {{t\\n \\\"routes.digitalize-welder-certificate.messages.queuing-multiple\\\"\\n current=this.currentUploadNumber\\n total=this.totalFilesToUpload\\n }}\\n {{else}}\\n {{t \\\"routes.digitalize-welder-certificate.messages.queuing\\\"}}\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n \\n \\n {{t \\\"routes.digitalize-welder-certificate.review.buttons.close\\\"}}\\n \\n \\n\\n\\n{{! Close confirmation dialog }}\\n{{#if this.showCloseWarning}}\\n \\n \\n

{{t \\\"routes.digitalize-welder-certificate.modal.close-warning-message\\\"}}

\\n
\\n \\n \\n \\n \\n \\n{{/if}}\\n\",\"moduleName\":\"weldnote/components/digitalize-welder-certificate/upload-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/digitalize-welder-certificate/upload-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { dropTask, task } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport DS from 'ember-data';\nimport Constants from 'weldnote/utils/constants';\nimport WelderCertificateParseQueueService from 'weldnote/services/welder-certificate-parse-queue';\nimport type AlertMessageService from 'weldnote/services/alert-message';\nimport type WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport FileUpload from 'weldnote/models/file-upload';\nimport type WelderStandard from 'weldnote/models/welder-standard';\n\nconst { FILE_CONTEXT, CERTIFICATE_TYPE } = Constants;\nconst MAX_FILE_SIZE = 50 * 1024 * 1024; // 50MB\n\ninterface CertificateTypeOption {\n value: string;\n label: string;\n}\n\ninterface UploadFile {\n name: string;\n size: number;\n type: string;\n upload: (url: string, options: { data: Record }) => Promise;\n}\n\ninterface FileUploadResult {\n filename: string;\n url: string;\n credentials: Record;\n fileUploadId: string;\n}\n\ninterface UploadError {\n fileName: string;\n error: unknown;\n}\n\ninterface UploadModalArgs {\n onClose: () => void;\n onUploadComplete?: () => void;\n}\n\nexport default class DigitalizeWelderCertificateUploadModalComponent extends Component {\n @service declare intl: IntlService;\n @service declare fileService: any;\n @service declare store: DS.Store;\n @service declare alertMessage: AlertMessageService;\n @service declare welderCertificateParseQueue: WelderCertificateParseQueueService;\n @service declare welderCertificateParseMonitor: any;\n @service('weldcloud-notes-data') declare notesData: WeldcloudNotesData;\n\n @tracked showCloseWarning = false;\n @tracked selectedStandard: WelderStandard | null = null;\n @tracked selectedCertificateType: CertificateTypeOption;\n\n // Multi-file upload tracking\n @tracked totalFilesToUpload = 0;\n @tracked filesUploaded = 0;\n @tracked uploadErrors: UploadError[] = [];\n _uploadQueue: UploadFile[] = [];\n\n constructor(owner: unknown, args: UploadModalArgs) {\n super(owner, args);\n this.selectedCertificateType = this.certificateTypeOptions[0];\n this.loadStandards.perform();\n }\n\n loadStandards = task(this, { drop: true }, async () => {\n await (this.notesData as any).fetchWelderStandards.perform();\n });\n\n get isLoadingStandards(): boolean {\n return this.loadStandards.isRunning;\n }\n\n get standardOptions(): WelderStandard[] {\n if (this.selectedCertificateType.value === CERTIFICATE_TYPE.OPERATOR) {\n return this.notesData.weldingOperatorStandards;\n }\n return this.notesData.welderCertificateStandards;\n }\n\n get certificateTypeOptions(): CertificateTypeOption[] {\n return [\n { value: CERTIFICATE_TYPE.WELDER, label: this.intl.t('lov.certificate-type.WELDER') },\n { value: CERTIFICATE_TYPE.OPERATOR, label: this.intl.t('lov.certificate-type.OPERATOR') },\n ];\n }\n\n get selectedIndustryCodeId(): string | null {\n if (this.selectedStandard) {\n return this.selectedStandard.industryCodeId || null;\n }\n return null;\n }\n\n get isDropzoneDisabled(): boolean {\n return !this.selectedStandard || this.isLoadingStandards;\n }\n\n get isUploading(): boolean {\n return this.processUploadQueueTask.isRunning;\n }\n\n get acceptedMimeTypes(): string[] {\n return ['application/pdf', 'image/jpeg', 'image/png'];\n }\n\n get acceptedExtensions(): string[] {\n return ['.pdf', '.jpg', '.jpeg', '.png'];\n }\n\n // Current file number being uploaded (1-indexed for display)\n get currentUploadNumber(): number {\n return this.filesUploaded + 1;\n }\n\n @action\n setCertificateType(option: CertificateTypeOption): void {\n if (this.selectedCertificateType.value !== option.value) {\n this.selectedCertificateType = option;\n this.selectedStandard = null;\n }\n }\n\n @action\n setStandard(standard: WelderStandard | null): void {\n this.selectedStandard = standard;\n }\n\n @action\n uploadFile(file: UploadFile): void {\n if (this.isDropzoneDisabled) {\n return;\n }\n\n // Add file to queue and start processing if not already running\n this._uploadQueue.push(file);\n this.totalFilesToUpload = this._uploadQueue.length + this.filesUploaded;\n\n if (!this.processUploadQueueTask.isRunning) {\n this.processUploadQueueTask.perform();\n }\n }\n\n processUploadQueueTask = dropTask(async () => {\n this.filesUploaded = 0;\n this.uploadErrors = [];\n\n while (this._uploadQueue.length > 0) {\n const file = this._uploadQueue.shift()!;\n // Update total in case more files were added while processing\n this.totalFilesToUpload = this._uploadQueue.length + this.filesUploaded + 1;\n\n try {\n await this._uploadSingleFile(file);\n this.filesUploaded++;\n } catch (error) {\n this.uploadErrors = [...this.uploadErrors, { fileName: file.name, error }];\n }\n }\n\n // All files processed - show results and close modal\n this._showUploadResults();\n });\n\n async _uploadSingleFile(file: UploadFile): Promise {\n let { size, name: filename, type: contentType } = file;\n\n // Upload to S3, and get the file-upload record\n let result: FileUploadResult = await this.fileService.getFileUploadRequest(\n filename,\n FILE_CONTEXT.DIGITALIZE_WELDER_CERTIFICATE,\n contentType,\n size\n );\n\n let { filename: newFilename, url, credentials, fileUploadId } = result;\n\n await file.upload(url, { data: { ...credentials, name: newFilename } });\n let upload: FileUpload = await this.store.findRecord('file-upload', fileUploadId);\n\n // Queue the file for parsing\n await this.queueFileForParsing(upload);\n }\n\n _showUploadResults(): void {\n const successCount = this.filesUploaded;\n const errorCount = this.uploadErrors.length;\n\n if (successCount > 0 && errorCount === 0) {\n // All successful\n if (successCount === 1) {\n this.alertMessage.success(this.intl.t('routes.digitalize-welder-certificate.messages.file-queued'));\n } else {\n this.alertMessage.success(\n this.intl.t('routes.digitalize-welder-certificate.messages.files-queued', { count: successCount })\n );\n }\n // Close modal and notify parent\n if (this.args.onUploadComplete) {\n this.args.onUploadComplete();\n }\n } else if (successCount > 0 && errorCount > 0) {\n // Partial success\n this.alertMessage.info(\n this.intl.t('routes.digitalize-welder-certificate.messages.files-queued-with-errors', {\n successCount,\n errorCount,\n })\n );\n // Still close modal\n if (this.args.onUploadComplete) {\n this.args.onUploadComplete();\n }\n } else {\n // All failed - don't close modal, show error\n this.alertMessage.error(this.intl.t('routes.digitalize-welder-certificate.errors.upload-failed'));\n }\n\n // Reset counters\n this.totalFilesToUpload = 0;\n this.filesUploaded = 0;\n }\n\n // Send the uploaded file to the welder certificate parse queue\n async queueFileForParsing(upload: FileUpload): Promise {\n const result = await this.welderCertificateParseQueue.queueFile(\n parseInt(upload.id),\n upload.originalFilename,\n this.selectedIndustryCodeId,\n this.selectedCertificateType?.value ?? null\n );\n\n // Track the item in the global monitor for notifications\n if (result && result.queueItemId) {\n this.welderCertificateParseMonitor.trackItem(result.queueItemId, upload.originalFilename);\n }\n }\n\n @action\n validateFile(file: UploadFile): boolean {\n const extension = file.name ? `.${file.name.split('.').pop()?.toLowerCase()}` : '';\n const isValidType =\n this.acceptedMimeTypes.includes(file.type) || this.acceptedExtensions.includes(extension);\n\n if (!isValidType) {\n this.alertMessage.error(this.intl.t('routes.digitalize-welder-certificate.errors.invalid-file-type'));\n return false;\n }\n\n if (file.size > MAX_FILE_SIZE) {\n this.alertMessage.error(this.intl.t('routes.digitalize-welder-certificate.errors.file-too-large'));\n return false;\n }\n\n return true;\n }\n\n @action\n requestClose(): void {\n if (this.isUploading) {\n // Show confirmation dialog\n this.showCloseWarning = true;\n } else {\n this.args.onClose();\n }\n }\n\n @action\n cancelClose(): void {\n this.showCloseWarning = false;\n }\n\n @action\n confirmClose(): void {\n // Cancel any pending uploads\n this._uploadQueue = [];\n this.processUploadQueueTask.cancelAll();\n this.showCloseWarning = false;\n\n // Close the modal\n this.args.onClose();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (is-array @content)}}\\n {{#if this.isSorted}}\\n {{#each this.sortedContent as |model|}}\\n {{get @model this.attributeReference}}{{#if\\n (not-eq this.sortedContent.lastObject @model)\\n }}, {{/if}}\\n {{/each}}\\n {{else}}\\n {{#each @content as |model|}}\\n {{get @model this.attributeReference}}{{#if (not-eq @content.lastObject @model)}}, {{/if}}\\n {{/each}}\\n {{/if}}\\n {{else}}\\n {{#if this.isDecimal}}\\n {{format-decimal (get @content this.attributeReference)}}\\n {{else}}\\n {{get @content this.attributeReference}}\\n {{/if}}\\n\\n {{/if}}\\n

\\n
\", {\"contents\":\"
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (is-array @content)}}\\n {{#if this.isSorted}}\\n {{#each this.sortedContent as |model|}}\\n {{get @model this.attributeReference}}{{#if\\n (not-eq this.sortedContent.lastObject @model)\\n }}, {{/if}}\\n {{/each}}\\n {{else}}\\n {{#each @content as |model|}}\\n {{get @model this.attributeReference}}{{#if (not-eq @content.lastObject @model)}}, {{/if}}\\n {{/each}}\\n {{/if}}\\n {{else}}\\n {{#if this.isDecimal}}\\n {{format-decimal (get @content this.attributeReference)}}\\n {{else}}\\n {{get @content this.attributeReference}}\\n {{/if}}\\n\\n {{/if}}\\n

\\n
\",\"moduleName\":\"weldnote/components/display-approval-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/display-approval-range.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport { sort, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\n\n@classic\nexport default class DisplayApprovalRange extends Component {\n sortDirection = 'ASC';\n\n @notEmpty('sortBy')\n isSorted;\n\n label = '';\n\n modelName = '';\n\n isDecimal = false;\n\n renderLabel = true;\n\n init() {\n super.init(...arguments);\n assert('Must pass a valid label', !isEmpty(this.label));\n assert('Must pass a model name', !isEmpty(this.modelName));\n }\n\n @sort('content', function (a, b) {\n let sortProperty = this.sortBy;\n let { sortDirection } = this;\n let aProp = a.get(sortProperty);\n let bProp = b.get(sortProperty);\n if (aProp > bProp) {\n if (sortDirection === 'ASC') {\n return 1;\n } else {\n return -1;\n }\n } else if (aProp < bProp) {\n if (sortDirection === 'ASC') {\n return -1;\n } else {\n return 1;\n }\n }\n return 0;\n })\n sortedContent;\n\n @computed('label')\n get labelReference() {\n return `model.${this.modelName}.${this.label}.label`;\n }\n\n @computed('attribute')\n get attributeReference() {\n if (isEmpty(this.attribute)) {\n return 'visualLabel';\n }\n return this.attribute;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n

 

\\n
\", {\"contents\":\"
\\n \\n

 

\\n
\",\"moduleName\":\"weldnote/components/empty-field.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/empty-field.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasCertificate}}\\n
\\n \\n {{svg-jar \\\"bell\\\" class=\\\"w-12\\\"}}\\n {{this.certificateCount}}\\n \\n
    \\n {{#if this.hasCertificatesInternalToday}}\\n
  • \\n {{t\\n \\\"components.expiring-certificates.internally\\\"\\n }}\\n {{this.internalCount}}\\n
  • \\n {{/if}}\\n {{#if this.hasCertificatesExternalToday}}\\n
  • \\n {{t\\n \\\"components.expiring-certificates.externally\\\"\\n }}\\n {{this.externalCount}}\\n
  • \\n {{/if}}\\n {{#if this.hasMiscellaneousToday}}\\n
  • \\n {{t\\n \\\"components.expiring-certificates.miscellaneous\\\"\\n }}\\n {{this.miscellaneousCount}}\\n
  • \\n {{/if}}\\n
\\n
\\n{{/if}}\", {\"contents\":\"{{#if this.hasCertificate}}\\n
\\n \\n {{svg-jar \\\"bell\\\" class=\\\"w-12\\\"}}\\n {{this.certificateCount}}\\n \\n
    \\n {{#if this.hasCertificatesInternalToday}}\\n
  • \\n {{t\\n \\\"components.expiring-certificates.internally\\\"\\n }}\\n {{this.internalCount}}\\n
  • \\n {{/if}}\\n {{#if this.hasCertificatesExternalToday}}\\n
  • \\n {{t\\n \\\"components.expiring-certificates.externally\\\"\\n }}\\n {{this.externalCount}}\\n
  • \\n {{/if}}\\n {{#if this.hasMiscellaneousToday}}\\n
  • \\n {{t\\n \\\"components.expiring-certificates.miscellaneous\\\"\\n }}\\n {{this.miscellaneousCount}}\\n
  • \\n {{/if}}\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/expiring-certificates.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/expiring-certificates.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport { once } from '@ember/runloop';\n\nexport default class ExpiringCertificates extends Component {\n @service('welder-certificate-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n get hasCertificatesInternalToday() {\n return (get(this.data, 'certificateInternallyTodayCount') || 0) > 0;\n }\n\n get hasCertificatesExternalToday() {\n return (get(this.data, 'certificateExternallyTodayCount') || 0) > 0;\n }\n\n get hasMiscellaneousToday() {\n return (get(this.data, 'miscellaneousExpireTodayCount') || 0) > 0;\n }\n\n get hasCertificate() {\n return (\n this.hasCertificatesInternalToday ||\n this.hasCertificatesExternalToday ||\n this.hasMiscellaneousToday\n );\n }\n\n get internalCount() {\n return get(this.data, 'certificateInternallyTodayCount');\n }\n\n get externalCount() {\n return get(this.data, 'certificateExternallyTodayCount');\n }\n\n get miscellaneousCount() {\n return get(this.data, 'miscellaneousExpireTodayCount');\n }\n\n get certificateCount() {\n let internal = parseInt(get(this.data, 'certificateInternallyTodayCount')) || 0;\n let external = parseInt(get(this.data, 'certificateExternallyTodayCount')) || 0;\n let miscellaneous = parseInt(get(this.data, 'miscellaneousExpireTodayCount')) || 0;\n return internal + external + miscellaneous;\n }\n\n constructor() {\n super(...arguments);\n // Set up reactivity to show warning when certificates are detected\n this.showWarningIfNeeded();\n }\n\n showWarningIfNeeded() {\n if (this.hasCertificate) {\n once(this, 'showExpiringCertificatesWarning');\n }\n }\n\n showExpiringCertificatesWarning() {\n if (this.hasCertificate) {\n let { intl, alert } = this;\n let message = intl.t('components.expiring-certificates.warning-today');\n let title = intl.t('components.expiring-certificates.warning-today-title');\n alert.info(message, title, { timeOut: 15000 });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.isVisible}}\\n \\n
\\n \\n {{@title}}\\n \\n \\n \\n \\n \\n
\\n \\n {{yield}}\\n \\n {{#if @linkRoute}}\\n
\\n \\n \\n \\n
\\n {{/if}}\\n \\n{{else}}\\n
\\n \\n \\n {{@title}}\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if this.isVisible}}\\n \\n
\\n \\n {{@title}}\\n \\n \\n \\n \\n \\n
\\n \\n {{yield}}\\n \\n {{#if @linkRoute}}\\n
\\n \\n \\n \\n
\\n {{/if}}\\n \\n{{else}}\\n
\\n \\n \\n {{@title}}\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/feature-banner.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/feature-banner.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport {\n localStorageGet,\n localStorageSet,\n} from 'weldnote/src-weldnote/util/local-storage';\n\ninterface FeatureBannerArgs {\n bannerId: string;\n title: string;\n linkRoute?: string;\n linkText?: string;\n onDismiss?: () => void;\n}\n\nexport default class FeatureBannerComponent extends Component {\n @tracked isVisible: boolean;\n\n constructor(owner: unknown, args: FeatureBannerArgs) {\n super(owner, args);\n this.isVisible = !this._isDismissed();\n }\n\n @action\n dismiss(): void {\n this.isVisible = false;\n localStorageSet(this._storageKey(), true);\n this.args.onDismiss?.();\n }\n\n @action\n show(): void {\n this.isVisible = true;\n localStorageSet(this._storageKey(), false);\n }\n\n private _storageKey(): string {\n return `feature-banner:${this.args.bannerId}:dismissed`;\n }\n\n private _isDismissed(): boolean {\n return Boolean(localStorageGet(this._storageKey()));\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{#if (has-value @fillerMaterial.id)}}\\n {{concat\\n @fillerMaterial.specification.specification\\n \\\" \\\"\\n @fillerMaterial.classification.classification\\n \\\" \\\"\\n @fillerMaterial.materialGroup.visualLabel\\n }}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{#if (has-value @fillerMaterial.id)}}\\n {{concat\\n @fillerMaterial.specification.specification\\n \\\" \\\"\\n @fillerMaterial.classification.classification\\n \\\" \\\"\\n @fillerMaterial.materialGroup.visualLabel\\n }}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n {{else}}\\n
\\n \\n

{{concat\\n @fillerMaterial.specification.specification\\n \\\" \\\"\\n @fillerMaterial.classification.classification\\n \\\" \\\"\\n @fillerMaterial.materialGroup.visualLabel\\n }}

\\n
\\n {{/if}}\\n\\n {{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.filler-material-chooser.close-btn\\\"}}
\\n {{#if (not this.showAll)}}\\n \\n {{t \\\"components.filler-material-chooser.applied-filters\\\"}}\\n {{this.searchParameters}}\\n {{/if}}\\n {{#if (and this.isFilteringByProcess this.emptyResultSet)}}\\n
\\n \\n
\\n \\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isSearching}}\\n \\n \\n \\n {{/if}}\\n {{#if (not this.hasSearchValues)}}\\n {{#each this.suggestions as |material index|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n {{/if}}\\n {{#each this.materialSearch as |material index|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{this.specificationLabel}}{{this.classificationLabel}}{{this.groupLabel}}
\\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.filler-material-chooser.loading-results\\\"}}\\n
{{material.specification.specification}}{{material.classification.classification}}{{material.group.visualLabel}}
{{material.specification.specification}}{{material.classification.classification}}{{material.group.visualLabel}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.filler-material-chooser.no-results\\\"}}\\n {{#if this.canCreateNew}}\\n :\\n {{t \\\"components.filler-material-chooser.add-new\\\"}}?\\n {{/if}}\\n {{else}}\\n {{#if (not this.hasSearchValues)}}\\n {{t \\\"components.filler-material-chooser.no-results\\\"}}\\n -\\n {{t \\\"components.filler-material-chooser.show-all\\\"}}\\n ?\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.totalCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.isShowingCreate}}\\n \\n {{/if}}\\n\", {\"contents\":\"\\n {{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{#if (has-value @fillerMaterial.id)}}\\n {{concat\\n @fillerMaterial.specification.specification\\n \\\" \\\"\\n @fillerMaterial.classification.classification\\n \\\" \\\"\\n @fillerMaterial.materialGroup.visualLabel\\n }}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{#if (has-value @fillerMaterial.id)}}\\n {{concat\\n @fillerMaterial.specification.specification\\n \\\" \\\"\\n @fillerMaterial.classification.classification\\n \\\" \\\"\\n @fillerMaterial.materialGroup.visualLabel\\n }}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n {{else}}\\n
\\n \\n

{{concat\\n @fillerMaterial.specification.specification\\n \\\" \\\"\\n @fillerMaterial.classification.classification\\n \\\" \\\"\\n @fillerMaterial.materialGroup.visualLabel\\n }}

\\n
\\n {{/if}}\\n\\n {{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.filler-material-chooser.close-btn\\\"}}
\\n {{#if (not this.showAll)}}\\n \\n {{t \\\"components.filler-material-chooser.applied-filters\\\"}}\\n {{this.searchParameters}}\\n {{/if}}\\n {{#if (and this.isFilteringByProcess this.emptyResultSet)}}\\n
\\n \\n
\\n \\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isSearching}}\\n \\n \\n \\n {{/if}}\\n {{#if (not this.hasSearchValues)}}\\n {{#each this.suggestions as |material index|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n {{/if}}\\n {{#each this.materialSearch as |material index|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{this.specificationLabel}}{{this.classificationLabel}}{{this.groupLabel}}
\\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.filler-material-chooser.loading-results\\\"}}\\n
{{material.specification.specification}}{{material.classification.classification}}{{material.group.visualLabel}}
{{material.specification.specification}}{{material.classification.classification}}{{material.group.visualLabel}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.filler-material-chooser.no-results\\\"}}\\n {{#if this.canCreateNew}}\\n :\\n {{t \\\"components.filler-material-chooser.add-new\\\"}}?\\n {{/if}}\\n {{else}}\\n {{#if (not this.hasSearchValues)}}\\n {{t \\\"components.filler-material-chooser.no-results\\\"}}\\n -\\n {{t \\\"components.filler-material-chooser.show-all\\\"}}\\n ?\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.totalCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.isShowingCreate}}\\n \\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/filler-material-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/filler-material-chooser.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { debounce } from '@ember/runloop';\nimport { isEmpty } from '@ember/utils';\nimport { get, action } from '@ember/object';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class FillerMaterialChooser extends Component {\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service\n analytics;\n\n @service\n store;\n\n @service('alertMessage')\n alert;\n\n @tracked\n currentPage = 1;\n\n @tracked\n totalCount = 0;\n\n pageSize = 10;\n\n get canCreateNew() {\n return this.args.canCreateNew ?? false;\n }\n\n // Ignore filtering by Welding Process\n @tracked\n showAll = false;\n\n @tracked\n isShowingSearch = false;\n\n @tracked\n isShowingCreate = false;\n\n @tracked\n isSearching = false;\n\n @tracked\n materialSearch = null;\n\n @tracked\n newMaterial = null;\n\n get specificationLabel() {\n if (this.args.specificationLabel) {\n return this.args.specificationLabel;\n }\n return this.intl.t('components.filler-material-chooser.specification');\n }\n\n get classificationLabel() {\n if (this.args.classificationLabel) {\n return this.args.classificationLabel;\n }\n return this.intl.t('components.filler-material-chooser.classification');\n }\n\n get groupLabel() {\n if (this.args.groupLabel) {\n return this.args.groupLabel;\n }\n return this.intl.t('components.filler-material-chooser.group');\n }\n\n @tracked\n fillerMaterial = null;\n\n get industryCodeId() {\n if (this.args.industryCode) {\n return get(this.args.industryCode, 'id');\n }\n return null;\n }\n\n // Properties to store the search queries for the various parts of\n // the base material\n @tracked\n fillerMaterialSpecification = '';\n\n @tracked\n fillerMaterialClassification = '';\n\n @tracked\n fillerMaterialGroup = '';\n\n get isFilteringByProcess() {\n if (this.args.weldingProcess) {\n return !isEmpty(get(this.args.weldingProcess, 'id'));\n }\n return false;\n }\n\n get hasSearchValues() {\n return (\n !isEmpty(this.fillerMaterialSpecification) ||\n !isEmpty(this.fillerMaterialClassification) ||\n !isEmpty(this.fillerMaterialGroup)\n );\n }\n\n get emptyResultSet() {\n if (this.materialSearch) {\n return this.materialSearch.length === 0;\n }\n return false;\n }\n\n get noSearchResults() {\n let { materialSearch } = this;\n return materialSearch && materialSearch.length === 0 && this.hasSearchValues;\n }\n\n get searchParameters() {\n let { weldingProcess } = this.args;\n if (!isEmpty(weldingProcess)) {\n return get(weldingProcess, 'shortDesignation');\n }\n return '';\n }\n\n internalSearch(page = 1) {\n let query = {\n specification: this.fillerMaterialSpecification,\n classification: this.fillerMaterialClassification,\n group: this.fillerMaterialGroup,\n pageSize: this.pageSize,\n page,\n };\n\n if (!this.showAll) {\n query.process = get(this.args, 'weldingProcess');\n }\n\n if (!isEmpty(this.industryCodeId)) {\n query.industryCode = this.industryCodeId;\n }\n this.isSearching = true;\n this.data\n .searchFillerMaterialsWithQuery(query)\n .then((fillerMaterials) => {\n this.materialSearch = fillerMaterials;\n this.totalCount = fillerMaterials.meta.records;\n })\n .finally(() => {\n this.isSearching = false;\n });\n }\n\n clearFillerMaterial() {\n if (this.args.fillerMaterialRemoved) {\n this.args.fillerMaterialRemoved();\n }\n }\n\n showSaveError(error, fillerMaterial) {\n let { intl, alert } = this;\n\n if (isDuplicateError(error)) {\n let material = `${get(fillerMaterial, 'specification.specification')} - ${get(\n fillerMaterial,\n 'classification.classification'\n )}`;\n let message = intl.t('components.filler-material-chooser.duplicate-filler-material', {\n material,\n });\n alert.error(message);\n } else {\n let message = intl.t('edit-view.actions.error', {\n name: intl.t('model.filler-material.model-name'),\n });\n alert.error(message);\n }\n }\n\n hideSearch() {\n this.isShowingSearch = false;\n this.fillerMaterialSpecification = null;\n this.fillerMaterialClassification = null;\n this.fillerMaterialGroup = null;\n }\n\n saveNewFillerMaterial(specification, classification) {\n let newMaterial = this.store.createRecord('filler-material');\n let { weldingProcess } = this.args;\n\n newMaterial.set('specification', specification);\n newMaterial.set('classification', classification);\n newMaterial.set('group', get(this, 'newMaterial.group'));\n newMaterial.set('code', get(this, 'newMaterial.code'));\n // in case the industry code wasn't set, we use group industry code\n if (isEmpty(newMaterial.code) || isEmpty(newMaterial.code.id)) {\n newMaterial.set('code', get(this, 'newMaterial.group.code'));\n }\n\n if (this.isFilteringByProcess) {\n newMaterial.get('weldingProcesses').then((processes) => {\n processes.pushObject(weldingProcess);\n newMaterial\n .save()\n .then((savedMaterial) => {\n this.args.fillerMaterialChosen(savedMaterial);\n this.hideSearch();\n })\n .catch((error) => {\n this.showSaveError(error, newMaterial);\n });\n });\n } else {\n newMaterial\n .save()\n .then((savedMaterial) => {\n this.args.fillerMaterialChosen(savedMaterial);\n this.hideSearch();\n })\n .catch((error) => {\n this.showSaveError(error, newMaterial);\n });\n }\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n this.internalSearch();\n }\n\n @action\n cancel() {\n this.isShowingSearch = false;\n this.showAll = false;\n }\n\n @action\n chooseMaterial(material) {\n this.hideSearch();\n if (this.args.fillerMaterialChosen) {\n this.args.fillerMaterialChosen(material);\n this.analytics.trackEvent(EVENTS.SELECT, {\n type: 'filler-material',\n specification: get(material, 'specification.specification'),\n classification: get(material, 'classification.classification'),\n group: get(material, 'group.groupName'),\n });\n }\n }\n\n @action\n updateSpecification(value) {\n this.fillerMaterialSpecification = value;\n debounce(this, 'internalSearch', 300);\n }\n\n @action\n updateClassification(value) {\n this.fillerMaterialClassification = value;\n debounce(this, 'internalSearch', 300);\n }\n\n @action\n updateGroup(value) {\n this.fillerMaterialGroup = value;\n debounce(this, 'internalSearch', 300);\n }\n\n @action\n clear() {\n this.clearFillerMaterial();\n }\n\n @action\n search() {\n this.internalSearch();\n }\n\n @action\n reloadData(page) {\n this.internalSearch(page);\n }\n\n @action\n openCreateNew() {\n this.isShowingCreate = true;\n this.newMaterial = {\n code: this.args.industryCode,\n errors: {},\n metadata: {\n modelName: 'filler-material',\n },\n };\n }\n\n @action\n createFillerMaterial() {\n let errorOccurred = false;\n let fillerMaterial = get(this, 'newMaterial');\n if (get(fillerMaterial, 'specification.isNew') && get(fillerMaterial, 'classification.isNew')) {\n let classification = get(fillerMaterial, 'classification');\n let specification = get(fillerMaterial, 'specification');\n specification\n .save()\n .then((specificationSaved) => {\n classification\n .save()\n .then((classificationSaved) => {\n this.saveNewFillerMaterial(specificationSaved, classificationSaved);\n })\n .catch((error) => {\n this.showSaveError(error, fillerMaterial);\n });\n })\n .catch((error) => {\n this.showSaveError(error, fillerMaterial);\n });\n } else if (get(fillerMaterial, 'specification.isNew')) {\n let classification = get(fillerMaterial, 'classification');\n get(fillerMaterial, 'specification')\n .save()\n .then((specificationSaved) => {\n this.saveNewFillerMaterial(specificationSaved, classification);\n })\n .catch((error) => {\n this.showSaveError(error, fillerMaterial);\n });\n } else if (get(fillerMaterial, 'classification.isNew')) {\n let specification = get(fillerMaterial, 'specification');\n get(fillerMaterial, 'classification')\n .save()\n .then((classificationSaved) => {\n this.saveNewFillerMaterial(specification, classificationSaved);\n })\n .catch((error) => {\n this.showSaveError(error, fillerMaterial);\n });\n } else {\n this.saveNewFillerMaterial(\n get(this, 'newMaterial.specification'),\n get(this, 'newMaterial.classification')\n );\n }\n if (!errorOccurred) {\n this.isShowingCreate = false;\n }\n }\n\n @action\n searchGroup(term) {\n let industryCode = this.industryCodeId;\n return this.data.findFillerMaterialGroup(term, industryCode);\n }\n\n @action\n closeWindow() {\n this.isShowingCreate = false;\n let fillerMaterial = get(this, 'newMaterial');\n if (fillerMaterial) {\n if (get(fillerMaterial, 'specification.isNew')) {\n this.store.unloadRecord(get(fillerMaterial, 'specification'));\n }\n if (get(fillerMaterial, 'classification.isNew')) {\n this.store.unloadRecord(get(fillerMaterial, 'classification'));\n }\n }\n this.newMaterial = null;\n }\n\n @action\n searchAll() {\n this.showAll = !this.showAll;\n this.internalSearch();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value @weldingProcess.id)}}\\n \\n \\n \\n
\\n \\n

{{@weldingProcess.shortDesignation}}

\\n {{t\\n \\\"components.filler-material-chooser/creator.welding-process-help\\\"\\n }}\\n
\\n
\\n
\\n {{/if}}\\n
\\n \\n
\\n \\n \\n {{t \\\"components.filler-material-chooser/creator.create-material-btn\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value @weldingProcess.id)}}\\n \\n \\n \\n
\\n \\n

{{@weldingProcess.shortDesignation}}

\\n {{t\\n \\\"components.filler-material-chooser/creator.welding-process-help\\\"\\n }}\\n
\\n
\\n
\\n {{/if}}\\n
\\n \\n
\\n \\n \\n {{t \\\"components.filler-material-chooser/creator.create-material-btn\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/filler-material-chooser/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/filler-material-chooser/creator.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\n\nconst DEBOUNCE_MS = 300;\n\n@classic\nexport default class Creator extends Component {\n @service('weldnoteData')\n data;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n alertMessage;\n\n specificationsSearched = null;\n\n classificationsSearched = null;\n\n classificationOptions = [];\n\n specificationOptions = [];\n\n groupOptions = [];\n\n validateNewMaterial() {\n let material = get(this, 'newMaterial');\n let valid = true;\n set(material, 'errors', {});\n\n let requiredFieldMessage = this.intl.t('edit-view.attributes.required');\n\n if (isEmpty(get(material, 'specification'))) {\n set(material, 'errors.specification', [\n { message: requiredFieldMessage, attribute: 'specification' },\n ]);\n valid = false;\n }\n if (isEmpty(get(material, 'classification'))) {\n set(material, 'errors.classification', [\n { message: requiredFieldMessage, attribute: 'classification' },\n ]);\n valid = false;\n }\n if (isEmpty(get(material, 'group'))) {\n set(material, 'errors.group', [{ message: requiredFieldMessage, attribute: 'group' }]);\n valid = false;\n }\n\n if (!valid) {\n get(this, 'alertMessage').error(this.intl.t('edit-view.actions.validation-failed'));\n }\n\n return valid;\n }\n\n searchSpecification = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(DEBOUNCE_MS);\n return get(this, 'data')\n .findFillerMaterialSpecification(term)\n .then((data) => {\n set(this, 'specificationsSearched', data);\n return data;\n });\n }\n );\n\n searchClassification = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(DEBOUNCE_MS);\n return get(this, 'data')\n .findFillerMaterialClassification(term)\n .then((data) => {\n set(this, 'classificationsSearched', data);\n return data;\n });\n }\n );\n\n searchGroup = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(DEBOUNCE_MS);\n let industryCode = get(this, 'newMaterial.code.id');\n return get(this, 'data').findFillerMaterialGroup(term, industryCode);\n }\n );\n\n fetchFillerMaterialSpecifications = task(\n {\n restartable: true,\n },\n async (term) => {\n if (isEmpty(term)) {\n return [];\n }\n let specifications = await get(this, 'searchSpecification').perform(term);\n if (get(specifications, 'length') === 1) {\n set(this, 'newMaterial.specification', get(specifications, 'firstObject'));\n } else {\n set(this, 'specificationOptions', specifications);\n }\n }\n );\n\n fetchFillerMaterialClassifications = task(\n {\n restartable: true,\n },\n async (term) => {\n if (isEmpty(term)) {\n return [];\n }\n let classifications = await get(this, 'searchClassification').perform(term);\n if (get(classifications, 'length') === 1) {\n set(this, 'newMaterial.classification', get(classifications, 'firstObject'));\n } else {\n set(this, 'classificationOptions', classifications);\n }\n }\n );\n\n fetchFillerMaterialGroups = task(\n {\n restartable: true,\n },\n async (term) => {\n if (isEmpty(term)) {\n return [];\n }\n let groups = await get(this, 'searchGroup').perform(term);\n if (get(groups, 'length') === 1) {\n set(this, 'newMaterial.group', get(groups, 'firstObject'));\n } else {\n set(this, 'groupOptions', groups);\n }\n }\n );\n\n init() {\n super.init(...arguments);\n if (!isEmpty(get(this, 'searchValues.specification'))) {\n let specification = get(this, 'searchValues.specification');\n get(this, 'fetchFillerMaterialSpecifications').perform(specification);\n }\n if (!isEmpty(get(this, 'searchValues.classification'))) {\n let classification = get(this, 'searchValues.classification');\n get(this, 'fetchFillerMaterialClassifications').perform(classification);\n }\n if (!isEmpty(get(this, 'searchValues.group'))) {\n let group = get(this, 'searchValues.group');\n get(this, 'fetchFillerMaterialGroups').perform(group);\n }\n }\n\n @action\n suggestSpecification(term) {\n return this.intl.t(\n 'components.filler-material-chooser/creator.suggest-filler-material-specification',\n { specification: term }\n );\n }\n\n @action\n suggestClassification(term) {\n return this.intl.t(\n 'components.filler-material-chooser/creator.suggest-filler-material-classification',\n { classification: term }\n );\n }\n\n @action\n setSpecification(spec) {\n set(this, 'newMaterial.specification', spec);\n set(this, 'specificationsSearched', null);\n set(this, 'specificationOptions', []);\n set(this, 'searchValues.specification', null);\n }\n\n @action\n setClassification(classification) {\n set(this, 'newMaterial.classification', classification);\n set(this, 'classificationsSearched', null);\n set(this, 'classificationOptions', []);\n set(this, 'searchValues.classification', null);\n }\n\n @action\n setGroup(group) {\n set(this, 'newMaterial.group', group);\n set(this, 'groupOptions', []);\n set(this, 'searchValues.group', null);\n }\n\n @action\n createSpecification(term) {\n let specification = get(this, 'store').createRecord('filler-material-specification');\n set(specification, 'specification', term);\n set(this, 'newMaterial.specification', specification);\n }\n\n @action\n createClassification(term) {\n let classification = get(this, 'store').createRecord('filler-material-classification');\n set(classification, 'classification', term);\n set(this, 'newMaterial.classification', classification);\n }\n\n @action\n showWhenCreateSpec() {\n let specs = get(this, 'specificationsSearched');\n if (specs != null) {\n if (get(specs, 'length') === 0) {\n return true;\n }\n }\n return false;\n }\n\n @action\n showWhenCreateClassification() {\n let specs = get(this, 'classificationsSearched');\n if (specs != null) {\n if (get(specs, 'length') === 0) {\n return true;\n }\n }\n return false;\n }\n\n @action\n validateCreateMaterial() {\n if (!this.validateNewMaterial()) {\n return;\n }\n this.createMaterial();\n }\n\n @action\n openFindSpecification(publicAPI) {\n if (!isEmpty(get(this, 'searchValues.specification'))) {\n publicAPI.actions.search(get(this, 'searchValues.specification'));\n }\n }\n\n @action\n openFindClassification(publicAPI) {\n if (!isEmpty(get(this, 'searchValues.classification'))) {\n publicAPI.actions.search(get(this, 'searchValues.classification'));\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n{{#if @isEditing}}\\n
\\n {{#if this.isAWS}}\\n \\n {{else}}\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n {{/if}}\\n
\\n {{#if this.hasExternalErrors}}\\n {{#each this.errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{/if}}\\n {{#if this.hasInternalErrors}}\\n {{#if this.internalErrors.diameter1}}\\n {{#if this.isAWS}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=\\\"\\\"\\n }}\\n {{else}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=1\\n }}\\n\\n {{/if}}\\n {{/if}}\\n {{#if this.internalErrors.diameter2}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=2\\n }}\\n {{/if}}\\n {{#if this.internalErrors.diameter3}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=3\\n }}\\n {{/if}}\\n {{#if this.internalErrors.diameter4}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=4\\n }}\\n {{/if}}\\n {{#if this.internalErrors.diameter5}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=5\\n }}\\n {{/if}}\\n {{/if}}\\n {{#if (and this.hasHelpText (not this.isAWS))}}\\n {{@helpText}}\\n {{/if}}\\n{{else}}\\n

{{array-join\\n this.displayValues\\n separator=\\\"; \\\"\\n }}

\\n{{/if}}\", {\"contents\":\"
\\n \\n
\\n{{#if @isEditing}}\\n
\\n {{#if this.isAWS}}\\n \\n {{else}}\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n {{/if}}\\n
\\n {{#if this.hasExternalErrors}}\\n {{#each this.errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{/if}}\\n {{#if this.hasInternalErrors}}\\n {{#if this.internalErrors.diameter1}}\\n {{#if this.isAWS}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=\\\"\\\"\\n }}\\n {{else}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=1\\n }}\\n\\n {{/if}}\\n {{/if}}\\n {{#if this.internalErrors.diameter2}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=2\\n }}\\n {{/if}}\\n {{#if this.internalErrors.diameter3}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=3\\n }}\\n {{/if}}\\n {{#if this.internalErrors.diameter4}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=4\\n }}\\n {{/if}}\\n {{#if this.internalErrors.diameter5}}\\n {{t\\n \\\"components.filler-material-diameters.error\\\"\\n number=5\\n }}\\n {{/if}}\\n {{/if}}\\n {{#if (and this.hasHelpText (not this.isAWS))}}\\n {{@helpText}}\\n {{/if}}\\n{{else}}\\n

{{array-join\\n this.displayValues\\n separator=\\\"; \\\"\\n }}

\\n{{/if}}\",\"moduleName\":\"weldnote/components/filler-material-diameters.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/filler-material-diameters.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { or, equal, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, set, getProperties, defineProperty, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport Constants from 'weldnote/utils/constants';\nimport { toNumber, isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\n\nimport { isStandardAWSD11 } from 'weldnote/utils/standards';\n\nconst { UNIT_SYSTEM, DEFAULT_DECIMAL_SEPARATOR } = Constants;\n\n@classic\n@classNames('filler-material-diameters')\nexport default class FillerMaterialDiameters extends Component {\n diameter1 = null;\n\n diameter2 = null;\n\n diameter3 = null;\n\n diameter4 = null;\n\n diameter5 = null;\n\n diameterDisplayValue1 = null;\n\n diameterDisplayValue2 = null;\n\n diameterDisplayValue3 = null;\n\n diameterDisplayValue4 = null;\n\n diameterDisplayValue5 = null;\n\n internalErrors = null;\n\n // Parameters\n currentValues = null;\n\n separator = null;\n\n unitSystem = null;\n\n label = '';\n\n helpText = '';\n\n errors = null;\n\n // Computed\n @notEmpty('internalErrors.diameter1')\n diameter1Error;\n\n @notEmpty('internalErrors.diameter2')\n diameter2Error;\n\n @notEmpty('internalErrors.diameter3')\n diameter3Error;\n\n @notEmpty('internalErrors.diameter4')\n diameter4Error;\n\n @notEmpty('internalErrors.diameter5')\n diameter5Error;\n\n @equal('unitSystem', UNIT_SYSTEM.METRIC)\n isMetricSystem;\n\n @equal('unitSystem', UNIT_SYSTEM.IMPERIAL)\n isImperialSystem;\n\n @notEmpty('helpText')\n hasHelpText;\n\n @or('hasExternalErrors', 'hasInternalErrors')\n hasErrors;\n\n @or('diameter1Error', 'diameter2Error', 'diameter3Error', 'diameter4Error', 'diameter5Error')\n hasInternalErrors;\n\n @notEmpty('errors')\n hasExternalErrors;\n\n @computed('diameter1', 'diameter2', 'diameter3', 'diameter4', 'diameter5')\n get displayValues() {\n let result = [];\n let {\n diameterDisplayValue1,\n diameterDisplayValue2,\n diameterDisplayValue3,\n diameterDisplayValue4,\n diameterDisplayValue5,\n } = this;\n if (!isEmpty(diameterDisplayValue1)) {\n result.pushObject(diameterDisplayValue1);\n }\n if (!isEmpty(diameterDisplayValue2)) {\n result.pushObject(diameterDisplayValue2);\n }\n if (!isEmpty(diameterDisplayValue3)) {\n result.pushObject(diameterDisplayValue3);\n }\n if (!isEmpty(diameterDisplayValue4)) {\n result.pushObject(diameterDisplayValue4);\n }\n if (!isEmpty(diameterDisplayValue5)) {\n result.pushObject(diameterDisplayValue5);\n }\n\n return result;\n }\n\n @computed('standard')\n get isAWS() {\n return isStandardAWSD11(this.standard);\n }\n\n isValid(value) {\n if (isEmpty(value)) {\n return true;\n }\n return !isNaN(value);\n }\n\n _setInitialValuesFromModelToProperties() {\n let [diameter1, diameter2, diameter3, diameter4, diameter5] = this.diameters;\n if (!isEmpty(diameter1)) {\n set(this, 'diameter1', diameter1);\n }\n if (!isEmpty(diameter2)) {\n set(this, 'diameter2', diameter2);\n }\n if (!isEmpty(diameter3)) {\n set(this, 'diameter3', diameter3);\n }\n if (!isEmpty(diameter4)) {\n set(this, 'diameter4', diameter4);\n }\n if (!isEmpty(diameter5)) {\n set(this, 'diameter5', diameter5);\n }\n }\n\n _checkForInitialErrors() {\n let [diameter1, diameter2, diameter3, diameter4, diameter5] = this.diameters;\n if (!this.isValid(this.parseDiameterAsDecimal(diameter1))) {\n set(this, 'internalErrors.diameter1', true);\n }\n if (!this.isValid(this.parseDiameterAsDecimal(diameter2))) {\n set(this, 'internalErrors.diameter2', true);\n }\n if (!this.isValid(this.parseDiameterAsDecimal(diameter3))) {\n set(this, 'internalErrors.diameter3', true);\n }\n if (!this.isValid(this.parseDiameterAsDecimal(diameter4))) {\n set(this, 'internalErrors.diameter4', true);\n }\n if (!this.isValid(this.parseDiameterAsDecimal(diameter5))) {\n set(this, 'internalErrors.diameter5', true);\n }\n }\n\n _createComputedPropertiesForDisplayOfValue() {\n for (let i = 1; i <= 5; i++) {\n defineProperty(\n this,\n `diameterDisplayValue${i}`,\n computed(`diameter${i}`, function () {\n let { separator } = this;\n if (separator !== DEFAULT_DECIMAL_SEPARATOR) {\n let value = get(this, `diameter${i}`);\n if (!isEmpty(value)) {\n let valueString = `${value}`;\n valueString = valueString.replace(DEFAULT_DECIMAL_SEPARATOR, separator);\n if (this.isMetricSystem) {\n return valueString;\n } else {\n if (!isEmpty(value)) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n }\n }\n return value;\n } else {\n let value = get(this, `diameter${i}`);\n if (this.isMetricSystem) {\n return value;\n } else {\n if (!isEmpty(value)) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n }\n return value;\n }\n })\n );\n }\n }\n\n init() {\n super.init(...arguments);\n assert('Must pass a valid separator', !isEmpty(this.separator));\n assert('Must pass a unit unitSystem', !isEmpty(this.unitSystem));\n set(this, 'internalErrors', {});\n\n if (!isEmpty(this.diameters)) {\n this._setInitialValuesFromModelToProperties();\n this._checkForInitialErrors();\n }\n this._createComputedPropertiesForDisplayOfValue();\n }\n\n updateModel() {\n this.verifyValidity();\n let diameters = getProperties(\n this,\n 'diameter1',\n 'diameter2',\n 'diameter3',\n 'diameter4',\n 'diameter5'\n );\n let result = [];\n Object.keys(diameters).forEach((key) => {\n if (!isEmpty(diameters[key])) {\n // Result is stored as string, so we send things as strings\n result.pushObject(`${diameters[key]}`);\n }\n });\n this.onUpdateValue(result);\n }\n\n verifyValidity() {\n let diameters = getProperties(\n this,\n 'diameter1',\n 'diameter2',\n 'diameter3',\n 'diameter4',\n 'diameter5'\n );\n Object.keys(diameters).forEach((key, index) => {\n if (this.isValid(diameters[key])) {\n set(this, `internalErrors.diameter${index + 1}`, null);\n }\n });\n }\n\n parseDiameterAsDecimal(decimal) {\n if (isEmpty(decimal)) {\n return null;\n }\n let valueString = `${decimal}`;\n let number = valueString.replace(',', DEFAULT_DECIMAL_SEPARATOR);\n let diameter = toNumber(number);\n return diameter;\n }\n\n @action\n updateDiameter1({ target: { value } }) {\n let diameter = this.parseDiameterAsDecimal(value);\n if (!this.isValid(diameter)) {\n set(this, 'internalErrors.diameter1', true);\n set(this, 'diameter1', value);\n } else {\n set(this, 'diameter1', diameter);\n }\n this.updateModel();\n }\n\n @action\n updateDiameter2({ target: { value } }) {\n let diameter = this.parseDiameterAsDecimal(value);\n if (!this.isValid(diameter)) {\n set(this, 'internalErrors.diameter2', true);\n set(this, 'diameter2', value);\n } else {\n set(this, 'diameter2', diameter);\n }\n this.updateModel();\n }\n\n @action\n updateDiameter3({ target: { value } }) {\n let diameter = this.parseDiameterAsDecimal(value);\n if (!this.isValid(diameter)) {\n set(this, 'internalErrors.diameter3', true);\n set(this, 'diameter3', value);\n } else {\n set(this, 'diameter3', diameter);\n }\n this.updateModel();\n }\n\n @action\n updateDiameter4({ target: { value } }) {\n let diameter = this.parseDiameterAsDecimal(value);\n if (!this.isValid(diameter)) {\n set(this, 'internalErrors.diameter4', true);\n set(this, 'diameter4', value);\n } else {\n set(this, 'diameter4', diameter);\n }\n this.updateModel();\n }\n\n @action\n updateDiameter5({ target: { value } }) {\n let diameter = this.parseDiameterAsDecimal(value);\n if (!this.isValid(diameter)) {\n set(this, 'internalErrors.diameter5', true);\n set(this, 'diameter5', value);\n } else {\n set(this, 'diameter5', diameter);\n }\n this.updateModel();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n
\\n {{#if this.isAWS}}\\n

{{this.diameter1}}

\\n {{else if this.isOverlayFillerMaterialFormStrip}}\\n \\n {{option.label}}\\n \\n {{else}}\\n \\n {{option.label}}\\n \\n \\n {{option.label}}\\n \\n \\n {{option.label}}\\n \\n {{/if}}\\n
\\n{{#if this.hasExternalErrors}}\\n {{#each this.errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n{{/if}}\\n{{#if this.hasHelpText}}\\n {{@helpText}}\\n{{/if}}\", {\"contents\":\"
\\n \\n
\\n
\\n {{#if this.isAWS}}\\n

{{this.diameter1}}

\\n {{else if this.isOverlayFillerMaterialFormStrip}}\\n \\n {{option.label}}\\n \\n {{else}}\\n \\n {{option.label}}\\n \\n \\n {{option.label}}\\n \\n \\n {{option.label}}\\n \\n {{/if}}\\n
\\n{{#if this.hasExternalErrors}}\\n {{#each this.errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n{{/if}}\\n{{#if this.hasHelpText}}\\n {{@helpText}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/filler-material-welding-pass-selector.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/filler-material-welding-pass-selector.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, set, action, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport { isStandardAWSD11 } from 'weldnote/utils/standards';\n\nconst { WELDING_LAYER_OPTIONS } = Constants;\n\n@classic\n@classNames('filler-material-welding-pass-selector')\nexport default class FillerMaterialWeldingPassSelector extends Component {\n diameter1 = null;\n\n diameter2 = null;\n\n diameter3 = null;\n\n internalOptions = null;\n\n // Parameters\n diameters = null;\n\n options = null;\n\n layer = null;\n\n previousOverlayFillerMaterialForm = null;\n\n previousLayer = null;\n\n _convertOption(value) {\n if (isEmpty(value)) {\n return value;\n }\n if (this.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n\n @computed('standard')\n get isAWS() {\n return isStandardAWSD11(this.standard);\n }\n\n @computed('diameter1')\n get diameter1Value() {\n if (this.diameter1) {\n let result = this.internalOptions.findBy('key', this.diameter1);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n @computed('diameter2')\n get diameter2Value() {\n if (this.diameter2) {\n let result = this.internalOptions.findBy('key', this.diameter2);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n @computed('diameter3')\n get diameter3Value() {\n if (this.diameter3) {\n let result = this.internalOptions.findBy('key', this.diameter3);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n @computed('overlayFillerMaterialForm')\n get isOverlayFillerMaterialFormStrip() {\n let { overlayFillerMaterialForm } = this;\n return overlayFillerMaterialForm === 'STRIP';\n }\n\n _setOptions() {\n let parameterLayer = this.layer;\n let layer = null;\n if (parameterLayer === WELDING_LAYER_OPTIONS.ROOT) {\n layer = 'root';\n } else if (parameterLayer === WELDING_LAYER_OPTIONS.FILL) {\n layer = 'fill';\n } else if (parameterLayer === WELDING_LAYER_OPTIONS.CAP) {\n layer = 'cap';\n }\n let options = get(this, `options.${layer}`);\n if (!isEmpty(layer) && !isEmpty(options)) {\n let [firstOption, secondOption, thirdOption, fourthOption, fifthOption] = options;\n let firstOptionLabel = this._convertOption(firstOption);\n let secondOptionLabel = this._convertOption(secondOption);\n let thirdOptionLabel = this._convertOption(thirdOption);\n let fourthOptionLabel = this._convertOption(fourthOption);\n let fifthOptionLabel = this._convertOption(fifthOption);\n let result = [];\n if (!isEmpty(firstOption)) {\n result.pushObject({\n key: firstOption,\n label: firstOptionLabel,\n });\n }\n if (!isEmpty(secondOption)) {\n result.pushObject({\n key: secondOption,\n label: secondOptionLabel,\n });\n }\n if (!isEmpty(thirdOption)) {\n result.pushObject({\n key: thirdOption,\n label: thirdOptionLabel,\n });\n }\n if (!isEmpty(fourthOption)) {\n result.pushObject({\n key: fourthOption,\n label: fourthOptionLabel,\n });\n }\n if (!isEmpty(fifthOption)) {\n result.pushObject({\n key: fifthOption,\n label: fifthOptionLabel,\n });\n }\n if (isEmpty(result)) {\n set(this, 'internalOptions', [\n {\n key: '',\n label: 'You need to select values in the respective layer in the Consumables tab',\n },\n ]);\n } else {\n set(this, 'internalOptions', result);\n }\n }\n }\n\n _setInitialValuesFromModelToProperties() {\n if (!isEmpty(this.diameters)) {\n let [diameter1, diameter2, diameter3] = this.diameters;\n if (!isEmpty(diameter1)) {\n set(this, 'diameter1', diameter1);\n }\n if (!isEmpty(diameter2)) {\n set(this, 'diameter2', diameter2);\n }\n if (!isEmpty(diameter3)) {\n set(this, 'diameter3', diameter3);\n }\n } else {\n // Clear out all values\n set(this, 'diameter1', '');\n set(this, 'diameter2', '');\n set(this, 'diameter3', '');\n }\n this._setOptions();\n }\n\n init() {\n super.init(...arguments);\n set(this, 'internalErrors', {});\n set(this, 'internalOptions', []);\n\n if (!isEmpty(this.diameters)) {\n this._setInitialValuesFromModelToProperties();\n }\n }\n\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n let { layer, overlayFillerMaterialForm } = this;\n if (this.previousLayer !== layer) {\n set(this, 'previousLayer', layer);\n this._setInitialValuesFromModelToProperties();\n }\n if (this.previousOverlayFillerMaterialForm !== overlayFillerMaterialForm) {\n set(this, 'previousOverlayFillerMaterialForm', overlayFillerMaterialForm);\n this._setInitialValuesFromModelToProperties();\n }\n }\n\n updateModel() {\n let values = [];\n let { diameter1, diameter2, diameter3 } = this;\n if (isEmpty(diameter1)) {\n diameter1 = '';\n }\n if (isEmpty(diameter2)) {\n diameter2 = '';\n }\n if (isEmpty(diameter3)) {\n diameter3 = '';\n }\n values.pushObject(`${diameter1}`);\n values.pushObject(`${diameter2}`);\n values.pushObject(`${diameter3}`);\n this.onUpdateValue(values);\n }\n\n @action\n updateDiameter1(value) {\n if (value) {\n set(this, 'diameter1', value.key);\n } else {\n set(this, 'diameter1', null);\n }\n this.updateModel();\n }\n\n @action\n updateDiameter2(value) {\n if (value) {\n set(this, 'diameter2', value.key);\n } else {\n set(this, 'diameter2', null);\n }\n this.updateModel();\n }\n\n @action\n updateDiameter3(value) {\n if (value) {\n set(this, 'diameter3', value.key);\n } else {\n set(this, 'diameter3', null);\n }\n this.updateModel();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n
\\n
\\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"generic.buttons.search\\\"}}\\n\\n
\\n
\\n \\n {{t \\\"components.fleet-machine-selector-modal.button.open-fleet\\\"}}\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n
\\n
\\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"generic.buttons.search\\\"}}\\n\\n
\\n
\\n \\n {{t \\\"components.fleet-machine-selector-modal.button.open-fleet\\\"}}\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/fleet-machine-selector-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/fleet-machine-selector-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport WeldcloudData, { PowerSource } from 'weldnote/services/weldcloud-data';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout } from 'ember-concurrency';\nimport IntlService from 'ember-intl/services/intl';\nimport WeldcloudService from 'weldnote/services/weldcloud';\n\ninterface FleetMachineSelectorArgs {\n onSelectMachine: any;\n}\n\nexport default class FleetMachineSelector extends Component {\n @service('weldcloud-data')\n declare weldCloudData: WeldcloudData;\n\n @service\n declare weldcloud: WeldcloudService;\n\n @service\n declare intl: IntlService;\n\n @tracked\n currentPage = 1;\n\n @tracked\n isLoading: boolean = false;\n\n @tracked\n powerSourceFilter!: string;\n\n @tracked\n totalSources!: number;\n\n @tracked\n powerSources!: PowerSource[];\n\n get fleetLink() {\n return this.weldcloud.getFleetMachinesLink();\n }\n\n get gridColumns() {\n return [\n {\n valuePath: 'displayName',\n cellComponent: 'fleet-machine-selector/machine-select',\n label: this.intl.t('components.fleet-machine-selector-modal.label'),\n sortable: false,\n },\n ];\n }\n\n constructor(owner: unknown, args: FleetMachineSelectorArgs) {\n super(owner, args);\n this.loadData.perform();\n }\n\n loadData = task(this, { drop: true }, async () => {\n await timeout(250);\n let result = await this.weldCloudData.queryMachines(this.powerSourceFilter, this.currentPage);\n this.powerSources = result.list;\n this.totalSources = result.total;\n return result;\n });\n\n @action\n search(newPage = 1) {\n this.currentPage = newPage;\n this.loadData.perform();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if @isEditing}}\\n
\\n \\n
\\n {{#if this.showRemoteUnitLink}}\\n \\n {{@remoteWeldingUnitDisplayName}}\\n \\n {{else}}\\n \\n {{@remoteWeldingUnitDisplayName}}\\n \\n {{/if}}\\n
\\n \\n \\n
\\n
\\n
\\n {{else}}\\n
\\n \\n

{{@remoteUnitDisplayLabel}}

\\n
\\n {{/if}}\\n\\n {{#if this.isShowingSearch}}\\n \\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if @isEditing}}\\n
\\n \\n
\\n {{#if this.showRemoteUnitLink}}\\n \\n {{@remoteWeldingUnitDisplayName}}\\n \\n {{else}}\\n \\n {{@remoteWeldingUnitDisplayName}}\\n \\n {{/if}}\\n
\\n \\n \\n
\\n
\\n
\\n {{else}}\\n
\\n \\n

{{@remoteUnitDisplayLabel}}

\\n
\\n {{/if}}\\n\\n {{#if this.isShowingSearch}}\\n \\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/fleet-machine-selector.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/fleet-machine-selector.hbs\"}});\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport WeldcloudService from 'weldnote/services/weldcloud';\n\ninterface FleetMachineSelectorArgs {\n remoteUnitDisplayLabel: string;\n remoteWeldingUnitId: string;\n label: string;\n onSelectMachine: ({ id, displayName }: { id: string; displayName: string }) => void;\n}\n\nexport default class FleetMachineSelector extends Component {\n @service\n declare weldcloud: WeldcloudService;\n\n @tracked\n isShowingSearch: boolean = false;\n\n constructor(owner: unknown, args: FleetMachineSelectorArgs) {\n super(owner, args);\n }\n\n get showRemoteUnitLink(): boolean {\n return !isEmpty(this.args.remoteWeldingUnitId);\n }\n\n get remoteUnitLink() {\n let {\n args: { remoteWeldingUnitId },\n } = this;\n if (remoteWeldingUnitId && !isEmpty(remoteWeldingUnitId)) {\n return this.weldcloud.generateFleetMachineLink(remoteWeldingUnitId);\n }\n return '';\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n }\n\n @action\n onSelectMachine({ id, displayName }: { id: string; displayName: string }) {\n this.hideSearch();\n this.args.onSelectMachine({\n id,\n displayName,\n });\n }\n\n @action\n hideSearch() {\n this.isShowingSearch = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{#if (has-value @flux.id)}}\\n {{@flux.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{#if (has-value @flux.id)}}\\n {{@flux.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n{{else}}\\n
\\n \\n

\\n {{#if (not (is-empty-attribute @flux.id))}}\\n {{@flux.visualLabel}}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.flux-chooser.close-btn\\\"}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#unless this.hasSearchValues}}\\n {{#each this.suggestions as |fluxInstance|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n {{/unless}}\\n {{#each this.searchResults as |fluxInstance|}}\\n {{#if (eq @flux.id fluxInstance.id)}}\\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.flux-chooser.flux\\\"}}{{t \\\"components.flux-chooser.specification\\\"}}
\\n \\n \\n
\\n \\n {{t \\\"components.flux-chooser.loading-results\\\"}}\\n
{{fluxInstance.flux}}{{fluxInstance.specification.specification}}
{{fluxInstance.flux}}{{fluxInstance.specification.specification}}
{{fluxInstance.flux}}{{fluxInstance.specification.specification}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.flux-chooser.no-results\\\"}}\\n {{/if}}\\n {{#if @canCreateNew}}\\n {{t\\n \\\"components.flux-chooser.add-new\\\"\\n }}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.searchResultsCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n{{/if}}\\n\\n{{#if this.isShowingCreate}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{#if (has-value @flux.id)}}\\n {{@flux.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{#if (has-value @flux.id)}}\\n {{@flux.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n{{else}}\\n
\\n \\n

\\n {{#if (not (is-empty-attribute @flux.id))}}\\n {{@flux.visualLabel}}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.flux-chooser.close-btn\\\"}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#unless this.hasSearchValues}}\\n {{#each this.suggestions as |fluxInstance|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n {{/unless}}\\n {{#each this.searchResults as |fluxInstance|}}\\n {{#if (eq @flux.id fluxInstance.id)}}\\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.flux-chooser.flux\\\"}}{{t \\\"components.flux-chooser.specification\\\"}}
\\n \\n \\n
\\n \\n {{t \\\"components.flux-chooser.loading-results\\\"}}\\n
{{fluxInstance.flux}}{{fluxInstance.specification.specification}}
{{fluxInstance.flux}}{{fluxInstance.specification.specification}}
{{fluxInstance.flux}}{{fluxInstance.specification.specification}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.flux-chooser.no-results\\\"}}\\n {{/if}}\\n {{#if @canCreateNew}}\\n {{t\\n \\\"components.flux-chooser.add-new\\\"\\n }}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.searchResultsCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n{{/if}}\\n\\n{{#if this.isShowingCreate}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/flux-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/flux-chooser.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action, computed } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout } from 'ember-concurrency';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\n\nconst DEBOUNCE_MS = 300;\n\nexport default class FluxChooser extends Component {\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service('alertMessage')\n alert;\n\n @service\n store;\n\n @service\n loading;\n\n @tracked\n currentPage = 1;\n\n pageSize = 10;\n\n @tracked\n isShowingSearch = false;\n\n @tracked\n temporaryNewFlux = null;\n\n @tracked\n isShowingCreate = false;\n\n // Properties to store the search queries for the various parts of\n // the flux\n @tracked\n fluxSpecification = '';\n\n @tracked\n fluxFlux = '';\n\n get canCreateNew() {\n return this.args.canCreateNew ?? false;\n }\n\n get labelValue() {\n return this.args.label ?? this.intl.t('model.flux-commercial-designation.flux.label');\n }\n\n get hasSearchValues() {\n return !isEmpty(this.fluxSpecification) || !isEmpty(this.fluxFlux);\n }\n\n @computed('search.lastSuccessful.value')\n get noSearchResults() {\n return this.searchResults?.length === 0 && this.hasSearchValues;\n }\n\n @computed('search.lastSuccessful.value')\n get searchResults() {\n return this.search.lastSuccessful?.value;\n }\n\n @computed('search.lastSuccessful.value')\n get searchResultsCount() {\n return this.search.lastSuccessful?.value?.meta?.records;\n }\n\n search = task(\n {\n restartable: true,\n },\n async (page = 1, debounce = DEBOUNCE_MS) => {\n await timeout(debounce);\n let query = {\n specification: this.fluxSpecification,\n flux: this.fluxFlux,\n pageSize: this.pageSize,\n page,\n };\n return await this.data.searchFluxesWithQuery(query);\n }\n );\n\n showSaveError() {\n this.alert.error(\n this.intl.t('edit-view.actions.error', { name: this.intl.t('model.flux.model-name') })\n );\n }\n\n hideSearch() {\n this.isShowingSearch = false;\n this.fluxSpecification = null;\n this.fluxFlux = null;\n }\n\n closeCreateWindow() {\n this.isShowingCreate = false;\n let flux = this.temporaryNewFlux;\n if (!isEmpty(flux)) {\n flux.destroy();\n }\n this.temporaryNewFlux = null;\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n this.search.perform();\n }\n\n @action\n cancelSearch() {\n this.isShowingSearch = false;\n }\n\n @action\n chooseFlux(flux) {\n this.hideSearch();\n this.args.fluxChosen(flux);\n }\n\n @action\n updateSpecification(value) {\n this.fluxSpecification = value;\n this.search.perform();\n }\n\n @action\n updateFlux(value) {\n this.fluxFlux = value;\n this.search.perform();\n }\n\n @action\n reloadData(page) {\n let debounceMs = 0;\n this.search.perform(page, debounceMs);\n }\n\n @action\n openCreateNew() {\n this.isShowingCreate = true;\n\n let fluxSpecifications = this.data.fluxSpecificationOptions;\n let newSpecification = this.fluxSpecification;\n let foundSpecification = null;\n foundSpecification = fluxSpecifications.find((item) => {\n let currentSpec = item.specification;\n if (!isEmpty(currentSpec) && !isEmpty(newSpecification)) {\n if (currentSpec.toUpperCase() === newSpecification.toUpperCase()) {\n return true;\n }\n }\n return false;\n });\n\n let flux = this.store.createRecord('flux');\n flux.set('specification', foundSpecification);\n flux.set('flux', this.fluxFlux);\n flux.set('code', this.args.industryCode);\n\n this.temporaryNewFlux = flux;\n }\n\n @action\n createFlux(flux) {\n let { store, alert, intl, loading } = this;\n let newFlux = store.createRecord('flux');\n\n newFlux.set('specification', flux.specification);\n newFlux.set('flux', flux.flux);\n newFlux.set('code', flux.code);\n\n loading.block();\n newFlux\n .save()\n .then((savedFlux) => {\n this.args.fluxChosen(savedFlux);\n this.hideSearch();\n this.closeCreateWindow();\n alert.success(intl.t('components.flux-chooser.saved-success', { flux: savedFlux.flux }));\n })\n .catch((e) => {\n if (isDuplicateError(e)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n this.showSaveError();\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n closeWindow() {\n this.closeCreateWindow();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/flux-chooser/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/flux-chooser/creator.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport IntlService from 'ember-intl/services/intl';\nimport AlertMessageService from 'weldnote/services/alert-message';\nimport Flux from 'weldnote/models/flux';\n\ninterface FluxChooserCreatorArgs {\n newFlux?: Flux;\n cancelCreate?: () => void;\n createFlux: (flux: Flux) => void;\n searchValues?: any;\n}\n\nexport default class FluxChooserCreator extends Component {\n @service declare intl: IntlService;\n @service('weldnote-data') declare data: any;\n @service declare alertMessage: AlertMessageService;\n\n @action\n validateCreateFlux() {\n const { newFlux } = this.args;\n if (newFlux &&!newFlux.validate()) {\n this.alertMessage.error(\n this.intl.t('components.flux-chooser/creator.error-message')\n );\n } else {\n if (newFlux) {\n this.args.createFlux(newFlux);\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#each @content as |gas|}}{{gas.symbol}}{{#if (not-eq @content.lastObject gas)}}, {{/if}}{{/each}}\", {\"contents\":\"{{#each @content as |gas|}}{{gas.symbol}}{{#if (not-eq @content.lastObject gas)}}, {{/if}}{{/each}}\",\"moduleName\":\"weldnote/components/gas-approval-range-display.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/gas-approval-range-display.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{#if (has-value @gas.id)}}\\n {{@gas.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{#if (has-value @gas.id)}}\\n {{@gas.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n{{else}}\\n
\\n \\n

\\n {{#if (not (is-empty-attribute @gas.id))}}\\n {{@gas.visualLabel}}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.gas-chooser.close-btn\\\"}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#unless this.hasSearchValues}}\\n {{#each @suggestions as |gasInstance|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n {{/unless}}\\n {{#each this.searchResults as |gasInstance index|}}\\n {{#if (eq @gas.id gasInstance.id)}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.gas-chooser.symbol\\\"}}{{t \\\"components.gas-chooser.composition\\\"}}{{t \\\"components.gas-chooser.specification\\\"}}
\\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.gas-chooser.loading-results\\\"}}\\n
{{gasInstance.symbol}}{{gasInstance.composition}}{{gasInstance.specification.specification}}
{{gasInstance.symbol}}{{gasInstance.composition}}{{gasInstance.specification.specification}}
{{gasInstance.symbol}}{{gasInstance.composition}}{{gasInstance.specification.specification}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.gas-chooser.no-results\\\"}}\\n {{#if this.canCreateNew}}\\n {{t\\n \\\"components.gas-chooser.add-new\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.searchResultsCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n{{/if}}\\n\\n{{#if this.isShowingCreate}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{#if (has-value @gas.id)}}\\n {{@gas.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{#if (has-value @gas.id)}}\\n {{@gas.visualLabel}}\\n {{else}}\\n {{@placeholder}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n{{else}}\\n
\\n \\n

\\n {{#if (not (is-empty-attribute @gas.id))}}\\n {{@gas.visualLabel}}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n
\\n
\\n {{t \\\"components.gas-chooser.close-btn\\\"}}\\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#unless this.hasSearchValues}}\\n {{#each @suggestions as |gasInstance|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n {{/unless}}\\n {{#each this.searchResults as |gasInstance index|}}\\n {{#if (eq @gas.id gasInstance.id)}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.gas-chooser.symbol\\\"}}{{t \\\"components.gas-chooser.composition\\\"}}{{t \\\"components.gas-chooser.specification\\\"}}
\\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.gas-chooser.loading-results\\\"}}\\n
{{gasInstance.symbol}}{{gasInstance.composition}}{{gasInstance.specification.specification}}
{{gasInstance.symbol}}{{gasInstance.composition}}{{gasInstance.specification.specification}}
{{gasInstance.symbol}}{{gasInstance.composition}}{{gasInstance.specification.specification}}
\\n {{#if this.noSearchResults}}\\n {{t \\\"components.gas-chooser.no-results\\\"}}\\n {{#if this.canCreateNew}}\\n {{t\\n \\\"components.gas-chooser.add-new\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{#if (gt this.searchResultsCount 0)}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n{{/if}}\\n\\n{{#if this.isShowingCreate}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/gas-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/gas-chooser.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action, get, computed } from '@ember/object';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout } from 'ember-concurrency';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\n\nconst DEBOUNCE_MS = 300;\n\nexport default class GasChooser extends Component {\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service\n analytics;\n\n @service\n store;\n\n @service('alertMessage')\n alert;\n\n @service\n loading;\n\n @tracked\n currentPage = 1;\n\n pageSize = 10;\n\n @tracked\n isShowingSearch = false;\n\n @tracked\n newGas = null;\n\n @tracked\n isShowingCreate = false;\n\n // Properties to store the search queries for the various parts of\n // the gas\n @tracked\n gasSpecification = '';\n\n @tracked\n gasComposition = '';\n\n @tracked\n gasSymbol = '';\n\n get canCreateNew() {\n return this.args.canCreateNew ?? false;\n }\n\n get labelValue() {\n return this.args.label ?? this.intl.t('model.gas-commercial-designation.gas.label');\n }\n\n get hasSearchValues() {\n return (\n !isEmpty(this.gasSpecification) || !isEmpty(this.gasComposition) || !isEmpty(this.gasSymbol)\n );\n }\n\n @computed('search.lastSuccessful.value')\n get noSearchResults() {\n return this.searchResults?.length === 0 && this.hasSearchValues;\n }\n\n @computed('search.lastSuccessful.value')\n get searchResults() {\n return this.search.lastSuccessful?.value;\n }\n\n @computed('search.lastSuccessful.value')\n get searchResultsCount() {\n return this.search.lastSuccessful?.value?.meta?.records;\n }\n\n search = task(\n {\n restartable: true,\n },\n async (page = 1, debounce = DEBOUNCE_MS) => {\n await timeout(debounce);\n let query = {\n specification: this.gasSpecification,\n composition: this.gasComposition,\n symbol: this.gasSymbol,\n pageSize: this.pageSize,\n page,\n };\n return await this.data.searchGasesWithQuery(query);\n }\n );\n\n showSaveError() {\n let name = `${this.intl.t('model.gas.model-name')} ${get(this.args.gas, 'visualLabel')}`;\n this.alert.error(this.intl.t('edit-view.actions.error', { name }));\n }\n\n hideSearch() {\n this.isShowingSearch = false;\n this.gasSpecification = null;\n this.gasComposition = null;\n this.gasSymbol = null;\n }\n\n saveNewGas(symbol, composition, specification) {\n let newGas = this.store.createRecord('gas');\n newGas.set('symbol', symbol);\n newGas.set('composition', composition);\n newGas.set('specification', specification);\n newGas.set('code', this.args.industryCode);\n this.loading.block();\n newGas\n .save()\n .then((savedGas) => {\n this.args.gasChosen(savedGas);\n this.hideSearch();\n this.closeCreateWindow();\n let name = `${this.intl.t('model.gas.model-name')} ${savedGas.visualLabel}`;\n this.alert.success(this.intl.t('edit-view.actions.saved', { name }));\n })\n .catch((e) => {\n if (isDuplicateError(e)) {\n this.alert.error(this.intl.t('edit-view.actions.unique-violation'));\n } else {\n this.showSaveError();\n }\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n closeCreateWindow() {\n this.isShowingCreate = false;\n this.newGas = null;\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n this.search.perform();\n }\n\n @action\n cancelSearch() {\n this.isShowingSearch = false;\n }\n\n @action\n chooseGas(gas) {\n this.hideSearch();\n this.args.gasChosen(gas);\n\n this.analytics.trackEvent(EVENTS.SELECT, {\n type: 'gas',\n symbol: gas.get('symbol'),\n composition: gas.get('composition'),\n });\n }\n\n @action\n updateSpecification(value) {\n this.gasSpecification = value;\n this.search.perform();\n }\n\n @action\n updateComposition(value) {\n this.gasComposition = value;\n this.search.perform();\n }\n\n @action\n updateSymbol(value) {\n this.gasSymbol = value;\n this.search.perform();\n }\n\n @action\n reloadData(page) {\n let debounceMs = 0;\n this.search.perform(page, debounceMs);\n }\n\n @action\n openCreateNew() {\n this.isShowingCreate = true;\n\n this.newGas = {\n code: this.args.industryCode,\n symbol: this.gasSymbol,\n composition: this.gasComposition,\n errors: {},\n metadata: {\n modelName: 'gas',\n },\n };\n }\n\n @action\n createGas() {\n let gas = this.newGas;\n let { specification, symbol, composition } = gas;\n this.saveNewGas(symbol, composition, specification);\n }\n\n @action\n closeWindow() {\n this.closeCreateWindow();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/gas-chooser/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/gas-chooser/creator.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set, get } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class Creator extends Component {\n @service\n intl;\n\n @service\n alertMessage;\n\n @service('weldnoteData')\n data;\n\n validateGas() {\n let gas = this.newGas;\n let valid = true;\n set(gas, 'errors', {});\n\n let requiredFieldMessage = this.intl.t('edit-view.attributes.required');\n\n if (isEmpty(get(gas, 'specification'))) {\n set(gas, 'errors.specification', [\n { message: requiredFieldMessage, attribute: 'specification' },\n ]);\n valid = false;\n }\n if (isEmpty(get(gas, 'symbol'))) {\n set(gas, 'errors.symbol', [{ message: requiredFieldMessage, attribute: 'symbol' }]);\n valid = false;\n }\n if (isEmpty(get(gas, 'composition'))) {\n set(gas, 'errors.composition', [{ message: requiredFieldMessage, attribute: 'composition' }]);\n valid = false;\n }\n\n if (!valid) {\n this.alertMessage.error(this.intl.t('edit-view.actions.validation-failed'));\n }\n\n return valid;\n }\n\n @action\n setComposition(composition) {\n set(this, 'newGas.composition', composition);\n }\n\n @action\n validateCreateGas() {\n if (!this.validateGas()) {\n return;\n }\n this.createGas();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n \\n
\\n {{#if this.hasError}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{/if}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n\", {\"contents\":\"\\n \\n
\\n \\n
\\n {{#if this.hasError}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{/if}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/generic-boolean.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-boolean.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class GenericBoolean extends Component {\n get hasTooltip() {\n return !isEmpty(this.args.tooltipText);\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get isChecked() {\n return this.args.value === true;\n }\n\n get hasError() {\n return !isEmpty(this.args.errors);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n {{#if this.hasError}}\\n {{#each @errors as |error|}}\\n {{error}}\\n {{/each}}\\n {{else}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n \\n {{#if this.hasError}}\\n {{#each @errors as |error|}}\\n {{error}}\\n {{/each}}\\n {{else}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/generic-date-field.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-date-field.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\n\nconst { DEFAULT_DATE_FORMAT } = Constants;\n\nexport default class GenericDateField extends Component {\n get hasError() {\n return !isEmpty(this.args.errors);\n }\n\n get isRequired() {\n return this.args.required === true;\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get format() {\n if (!isEmpty(this.args.dateFormat)) {\n return this.args.dateFormat;\n }\n return DEFAULT_DATE_FORMAT;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{@label}}\\n {{#if @isRequired}}*{{/if}}\\n \\n {{/if}}\\n \\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#if this.hasWarning}}\\n \\n
\\n
\\n
\\n
\\n
\\n {{@warningText}}\\n
\\n
\\n
\\n \\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if this.isMetricSystem}}\\n {{this.decimalValue}}\\n {{else}}\\n {{this.fractionValue}}\\n {{/if}}\\n

\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{@label}}\\n {{#if @isRequired}}*{{/if}}\\n \\n {{/if}}\\n \\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#if this.hasWarning}}\\n \\n
\\n
\\n
\\n
\\n
\\n {{@warningText}}\\n
\\n
\\n
\\n \\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if this.isMetricSystem}}\\n {{this.decimalValue}}\\n {{else}}\\n {{this.fractionValue}}\\n {{/if}}\\n

\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/generic-distance-field.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-distance-field.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport {\n toNumber,\n isKnownFractionString,\n isFraction,\n toFraction,\n} from 'weldnote/utils/unit-system/units';\nimport { htmlSafe } from '@ember/template';\nimport UserSessionService from 'weldnote/services/user-session';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport { IntlService } from 'ember-intl';\n\nconst { UNITS } = Constants;\n\ninterface GenericDistanceFieldArgs {\n unitSystem: string;\n helpText: string;\n renderLabel: boolean;\n warningText: string;\n label: string;\n isEditing: boolean;\n onUpdateValue: (value: number | null) => void;\n value: number;\n errors: string[];\n}\n\n\nexport default class GenericDistanceField extends Component {\n @service\n declare userSession: UserSessionService;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @service\n declare intl: IntlService;\n\n get separator() {\n return this.userSession.decimalSeparator;\n }\n\n get isMetricSystem() {\n if (this.args.unitSystem) {\n return this.units.isMetricSystem(this.args.unitSystem);\n }\n return this.userSession.isMetricSystem;\n }\n\n get isImperialSystem() {\n if (this.args.unitSystem) {\n return this.units.isImperialSystem(this.args.unitSystem);\n }\n return this.userSession.isImperialSystem;\n }\n\n get hasErrors() {\n let errors = this.args.errors;\n if (errors && errors.length) {\n return errors.length > 0;\n }\n return false;\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get renderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get hasWarning() {\n return !isEmpty(this.args.warningText);\n }\n\n get decimalValue() {\n let { separator } = this;\n if (separator !== '.') {\n let { value } = this.args;\n if (!isEmpty(value)) {\n let valueString = `${value}`;\n valueString = valueString.replace('.', separator);\n return valueString;\n }\n return value;\n } else {\n let value = this.args.value;\n return value;\n }\n }\n\n get imperialValue() {\n let { decimalValue } = this;\n if (!isEmpty(decimalValue)) {\n let fraction = toFraction(decimalValue);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return decimalValue;\n }\n\n get fractionValue() {\n if (isFraction(this.imperialValue)) {\n let fractionValue = toFraction(this.decimalValue, 'display');\n if (fractionValue) {\n return htmlSafe(fractionValue);\n }\n return '';\n }\n let { imperialValue } = this;\n if (isEmpty(imperialValue)) {\n return '';\n } else {\n return htmlSafe(`${this.imperialValue}` );\n }\n }\n\n getUnitLabel() {\n if (this.isMetricSystem) {\n return UNITS.MILLIMETER;\n } else if (this.isImperialSystem) {\n return UNITS.INCH;\n }\n return UNITS.MILLIMETER;\n }\n\n @action\n updateValue(value: number) {\n if (this.isMetricSystem) {\n let newValue = toNumber(value, this.separator);\n if (!isNaN(newValue)) {\n this.args.onUpdateValue(newValue);\n } else if (isEmpty(value)) {\n this.args.onUpdateValue(null);\n }\n } else if (this.isImperialSystem) {\n let serializedValue;\n if (isEmpty(value)) {\n serializedValue = null;\n } else {\n serializedValue = `${value}`;\n }\n let newValue = toNumber(serializedValue, this.separator);\n if (!isNaN(newValue)) {\n this.args.onUpdateValue(newValue);\n } else if (isEmpty(value)) {\n this.args.onUpdateValue(null);\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n {{#if (has-value @label)}}\\n \\n {{/if}}\\n\\n \\n {{option.commercialDesignation}}\\n \\n
\\n
\", {\"contents\":\"\\n
\\n {{#if (has-value @label)}}\\n \\n {{/if}}\\n\\n \\n {{option.commercialDesignation}}\\n \\n
\\n
\",\"moduleName\":\"weldnote/components/generic-filler-material-commercial-designation.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-filler-material-commercial-designation.hbs\"}});\nimport Component from '@glimmer/component';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\nexport default class GenericFillerMaterialCommercialDesignationComponent extends Component {\n @service\n weldnoteData;\n\n @tracked\n options;\n\n currentOptionsFillerMaterialId;\n\n searchCommercialDesignations = task(\n {\n restartable: true,\n },\n async (term, debounceMs) => {\n if (isNaN(debounceMs)) {\n debounceMs = 250;\n }\n await timeout(debounceMs);\n\n let options = {};\n let filters = {\n commercialDesignation: term,\n fillerMaterialId: get(this.args, 'fillerMaterial.id'),\n industryCodeId: get(this.args, 'industryCode.id'),\n };\n\n return await this.weldnoteData.listAllFillerMaterialCommercialDesignations(options, filters);\n }\n );\n\n @action\n setInitialOptions() {\n let fillerMaterialId = get(this.args, 'fillerMaterial.id'); // can be a proxy, so we must access using 'get'\n if (isEmpty(this.options) || this.currentOptionsFillerMaterialId !== fillerMaterialId) {\n this.options = this.searchCommercialDesignations.perform(null, 0);\n this.currentOptionsFillerMaterialId = fillerMaterialId;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @select.results.length this.maxPageSize)}}\\n \\n{{/if}}\\n\\n{{#if (has-value @fillerMaterial)}}\\n \\n {{t\\n \\\"components.model-filler-material-commercial-designation/creator.filtered-results\\\"\\n fillerMaterial=@fillerMaterial.visualLabel\\n }}\\n \\n{{/if}}\", {\"contents\":\"{{#if (eq @select.results.length this.maxPageSize)}}\\n \\n{{/if}}\\n\\n{{#if (has-value @fillerMaterial)}}\\n \\n {{t\\n \\\"components.model-filler-material-commercial-designation/creator.filtered-results\\\"\\n fillerMaterial=@fillerMaterial.visualLabel\\n }}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/generic-filler-material-commercial-designation/after-options.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-filler-material-commercial-designation/after-options.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nexport default class GenericFillerMaterialCommercialDesignationAfterOptionsComponent extends Component {\n @service\n weldnoteData;\n\n get maxPageSize() {\n return this.weldnoteData.pageSize;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n {{#if (has-value @label)}}\\n \\n {{/if}}\\n\\n \\n {{option.commercialDesignation}}\\n \\n
\\n
\", {\"contents\":\"\\n
\\n {{#if (has-value @label)}}\\n \\n {{/if}}\\n\\n \\n {{option.commercialDesignation}}\\n \\n
\\n
\",\"moduleName\":\"weldnote/components/generic-flux-commercial-designation.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-flux-commercial-designation.hbs\"}});\nimport Component from '@glimmer/component';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\nexport default class GenericFluxCommercialDesignationComponent extends Component {\n @service\n weldnoteData;\n\n @tracked\n options;\n\n currentOptionsFluxId;\n\n searchCommercialDesignations = task(\n {\n restartable: true,\n },\n async (term, debounceMs) => {\n if (isNaN(debounceMs)) {\n debounceMs = 250;\n }\n await timeout(debounceMs);\n\n let options = {};\n let filters = {\n commercialDesignation: term,\n flux: get(this.args, 'flux.id'),\n };\n\n return await this.weldnoteData.listAllFluxCommercialDesignations(options, filters);\n }\n );\n\n @action\n setInitialOptions() {\n let fluxId = get(this.args, 'flux.id');\n if (isEmpty(this.options) || this.currentOptionsFluxId !== fluxId) {\n this.options = this.searchCommercialDesignations.perform(null, 0);\n this.currentOptionsFluxId = fluxId;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n {{#if (has-value @label)}}\\n \\n {{/if}}\\n\\n \\n {{option.commercialDesignation}}\\n \\n
\\n
\", {\"contents\":\"\\n
\\n {{#if (has-value @label)}}\\n \\n {{/if}}\\n\\n \\n {{option.commercialDesignation}}\\n \\n
\\n
\",\"moduleName\":\"weldnote/components/generic-gas-commercial-designation.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-gas-commercial-designation.hbs\"}});\nimport Component from '@glimmer/component';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport { action, get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\nexport default class GenericGasCommercialDesignationComponent extends Component {\n @service\n weldnoteData;\n\n @tracked\n options;\n\n currentOptionsGasId;\n\n searchCommercialDesignations = task(\n {\n restartable: true,\n },\n async (term, debounceMs) => {\n if (isNaN(debounceMs)) {\n debounceMs = 250;\n }\n await timeout(debounceMs);\n\n let options = {};\n let filters = {\n commercialDesignation: term,\n gas: get(this.args, 'gas.id'),\n };\n\n return await this.weldnoteData.listAllGasCommercialDesignations(options, filters);\n }\n );\n\n @action\n setInitialOptions() {\n let gasId = get(this.args, 'gas.id');\n if (isEmpty(this.options) || this.currentOptionsGasId !== gasId) {\n this.options = this.searchCommercialDesignations.perform(null, 0);\n this.currentOptionsGasId = gasId;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.shouldRenderLabel}}\\n \\n {{/if}}\\n \\n {{yield option}}\\n \\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#if this.hasErrors}}\\n {{#each @errors as |error|}}\\n {{#if (has-value error.message)}}\\n {{error.message}}\\n {{else if (has-value error)}}\\n {{error}}\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if this.shouldRenderLabel}}\\n \\n {{/if}}\\n \\n {{yield option}}\\n \\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#if this.hasErrors}}\\n {{#each @errors as |error|}}\\n {{#if (has-value error.message)}}\\n {{error.message}}\\n {{else if (has-value error)}}\\n {{error}}\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/generic-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-lov.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class GenericLov extends Component {\n get shouldRenderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get allowClearOption() {\n return this.args.allowClear ?? true;\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get hasErrors() {\n return !isEmpty(this.args.errors);\n }\n\n get isSearchEnabled() {\n return this.args.searchEnabled ?? true;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n {{yield option}}\\n \\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n \\n {{yield option}}\\n \\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/generic-multi-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-multi-lov.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { setDiff } from 'weldnote/utils/ember-computed-as-functions';\n\nexport default class GenericMultiLov extends Component {\n get searchEnabled() {\n return this.args.searchEnabled ?? false;\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get availableOptions() {\n return setDiff(this.args.options, this.args.selected);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n \\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/generic-numeric-field.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-numeric-field.hbs\"}});\nimport Component from '@glimmer/component';\nimport { set, get, action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\n\nconst ENTER_KEY = 13;\n\nexport default class GenericNumericField extends Component {\n\n get required() {\n return this.args.required || false;\n }\n\n get hasErrors() {\n return !isEmpty(this.args.errors);\n }\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get isRequired() {\n return this.required;\n }\n\n get minimum() {\n return this.args.minimum || undefined;\n }\n\n get hasTooltip() {\n return !isEmpty(this.args.tooltipText);\n }\n\n @action\n onKeyDown(event) {\n if (this.args.onEnter) {\n let { keyCode } = event;\n let {\n target: { value },\n } = event;\n if (value) {\n if (keyCode === ENTER_KEY) {\n this.args.onEnter(value);\n }\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n {{yield option}}\\n \\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{#if this.hasErrors}}\\n {{#each this.errors as |error|}}\\n {{#if (has-value error.message)}}\\n {{error.message}}\\n {{else if (has-value error)}}\\n {{error}}\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n \\n {{yield option}}\\n \\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{#if this.hasErrors}}\\n {{#each this.errors as |error|}}\\n {{#if (has-value error.message)}}\\n {{error.message}}\\n {{else if (has-value error)}}\\n {{error}}\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/generic-search-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-search-lov.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { notEmpty, equal } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class GenericSearchLov extends Component {\n helpText = '';\n\n errors = null;\n\n required = false;\n\n @notEmpty('helpText')\n hasHelp;\n\n @notEmpty('errors')\n hasErrors;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n {{#each @errors as |error|}}\\n {{#if (has-value error.message)}}\\n {{error.message}}\\n {{else if (has-value error)}}\\n {{error}}\\n {{/if}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n\", {\"contents\":\"\\n \\n \\n {{#each @errors as |error|}}\\n {{#if (has-value error.message)}}\\n {{error.message}}\\n {{else if (has-value error)}}\\n {{error}}\\n {{/if}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/generic-text-field.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-text-field.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, computed } from '@ember/object';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nconst ENTER_KEY = 13;\n\n@classic\nexport default class GenericTextField extends Component {\n isRequired = false;\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get fieldType() {\n return this.args.type ?? 'text';\n }\n\n @action\n onBlur() {\n if (this.args.onBlur) {\n this.args.onBlur();\n }\n // default no-op action\n }\n\n @action\n onUpdateValue({ target }) {\n let { value } = target;\n if (this.args.onUpdateValue) {\n this.args.onUpdateValue(value);\n }\n }\n\n @action\n onKeyDown(event) {\n if (this.args.onEnter) {\n let { keyCode } = event;\n let {\n target: { value },\n } = event;\n if (value || this.args.allowEnterOnEmptyValue) {\n if (keyCode === ENTER_KEY) {\n this.args.onEnter(value);\n }\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n

{{@value}}

\\n
\", {\"contents\":\"
\\n \\n

{{@value}}

\\n
\",\"moduleName\":\"weldnote/components/generic-value-with-label.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/generic-value-with-label.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.hasTitle}}\\n \\n
\\n {{this.title}}\\n {{#if this.hasTitleSmall}}\\n {{this.titleSmall}}\\n {{/if}}\\n
\\n {{#if this.collapsible}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n \\n {{yield}}\\n \\n {{#if this.hasFooter}}\\n
\\n {{this.footer}}\\n
\\n {{/if}}\\n\", {\"contents\":\"
\\n {{#if this.hasTitle}}\\n \\n
\\n {{this.title}}\\n {{#if this.hasTitleSmall}}\\n {{this.titleSmall}}\\n {{/if}}\\n
\\n {{#if this.collapsible}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n \\n {{yield}}\\n \\n {{#if this.hasFooter}}\\n
\\n {{this.footer}}\\n
\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/i-panel.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/i-panel.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { notEmpty, not } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class IPanel extends Component {\n @notEmpty('title')\n hasTitle;\n\n @notEmpty('titleSmall')\n hasTitleSmall;\n\n @notEmpty('footer')\n hasFooter;\n\n open = true;\n collapsible = false;\n\n @not('open')\n closed;\n\n @action\n close() {\n this.toggleProperty('open');\n }\n\n @action\n doOpen() {\n this.toggleProperty('open');\n }\n\n @action\n toggle() {\n if (this.collapsible) {\n this.toggleProperty('open');\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if (has-value @select.searchText)}}\\n {{@addMessage}}\\n -\\n {{@select.searchText}}\\n {{else}}\\n {{@addMessage}}\\n {{/if}}\\n \\n\", {\"contents\":\"\\n \\n {{#if (has-value @select.searchText)}}\\n {{@addMessage}}\\n -\\n {{@select.searchText}}\\n {{else}}\\n {{@addMessage}}\\n {{/if}}\\n \\n\",\"moduleName\":\"weldnote/components/inline-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/inline-create.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (and (eq @select.results.length 0) (has-value @select.lastSearchedText))}}\\n \\n \\n {{#if (has-value @select.searchText)}}\\n {{@addMessage}}\\n -\\n {{@select.searchText}}\\n {{else}}\\n {{@addMessage}}\\n {{/if}}\\n \\n \\n{{/if}}\", {\"contents\":\"{{#if (and (eq @select.results.length 0) (has-value @select.lastSearchedText))}}\\n \\n \\n {{#if (has-value @select.searchText)}}\\n {{@addMessage}}\\n -\\n {{@select.searchText}}\\n {{else}}\\n {{@addMessage}}\\n {{/if}}\\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/inline-create/base-material-part.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/inline-create/base-material-part.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n {{#if this.showSearch}}\\n \\n \\n \\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n {{#if this.showSearch}}\\n \\n \\n \\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/input-search.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/input-search.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nconst ENTER_KEY = 13;\n\nexport default class InputSearch extends Component {\n get showSearch() {\n return this.args.showSearch ?? true;\n }\n\n @action\n onInput(value) {\n if (this.args.onChange) {\n this.args.onChange(value);\n }\n }\n\n @action\n onKeyDown(event) {\n let { keyCode } = event;\n let {\n target: { value },\n } = event;\n if (value) {\n if (keyCode === ENTER_KEY) {\n if (this.args.onSearch) {\n this.args.onSearch(value);\n }\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{yield}}\", {\"contents\":\"{{yield}}\",\"moduleName\":\"weldnote/components/inspinia-config.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/inspinia-config.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport $ from 'jquery';\nimport { debounce } from '@ember/runloop';\n\n@classic\nexport default class InspiniaConfig extends Component {\n @service\n intl;\n\n @service('instanceTracker')\n tracker;\n\n smoothlyMenu() {\n let jquery = $;\n if (!$('body').hasClass('mini-navbar') || $('body').hasClass('body-small')) {\n // Hide menu in order to smoothly turn on when maximize menu\n $('#side-menu').hide();\n // For smoothly turn on menu\n setTimeout(function () {\n jquery('#side-menu').fadeIn(300);\n }, 100);\n // Align collapse button to the width of the sidebar\n if($('#sidebar-collapse-button')) {\n $('#sidebar-collapse-button').css(\"left\", \"236px\");\n $('#sidebar-collapse-button').removeClass(\"collapsed\")\n }\n } else if ($('body').hasClass('fixed-sidebar')) {\n $('#side-menu').hide();\n setTimeout(function () {\n jquery('#side-menu').fadeIn(300);\n }, 300);\n // Left align collapse button\n if($('#sidebar-collapse-button')) {\n $('#sidebar-collapse-button').css(\"left\", \"5px\");\n $('#sidebar-collapse-button').addClass(\"collapsed\")\n }\n } else {\n // Remove all inline style from jquery fadeIn function to reset menu state\n $('#side-menu').removeAttr('style');\n }\n }\n\n applySizeClass() {\n if ($(document).width() < 769) {\n $('body').removeClass('body-small');\n } else {\n $('body').addClass('body-small');\n }\n }\n\n // Full height of sidebar\n fixHeight() {\n let heightWithoutNavbar = $('#wrapper').height() - 61;\n $('.sidebard-panel').css('min-height', `${heightWithoutNavbar}px`);\n\n let navbarHeigh = $('nav.navbar-default').height();\n let wrapperHeigh = $('#page-wrapper').height();\n\n if (navbarHeigh > wrapperHeigh) {\n $('#page-wrapper').css('min-height', `${navbarHeigh}px`);\n }\n\n let windowHeight = $(window).height();\n if (navbarHeigh < wrapperHeigh) {\n $('#page-wrapper').css('min-height', `${windowHeight}px`);\n }\n\n if ($('body').hasClass('fixed-nav')) {\n let adjustedHeight = windowHeight - 60;\n $('#page-wrapper').css('min-height', `${adjustedHeight}px`);\n }\n }\n\n checkIfFixHeightIsNeeded() {\n if (!$('body').hasClass('body-small')) {\n this.fixHeight();\n }\n }\n\n didInsertElement() {\n let self = this;\n self.fixHeight();\n\n $('.navbar-minimalize').click(function (e) {\n $('body').toggleClass('body-small');\n self.smoothlyMenu();\n e.preventDefault();\n });\n\n if ($('body').hasClass('fixed-sidebar')) {\n $('.sidebar-collapse').slimScroll({\n height: '100%',\n railOpacity: 0.9,\n });\n }\n\n $(window).bind('load', function () {\n debounce(self, 'applySizeClass', 1);\n });\n\n $(window).bind('load resize', function () {\n // Use debounce to prevent to many runs of this\n debounce(self, 'checkIfFixHeightIsNeeded', 500);\n });\n\n $(window).on('beforeunload', function () {\n if (self.get('tracker.hasUnsavedElements')) {\n let result = self.get('intl').t('components.inspinia-config.unsaved-work').toString();\n return result;\n }\n });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasExistingInstance}}\\n {{#if this.canCreateNew}}\\n \\n \\n {{t \\\"components.instance-aware-buttons.new-btn\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n {{t \\\"components.instance-aware-buttons.resume-btn\\\"}}\\n \\n \\n{{else}}\\n {{#if this.canCreateNew}}\\n \\n \\n {{t \\\"components.instance-aware-buttons.new-btn\\\"}}\\n \\n \\n {{/if}}\\n {{yield}}\\n{{/if}}\\n\\n{{#if this.confirmNew}}\\n \\n \\n
\\n
\\n

{{this.message}}

\\n
\\n
\\n
\\n
\\n \\n {{t \\\"components.instance-aware-buttons.confirm-window.confirm-new\\\"}}\\n \\n {{t \\\"components.instance-aware-buttons.confirm-window.resume\\\"}}\\n
\\n
\\n
\\n
\\n {{t \\\"components.instance-aware-buttons.confirm-window.go-back\\\"}}\\n
\\n
\\n \\n \\n{{/if}}\", {\"contents\":\"{{#if this.hasExistingInstance}}\\n {{#if this.canCreateNew}}\\n \\n \\n {{t \\\"components.instance-aware-buttons.new-btn\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n {{t \\\"components.instance-aware-buttons.resume-btn\\\"}}\\n \\n \\n{{else}}\\n {{#if this.canCreateNew}}\\n \\n \\n {{t \\\"components.instance-aware-buttons.new-btn\\\"}}\\n \\n \\n {{/if}}\\n {{yield}}\\n{{/if}}\\n\\n{{#if this.confirmNew}}\\n \\n \\n
\\n
\\n

{{this.message}}

\\n
\\n
\\n
\\n
\\n \\n {{t \\\"components.instance-aware-buttons.confirm-window.confirm-new\\\"}}\\n \\n {{t \\\"components.instance-aware-buttons.confirm-window.resume\\\"}}\\n
\\n
\\n
\\n
\\n {{t \\\"components.instance-aware-buttons.confirm-window.go-back\\\"}}\\n
\\n
\\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/instance-aware-buttons.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/instance-aware-buttons.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport default class InstanceAwareButtons extends Component {\n @service\n intl;\n\n @tracked\n confirmNew = false;\n\n get hasExistingInstance() {\n return !isEmpty(this.args.existingInstance);\n }\n\n get canCreateNew() {\n return this.args.canCreateNew ?? true;\n }\n\n get type() {\n return this.intl.t(`model.${this.args.model}.model-name`);\n }\n\n get title() {\n return this.args.title ?? this.intl.t('components.instance-aware-buttons.confirm-window.title');\n }\n\n get message() {\n return (\n this.args.message ??\n this.intl.t('components.instance-aware-buttons.confirm-window.message', { type: this.type })\n );\n }\n\n @action\n createNew() {\n this.confirmNew = false;\n this.args.discardAndCreate();\n }\n\n @action\n toggleCreateNew() {\n this.confirmNew = !this.confirmNew;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{svg-jar \\\"weld-cloud-loader\\\" class=\\\"weld-cloud-loader\\\"}}\\n {{yield}}\\n
\\n
\", {\"contents\":\"
\\n
\\n {{svg-jar \\\"weld-cloud-loader\\\" class=\\\"weld-cloud-loader\\\"}}\\n {{yield}}\\n
\\n
\",\"moduleName\":\"weldnote/components/loading-spinner.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/loading-spinner.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class LoadingSpinner extends Component {\n get type() {\n if (isEmpty(this.args.style)) {\n return 'weldnote-loading';\n }\n return this.args.style;\n }\n\n get cssClasses() {\n if (isEmpty(this.args.cssClasses)) {\n return 'w-24 mx-auto my-32';\n }\n return this.args.cssClasses;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n \\n

\\n Login\\n

\\n
\\n {{#if this.isLoading}}\\n \\n {{else}}\\n
\\n
\\n \\n
\\n
\\n \\n
\\n {{#if this.showWrongCredentialsError}}\\n \\n Your email or password is incorrect.\\n \\n {{/if}}\\n \\n {{t \\\"components.login-form.button.label\\\"}}\\n \\n
\\n By clicking “Login” you agree to\\n terms.\\n
\\n \\n {{/if}}\\n
\\n
\\n \\n \\n
\\n

InduSuite © {{this.currentYear}}

\\n
\\n\", {\"contents\":\"\\n \\n
\\n \\n

\\n Login\\n

\\n
\\n {{#if this.isLoading}}\\n \\n {{else}}\\n
\\n
\\n \\n
\\n
\\n \\n
\\n {{#if this.showWrongCredentialsError}}\\n \\n Your email or password is incorrect.\\n \\n {{/if}}\\n \\n {{t \\\"components.login-form.button.label\\\"}}\\n \\n
\\n By clicking “Login” you agree to\\n terms.\\n
\\n \\n {{/if}}\\n
\\n
\\n \\n \\n
\\n

InduSuite © {{this.currentYear}}

\\n
\\n\",\"moduleName\":\"weldnote/components/login-form.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/login-form.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport ENV from 'weldnote/config/environment';\nimport { isEmpty } from '@ember/utils';\nimport { assetUrl } from 'weldnote/helpers/asset-url';\n\nexport default class LoginFormXComponent extends Component {\n @service\n session;\n\n @service\n orgApi;\n\n @service('alertMessage')\n alert;\n\n @tracked\n username;\n\n @tracked\n password;\n\n @tracked\n showWrongCredentialsError;\n\n @tracked\n isLoading = false;\n\n get currentYear() {\n return new Date().getFullYear();\n }\n\n get resetPasswordUrl() {\n return `${ENV.esabCloudLink}/logout`;\n }\n\n @action\n async login(event) {\n event.preventDefault();\n this.isLoading = true;\n try {\n await this.session.authenticate('authenticator:fallback-simple-auth', {\n username: this.username.trim(),\n password: this.password.trim(),\n });\n } catch (e) {\n // currently we consider that every error is because of wrong credentials (same implementation as WeldCloud)\n this.showWrongCredentialsError = true;\n }\n this.isLoading = false;\n }\n\n @action\n setBackgroundImage(element) {\n const url = assetUrl(['assets/imgs/background.png']);\n element.style.backgroundImage = `url('${url}')`;\n }\n\n @action\n setUsername(event) {\n this.username = event.target.value;\n }\n\n @action\n setPassword(event) {\n this.password = event.target.value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{@visualLabel}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{@visualLabel}}\\n {{#if (has-value @visualLabel)}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value this.model.id)}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n{{else}}\\n
\\n \\n

{{@visualLabel}}

\\n
\\n{{/if}}\\n\\n{{#if this.showConfirmRemove}}\\n \\n \\n \\n \\n {{t \\\"components.lookup/groove-design.delete-modal.text\\\"}}\\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t \\\"components.lookup/groove-design.delete-modal.buttons.remove\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showModal}}\\n \\n
\\n
\\n {{#if this.showEditor}}\\n {{t \\\"components.groove-design-chooser.messages.edit-groove-design\\\"}}\\n {{/if}}\\n {{#if this.isShowingSearch}}\\n {{t \\\"components.groove-design-chooser.messages.find-groove-design\\\"}}\\n {{/if}}\\n
\\n
\\n {{#if (and this.isShowingSearch (not this.showEditor))}}\\n \\n \\n
\\n
\\n {{#if this.hasExternalParameters}}\\n \\n {{#if (not this.showAll)}}\\n {{t \\\"components.groove-design-chooser.applied-filters\\\"}}\\n {{#each this.searchParameters as |parameter|}}\\n {{parameter}}\\n {{/each}}\\n {{/if}}\\n
\\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"model.groove-design.description.label\\\"}}\\n {{t\\n \\\"model.groove-design.image.label\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isSearching}}\\n \\n \\n \\n {{t \\\"components.groove-design-chooser.loading-results\\\"}}\\n \\n \\n {{/if}}\\n {{#each this.items as |item|}}\\n \\n {{item.description}}\\n \\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{else}}\\n \\n \\n {{#if this.noSearchResults}}\\n {{t \\\"components.groove-design-chooser.no-results\\\"}}\\n {{else}}\\n {{#if this.hasExternalParameters}}\\n {{t \\\"components.groove-design-chooser.no-results\\\"}}\\n -\\n {{t \\\"components.groove-design-chooser.show-all\\\"}}\\n ?\\n {{/if}}\\n {{/if}}\\n \\n \\n {{/each}}\\n \\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n {{else if this.showEditor}}\\n \\n
\\n \\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{@visualLabel}}\\n \\n
\\n {{else}}\\n
\\n \\n
\\n \\n {{@visualLabel}}\\n {{#if (has-value @visualLabel)}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value this.model.id)}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n{{else}}\\n
\\n \\n

{{@visualLabel}}

\\n
\\n{{/if}}\\n\\n{{#if this.showConfirmRemove}}\\n \\n \\n \\n \\n {{t \\\"components.lookup/groove-design.delete-modal.text\\\"}}\\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t \\\"components.lookup/groove-design.delete-modal.buttons.remove\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showModal}}\\n \\n
\\n
\\n {{#if this.showEditor}}\\n {{t \\\"components.groove-design-chooser.messages.edit-groove-design\\\"}}\\n {{/if}}\\n {{#if this.isShowingSearch}}\\n {{t \\\"components.groove-design-chooser.messages.find-groove-design\\\"}}\\n {{/if}}\\n
\\n
\\n {{#if (and this.isShowingSearch (not this.showEditor))}}\\n \\n \\n
\\n
\\n {{#if this.hasExternalParameters}}\\n \\n {{#if (not this.showAll)}}\\n {{t \\\"components.groove-design-chooser.applied-filters\\\"}}\\n {{#each this.searchParameters as |parameter|}}\\n {{parameter}}\\n {{/each}}\\n {{/if}}\\n
\\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"model.groove-design.description.label\\\"}}\\n {{t\\n \\\"model.groove-design.image.label\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isSearching}}\\n \\n \\n \\n {{t \\\"components.groove-design-chooser.loading-results\\\"}}\\n \\n \\n {{/if}}\\n {{#each this.items as |item|}}\\n \\n {{item.description}}\\n \\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{else}}\\n \\n \\n {{#if this.noSearchResults}}\\n {{t \\\"components.groove-design-chooser.no-results\\\"}}\\n {{else}}\\n {{#if this.hasExternalParameters}}\\n {{t \\\"components.groove-design-chooser.no-results\\\"}}\\n -\\n {{t \\\"components.groove-design-chooser.show-all\\\"}}\\n ?\\n {{/if}}\\n {{/if}}\\n \\n \\n {{/each}}\\n \\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n {{else if this.showEditor}}\\n \\n
\\n \\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/lookup/groove-design.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/lookup/groove-design.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { or, notEmpty, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { debounce } from '@ember/runloop';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport ENV from 'weldnote/config/environment';\nimport { assetUrl } from 'weldnote/helpers/asset-url';\n\nconst { FILE_CONTEXT } = Constants;\n\n@classic\nexport default class GrooveDesign extends Component {\n @service('weldnoteData')\n data;\n\n @service\n scroller;\n\n @service\n fileService;\n\n @service\n ajax;\n\n @service\n intl;\n\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n userSession;\n\n @alias('content.firstObject')\n model;\n\n attribute = 'description';\n\n currentPage = 1;\n\n totalCount = 0;\n\n pageSize = 5;\n\n weldType = null;\n\n grooveShape = null;\n\n weldingDetails = null;\n\n jointType = null;\n\n showAll = false;\n\n currentItem = null;\n\n showEditor = false;\n\n isShowingSearch = false;\n\n // Controls whether to show modal with the remove confirmation\n showConfirmRemove = false;\n\n @computed('items.length', 'description')\n get noSearchResults() {\n return get(this, 'items.length') === 0 && !isEmpty(get(this, 'description'));\n }\n\n @or('showEditor', 'isShowingSearch')\n showModal;\n\n @computed('currentItem')\n get currentBackgroundImage() {\n let { currentItem } = this;\n if (isEmpty(currentItem)) {\n return `${ENV.notesBackendEndpoint}/photoeditor5/assets/white.png`;\n }\n let imageId = get(currentItem, 'image.id');\n if (isEmpty(imageId)) {\n return `${ENV.notesBackendEndpoint}/photoeditor5/assets/white.png`;\n } else {\n return currentItem.urlImage;\n }\n }\n\n @computed('weldType', 'weldingDetails')\n get searchParameters() {\n let result = [];\n if (!isEmpty(get(this, 'weldType.designation'))) {\n result.push(`${get(this, 'weldType.designation')}`);\n }\n if (get(this, 'weldingDetails.length') > 0) {\n get(this, 'weldingDetails').forEach((detail) => {\n result.push(detail.completeDesignation);\n });\n }\n if (!isEmpty(this.jointType)) {\n result.push(this.intl.t(`lov.joint-types.${this.jointType}`));\n }\n if (!isEmpty(this.grooveShape)) {\n result.push(this.intl.t(`lov.groove-shapes.${this.grooveShape}`));\n }\n return result;\n }\n\n @notEmpty('weldType.id')\n hasExternalParameters;\n\n internalSearch(page = 1) {\n set(this, 'isSearching', true);\n set(this, 'currentPage', page);\n let filters = {\n term: this.description,\n };\n let options = {\n page,\n pageSize: this.pageSize,\n };\n if (!this.showAll) {\n if (!isEmpty(get(this, 'weldType.id'))) {\n filters.weldType = get(this, 'weldType.id');\n }\n if (!isEmpty(this.grooveShape)) {\n filters.grooveType = this.grooveShape;\n }\n if (get(this, 'weldingDetails.length') > 0) {\n filters.weldingDetails = this.weldingDetails.map((elem) => get(elem, 'id')).join(',');\n }\n if (!isEmpty(this.jointType)) {\n filters.jointType = this.jointType;\n }\n }\n this.data\n .listAllGrooveDesigns(options, filters)\n .then((items) => {\n set(this, 'items', items);\n set(this, 'totalCount', items.meta.records);\n })\n .finally(() => {\n set(this, 'isSearching', false);\n });\n }\n\n closeModal() {\n set(this, 'isShowingSearch', false);\n set(this, 'showEditor', false);\n set(this, 'currentItem', null);\n this.resetPage();\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n saveImage = task(\n {\n drop: true,\n },\n async ({ state, image }) => {\n let { currentItem, loading, store, fileService } = this;\n let { imageSituation } = currentItem;\n let savedDesign = null;\n loading.block(\n this.intl.t('components.groove-design-chooser.messages.updating-groove-design')\n );\n try {\n if (imageSituation === 'TEMPLATE') {\n let newGrooveName = this.generateNewGrooveName(get(this.currentItem, 'description'));\n let upload = await fileService.uploadNewBase64Image.perform(\n newGrooveName,\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n savedDesign = store.createRecord('groove-design', {\n description: newGrooveName,\n longDescription: get(currentItem, 'longDescription'),\n weldingDetails: get(currentItem, 'weldingDetails'),\n weldTypes: get(currentItem, 'weldTypes'),\n grooveType: get(currentItem, 'grooveType'),\n jointType: get(currentItem, 'jointType'),\n imageState: JSON.stringify(state),\n imageSituation: 'CUSTOMIZED',\n image: get(currentItem, 'image'),\n renderedImage: upload,\n });\n savedDesign = await savedDesign.save();\n this.alert.success(\n this.intl.t('components.groove-design-chooser.messages.groove-design-created')\n );\n } else if (imageSituation === 'CUSTOMIZED') {\n let upload = await store.findRecord('file-upload', get(currentItem, 'renderedImage.id'));\n await fileService.updateExistingBase64Image.perform(\n get(upload, 'id'),\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n await upload.save();\n set(currentItem, 'imageState', JSON.stringify(state));\n savedDesign = await currentItem.save();\n savedDesign = await currentItem.reload();\n this.alert.success(\n this.intl.t('components.groove-design-chooser.messages.groove-design-updated')\n );\n }\n } catch (e) {\n this.alert.error(this.intl.t('components.groove-design-chooser.error.unknown'));\n } finally {\n loading.unblock();\n }\n get(this, 'onUpdateValue')(savedDesign);\n this.closeModal();\n }\n );\n\n @action\n openSearch() {\n set(this, 'isShowingSearch', true);\n set(this, 'showEditor', false);\n debounce(this, 'internalSearch', 600);\n }\n\n @action\n cancel() {\n this.closeModal();\n }\n\n @action\n updateDescription(value) {\n set(this, 'description', value);\n debounce(this, 'internalSearch', 450);\n }\n\n @action\n clear() {\n get(this, 'onUpdateValue')(null);\n set(this, 'showConfirmRemove', false);\n }\n\n @action\n search() {\n this.internalSearch();\n }\n\n @action\n chooseItem(model) {\n get(this, 'onUpdateValue')(model);\n set(this, 'isShowingSearch', false);\n set(this, 'showAll', false);\n this.resetPage();\n this.scroller.scrollVertical('.groove-design-lookup', { duration: 300 });\n }\n\n @action\n reloadData(page) {\n this.internalSearch(page);\n }\n\n @action\n searchAll() {\n this.toggleProperty('showAll');\n this.internalSearch();\n }\n\n @action\n editDrawing(item) {\n set(this, 'currentItem', item);\n set(this, 'isShowingSearch', false);\n set(this, 'showEditor', true);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{@visualLabel}}\\n \\n
\\n {{else}}\\n \\n \\n
\\n \\n {{@visualLabel}}\\n {{#if (has-value @visualLabel)}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value this.model.id)}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n \\n {{/if}}\\n{{else}}\\n
\\n \\n

{{@visualLabel}}

\\n
\\n{{/if}}\\n\\n{{#if this.showConfirmRemove}}\\n \\n \\n \\n \\n {{t \\\"components.lookup/weld-layer.delete-modal.text\\\"}}\\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showModal}}\\n \\n
\\n
\\n {{#if this.showEditor}}\\n {{t \\\"components.weld-layer-chooser.messages.edit-weld-layer\\\"}}\\n {{/if}}\\n {{#if this.isShowingSearch}}\\n {{t \\\"components.weld-layer-chooser.messages.find-weld-layer\\\"}}\\n {{/if}}\\n
\\n
\\n {{#if (and this.isShowingSearch (not this.showEditor))}}\\n \\n \\n
\\n
\\n {{#if this.hasExternalParameters}}\\n \\n {{#if (not this.showAll)}}\\n {{t \\\"components.weld-layer-chooser.applied-filters\\\"}}\\n {{#each this.searchParameters as |parameter|}}\\n {{parameter}}\\n {{/each}}\\n {{/if}}\\n
\\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"model.groove-design.description.label\\\"}}\\n {{t\\n \\\"model.groove-design.image.label\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isSearching}}\\n \\n \\n \\n {{t \\\"components.weld-layer-chooser.loading-results\\\"}}\\n \\n \\n {{/if}}\\n {{#each this.items as |item|}}\\n \\n {{item.description}}\\n \\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{else}}\\n \\n \\n {{#if this.noSearchResults}}\\n {{t \\\"components.weld-layer-chooser.no-results\\\"}}\\n {{else}}\\n {{#if this.hasExternalParameters}}\\n {{t \\\"components.weld-layer-chooser.no-results\\\"}}\\n -\\n {{t \\\"components.weld-layer-chooser.show-all\\\"}}\\n ?\\n {{/if}}\\n {{/if}}\\n \\n \\n {{/each}}\\n \\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n {{else if this.showEditor}}\\n \\n
\\n \\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#if @disabled}}\\n
\\n \\n \\n {{@visualLabel}}\\n \\n
\\n {{else}}\\n \\n \\n
\\n \\n {{@visualLabel}}\\n {{#if (has-value @visualLabel)}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value this.model.id)}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n \\n {{/if}}\\n{{else}}\\n
\\n \\n

{{@visualLabel}}

\\n
\\n{{/if}}\\n\\n{{#if this.showConfirmRemove}}\\n \\n \\n \\n \\n {{t \\\"components.lookup/weld-layer.delete-modal.text\\\"}}\\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showModal}}\\n \\n
\\n
\\n {{#if this.showEditor}}\\n {{t \\\"components.weld-layer-chooser.messages.edit-weld-layer\\\"}}\\n {{/if}}\\n {{#if this.isShowingSearch}}\\n {{t \\\"components.weld-layer-chooser.messages.find-weld-layer\\\"}}\\n {{/if}}\\n
\\n
\\n {{#if (and this.isShowingSearch (not this.showEditor))}}\\n \\n \\n
\\n
\\n {{#if this.hasExternalParameters}}\\n \\n {{#if (not this.showAll)}}\\n {{t \\\"components.weld-layer-chooser.applied-filters\\\"}}\\n {{#each this.searchParameters as |parameter|}}\\n {{parameter}}\\n {{/each}}\\n {{/if}}\\n
\\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"model.groove-design.description.label\\\"}}\\n {{t\\n \\\"model.groove-design.image.label\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isSearching}}\\n \\n \\n \\n {{t \\\"components.weld-layer-chooser.loading-results\\\"}}\\n \\n \\n {{/if}}\\n {{#each this.items as |item|}}\\n \\n {{item.description}}\\n \\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{else}}\\n \\n \\n {{#if this.noSearchResults}}\\n {{t \\\"components.weld-layer-chooser.no-results\\\"}}\\n {{else}}\\n {{#if this.hasExternalParameters}}\\n {{t \\\"components.weld-layer-chooser.no-results\\\"}}\\n -\\n {{t \\\"components.weld-layer-chooser.show-all\\\"}}\\n ?\\n {{/if}}\\n {{/if}}\\n \\n \\n {{/each}}\\n \\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n {{else if this.showEditor}}\\n \\n
\\n \\n \\n
\\n \\n {{/if}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/lookup/weld-layer.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/lookup/weld-layer.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { or, alias, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { debounce } from '@ember/runloop';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport ENV from 'weldnote/config/environment';\nimport { assetUrl } from 'weldnote/helpers/asset-url';\n\nconst { FILE_CONTEXT } = Constants;\n\n@classic\nexport default class WeldLayer extends Component {\n @service('weldnoteData')\n data;\n\n @service\n scroller;\n\n @service\n fileService;\n\n @service\n ajax;\n\n @service\n intl;\n\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n userSession;\n\n @alias('content.firstObject')\n model;\n\n attribute = 'description';\n\n currentPage = 1;\n\n totalCount = 0;\n\n pageSize = 5;\n\n grooveShape = null;\n\n weldingDetails = null;\n\n jointType = null;\n\n showAll = false;\n\n @notEmpty('weldType.id')\n hasExternalParameters;\n\n currentItem = null;\n\n showEditor = false;\n\n isShowingSearch = false;\n\n // Controls whether to show modal with the remove confirmation\n showConfirmRemove = false;\n\n @computed('items.length', 'description')\n get noSearchResults() {\n return get(this, 'items.length') === 0 && !isEmpty(get(this, 'description'));\n }\n\n @or('showEditor', 'isShowingSearch')\n showModal;\n\n @computed('currentItem')\n get currentBackgroundImage() {\n let { currentItem } = this;\n if (isEmpty(currentItem)) {\n return `${ENV.notesBackendEndpoint}/photoeditor5/assets/white.png`;\n }\n let imageId = get(currentItem, 'upload.id');\n if (isEmpty(imageId)) {\n return `${ENV.notesBackendEndpoint}/photoeditor5/assets/white.png`;\n } else {\n return currentItem.urlImage;\n }\n }\n\n @computed('weldType', 'weldingDetails')\n get searchParameters() {\n let result = [];\n if (!isEmpty(get(this, 'weldType.designation'))) {\n result.push(`${get(this, 'weldType.designation')}`);\n }\n if (get(this, 'weldingDetails.length') > 0) {\n get(this, 'weldingDetails').forEach((detail) => {\n result.push(detail.completeDesignation);\n });\n }\n if (!isEmpty(get(this, 'jointType'))) {\n result.push(this.intl.t(`lov.joint-types.${this.jointType}`));\n }\n if (!isEmpty(get(this, 'grooveShape'))) {\n result.push(this.intl.t(`lov.groove-shapes.${this.grooveShape}`));\n }\n return result;\n }\n\n internalSearch(page = 1) {\n set(this, 'isSearching', true);\n set(this, 'currentPage', page);\n let filters = {\n term: this.description,\n };\n let options = {\n page,\n pageSize: this.pageSize,\n };\n\n if (!this.showAll) {\n if (!isEmpty(get(this, 'weldType.id'))) {\n filters.weldType = get(this, 'weldType.id');\n }\n if (!isEmpty(this.grooveShape)) {\n filters.grooveType = this.grooveShape;\n }\n if (get(this, 'weldingDetails.length') > 0) {\n filters.weldingDetails = this.weldingDetails\n .map((elem) => {\n return get(elem, 'id');\n })\n .join(',');\n }\n if (!isEmpty(this.jointType)) {\n filters.jointType = this.jointType;\n }\n }\n this.data\n .listAllWeldLayerConfigurations(options, filters)\n .then((items) => {\n set(this, 'items', items);\n set(this, 'totalCount', items.meta.records);\n })\n .finally(() => {\n set(this, 'isSearching', false);\n });\n }\n\n closeModal() {\n set(this, 'isShowingSearch', false);\n set(this, 'showEditor', false);\n set(this, 'currentItem', null);\n this.resetPage();\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n saveImage = task(\n {\n drop: true,\n },\n async ({ state, image }) => {\n let { currentItem, loading, store } = this;\n let { imageSituation } = currentItem;\n let savedDesign = null;\n loading.block(this.intl.t('components.weld-layer-chooser.messages.updating-weld-layer'));\n try {\n if (imageSituation === 'TEMPLATE') {\n let newWeldLayerName = this.generateNewWeldLayerName(\n get(this.currentItem, 'description')\n );\n let upload = await this.fileService.uploadNewBase64Image.perform(\n newWeldLayerName,\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n savedDesign = store.createRecord('weld-layer-configuration', {\n description: newWeldLayerName,\n longDescription: get(currentItem, 'longDescription'),\n weldingDetails: get(currentItem, 'weldingDetails'),\n weldTypes: get(currentItem, 'weldTypes'),\n grooveType: get(currentItem, 'grooveType'),\n jointType: get(currentItem, 'jointType'),\n imageState: JSON.stringify(state),\n imageSituation: 'CUSTOMIZED',\n upload: get(currentItem, 'upload'),\n renderedImage: upload,\n });\n savedDesign = await savedDesign.save();\n this.alert.success(\n this.intl.t('components.weld-layer-chooser.messages.weld-layer-created')\n );\n } else if (imageSituation === 'CUSTOMIZED') {\n let upload = await store.findRecord('file-upload', get(currentItem, 'renderedImage.id'));\n await this.fileService.updateExistingBase64Image.perform(\n get(upload, 'id'),\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n await upload.save();\n set(currentItem, 'imageState', JSON.stringify(state));\n savedDesign = await currentItem.save();\n savedDesign = await currentItem.reload();\n this.alert.success(\n this.intl.t('components.weld-layer-chooser.messages.weld-layer-updated')\n );\n }\n } catch (e) {\n this.alert.error(this.intl.t('components.groove-design-chooser.error.unknown'));\n } finally {\n loading.unblock();\n }\n get(this, 'onUpdateValue')(savedDesign);\n this.closeModal();\n }\n );\n\n @action\n openSearch() {\n set(this, 'isShowingSearch', true);\n set(this, 'showEditor', false);\n debounce(this, 'internalSearch', 600);\n }\n\n @action\n cancel() {\n this.closeModal();\n }\n\n @action\n updateDescription(value) {\n set(this, 'description', value);\n debounce(this, 'internalSearch', 450);\n }\n\n @action\n clear() {\n get(this, 'onUpdateValue')(null);\n set(this, 'showConfirmRemove', false);\n }\n\n @action\n search() {\n this.internalSearch();\n }\n\n @action\n chooseItem(model) {\n get(this, 'onUpdateValue')(model);\n set(this, 'isShowingSearch', false);\n set(this, 'showAll', false);\n this.resetPage();\n get(this, 'scroller').scrollVertical('.weld-layer-lookup', { duration: 300 });\n }\n\n @action\n reloadData(page) {\n this.internalSearch(page);\n }\n\n @action\n searchAll() {\n this.toggleProperty('showAll');\n this.internalSearch();\n }\n\n @action\n editDrawing(item) {\n set(this, 'currentItem', item);\n set(this, 'isShowingSearch', false);\n set(this, 'showEditor', true);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @certificates.list as |certificate|}}\\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.type\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.expiration-date\\\"\\n }}
{{certificate.certificateNumber}}{{certificate.type}}\\n {{certificate.expirationDate}}\\n {{#let\\n (days-until this.currentDate certificate.expirationDate format=@dateFormat)\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"}}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n
{{t\\n \\\"components.welder-certificate-expiration-table.no-certificates\\\"\\n }}
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @certificates.list as |certificate|}}\\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.type\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.expiration-date\\\"\\n }}
{{certificate.certificateNumber}}{{certificate.type}}\\n {{certificate.expirationDate}}\\n {{#let\\n (days-until this.currentDate certificate.expirationDate format=@dateFormat)\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"}}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n
{{t\\n \\\"components.welder-certificate-expiration-table.no-certificates\\\"\\n }}
\",\"moduleName\":\"weldnote/components/miscellaneous-certificate-dashboard-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/miscellaneous-certificate-dashboard-table.hbs\"}});\nimport Component from '@glimmer/component';\nimport moment from 'moment';\nimport { assert } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\nexport default class MiscellaneousCertificateDashboardTable extends Component {\n constructor() {\n super(...arguments);\n assert(\n 'Date format is required for miscellaneous-certificate-dashboard-table',\n !isEmpty(this.args.dateFormat)\n );\n }\n\n get currentDate() {\n return moment().format(this.args.dateFormat);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.filters\\\"}}\\n
\\n
\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.certificates-to-revalidate\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @loadCertificatesTask.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each @certificates as |certificate|}}\\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.person\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.expiration-date\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.type\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.validate\\\"\\n }}
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.searching-certificates\\\"\\n }}\\n \\n
\\n \\n {{certificate.certificateNumber}}\\n \\n {{#if (has-value certificate.company)}}\\n {{certificate.company}}\\n {{/if}}\\n \\n {{#if (has-value certificate.personName)}}\\n {{certificate.personName}}\\n \\n ({{t (concat \\\"lov.person-type.\\\" certificate.personType)}})\\n {{/if}}\\n \\n {{certificate.expirationDate}}\\n {{#let\\n (days-until\\n this.currentDate certificate.expirationDate format=this.userSession.dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.messages.days-until-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t \\\"components.miscellaneous-certificate-expiration-table.messages.days\\\"}}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.messages.days-until-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n {{certificate.type}}\\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n \\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.cancel-revalidate-single-button\\\"\\n }}\\n \\n {{#if this.revalidating}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.confirm-revalidate-single-button\\\"\\n }}\\n \\n {{else}}\\n {{#if this.userSession.canRevalidateCertificate}}\\n {{#if\\n (and\\n (has-value certificate.requalificationPeriod)\\n (has-value certificate.expirationDate)\\n )\\n }}\\n \\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.revalidate-single-button\\\"\\n }}\\n {{else}}\\n \\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.revalidate-single-button\\\"\\n }}\\n {{#if this.isMobile}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.does-not-have-requalification-period\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
{{this.noCertificatesMessage}}
\\n
\\n \\n
\\n
\\n
\", {\"contents\":\"
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.filters\\\"}}\\n
\\n
\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.certificates-to-revalidate\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @loadCertificatesTask.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each @certificates as |certificate|}}\\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.person\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.expiration-date\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.type\\\"\\n }}{{t\\n \\\"components.miscellaneous-certificate-expiration-table.columns.validate\\\"\\n }}
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.searching-certificates\\\"\\n }}\\n \\n
\\n \\n {{certificate.certificateNumber}}\\n \\n {{#if (has-value certificate.company)}}\\n {{certificate.company}}\\n {{/if}}\\n \\n {{#if (has-value certificate.personName)}}\\n {{certificate.personName}}\\n \\n ({{t (concat \\\"lov.person-type.\\\" certificate.personType)}})\\n {{/if}}\\n \\n {{certificate.expirationDate}}\\n {{#let\\n (days-until\\n this.currentDate certificate.expirationDate format=this.userSession.dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.messages.days-until-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t \\\"components.miscellaneous-certificate-expiration-table.messages.days\\\"}}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.messages.days-until-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n {{certificate.type}}\\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n \\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.cancel-revalidate-single-button\\\"\\n }}\\n \\n {{#if this.revalidating}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.confirm-revalidate-single-button\\\"\\n }}\\n \\n {{else}}\\n {{#if this.userSession.canRevalidateCertificate}}\\n {{#if\\n (and\\n (has-value certificate.requalificationPeriod)\\n (has-value certificate.expirationDate)\\n )\\n }}\\n \\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.revalidate-single-button\\\"\\n }}\\n {{else}}\\n \\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.revalidate-single-button\\\"\\n }}\\n {{#if this.isMobile}}\\n {{t\\n \\\"components.miscellaneous-certificate-expiration-table.does-not-have-requalification-period\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
{{this.noCertificatesMessage}}
\\n
\\n \\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/miscellaneous-certificate-expiration-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/miscellaneous-certificate-expiration-table.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { or, alias, empty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport moment from 'moment';\n\n@classic\nexport default class MiscellaneousCertificateExpirationTable extends Component {\n // Required parameters must be passed in\n @service\n store;\n\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service\n media;\n\n @service\n alertMessage;\n\n @service\n userSession;\n\n certificates = null;\n\n page = 1;\n\n revalidating = false;\n\n currentCertificateValidate = null;\n\n @alias('data.companyOptions')\n companyOptions;\n\n selectedCompany = null;\n\n @or('media.isMobile', 'media.isTablet', 'media.isLaptop')\n isMobile;\n\n @computed('emptyListMessage')\n get noCertificatesMessage() {\n if (!isEmpty(get(this, 'emptyListMessage'))) {\n return get(this, 'emptyListMessage');\n }\n return this.translate('no-certificates');\n }\n\n @computed\n get currentDate() {\n return moment().format(this.userSession.dateFormat);\n }\n\n translate(message, params = {}) {\n return this.intl.t(`components.miscellaneous-certificate-expiration-table.${message}`, params);\n }\n\n prepareOptions() {\n let options = {};\n if (!isEmpty(get(this, 'selectedCompany.id'))) {\n options.company = get(this, 'selectedCompany.id');\n }\n options.page = get(this, 'page');\n return options;\n }\n\n @action\n revalidate(id) {\n set(this, 'currentCertificateValidate', id);\n }\n\n @action\n cancel() {\n set(this, 'currentCertificateValidate', null);\n }\n\n @action\n confirm() {\n let { currentCertificateValidate, store, alertMessage } = this;\n let options = this.prepareOptions();\n if (!isEmpty(currentCertificateValidate)) {\n store\n .findRecord('miscellaneous-certificate', currentCertificateValidate)\n .then((certificate) => {\n set(this, 'revalidating', true);\n this.validateSingle(certificate)\n .then((data) => {\n set(this, 'currentCertificateValidate', null);\n set(this, 'revalidating', false);\n this.postValidate();\n this.loadCertificatesTask.perform(options);\n let dateDisplay = data.newDate;\n alertMessage.success(\n this.translate('single-certificates-revalidated', {\n certificateNumber: certificate.get('certificateNumber'),\n newDate: dateDisplay,\n })\n );\n })\n .catch((reason) => {\n alertMessage.error(\n this.translate('single-certificates-error', {\n certificateNumber: certificate.get('certificateNumber'),\n reason: reason.message,\n })\n );\n set(this, 'currentCertificateValidate', null);\n set(this, 'revalidating', false);\n });\n });\n }\n }\n\n @action\n search() {\n let options = this.prepareOptions();\n this.loadCertificatesTask.perform(options);\n }\n\n @action\n chooseCompany(company) {\n set(this, 'selectedCompany', company);\n set(this, 'page', 1);\n if (!isEmpty(company)) {\n this.loadCertificatesTask.perform({ company: company.get('id') });\n } else {\n this.loadCertificatesTask.perform(this.prepareOptions());\n }\n }\n\n @action\n searchPage(pageNum = 1) {\n set(this, 'page', pageNum);\n let options = this.prepareOptions();\n this.loadCertificatesTask.perform(options);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-arc-transfer-mode/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-arc-transfer-mode/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-base-material-group/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-base-material-group/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n baseMaterialGroup;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.canEditMaterial this.canEdit)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.userSession.canDeleteBaseMaterial (not this.baseMaterial.isNew) this.canEdit)}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.specification}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.grade}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n {{#if (not (has-value this.baseMaterial.industryCode.id))}}\\n {{lov.help}}\\n {{/if}}\\n {{lov.errors}}\\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.canEditMaterial this.canEdit)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.userSession.canDeleteBaseMaterial (not this.baseMaterial.isNew) this.canEdit)}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.specification}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.grade}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n {{#if (not (has-value this.baseMaterial.industryCode.id))}}\\n {{lov.help}}\\n {{/if}}\\n {{lov.errors}}\\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-base-material/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-base-material/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, empty } from '@ember/object/computed';\nimport RSVP from 'rsvp';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty, isBlank } from '@ember/utils';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\nimport { task, timeout } from 'ember-concurrency';\n\nconst DEBOUNCE_MS = 250;\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n store;\n\n @service\n intl;\n\n @service\n userSession;\n\n @empty('baseMaterial.industryCode.id')\n groupDisabled;\n\n @alias('baseMaterial.industryCode.id')\n currentIndustryCodeId;\n\n @alias('model')\n baseMaterial;\n\n groupOptions = [];\n\n @alias('userSession.canCreateBaseMaterial')\n canEditMaterial;\n\n @computed('model')\n get breadcrumbs() {\n let result = [];\n result.pushObject({\n label: this.intl.t('model.base-material.model-plural'),\n route: 'base-materials',\n });\n if (this.model.isNew) {\n result.pushObject({\n label: this.intl.t('components.model-base-material/edit.messages.new'),\n });\n } else {\n result.pushObject({\n label: this.baseMaterial.visualLabel,\n });\n }\n return result;\n }\n\n beforeSave() {\n RSVP.hash({\n specification: this.get('baseMaterial.specification'),\n grade: this.get('baseMaterial.grade'),\n }).then(() => {});\n }\n\n searchGroup = task(\n {\n restartable: true,\n },\n async () => {\n await timeout(DEBOUNCE_MS);\n let industryCode = get(this, 'baseMaterial.industryCode');\n let options = {\n pageSize: 200,\n };\n return get(this, 'data')\n .listAllBaseMaterialGroups(options, { code: industryCode })\n .then((data) => {\n set(this, 'groupOptions', data);\n return data;\n });\n }\n );\n\n init() {\n super.init(...arguments);\n if (!isEmpty(get(this, 'baseMaterial.industryCode.id'))) {\n this.searchGroup.perform();\n }\n }\n\n createGradeInternal(term, api) {\n if (!isEmpty(term)) {\n let grade = this.store.createRecord('base-material-grade');\n grade.set('grade', term);\n grade\n .save()\n .then((savedGrade) => {\n set(this, 'baseMaterial.grade', savedGrade);\n if (api) {\n api.actions.close();\n }\n })\n .catch((reason) => {});\n }\n }\n\n createSpecificationInternal(term, api) {\n if (!isEmpty(term)) {\n let specification = this.store.createRecord('base-material-specification');\n specification.set('specification', term);\n specification\n .save()\n .then((savedSpecification) => {\n set(this, 'baseMaterial.specification', savedSpecification);\n if (api) {\n api.actions.close();\n }\n })\n .catch((reason) => {});\n }\n }\n\n @action\n searchSpecification(term) {\n return new RSVP.Promise((resolve) => {\n this.data.findBaseMaterialSpecification(term).then((data) => {\n resolve(data.slice());\n });\n });\n }\n\n @action\n searchGrade(term) {\n return new RSVP.Promise((resolve) => {\n this.data.findBaseMaterialGrade(term).then((data) => {\n resolve(data.slice());\n });\n });\n }\n\n @action\n searchBaseMaterialGroups(term) {\n return this.data.findBaseMaterialGroup(term, this.currentIndustryCodeId);\n }\n\n @action\n setSpecification(spec) {\n set(this, 'baseMaterial.specification', spec);\n }\n\n @action\n setGrade(grade) {\n set(this, 'baseMaterial.grade', grade);\n }\n\n @action\n setIndustryCode(industryCode) {\n set(this, 'baseMaterial.industryCode', industryCode);\n set(this, 'baseMaterial.materialGroup', null);\n this.searchGroup.perform();\n }\n\n @action\n createSpecification(term, api) {\n this.createSpecificationInternal(term, api);\n }\n\n @action\n createGrade(term, api) {\n this.createGradeInternal(term, api);\n }\n\n @action\n createGradeOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.createGradeInternal(select.searchText, select);\n }\n }\n\n @action\n createSpecificationOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.createSpecificationInternal(select.searchText, select);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-certification-special-requirement/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-certification-special-requirement/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/certification-special-requirement-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\n\nconst { CERTIFICATION_SPECIAL_REQUIREMENT } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n _postSave() {\n this.data.bustSpecialRequirementsCache();\n }\n\n @action\n setName(value) {\n this.setModelValue(CERTIFICATION_SPECIAL_REQUIREMENT.NAME, value);\n }\n\n @action\n setDescription(value) {\n this.setModelValue(CERTIFICATION_SPECIAL_REQUIREMENT.DESCRIPTION, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n {{#if this.canEdit}}\\n \\n \\n {{option.label}}\\n \\n {{else}}\\n
\\n \\n

\\n {{this.selectedLanguage.label}}

\\n
\\n {{/if}}\\n
\\n \\n {{#if (and this.canEdit this.canEditAccountForCertificateRenewal)}}\\n \\n {{option.name}}\\n \\n {{else}}\\n
\\n \\n

\\n {{get (get this.company \\\"accountForAutoCertificatesRenewal\\\") \\\"name\\\"}}\\n

\\n \\n {{t \\\"model.company.accountForAutoCertificatesRenewal.help\\\"}}\\n \\n
\\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{#if (eq this.company.totalWelds 0)}}\\n

{{t\\n \\\"components.model-company/edit.messages.no-welds-performed\\\"\\n }}

\\n {{else}}\\n

{{this.company.repairedWelds}}\\n /\\n {{this.company.totalWelds}}\\n /\\n {{this.company.repairRate}}%

\\n {{/if}}\\n
\\n
\\n
\\n
\\n\\n
\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n {{#if this.canEdit}}\\n \\n \\n {{option.label}}\\n \\n {{else}}\\n
\\n \\n

\\n {{this.selectedLanguage.label}}

\\n
\\n {{/if}}\\n
\\n \\n {{#if (and this.canEdit this.canEditAccountForCertificateRenewal)}}\\n \\n {{option.name}}\\n \\n {{else}}\\n
\\n \\n

\\n {{get (get this.company \\\"accountForAutoCertificatesRenewal\\\") \\\"name\\\"}}\\n

\\n \\n {{t \\\"model.company.accountForAutoCertificatesRenewal.help\\\"}}\\n \\n
\\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{#if (eq this.company.totalWelds 0)}}\\n

{{t\\n \\\"components.model-company/edit.messages.no-welds-performed\\\"\\n }}

\\n {{else}}\\n

{{this.company.repairedWelds}}\\n /\\n {{this.company.totalWelds}}\\n /\\n {{this.company.repairRate}}%

\\n {{/if}}\\n
\\n
\\n
\\n
\\n\\n
\",\"moduleName\":\"weldnote/components/model-company/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-company/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { get, set, action, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/company-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\n\nconst { COMPANY } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter) {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @alias('model')\n company;\n\n @alias('userSession.isAccountAdmin')\n canEdit;\n\n selectableAccounts = [];\n\n init() {\n super.init(...arguments);\n if (this.userSession.account.accountAdmin) {\n this.store.findAll('account', { reload: true }).then((accounts) => {\n set(this, 'selectableAccounts', accounts.slice());\n });\n } else {\n set(this, 'selectableAccounts', [this.userSession.account]);\n }\n }\n\n @computed('company.language', 'languageOptions')\n get selectedLanguage() {\n let languages = this.languageOptions;\n let currentLanguage = get(this, 'company.language');\n if (!isEmpty(currentLanguage)) {\n let match = languages.findBy('key', currentLanguage);\n if (match) {\n return {\n key: match.key,\n label: match.label,\n };\n }\n }\n return null;\n }\n\n @computed\n get languageOptions() {\n let options = [\n {\n key: 'en',\n label: 'English',\n },\n {\n key: 'br',\n label: 'Português - Brasil',\n },\n {\n key: 'fr',\n label: 'Français',\n },\n {\n key: 'pt',\n label: 'Português - Portugal',\n },\n {\n key: 'nl',\n label: 'Nederlands',\n },\n {\n key: 'es',\n label: 'Español',\n },\n {\n key: 'de',\n label: 'Deutsch',\n },\n {\n key: 'it',\n label: 'Italiano',\n },\n {\n key: 'tr',\n label: 'Türk',\n },\n {\n key: 'pl',\n label: 'Polski',\n },\n {\n key: 'hu',\n label: 'Magyar',\n },\n ];\n return options;\n }\n\n _postSave() {\n this.data.bustCompanyCache();\n }\n\n @action\n setName(value) {\n this.setModelValue(COMPANY.NAME, value);\n }\n\n @action\n setAddress(value) {\n this.setModelValue(COMPANY.ADDRESS, value);\n }\n\n @action\n setCompanyLogo(value) {\n this.setModelValue(COMPANY.COMPANY_LOGO, value);\n }\n\n @action\n setSecondaryLogo(value) {\n this.setModelValue(COMPANY.SECONDARY_LOGO, value);\n }\n\n @action\n setWpsTemplate(value) {\n this.setModelValue(COMPANY.WPS_TEMPLATE, value);\n }\n\n @action\n setLanguage(value) {\n if (!isEmpty(value)) {\n this.setModelValue(COMPANY.LANGUAGE, value.key);\n } else {\n this.setModelValue(COMPANY.LANGUAGE, null);\n }\n }\n\n @action\n setRenewalAccount(value) {\n this.setModelValue(\n COMPANY.ACCOUNT_FOR_AUTO_CERTIFICATES_RENEWAL,\n !isEmpty(value) ? value : null\n );\n }\n\n @computed('company.accountForAutoCertificatesRenewal.id', 'userSession.account.{accountAdmin,id}')\n get canEditAccountForCertificateRenewal() {\n const certificateAccId = get(this, 'company.accountForAutoCertificatesRenewal.id');\n return (\n this.userSession.account.accountAdmin ||\n isEmpty(certificateAccId) ||\n certificateAccId === this.userSession.account.id\n );\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.canCreateComponentDrawing}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless this.model.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n {{#if this.canShowRevisionButton}}\\n \\n {{t \\\"components.model-component-drawing/edit.buttons.new-revision\\\"}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n {{#if (and (not this.drawing.isNew) this.userSession.canCreateComponentDrawing)}}\\n \\n {{t \\\"components.model-component-drawing/edit.buttons.update-title-reference\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{#unless this.drawing.isNew}}\\n {{#if this.hasRevisions}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n {{#unless revision.active}}\\n \\n \\n \\n \\n \\n {{/unless}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.model-component-drawing/edit.table.revision-column\\\"\\n }}PDF
{{revision.revision}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{#if this.userSession.canCreateComponentDrawing}}\\n {{t \\\"components.model-component-drawing/edit.buttons.edit-file\\\"}}\\n {{/if}}\\n
\\n \\n {{/if}}\\n{{/unless}}\\n\\n{{#if this.showNewRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.updateFileInPreviousRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.model-project-drawing/edit-revision.stop-editing-button\\\"}}\\n \\n {{t \\\"components.model-project-drawing/edit-revision.update-file-button\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showUpdateReference}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.canCreateComponentDrawing}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless this.model.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n {{#if this.canShowRevisionButton}}\\n \\n {{t \\\"components.model-component-drawing/edit.buttons.new-revision\\\"}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n {{#if (and (not this.drawing.isNew) this.userSession.canCreateComponentDrawing)}}\\n \\n {{t \\\"components.model-component-drawing/edit.buttons.update-title-reference\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{#unless this.drawing.isNew}}\\n {{#if this.hasRevisions}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n {{#unless revision.active}}\\n \\n \\n \\n \\n \\n {{/unless}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.model-component-drawing/edit.table.revision-column\\\"\\n }}PDF
{{revision.revision}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{#if this.userSession.canCreateComponentDrawing}}\\n {{t \\\"components.model-component-drawing/edit.buttons.edit-file\\\"}}\\n {{/if}}\\n
\\n \\n {{/if}}\\n{{/unless}}\\n\\n{{#if this.showNewRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.updateFileInPreviousRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.model-project-drawing/edit-revision.stop-editing-button\\\"}}\\n \\n {{t \\\"components.model-project-drawing/edit-revision.update-file-button\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showUpdateReference}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-component-drawing/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-component-drawing/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, gt } from '@ember/object/computed';\nimport EmberObject, { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { task } from 'ember-concurrency';\nimport Base from 'weldnote/components/base-edit';\n\n@classic\nexport default class Edit extends Base {\n @service\n store;\n\n @service\n router;\n\n @service\n ajax;\n\n @service('alert-message')\n alert;\n\n @service('intl')\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n drawing;\n\n revisionList = null;\n\n updateFileInPreviousRevision = false;\n\n showUpdateReference = false;\n\n // Holds the values to use when updating the reference number/title\n newReferenceNumber = null;\n\n newTitle = null;\n\n revisionsList = null;\n\n @alias('userSession.canCreateComponentDrawing')\n canEdit;\n\n // Whether or not to show the Revision button\n @computed('isEditing', 'drawing.isNew')\n get canShowRevisionButton() {\n return (\n !this.isEditing && !get(this, 'drawing.isNew') && this.userSession.canCreateComponentDrawing\n );\n }\n\n fetchRevisions = task(\n {\n restartable: true,\n },\n async () => {\n let drawing = get(this, 'drawing');\n let results = await get(this, 'data')\n .listComponentDrawingRevisions(drawing)\n .then((data) => {\n set(this, 'revisionList', data);\n });\n return results;\n }\n );\n\n @gt('revisionList.length', 1)\n hasRevisions;\n\n init() {\n super.init(...arguments);\n set(this, 'revisionList', []);\n if (!get(this, 'drawing.isNew')) {\n let revisions = get(this, 'fetchRevisions').perform();\n set(this, 'revisionList', revisions);\n }\n }\n\n cleanupNewRevision() {\n set(this, 'showNewRevision', false);\n set(this, 'newDrawing', null);\n set(this, 'newRevision', null);\n }\n\n cleanupEditFileInRevision() {\n set(this, 'updateFileInPreviousRevision', false);\n set(this, 'previousRevision', null);\n set(this, 'currentRevision', null);\n }\n\n clearUpdateReferenceErrors() {\n set(this, 'referenceError', null);\n set(this, 'titleError', null);\n }\n\n @action\n showNewRevisionModal() {\n set(this, 'showNewRevision', true);\n let revision = get(this, 'drawing.revision');\n if (!isNaN(parseInt(revision))) {\n set(this, 'newRevision', parseInt(revision) + 1);\n }\n set(\n this,\n 'newDrawing',\n EmberObject.create({\n metadata: {\n modelName: 'component-drawing',\n },\n })\n );\n }\n\n @action\n cancelNewRevision() {\n this.cleanupNewRevision();\n }\n\n @action\n async saveNewRevision() {\n let { loading, alert, intl, router } = this;\n\n if (isEmpty(get(this, 'newRevision'))) {\n set(this, 'revisionErrors', [intl.t('model-validations.generic.required-field')]);\n return;\n } else {\n set(this, 'revisionErrors', []);\n }\n\n loading.block();\n try {\n let result = await this.drawing.createRevision({\n revision: this.newRevision,\n fileUpload: this.newDrawing?.referencedDrawing?.id,\n });\n alert.success(intl.t('components.model-component-drawing/edit.messages.revision-created'));\n set(this, 'showNewRevision', false);\n router.transitionTo('component-drawing', result.id);\n } catch (e) {\n if (isDuplicateError(e)) {\n alert.error(\n intl.t('components.model-project/edit.drawings.saved-duplicate-error', {\n number: this.drawing.referenceNumber,\n })\n );\n } else {\n alert.error(e);\n }\n } finally {\n loading.unblock();\n }\n }\n\n @action\n showUpdateFileInRevision(revision) {\n set(this, 'currentRevision', revision);\n set(this, 'updateFileInPreviousRevision', true);\n set(\n this,\n 'previousRevision',\n EmberObject.create({\n metadata: {\n modelName: 'component-drawing',\n },\n\n id: get(revision, 'id'),\n })\n );\n }\n\n @action\n cancelUpdateFileInRevision() {\n this.cleanupEditFileInRevision();\n }\n\n @action\n updateFile(drawingId, file) {\n let { loading, alert, intl } = this;\n if (isEmpty(file) || isEmpty(get(file, 'id'))) {\n alert.error(intl.t('components.model-project-drawing/edit-revision.new-file-required'));\n return;\n }\n loading.block();\n let fileUploadId = get(file, 'id');\n get(this, 'ajax')\n .put('/component-drawings/updateRevisionFile', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({\n fileUploadId,\n drawingId,\n }),\n })\n .then(() => {\n get(this, 'fetchRevisions').perform();\n alert.success(\n intl.t('components.model-project-drawing/edit-revision.update-file-revision-success')\n );\n this.cleanupEditFileInRevision();\n })\n .catch((reason) => {\n console.log(reason);\n alert.error(\n intl.t('components.model-project-drawing/edit-revision.update-file-revision-error')\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n saveReference() {\n let { loading, alert, intl } = this;\n\n let referenceNumber = get(this, 'newReferenceNumber');\n let title = get(this, 'newTitle');\n\n this.clearUpdateReferenceErrors();\n\n if (isEmpty(referenceNumber)) {\n set(this, 'referenceError', [intl.t('edit-view.attributes.required')]);\n }\n\n if (isEmpty(title)) {\n set(this, 'titleError', [intl.t('edit-view.attributes.required')]);\n }\n\n if (isEmpty(referenceNumber) || isEmpty(title)) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n loading.block();\n\n let drawing = get(this, 'drawing');\n drawing\n .updateDrawingReference({\n referenceNumber,\n title,\n })\n .then(() => {\n alert.success(\n intl.t('components.model-project-drawing/edit-revision.update-reference-number-success')\n );\n // Reload the current drawing to display the new name in header\n get(this, 'drawing').reload();\n // Clean up the editing state\n this.clearUpdateReferenceErrors();\n set(this, 'showUpdateReference', false);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-project/edit.drawings.saved-duplicate-error', {\n number: referenceNumber,\n })\n );\n } else {\n alert.error(\n intl.t('components.model-project-drawing/edit-revision.update-reference-number-error')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n stopEditingReference() {\n set(this, 'showUpdateReference', false);\n this.clearUpdateReferenceErrors();\n }\n\n @action\n showUpdateReferenceModal() {\n set(this, 'showUpdateReference', true);\n set(this, 'newReferenceNumber', get(this, 'drawing.referenceNumber'));\n set(this, 'newTitle', get(this, 'drawing.title'));\n }\n\n @action\n async setGeneralDrawing(generalDrawingId) {\n let drawing = await get(this, 'store').findRecord('general-drawing', generalDrawingId);\n set(this, 'drawing.referencedDrawing', drawing);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if this.showVersionChoice}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-component-drawing/lookup.revision-table.columns.revision\\\"\\n }}{{t\\n \\\"components.model-component-drawing/lookup.revision-table.columns.revision-date\\\"\\n }}PDF
{{revision.revision}}{{format-date date=revision.createdOn time=true}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{t\\n \\\"components.model-component-drawing/lookup.buttons.choose-revision\\\"\\n }}\\n
\\n \\n {{else}}\\n {{#if this.generalDrawing}}\\n \\n \\n {{#if (not this.showAll)}}\\n {{t \\\"components.model-component-drawing/lookup.applied-filters\\\"}}\\n {{this.generalDrawing.visualLabelWithRev}}\\n {{/if}}\\n
\\n \\n
\\n \\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"generic.buttons.search\\\"}}\\n \\n {{t \\\"generic.buttons.clear\\\"}} \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n {{#if this.showVersionChoice}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-component-drawing/lookup.revision-table.columns.revision\\\"\\n }}{{t\\n \\\"components.model-component-drawing/lookup.revision-table.columns.revision-date\\\"\\n }}PDF
{{revision.revision}}{{format-date date=revision.createdOn time=true}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{t\\n \\\"components.model-component-drawing/lookup.buttons.choose-revision\\\"\\n }}\\n
\\n \\n {{else}}\\n {{#if this.generalDrawing}}\\n \\n \\n {{#if (not this.showAll)}}\\n {{t \\\"components.model-component-drawing/lookup.applied-filters\\\"}}\\n {{this.generalDrawing.visualLabelWithRev}}\\n {{/if}}\\n
\\n \\n
\\n \\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"generic.buttons.search\\\"}}\\n \\n {{t \\\"generic.buttons.clear\\\"}} \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-component-drawing/lookup-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-component-drawing/lookup-modal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Attributes from 'weldnote/config/types/component-drawing';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { tracked } from '@glimmer/tracking';\n\nconst { COMPONENT_DRAWING } = Attributes;\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class LookupModal extends Component {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n loading;\n\n @alias('selected')\n certificate;\n\n // Whether to show the Version choice\n @tracked\n showVersionChoice = false;\n\n // Reference the current drawing (loaded from the store) when choosing revisions\n @tracked\n currentDrawing = null;\n\n @tracked\n totalCount = 0;\n\n @tracked\n currenPage = 1;\n\n @tracked\n pageSize = 10;\n\n @alias('selectedGeneralDrawing')\n generalDrawing;\n\n @tracked\n showAll = false;\n\n @tracked\n revisionList = null;\n\n init() {\n super.init(...arguments);\n this.searchDrawing();\n }\n\n get gridColumns() {\n let { intl } = this;\n let referenceLabel = intl.t('model.component-drawing.referenceNumber.label');\n let titleLabel = intl.t('model.component-drawing.title.label');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'referenceNumber',\n label: referenceLabel,\n sortable: false,\n },\n {\n valuePath: 'title',\n label: titleLabel,\n sortable: false,\n },\n {\n label: 'Actions',\n width: '100px',\n sortable: false,\n cellComponent: 'model-component-drawing/lookup-modal/select-drawing',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n options.pageSize = this.pageSize;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllComponentDrawings(options, this.buildFilters());\n set(this, 'model', data);\n this.totalCount = data.meta.records;\n }\n );\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildFilters() {\n let filters = {};\n this.buildSingleFilter(COMPONENT_DRAWING.REFERENCE_NUMBER, 'anywhere', filters);\n if (!this.showAll) {\n this.buildSingleFilter('generalDrawing.id', COMPONENT_DRAWING.REFERENCED_DRAWING, filters);\n }\n return filters;\n }\n\n clearProperties() {\n this.setProperties({\n referenceNumber: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n resetPage() {\n this.currentPage = 1;\n }\n\n searchDrawing(pageNumber = 1) {\n this.currentPage = pageNumber;\n this.loadData.perform();\n }\n\n closeModal() {\n this.currentDrawing = null;\n this.revisionList = null;\n get(this, 'onClose')();\n }\n\n @action\n openSearch() {\n this.searchDrawing(1);\n }\n\n @action\n closeSearch() {\n this.closeModal();\n }\n\n @action\n search(pageNumber) {\n this.currentPage = pageNumber;\n this.searchDrawing(pageNumber);\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n async chooseDrawing(row) {\n let { loading, data } = this;\n loading.block();\n let drawing = await data.loadAllDataComponentDrawing(get(row, 'id'));\n let revisions = await data.listComponentDrawingRevisions(drawing);\n\n if (isEmpty(revisions) || revisions.length === 1) {\n get(this, 'onSelect')(get(row, 'id'));\n this.closeModal();\n } else {\n this.showVersionChoice = true;\n this.revisionList = revisions;\n this.currentDrawing = drawing;\n }\n loading.unblock();\n }\n\n @action\n chooseRevision(revisionId) {\n get(this, 'onSelect')(revisionId);\n this.closeModal();\n }\n\n @action\n searchAll() {\n this.showAll = !this.showAll;\n this.search();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\", {\"contents\":\"\\n \\n\",\"moduleName\":\"weldnote/components/model-component-drawing/lookup-modal/select-drawing.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-component-drawing/lookup-modal/select-drawing.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if @isEditing}}\\n
\\n \\n {{this.drawingLabel}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n {{else}}\\n

{{this.drawingLabel}}

\\n {{/if}}\\n {{#if (and @isEditing this.hasHelp)}}\\n {{this.helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{yield}}\\n\\n\\n{{#if this.isShowingSearch}}\\n \\n{{/if}}\", {\"contents\":\"\\n \\n {{#if @isEditing}}\\n
\\n \\n {{this.drawingLabel}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n {{else}}\\n

{{this.drawingLabel}}

\\n {{/if}}\\n {{#if (and @isEditing this.hasHelp)}}\\n {{this.helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{yield}}\\n\\n\\n{{#if this.isShowingSearch}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-component-drawing/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-component-drawing/lookup.hbs\"}});\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class Lookup extends Component {\n @notEmpty('helpText')\n hasHelp;\n\n @tracked\n isShowingSearch = false;\n\n get drawing() {\n return this.args.selected;\n }\n\n get generalDrawing() {\n return this.args.selectedGeneralDrawing;\n }\n\n get drawingLabel() {\n let { drawing } = this;\n if (drawing && drawing.id) {\n return this.drawing.visualLabelWithRev;\n }\n return '';\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n }\n\n @action\n closeSearch() {\n this.isShowingSearch = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-construction-standard/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-construction-standard/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { get, action } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/pods/construction-standard/attributes';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\nconst { CONSTRUCTION_STANDARD } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter, SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @alias('data.industryCodeOptions')\n industryCodeOptions;\n\n @alias('model')\n standard;\n\n _postSave() {\n this.data.bustConstructionStandardCache();\n }\n\n @action\n setIndustryCode(value) {\n this.setModelValue(CONSTRUCTION_STANDARD.INDUSTRY_CODE, value);\n }\n\n @action\n setDesignation(value) {\n this.setModelValue(CONSTRUCTION_STANDARD.DESIGNATION, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-destructive-testing/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-destructive-testing/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-electrode-type/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-electrode-type/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/electrode-type-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\nconst { ELECTRODE_TYPE } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter, SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @action\n setShortDesignation(value) {\n this.setModelValue(ELECTRODE_TYPE.SHORT_DESIGNATION, value);\n }\n\n @action\n setLongDesignation(value) {\n this.setModelValue(ELECTRODE_TYPE.LONG_DESIGNATION, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.userSession.isAccountAdmin (not this.examiningBody.isNew))}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.userSession.isAccountAdmin (not this.examiningBody.isNew))}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-examining-body/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-examining-body/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { get, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\n\n@classic\nexport default class Edit extends Base {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n examiningBody;\n\n @alias('userSession.isAccountAdmin')\n canEdit;\n\n _postSave() {\n this.data.bustExaminingBodyCache();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-examining-body/lookup-create.buttons.create\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-examining-body/lookup-create.buttons.create\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-examining-body/lookup-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-examining-body/lookup-create.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { set, action } from '@ember/object';\nimport { isBlank, isEmpty } from '@ember/utils';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class LookupCreate extends Component {\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @tracked\n isCreating = false;\n\n @tracked\n name = null;\n\n @tracked\n error = null;\n\n get hasError() {\n return !isEmpty(this.error);\n }\n\n @action\n showCreateWindow(text) {\n this.isCreating = true;\n this.name = text;\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.isCreating = true;\n this.name = select.searchText;\n }\n }\n\n @action\n closeWindow() {\n this.isCreating = false;\n }\n\n @action\n validateExaminingBody() {\n let { name, store, loading, alert, intl, data, model, analytics } = this;\n\n if (isEmpty(name)) {\n this.error = intl.t('components.model-examining-body/lookup-create.messages.errors.required');\n alert.error(intl.t('components.model-examining-body/lookup-create.messages.errors.required'));\n return;\n }\n\n let newExaminingBody = store.createRecord('examining-body');\n set(newExaminingBody, 'name', name);\n\n loading.block();\n newExaminingBody\n .save()\n .then((savedExaminingBody) => {\n this.args.onUpdate(savedExaminingBody);\n data.bustExaminingBodyCache();\n alert.success(intl.t('components.model-examining-body/lookup-create.messages.success'));\n this.isCreating = false;\n analytics.trackEvent('create-examining-body-inline', {\n type: 'examining-body',\n category: 'create-inline',\n name,\n });\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.duplicate')\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(intl.t('generic.error.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-examining-body/lookup-create.messages.errors.generic')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setName(name) {\n this.name = name;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{option.commercialDesignation}}\\n \\n\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n

\\n {{@fillerMaterial.specification.visualLabel}}\\n {{@fillerMaterial.classification.visualLabel}}\\n {{@fillerMaterial.group.visualLabel}}\\n

\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t\\n \\\"components.model-filler-material-commercial-designation/creator.add-designation-btn\\\"\\n }}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n \\n {{option.commercialDesignation}}\\n \\n\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n

\\n {{@fillerMaterial.specification.visualLabel}}\\n {{@fillerMaterial.classification.visualLabel}}\\n {{@fillerMaterial.group.visualLabel}}\\n

\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t\\n \\\"components.model-filler-material-commercial-designation/creator.add-designation-btn\\\"\\n }}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-filler-material-commercial-designation/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-filler-material-commercial-designation/creator.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty, isBlank } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport type IntlService from 'ember-intl/services/intl';\nimport type WeldnoteDataService from 'weldnote/services/weldnote-data';\n\ninterface CreatorArgs {\n disabled?: boolean;\n isEditing?: boolean;\n model: unknown;\n attribute: string;\n onChange: (value: unknown) => void;\n fillerMaterial: any;\n onCreate: (designation: string, fillerMaterial: any) => void;\n industryCode: any;\n}\n\ninterface PowerSelectAPI {\n isOpen: boolean;\n highlighted: unknown;\n searchText: string;\n}\n\nexport default class ModelFillerMaterialCommercialDesignationCreatorComponent extends Component {\n @service declare intl: IntlService;\n @service('weldnote-data') declare weldnoteData: WeldnoteDataService;\n\n @tracked isCreating = false;\n @tracked error = '';\n @tracked options: unknown;\n @tracked designation = '';\n\n currentOptionsFillerMaterialId: string | undefined;\n\n get hasError(): boolean {\n return !isEmpty(this.error);\n }\n\n get showCreateButton(): boolean {\n return !isEmpty(this.args.fillerMaterial?.id);\n }\n\n searchCommercialDesignations = task(\n { restartable: true },\n async (term: string | null, debounceMs?: number) => {\n if (debounceMs === undefined || isNaN(debounceMs)) {\n debounceMs = 250;\n }\n await timeout(debounceMs);\n\n let filters: Record = {\n commercialDesignation: term ?? undefined,\n fillerMaterialId: this.args.fillerMaterial?.id,\n industryCodeId: this.args.industryCode?.id,\n };\n\n return await (this.weldnoteData as any).listAllFillerMaterialCommercialDesignations(\n {},\n filters\n );\n }\n );\n\n async isTermInOptions(term: string): Promise {\n if (isEmpty(term)) {\n return false;\n }\n\n let existingDesignations = await this.searchCommercialDesignations.perform(term, 0);\n return existingDesignations.length > 0;\n }\n\n @action\n create(term: string): void {\n this.isCreating = true;\n this.designation = term;\n }\n\n @action\n async validateDesignation(): Promise {\n this.error = '';\n\n if (isEmpty(this.designation)) {\n this.error = this.intl.t('edit-view.attributes.required').toString();\n }\n\n let commercialDesignationExists = await this.isTermInOptions(this.designation);\n if (commercialDesignationExists) {\n this.error = this.intl\n .t(\n 'components.model-filler-material-commercial-designation/creator.duplicate-designation',\n {\n designation: this.designation,\n }\n )\n .toString();\n }\n\n if (!this.hasError) {\n this.args.onCreate(this.designation, this.args.fillerMaterial);\n this.isCreating = false;\n this.options = null; // forces commercial designations re-fetch\n }\n }\n\n @action\n closeWindow(): void {\n this.isCreating = false;\n }\n\n @action\n createOnEnter(_select: PowerSelectAPI, e: KeyboardEvent): void {\n if (\n e.keyCode === 13 &&\n _select.isOpen &&\n !_select.highlighted &&\n !isBlank(_select.searchText)\n ) {\n this.isCreating = true;\n this.designation = _select.searchText;\n }\n }\n\n @action\n setInitialOptions(): void {\n let fillerMaterialId = this.args.fillerMaterial?.id;\n if (isEmpty(this.options) || this.currentOptionsFillerMaterialId !== fillerMaterialId) {\n this.options = this.searchCommercialDesignations.perform(null, 0);\n this.currentOptionsFillerMaterialId = fillerMaterialId;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n{{#if @showCreateButton}}\\n \\n{{/if}}\", {\"contents\":\"\\n\\n{{#if @showCreateButton}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-filler-material-commercial-designation/creator/after-options.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-filler-material-commercial-designation/creator/after-options.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-filler-material-commercial-designation/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-filler-material-commercial-designation/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport { service } from '@ember/service';\n\n@classic\nexport default class Edit extends Base {\n\n @service\n userSession;\n\n @action\n setFillerMaterial(material) {\n set(this, 'model.fillerMaterial', material);\n }\n\n @action\n removeFillerMaterial() {\n set(this, 'model.fillerMaterial', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-filler-material-group/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-filler-material-group/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @alias('model')\n group;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.canEditMaterial this.canEdit)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if\\n (and this.userSession.canDeleteFillerMaterial (not this.fillerMaterial.isNew) this.canEdit)\\n }}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.specification}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.classification}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n {{#if (not (has-value this.fillerMaterial.code.id))}}\\n {{lov.help}}\\n {{/if}}\\n {{lov.errors}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.canEditMaterial this.canEdit)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if\\n (and this.userSession.canDeleteFillerMaterial (not this.fillerMaterial.isNew) this.canEdit)\\n }}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.specification}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.classification}}\\n \\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n {{#if (not (has-value this.fillerMaterial.code.id))}}\\n {{lov.help}}\\n {{/if}}\\n {{lov.errors}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\",\"moduleName\":\"weldnote/components/model-filler-material/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-filler-material/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { empty, alias } from '@ember/object/computed';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty, isBlank } from '@ember/utils';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { task, timeout } from 'ember-concurrency';\n\nconst DEBOUNCE_MS = 250;\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n store;\n\n @alias('model')\n fillerMaterial;\n\n @empty('fillerMaterial.code.id')\n groupDisabled;\n\n @alias('data.weldingProcessOptions')\n weldingProcessOptionsAll;\n\n @filterFromCollectionByKey(\n 'weldingProcessOptionsAll',\n 'industryCode.id',\n 'fillerMaterial.code.id'\n )\n weldingProcessOptions;\n\n @empty('fillerMaterial.code.id')\n weldingProcessDisabled;\n\n @alias('fillerMaterial.code.id')\n currentIndustryCodeId;\n\n @alias('userSession.canCreateFillerMaterial')\n canEditMaterial;\n\n @computed('model')\n get breadcrumbs() {\n let result = [];\n result.pushObject({\n label: this.intl.t('model.filler-material.model-plural'),\n route: 'filler-materials',\n });\n if (this.model.isNew) {\n result.pushObject({\n label: this.intl.t('components.model-filler-material/edit.messages.new'),\n });\n } else {\n result.pushObject({\n label: this.fillerMaterial.visualLabel,\n });\n }\n return result;\n }\n\n searchSpecification = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(DEBOUNCE_MS);\n let data = await this.data.findFillerMaterialSpecification(term);\n return data;\n }\n );\n\n searchClassification = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(DEBOUNCE_MS);\n let data = await this.data.findFillerMaterialClassification(term);\n return data;\n }\n );\n\n searchGroup = task(\n {\n restartable: true,\n },\n async () => {\n await timeout(DEBOUNCE_MS);\n let industryCode = get(this, 'fillerMaterial.code');\n let data = await this.data.listAllFillerMaterialGroups(\n { pageSize: 200 },\n { code: industryCode }\n );\n return data;\n }\n );\n\n init() {\n super.init(...arguments);\n if (!isEmpty(get(this, 'fillerMaterial.code.id'))) {\n this.searchGroup.perform();\n }\n }\n\n createSpecificationInternal(term, api) {\n if (!isEmpty(term)) {\n let specification = this.store.createRecord('filler-material-specification');\n set(specification, 'specification', term);\n set(this, 'fillerMaterial.specification', specification);\n specification.save().then((saved) => {\n if (api) {\n api.actions.close();\n }\n });\n }\n }\n\n createClassificationInternal(term, api) {\n if (!isEmpty(term)) {\n let classification = this.store.createRecord('filler-material-classification');\n set(classification, 'classification', term);\n set(this, 'fillerMaterial.classification', classification);\n classification.save().then((saved) => {\n if (api) {\n api.actions.close();\n }\n });\n }\n }\n\n @action\n setIndustryCode(code) {\n set(this, 'fillerMaterial.code', code);\n set(this, 'fillerMaterial.group', null);\n this.searchGroup.perform();\n }\n\n @action\n createSpecification(term, api) {\n this.createSpecificationInternal(term, api);\n }\n\n @action\n createClassification(term, api) {\n this.createClassificationInternal(term, api);\n }\n\n @action\n createSpecificationOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.createSpecificationInternal(select.searchText, select);\n }\n }\n\n @action\n createClassificationOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.createClassificationInternal(select.searchText, select);\n }\n }\n\n @action\n searchFillerMaterialGroups(term) {\n return this.data.findFillerMaterialGroup(term, this.currentIndustryCodeId);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.canCreateWelder}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.canShowDownloadButton}}\\n \\n {{t \\\"components.model-fitter/edit.download-button\\\"}}\\n {{/if}}\\n\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-fitter/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n\\n {{#if this.hasFitterErrors}}\\n
\\n \\n {{#each this.fitterReportErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-fitter/edit.certificate-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n \\n
\\n {{/if}}\\n\\n {{#if this.hasFitterError}}\\n
\\n \\n {{#if (eq this.fitterReportError \\\"no-certificates\\\")}}\\n {{t \\\"components.model-fitter/edit.no-certificates\\\"}}\\n {{/if}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n {{t \\\"components.model-fitter/edit.miscellaneous-panel-title\\\" fitter=this.fitter.fitterName}}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.canCreateWelder}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.canShowDownloadButton}}\\n \\n {{t \\\"components.model-fitter/edit.download-button\\\"}}\\n {{/if}}\\n\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-fitter/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n\\n {{#if this.hasFitterErrors}}\\n
\\n \\n {{#each this.fitterReportErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-fitter/edit.certificate-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n \\n
\\n {{/if}}\\n\\n {{#if this.hasFitterError}}\\n
\\n \\n {{#if (eq this.fitterReportError \\\"no-certificates\\\")}}\\n {{t \\\"components.model-fitter/edit.no-certificates\\\"}}\\n {{/if}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n {{t \\\"components.model-fitter/edit.miscellaneous-panel-title\\\" fitter=this.fitter.fitterName}}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\",\"moduleName\":\"weldnote/components/model-fitter/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-fitter/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty, alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport { get, set, getProperties, action, computed } from '@ember/object';\nimport Rules from 'weldnote/pods/fitter/attributes';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport { task, timeout } from 'ember-concurrency';\nimport { isEmpty } from '@ember/utils';\n\nconst { FITTER } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service\n taskMonitor;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('model')\n fitter;\n\n showExpiredMiscellaneous = false;\n\n pageNumberMiscellaneous = 1;\n\n @notEmpty('fitterReportErrors')\n hasFitterErrors;\n\n @notEmpty('fitterReportError')\n hasFitterError;\n\n @notEmpty('fitter.fitterReportPath')\n hasFilePath;\n\n fitterReportErrors = null;\n\n fitterReportError = null;\n\n getAttributeLabel(attribute) {\n return this.intl.t(`model.miscellaneous-certificate.${attribute}.label`);\n }\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingReport() {\n let tasks = get(this, 'taskMonitor.currentTasks');\n let contextTask = tasks.find((item) => {\n if (item.get('contextName') === 'fitter-report') {\n if (item.get('contextId') === get(this, 'fitter.id')) {\n if (item.get('status') === '200') {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n @computed('isGeneratingReport')\n get canShowCreateButton() {\n let isGeneratingReport = get(this, 'isGeneratingReport');\n if (isGeneratingReport) {\n return false;\n }\n\n return true;\n }\n\n @computed('hasFilePath', 'isGeneratingReport')\n get canShowDownloadButton() {\n let isGeneratingReport = get(this, 'isGeneratingReport');\n if (isGeneratingReport) {\n return false;\n }\n\n let hasFilePath = get(this, 'hasFilePath');\n if (!hasFilePath) {\n return false;\n }\n\n return true;\n }\n\n @computed\n get columnsMiscellaneous() {\n let certificateNumberLabel = this.getAttributeLabel('certificateNumber');\n let typeLabel = this.getAttributeLabel('type');\n let expirationDateLabel = this.getAttributeLabel('expirationDate');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n cellComponent: 'weldnote-grid/miscellaneous-certificate-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'type.type',\n label: typeLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'expirationDate',\n label: expirationDateLabel,\n cellComponent: 'weldnote-grid/date-cell',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n\n fetchMiscellaneousCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(100);\n let filters = {};\n filters.person = get(this, 'fitter.id');\n if (this.showExpiredMiscellaneous) {\n filters._activeExpired = true;\n }\n if (this.showArchivedMiscellaneous) {\n filters._activeArchived = true;\n }\n let options = { page: this.pageNumberMiscellaneous };\n let certificates = await this.data.listAllMiscellaneousCertificates(options, filters);\n set(this, 'miscellaneousCertificates', certificates);\n set(this, 'miscellaneousCertificateCount', certificates.meta.records);\n }\n );\n\n init() {\n super.init(...arguments);\n set(this, 'fitterReportErrors', []);\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n setShowExpiredMiscellaneous(value) {\n set(this, 'showExpiredMiscellaneous', value);\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n setShowArchivedMiscellaneous(value) {\n set(this, 'showArchivedMiscellaneous', value);\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n generateFitterReport() {\n let { loading, alert, taskMonitor, intl, fitter } = this;\n let fitterId = fitter.id;\n if (fitter.validate()) {\n get(this, 'fitterReportErrors').clear();\n\n if (taskMonitor.hasTaskByContext('fitter-report', fitterId)) {\n taskMonitor.removeTaskByContext('fitter-report', fitterId);\n }\n loading.block();\n fitter\n .createFitterReport()\n .then((response) => {\n if (response.status === '200') {\n get(taskMonitor, 'monitorTask').perform(response.taskIdentifier);\n } else {\n let error = JSON.parse(response.error);\n if (error.certificates) {\n set(this, 'fitterReportErrors', error.certificates);\n } else if (error.errors) {\n set(this, 'fitterReportError', error.errors);\n }\n }\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n finishFitterReportGeneration() {\n let { taskMonitor, fitter } = this;\n taskMonitor.removeTaskByContext('fitter-report', fitter.id);\n fitter.reload();\n }\n\n @action\n searchMiscellaneous(pageNumber) {\n set(this, 'pageNumberMiscellaneous', pageNumber);\n this.fetchMiscellaneousCertificates.perform();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n

{{this.flux.flux}}\\n {{this.flux.specification.specification}}

\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n {{#if this.showSearch}}{{/if}}\\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-flux-commercial-designation/creator.add-designation-btn\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n

{{this.flux.flux}}\\n {{this.flux.specification.specification}}

\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n {{#if this.showSearch}}{{/if}}\\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-flux-commercial-designation/creator.add-designation-btn\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-flux-commercial-designation/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-flux-commercial-designation/creator.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty, isBlank } from '@ember/utils';\n\n@classic\nexport default class Creator extends Component {\n @service\n intl;\n\n isCreating = false;\n\n @notEmpty('error')\n hasError;\n\n error = '';\n\n isTermInOptions(term) {\n if (isEmpty(term)) {\n return false;\n }\n\n if (this.options) {\n let result = this.options.filter((e) => {\n let designation = e.get('commercialDesignation').toLowerCase();\n let searchTerm = term.toLowerCase();\n if (designation.indexOf(searchTerm) > -1) {\n return true;\n }\n return false;\n });\n\n if (result.get('length') > 0) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n }\n\n @action\n create(term) {\n set(this, 'isCreating', true);\n set(this, 'designation', term);\n }\n\n @action\n validateDesignation() {\n set(this, 'error', '');\n\n if (isEmpty(this.designation)) {\n set(this, 'error', this.intl.t('edit-view.attributes.required'));\n }\n if (this.isTermInOptions(this.designation)) {\n this.set(\n 'error',\n this.intl\n .t('components.model-flux-commercial-designation/creator.suggestion', {\n term: this.designation,\n })\n .toString()\n );\n }\n\n if (!this.hasError) {\n this.onCreate(this.designation, this.flux);\n set(this, 'isCreating', false);\n }\n }\n\n @action\n closeWindow() {\n set(this, 'isCreating', false);\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n set(this, 'isCreating', true);\n set(this, 'designation', select.searchText);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-flux-commercial-designation/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-flux-commercial-designation/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\n\n@classic\nexport default class Edit extends Base {\n fluxOptions = [];\n\n @service('weldnoteData')\n data;\n\n @service\n userSession;\n\n @action\n setFlux(flux) {\n set(this, 'model.flux', flux);\n }\n\n @action\n removeFlux() {\n set(this, 'model.flux', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-flux-specification/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-flux-specification/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-flux/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-flux/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnoteData')\n data;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n

{{this.gas.specification.specification}}\\n {{this.gas.symbol}}\\n {{this.gas.composition}}

\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{@error}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-gas-commercial-designation/creator.add-designation-btn\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n

{{this.gas.specification.specification}}\\n {{this.gas.symbol}}\\n {{this.gas.composition}}

\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{@error}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-gas-commercial-designation/creator.add-designation-btn\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-gas-commercial-designation/creator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-gas-commercial-designation/creator.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty, isBlank } from '@ember/utils';\n\n@classic\nexport default class Creator extends Component {\n @service\n intl;\n\n isCreating = false;\n\n @notEmpty('error')\n hasError;\n\n error = '';\n\n gasMixture = '';\n\n isTermInOptions(term) {\n if (isEmpty(term)) {\n return false;\n }\n\n if (this.options) {\n let result = this.options.filter((e) => {\n return e.get('commercialDesignation').toLowerCase() === term.toLowerCase();\n });\n\n if (result.get('length') > 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return false;\n }\n\n @action\n create(term) {\n set(this, 'isCreating', true);\n set(this, 'designation', term);\n }\n\n @action\n validateDesignation() {\n set(this, 'error', '');\n\n if (isEmpty(this.designation)) {\n set(this, 'error', this.intl.t('edit-view.attributes.required'));\n }\n if (this.isTermInOptions(this.designation)) {\n this.set(\n 'error',\n this.intl\n .t('components.model-gas-commercial-designation/creator.suggestion', {\n term: this.designation,\n })\n .toString()\n );\n }\n\n if (!this.hasError) {\n this.onCreate(this.designation, this.gas, this.gasMixture);\n set(this, 'isCreating', false);\n }\n }\n\n @action\n closeWindow() {\n set(this, 'isCreating', false);\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n set(this, 'isCreating', true);\n set(this, 'designation', select.searchText);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-gas-commercial-designation/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-gas-commercial-designation/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Base from 'weldnote/components/base-edit';\n\n@classic\nexport default class Edit extends Base {\n gasOptions = [];\n\n @service('weldnoteData')\n data;\n\n @service\n userSession;\n\n @action\n setGas(gas) {\n set(this, 'model.gas', gas);\n }\n\n @action\n findGas() {\n if (isEmpty(this.gasOptions)) {\n this.data.searchGas('').then((gases) => {\n set(this, 'gasOptions', gases);\n });\n }\n }\n\n @action\n searchGas(term) {\n return this.data.findGas(term);\n }\n\n @action\n removeGas() {\n set(this, 'model.gas', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-gas-specification/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-gas-specification/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-gas/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-gas/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnoteData')\n data;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.canCreateGeneralDrawing}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless this.model.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n {{#if this.canShowRevisionButton}}\\n \\n {{t \\\"components.model-general-drawing/edit.buttons.new-revision\\\"}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n {{#if (and (not this.drawing.isNew) this.userSession.canCreateGeneralDrawing)}}\\n \\n {{t \\\"components.model-general-drawing/edit.buttons.update-title-reference\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{#unless this.drawing.isNew}}\\n {{#if this.hasRevisions}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n {{#unless revision.active}}\\n \\n \\n \\n \\n \\n {{/unless}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.model-general-drawing/edit.table.revision-column\\\"\\n }}PDF
{{revision.revision}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{#if this.userSession.canCreateGeneralDrawing}}\\n {{t \\\"components.model-general-drawing/edit.buttons.edit-file\\\"}}\\n {{/if}}\\n
\\n \\n {{/if}}\\n{{/unless}}\\n\\n{{#if this.showNewRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.updateFileInPreviousRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.model-project-drawing/edit-revision.stop-editing-button\\\"}}\\n \\n {{t \\\"components.model-project-drawing/edit-revision.update-file-button\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showUpdateReference}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.canCreateGeneralDrawing}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless this.model.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n {{#if this.canShowRevisionButton}}\\n \\n {{t \\\"components.model-general-drawing/edit.buttons.new-revision\\\"}}\\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n {{#if (and (not this.drawing.isNew) this.userSession.canCreateGeneralDrawing)}}\\n \\n {{t \\\"components.model-general-drawing/edit.buttons.update-title-reference\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{#unless this.drawing.isNew}}\\n {{#if this.hasRevisions}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n {{#unless revision.active}}\\n \\n \\n \\n \\n \\n {{/unless}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.model-general-drawing/edit.table.revision-column\\\"\\n }}PDF
{{revision.revision}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{#if this.userSession.canCreateGeneralDrawing}}\\n {{t \\\"components.model-general-drawing/edit.buttons.edit-file\\\"}}\\n {{/if}}\\n
\\n \\n {{/if}}\\n{{/unless}}\\n\\n{{#if this.showNewRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.updateFileInPreviousRevision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t \\\"components.model-project-drawing/edit-revision.stop-editing-button\\\"}}\\n \\n {{t \\\"components.model-project-drawing/edit-revision.update-file-button\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showUpdateReference}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-general-drawing/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-general-drawing/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, gt } from '@ember/object/computed';\nimport EmberObject, { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { task } from 'ember-concurrency';\nimport Base from 'weldnote/components/base-edit';\nimport { tracked } from '@glimmer/tracking';\nimport ENV from 'weldnote/config/environment';\n\n@classic\nexport default class Edit extends Base {\n @service\n store;\n\n @service\n router;\n\n @service\n ajax;\n\n @service('alert-message')\n alert;\n\n @service('intl')\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n drawing;\n\n revisionList = null;\n\n updateFileInPreviousRevision = false;\n\n showUpdateReference = false;\n\n // Holds the values to use when updating the reference number/title\n newReferenceNumber = null;\n\n newTitle = null;\n\n revisionsList = null;\n\n @alias('userSession.canCreateGeneralDrawing')\n canEdit;\n\n // Whether or not to show the Revision button\n @computed('isEditing', 'drawing.isNew')\n get canShowRevisionButton() {\n return (\n !get(this, 'isEditing') &&\n !get(this, 'drawing.isNew') &&\n this.userSession.canCreateGeneralDrawing\n );\n }\n\n fetchRevisions = task(\n {\n restartable: true,\n },\n async () => {\n let drawing = get(this, 'drawing');\n let results = await get(this, 'data')\n .listGeneralDrawingRevisions(drawing)\n .then((data) => {\n set(this, 'revisionList', data);\n });\n return results;\n }\n );\n\n @gt('revisionList.length', 1)\n hasRevisions;\n\n init() {\n super.init(...arguments);\n set(this, 'revisionList', []);\n if (!get(this, 'drawing.isNew')) {\n let revisions = get(this, 'fetchRevisions').perform();\n set(this, 'revisionList', revisions);\n }\n }\n\n cleanupNewRevision() {\n set(this, 'showNewRevision', false);\n set(this, 'newDrawing', null);\n set(this, 'newRevision', null);\n }\n\n cleanupEditFileInRevision() {\n set(this, 'updateFileInPreviousRevision', false);\n set(this, 'previousRevision', null);\n set(this, 'currentRevision', null);\n }\n\n clearUpdateReferenceErrors() {\n set(this, 'referenceError', null);\n set(this, 'titleError', null);\n }\n\n @action\n showNewRevisionModal() {\n set(this, 'showNewRevision', true);\n let revision = get(this, 'drawing.revision');\n if (!isNaN(parseInt(revision))) {\n set(this, 'newRevision', parseInt(revision) + 1);\n }\n set(\n this,\n 'newDrawing',\n EmberObject.create({\n metadata: {\n modelName: 'general-drawing',\n },\n })\n );\n }\n\n @action\n cancelNewRevision() {\n this.cleanupNewRevision();\n }\n\n @action\n async saveNewRevision() {\n let { loading, alert, router, intl } = this;\n\n if (isEmpty(this.newRevision)) {\n set(this, 'revisionErrors', [intl.t('model-validations.generic.required-field')]);\n return;\n } else {\n set(this, 'revisionErrors', []);\n }\n\n loading.block();\n try {\n let result = await this.drawing.createRevision({\n revision: this.newRevision,\n fileUpload: this.newDrawing?.drawingContent?.id,\n });\n alert.success(intl.t('components.model-general-drawing/edit.messages.revision-created'));\n set(this, 'showNewRevision', false);\n router.transitionTo('general-drawing', result.id);\n } catch (e) {\n if (isDuplicateError(e)) {\n alert.error(\n intl.t('components.model-project/edit.drawings.saved-duplicate-error', {\n number: this.drawing.referenceNumber,\n })\n );\n } else {\n alert.error(e);\n }\n } finally {\n loading.unblock();\n }\n }\n\n @action\n showUpdateFileInRevision(revision) {\n set(this, 'currentRevision', revision);\n set(this, 'updateFileInPreviousRevision', true);\n set(\n this,\n 'previousRevision',\n EmberObject.create({\n metadata: {\n modelName: 'general-drawing',\n },\n\n id: get(revision, 'id'),\n })\n );\n }\n\n @action\n cancelUpdateFileInRevision() {\n this.cleanupEditFileInRevision();\n }\n\n @action\n updateFile(drawingId, file) {\n let { loading, alert, intl } = this;\n if (isEmpty(file) || isEmpty(get(file, 'id'))) {\n alert.error(intl.t('components.model-project-drawing/edit-revision.new-file-required'));\n return;\n }\n loading.block();\n let fileUploadId = get(file, 'id');\n this.ajax\n .put('/general-drawings/updateRevisionFile', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({\n fileUploadId,\n drawingId,\n }),\n })\n .then(() => {\n this.fetchRevisions.perform();\n alert.success(\n intl.t('components.model-project-drawing/edit-revision.update-file-revision-success')\n );\n this.cleanupEditFileInRevision();\n })\n .catch((reason) => {\n console.log(reason);\n alert.error(\n intl.t('components.model-project-drawing/edit-revision.update-file-revision-error')\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n saveReference() {\n let { loading, alert, intl } = this;\n\n let referenceNumber = get(this, 'newReferenceNumber');\n let title = get(this, 'newTitle');\n\n this.clearUpdateReferenceErrors();\n\n if (isEmpty(referenceNumber)) {\n set(this, 'referenceError', [intl.t('edit-view.attributes.required')]);\n }\n\n if (isEmpty(title)) {\n set(this, 'titleError', [intl.t('edit-view.attributes.required')]);\n }\n\n if (isEmpty(referenceNumber) || isEmpty(title)) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n loading.block();\n\n let drawing = get(this, 'drawing');\n drawing\n .updateDrawingReference({\n referenceNumber,\n title,\n })\n .then(() => {\n alert.success(\n intl.t('components.model-project-drawing/edit-revision.update-reference-number-success')\n );\n // Reload the current drawing to display the new name in header\n get(this, 'drawing').reload();\n // Clean up the editing state\n this.clearUpdateReferenceErrors();\n set(this, 'showUpdateReference', false);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-project/edit.drawings.saved-duplicate-error', {\n number: referenceNumber,\n })\n );\n } else {\n alert.error(\n intl.t('components.model-project-drawing/edit-revision.update-reference-number-error')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n stopEditingReference() {\n set(this, 'showUpdateReference', false);\n this.clearUpdateReferenceErrors();\n }\n\n @action\n showUpdateReferenceModal() {\n set(this, 'showUpdateReference', true);\n set(this, 'newReferenceNumber', get(this, 'drawing.referenceNumber'));\n set(this, 'newTitle', get(this, 'drawing.title'));\n }\n\n get assemblyLink() {\n if (this.model?.id) {\n return `/assembly/reference-drawings/${this.model.id}?showHelp`;\n } else {\n return '/assembly/reference-drawings?showHelp';\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if this.showVersionChoice}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-general-drawing/lookup.revision-table.columns.revision\\\"\\n }}{{t\\n \\\"components.model-general-drawing/lookup.revision-table.columns.revision-date\\\"\\n }}PDF
{{revision.revision}}{{format-date date=revision.createdOn time=true}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{t \\\"components.model-general-drawing/lookup.buttons.choose-revision\\\"}}\\n
\\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"generic.buttons.search\\\"}}\\n \\n {{t \\\"generic.buttons.clear\\\"}} \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n {{#if this.showVersionChoice}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisionList as |revision|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-general-drawing/lookup.revision-table.columns.revision\\\"\\n }}{{t\\n \\\"components.model-general-drawing/lookup.revision-table.columns.revision-date\\\"\\n }}PDF
{{revision.revision}}{{format-date date=revision.createdOn time=true}}\\n {{#if (has-value revision.drawingContentPath)}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{t \\\"components.model-general-drawing/lookup.buttons.choose-revision\\\"}}\\n
\\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"generic.buttons.search\\\"}}\\n \\n {{t \\\"generic.buttons.clear\\\"}} \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-general-drawing/lookup-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-general-drawing/lookup-modal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Attributes from 'weldnote/config/types/general-drawing';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst { GENERAL_DRAWING } = Attributes;\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class LookupModal extends Component {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n intl;\n\n @service\n loading;\n\n @service\n store;\n\n isShowingSearch = false;\n\n @alias('selected')\n certificate;\n\n // Whether to show the Version choice\n showVersionChoice = false;\n\n // Reference the current drawing (loaded from the store) when choosing revisions\n currentDrawing = null;\n\n totalCount = 0;\n\n currenPage = 1;\n\n pageSize = 10;\n\n init() {\n super.init(...arguments);\n this.searchDrawing();\n }\n\n @computed\n get gridColumns() {\n let { intl } = this;\n let referenceLabel = intl.t('model.general-drawing.referenceNumber.label');\n let titleLabel = intl.t('model.general-drawing.title.label');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'referenceNumber',\n label: referenceLabel,\n width: '150px',\n sortable: false,\n },\n {\n valuePath: 'title',\n label: titleLabel,\n sortable: false,\n },\n {\n label: 'Actions',\n width: '100px',\n sortable: false,\n cellComponent: 'model-general-drawing/lookup-modal/select-drawing',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = get(this, 'currentPage');\n options.pageSize = get(this, 'pageSize');\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllGeneralDrawings(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildFilters() {\n let filters = {};\n this.buildSingleFilter(GENERAL_DRAWING.REFERENCE_NUMBER, 'anywhere', filters);\n return filters;\n }\n\n clearProperties() {\n this.setProperties({\n referenceNumber: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchDrawing(pageNumber = 1) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n closeModal() {\n set(this, 'currentDrawing', null);\n set(this, 'revisionList', null);\n get(this, 'onClose')();\n }\n\n @action\n openSearch() {\n this.searchDrawing(1);\n }\n\n @action\n closeSearch() {\n this.closeModal();\n }\n\n @action\n onEnterSearch(value) {\n set(this, 'referenceNumber', value);\n this.search(1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.searchDrawing(pageNumber);\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n async chooseDrawing(row) {\n let { loading, store } = this;\n loading.block();\n let drawing = await store.findRecord('general-drawing', get(row, 'id'));\n let revisions = await this.data.listGeneralDrawingRevisions(drawing);\n\n if (isEmpty(revisions) || revisions.length === 1) {\n get(this, 'onSelect')(get(row, 'id'));\n this.closeModal();\n } else {\n set(this, 'showVersionChoice', true);\n set(this, 'revisionList', revisions);\n set(this, 'currentDrawing', drawing);\n }\n loading.unblock();\n }\n\n @action\n chooseRevision(revisionId) {\n get(this, 'onSelect')(revisionId);\n this.closeModal();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/model-general-drawing/lookup-modal/select-drawing.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-general-drawing/lookup-modal/select-drawing.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n {{#if @isEditing}}\\n
\\n \\n {{this.drawingLabel}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n {{else}}\\n

{{this.drawingLabel}}

\\n {{/if}}\\n {{#if (and @isEditing this.hasHelp)}}\\n {{@helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{yield}}\\n
\\n\\n{{#if this.isShowingSearch}}\\n \\n{{/if}}\", {\"contents\":\"
\\n \\n {{#if @isEditing}}\\n
\\n \\n {{this.drawingLabel}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n
\\n
\\n {{else}}\\n

{{this.drawingLabel}}

\\n {{/if}}\\n {{#if (and @isEditing this.hasHelp)}}\\n {{@helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{yield}}\\n
\\n\\n{{#if this.isShowingSearch}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-general-drawing/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-general-drawing/lookup.hbs\"}});\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class Lookup extends Component {\n @notEmpty('helpText')\n hasHelp;\n\n @tracked\n isShowingSearch = false;\n\n get drawing() {\n return this.args.selected;\n }\n\n get drawingLabel() {\n let { drawing } = this;\n if (drawing && drawing.id) {\n return this.drawing.visualLabelWithRev;\n }\n return '';\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n }\n\n @action\n closeSearch() {\n this.isShowingSearch = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.canUserEdit}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.canEdit (not this.grooveDesign.isNew) this.canCreateWeldLayerConfiguration)}}\\n \\n \\n Create Weld Layer Configuration\\n \\n \\n {{/if}}\\n {{#if (and (not this.grooveDesign.isNew) this.canUserEdit)}}\\n \\n {{/if}}\\n\\n {{#unless this.canEdit}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.system-design\\\"}}\\n \\n
\\n {{/unless}}\\n\\n {{#if this.showMissingValuesMessage}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.fill-all-details\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isShowingCreateWeldLayerConfiguration}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{yield}}\\n \\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}s\\n \\n {{t \\\"components.model-groove-design.buttons.create-weld-layer\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if (has-value this.deleteErrors)}}\\n \\n {{t \\\"components.model-groove-design.errors.text-message\\\"}}\\n
    \\n {{#each this.deleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"WPS\\\")}}\\n \\n {{t \\\"components.model-groove-design.errors.wps-prevent-deletion\\\"}}:\\n {{error.label}}\\n \\n {{else if (eq error.type \\\"PQR\\\")}}\\n \\n {{t \\\"components.model-groove-design.errors.pqr-prevent-deletion\\\"}}\\n {{error.label}}\\n \\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{else}}\\n {{t \\\"components.confirm-delete-modal.text\\\"}}\\n {{/if}}\\n
\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.isMissingDetails}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.select-layer-and-sides\\\"}}\\n \\n
\\n {{/if}}\\n \\n
\\n
\\n \\n \\n {{detail.label}}\\n \\n \\n
\\n \\n \\n \\n \\n \\n {{#if\\n (and (has-value this.grooveDesign.image.id) (not this.grooveDesign.isNew) this.canUserEdit)\\n }}\\n \\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n
\\n \\n \\n
\\n {{#each this.grooveDesign.errors.image as |error|}}\\n
\\n {{error.message}}\\n
\\n {{/each}}\\n
\\n
\\n \\n
\\n\\n{{#if this.showEditor}}\\n \\n
\\n
\\n {{t \\\"components.model-groove-design.title.edit-image\\\"}}\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n\\n {{#if this.canUserEdit}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.canEdit (not this.grooveDesign.isNew) this.canCreateWeldLayerConfiguration)}}\\n \\n \\n Create Weld Layer Configuration\\n \\n \\n {{/if}}\\n {{#if (and (not this.grooveDesign.isNew) this.canUserEdit)}}\\n \\n {{/if}}\\n\\n {{#unless this.canEdit}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.system-design\\\"}}\\n \\n
\\n {{/unless}}\\n\\n {{#if this.showMissingValuesMessage}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.fill-all-details\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isShowingCreateWeldLayerConfiguration}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{yield}}\\n \\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}s\\n \\n {{t \\\"components.model-groove-design.buttons.create-weld-layer\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if (has-value this.deleteErrors)}}\\n \\n {{t \\\"components.model-groove-design.errors.text-message\\\"}}\\n
    \\n {{#each this.deleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"WPS\\\")}}\\n \\n {{t \\\"components.model-groove-design.errors.wps-prevent-deletion\\\"}}:\\n {{error.label}}\\n \\n {{else if (eq error.type \\\"PQR\\\")}}\\n \\n {{t \\\"components.model-groove-design.errors.pqr-prevent-deletion\\\"}}\\n {{error.label}}\\n \\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{else}}\\n {{t \\\"components.confirm-delete-modal.text\\\"}}\\n {{/if}}\\n
\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.isMissingDetails}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.select-layer-and-sides\\\"}}\\n \\n
\\n {{/if}}\\n \\n
\\n
\\n \\n \\n {{detail.label}}\\n \\n \\n
\\n \\n \\n \\n \\n \\n {{#if\\n (and (has-value this.grooveDesign.image.id) (not this.grooveDesign.isNew) this.canUserEdit)\\n }}\\n \\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n
\\n \\n \\n
\\n {{#each this.grooveDesign.errors.image as |error|}}\\n
\\n {{error.message}}\\n
\\n {{/each}}\\n
\\n
\\n \\n
\\n\\n{{#if this.showEditor}}\\n \\n
\\n
\\n {{t \\\"components.model-groove-design.title.edit-image\\\"}}\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-groove-design/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-groove-design/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, set, get, action, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/groove-design-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\nimport { isPermissionDenied, isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\n\nconst { GROOVE_DESIGN } = Rules;\n\nconst { WELD_TYPES, FILE_CONTEXT } = Constants;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter, SystemAttribute) {\n @service\n alertMessage;\n\n @service('weldnote-data')\n data;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n store;\n\n @service\n fileService;\n\n @service\n loading;\n\n @service\n ajax;\n\n @service\n router;\n\n @alias('data.schematicsWeldTypeOptions')\n weldTypeOptions;\n\n @alias('data.weldTypeOptions')\n realWeldTypeOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.grooveShapeOptions')\n grooveShapeOptions;\n\n @alias('data.jointTypeOptions')\n jointTypeOptions;\n\n @alias('model')\n grooveDesign;\n\n @tracked\n showEditor = false;\n\n @computed('grooveDesign.weldingDetails')\n get isMissingDetails() {\n let { grooveDesign } = this;\n if (!isEmpty(grooveDesign.weldingDetails)) {\n let { weldingDetails } = grooveDesign;\n let layers = weldingDetails.filter((d) => {\n let { shortDesignation } = d;\n return shortDesignation === 'sl' || shortDesignation === 'ml';\n });\n let sides = weldingDetails.filter((d) => {\n let { shortDesignation } = d;\n return (\n shortDesignation === 'ss mb' ||\n shortDesignation === 'ss gb' ||\n shortDesignation === 'ss fb' ||\n shortDesignation === 'bs' ||\n shortDesignation === 'ss nb'\n );\n });\n return isEmpty(layers) || isEmpty(sides);\n }\n return true;\n }\n\n @computed('grooveDesign.{weldingDetails,weldTypes,grooveType,jointType}', 'canEdit')\n get showMissingValuesMessage() {\n let { grooveDesign, canEdit } = this;\n if (!canEdit) {\n return false;\n }\n let { weldingDetails, weldTypes, grooveType, jointType, isNew } = getProperties(\n grooveDesign,\n 'weldingDetails',\n 'weldTypes',\n 'grooveType',\n 'jointType'\n );\n return (\n isEmpty(grooveType) || isEmpty(jointType) || isEmpty(weldingDetails) || isEmpty(weldTypes)\n );\n }\n\n @computed('grooveDesign.weldTypes.[]')\n get selectedWeldTypes() {\n let { weldTypes } = this.grooveDesign;\n let result = [];\n weldTypes.forEach((type) => {\n let { weldType } = type;\n if (\n weldType === WELD_TYPES.BUTT_WELD ||\n weldType === WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD\n ) {\n if (!result.findBy('id', 'butt-weld')) {\n result.pushObject({\n id: 'butt-weld',\n label: 'Full Penetration Butt Weld',\n });\n }\n }\n if (weldType === WELD_TYPES.FILLET_WELD) {\n if (!result.findBy('id', 'fillet-weld')) {\n result.pushObject({\n id: 'fillet-weld',\n label: 'Fillet Weld',\n });\n }\n }\n if (weldType === WELD_TYPES.BRANCH_CONNECTION) {\n if (!result.findBy('id', 'branch-connection')) {\n result.pushObject({\n id: 'branch-connection',\n label: 'Branch Connection',\n });\n }\n }\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (!result.findBy('id', 'overlay-weld')) {\n result.pushObject({\n id: 'overlay-weld',\n label: 'Overlay Weld',\n });\n }\n }\n if (\n weldType === WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD ||\n weldType === WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD\n ) {\n if (!result.findBy('id', 'partial-butt-weld')) {\n result.pushObject({\n id: 'partial-butt-weld',\n label: 'Partial Penetration Butt Weld',\n });\n }\n }\n });\n return result;\n }\n\n @computed('grooveDesign.{isNew,image,renderedImagePath}')\n get previewLink() {\n let { grooveDesign } = this;\n let isNew = get(grooveDesign, 'isNew');\n if (isNew) {\n return get(grooveDesign, 'image.downloadPath');\n } else {\n return get(grooveDesign, 'renderedImagePath');\n }\n return '';\n }\n\n get canCreateWeldLayerConfiguration() {\n if (!this.canEdit) {\n return false;\n }\n if (get(this.grooveDesign, 'isNew')) {\n return false;\n }\n\n if (!this.userSession.canCreateWeldSketch) {\n return false;\n }\n\n if (get(this.grooveDesign, 'imageSituation') === 'CUSTOMIZED') {\n return false;\n }\n\n return true;\n }\n\n get canUserEdit() {\n if (!this.canEdit) {\n return false;\n }\n if (get(this.grooveDesign, 'isNew')) {\n return this.userSession.canCreateWeldSketch;\n }\n return this.userSession.canEditWeldSketch(get(this.grooveDesign, 'createdById'));\n }\n\n saveImage = task(\n {\n drop: true,\n },\n async ({ state, image }) => {\n let { store, grooveDesign, loading, fileService } = this;\n loading.block();\n\n let imageId = get(grooveDesign, 'image.id');\n let renderedImageId = get(grooveDesign, 'renderedImage.id');\n\n if (imageId === renderedImageId) {\n let upload = await fileService.uploadNewBase64Image.perform(\n get(grooveDesign, 'description'),\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n grooveDesign.set('renderedImage', upload);\n } else {\n let upload = await store.findRecord('file-upload', get(grooveDesign, 'renderedImage.id'));\n await fileService.updateExistingBase64Image.perform(\n get(upload, 'id'),\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n // Need to update the saved time on this, for backend\n await upload.save();\n }\n set(grooveDesign, 'imageState', JSON.stringify(state));\n await grooveDesign.save();\n await grooveDesign.reload();\n\n this.showEditor = false;\n loading.unblock();\n }\n );\n\n createWeldLayerConfiguration = task(\n {\n drop: true,\n },\n async () => {\n let {\n grooveDesign,\n loading,\n router,\n weldLayerConfigurationFromCopy,\n store,\n alertMessage,\n description,\n longDescription,\n } = this;\n\n if (isEmpty(description) || isEmpty(longDescription)) {\n alertMessage.error('Both fields are required');\n if (isEmpty(description)) {\n set(this, 'descriptionErrors', [{ message: 'Field is required' }]);\n }\n if (isEmpty(longDescription)) {\n set(this, 'longDescriptionErrors', [{ message: 'Field is required' }]);\n }\n return;\n }\n\n if (!weldLayerConfigurationFromCopy) {\n weldLayerConfigurationFromCopy = store.createRecord('weld-layer-groove-copy');\n set(this, 'weldLayerConfigurationFromCopy', weldLayerConfigurationFromCopy);\n }\n set(weldLayerConfigurationFromCopy, 'description', description);\n set(weldLayerConfigurationFromCopy, 'longDescription', longDescription);\n set(weldLayerConfigurationFromCopy, 'grooveDesign', grooveDesign);\n try {\n loading.block();\n let weldLayer = await weldLayerConfigurationFromCopy.save();\n router.transitionTo('weld-layer-configuration', weldLayer.id);\n store.unloadRecord(weldLayer);\n store.unloadRecord(weldLayerConfigurationFromCopy);\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alertMessage.error('There is already a Weld Configuration with that name');\n } else if (isPermissionDenied(reason)) {\n alertMessage.error('Sorry you cannot do that');\n } else {\n alertMessage.error('unknown error');\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n @action\n setImage(value) {\n this.setModelValue(GROOVE_DESIGN.IMAGE, value);\n }\n\n @action\n setWeldTypes(values) {\n let weldTypes = values;\n let { realWeldTypeOptions } = this;\n let result = [];\n this.setModelCollection(GROOVE_DESIGN.WELD_TYPES, []);\n\n weldTypes.forEach((type) => {\n if (type.id === 'butt-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'fillet-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.FILLET_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'branch-connection') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.BRANCH_CONNECTION)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'overlay-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.OVERLAY_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'partial-butt-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n }\n });\n this.setModelCollection(GROOVE_DESIGN.WELD_TYPES, result);\n }\n\n @action\n saveModel() {\n if (!isEmpty(this.get('model.image.id'))) {\n // TODO: This call to super is within an action, and has to refer to the parent\n // class's actions to be safe. This should be refactored to call a normal method\n // on the parent class. If the parent class has not been converted to native\n // classes, it may need to be refactored as well. See\n // https: //github.com/scalvert/ember-native-class-codemod/blob/master/README.md\n // for more details.\n super.actions.saveModel.call(this, ...arguments);\n } else {\n this.model.validate();\n this.alertMessage.error(\n this.intl.t('components.model-groove-design.messages.image-required')\n );\n }\n }\n\n @action\n editImage() {\n this.showEditor = true;\n }\n\n @action\n async imageUploaded(fileUpload) {\n set(this.grooveDesign, 'renderedImage', fileUpload);\n this.saveModel();\n\n let drawEditions = get(this.grooveDesign, 'imageState');\n if (drawEditions) {\n let drawEditions = JSON.parse(get(this.grooveDesign, 'imageState'));\n let hasDrawingsOverBaseImage =\n drawEditions.operations?.filter((o) => o.type === 'sprite')[0].options?.sprites?.length > 0;\n if (hasDrawingsOverBaseImage) {\n // we should be able to immediatly show the editor, but for some reason\n // if we don't wait a bit, sometimes we get an error stating the image is\n // not available.\n await timeout(333);\n this.showEditor = true;\n }\n }\n }\n\n @action\n deleteGroove() {\n let { grooveDesign, loading, alertMessage: alert, intl, ajax } = this;\n\n loading.block();\n ajax\n .put(`/groove-designs/${get(grooveDesign, 'id')}/canDelete`)\n .then(() => {\n set(this, 'deleteErrors', null);\n set(this, 'isShowingModal', false);\n this.actions.deleteModel.call(this);\n })\n .catch(({ payload }) => {\n alert.error(intl.t('components.model-groove-design.errors.alert-message'));\n set(this, 'deleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n cancelCreateWeldLayerConfiguration() {\n set(this, 'isShowingCreateWeldLayerConfiguration', false);\n set(this, 'descriptionErrors', []);\n set(this, 'longDescriptionErrors', []);\n }\n\n @action\n confirmCreateWeldLayerConfiguration() {\n set(this, 'isShowingCreateWeldLayerConfiguration', true);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.canCreateWPS}}\\n {{#if this.ieis.isArchived}}\\n \\n \\n {{t \\\"components.model-ieis/edit.buttons.unarchive\\\"}}\\n \\n {{else if this.ieis.isActive}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n\\n \\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n \\n\\n \\n \\n \\n \\n\\n \\n {{#if this.downloadExcel.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n Excel\\n \\n {{/if}}\\n\\n {{/if}}\\n\\n {{#if this.ieis.isArchived}}\\n
\\n \\n {{t \\\"components.model-ieis/edit.messages.archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.showConfirmDelete}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n {{t \\\"components.model-ieis/edit.modals.archive.message\\\"}}\\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-ieis/edit.buttons.archive\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n {{t \\\"components.model-ieis/edit.modals.unarchive.message\\\"}}\\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-ieis/edit.buttons.unarchive\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.revision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{input.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-ieis/edit.labels.print-option.original\\\"}}\\n \\n \\n {{t \\\"components.model-ieis/edit.labels.print-option.component\\\"}}\\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.canCreateWPS}}\\n {{#if this.ieis.isArchived}}\\n \\n \\n {{t \\\"components.model-ieis/edit.buttons.unarchive\\\"}}\\n \\n {{else if this.ieis.isActive}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n\\n \\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n \\n\\n \\n \\n \\n \\n\\n \\n {{#if this.downloadExcel.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n Excel\\n \\n {{/if}}\\n\\n {{/if}}\\n\\n {{#if this.ieis.isArchived}}\\n
\\n \\n {{t \\\"components.model-ieis/edit.messages.archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.showConfirmDelete}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n {{t \\\"components.model-ieis/edit.modals.archive.message\\\"}}\\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-ieis/edit.buttons.archive\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n {{t \\\"components.model-ieis/edit.modals.unarchive.message\\\"}}\\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-ieis/edit.buttons.unarchive\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.revision}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{input.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-ieis/edit.labels.print-option.original\\\"}}\\n \\n \\n {{t \\\"components.model-ieis/edit.labels.print-option.component\\\"}}\\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-ieis/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-ieis/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { task } from 'ember-concurrency';\nimport { isPermissionDenied, isForeignKeyError } from 'weldnote/utils/json-api-errors';\nimport { downloadExcel } from 'weldnote/utils/ajax/file-download';\n\n@classic\nexport default class Edit extends Component {\n @service\n userSession;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n router;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n session;\n\n @service('weldnote-data')\n data;\n\n @alias('model')\n ieis;\n\n showConfirmArchive = false;\n\n showConfirmUnarchive = false;\n\n wpsRevisions = null;\n\n @computed('ieis.wps.id', 'fetchRevisions.isRunning', 'ieis.isArchived')\n get isRevisionDisabled() {\n if (this.fetchRevisions.isRunning) {\n return true;\n }\n if (isEmpty(get(this, 'ieis.wps.id'))) {\n return true;\n }\n if (this.ieis.isArchived) {\n return true;\n }\n return false;\n }\n\n @computed('ieis.isActive', 'userSession.canCreateWPS')\n get canEdit() {\n if (!this.userSession.canCreateWPS) {\n return false;\n }\n if (!this.ieis.isActive) {\n return false;\n }\n return true;\n }\n\n @computed('ieis.{referenceDrawing,componentDrawing,isArchived}')\n get isPrintOptionDisabled() {\n let { ieis } = this;\n if (ieis.isArchived) {\n return true;\n }\n let originalDrawingId = get(ieis, 'referenceDrawing.id');\n if (!isEmpty(originalDrawingId)) {\n return false;\n }\n let componentDrawingId = get(ieis, 'componentDrawing.id');\n if (!isEmpty(componentDrawingId)) {\n return false;\n }\n return true;\n }\n\n setCurrentRevision = task(\n {\n drop: true,\n },\n async (revision) => {\n if (isEmpty(revision)) {\n return;\n }\n if (revision.id !== get(this, 'ieis.wps.id')) {\n this.loading.block();\n let wps = await this.store.findRecord('welding-procedure-specification', revision.id);\n set(this, 'ieis.wps', wps);\n set(this, 'currentRevisionSelected', {\n id: get(wps, 'id'),\n revision: wps.revision,\n });\n this.loading.unblock();\n }\n }\n );\n\n fetchRevisions = task(\n {\n restartable: true,\n },\n async (wps) => {\n if (isEmpty(wps)) {\n return [];\n }\n let results = await wps.fetchRevisions();\n if (isEmpty(results)) {\n set(this, 'wpsRevisions', [{ id: get(wps, 'id'), revision: wps.revision }]);\n } else {\n set(this, 'wpsRevisions', results);\n }\n return results;\n }\n );\n\n setWps = task(\n {\n drop: true,\n },\n async (wps) => {\n if (!isEmpty(wps)) {\n await this.fetchRevisions.perform(wps);\n set(this, 'ieis.wps', wps);\n set(this, 'currentRevisionSelected', {\n id: get(wps, 'id'),\n revision: wps.revision,\n });\n } else {\n set(this, 'ieis.wps', null);\n set(this, 'currentRevisionSelected', null);\n }\n }\n );\n\n downloadExcel = task(\n {\n drop: true,\n },\n async () => {\n this.loading.block();\n try {\n await downloadExcel(`/api/ieis/${this.ieis.id}/downloadExcel`, this.session);\n } finally {\n this.loading.unblock();\n }\n }\n );\n\n init() {\n super.init(...arguments);\n let wps = get(this, 'ieis.wps');\n this.fetchRevisions.perform(wps);\n set(this, 'currentRevisionSelected', {\n id: get(wps, 'id'),\n revision: wps.revision,\n });\n }\n\n saveIeis = task(\n {\n drop: true,\n },\n async () => {\n let { ieis, loading, alert, intl } = this;\n if (!ieis.validate()) {\n alert.error(intl.t('generic.actions.validation-failed'));\n return;\n }\n loading.block();\n try {\n await ieis.save();\n alert.success(\n intl.t('components.model-ieis/edit.messages.saved.success', {\n name: get(ieis, 'ieisNumber'),\n })\n );\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('components.model-ieis/edit.messages.errors.permission-denied'));\n } else {\n alert.error(intl.t('components.model-ieis/edit.messages.errors.unknown-error'));\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n archiveIeis = task(\n {\n drop: true,\n },\n async () => {\n try {\n this.loading.block();\n await this.ieis.archive();\n await this.ieis.reload();\n } finally {\n this.loading.unblock();\n }\n set(this, 'showConfirmArchive', false);\n }\n );\n\n unarchiveIeis = task(\n {\n drop: true,\n },\n async () => {\n try {\n this.loading.block();\n await this.ieis.unarchive();\n await this.ieis.reload();\n } finally {\n this.loading.unblock();\n }\n set(this, 'showConfirmUnarchive', false);\n }\n );\n\n deleteIeis = task(\n {\n drop: true,\n },\n async () => {\n let { loading, ieis, router, alert, intl } = this;\n try {\n loading.block();\n let name = get(ieis, 'ieisNumber');\n await ieis.destroyRecord();\n alert.success(\n intl.t('components.model-ieis/edit.messages.deleted.success', {\n name,\n })\n );\n router.transitionTo('ieis');\n } catch (reason) {\n ieis.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('components.model-ieis/edit.messages.errors.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n alert.error(intl.t('components.model-ieis/edit.messages.deleted.forein-key-error'));\n } else {\n alert.error(intl.t('components.model-ieis/edit.messages.errors.unknown-error'));\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n searchInspectionClasses = task(\n {\n drop: true,\n },\n async (term) => {\n return await this.data.listAllTestInspectionClasses(\n {},\n {\n name: term,\n }\n );\n }\n );\n\n setReferenceDrawing = task(\n {\n drop: true,\n },\n async (drawingId) => {\n let { loading } = this;\n loading.block();\n let drawing = await this.store.findRecord('general-drawing', drawingId);\n loading.unblock();\n set(this, 'ieis.referenceDrawing', drawing);\n }\n );\n\n setComponentDrawing = task(\n {\n drop: true,\n },\n async (drawingId) => {\n let { loading, data } = this;\n loading.block();\n let drawing = await data.loadAllDataComponentDrawing(drawingId);\n loading.unblock();\n set(this, 'ieis.componentDrawing', drawing);\n }\n );\n\n @action\n dummy() {}\n\n @action\n removeReferenceDrawing() {\n set(this, 'ieis.referenceDrawing', null);\n }\n\n @action\n removeComponentDrawing() {\n set(this, 'ieis.componentDrawing', null);\n }\n\n @action\n setLineClasses(lineClass) {\n if (!isEmpty(lineClass)) {\n set(this, 'ieis.lineClass', lineClass);\n } else {\n set(this, 'ieis.lineClass', null);\n }\n }\n\n @action\n confirmArchive() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n cancelConfirmArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n confirmUnarchive() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelConfirmUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n confirmDelete() {\n set(this, 'showConfirmDelete', true);\n }\n\n @action\n cancelConfirmDelete() {\n set(this, 'showConfirmDelete', false);\n }\n\n @action\n setPrintDrawingOption(newValue) {\n set(this, 'model.additionalData.printDrawing', newValue);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.revision}}\\n \\n \\n \\n
\\n \\n \\n {{t \\\"components.model-ieis/new.buttons.create-ieis\\\"}}\\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.revision}}\\n \\n \\n \\n
\\n \\n \\n {{t \\\"components.model-ieis/new.buttons.create-ieis\\\"}}\\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-ieis/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-ieis/new.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { empty, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { task } from 'ember-concurrency';\nimport { get, set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\n\n@classic\nexport default class New extends Component {\n @alias('model')\n ieis;\n\n @service\n router;\n\n @service\n intl;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n store;\n\n // Keeps the list of WPS revisions for a current WPS selected\n wpsRevisions = null;\n\n @empty('ieis.wps.id')\n isRevisionDisabled;\n\n currentRevisionSelected = null;\n\n saveIeis = task(\n {\n drop: true,\n },\n async () => {\n let { ieis, router, loading, alert, intl } = this;\n if (!ieis.validate()) {\n alert.error(intl.t('generic.actions.validation-failed'));\n return;\n }\n loading.block();\n try {\n let saved = await ieis.save();\n let newId = get(saved, 'id');\n alert.success(\n intl.t('components.model-ieis/new.messages.saved', {\n name: saved.ieisNumber,\n })\n );\n router.transitionTo('ieis-edit', newId);\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-ieis/new.messages.duplicate', {\n name: ieis.ieisNumber,\n })\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(intl.t('components.model-ieis/new.messages.permission-denied'));\n } else {\n alert.error(intl.t('components.model-ieis/new.messages.unknown-error'));\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n fetchRevisions = task(\n {\n restartable: true,\n },\n async (wps) => {\n if (!isEmpty(wps)) {\n let results = await wps.fetchRevisions();\n if (isEmpty(results)) {\n set(this, 'wpsRevisions', [{ id: get(wps, 'id'), revision: wps.revision }]);\n } else {\n set(this, 'wpsRevisions', results);\n }\n return results;\n }\n }\n );\n\n setWps = task(\n {\n drop: true,\n },\n async (wps) => {\n if (!isEmpty(wps)) {\n await this.fetchRevisions.perform(wps);\n set(this, 'ieis.wps', wps);\n set(this, 'currentRevisionSelected', {\n id: get(wps, 'id'),\n revision: wps.revision,\n });\n } else {\n set(this, 'ieis.wps', null);\n set(this, 'currentRevisionSelected', null);\n }\n }\n );\n\n setCurrentRevision = task(\n {\n drop: true,\n },\n async (revision) => {\n if (isEmpty(revision)) {\n return;\n }\n if (revision.id !== get(this, 'ieis.wps.id')) {\n let wps = await this.store.findRecord('welding-procedure-specification', revision.id);\n set(this, 'ieis.wps', wps);\n }\n }\n );\n\n @action\n cancel() {\n this.router.transitionTo('ieis');\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.canCreateWelder}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.canShowDownloadButton}}\\n \\n {{t \\\"components.model-inspector/edit.download-button\\\"}}\\n {{/if}}\\n\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-inspector/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n\\n {{#if this.hasInspectorErrors}}\\n
\\n \\n {{#each this.inspectorReportErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-inspector/edit.certificate-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n \\n
\\n {{/if}}\\n\\n {{#if this.hasInspectorError}}\\n
\\n \\n {{#if (eq this.inspectorReportError \\\"no-certificates\\\")}}\\n \\n {{t \\\"components.model-inspector/edit.no-certificates\\\"}}\\n {{/if}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n {{t\\n \\\"components.model-inspector/edit.miscellaneous-panel-title\\\"\\n inspector=this.inspector.inspectorName\\n }}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.canCreateWelder}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.canShowDownloadButton}}\\n \\n {{t \\\"components.model-inspector/edit.download-button\\\"}}\\n {{/if}}\\n\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-inspector/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n\\n {{#if this.hasInspectorErrors}}\\n
\\n \\n {{#each this.inspectorReportErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-inspector/edit.certificate-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n \\n
\\n {{/if}}\\n\\n {{#if this.hasInspectorError}}\\n
\\n \\n {{#if (eq this.inspectorReportError \\\"no-certificates\\\")}}\\n \\n {{t \\\"components.model-inspector/edit.no-certificates\\\"}}\\n {{/if}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n {{t\\n \\\"components.model-inspector/edit.miscellaneous-panel-title\\\"\\n inspector=this.inspector.inspectorName\\n }}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\",\"moduleName\":\"weldnote/components/model-inspector/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-inspector/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty, alias } from '@ember/object/computed';\nimport { get, set, getProperties, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/pods/inspector/attributes';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport { task, timeout } from 'ember-concurrency';\nimport { isPermissionDenied, isForeignKeyError } from 'weldnote/utils/json-api-errors';\n\nconst { INSPECTOR } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service\n taskMonitor;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @alias('data.examiningBodyOptions')\n examiningBodyOptions;\n\n @alias('model')\n inspector;\n\n showExpiredMiscellaneous = false;\n\n pageNumberMiscellaneous = 1;\n\n @notEmpty('inspectorReportErrors')\n hasInspectorErrors;\n\n @notEmpty('inspectorReportError')\n hasInspectorError;\n\n @notEmpty('inspector.inspectorReportPath')\n hasFilePath;\n\n inspectorReportErrors = null;\n\n inspectorReportError = null;\n\n getAttributeLabel(attribute) {\n return this.intl.t(`model.miscellaneous-certificate.${attribute}.label`);\n }\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingReport() {\n let tasks = get(this, 'taskMonitor.currentTasks');\n let contextTask = tasks.find((item) => {\n if (item.get('contextName') === 'inspector-report') {\n if (item.get('contextId') === get(this, 'inspector.id')) {\n if (item.get('status') === '200') {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n @computed('isGeneratingReport')\n get canShowCreateButton() {\n let { isGeneratingReport } = this;\n if (isGeneratingReport) {\n return false;\n }\n\n return true;\n }\n\n @computed('hasFilePath', 'isGeneratingReport')\n get canShowDownloadButton() {\n let { isGeneratingReport } = this;\n if (isGeneratingReport) {\n return false;\n }\n\n if (!this.hasFilePath) {\n return false;\n }\n\n return true;\n }\n\n @computed\n get columnsMiscellaneous() {\n let certificateNumberLabel = this.getAttributeLabel('certificateNumber');\n let typeLabel = this.getAttributeLabel('type');\n let expirationDateLabel = this.getAttributeLabel('expirationDate');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n cellComponent: 'weldnote-grid/miscellaneous-certificate-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'type.type',\n label: typeLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'expirationDate',\n label: expirationDateLabel,\n cellComponent: 'weldnote-grid/date-cell',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n\n fetchMiscellaneousCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(100);\n let filters = {};\n filters.person = get(this, 'inspector.id');\n if (this.showExpiredMiscellaneous) {\n filters._activeExpired = true;\n }\n if (this.showArchivedMiscellaneous) {\n filters._activeArchived = true;\n }\n let options = { page: this.pageNumberMiscellaneous };\n let certificates = await this.data.listAllMiscellaneousCertificates(options, filters);\n set(this, 'miscellaneousCertificates', certificates);\n set(this, 'miscellaneousCertificateCount', certificates.meta.records);\n }\n );\n\n init() {\n super.init(...arguments);\n set(this, 'inspectorReportErrors', []);\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n setInspectorName(value) {\n this.setModelValue(INSPECTOR.INSPECTOR_NAME, value);\n }\n\n @action\n setInspectorStamp(value) {\n this.setModelValue(INSPECTOR.INSPECTOR_STAMP, value);\n }\n\n @action\n setInspectorId(value) {\n this.setModelValue(INSPECTOR.INSPECTOR_ID, value);\n }\n\n @action\n setInspectorType(value) {\n this.setModelValue(INSPECTOR.INSPECTOR_TYPE, value);\n }\n\n @action\n setDateBirth(value) {\n this.setModelValue(INSPECTOR.DATE_BIRTH, value);\n }\n\n @action\n setExaminingBody(value) {\n this.setModelValue(INSPECTOR.EXAMINING_BODY, value);\n }\n\n @action\n setShowExpiredMiscellaneous(value) {\n set(this, 'showExpiredMiscellaneous', value);\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n setShowArchivedMiscellaneous(value) {\n set(this, 'showArchivedMiscellaneous', value);\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n generateInspectorReport() {\n let { loading, alert, taskMonitor, intl, inspector } = this;\n let inspectorId = get(inspector, 'id');\n if (inspector.validate()) {\n this.inspectorReportErrors.clear();\n\n if (taskMonitor.hasTaskByContext('inspector-report', inspectorId)) {\n taskMonitor.removeTaskByContext('inspector-report', inspectorId);\n }\n loading.block();\n inspector\n .createInspectorReport()\n .then((response) => {\n if (response.status === '200') {\n get(taskMonitor, 'monitorTask').perform(response.taskIdentifier);\n } else {\n let error = JSON.parse(response.error);\n if (error.certificates) {\n set(this, 'inspectorReportErrors', error.certificates);\n } else if (error.errors) {\n set(this, 'inspectorReportError', error.errors);\n }\n }\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n finishInspectorReportGeneration() {\n this.taskMonitor.removeTaskByContext('inspector-report', get(this, 'inspector.id'));\n this.inspector.reload();\n }\n\n @action\n searchMiscellaneous(pageNumber) {\n set(this, 'pageNumberMiscellaneous', pageNumber);\n this.fetchMiscellaneousCertificates.perform();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-miscellaneous-certificate-type/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-miscellaneous-certificate-type/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\",\"moduleName\":\"weldnote/components/model-miscellaneous-certificate/duplicate.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-miscellaneous-certificate/duplicate.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { get, set, action } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\n\n@classic\nexport default class Duplicate extends Component {\n @service\n router;\n\n @service\n loading;\n\n @service\n intl;\n\n @service('alert-message')\n alert;\n\n certificate = null;\n\n errors = null;\n\n hasErrors() {\n set(this, 'errors', {});\n let { intl } = this;\n let hasErrors = false;\n if (isEmpty(this.newCertificateNumber)) {\n hasErrors = true;\n set(this, 'errors.certificateNumber', [\n intl.t(\n 'components.model-miscellaneous-certificate/duplicate.messages.error.new-number-required'\n ),\n ]);\n }\n if (isEmpty(this.newPerson)) {\n hasErrors = true;\n set(this, 'errors.person', [\n {\n message: intl.t(\n 'components.model-miscellaneous-certificate/duplicate.messages.error.new-person-required'\n ),\n },\n ]);\n }\n\n return hasErrors;\n }\n\n init() {\n super.init(...arguments);\n assert('Must pass a certificate', !isEmpty(this.certificate));\n }\n\n @action\n validateDuplication() {\n let { certificate, intl, loading, alert, router } = this;\n if (this.hasErrors()) {\n alert.error('Check the red fields');\n return;\n }\n loading.block();\n certificate\n .duplicate({\n newCertificateNumber: this.newCertificateNumber,\n newPerson: get(this, 'newPerson.id'),\n })\n .then(({ certificateNumber, id }) => {\n alert.success(\n intl.t(\n 'components.model-miscellaneous-certificate/duplicate.messages.duplicate-created',\n {\n certificate: certificateNumber,\n }\n )\n );\n router.transitionTo('miscellaneous-certificate', id);\n })\n .catch((error) => {\n if (isDuplicateError(error)) {\n alert.error(\n intl.t(\n 'components.model-miscellaneous-certificate/duplicate.messages.error.duplicate-exception',\n {\n certificate: this.newCertificateNumber,\n }\n )\n );\n } else if (isPermissionDenied(error)) {\n alert.error(intl.t('generic.error.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-miscellaneous-certificate/duplicate.messages.error.generic')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n cancelDuplication() {\n this.router.transitionTo('miscellaneous-certificate', this.certificate);\n }\n\n @action\n dummy() {}\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.userSession.canCreateCertificate (not this.certificate.isArchived))}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canDeleteCertificate\\n (not this.certificate.isNew)\\n (not this.certificate.isArchived)\\n )\\n }}\\n \\n {{/if}}\\n {{#if\\n (and (not this.certificate.isNew) this.userSession.canArchiveCertificate (not this.isEditing))\\n }}\\n {{#if this.certificate.isArchived}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.unarchive-button\\\"}}\\n \\n {{else}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n\\n {{#if this.certificate.isArchived}}\\n
\\n \\n {{t\\n \\\"components.model-miscellaneous-certificate/edit.archive.messages.certificate-is-archived\\\"\\n }}\\n \\n
\\n {{/if}}\\n\\n {{#if this.certificate.isExpired}}\\n
\\n \\n {{t\\n \\\"components.model-miscellaneous-certificate/edit.expired.message\\\"\\n date=(format-date date=this.certificate.expirationDate format=this.userSession.dateFormat)\\n }}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-miscellaneous-certificate/edit.archive.messages.archive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-miscellaneous-certificate/edit.archive.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n\\n{{#if this.showCreateType}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t \\\"components.model-miscellaneous-certificate/edit.create-type.buttons.add\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.userSession.canCreateCertificate (not this.certificate.isArchived))}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canDeleteCertificate\\n (not this.certificate.isNew)\\n (not this.certificate.isArchived)\\n )\\n }}\\n \\n {{/if}}\\n {{#if\\n (and (not this.certificate.isNew) this.userSession.canArchiveCertificate (not this.isEditing))\\n }}\\n {{#if this.certificate.isArchived}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.unarchive-button\\\"}}\\n \\n {{else}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n\\n {{#if this.certificate.isArchived}}\\n
\\n \\n {{t\\n \\\"components.model-miscellaneous-certificate/edit.archive.messages.certificate-is-archived\\\"\\n }}\\n \\n
\\n {{/if}}\\n\\n {{#if this.certificate.isExpired}}\\n
\\n \\n {{t\\n \\\"components.model-miscellaneous-certificate/edit.expired.message\\\"\\n date=(format-date date=this.certificate.expirationDate format=this.userSession.dateFormat)\\n }}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-miscellaneous-certificate/edit.archive.messages.archive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-miscellaneous-certificate/edit.archive.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-miscellaneous-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\\n\\n{{#if this.showCreateType}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t \\\"components.model-miscellaneous-certificate/edit.create-type.buttons.add\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-miscellaneous-certificate/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-miscellaneous-certificate/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { get, set, action, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport { isPermissionDenied, isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport Rules from 'weldnote/pods/miscellaneous-certificate/attributes';\nimport { task, timeout } from 'ember-concurrency';\nimport { isEmpty, isBlank } from '@ember/utils';\n\nconst { MISCELLANEOUS_CERTIFICATE } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter) {\n @service\n loading;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n store;\n\n @service('weldnoteData')\n data;\n\n @service\n analytics;\n\n @service\n welderCertificateData;\n\n @alias('model')\n certificate;\n\n @alias('data.miscellaneousCertificateTypeOptions')\n miscellaneousCertificateTypeOptions;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @computed('certificate.isArchived', 'userSession.canCreateCertificate')\n get canEdit() {\n if (this.certificate.isArchived) {\n return false;\n }\n return this.userSession.canCreateCertificate;\n }\n\n showConfirmArchive = false;\n\n showConfirmUnarchive = false;\n\n showCreateType = false;\n\n translate(key, options) {\n return this.intl.t(`components.model-welder-certificate/edit.${key}`, options);\n }\n\n searchWelder = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return this.data.findWelderByStamp(term).then((data) => {\n return data;\n });\n }\n );\n\n _postSave() {\n this.welderCertificateData.clearMiscellaneousCache();\n }\n\n @action\n archiveCertificate() {\n let { loading, certificate, alertMessage, intl } = this;\n loading.block();\n certificate\n .archive()\n .then((result) => {\n if (result.code === 200) {\n certificate\n .reload()\n .then(() => {\n alertMessage.success(\n this.translate('archive.archived', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n })\n );\n set(this, 'showConfirmArchive', false);\n })\n .catch((reason) => {\n alertMessage.error(\n this.translate('archive.archived-error', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n error: reason.message,\n })\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alertMessage.error(\n this.translate('archive.archived-error', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n error: '',\n })\n );\n loading.unblock();\n }\n })\n .catch((reason) => {\n let { alertMessage } = this;\n if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alertMessage.error(\n this.translate('archive.archived-error', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n error: reason.message,\n })\n );\n }\n loading.unblock();\n });\n }\n\n @action\n unarchiveCertificate() {\n let { loading, certificate, alertMessage, intl } = this;\n loading.block();\n certificate\n .unarchive()\n .then((result) => {\n if (result.code === 200) {\n certificate\n .reload()\n .then(() => {\n alertMessage.success(\n this.translate('archive.unarchived', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n })\n );\n set(this, 'showConfirmUnarchive', false);\n })\n .catch((reason) => {\n alertMessage.error(\n this.translate('archive.unarchived-error', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n error: reason.message,\n })\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alertMessage.error(\n this.translate('archive.unarchived-error', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n error: '',\n })\n );\n loading.unblock();\n }\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alertMessage.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alertMessage.error(\n this.translate('archive.unarchived-error', {\n certificate: this.getModelValue(MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER),\n error: reason.message,\n })\n );\n }\n loading.unblock();\n });\n }\n\n @action\n setRequalificationPeriod(value) {\n this.setModelDecimalValue(MISCELLANEOUS_CERTIFICATE.REQUALIFICATION_PERIOD, value);\n }\n\n @action\n openCreateType(type, publicAPI) {\n set(this, 'showCreateType', true);\n set(this, 'type', type);\n publicAPI.actions.close();\n }\n\n @action\n createType(type) {\n let { store, alertMessage: alert, intl, analytics } = this;\n let newType = store.createRecord('miscellaneous-certificate-type');\n set(newType, 'type', type);\n\n if (!isEmpty(type)) {\n newType\n .save()\n .then((savedType) => {\n alert.success(\n intl.t('components.model-miscellaneous-certificate/edit.create-type.type-added', {\n type,\n })\n );\n this.certificate.set('type', savedType);\n set(this, 'showCreateType', false);\n analytics.trackEvent('create-miscellaneous-certificate-type-inline', {\n type: 'miscellaneous-certificate-type',\n category: 'create-inline',\n name: type,\n });\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-miscellaneous-certificate/edit.create-type.duplicated', {\n type,\n })\n );\n }\n });\n } else {\n alert.error(\n intl.t('components.model-miscellaneous-certificate/edit.create-type.type-required')\n );\n }\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n set(this, 'showCreateType', true);\n set(this, 'type', select.searchText);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n {{ndt.designation}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-project-ndt-report/lookup.buttons.search\\\"}}\\n \\n \\n {{t \\\"components.model-project-ndt-report/lookup.buttons.clear\\\"}}\\n
\\n {{yield}}\\n
\\n
\\n
\\n \\n
\\n \\n
\\n {{t \\\"components.model-project-ndt-report/lookup.buttons.cancel\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n {{ndt.designation}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-project-ndt-report/lookup.buttons.search\\\"}}\\n \\n \\n {{t \\\"components.model-project-ndt-report/lookup.buttons.clear\\\"}}\\n
\\n {{yield}}\\n
\\n
\\n
\\n \\n
\\n \\n
\\n {{t \\\"components.model-project-ndt-report/lookup.buttons.cancel\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-ndt-report-certificate/lookup-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-ndt-report-certificate/lookup-modal.hbs\"}});\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { get, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\nexport default class LookupModal extends Component {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n store;\n\n @service\n intl;\n\n @notEmpty('helpText')\n hasHelp;\n\n @tracked\n model;\n\n @tracked\n totalCount = 0;\n\n @tracked\n currentPage = 1;\n\n pageSize = 10;\n\n @tracked\n reportNumber;\n\n @tracked\n selectedType;\n\n constructor() {\n super(...arguments);\n this.selectedType = this.args.selectedType;\n this.loadData.perform();\n }\n\n get gridColumns() {\n let reportNumberLabel = this.intl.t(\n 'components.model-project-ndt-report/lookup.table.report-number-column'\n );\n let typeLabel = this.intl.t('components.model-project-ndt-report/lookup.table.type-column');\n let dateLabel = this.intl.t('components.model-project-ndt-report/lookup.table.date-column');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'ndtReportNumber',\n label: reportNumberLabel,\n sortable: false,\n },\n {\n valuePath: 'typeOfTest.shortDesignation',\n label: typeLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'reportDate',\n cellComponent: 'weldnote-grid/date-cell',\n label: dateLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n label: '',\n width: '100px',\n sortable: false,\n cellComponent: 'model-ndt-report-certificate/lookup-modal/select-ndt-report',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n get title() {\n return (\n this.args.title ?? this.intl.t('components.model-ndt-report-certificate/lookup-modal.title')\n );\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n let filters = {};\n\n options.page = this.currentPage;\n options.pageSize = this.pageSize;\n\n // Set the search criteria\n let { reportNumber } = this;\n if (!isEmpty(reportNumber)) {\n filters.reportNumber = reportNumber;\n }\n\n let type = this.selectedType;\n if (!isEmpty(type)) {\n filters.testType = type.id;\n }\n\n await timeout(DEBOUNCE);\n let result = await this.data.listAllNDTReportCertificates(options, filters);\n if (!isEmpty(result)) {\n this.model = result;\n this.totalCount = result.meta.records;\n } else {\n this.model = result;\n this.totalCount = 0;\n }\n }\n );\n\n clearProperties() {\n this.reportNumber = null;\n if (!this.args.disableTestTypeSelect) {\n this.selectedType = null;\n }\n this.resetPage();\n this.loadData.perform();\n }\n\n resetPage() {\n this.currentPage = 1;\n }\n\n searchReport(pageNumber) {\n this.currentPage = pageNumber;\n this.loadData.perform();\n }\n\n @action\n search(pageNumber) {\n this.currentPage = pageNumber;\n this.searchReport(pageNumber);\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n chooseReport(row) {\n let id = get(row, 'id');\n this.store\n .findRecord('ndt-report-certificate', id)\n .then((report) => {\n this.args.onSelect(report);\n })\n .finally(() => {\n this.args.onClose();\n });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\", {\"contents\":\"\\n \\n\",\"moduleName\":\"weldnote/components/model-ndt-report-certificate/lookup-modal/select-ndt-report.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-ndt-report-certificate/lookup-modal/select-ndt-report.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n \\n {{#if (has-value this.reportLabel)}}\\n {{this.reportLabel}}\\n {{else}}\\n {{t\\n \\\"components.model-ndt-report-certificate/lookup.messages.placeholder\\\"\\n }}\\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @showAddButton}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{ndt.designation}}\\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-project-ndt-report/lookup.buttons.search\\\"}}\\n \\n \\n {{t \\\"components.model-project-ndt-report/lookup.buttons.clear\\\"}}\\n
\\n
\\n \\n {{t \\\"components.model-ndt-report-certificate/lookup.buttons.add-new\\\"}}\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-project-ndt-report/lookup.buttons.cancel\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingCreateReport}}\\n \\n \\n
\\n \\n

{{t \\\"routes.ndt-report-certificates.messages.moved-to-assembly\\\"}}

\\n

\\n {{t\\n \\\"routes.ndt-report-certificates.messages.manage-ndt-link\\\"\\n }}\\n

\\n
\\n
\\n \\n \\n \\n {{#if (has-value this.errorDuplicate)}}\\n
\\n \\n {{this.errorDuplicate}}\\n \\n
\\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"
\\n \\n
\\n \\n {{#if (has-value this.reportLabel)}}\\n {{this.reportLabel}}\\n {{else}}\\n {{t\\n \\\"components.model-ndt-report-certificate/lookup.messages.placeholder\\\"\\n }}\\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @showAddButton}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n
\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{ndt.designation}}\\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-project-ndt-report/lookup.buttons.search\\\"}}\\n \\n \\n {{t \\\"components.model-project-ndt-report/lookup.buttons.clear\\\"}}\\n
\\n
\\n \\n {{t \\\"components.model-ndt-report-certificate/lookup.buttons.add-new\\\"}}\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-project-ndt-report/lookup.buttons.cancel\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingCreateReport}}\\n \\n \\n
\\n \\n

{{t \\\"routes.ndt-report-certificates.messages.moved-to-assembly\\\"}}

\\n

\\n {{t\\n \\\"routes.ndt-report-certificates.messages.manage-ndt-link\\\"\\n }}\\n

\\n
\\n
\\n \\n \\n \\n {{#if (has-value this.errorDuplicate)}}\\n
\\n \\n {{this.errorDuplicate}}\\n \\n
\\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-ndt-report-certificate/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-ndt-report-certificate/lookup.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty, readOnly } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { isPermissionDenied, isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { getFilenameWithoutExtension } from 'weldnote/src-weldnote/http/file-utils';\nimport { tracked } from '@glimmer/tracking';\n\nconst {\n HTTP: { DEBOUNCE },\n TEST_RESULTS,\n} = Constants;\n\n@classic\nexport default class Lookup extends Component {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n store;\n\n @service\n intl;\n\n @service('alert-message')\n alert;\n\n @notEmpty('helpText')\n hasHelp;\n\n @tracked\n isShowingSearch = false;\n\n @tracked\n isShowingCreateReport = false;\n\n @alias('selected')\n material;\n\n @tracked\n totalCount = 0;\n\n @tracked\n currentPage = 1;\n\n @tracked\n selectedType = null;\n\n @tracked\n reportNumber;\n\n pageSize = 10;\n\n @readOnly('selected')\n report;\n\n @readOnly('data.nonDestructiveTestOptions')\n nonDestructiveOptions;\n\n @readOnly('data.testResultOptions')\n testResultOptions;\n\n onCreate() {\n // default no-op\n }\n\n @computed('report.ndtReportNumber')\n get reportLabel() {\n if (!isEmpty(get(this, 'report.id'))) {\n return get(this, 'report.ndtReportNumber');\n }\n return '';\n }\n\n init() {\n super.init(...arguments);\n this.loadData.perform();\n }\n\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n if (!isEmpty(this.searchOptions)) {\n this.selectedType = get(this, 'searchOptions.type');\n }\n }\n\n @computed\n get gridColumns() {\n let { intl } = this;\n let reportNumberLabel = intl.t(\n 'components.model-project-ndt-report/lookup.table.report-number-column'\n );\n let typeLabel = intl.t('components.model-project-ndt-report/lookup.table.type-column');\n let dateLabel = intl.t('components.model-project-ndt-report/lookup.table.date-column');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'ndtReportNumber',\n label: reportNumberLabel,\n width: '150px',\n sortable: false,\n },\n {\n valuePath: 'typeOfTest.shortDesignation',\n label: typeLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'reportDate',\n cellComponent: 'weldnote-grid/date-cell',\n label: dateLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n label: '',\n width: '100px',\n sortable: false,\n cellComponent: 'model-ndt-report-certificate/lookup/select-ndt-report',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n let filters = {};\n\n options.page = this.currentPage;\n options.pageSize = this.pageSize;\n\n // Set the search criteria\n let { reportNumber, data } = this;\n if (!isEmpty(reportNumber)) {\n filters.reportNumber = reportNumber;\n }\n\n let type = get(this, 'selectedType.id');\n if (!isEmpty(type)) {\n filters.testType = type;\n }\n\n await timeout(DEBOUNCE);\n let result = await data.listAllNDTReportCertificates(options, filters);\n if (!isEmpty(result)) {\n set(this, 'model', result);\n this.totalCount = result.meta.records;\n } else {\n set(this, 'model', result);\n this.totalCount = 0;\n }\n }\n );\n\n clearProperties() {\n this.reportNumber = null;\n this.resetPage();\n this.loadData.perform();\n }\n\n resetPage() {\n this.currentPage = 1;\n }\n\n searchMaterial(pageNumber) {\n this.currentPage = pageNumber;\n this.loadData.perform();\n }\n\n closeModal() {\n this.isShowingSearch = false;\n }\n\n openModal() {\n this.isShowingSearch = true;\n }\n\n @action\n openSearch() {\n this.openModal();\n this.searchMaterial(1);\n }\n\n @action\n closeSearch() {\n this.closeModal();\n }\n\n @action\n search(pageNumber) {\n this.currentPage = pageNumber;\n this.searchMaterial(pageNumber);\n }\n\n @action\n searchInspectors(text) {\n return this.data.listAllInspectors({}, { name: text });\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n onColumnClick() {}\n\n @action\n chooseReport(row) {\n let id = get(row, 'id');\n this.store\n .findRecord('ndt-report-certificate', id)\n .then((report) => {\n get(this, 'onSelect')(report);\n })\n .finally(() => {\n this.closeModal();\n });\n }\n\n @action\n openCreateReport() {\n this.isShowingCreateReport = true;\n this.isShowingSearch = false;\n this.newReport = this.store.createRecord('ndt-report-certificate', {\n typeOfTest: this.selectedType,\n });\n }\n\n @action\n saveReport() {\n if (!this.newReport.validate()) {\n return;\n }\n let { intl, alert } = this;\n set(this, 'errorDuplicate', null);\n this.newReport\n .save()\n .then((savedReport) => {\n this.isShowingCreateReport = false;\n this.isShowingSearch = false;\n this.onCreate(savedReport);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl\n .t('components.model-ndt-report-certificate/lookup.messages.error.duplicate', {\n report: this.newReport.ndtReportNumber,\n })\n .toString()\n );\n set(\n this,\n 'errorDuplicate',\n intl\n .t('components.model-ndt-report-certificate/lookup.messages.error.duplicate', {\n report: this.newReport.ndtReportNumber,\n })\n .toString()\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(\n intl.t(\n 'components.model-ndt-report-certificate/lookup.messages.error.permission-denied'\n )\n );\n } else {\n alert.error(\n intl.t('components.model-ndt-report-certificate/lookup.messages.error.unknown')\n );\n }\n });\n }\n\n @action\n onUploadFile(fileUpload) {\n if (isEmpty(this.newReport.ndtReportNumber)) {\n set(\n this,\n 'newReport.ndtReportNumber',\n getFilenameWithoutExtension(get(fileUpload, 'originalFilename'))\n );\n }\n }\n\n @action\n closeCreateReport() {\n this.isShowingCreateReport = false;\n this.newReport.unloadRecord();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/model-ndt-report-certificate/lookup/select-ndt-report.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-ndt-report-certificate/lookup/select-ndt-report.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.canEdit}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless @model.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if this.canEdit}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless @model.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-non-destructive-testing/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-non-destructive-testing/edit.hbs\"}});\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport { service } from '@ember/service';\n\nexport default class Edit extends Base {\n\n @service\n userSession;\n\n @service\n weldnoteData;\n\n get showDeleteButton() {\n return this.canEdit;\n }\n\n get canEdit() {\n if (this.args.model.isNew) {\n return true;\n }\n return !this.args.model.system || this.userSession.isAdmin;\n }\n\n get testTypeOptions() {\n return this.weldnoteData.nonDestructiveTestTypeOptions;\n }\n\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-piping-piece/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-piping-piece/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/piping-piece-rules';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\nimport ModelSetter from 'weldnote/mixins/model-setters';\n\nconst { PIPING_PIECE } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute, ModelSetter) {\n @action\n setDiameter(value) {\n this.setModelDecimalValue(PIPING_PIECE.DIAMETER, value);\n }\n\n @action\n setThickness(value) {\n this.setModelDecimalValue(PIPING_PIECE.THICKNESS, value);\n }\n\n @action\n setDiameterInches(value) {\n this.setModelDecimalValue(PIPING_PIECE.DIAMETER_INCHES, value);\n }\n\n @action\n setThicknessInches(value) {\n this.setModelDecimalValue(PIPING_PIECE.THICKNESS_INCHES, value);\n }\n\n @action\n setSchedule(value) {\n this.setModelValue(PIPING_PIECE.SCHEDULE, value);\n }\n\n @action\n setNominalDiameter(value) {\n this.setModelValue(PIPING_PIECE.NOMINAL_DIAMETER, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-plate-piece/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-plate-piece/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/plate-piece-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\nconst { PLATE_PIECE } = Rules;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter, SystemAttribute) {\n @service\n weldnoteData;\n\n @service\n userSession;\n\n @action\n setThickness(value) {\n this.setModelDecimalValue(PLATE_PIECE.THICKNESS, value);\n }\n\n @action\n setThicknessInches(value) {\n this.setModelDecimalValue(PLATE_PIECE.THICKNESS_INCHES, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-post-weld-treatment-method/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-post-weld-treatment-method/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.isGlobalAdmin)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.isGlobalAdmin)}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canonicalCodeOptions}}\\n \\n {{get option this.canonicalCodeAttribute}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{#unless @model.isNew}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/unless}}\\n\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.isGlobalAdmin)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.isGlobalAdmin)}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canonicalCodeOptions}}\\n \\n {{get option this.canonicalCodeAttribute}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{#unless @model.isNew}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/unless}}\\n\",\"moduleName\":\"weldnote/components/model-pqr-learned-mapping/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr-learned-mapping/edit.hbs\"}});\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport { service } from '@ember/service';\nimport { action, get } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\n\nconst ENTITY_TYPES = [\n { key: 'WeldType', label: 'Weld Type' },\n { key: 'WeldingProcess', label: 'Welding Process' },\n { key: 'WeldingPosition', label: 'Welding Position' },\n { key: 'ArcTransferMode', label: 'Arc Transfer Mode' },\n { key: 'TypeCurrentPolarity', label: 'Type Current Polarity' },\n { key: 'ProcessMecanization', label: 'Process Mecanization' },\n { key: 'WeldingDetail', label: 'Welding Detail' },\n { key: 'Gas', label: 'Gas' },\n];\n\nconst ENTITY_TYPE_CONFIG = {\n WeldType: {\n optionsGetter: 'weldTypeOptions',\n codeAttribute: 'weldType',\n industryCodePath: 'industryCode.id',\n },\n WeldingProcess: {\n optionsGetter: 'weldingProcessOptions',\n codeAttribute: 'shortDesignation',\n industryCodePath: 'industryCode.id',\n },\n WeldingPosition: {\n optionsGetter: 'weldingPositionOptions',\n codeAttribute: 'code',\n industryCodePath: 'industryCode.id',\n },\n ArcTransferMode: {\n optionsGetter: 'arcTransferModeOptions',\n codeAttribute: 'transferMode',\n industryCodePath: 'industryCode.id',\n },\n TypeCurrentPolarity: {\n optionsGetter: 'typeCurrentPolarityOptions',\n codeAttribute: 'typeCurrent',\n industryCodePath: null,\n },\n ProcessMecanization: {\n optionsGetter: 'processMecanizationOptions',\n codeAttribute: 'name',\n industryCodePath: null,\n },\n WeldingDetail: {\n optionsGetter: 'weldingDetailOptions',\n codeAttribute: 'shortDesignation',\n industryCodePath: null,\n },\n Gas: { optionsGetter: null, codeAttribute: 'symbol', industryCodePath: 'code.id' },\n};\n\nexport default class ModelPqrLearnedMappingEditComponent extends Base {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @tracked\n gasOptions = [];\n\n get entityTypeOptions() {\n return ENTITY_TYPES;\n }\n\n get currentEntityType() {\n return this.args.model?.entityType;\n }\n\n get entityTypeConfig() {\n if (!this.currentEntityType) {\n return null;\n }\n return ENTITY_TYPE_CONFIG[this.currentEntityType] || null;\n }\n\n get canonicalCodeOptions() {\n let config = this.entityTypeConfig;\n if (!config) {\n return null;\n }\n\n let options;\n\n if (this.currentEntityType === 'Gas') {\n options = this.gasOptions;\n } else if (config.optionsGetter) {\n options = this.data[config.optionsGetter] || [];\n } else {\n return null;\n }\n\n // Filter by industry code if applicable\n let selectedIndustryCodeId = this.args.model?.industryCode?.id;\n if (selectedIndustryCodeId && config.industryCodePath) {\n options = options.filter((option) => {\n return get(option, config.industryCodePath) === selectedIndustryCodeId;\n });\n }\n\n return options;\n }\n\n get canonicalCodeAttribute() {\n let config = this.entityTypeConfig;\n return config?.codeAttribute || null;\n }\n\n get selectedCanonicalOption() {\n let options = this.canonicalCodeOptions;\n let currentCode = this.args.model?.canonicalCode;\n let codeAttribute = this.canonicalCodeAttribute;\n\n if (!options || !currentCode || !codeAttribute) {\n return null;\n }\n\n return options.find((option) => get(option, codeAttribute) === currentCode) || null;\n }\n\n @action\n setCanonicalCodeFromOption(option) {\n if (!option) {\n this.args.model.canonicalCode = null;\n return;\n }\n\n let codeAttribute = this.canonicalCodeAttribute;\n if (codeAttribute) {\n this.args.model.canonicalCode = get(option, codeAttribute);\n }\n }\n\n @action\n loadGasOptions() {\n if (this.currentEntityType === 'Gas' && isEmpty(this.gasOptions)) {\n this.data.searchGas('').then((gases) => {\n this.gasOptions = gases.slice();\n });\n }\n }\n\n @action\n onEntityTypeChange(entityTypeKey) {\n // WAttributeLov passes the key string directly\n this.args.model.entityType = entityTypeKey || null;\n\n if (entityTypeKey === 'Gas') {\n this.loadGasOptions();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-pqr-standard/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr-standard/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @alias('model')\n standard;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if @isOverlayWeld}}\\n \\n \\n \\n \\n\\n \\n {{#if @hasFill}}\\n \\n \\n\\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{yield}}\\n \\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if @isOverlayWeld}}\\n \\n \\n \\n \\n\\n \\n {{#if @hasFill}}\\n \\n \\n\\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{yield}}\\n \\n\",\"moduleName\":\"weldnote/components/model-pqr/additional-details.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/additional-details.hbs\"}});\nimport Component from '@glimmer/component';\nimport { get } from '@ember/object';\nimport { isTungstenProcess, isESW, isSAW } from 'weldnote/utils/rules/welding-process';\n\nexport default class AdditionalDetails extends Component {\n get tungstenDiameterRootDisabled() {\n let process = get(this.args, 'processes.root');\n return !isTungstenProcess(process);\n }\n\n get tungstenDiameterFillDisabled() {\n let process = get(this.args, 'processes.fill');\n return !isTungstenProcess(process);\n }\n\n get tungstenDiameterCapDisabled() {\n let process = get(this.args, 'processes.cap');\n return !isTungstenProcess(process);\n }\n\n get supplementalDeviceRootDisabled() {\n let process = get(this.args, 'processes.root');\n return !isESW(process) && !isSAW(process);\n }\n\n get supplementalDeviceFillDisabled() {\n let process = get(this.args, 'processes.fill');\n return !isESW(process) && !isSAW(process);\n }\n\n get supplementalDeviceCapDisabled() {\n let process = get(this.args, 'processes.cap');\n return !isESW(process) && !isSAW(process);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-pqr/base-material-tests.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/base-material-tests.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each this.model.bendTestLines as |bend|}}\\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-pqr/bend-test.table-column-test-number\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-test-type\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-bend-angle\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-elongation\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-results\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-remove\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq bend.orderNum this.lineToDelete.orderNum)}}\\n \\n \\n {{t \\\"components.model-pqr/bend-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/bend-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n {{t \\\"components.model-pqr/bend-test.empty-line-list\\\"}}\\n
\\n {{#if @isEditing}}\\n
\\n \\n
\\n {{/if}}\\n
\\n
\\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each this.model.bendTestLines as |bend|}}\\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-pqr/bend-test.table-column-test-number\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-test-type\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-bend-angle\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-elongation\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-results\\\"\\n }}{{t\\n \\\"components.model-pqr/bend-test.table-column-remove\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq bend.orderNum this.lineToDelete.orderNum)}}\\n \\n \\n {{t \\\"components.model-pqr/bend-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/bend-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n {{t \\\"components.model-pqr/bend-test.empty-line-list\\\"}}\\n
\\n {{#if @isEditing}}\\n
\\n \\n
\\n {{/if}}\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/bend-test.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/bend-test.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\n\n@classic\nexport default class BendNottest extends Component {\n @service('weldnoteData')\n data;\n\n @alias('data.testResultOptions')\n testResultOptions;\n\n @alias('data.bendTestTypeOptions')\n testTypeOptions;\n\n @computed('showAdvancedFields')\n get columnSize() {\n if (this.showAdvancedFields) {\n return 3;\n }\n return 2;\n }\n\n lineToDelete = null;\n\n @action\n setBendType(bend, value) {\n set(bend, 'type', value);\n }\n\n @action\n setBendAngle(bend, value) {\n set(bend, 'bendAngle', value);\n }\n\n @action\n setBendElongation(bend, value) {\n set(bend, 'elongation', value);\n }\n\n @action\n setBendResults(bend, value) {\n set(bend, 'results', value);\n }\n\n @action\n setTestType(bend, value) {\n set(bend, 'testType', value);\n }\n\n @action\n removeTensileLine(line) {\n set(this, 'lineToDelete', line);\n }\n\n @action\n confirmRemove() {\n get(this, 'removeLine')(get(this, 'lineToDelete'));\n set(this, 'lineToDelete', null);\n }\n\n @action\n cancelRemove() {\n set(this, 'lineToDelete', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-pqr/chemical-analysis.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/chemical-analysis.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport Rules from 'weldnote/utils/pqr-rules';\n\nconst { PQR } = Rules;\n\n@classic\nexport default class ChemicalAnalysis extends Component.extend(ModelSetter) {\n @alias('model')\n pqr;\n\n validateField(field) {\n return this.model.validate({ only: [field] });\n }\n\n @action\n setCarbonContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_CARBON_CONTENT, value);\n this.validateField(PQR.CHEMICAL_CARBON_CONTENT);\n }\n\n @action\n setManganeseContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_MANGANESE_CONTENT, value);\n this.validateField(PQR.CHEMICAL_MANGANESE_CONTENT);\n }\n\n @action\n setSiliconContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_SILICON_CONTENT, value);\n this.validateField(PQR.CHEMICAL_SILICON_CONTENT);\n }\n\n @action\n setChromiumContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_CHROMIUM_CONTENT, value);\n this.validateField(PQR.CHEMICAL_CHROMIUM_CONTENT);\n }\n\n @action\n setNickelContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_NICKEL_CONTENT, value);\n this.validateField(PQR.CHEMICAL_NICKEL_CONTENT);\n }\n\n @action\n setMolybdenumContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_MOLYBDENUM_CONTENT, value);\n this.validateField(PQR.CHEMICAL_MOLYBDENUM_CONTENT);\n }\n\n @action\n setCopperContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_COPPER_CONTENT, value);\n this.validateField(PQR.CHEMICAL_COPPER_CONTENT);\n }\n\n @action\n setPhosphorusContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_PHOSPHORUS_CONTENT, value);\n this.validateField(PQR.CHEMICAL_PHOSPHORUS_CONTENT);\n }\n\n @action\n setSulphurContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_SULPHUR_CONTENT, value);\n this.validateField(PQR.CHEMICAL_SULPHUR_CONTENT);\n }\n\n @action\n setAluminumContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_ALUMINUM_CONTENT, value);\n this.validateField(PQR.CHEMICAL_ALUMINUM_CONTENT);\n }\n\n @action\n setTitaniumContent(value) {\n this.setModelDecimalValue(PQR.CHEMICAL_TITANIUM_CONTENT, value);\n this.validateField(PQR.CHEMICAL_TITANIUM_CONTENT);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-pqr/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t \\\"components.model-pqr/confirm-delete.messages.suggest-archive\\\"}}

\\n

{{t\\n \\\"components.model-pqr/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n
\", {\"contents\":\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-pqr/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t \\\"components.model-pqr/confirm-delete.messages.suggest-archive\\\"}}

\\n

{{t\\n \\\"components.model-pqr/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/model-pqr/confirm-delete.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/confirm-delete.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport Component from '@ember/component';\n\n@classic\nexport default class ConfirmDelete extends Component {\n @action\n archivePQR() {\n this.onArchive(this.onArchiveCallback);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasAll}}\\n {{#if this.bothEqual}}\\n {{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n {{! The else is formatted this way to make the spaces in the beggining and ending not appear }}\\n {{else}}{{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n -\\n {{format-decimal this.maximum convertToFraction=@convertToFraction}}{{/if}}{{else}}\\n {{#if this.hasMin}}\\n ≥\\n {{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n {{else}}\\n {{#if this.hasMax}}\\n ≤\\n {{format-decimal this.maximum convertToFraction=@convertToFraction}}\\n {{/if}}\\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if this.hasAll}}\\n {{#if this.bothEqual}}\\n {{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n {{! The else is formatted this way to make the spaces in the beggining and ending not appear }}\\n {{else}}{{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n -\\n {{format-decimal this.maximum convertToFraction=@convertToFraction}}{{/if}}{{else}}\\n {{#if this.hasMin}}\\n ≥\\n {{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n {{else}}\\n {{#if this.hasMax}}\\n ≤\\n {{format-decimal this.maximum convertToFraction=@convertToFraction}}\\n {{/if}}\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/display-decimal-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/display-decimal-range.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { computed } from '@ember/object';\nimport { readOnly, notEmpty, or, and } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\n@classNames('display-inline')\nexport default class DisplayDecimalRange extends Component {\n @readOnly('min')\n minimum;\n\n @readOnly('max')\n maximum;\n\n @and('hasMin', 'hasMax')\n hasAll;\n\n @notEmpty('min')\n hasMin;\n\n @notEmpty('max')\n hasMax;\n\n @or('hasMin', 'hasMax')\n hasAny;\n\n convertToFraction = false;\n\n @computed('min', 'max')\n get bothEqual() {\n let { min, max } = this;\n return min === max;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n
\\n \\n \\n {{#if this.hasCertificateError}}\\n {{this.certificateError}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-pqr/duplicate.help.copy-tests\\\"}}\\n
\\n
\\n
\\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n {{#if this.showUnitSystemMessage}}\\n
\\n \\n {{t 'components.model-pqr/duplicate.messages.new-unit-system'}}\\n \\n
\\n {{/if}}\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-pqr/duplicate.buttons.create-certificate\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n
\\n \\n \\n {{#if this.hasCertificateError}}\\n {{this.certificateError}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-pqr/duplicate.help.copy-tests\\\"}}\\n
\\n
\\n
\\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n {{#if this.showUnitSystemMessage}}\\n
\\n \\n {{t 'components.model-pqr/duplicate.messages.new-unit-system'}}\\n \\n
\\n {{/if}}\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-pqr/duplicate.buttons.create-certificate\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-pqr/duplicate.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/duplicate.hbs\"}});\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class Duplicate extends Component {\n @service\n intl;\n\n @service('alert-message')\n alert;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @notEmpty('certificateError')\n hasCertificateError;\n\n @tracked\n certificateError = null;\n\n @tracked\n copyTests = false;\n\n @tracked\n certificateNumber = null;\n\n @tracked\n selectedUnitSystem = null;\n\n get hasErrors() {\n let { certificateNumber } = this;\n if (isEmpty(certificateNumber)) {\n return true;\n }\n return false;\n }\n\n get showUnitSystemMessage() {\n if (this.selectedUnitSystem) {\n if (this.selectedUnitSystem.key !== this.args.pqr.unitSystem) {\n return true;\n }\n }\n return false;\n }\n\n constructor() {\n super(...arguments);\n if (this.args.pqr) {\n let unitSystem = this.args.pqr.unitSystem;\n if (!isEmpty(unitSystem)) {\n const option = this.notesData.getUnitSystem(unitSystem);\n if (option) {\n this.selectedUnitSystem = option;\n }\n }\n }\n }\n\n @action\n createPQR() {\n let { certificateNumber, copyTests, alert, intl, selectedUnitSystem } = this;\n if (isEmpty(copyTests)) {\n copyTests = false;\n }\n if (!this.hasErrors) {\n this.certificateError = null;\n this.args.onSave({ certificateNumber, copyTests, unitSystem: selectedUnitSystem.key });\n } else {\n this.certificateError = intl.t(\n 'components.model-welder-certificate/duplicate.certificate-required'\n );\n alert.error(intl.t('components.model-welder-certificate/duplicate.error-message-warning'));\n }\n }\n\n @action\n setCertificateNumber(newNumber) {\n this.certificateNumber = newNumber;\n }\n\n @action\n setCopyTests(shouldCopyTest) {\n this.copyTests = shouldCopyTest;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

\\n {{this.title}}\\n ({{this.pqr.standard.standard}})\\n {{this.subtitle}}\\n

\\n \\n\\n \\n\\n {{#if (and @permissions.canCreatePQR (not this.pqr.isArchived))}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#unless this.pqr.isArchived}}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/unless}}\\n\\n {{#unless this.pqr.isArchived}}\\n {{#if this.userSession.canCreateWPSFromPQR}}\\n \\n \\n {{t \\\"components.model-pqr/edit.create-wps-button\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n {{#if (and this.userSession.canArchivePQR this.pqr.isArchived)}}\\n \\n {{t \\\"components.model-pqr/view-mode.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#if (and (not this.isExportingPqrReport) this.pqr.isActive)}}\\n \\n {{t \\\"components.model-pqr/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-pqr/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t \\\"components.model-pqr/edit.export-pdf.messages.exporting-pqr\\\"}}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.pqr\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute task.currentTask.value)}}- {{/unless}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t \\\"components.model-pqr/edit.export-pdf.messages.preparing-link\\\"}}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
{{t \\\"components.model-pqr/edit.export-pdf.buttons.close\\\"}}
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.pqr.isArchived}}\\n
\\n \\n {{t \\\"components.model-pqr/view-mode.messages.pqr-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n
\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if this.hasPqrDeleteErrors}}\\n \\n
    \\n {{#each this.pqrDeleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"wps\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.wps-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.welding-book-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"project\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.project-prevents-delete\\\"}}\\n {{error.label}}\\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.unarchive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingDuplicateModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n \\n
\\n
\\n {{#if this.showDetailsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n {{this.processNames.process1}}\\n \\n \\n {{t\\n \\\"pqr-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n {{this.processNames.process2}}\\n \\n \\n {{t\\n \\\"pqr-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n {{this.processNames.process3}}\\n \\n \\n {{t\\n \\\"pqr-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n {{else}}\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n
\\n \\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n
\\n \\n

{{this.overlayTypeLabel}}

\\n
\\n
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n
\\n
\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{! Base Materials }}\\n {{#if this.showBaseMaterialsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-pqr/edit.base-material1\\\"}}\\n {{else}}\\n {{t \\\"components.model-pqr/edit.base-material-name\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.dissimilar-materials\\\"}}\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n
\\n
\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial1ThicknessVisible}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-pqr/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial2ThicknessVisible}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n this.isFilletWeldBaseMaterial1ThicknessVisible\\n this.isFilletWeldBaseMaterial2ThicknessVisible\\n )\\n }}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n {{#if this.showThroatThickness}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n {{#if (and (not this.isFilletWeld) this.hasDissimilarMaterials)}}\\n  \\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-pqr/edit.base-material1\\\"}}\\n {{else}}\\n {{t \\\"components.model-pqr/edit.base-material-name\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n {{option.visualLabel}}\\n \\n
\\n
\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n {{! Base Material 1 Thickness Approval Range (Dissimilar Materials) }}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial1ThicknessVisible}}\\n \\n \\n \\n {{#if\\n (not\\n (is-empty-attribute\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n )\\n )\\n }}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n {{! Empty row for Base Material 1 Diameter to align }}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-pqr/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n {{! Base Material 2 Thickness Approval Range (Dissimilar Materials) }}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial2ThicknessVisible}}\\n \\n \\n \\n {{#if\\n (not\\n (is-empty-attribute\\n this.pqr.filletWeldBaseMaterial2ThicknessMaximumApprovalRange\\n )\\n )\\n }}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial2ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.filletWeldBaseMaterial2ThicknessMaximumApprovalRange\\n convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial2ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n {{! Empty row for Base Material 2 Diameter to align }}\\n \\n \\n {{/if}}\\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n this.isFilletWeldBaseMaterial1ThicknessVisible\\n this.isFilletWeldBaseMaterial2ThicknessVisible\\n )\\n }}\\n \\n \\n \\n {{#if\\n (not\\n (is-empty-attribute\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n )\\n )\\n }}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showMessageAboutThicknessInIsoWithImpactRequirements}}\\n {{t\\n \\\"components.model-pqr/edit.messages.thickness-missing-impact-report\\\"\\n }}\\n {{/if}}\\n \\n \\n {{#if this.showThroatThickness}}\\n \\n \\n \\n {{#if (has-value this.pqr.throatThicknessMaximumApprovalRange)}}\\n {{t\\n \\\"components.model-pqr/edit.throat-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.throatThicknessMinimumApprovalRange convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.throatThicknessMaximumApprovalRange convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.throat-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.throatThicknessMinimumApprovalRange convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-help-text\\\"\\n }}\\n {{#if (and (not this.isFilletWeld) this.hasDissimilarMaterials)}}\\n {{t\\n \\\"components.model-pqr/edit.diameter-approval-range-base-material1\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n
\\n
\\n {{! Dimensions }}\\n {{#if (or this.showAnyThickness (and this.pqr.isPipe this.showAdvancedFields))}}\\n \\n \\n \\n {{#if this.showAnyThickness}}\\n
{{t\\n \\\"components.model-pqr/edit.deposited-metal\\\"\\n }}
\\n {{#if this.showThicknessRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showAnyThickness}}\\n \\n \\n {{#if this.isLayerSumBiggerThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-bigger-than-total\\\"\\n difference=this.rootFillCapDifference\\n differencePercent=this.rootFillCapDifferencePercentage\\n unit=@units.distance\\n }}\\n

\\n
\\n {{else}}\\n {{#if this.isLayerSumLessThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-less-than-total\\\"\\n difference=this.rootFillCapDifferencePositive\\n unit=@units.distance\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if (and this.pqr.isPipe this.showAdvancedFields)}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n \\n {{#if this.showAnyThickness}}\\n
{{t\\n \\\"components.model-pqr/edit.deposited-metal\\\"\\n }}
\\n {{#if this.showThicknessRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.showThicknessFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.showThicknessCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showAnyThickness}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if (and this.pqr.isPipe this.showAdvancedFields)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-angle-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showGrooveAngle}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootFace}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootGap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showNumberOfLayers}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showConsumablesTab}}\\n {{! Filler Material Details }}\\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.passes\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showPassesTab}}\\n {{! Welding Parameters }}\\n \\n
\\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.save-and-create-wps-button\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.create-report-button\\\"}}\\n \\n \\n {{t\\n \\\"components.model-pqr/edit.links.add-test\\\"\\n }}\\n
\\n
\\n {{/if}}\\n {{#if this.showOtherTab}}\\n \\n {{/if}}\\n {{#if this.showTestsTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n {{#if this.showAdvancedFields}}\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\", {\"contents\":\"
\\n
\\n

\\n {{this.title}}\\n ({{this.pqr.standard.standard}})\\n {{this.subtitle}}\\n

\\n \\n\\n \\n\\n {{#if (and @permissions.canCreatePQR (not this.pqr.isArchived))}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#unless this.pqr.isArchived}}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/unless}}\\n\\n {{#unless this.pqr.isArchived}}\\n {{#if this.userSession.canCreateWPSFromPQR}}\\n \\n \\n {{t \\\"components.model-pqr/edit.create-wps-button\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n {{#if (and this.userSession.canArchivePQR this.pqr.isArchived)}}\\n \\n {{t \\\"components.model-pqr/view-mode.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#if (and (not this.isExportingPqrReport) this.pqr.isActive)}}\\n \\n {{t \\\"components.model-pqr/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-pqr/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t \\\"components.model-pqr/edit.export-pdf.messages.exporting-pqr\\\"}}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.pqr\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute task.currentTask.value)}}- {{/unless}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t \\\"components.model-pqr/edit.export-pdf.messages.preparing-link\\\"}}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
{{t \\\"components.model-pqr/edit.export-pdf.buttons.close\\\"}}
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.pqr.isArchived}}\\n
\\n \\n {{t \\\"components.model-pqr/view-mode.messages.pqr-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n
\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if this.hasPqrDeleteErrors}}\\n \\n
    \\n {{#each this.pqrDeleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"wps\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.wps-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.welding-book-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"project\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.project-prevents-delete\\\"}}\\n {{error.label}}\\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.unarchive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingDuplicateModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n \\n
\\n
\\n {{#if this.showDetailsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n {{this.processNames.process1}}\\n \\n \\n {{t\\n \\\"pqr-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n {{this.processNames.process2}}\\n \\n \\n {{t\\n \\\"pqr-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n {{this.processNames.process3}}\\n \\n \\n {{t\\n \\\"pqr-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n {{else}}\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n
\\n \\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n
\\n \\n

{{this.overlayTypeLabel}}

\\n
\\n
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n
\\n
\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{! Base Materials }}\\n {{#if this.showBaseMaterialsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-pqr/edit.base-material1\\\"}}\\n {{else}}\\n {{t \\\"components.model-pqr/edit.base-material-name\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.dissimilar-materials\\\"}}\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n
\\n
\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial1ThicknessVisible}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-pqr/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial2ThicknessVisible}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n this.isFilletWeldBaseMaterial1ThicknessVisible\\n this.isFilletWeldBaseMaterial2ThicknessVisible\\n )\\n }}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n {{#if this.showThroatThickness}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n {{#if (and (not this.isFilletWeld) this.hasDissimilarMaterials)}}\\n  \\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-pqr/edit.base-material1\\\"}}\\n {{else}}\\n {{t \\\"components.model-pqr/edit.base-material-name\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n {{option.visualLabel}}\\n \\n
\\n
\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n {{! Base Material 1 Thickness Approval Range (Dissimilar Materials) }}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial1ThicknessVisible}}\\n \\n \\n \\n {{#if\\n (not\\n (is-empty-attribute\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n )\\n )\\n }}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n {{! Empty row for Base Material 1 Diameter to align }}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-pqr/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n {{! Base Material 2 Thickness Approval Range (Dissimilar Materials) }}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isFilletWeldBaseMaterial2ThicknessVisible}}\\n \\n \\n \\n {{#if\\n (not\\n (is-empty-attribute\\n this.pqr.filletWeldBaseMaterial2ThicknessMaximumApprovalRange\\n )\\n )\\n }}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial2ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.filletWeldBaseMaterial2ThicknessMaximumApprovalRange\\n convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial2ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n {{! Empty row for Base Material 2 Diameter to align }}\\n \\n \\n {{/if}}\\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (or\\n this.isFilletWeldBaseMaterial1ThicknessVisible\\n this.isFilletWeldBaseMaterial2ThicknessVisible\\n )\\n }}\\n \\n \\n \\n {{#if\\n (not\\n (is-empty-attribute\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n )\\n )\\n }}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMaximumApprovalRange\\n convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.fillet-weld-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.filletWeldBaseMaterial1ThicknessMinimumApprovalRange\\n convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showMessageAboutThicknessInIsoWithImpactRequirements}}\\n {{t\\n \\\"components.model-pqr/edit.messages.thickness-missing-impact-report\\\"\\n }}\\n {{/if}}\\n \\n \\n {{#if this.showThroatThickness}}\\n \\n \\n \\n {{#if (has-value this.pqr.throatThicknessMaximumApprovalRange)}}\\n {{t\\n \\\"components.model-pqr/edit.throat-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.throatThicknessMinimumApprovalRange convertToFraction=true\\n )\\n max=(format-decimal\\n this.pqr.throatThicknessMaximumApprovalRange convertToFraction=true\\n )\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{else}}\\n {{t\\n \\\"components.model-pqr/edit.throat-thickness-help-text\\\"\\n min=(format-decimal\\n this.pqr.throatThicknessMinimumApprovalRange convertToFraction=true\\n )\\n max=\\\"Inf.\\\"\\n unit=@units.distance\\n htmlSafe=true\\n }}\\n {{/if}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-help-text\\\"\\n }}\\n {{#if (and (not this.isFilletWeld) this.hasDissimilarMaterials)}}\\n {{t\\n \\\"components.model-pqr/edit.diameter-approval-range-base-material1\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n
\\n
\\n {{! Dimensions }}\\n {{#if (or this.showAnyThickness (and this.pqr.isPipe this.showAdvancedFields))}}\\n \\n \\n \\n {{#if this.showAnyThickness}}\\n
{{t\\n \\\"components.model-pqr/edit.deposited-metal\\\"\\n }}
\\n {{#if this.showThicknessRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showAnyThickness}}\\n \\n \\n {{#if this.isLayerSumBiggerThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-bigger-than-total\\\"\\n difference=this.rootFillCapDifference\\n differencePercent=this.rootFillCapDifferencePercentage\\n unit=@units.distance\\n }}\\n

\\n
\\n {{else}}\\n {{#if this.isLayerSumLessThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-less-than-total\\\"\\n difference=this.rootFillCapDifferencePositive\\n unit=@units.distance\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if (and this.pqr.isPipe this.showAdvancedFields)}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n \\n {{#if this.showAnyThickness}}\\n
{{t\\n \\\"components.model-pqr/edit.deposited-metal\\\"\\n }}
\\n {{#if this.showThicknessRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.showThicknessFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.showThicknessCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showAnyThickness}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if (and this.pqr.isPipe this.showAdvancedFields)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-pqr/edit.maximum-angle-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showGrooveAngle}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootFace}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootGap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showNumberOfLayers}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showConsumablesTab}}\\n {{! Filler Material Details }}\\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.passes\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showPassesTab}}\\n {{! Welding Parameters }}\\n \\n
\\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.save-and-create-wps-button\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.create-report-button\\\"}}\\n \\n \\n {{t\\n \\\"components.model-pqr/edit.links.add-test\\\"\\n }}\\n
\\n
\\n {{/if}}\\n {{#if this.showOtherTab}}\\n \\n {{/if}}\\n {{#if this.showTestsTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n {{#if this.showAdvancedFields}}\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/model-pqr/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/edit.hbs\"}});\nimport { assert } from '@ember/debug';\nimport { action, computed, get, set } from '@ember/object';\nimport { alias, and, equal, gt, lt, not, notEmpty, or } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\nimport classic from 'ember-classic-decorator';\nimport { task } from 'ember-concurrency';\nimport moment from 'moment';\nimport Base from 'weldnote/components/base-edit';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport jointTypeFilteredOptions from 'weldnote/macros/joint-type-options';\nimport processMecanizationOptions from 'weldnote/macros/process-mecanization-options';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport PreviewImage from 'weldnote/mixins/preview-groove-layer-images';\nimport PqrApprovalRange from 'weldnote/src-weldnote/pqr/approval-ranges/pqr-approval-range';\nimport NotSupportedStandardApprovalRanges from 'weldnote/src-weldnote/pqr/approval-ranges/not-supported';\nimport { calculateProcessLabels } from 'weldnote/src-weldnote/welding/process-name-label-calculator';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isDuplicateError,\n isForeignKeyError,\n isPermissionDenied,\n} from 'weldnote/utils/json-api-errors';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport {\n isATypeOfButtWeld,\n isBranchConnection,\n isButtWeld,\n isFilletWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport {\n filterDetailsIncompatibleWithFilletWeld,\n filterDetailsIncompatibleWithOverlayWeld,\n filterDetailsIncompatibleWithPartialPenetrationButtWeld,\n isSingleOrMultiLayer,\n} from 'weldnote/utils/rules/welding-detail';\nimport { allowedMultiplePositionsPQR } from 'weldnote/utils/rules/welding-position';\nimport { isSameProcess } from 'weldnote/utils/rules/welding-process';\nimport {\n isStandardASME,\n isStandardAWSD11,\n isStandardAWSD15,\n isStandardISO,\n} from 'weldnote/utils/standards';\n\nconst { PQR } = PQRRules;\n\nconst {\n WELD_TYPES,\n GROOVE_SHAPE_OPTIONS,\n UNIT_SYSTEM,\n OVERLAY_TYPE_OPTIONS,\n WELDING_PROCESSES,\n WELDING_LAYER_OPTIONS,\n PRODUCT_TYPE,\n TASK_STATUS,\n OVERLAY_FILLER_METAL_FORM,\n} = Constants;\n\n/**\n * Model-PQR Edit Component\n *\n * Main editing interface for Procedure Qualification Records (PQRs) in the WeldNote application.\n * A PQR documents the actual welding performed to qualify a Welding Procedure Specification (WPS).\n *\n * ## Overview\n * This is a large, complex component (8,354 lines total) that manages all aspects of PQR documentation:\n * - Welding details (process, position, weld type, joint configuration)\n * - Base materials (specifications, thickness, diameter)\n * - Consumables (filler materials, shielding gases, backing)\n * - Welding parameters (pass-by-pass data and sequences)\n * - Test results (tensile, bend, impact, hardness, NDT)\n * - Approval ranges (qualified ranges derived from test piece values)\n * - Document management (PDF generation, archiving, attachments)\n *\n * ## Architecture\n * The component uses a tabbed interface with:\n * - Details Tab: Welding processes, positions, and thermal parameters\n * - Base Materials Tab: Material selection, dimensions, and joint details\n * - Consumables Tab: Filler materials, gases, and fluxes\n * - Passes Tab: Pass-by-pass welding parameters\n * - Other Tab: Advanced/optional fields\n * - Tests Tab: All test results and requirements\n *\n * ## Key Design Patterns\n * 1. **Two-Column Layout**: Test piece values (left) and approval ranges (right)\n * 2. **Context-Sensitive Fields**: Show/hide based on standard, weld type, and processes\n * 3. **Reactive Validation**: Real-time validation with tab error indicators\n * 4. **Standard-Specific Logic**: Adapts behavior for ASME, AWS D1.1/D1.5, ISO standards\n *\n * ## Usage\n * ```hbs\n * \n * ```\n *\n * ## Arguments\n * @argument {PqrModel} model - The PQR model instance to edit\n * @argument {Object} lists - Reference data collections (standards, materials, processes, etc.)\n * @argument {Object} units - Unit system configuration (metric/imperial)\n * @argument {Object} permissions - User permission flags\n *\n * ## Extends\n * - BaseEdit component (provides common edit functionality)\n * - PreviewImage mixin (handles image preview for groove designs)\n * - ModelSetter mixin (provides setter utilities for model properties)\n *\n * ## Services Used\n * - intl: Internationalization\n * - store: Ember Data store\n * - weldnoteData: Reference data management\n * - alertMessage: User notifications\n * - analytics: Event tracking\n * - loading: Loading state management\n * - userSession: User permissions and preferences\n * - taskMonitor: Background task tracking\n * - router: Navigation\n * - ajax: API calls\n * - media: Responsive design queries\n * - scroller: Scroll position management\n *\n * ## Known Limitations\n * - Large component size (8,354 lines) makes testing and maintenance challenging\n * - Complex interdependencies between fields and validation logic\n * - Performance may be impacted on low-end devices\n * - Uses mix of classic and modern Ember patterns\n *\n * ## See Also\n * - Documentation: /docs/components/model-pqr-edit.md\n * - PQR Model: app/models/pqr.ts\n * - Base Edit Component: app/components/base-edit.js\n *\n * @class Edit\n * @extends BaseEdit\n * @mixes PreviewImage\n * @mixes ModelSetter\n */\n@classic\nexport default class Edit extends Base.extend(PreviewImage, ModelSetter) {\n @service\n intl;\n\n @service\n store;\n\n @service\n weldnoteData;\n\n @alias('weldnoteData')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n alertMessage;\n\n @service\n analytics;\n\n @service\n loading;\n\n @service\n userSession;\n\n @service\n taskMonitor;\n\n @service\n router;\n\n @service\n ajax;\n\n @service\n media;\n\n @service\n scroller;\n\n @alias('model')\n pqr;\n\n @alias('pqr.standard.code')\n currentIndustryCode;\n\n @alias('currentIndustryCode.id')\n currentIndustryCodeId;\n\n @alias('pqr.weldTypeTestPiece')\n currentWeldType;\n\n @alias('pqr.grooveDesigns.firstObject')\n grooveDesign;\n\n @alias('pqr.weldLayerConfigurations.firstObject')\n weldLayerConfiguration;\n\n @alias('data.testResultOptions')\n testResultOptions;\n\n @jointTypeFilteredOptions('data.jointTypeOptions', 'pqr.weldTypeTestPiece')\n jointTypeOptions;\n\n @processMecanizationOptions('lists.processMecanizations', 'pqr.weldingProcessRootTestPiece')\n processMecanizationRootOptions;\n\n @processMecanizationOptions('lists.processMecanizations', 'pqr.weldingProcessFillTestPiece')\n processMecanizationFillOptions;\n\n @processMecanizationOptions('lists.processMecanizations', 'pqr.weldingProcessCapTestPiece')\n processMecanizationCapOptions;\n\n @equal('section', 'details')\n showDetailsTab;\n\n @equal('section', 'baseMaterials')\n showBaseMaterialsTab;\n\n @equal('section', 'consumables')\n showConsumablesTab;\n\n @equal('section', 'tests')\n showTestsTab;\n\n @equal('section', 'passes')\n showPassesTab;\n\n @equal('section', 'other')\n showOtherTab;\n\n @notEmpty('pqr.pqrReportDocumentPath')\n hasExportedPdfPath;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @alias('data.layerOptions')\n layerOptions;\n\n @alias('data.shieldingTypeOptions')\n shieldingOptions;\n\n @alias('data.weldingPositionDirectionOptions')\n weldingPositionDirectionOptions;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @filterFromCollectionByKey('lists.weldTypes', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n get weldingProcessOptions() {\n return get(this.lists, 'weldingProcesses')\n .filter((w) => get(w, 'industryCode.id') == get(this, 'currentIndustryCode.id'))\n .filter((w) => {\n if (!isEmpty(get(w, 'standard.id'))) {\n return get(w, 'standard.id') == get(this.pqr, 'standard.id');\n } else {\n return true;\n }\n });\n }\n\n @filterFromCollectionByKey('lists.arcTransferModes', 'industryCode.id', 'currentIndustryCode.id')\n arcTransferModeOptions;\n\n @computed('pqr.standard')\n get isAWSD11() {\n return isStandardAWSD11(this.pqr.standard);\n }\n\n @tracked\n approvalRange = null;\n\n get isUsingNotSupportedStandard() {\n if (this.approvalRange) {\n return this.approvalRange?.approvalRange instanceof NotSupportedStandardApprovalRanges;\n }\n return false;\n }\n\n @computed('lists.weldingPositions.[]', 'pqr.productTypeTestPiece')\n get weldingPositionOptions() {\n let {\n pqr,\n lists: { weldingPositions },\n } = this;\n let { productTypeTestPiece: productType } = pqr;\n let allowedPositions = allowedMultiplePositionsPQR(pqr.standard);\n let d15Positions = ['1G', '2G', '3G', '4G', '3G+4G', '1F', '2F', '3F', '4F', '3F+4F'];\n return weldingPositions\n .filter((position) => {\n return get(position, 'industryCode.id') === get(this, 'currentIndustryCode.id');\n })\n .filter((position) => {\n return position.code.indexOf('+') < 0 || allowedPositions.includes(position.code);\n })\n .filter((position) => {\n if (productType === PRODUCT_TYPE.PLATE) {\n return !position.isPipeOnly;\n }\n return true;\n })\n .filter((position) => {\n if (isStandardAWSD15(pqr.standard)) {\n if (d15Positions.includes(position.code)) {\n return true;\n }\n return false;\n }\n return true;\n });\n }\n\n get baseMaterialGroupStandard() {\n if (isStandardAWSD15(this.pqr.standard)) {\n return this.pqr.standard;\n }\n return null;\n }\n\n get baseMaterial1ThicknessWarningText() {\n if (isStandardAWSD15(this.pqr.standard)) {\n if (this.hasAnyProcessSMAWorFCAWorGMAWorSAW) {\n let baseMaterial1Thickness = get(this.pqr, PQR.BASE_MATERIAL1_THICKNESS);\n let { unitSystem } = this.units;\n if (!isEmpty(baseMaterial1Thickness)) {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL && baseMaterial1Thickness < 1) {\n return this.intl\n .t('components.model-pqr/edit.awsd15.base-material-thickness-warning', {\n baseMaterialThickness: baseMaterial1Thickness,\n unit: 'in',\n size: '1',\n })\n .toString();\n } else if (unitSystem === UNIT_SYSTEM.METRIC && baseMaterial1Thickness < 25) {\n return this.intl\n .t('components.model-pqr/edit.awsd15.base-material-thickness-warning', {\n baseMaterialThickness: baseMaterial1Thickness,\n unit: 'mm',\n size: '25',\n })\n .toString();\n }\n }\n }\n }\n return '';\n }\n\n get baseMaterial2ThicknessWarningText() {\n if (isStandardAWSD15(this.pqr.standard)) {\n if (this.hasAnyProcessSMAWorFCAWorGMAWorSAW) {\n let baseMaterial2Thickness = get(this.pqr, PQR.BASE_MATERIAL2_THICKNESS);\n let { unitSystem } = this.units;\n if (!isEmpty(baseMaterial2Thickness)) {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL && baseMaterial2Thickness < 1) {\n return this.intl\n .t('components.model-pqr/edit.awsd15.base-material-thickness-warning', {\n baseMaterialThickness: baseMaterial2Thickness,\n unit: 'in',\n size: '1',\n })\n .toString();\n } else if (unitSystem === UNIT_SYSTEM.METRIC && baseMaterial2Thickness < 25) {\n return this.intl\n .t('components.model-pqr/edit.awsd15.base-material-thickness-warning', {\n baseMaterialThickness: baseMaterial2Thickness,\n unit: 'mm',\n size: '25',\n })\n .toString();\n }\n }\n }\n }\n return '';\n }\n\n get hasAnyProcessSMAWorFCAWorGMAWorSAW() {\n let root = get(this.pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n let fill = get(this.pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE);\n let cap = get(this.pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n if (root != null) {\n let designation = get(root, 'shortDesignation');\n if (\n designation === 'SMAW' ||\n designation === 'FCAW' ||\n designation === 'GMAW' ||\n designation === 'SAW'\n ) {\n return true;\n }\n }\n if (fill != null) {\n let designation = get(fill, 'shortDesignation');\n if (\n designation === 'SMAW' ||\n designation === 'FCAW' ||\n designation === 'GMAW' ||\n designation === 'SAW'\n ) {\n return true;\n }\n }\n if (cap != null) {\n let designation = get(cap, 'shortDesignation');\n if (\n designation === 'SMAW' ||\n designation === 'FCAW' ||\n designation === 'GMAW' ||\n designation === 'SAW'\n ) {\n return true;\n }\n }\n return false;\n }\n\n @computed('lists.weldingPositions.[]', 'pqr.productTypeTestPiece')\n get weldingPositionApprovalRangeOptions() {\n let {\n pqr: { productTypeTestPiece: productType },\n } = this;\n return this.lists.weldingPositions\n .filter((position) => {\n return (\n get(position, 'industryCode.id') === get(this, 'currentIndustryCode.id') &&\n !position.isMultiple\n );\n })\n .filter((position) => {\n if (productType === PRODUCT_TYPE.PLATE) {\n return !position.isPipeOnly;\n }\n return true;\n });\n }\n\n @computed\n get advancedFieldHaveValue() {\n let {\n electrodeType,\n electrodeTypeFill,\n electrodeTypeCap,\n numberOfElectrodes,\n numberOfElectrodesFill,\n numberOfElectrodesCap,\n gasNozzleDiameterRoot,\n gasNozzleDiameterFill,\n gasNozzleDiameterCap,\n contactTubeDistance,\n contactTubeDistanceFill,\n contactTubeDistanceCap,\n weaving,\n weavingFill,\n weavingCap,\n tungstenDiameterRoot,\n tungstenDiameterFill,\n tungstenDiameterCap,\n oscillationWidthRoot,\n oscillationWidthFill,\n oscillationWidthCap,\n oscillationFrequencyRoot,\n oscillationFrequencyFill,\n oscillationFrequencyCap,\n oscillationDwellTimeRoot,\n oscillationDwellTimeFill,\n oscillationDwellTimeCap,\n supplementalDeviceRoot,\n supplementalDeviceFill,\n supplementalDeviceCap,\n thicknessRootTestPiece,\n thicknessFillTestPiece,\n thicknessCapTestPiece,\n shieldingRootGasCommercialDesignationTestPiece,\n shieldingRootGasMixture,\n shieldingFillGasCommercialDesignationTestPiece,\n shieldingFillGasMixture,\n shieldingCapGasCommercialDesignationTestPiece,\n shieldingCapGasMixture,\n tensileTestTemperature,\n tensileTestLines,\n bendTestMandrillDiameter,\n impactTestDimensions,\n impactTestType,\n hardnessTestType,\n chemicalReportName,\n chemicalCarbonContent,\n chemicalManganeseContent,\n chemicalSiliconContent,\n chemicalChromiumContent,\n chemicalNickelContent,\n chemicalMolybdenumContent,\n chemicalCopperContent,\n chemicalPhosphorusContent,\n chemicalSulphurContent,\n chemicalAluminumContent,\n chemicalTitaniumContent,\n } = this.pqr;\n\n return (\n !isEmpty(electrodeType) ||\n !isEmpty(electrodeTypeFill) ||\n !isEmpty(electrodeTypeCap) ||\n !isEmpty(numberOfElectrodes) ||\n !isEmpty(numberOfElectrodesFill) ||\n !isEmpty(numberOfElectrodesCap) ||\n !isEmpty(gasNozzleDiameterRoot) ||\n !isEmpty(gasNozzleDiameterFill) ||\n !isEmpty(gasNozzleDiameterCap) ||\n !isEmpty(contactTubeDistance) ||\n !isEmpty(contactTubeDistanceFill) ||\n !isEmpty(contactTubeDistanceCap) ||\n !isEmpty(weaving) ||\n !isEmpty(weavingFill) ||\n !isEmpty(weavingCap) ||\n !isEmpty(tungstenDiameterRoot) ||\n !isEmpty(tungstenDiameterFill) ||\n !isEmpty(tungstenDiameterCap) ||\n !isEmpty(oscillationFrequencyRoot) ||\n !isEmpty(oscillationFrequencyFill) ||\n !isEmpty(oscillationFrequencyCap) ||\n !isEmpty(oscillationFrequencyRoot) ||\n !isEmpty(oscillationFrequencyFill) ||\n !isEmpty(oscillationFrequencyCap) ||\n !isEmpty(oscillationDwellTimeRoot) ||\n !isEmpty(oscillationDwellTimeFill) ||\n !isEmpty(oscillationDwellTimeCap) ||\n !isEmpty(supplementalDeviceRoot) ||\n !isEmpty(supplementalDeviceFill) ||\n !isEmpty(supplementalDeviceCap) ||\n !isEmpty(thicknessRootTestPiece) ||\n !isEmpty(thicknessFillTestPiece) ||\n !isEmpty(thicknessCapTestPiece) ||\n !isEmpty(shieldingRootGasCommercialDesignationTestPiece) ||\n !isEmpty(shieldingRootGasMixture) ||\n !isEmpty(shieldingFillGasCommercialDesignationTestPiece) ||\n !isEmpty(shieldingFillGasMixture) ||\n !isEmpty(shieldingCapGasCommercialDesignationTestPiece) ||\n !isEmpty(shieldingCapGasMixture) ||\n !isEmpty(tensileTestTemperature) ||\n !isEmpty(tensileTestLines) ||\n !isEmpty(bendTestMandrillDiameter) ||\n !isEmpty(impactTestDimensions) ||\n !isEmpty(impactTestType) ||\n !isEmpty(hardnessTestType) ||\n !isEmpty(chemicalReportName) ||\n !isEmpty(chemicalReportName) ||\n !isEmpty(chemicalCarbonContent) ||\n !isEmpty(chemicalManganeseContent) ||\n !isEmpty(chemicalSiliconContent) ||\n !isEmpty(chemicalChromiumContent) ||\n !isEmpty(chemicalNickelContent) ||\n !isEmpty(chemicalMolybdenumContent) ||\n !isEmpty(chemicalCopperContent) ||\n !isEmpty(chemicalPhosphorusContent) ||\n !isEmpty(chemicalSulphurContent) ||\n !isEmpty(chemicalAluminumContent) ||\n !isEmpty(chemicalTitaniumContent)\n );\n }\n\n @computed('showAdvancedFieldsAction', 'advancedFieldHaveValue')\n get showAdvancedFields() {\n if (this.advancedFieldHaveValue) {\n return true;\n }\n\n return this.showAdvancedFieldsAction;\n }\n\n showAdvancedFieldsAction = false;\n\n @computed('permissions.canCreatePQR', 'pqr.isArchived', 'isUsingNotSupportedStandard')\n get isEditing() {\n if (get(this, 'pqr.isArchived')) {\n return false;\n }\n if (!get(this, 'permissions.canCreatePQR')) {\n return false;\n }\n return true;\n }\n\n @and('permissions.canEditPQRApprovalRange', 'isEditing')\n canEditApprovalRange;\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingReport() {\n let tasks = get(this, 'taskMonitor.currentTasks');\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'pqr') {\n if (item.contextId === this.pqr.id) {\n if (parseInt(item.status) === TASK_STATUS.IN_PROGRESS) {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n @alias('isGeneratingReport')\n isExportingPqrReport;\n\n @computed('taskMonitor.currentTasks.[]')\n get pqrReportProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'pqr') {\n if (item.contextId === this.pqr.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n finishReportGeneration = task(async () => {\n await this.reloadPQR.perform();\n });\n\n @alias('isArcTransferModeRootDisabledByRule')\n isArcTransferModeRootDisabled;\n\n @alias('isArcTransferModeFillDisabledByRule')\n isArcTransferModeFillDisabled;\n\n @alias('isArcTransferModeCapDisabledByRule')\n isArcTransferModeCapDisabled;\n\n isArcTransferModeRootDisabledByRule = false;\n\n isArcTransferModeFillDisabledByRule = false;\n\n isArcTransferModeCapDisabledByRule = false;\n\n @equal('pqr.weldingProcessRootTestPiece.shortDesignation', WELDING_PROCESSES.ESW)\n isRootProcessESW;\n\n @equal('pqr.weldingProcessFillTestPiece.shortDesignation', WELDING_PROCESSES.ESW)\n isFillProcessESW;\n\n @equal('pqr.weldingProcessCapTestPiece.shortDesignation', WELDING_PROCESSES.ESW)\n isCapProcessESW;\n\n @equal('pqr.weldTypeTestPiece.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n @notEmpty('pqr.weldTypeTestPiece.id')\n hasWeldType;\n\n @not('isOverlayWeld')\n showWeldingDetailsParts;\n\n // Whether to show the 2 base materials, overlay welds always have both equal\n @not('isOverlayWeld')\n showBothBaseMaterials;\n\n @notEmpty('pqrDeleteErrors')\n hasPqrDeleteErrors;\n\n @computed('pqr.{standard,thicknessTotalTestPiece,weldType,impactTestReport,impactTestRequired}')\n get showMessageAboutThicknessInIsoWithImpactRequirements() {\n let standard = this.getModelValue(PQR.STANDARD);\n let weldType = this.getModelValue(PQR.WELDTYPE_TESTPIECE);\n let thicknessTotal = this.getModelValue(PQR.THICKNESS_TOTAL_TESTPIECE);\n let impactTestRequired = this.getModelValue(PQR.IMPACT_TEST_REQUIRED);\n let impactReport = this.getModelValue(PQR.IMPACT_TEST_REPORT);\n if (\n isStandardISO(standard) &&\n (isButtWeld(weldType) || isBranchConnection(weldType)) &&\n thicknessTotal > 3 &&\n thicknessTotal <= 12 &&\n impactTestRequired &&\n isEmpty(impactReport)\n ) {\n return true;\n }\n return false;\n }\n\n @computed('pqr.jointType', 'weldLayerConfiguration.jointType')\n get jointTypeGrooveDesign() {\n let pqrJointType = get(this, 'pqr.jointType');\n let weldLayerJointType = get(this, 'weldLayerConfiguration.jointType');\n if (!isEmpty(weldLayerJointType)) {\n return weldLayerJointType;\n } else if (!isEmpty(pqrJointType)) {\n return pqrJointType;\n }\n return null;\n }\n\n @computed(\n 'pqr.{weldingProcessRootTestPiece,weldingProcessFillTestPiece,weldingProcessCapTestPiece}'\n )\n get processNames() {\n let {\n weldingProcessRootTestPiece: process1,\n weldingProcessFillTestPiece: process2,\n weldingProcessCapTestPiece: process3,\n } = this.pqr;\n return calculateProcessLabels(process1, process2, process3);\n }\n\n savePQR = task(\n {\n drop: true,\n },\n async (options = {}) => {\n // Saving should be done in one go, but since JSON:API does not have the save many in request\n // we need to save the passes / tests first and them save the PQR\n // This is only possible because the PQR is known to always exist first\n let { pqr, alertMessage: alert, intl, loading } = this;\n let passes = await this.getModelValue(PQR.WELDING_PARAMETERS);\n let bendLines = await this.getModelValue(PQR.BEND_TEST_LINES);\n let impactLines = await this.getModelValue(PQR.IMPACT_TEST_LINES);\n let tensileLines = await this.getModelValue(PQR.TENSILE_TEST_LINES);\n\n let itemsToSave = [];\n passes\n .filter((pass) => get(pass, 'hasDirtyAttributes') || get(pass, 'isNew'))\n .forEach((pass) => itemsToSave.pushObject(pass));\n\n bendLines\n .filter(\n (bend) => get(bend, 'hasDirtyAttributes') || (get(bend, 'isNew') && !bend.isLineEmpty())\n )\n .forEach((bend) => itemsToSave.pushObject(bend));\n\n impactLines\n .filter(\n (impact) =>\n get(impact, 'hasDirtyAttributes') || (get(impact, 'isNew') && !impact.isLineEmpty())\n )\n .forEach((impact) => itemsToSave.pushObject(impact));\n\n tensileLines\n .filter(\n (tensile) =>\n get(tensile, 'hasDirtyAttributes') || (get(tensile, 'isNew') && !tensile.isLineEmpty())\n )\n .forEach((tensile) => itemsToSave.pushObject(tensile));\n\n for (let i = 0; i < itemsToSave.length; i++) {\n await itemsToSave[i].save();\n }\n\n try {\n if (isEmpty(options.customLoadingMessage)) {\n loading.block();\n } else {\n loading.block(options.customLoadingMessage);\n }\n await pqr.save();\n let reloadedPQR = await this.data.loadAllDataPQR(get(pqr, 'id'));\n set(this, 'model', reloadedPQR);\n if (!options.silentSave) {\n this._showSaveSuccessMessage();\n }\n this.resetTabErrors();\n this._postSave();\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n alert.error(\n intl\n .t('edit-view.actions.generic-error', { name: get(pqr, 'certificateNumber') })\n .toString()\n );\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n get writtenByLabel() {\n if (isStandardASME(this.getModelValue(PQR.STANDARD))) {\n return this.intl.t('components.model-pqr/edit.labels.written-by-asme');\n } else {\n return this.intl.t('model.pqr.writtenBy.label');\n }\n }\n\n @computed('pqr.jointType', 'grooveDesign.jointType')\n get jointTypeWeldLayer() {\n let pqrJointType = get(this, 'pqr.jointType');\n let grooveDesignJointType = get(this, 'grooveDesign.jointType');\n if (!isEmpty(grooveDesignJointType)) {\n return grooveDesignJointType;\n } else if (!isEmpty(pqrJointType)) {\n return pqrJointType;\n }\n return null;\n }\n\n @computed(\n 'pqr.{weldingProcessRootTestPiece.id,weldingProcessFillTestPiece.id,weldingProcessCapTestPiece.id}'\n )\n get hasOnlyRoot() {\n if (\n !isEmpty(get(this, 'pqr.weldingProcessRootTestPiece.id')) &&\n isEmpty(get(this, 'pqr.weldingProcessFillTestPiece.id')) &&\n isEmpty(get(this, 'pqr.weldingProcessCapTestPiece.id'))\n ) {\n return true;\n }\n if (\n isEmpty(get(this, 'pqr.weldingProcessRootTestPiece.id')) &&\n isEmpty(get(this, 'pqr.weldingProcessFillTestPiece.id')) &&\n isEmpty(get(this, 'pqr.weldingProcessCapTestPiece.id'))\n ) {\n return true;\n }\n return false;\n }\n\n @notEmpty('pqr.weldingProcessRootTestPiece.id')\n hasRoot;\n\n @notEmpty('pqr.weldingProcessFillTestPiece.id')\n hasFill;\n\n @notEmpty('pqr.weldingProcessCapTestPiece.id')\n hasCap;\n\n @computed('pqr.weldTypeTestPiece')\n get isFilletWeld() {\n return this.pqr.isFilletWeld();\n }\n\n @computed('pqr.weldTypeTestPiece')\n get isPartialPenetrationButtWeld() {\n return this.pqr.isPartialPenetrationButtWeld();\n }\n\n @tracked\n dissimilarMaterials = false;\n\n @computed(\n 'dissimilarMaterials',\n 'pqr.{baseMaterial1TestPiece,baseMaterial2TestPiece,baseMaterial1Diameter,baseMaterial2Diameter,baseMaterial1Thickness,baseMaterial2Thickness}'\n )\n get hasDissimilarMaterials() {\n if (get(this, 'dissimilarMaterials')) {\n return true;\n }\n let hasBothMaterials =\n !isEmpty(get(this, 'pqr.baseMaterial1TestPiece.id')) &&\n !isEmpty(get(this, 'pqr.baseMaterial2TestPiece.id'));\n if (\n get(this, 'pqr.baseMaterial1TestPiece.id') !== get(this, 'pqr.baseMaterial2TestPiece.id') &&\n hasBothMaterials\n ) {\n return true;\n }\n let hasBothDiameter =\n !isEmpty(get(this, 'pqr.baseMaterial1Diameter')) &&\n !isEmpty(get(this, 'pqr.baseMaterial2Diameter'));\n if (\n get(this, 'pqr.baseMaterial1Diameter') !== get(this, 'pqr.baseMaterial2Diameter') &&\n hasBothDiameter\n ) {\n return true;\n }\n\n let hasBothThickness =\n !isEmpty(get(this, 'pqr.baseMaterial1Thickness')) &&\n !isEmpty(get(this, 'pqr.baseMaterial1Thickness'));\n if (\n get(this, 'pqr.baseMaterial1Thickness') !== get(this, 'pqr.baseMaterial2Thickness') &&\n hasBothThickness\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed('hasDissimilarMaterials')\n get baseMaterial1Label() {\n if (get(this, 'hasDissimilarMaterials')) {\n return this.intl.t('components.model-pqr/edit.base-material');\n } else {\n return this.intl.t('components.model-pqr/edit.base-material1');\n }\n }\n\n // HACK; I only this need because the state of the edit parameter component\n // cannot be reset by that component if the user is editing and then decides to save the PQR\n // having the variable here means that I can set it to null when the user save\n currentPass = null;\n\n @computed('pqr.standard.code.code')\n get isNotStandardISO() {\n let standard = this.get('pqr.standard');\n if (!isEmpty(standard)) {\n let isISO = isStandardISO(standard);\n return !isISO;\n }\n return true;\n }\n\n @computed('hasWeldType')\n get showJointType() {\n let hasWeldType = get(this, 'hasWeldType');\n let isNotOverlayWeld = !get(this, 'isOverlayWeld');\n return hasWeldType && isNotOverlayWeld;\n }\n\n @computed('pqr.overlayType')\n get overlayTypeLabel() {\n let type = this.getModelValue(PQR.OVERLAY_TYPE);\n if (!isEmpty(type)) {\n return this.intl.t(`lov.overlay-type.${type}`);\n }\n return '';\n }\n\n @computed('lists.staffs.[]', 'userSession.isAccountAdmin', 'userSession.account.staff')\n get staffOptions() {\n let staffOptions = get(this, 'lists.staffs');\n if (get(this, 'userSession.isAccountAdmin')) {\n return staffOptions;\n }\n\n let staff = get(this, 'userSession.account.staff');\n if (!isEmpty(staff) && !isEmpty(get(staff, 'id'))) {\n return staffOptions.filter((item) => {\n return get(item, 'id') === get(staff, 'id');\n });\n }\n return [];\n }\n\n @computed('userSession.isAccountAdmin', 'pqr.writtenBy', 'userSession.account.staff')\n get isWrittenByDisabled() {\n if (get(this, 'userSession.isAccountAdmin')) {\n return false;\n }\n let currentStaff = get(this, 'pqr.writtenBy.id');\n if (isEmpty(currentStaff)) {\n return false;\n }\n let myStaff = get(this, 'userSession.account.staff.id');\n if (!isEmpty(currentStaff) && !isEmpty(myStaff) && currentStaff === myStaff) {\n return false;\n }\n\n return true;\n }\n\n fillerMaterialRootCommercialDesignationOptions = [];\n\n fillerMaterialFillCommercialDesignationOptions = [];\n\n fillerMaterialCapCommercialDesignationOptions = [];\n\n fetchFillerMaterialCommercialDesignationOptions = task(async (property, target) => {\n if (!isEmpty(this.getModelValue(property))) {\n let fillerMaterialId = this.getModelValue(property).get('id');\n if (!isEmpty(fillerMaterialId)) {\n let designations =\n await this.data.searchAllFillerMaterialCommercialDesignationByFillerMaterial(\n fillerMaterialId\n );\n set(this, target, designations);\n }\n }\n });\n\n fetchFillerMaterialRootCommercialDesignationOptions() {\n get(this, 'fetchFillerMaterialCommercialDesignationOptions').perform(\n PQR.FILLER_MATERIAL_ROOT_TESTPIECE,\n 'fillerMaterialRootCommercialDesignationOptions'\n );\n }\n\n fetchFillerMaterialFillCommercialDesignationOptions() {\n get(this, 'fetchFillerMaterialCommercialDesignationOptions').perform(\n PQR.FILLER_MATERIAL_FILL_TESTPIECE,\n 'fillerMaterialFillCommercialDesignationOptions'\n );\n }\n\n fetchFillerMaterialCapCommercialDesignationOptions() {\n get(this, 'fetchFillerMaterialCommercialDesignationOptions').perform(\n PQR.FILLER_MATERIAL_CAP_TEST_PIECE,\n 'fillerMaterialCapCommercialDesignationOptions'\n );\n }\n\n dateValue = new Date();\n\n @computed('isATypeOfButtWeld,pqr.thicknessTotalTestPiece')\n get showThroatThickness() {\n return this.isATypeOfButtWeld && !isEmpty(this.pqr.thicknessTotalTestPiece);\n }\n\n @computed('pqr.weldTypeTestPiece')\n get isATypeOfButtWeld() {\n let { weldTypeTestPiece: weldType } = this.pqr;\n return isATypeOfButtWeld(weldType);\n }\n\n @computed(\n 'pqr.{filletWeldBaseMaterial1ThicknessMinimumApprovalRange,filletWeldBaseMaterial1ThicknessMaximumApprovalRange,weldTypeApprovalRange}',\n 'isFilletWeld'\n )\n get isFilletWeldBaseMaterial1ThicknessVisible() {\n let { pqr } = this;\n let {\n filletWeldBaseMaterial1ThicknessMinimumApprovalRange: min,\n filletWeldBaseMaterial1ThicknessMaximumApprovalRange: max,\n weldTypeApprovalRange,\n } = pqr;\n if (\n !isEmpty(weldTypeApprovalRange.filterBy('weldType', WELD_TYPES.FILLET_WELD)) &&\n !get(this, 'isFilletWeld')\n ) {\n return !isEmpty(min) || !isEmpty(max);\n }\n return false;\n }\n\n @computed(\n 'pqr.{filletWeldBaseMaterial2ThicknessMinimumApprovalRange,filletWeldBaseMaterial2ThicknessMaximumApprovalRange,weldTypeApprovalRange}',\n 'isFilletWeld'\n )\n get isFilletWeldBaseMaterial2ThicknessVisible() {\n let { pqr } = this;\n let {\n filletWeldBaseMaterial2ThicknessMinimumApprovalRange: min,\n filletWeldBaseMaterial2ThicknessMaximumApprovalRange: max,\n weldTypeApprovalRange,\n } = pqr;\n if (\n !isEmpty(weldTypeApprovalRange.filterBy('weldType', WELD_TYPES.FILLET_WELD)) &&\n !get(this, 'isFilletWeld')\n ) {\n return !isEmpty(min) || !isEmpty(max);\n }\n return false;\n }\n\n @computed('model.productTypeTestPiece', 'isFilletWeld')\n get isDiameterDisabled() {\n return PQRRules.isDiameterDisabled(this.get('model.productTypeTestPiece'));\n }\n\n // Value for GE-Specific things\n @computed(\n `pqr.{${PQR.WELDING_PROCESS_ROOT_TESTPIECE},${PQR.WELDING_PROCESS_FILL_TESTPIECE},${PQR.WELDING_PROCESS_CAP_TEST_PIECE}}`\n )\n get sameWeldingProcess() {\n let root = this.getModelValue(PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n let fill = this.getModelValue(PQR.WELDING_PROCESS_FILL_TESTPIECE);\n let cap = this.getModelValue(PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n return isSameProcess(root, fill, cap);\n }\n\n @computed(\n 'currentWeldType',\n 'hasOnlyRoot',\n 'hasRoot',\n 'isFilletWeld',\n 'isPartialPenetrationButtWeld',\n 'sameWeldingProcess'\n )\n get showThicknessRoot() {\n let isFilletWeld = get(this, 'isFilletWeld');\n if (isFilletWeld) {\n return false;\n }\n\n let isPPBW = get(this, 'isPartialPenetrationButtWeld');\n let hasRoot = get(this, 'hasRoot');\n if (isPPBW && hasRoot) {\n return true;\n }\n\n let hasOnlyRoot = this.hasOnlyRoot;\n if (hasOnlyRoot) {\n return false;\n }\n\n if (hasRoot) {\n return true;\n }\n\n return false;\n }\n\n @computed(\n 'currentWeldType',\n 'hasFill',\n 'isFilletWeld',\n 'isPartialPenetrationButtWeld',\n 'sameWeldingProcess'\n )\n get showThicknessFill() {\n let isFilletWeld = get(this, 'isFilletWeld');\n if (isFilletWeld) {\n return false;\n }\n\n let isPPBW = get(this, 'isPartialPenetrationButtWeld');\n let hasFill = get(this, 'hasFill');\n if (isPPBW && hasFill) {\n return true;\n }\n\n if (hasFill) {\n return true;\n }\n\n return false;\n }\n\n @computed(\n 'currentWeldType',\n 'hasCap',\n 'isFilletWeld',\n 'isPartialPenetrationButtWeld',\n 'sameWeldingProcess'\n )\n get showThicknessCap() {\n let isFilletWeld = get(this, 'isFilletWeld');\n if (isFilletWeld) {\n return false;\n }\n\n let isPPBW = get(this, 'isPartialPenetrationButtWeld');\n let hasCap = get(this, 'hasCap');\n if (isPPBW && hasCap) {\n return true;\n }\n\n if (hasCap) {\n return true;\n }\n\n return false;\n }\n\n @or('showThicknessRoot', 'showThicknessFill', 'showThicknessCap')\n showAnyThickness;\n\n isImpactTestRequirementsDisabled = false;\n\n @computed('pqr.weldingParameters.@each.heatInputMinimum')\n get heatInputMinimumTestPiece() {\n let minimum = PQRRules.calculateParametersMinimumHeatInput(this.get('pqr.weldingParameters'));\n if (isEmpty(minimum)) {\n return '';\n }\n return minimum;\n }\n\n @computed('pqr.weldingParameters.@each.heatInputMaximum')\n get heatInputMaximumTestPiece() {\n let maximum = PQRRules.calculateParametersMaximumHeatInput(this.get('pqr.weldingParameters'));\n if (isEmpty(maximum)) {\n return '';\n }\n return maximum;\n }\n\n @computed('pqr.thicknessRootTestPiece', 'pqr.thicknessFillTestPiece', 'pqr.thicknessCapTestPiece')\n get rootFillCapSum() {\n let root = this.getModelValue(PQR.THICKNESS_ROOT_TESTPIECE);\n let fill = this.getModelValue(PQR.THICKNESS_FILL_TESTPIECE);\n let cap = this.getModelValue(PQR.THICKNESS_CAP_TEST_PIECE);\n\n let sum = 0;\n if (!isNaN(parseFloat(root))) {\n sum += parseFloat(root);\n }\n if (!isNaN(parseFloat(fill))) {\n sum += parseFloat(fill);\n }\n if (!isNaN(parseFloat(cap))) {\n sum += parseFloat(cap);\n }\n\n return sum;\n }\n\n @gt('rootFillCapDifference', 0)\n isLayerSumBiggerThanTotal;\n\n @lt('rootFillCapDifference', 0)\n isLayerSumLessThanTotal;\n\n @computed('rootFillCapDifference')\n get rootFillCapDifferencePositive() {\n return Math.abs(get(this, 'rootFillCapDifference'));\n }\n\n @computed('rootFillCapSum', 'pqr.thicknessTotalTestPiece')\n get rootFillCapDifference() {\n let layerSum = get(this, 'rootFillCapSum');\n let thickness = parseFloat(this.getModelValue(PQR.THICKNESS_TOTAL_TESTPIECE));\n if (isNaN(thickness)) {\n return 0;\n }\n if (layerSum === 0) {\n return 0;\n }\n let result = layerSum - thickness;\n return result.toFixed(2);\n }\n\n @computed('rootFillCapSum', 'pqr.thicknessTotalTestPiece')\n get rootFillCapDifferencePercentage() {\n let totalLayers = get(this, 'rootFillCapSum');\n let totalThickness = parseFloat(this.getModelValue(PQR.THICKNESS_TOTAL_TESTPIECE));\n\n if (isNaN(totalThickness)) {\n return '';\n }\n\n let result =\n (Math.abs(totalLayers - totalThickness) / ((totalLayers + totalThickness) / 2)) * 100;\n return result.toFixed(2);\n }\n\n getGrooveType() {\n let grooveDesignGroove = get(this, 'grooveDesign.grooveType');\n let weldLayerGroove = get(this, 'weldLayerConfiguration.grooveType');\n let grooveType = !isEmpty(grooveDesignGroove) ? grooveDesignGroove : '';\n if (isEmpty(grooveType)) {\n if (!isEmpty(weldLayerGroove)) {\n grooveType = weldLayerGroove;\n }\n }\n return grooveType;\n }\n\n hasSchematic() {\n let grooveDesign = get(this, 'grooveDesign.id');\n let weldLayer = get(this, 'weldLayerConfiguration.id');\n return !isEmpty(grooveDesign) || !isEmpty(weldLayer);\n }\n\n @computed('grooveDesign.grooveType', 'weldLayerConfiguration.grooveType')\n get showGrooveAngle() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n let grooveType = this.getGrooveType();\n if (\n grooveType === GROOVE_SHAPE_OPTIONS.J_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.DOUBLE_J_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.U_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.DOUBLE_U_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.NO_SHAPE\n ) {\n return false;\n }\n\n return true;\n }\n\n @computed('grooveDesign.grooveType', 'weldLayerConfiguration.grooveType')\n get showRootFace() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n let grooveType = this.getGrooveType();\n if (\n grooveType === GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.NO_SHAPE\n ) {\n return false;\n }\n return true;\n }\n\n @computed(\n 'grooveDesign.grooveType',\n 'isFilletWeld',\n 'isOverlayWeld',\n 'pqr.weldTypeTestPiece',\n 'weldLayerConfiguration.grooveType'\n )\n get showRootGap() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n let grooveType = this.getGrooveType();\n if (\n grooveType === GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.NO_SHAPE\n ) {\n if (get(this, 'isFilletWeld')) {\n return false;\n }\n }\n\n let isOverlayWeld = get(this, 'isOverlayWeld');\n if (isOverlayWeld) {\n return false;\n }\n\n return true;\n }\n\n @computed('grooveDesign.grooveType', 'weldLayerConfiguration.grooveType', 'isOverlayWeld')\n get showNumberOfLayers() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n if (get(this, 'isOverlayWeld')) {\n return true;\n }\n\n return false;\n }\n\n @computed('pqr.baseMaterial1Thickness')\n get partialPenetrationButtWeldThicknessBaseMaterial1() {\n let thickness = this.getModelValue(PQR.BASE_MATERIAL1_THICKNESS);\n let { unitSystem } = this.units;\n let result = this.approvalRange.weldingThickness(thickness);\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (thickness > 38) {\n result.max = null;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (thickness > 1.5) {\n result.max = null;\n }\n }\n return result;\n }\n\n @computed('pqr.baseMaterial2Thickness')\n get partialPenetrationButtWeldThicknessBaseMaterial2() {\n let thickness = this.getModelValue(PQR.BASE_MATERIAL2_THICKNESS);\n let { unitSystem } = this.units;\n let result = this.approvalRange.weldingThickness(thickness);\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (thickness > 38) {\n result.max = null;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (thickness > 1.5) {\n result.max = null;\n }\n }\n return result;\n }\n\n @computed('pqr.baseMaterial1Diameter')\n get partialPenetrationButtWeldDiameterBaseMaterial1() {\n let diameter = this.getModelValue(PQR.BASE_MATERIAL1_DIAMETER);\n let result = this.approvalRange.diameter(diameter);\n return result;\n }\n\n @computed('pqr.baseMaterial2Diameter')\n get partialPenetrationButtWeldDiameterBaseMaterial2() {\n let thickness = this.getModelValue(PQR.BASE_MATERIAL2_THICKNESS);\n let diameter = this.getModelValue(PQR.BASE_MATERIAL2_DIAMETER);\n let { unitSystem } = this.units;\n let result = this.approvalRange.diameter(diameter);\n return result;\n }\n\n @computed('pqr.grooveDesigns.firstObject')\n get grooveDesignLabel() {\n let { pqr } = this;\n let { grooveDesigns } = pqr;\n if (isEmpty(grooveDesigns)) {\n return '';\n }\n let { firstObject: groove } = grooveDesigns;\n\n if (isEmpty(groove)) {\n return '';\n }\n\n if (get(groove, 'imageSituation') === 'TEMPLATE') {\n return get(groove, 'description');\n } else {\n return this.intl\n .t('components.model-pqr/edit.labels.customized-groove-design', {\n certificateNumber: get(pqr, 'certificateNumber'),\n })\n .toString();\n }\n }\n\n @computed('pqr.weldLayerConfigurations.firstObject')\n get weldLayerConfigurationLabel() {\n let { pqr } = this;\n let { weldLayerConfigurations } = pqr;\n if (isEmpty(weldLayerConfigurations)) {\n return '';\n }\n let { firstObject: weldLayer } = weldLayerConfigurations;\n\n if (isEmpty(weldLayer)) {\n return '';\n }\n\n if (get(weldLayer, 'imageSituation') === 'TEMPLATE') {\n return get(weldLayer, 'description');\n } else {\n return this.intl\n .t('components.model-pqr/edit.labels.customized-weld-layer', {\n certificateNumber: get(pqr, 'certificateNumber'),\n })\n .toString();\n }\n }\n\n hasErrorDetailsTab = false;\n\n hasErrorBaseMaterialsTab = false;\n\n hasErrorConsumablesTab = false;\n\n hasErrorOtherTab = false;\n\n hasErrorTestsTab = false;\n\n hasErrorPassesTab = false;\n\n resetTabErrors() {\n set(this, 'hasErrorDetailsTab', false);\n set(this, 'hasErrorBaseMaterialsTab', false);\n set(this, 'hasErrorConsumablesTab', false);\n set(this, 'hasErrorOtherTab', false);\n set(this, 'hasErrorTestsTab', false);\n set(this, 'hasErrorPassesTab', false);\n }\n\n isValidPropertyList(propertiesToCheck) {\n let { pqr } = this;\n let result = propertiesToCheck.find((property) => {\n if (!isEmpty(pqr.get(`errors.${property}`))) {\n return true;\n }\n return false;\n });\n return isEmpty(result);\n }\n\n calculateErrorDetailsTab() {\n let properties = [\n PQR.TORCH_ANGLE_MINIMUM,\n PQR.TORCH_ANGLE_MAXIMUM,\n PQR.HEAT_INPUT_MINIMUM_APPROVALRANGE,\n PQR.HEAT_INPUT_MAXIMUM_APPROVALRANGE,\n PQR.PREHEAT_TEMPERATURE_TESTPIECE,\n PQR.PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE,\n PQR.PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE,\n PQR.INTERPASS_TEMPERATURE_TESTPIECE,\n PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE,\n PQR.INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE,\n PQR.POST_HEAT_TEMPERATURE_TESTPIECE,\n PQR.POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE,\n PQR.POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE,\n PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE,\n PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE,\n PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE,\n PQR.POST_WELD_HEAT_TREATMENT_TIME_TESTPIECE,\n PQR.POST_WELD_HEAT_TREATMENT_HEATING_RATE_TESTPIECE,\n PQR.POST_WELD_HEAT_TREATMENT_COOLING_RATE_TESTPIECE,\n PQR.WELDING_DETAILS_TESTPIECE,\n ];\n\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorDetailsTab', true);\n } else {\n set(this, 'hasErrorDetailsTab', false);\n }\n }\n\n get unitSystemValueLabel() {\n const unitSystem = this.pqr.unitSystem;\n let unitsLov = this.notesData.unitSystemOptions;\n const option = unitsLov.find((option) => option.key === unitSystem);\n return option ? option.label : '';\n }\n\n calculateErrorOtherTab() {\n let properties = [\n PQR.NUMBER_OF_ELECTRODES,\n PQR.NUMBER_OF_ELECTRODES_FILL,\n PQR.NUMBER_OF_ELECTRODES_CAP,\n PQR.GAS_NOZZLE_DIAMETER_ROOT,\n PQR.GAS_NOZZLE_DIAMETER_FILL,\n PQR.GAS_NOZZLE_DIAMETER_CAP,\n PQR.OSCILLATION_WIDTH_ROOT,\n PQR.OSCILLATION_WIDTH_FILL,\n PQR.OSCILLATION_WIDTH_CAP,\n PQR.OSCILLATION_FREQUENCY_ROOT,\n PQR.OSCILLATION_FREQUENCY_FILL,\n PQR.OSCILLATION_FREQUENCY_CAP,\n PQR.OSCILLATION_DWELL_TIME_ROOT,\n PQR.OSCILLATION_DWELL_TIME_FILL,\n PQR.OSCILLATION_DWELL_TIME_CAP,\n ];\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorOtherTab', true);\n } else {\n set(this, 'hasErrorOtherTab', false);\n }\n }\n\n calculateErrorBaseMaterialsTab() {\n let properties = [\n PQR.THICKNESS_ROOT_TESTPIECE,\n PQR.THICKNESS_FILL_TESTPIECE,\n PQR.THICKNESS_ROOT_MINIMUM_APPROVALRANGE,\n PQR.THICKNESS_ROOT_MAXIMUM_APPROVALRANGE,\n PQR.THICKNESS_FILL_MINIMUM_APPROVALRANGE,\n PQR.THICKNESS_FILL_MAXIMUM_APPROVALRANGE,\n PQR.BRANCH_ANGLE_TESTPIECE,\n PQR.BRANCH_ANGLE_MINIMUM_APPROVALRANGE,\n PQR.BRANCH_ANGLE_MAXIMUM_APPROVALRANGE,\n PQR.GROOVE_ANGLE_MINIMUM,\n PQR.GROOVE_ANGLE_MAXIMUM,\n PQR.GROOVE_DESIGNS,\n PQR.WELD_LAYER_CONFIGURATIONS,\n PQR.ROOT_FACE_MINIMUM,\n PQR.ROOT_FACE_MAXIMUM,\n PQR.ROOT_GAP_MINIMUM,\n PQR.ROOT_GAP_MAXIMUM,\n PQR.THICKNESS_TOTAL_TESTPIECE,\n PQR.THICKNESS_TOTAL_MINIMUM_APPROVALRANGE,\n PQR.THICKNESS_TOTAL_MAXIMUM_APPROVALRANGE,\n PQR.DIAMETER_TESTPIECE,\n PQR.DIAMETER_MINIMUM_APPROVALRANGE,\n PQR.DIAMETER_MAXIMUM_APPROVALRANGE,\n ];\n\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorBaseMaterialsTab', true);\n } else {\n set(this, 'hasErrorBaseMaterialsTab', false);\n }\n }\n\n calculateErrorConsumablesTab() {\n let properties = [\n PQR.FILLER_MATERIAL_ROOT_TESTPIECE,\n PQR.FILLER_MATERIAL_FILL_TESTPIECE,\n PQR.FILLER_MATERIAL_CAP_TEST_PIECE,\n PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE,\n PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE,\n PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE,\n PQR.SHIELDING_ROOT,\n PQR.SHIELDING_ROOT_GAS_TESTPIECE,\n PQR.SHIELDING_ROOT_FLUX_TESTPIECE,\n PQR.FLOW_RATE_ROOT,\n PQR.SHIELDING_FILL,\n PQR.SHIELDING_FILL_GAS_TESTPIECE,\n PQR.SHIELDING_FILL_FLUX_TESTPIECE,\n PQR.FLOW_RATE_FILL,\n PQR.SHIELDING_CAP,\n PQR.SHIELDING_CAP_GAS_TEST_PIECE,\n PQR.SHIELDING_CAP_FLUX_TEST_PIECE,\n PQR.FLOW_RATE_CAP,\n PQR.BACKING_GAS_TESTPIECE,\n PQR.BACKING_FLUX_TESTPIECE,\n PQR.BACKING_FLOW_RATE_ROOT,\n PQR.FILLER_MATERIAL_ROOT_DIAMETERS,\n PQR.FILLER_MATERIAL_FILL_DIAMETERS,\n PQR.FILLER_MATERIAL_CAP_DIAMETERS,\n PQR.FLOW_RATE_PROCESS1_MINIMUM,\n PQR.FLOW_RATE_PROCESS1_MAXIMUM,\n PQR.FLOW_RATE_PROCESS2_MINIMUM,\n PQR.FLOW_RATE_PROCESS2_MAXIMUM,\n PQR.FLOW_RATE_PROCESS3_MINIMUM,\n PQR.FLOW_RATE_PROCESS3_MAXIMUM,\n ];\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorConsumablesTab', true);\n } else {\n set(this, 'hasErrorConsumablesTab', false);\n }\n }\n\n calculateErrorPassesTab() {\n let parameters = get(this, 'pqr.weldingParameters');\n let passInvalid = false;\n parameters.forEach((p) => {\n if (!p.validate()) {\n passInvalid = true;\n }\n });\n if (passInvalid) {\n set(this, 'hasErrorPassesTab', true);\n } else {\n set(this, 'hasErrorPassesTab', false);\n }\n }\n\n calculateErrorTestsTab() {\n let properties = [\n PQR.TENSILE_TEST_TEMPERATURE,\n PQR.IMPACT_TEST_TYPE,\n PQR.IMPACT_TEST_DIMENSIONS,\n ];\n\n let validBendTest = true;\n\n let lines = this.getModelValue(PQR.TENSILE_TEST_LINES);\n\n lines.forEach((line) => {\n if (!line.validate()) {\n validBendTest = false;\n }\n });\n\n if (validBendTest) {\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorTestsTab', true);\n } else {\n set(this, 'hasErrorTestsTab', false);\n }\n } else {\n set(this, 'hasErrorTestsTab', true);\n }\n }\n\n calculateImpactTestRequirementsDisabled() {\n let standard = this.getModelValue(PQR.STANDARD);\n let weldType = this.getModelValue(PQR.WELDTYPE_TESTPIECE);\n let thickness = this.getModelValue(PQR.THICKNESS_TOTAL_TESTPIECE);\n let result = PQRRules.isImpactTestRequiredDisabled(standard, thickness, weldType);\n set(this, 'isImpactTestRequirementsDisabled', result);\n }\n\n calculateArcTransferModeRootDisabled() {\n let standard = this.getModelValue(PQR.STANDARD);\n let weldingProcessRoot = this.getModelValue(PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n let result = PQRRules.isArcTransferModeDisabled(standard, weldingProcessRoot);\n set(this, 'isArcTransferModeRootDisabledByRule', result);\n }\n\n calculateArcTransferModeFillDisabled() {\n let standard = this.getModelValue(PQR.STANDARD);\n let weldingProcessFill = this.getModelValue(PQR.WELDING_PROCESS_FILL_TESTPIECE);\n let result = PQRRules.isArcTransferModeDisabled(standard, weldingProcessFill);\n set(this, 'isArcTransferModeFillDisabledByRule', result);\n }\n\n calculateArcTransferModeCapDisabled() {\n let standard = this.getModelValue(PQR.STANDARD);\n let weldingProcessCap = this.getModelValue(PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n let result = PQRRules.isArcTransferModeDisabled(standard, weldingProcessCap);\n set(this, 'isArcTransferModeCapDisabledByRule', result);\n }\n\n calculateArcTransferModesDisabled() {\n this.calculateArcTransferModeRootDisabled();\n this.calculateArcTransferModeFillDisabled();\n this.calculateArcTransferModeCapDisabled();\n }\n\n isBranchAngleDisabled = false;\n\n branchAngleDisabledCalculation() {\n let weldType = this.getModelValue(PQR.WELDTYPE_TESTPIECE);\n if (!isEmpty(weldType)) {\n set(this, 'isBranchAngleDisabled', PQRRules.isBranchAngleDisabled(weldType.get('weldType')));\n } else {\n set(this, 'isBranchAngleDisabled', true);\n }\n }\n\n isHardnessTestRequirementsDisabled = false;\n\n hardnessTestRequirementsDisabledCalculation() {\n let standard = this.getModelValue(PQR.STANDARD);\n let bm1 = this.getModelValue(PQR.BASE_MATERIAL1_TESTPIECE);\n let bm2 = this.getModelValue(PQR.BASE_MATERIAL2_TESTPIECE);\n let group1 = !isEmpty(bm1) ? bm1.get('materialGroup') : null;\n let group2 = !isEmpty(bm2) ? bm2.get('materialGroup') : null;\n let group1Name = !isEmpty(group1) ? group1.get('groupName') : null;\n let group2Name = !isEmpty(group2) ? group2.get('groupName') : null;\n this.set(\n 'isHardnessTestRequirementsDisabled',\n PQRRules.isHardnessTestRequirementsDisabled(standard, group1Name, group2Name)\n );\n }\n\n @alias('isDiameterApprovalRangeMaxDisabledByRule')\n isDiameterApprovalRangeMaxDisabledBy;\n\n isDiameterApprovalRangeMaxDisabledByRule = false;\n\n diameterMaxDisabledCalculation() {\n let standard = this.getModelValue(PQR.STANDARD);\n let weldType = this.getModelValue(PQR.WELDTYPE_TESTPIECE);\n let productType = this.getModelValue(PQR.PRODUCT_TYPE_TESTPIECE);\n let weldTypeString = '';\n if (!isEmpty(weldType)) {\n weldTypeString = weldType.get('weldType');\n }\n this.set(\n 'isDiameterApprovalRangeMaxDisabledByRule',\n PQRRules.isDiameterMaxDisabled(standard, weldTypeString, productType)\n );\n }\n\n @computed\n get currentDate() {\n // The endOf('day') is here to work around this issue\n // If I just return new Date() it does not work, and triggers the double rendering\n // https://github.com/edgycircle/ember-pikaday/issues/141\n let today = moment(new Date()).endOf('day');\n return today.toDate();\n }\n\n getModelValue(attribute) {\n assert(`Must pass a valid PQR attribute - ${attribute}`, !isEmpty(attribute));\n return this.get(`model.${attribute}`);\n }\n\n updateHeatInputApprovalRange() {\n PQRRules.updateHeatInputApprovalRange(this.pqr, this.units.unitSystem);\n }\n\n updateWeldingThicknessRoot() {\n this.updateWeldingThicknessRootApprovalRange();\n }\n\n updateWeldingThicknessFill() {\n this.updateWeldingThicknessFillApprovalRange();\n }\n\n updateWeldingThicknessCap() {\n this.updateWeldingThicknessCapApprovalRange();\n }\n\n updateWeldingThicknessTotal() {\n this.updateWeldingThicknessTotalApprovalRange();\n }\n\n updateBaseMaterial1ThicknessApprovalRange() {\n this.updateBaseMaterialThicknessApprovalRange(this.pqr);\n }\n\n updateBaseMaterialThicknessApprovalRange(pqr) {\n this.updateBaseMaterialThicknessesApprovalRange(pqr);\n }\n\n updateWeldingThicknesses() {\n this.updateWeldingThicknessRootApprovalRange();\n this.updateWeldingThicknessFillApprovalRange();\n this.updateWeldingThicknessCapApprovalRange();\n this.updateWeldingThicknessTotalApprovalRange();\n }\n\n updateWeldingThicknessRootApprovalRange() {\n let {\n pqr,\n units: { unitSystem },\n } = this;\n let layer = 'root';\n let value = pqr.get(PQR.THICKNESS_ROOT_TESTPIECE);\n this.updateWeldingThicknessLayerApprovalRange(\n pqr,\n layer,\n PQR.THICKNESS_ROOT_MINIMUM_APPROVALRANGE,\n PQR.THICKNESS_ROOT_MAXIMUM_APPROVALRANGE,\n value\n );\n }\n\n updateWeldingThicknessFillApprovalRange() {\n let {\n pqr,\n units: { unitSystem },\n } = this;\n let layer = 'fill';\n let value = pqr.get(PQR.THICKNESS_FILL_TESTPIECE);\n this.updateWeldingThicknessLayerApprovalRange(\n pqr,\n layer,\n PQR.THICKNESS_FILL_MINIMUM_APPROVALRANGE,\n PQR.THICKNESS_FILL_MAXIMUM_APPROVALRANGE,\n value\n );\n }\n\n updateWeldingThicknessCapApprovalRange() {\n let {\n pqr,\n units: { unitSystem },\n } = this;\n let layer = 'cap';\n let value = pqr.get(PQR.THICKNESS_CAP_TEST_PIECE);\n this.updateWeldingThicknessLayerApprovalRange(\n pqr,\n layer,\n PQR.THICKNESS_CAP_MINIMUM_APPROVAL_RANGE,\n PQR.THICKNESS_CAP_MAXIMUM_APPROVAL_RANGE,\n value\n );\n }\n\n updateWeldingThicknessTotalApprovalRange() {\n let {\n pqr,\n units: { unitSystem },\n } = this;\n let layer = 'total';\n let value = pqr.get(PQR.THICKNESS_TOTAL_TESTPIECE);\n this.updateWeldingThicknessLayerApprovalRange(\n pqr,\n layer,\n PQR.THICKNESS_TOTAL_MINIMUM_APPROVALRANGE,\n PQR.THICKNESS_TOTAL_MAXIMUM_APPROVALRANGE,\n value\n );\n }\n\n updateWeldTypeApprovalRange() {\n let weldType = get(this.pqr, 'weldTypeTestPiece');\n let result = this.approvalRange.weldType(weldType);\n this.setModelCollection(PQR.WELDTYPE_APPROVALRANGE, result);\n }\n\n updateWeldingThicknessLayerApprovalRange(pqr, layerType, minProperty, maxProperty, thickness) {\n let thicknessValue = parseFloat(thickness);\n\n if (isEmpty(thickness) || isNaN(thicknessValue)) {\n pqr.set(minProperty, null);\n pqr.set(maxProperty, null);\n return;\n }\n\n let result = null;\n if (layerType === 'root') {\n result = this.approvalRange.weldingThicknessRoot(thicknessValue);\n } else if (layerType === 'fill') {\n result = this.approvalRange.weldingThicknessFill(thicknessValue);\n } else if (layerType === 'cap') {\n result = this.approvalRange.weldingThicknessCap(thicknessValue);\n } else if (layerType === 'total') {\n result = this.approvalRange.weldingThickness(thicknessValue);\n }\n\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n pqr.set(minProperty, result.min);\n pqr.set(maxProperty, result.max);\n } else if (!isEmpty(result.min)) {\n pqr.set(minProperty, result.min);\n pqr.set(maxProperty, null);\n }\n }\n\n updateBaseMaterialThicknessesApprovalRange(pqr) {\n let thickness1Value = parseFloat(get(pqr, PQR.BASE_MATERIAL1_THICKNESS));\n let thickness2Value = parseFloat(get(pqr, PQR.BASE_MATERIAL2_THICKNESS));\n\n if (isNaN(thickness1Value) && isNaN(thickness2Value)) {\n pqr.set(PQR.BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, null);\n pqr.set(PQR.BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, null);\n pqr.set(PQR.BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, null);\n pqr.set(PQR.BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, null);\n return;\n }\n\n let result = this.approvalRange.baseMaterialThickness(thickness1Value, thickness2Value);\n\n if (!isEmpty(result.material1.min) && !isEmpty(result.material1.max)) {\n pqr.set(PQR.BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, result.material1.min);\n pqr.set(PQR.BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, result.material1.max);\n } else if (!isEmpty(result.material1.min)) {\n pqr.set(PQR.BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, result.material1.min);\n pqr.set(PQR.BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, null);\n }\n\n if (!isEmpty(result.material2.min) && !isEmpty(result.material2.max)) {\n pqr.set(PQR.BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, result.material2.min);\n pqr.set(PQR.BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, result.material2.max);\n } else if (!isEmpty(result.material2.min)) {\n pqr.set(PQR.BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, result.material2.min);\n pqr.set(PQR.BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, null);\n }\n }\n\n updateBaseMaterial2ThicknessApprovalRange() {\n this.updateBaseMaterialThicknessApprovalRange(this.pqr);\n }\n\n updateDiameterApprovalRange() {\n let {\n pqr,\n units: { unitSystem },\n } = this;\n let standard = get(pqr, PQR.STANDARD);\n let diameter = get(pqr, PQR.DIAMETER_TESTPIECE);\n\n if (isStandardASME(standard)) {\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, 0);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n if (isEmpty(diameter)) {\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let result = this.approvalRange.diameter(diameter);\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, result.max);\n } else if (!isEmpty(result.min)) {\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, null);\n }\n }\n\n updateBranchAngleApprovalRange() {\n let { pqr } = this;\n let branchAngle = get(pqr, PQR.BRANCH_ANGLE_TESTPIECE);\n let weldTypeInstance = get(pqr, PQR.WELDTYPE_TESTPIECE);\n let weldType = !isEmpty(weldTypeInstance) ? weldTypeInstance.weldType : null;\n\n let result = this.approvalRange.branchAngle(branchAngle);\n\n pqr.set(PQR.BRANCH_ANGLE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.BRANCH_ANGLE_MAXIMUM_APPROVALRANGE, result.max);\n\n // Update the test piece in this situation\n if (weldType !== WELD_TYPES.BRANCH_CONNECTION) {\n pqr.set(PQR.BRANCH_ANGLE_TESTPIECE, null);\n }\n }\n\n updateShieldingRoot(pqr) {\n let weldingProcessRoot = get(pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n let weldingProcessCode = get(weldingProcessRoot, 'shortDesignation');\n if (!isEmpty(weldingProcessCode)) {\n let shielding = this.approvalRange.shielding(weldingProcessCode);\n let currentShielding = get(pqr, PQR.SHIELDING_ROOT);\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n set(pqr, PQR.SHIELDING_ROOT, shielding);\n this.clearShieldingRoot(pqr);\n }\n }\n }\n\n updateShieldingFill(pqr) {\n let weldingProcessFill = get(pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE);\n let weldingProcessCode = get(weldingProcessFill, 'shortDesignation');\n if (!isEmpty(weldingProcessCode)) {\n let shielding = this.approvalRange.shielding(weldingProcessCode);\n let currentShielding = get(pqr, PQR.SHIELDING_FILL);\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n set(pqr, PQR.SHIELDING_FILL, shielding);\n this.clearShieldingFill(pqr);\n }\n }\n }\n\n updateShieldingCap(pqr) {\n let weldingProcessCap = get(pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n let weldingProcessCode = get(weldingProcessCap, 'shortDesignation');\n if (!isEmpty(weldingProcessCode)) {\n let shielding = this.approvalRange.shielding(weldingProcessCode);\n let currentShielding = get(pqr, PQR.SHIELDING_CAP);\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n set(pqr, PQR.SHIELDING_CAP, shielding);\n this.clearShieldingCap(pqr);\n }\n }\n }\n\n clearShieldingRoot(pqr) {\n // Clear Gas\n set(pqr, PQR.SHIELDING_ROOT_GAS_TESTPIECE, null);\n set(pqr, PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n set(pqr, PQR.SHIELDING_ROOT_GAS_MIXTURE, null);\n set(pqr, PQR.FLOW_RATE_ROOT, null);\n pqr.clearCollection(PQR.SHIELDING_ROOT_GAS_APPROVALRANGE);\n pqr.clearCollection(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE);\n // Clear Flux\n set(pqr, PQR.SHIELDING_ROOT_FLUX_TESTPIECE, null);\n set(pqr, PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n pqr.clearCollection(PQR.SHIELDING_ROOT_FLUX_APPROVALRANGE);\n pqr.clearCollection(PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE);\n }\n\n clearShieldingFill(pqr) {\n // Clear Gas\n set(pqr, PQR.SHIELDING_FILL_GAS_TESTPIECE, null);\n set(pqr, PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n set(pqr, PQR.SHIELDING_FILL_GAS_MIXTURE, null);\n set(pqr, PQR.FLOW_RATE_FILL, null);\n pqr.clearCollection(PQR.SHIELDING_FILL_GAS_APPROVALRANGE);\n pqr.clearCollection(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE);\n // Clear Flux\n set(pqr, PQR.SHIELDING_FILL_FLUX_TESTPIECE, null);\n set(pqr, PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n pqr.clearCollection(PQR.SHIELDING_FILL_FLUX_APPROVALRANGE);\n pqr.clearCollection(PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE);\n }\n\n clearShieldingCap(pqr) {\n // Clear Gas\n set(pqr, PQR.SHIELDING_CAP_GAS_TEST_PIECE, null);\n set(pqr, PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n set(pqr, PQR.SHIELDING_CAP_GAS_MIXTURE, null);\n set(pqr, PQR.FLOW_RATE_CAP, null);\n pqr.clearCollection(PQR.SHIELDING_CAP_GAS_APPROVAL_RANGE);\n pqr.clearCollection(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE);\n // Clear Flux\n set(pqr, PQR.SHIELDING_CAP_FLUX_TEST_PIECE, null);\n set(pqr, PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n pqr.clearCollection(PQR.SHIELDING_CAP_FLUX_APPROVAL_RANGE);\n pqr.clearCollection(PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE);\n }\n\n updateBaseMaterialsApprovalRange() {\n this.updateBaseMaterialApprovalRange(this.model);\n }\n\n updateThroatThicknessApprovalRange() {\n this.updateThroatThicknessApprovalRangeValue(this.pqr);\n }\n\n updateImpactRequirements() {\n this.updateImpactTestRequirements(\n this.model,\n this.updateImpactTestRequirementsDependencies.bind(this)\n );\n }\n\n updateFillerMaterialCommercialDesignationsOnASME() {\n if (\n (isStandardASME(this.getModelValue(PQR.STANDARD)) && this.pqr.hasImpactRequirements()) ||\n this.getModelValue(PQR.OVERLAY_TYPE) === OVERLAY_TYPE_OPTIONS.HARD_FACING\n ) {\n let designationRoot = this.getModelValue(\n PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE\n );\n if (!isEmpty(designationRoot) && !isEmpty(get(designationRoot, 'id'))) {\n this.getModelValue(\n PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE\n ).pushObject(designationRoot);\n }\n let designationFill = this.getModelValue(\n PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE\n );\n if (!isEmpty(designationFill) && !isEmpty(get(designationFill, 'id'))) {\n this.getModelValue(\n PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE\n ).pushObject(designationFill);\n }\n let designationCap = this.getModelValue(\n PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE\n );\n if (!isEmpty(designationCap) && !isEmpty(get(designationCap, 'id'))) {\n this.getModelValue(\n PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE\n ).pushObject(designationCap);\n }\n }\n }\n\n updatePostweldHeatTreatmentTimeApprovalRange(pqr) {\n let result = this.approvalRange.pwhtTime(pqr.get(PQR.POST_WELD_HEAT_TREATMENT_TIME_TESTPIECE));\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM_APPROVAL_RANGE, result.min);\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM_APPROVAL_RANGE, result.max);\n }\n\n updateImpactTestRequirementsDependencies() {\n this.updateHeatInputApprovalRange();\n this.updateWeldingThicknesses();\n this.updatePreHeatApprovalRange();\n this.updateTypeCurrentAndPolarityApprovalRange();\n this.updateBaseMaterialsApprovalRange();\n this.updateBaseMaterial1ThicknessApprovalRange();\n this.updateBaseMaterial2ThicknessApprovalRange();\n this.updateWeldingPositionsRootApprovalRange();\n this.updateWeldingPositionsFillApprovalRange();\n this.updateWeldingPositionsCapApprovalRange();\n this.updateFillerMaterialCommercialDesignationsOnASME();\n this.updateWeldingDetailsApprovalRange();\n this.updateInterpassApprovalRange();\n }\n\n updateHardnessTestRequirements() {\n PQRRules.updateHardnessTestRequirements(this.model);\n }\n\n updateTypeCurrentAndPolarityApprovalRange() {\n this.updateTypeCurrentAndPolarityRootApprovalRange();\n this.updateTypeCurrentAndPolarityFillApprovalRange();\n this.updateTypeCurrentAndPolarityCapApprovalRange();\n }\n\n updateTypeCurrentAndPolarityRootApprovalRange() {\n this.updateTypeOfCurrentAndPolarityRoot(this.model);\n }\n\n updateTypeCurrentAndPolarityFillApprovalRange() {\n this.updateTypeOfCurrentAndPolarityFill(this.model);\n }\n\n updateTypeCurrentAndPolarityCapApprovalRange() {\n this.updateTypeOfCurrentAndPolarityCap(this.model);\n }\n\n updateTypeOfCurrentAndPolarityRoot(pqr) {\n let typeCurrent = get(pqr, PQR.TYPE_CURRENT_ROOT_TESTPIECE);\n let result = this.approvalRange.typeCurrentPolarity(typeCurrent);\n let approvalRange = pqr.get(PQR.TYPE_CURRENT_ROOT_APPROVALRANGE);\n approvalRange.clear();\n result.forEach((pol) => {\n approvalRange.pushObject(pol);\n });\n }\n\n updateTypeOfCurrentAndPolarityFill(pqr) {\n let typeCurrent = get(pqr, PQR.TYPE_CURRENT_FILL_TESTPIECE);\n let result = this.approvalRange.typeCurrentPolarity(typeCurrent);\n let approvalRange = pqr.get(PQR.TYPE_CURRENT_FILL_APPROVALRANGE);\n approvalRange.clear();\n result.forEach((pol) => {\n approvalRange.pushObject(pol);\n });\n }\n\n updateTypeOfCurrentAndPolarityCap(pqr) {\n let typeCurrent = get(pqr, PQR.TYPE_CURRENT_CAP_TEST_PIECE);\n let result = this.approvalRange.typeCurrentPolarity(typeCurrent);\n let approvalRange = pqr.get(PQR.TYPE_CURRENT_CAP_APPROVAL_RANGE);\n approvalRange.clear();\n result.forEach((pol) => {\n approvalRange.pushObject(pol);\n });\n }\n\n updatePreHeatApprovalRange() {\n let { pqr } = this;\n let preHeat = parseInt(pqr.get(PQR.PREHEAT_TEMPERATURE_TESTPIECE), 10);\n\n if (isEmpty(preHeat) || isNaN(preHeat)) {\n pqr.set(PQR.PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n let result = this.approvalRange.preHeat(preHeat);\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n pqr.set(PQR.PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, result.max);\n pqr.set(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n } else if (!isEmpty(result.min)) {\n pqr.set(PQR.PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n }\n }\n\n updateInterpassApprovalRange() {\n let { pqr } = this;\n let interpass = parseInt(pqr.get(PQR.INTERPASS_TEMPERATURE_TESTPIECE), 10);\n\n if (isEmpty(interpass) || isNaN(interpass)) {\n pqr.set(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let result = this.approvalRange.interpass(interpass);\n\n let { min, max } = result;\n\n if (!isEmpty(min) && !isEmpty(max)) {\n pqr.set(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, min);\n pqr.set(PQR.INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE, max);\n } else if (!isEmpty(min)) {\n pqr.set(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, min);\n pqr.set(PQR.INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n } else if (!isEmpty(max)) {\n pqr.set(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE, max);\n }\n }\n\n updatePostHeatApprovalRange(pqr) {\n let postHeat = parseInt(pqr.get(PQR.POST_HEAT_TEMPERATURE_TESTPIECE), 10);\n\n if (isEmpty(postHeat) || isNaN(postHeat)) {\n pqr.set(PQR.POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let result = this.approvalRange.postHeat(postHeat);\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n pqr.set(PQR.POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, result.max);\n } else if (!isEmpty(result.min)) {\n pqr.set(PQR.POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n }\n }\n\n updatePostWeldHeatTreatmentApprovalRange(pqr) {\n let postWeldHeat = parseInt(pqr.get(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE), 10);\n\n if (isEmpty(postWeldHeat) || isNaN(postWeldHeat)) {\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let result = this.approvalRange.pwhtTemperature(postWeldHeat);\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE, result.max);\n } else if (!isEmpty(result.min)) {\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE, null);\n }\n }\n\n updateBaseMaterialApprovalRange(pqr) {\n let bm1 = pqr.get(PQR.BASE_MATERIAL1_TESTPIECE);\n let bm2 = pqr.get(PQR.BASE_MATERIAL2_TESTPIECE);\n let result = this.approvalRange.baseMaterial(bm1, bm2);\n\n let approvalRangeBaseMaterial1 = pqr.get(PQR.BASE_MATERIAL1_APPROVAL_RANGE);\n let approvalRangeBaseMaterial2 = pqr.get(PQR.BASE_MATERIAL2_APPROVAL_RANGE);\n approvalRangeBaseMaterial1.clear();\n approvalRangeBaseMaterial2.clear();\n\n if (isEmpty(result.material2)) {\n // Calculate the baseMaterial2 by passing it as baseMaterial1 (because it does not have rules)\n result.material2 = this.approvalRange.baseMaterial(bm2, bm1).material1;\n }\n\n if (result.material1) {\n result.material1.forEach((material) => {\n approvalRangeBaseMaterial1.pushObject(material);\n });\n }\n if (result.material2) {\n result.material2.forEach((material) => {\n approvalRangeBaseMaterial2.pushObject(material);\n });\n }\n }\n\n updateImpactTestRequirements(pqr, updateDependenciesCallback) {\n let standard = pqr.get(PQR.STANDARD);\n let weldType = pqr.get(PQR.WELDTYPE_TESTPIECE);\n let thicknessMaterial1 = parseFloat(pqr.get(PQR.BASE_MATERIAL1_THICKNESS));\n let thicknessMaterial2 = parseFloat(pqr.get(PQR.BASE_MATERIAL2_THICKNESS));\n\n let largestBaseMaterialThickness = null;\n if (!isNaN(thicknessMaterial1) && !isNaN(thicknessMaterial2)) {\n largestBaseMaterialThickness = Math.max(thicknessMaterial1, thicknessMaterial2);\n } else if (!isNaN(thicknessMaterial1)) {\n largestBaseMaterialThickness = thicknessMaterial1;\n } else if (!isNaN(thicknessMaterial2)) {\n largestBaseMaterialThickness = thicknessMaterial2;\n }\n\n let hasImpactValues =\n !isEmpty(pqr.get(PQR.IMPACT_TEST_TEMPERATURE)) ||\n !isEmpty(pqr.get(PQR.IMPACT_TEST_REPORT)) ||\n !isEmpty(pqr.get(PQR.IMPACT_TEST_TYPE));\n\n let result = PQRRules.calculateImpactTestRequirements(\n standard,\n largestBaseMaterialThickness,\n weldType,\n hasImpactValues\n );\n if (result.update) {\n if (pqr.get(PQR.IMPACT_TEST_REQUIRED) !== result.value) {\n pqr.set(PQR.IMPACT_TEST_REQUIRED, result.value);\n updateDependenciesCallback();\n }\n }\n }\n\n updateFillerMaterialRootCommercialDesignationApprovalRange(pqr) {\n let commercialDesignation = pqr.get(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE);\n let result = this.approvalRange.fillerMaterialRootCommercialDesignation(commercialDesignation);\n pqr.get(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE).clear();\n if (!isEmpty(result)) {\n result.forEach((designation) => {\n pqr\n .get(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE)\n .pushObject(designation);\n });\n }\n }\n\n updateFillerMaterialFillCommercialDesignationApprovalRange(pqr) {\n let commercialDesignation = pqr.get(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE);\n let result = this.approvalRange.fillerMaterialFillCommercialDesignation(commercialDesignation);\n pqr.get(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE).clear();\n if (!isEmpty(result)) {\n result.forEach((designation) => {\n pqr\n .get(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE)\n .pushObject(designation);\n });\n }\n }\n\n updateFillerMaterialCapCommercialDesignationApprovalRange(pqr) {\n let commercialDesignation = pqr.get(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE);\n let result = this.approvalRange.fillerMaterialCapCommercialDesignation(commercialDesignation);\n pqr.get(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE).clear();\n if (!isEmpty(result)) {\n result.forEach((designation) => {\n pqr\n .get(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE)\n .pushObject(designation);\n });\n }\n }\n\n updateThroatThicknessApprovalRangeValue(pqr) {\n let totalThickness = get(pqr, PQR.THICKNESS_TOTAL_TESTPIECE);\n let result = this.approvalRange.throatThickness(totalThickness);\n set(pqr, PQR.THROAT_THICKNESS_MINIMUM_APPROVALRANGE, result.min);\n set(pqr, PQR.THROAT_THICKNESS_MAXIMUM_APPROVALRANGE, result.max);\n }\n\n validateField(field) {\n return this.model.validate({ only: [field] });\n }\n\n sortBaseMaterialGroups(groups) {\n return groups.sort((a, b) => {\n let aOrder = a.get('groupOrder');\n let bOrder = b.get('groupOrder');\n if (aOrder > bOrder) {\n return 1;\n } else if (bOrder > aOrder) {\n return -1;\n }\n return 0;\n });\n }\n\n _postSave() {\n // let { pqr } = this;\n // This should be a workaround for the lines not being\n // delivered with the newly saved instance\n // pqr.hasMany(PQR.TENSILE_TEST_LINES).reload();\n // pqr.hasMany(PQR.BEND_TEST_LINES).reload();\n // pqr.hasMany(PQR.IMPACT_TEST_LINES).reload();\n this.resetTabErrors();\n // HACK Make the current pass being edited, null\n // this is because the state of the welding-parameters component becomes inconsistent\n // if the user is editing a parameter and then goes to save the PQR\n // Need to fix this\n set(this, 'currentPass', null);\n }\n\n validationFailed() {\n this.calculateErrorDetailsTab();\n this.calculateErrorBaseMaterialsTab();\n this.calculateErrorConsumablesTab();\n this.calculateErrorOtherTab();\n this.calculateErrorTestsTab();\n this.calculateErrorPassesTab();\n }\n\n cleanUnusedCommercialDesignations(\n approvalRangeProperty,\n approvalRangeCommercialDesignationProperty,\n idProperty\n ) {\n let approvalRange = this.getModelValue(approvalRangeProperty);\n let approvalRangeCommercialDesignation = this.getModelValue(\n approvalRangeCommercialDesignationProperty\n );\n let designationsToRemove = [];\n approvalRangeCommercialDesignation.forEach((designation) => {\n let elementId = designation.get(idProperty);\n if (!approvalRange.findBy('id', elementId)) {\n designationsToRemove.pushObject(designation);\n }\n });\n\n if (!isEmpty(designationsToRemove)) {\n designationsToRemove.forEach((designation) => {\n approvalRangeCommercialDesignation.removeObject(designation);\n });\n }\n }\n\n cleanUnusedGasCommercialDesignations(\n approvalRangeGasProperty,\n approvalRangeCommercialDesignationProperty\n ) {\n this.cleanUnusedCommercialDesignations(\n approvalRangeGasProperty,\n approvalRangeCommercialDesignationProperty,\n 'gas.id'\n );\n }\n\n cleanUnusedFluxCommercialDesignations(\n approvalRangeFluxProperty,\n approvalRangeCommercialDesignationProperty\n ) {\n this.cleanUnusedCommercialDesignations(\n approvalRangeFluxProperty,\n approvalRangeCommercialDesignationProperty,\n 'flux.id'\n );\n }\n\n reloadFillerMaterialRootCommercialDesignationOptions() {\n this.fetchFillerMaterialRootCommercialDesignationOptions();\n }\n\n reloadFillerMaterialFillCommercialDesignationOptions() {\n this.fetchFillerMaterialFillCommercialDesignationOptions();\n }\n\n reloadFillerMaterialCapCommercialDesignationOptions() {\n this.fetchFillerMaterialCapCommercialDesignationOptions();\n }\n\n getWeldTypeCode() {\n let weldType = this.getModelValue(PQR.WELDTYPE_TESTPIECE);\n let weldTypeCode = '';\n if (!isEmpty(weldType)) {\n weldTypeCode = weldType.get('weldType');\n }\n return weldTypeCode;\n }\n\n updateWeldingPositionsRootApprovalRange() {\n let weldingPosition = this.getModelValue(PQR.WELDING_POSITION_ROOT_TESTPIECE);\n let direction = this.getModelValue(PQR.WELDING_POSITION_ROOT_DIRECTION);\n let weldingPositionsApprovalRange = this.approvalRange.weldingPosition(\n weldingPosition,\n direction\n );\n this.setModelCollection(PQR.WELDING_POSITION_ROOT_APPROVALRANGE, weldingPositionsApprovalRange);\n\n PQRRules.updateArcTransferModeTestPieceByWeldingProcess(\n this.pqr,\n PQR.WELDING_PROCESS_ROOT_TESTPIECE,\n PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE\n );\n }\n\n updateWeldingPositionsFillApprovalRange() {\n let weldingPosition = this.getModelValue(PQR.WELDING_POSITION_FILL_TESTPIECE);\n let direction = this.getModelValue(PQR.WELDING_POSITION_FILL_DIRECTION);\n let weldingPositionsApprovalRange = this.approvalRange.weldingPosition(\n weldingPosition,\n direction\n );\n this.setModelCollection(PQR.WELDING_POSITION_FILL_APPROVALRANGE, weldingPositionsApprovalRange);\n\n PQRRules.updateArcTransferModeTestPieceByWeldingProcess(\n this.pqr,\n PQR.WELDING_PROCESS_FILL_TESTPIECE,\n PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE\n );\n }\n\n updateWeldingPositionsCapApprovalRange() {\n let weldingPosition = this.getModelValue(PQR.WELDING_POSITION_CAP_TEST_PIECE);\n let direction = this.getModelValue(PQR.WELDING_POSITION_ROOT_DIRECTION);\n let weldingPositionsApprovalRange = this.approvalRange.weldingPosition(\n weldingPosition,\n direction\n );\n this.setModelCollection(PQR.WELDING_POSITION_CAP_APPROVAL_RANGE, weldingPositionsApprovalRange);\n\n PQRRules.updateArcTransferModeTestPieceByWeldingProcess(\n this.pqr,\n PQR.WELDING_PROCESS_CAP_TEST_PIECE,\n PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE\n );\n }\n\n updateWeldingDetailsApprovalRange() {\n let { pqr } = this;\n let standard = pqr.get(PQR.STANDARD);\n let weldingDetail = pqr.get(PQR.WELDING_DETAILS_TESTPIECE);\n let approvalRange = pqr.get(PQR.WELDING_DETAILS_APPROVALRANGE).clear();\n if (isEmpty(standard) || isEmpty(weldingDetail)) {\n approvalRange.clear();\n } else {\n let result = this.approvalRange.weldingDetails(weldingDetail);\n result.forEach((position) => {\n approvalRange.pushObject(position);\n });\n }\n }\n\n createWpsFromPqr = task(\n {\n drop: true,\n },\n async () => {\n let { pqr, router } = this;\n if (this.validate()) {\n await this.savePQR.perform({\n silentSave: true,\n });\n\n router.transitionTo('welding-procedure-specification.new-from-pqr', {\n queryParams: {\n pqr: get(pqr, 'id'),\n },\n });\n }\n }\n );\n\n init() {\n super.init(...arguments);\n this.approvalRange = new PqrApprovalRange(\n this.pqr,\n this.data,\n this.units.unitSystem,\n this.userSession\n );\n this.branchAngleDisabledCalculation();\n this.calculateArcTransferModesDisabled();\n this.hardnessTestRequirementsDisabledCalculation();\n if (isFilletWeld(this.getModelValue(PQR.WELDTYPE_TESTPIECE))) {\n set(this, 'dissimilarMaterials', true);\n }\n if (get(this, 'section') === 'consumables') {\n this.fetchFillerMaterialRootCommercialDesignationOptions();\n this.fetchFillerMaterialFillCommercialDesignationOptions();\n this.fetchFillerMaterialCapCommercialDesignationOptions();\n }\n }\n\n _setGrooveDesigns(value) {\n this.setModelCollectionValue(PQR.GROOVE_DESIGNS, value);\n this.resetGrooveDesignImagePreview();\n this.validateField(PQR.GROOVE_DESIGNS);\n }\n\n _setWeldLayerConfigurations(value) {\n this.setModelCollectionValue(PQR.WELD_LAYER_CONFIGURATIONS, value);\n this.validateField(PQR.WELD_LAYER_CONFIGURATIONS);\n this.resetWeldLayerImagePreview();\n }\n\n removeAllRootVariables() {\n this.setModelCollection(PQR.WELDING_PROCESS_ROOT_APPROVALRANGE, []);\n this.setModelValue(PQR.PROCESS_MECANIZATION_ROOT_TEST_PIECE, null);\n this.setModelCollection(PQR.PROCESS_MECANIZATION_ROOT_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.WELDING_POSITION_ROOT_TESTPIECE, null);\n this.setModelCollection(PQR.WELDING_POSITION_ROOT_APPROVALRANGE, []);\n\n this.setModelValue(PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE, null);\n this.setModelCollection(PQR.ARC_TRANSFER_MODE_ROOT_APPROVALRANGE, []);\n\n this.setModelValue(PQR.TYPE_CURRENT_ROOT_TESTPIECE, null);\n this.setModelCollection(PQR.TYPE_CURRENT_ROOT_APPROVALRANGE, []);\n\n this.setModelValue(PQR.WELDING_POSITION_ROOT_DIRECTION, null);\n\n this.setModelDecimalValue(PQR.THICKNESS_ROOT_TESTPIECE, null);\n this.setModelValue(PQR.THICKNESS_ROOT_LAYER_TESTPIECE, null);\n this.setModelDecimalValue(PQR.THICKNESS_ROOT_MINIMUM_APPROVALRANGE, null);\n this.setModelDecimalValue(PQR.THICKNESS_ROOT_MAXIMUM_APPROVALRANGE, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_TESTPIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_DIAMETERS, []);\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollection(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE, []);\n\n this.setModelValue(PQR.GAS_NOZZLE_DIAMETER_ROOT, null);\n this.setModelValue(PQR.NUMBER_OF_ELECTRODES, null);\n this.setModelValue(PQR.ELECTRODE_TYPE, null);\n this.setModelValue(PQR.WEAVING, null);\n this.setModelValue(PQR.CONTACT_TUBE_DISTANCE, null);\n this.setModelValue(PQR.TUNGSTEN_DIAMETER_ROOT, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ELECTRODE_FORM_ROOT, null);\n this.setModelValue(PQR.FILLER_MATERIAL_GUIDE_ROOT, null);\n this.setModelValue(PQR.OSCILLATION_WIDTH_ROOT, null);\n this.setModelValue(PQR.OSCILLATION_FREQUENCY_ROOT, null);\n this.setModelValue(PQR.OSCILLATION_DWELL_TIME_ROOT, null);\n this.setModelValue(PQR.SUPPLEMENTAL_DEVICE_ROOT, false);\n\n this.setModelValue(PQR.SHIELDING_ROOT, null);\n this.clearShieldingRoot(this.pqr);\n }\n\n removeAllFillVariables() {\n this.setModelCollection(PQR.WELDING_PROCESS_FILL_APPROVALRANGE, []);\n this.setModelValue(PQR.PROCESS_MECANIZATION_FILL_TEST_PIECE, null);\n this.setModelCollection(PQR.PROCESS_MECANIZATION_FILL_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.WELDING_POSITION_FILL_TESTPIECE, null);\n this.setModelCollection(PQR.WELDING_POSITION_FILL_APPROVALRANGE, []);\n\n this.setModelValue(PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE, null);\n this.setModelCollection(PQR.ARC_TRANSFER_MODE_FILL_APPROVALRANGE, []);\n\n this.setModelValue(PQR.TYPE_CURRENT_FILL_TESTPIECE, null);\n this.setModelCollection(PQR.TYPE_CURRENT_FILL_APPROVALRANGE, []);\n\n this.setModelValue(PQR.WELDING_POSITION_FILL_DIRECTION, null);\n\n this.setModelDecimalValue(PQR.THICKNESS_FILL_TESTPIECE, null);\n this.setModelValue(PQR.THICKNESS_FILL_LAYER_TESTPIECE, null);\n this.setModelDecimalValue(PQR.THICKNESS_FILL_MINIMUM_APPROVALRANGE, null);\n this.setModelDecimalValue(PQR.THICKNESS_FILL_MAXIMUM_APPROVALRANGE, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_TESTPIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_DIAMETERS, []);\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollection(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE, []);\n\n this.setModelValue(PQR.GAS_NOZZLE_DIAMETER_FILL, null);\n this.setModelValue(PQR.NUMBER_OF_ELECTRODES_FILL, null);\n\n this.setModelValue(PQR.ELECTRODE_TYPE_FILL, null);\n this.setModelValue(PQR.WEAVING_FILL, null);\n this.setModelValue(PQR.CONTACT_TUBE_DISTANCE_FILL, null);\n this.setModelValue(PQR.TUNGSTEN_DIAMETER_FILL, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ELECTRODE_FORM_FILL, null);\n this.setModelValue(PQR.FILLER_MATERIAL_GUIDE_FILL, null);\n this.setModelValue(PQR.OSCILLATION_WIDTH_FILL, null);\n this.setModelValue(PQR.OSCILLATION_FREQUENCY_FILL, null);\n this.setModelValue(PQR.OSCILLATION_DWELL_TIME_FILL, null);\n this.setModelValue(PQR.SUPPLEMENTAL_DEVICE_FILL, false);\n\n this.setModelValue(PQR.SHIELDING_FILL, null);\n this.clearShieldingFill(this.pqr);\n }\n\n removeAllCapVariables() {\n this.setModelCollection(PQR.WELDING_PROCESS_CAP_APPROVAL_RANGE, []);\n this.setModelValue(PQR.PROCESS_MECANIZATION_CAP_TEST_PIECE, null);\n this.setModelCollection(PQR.PROCESS_MECANIZATION_CAP_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.WELDING_POSITION_CAP_TEST_PIECE, null);\n this.setModelCollection(PQR.WELDING_POSITION_CAP_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE, null);\n this.setModelCollection(PQR.ARC_TRANSFER_MODE_CAP_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.TYPE_CURRENT_CAP_TEST_PIECE, null);\n this.setModelCollection(PQR.TYPE_CURRENT_CAP_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.WELDING_POSITION_CAP_DIRECTION, null);\n\n this.setModelDecimalValue(PQR.THICKNESS_CAP_TEST_PIECE, null);\n this.setModelValue(PQR.THICKNESS_CAP_LAYER_TEST_PIECE, null);\n this.setModelDecimalValue(PQR.THICKNESS_CAP_MINIMUM_APPROVAL_RANGE, null);\n this.setModelDecimalValue(PQR.THICKNESS_CAP_MAXIMUM_APPROVAL_RANGE, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_TEST_PIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_DIAMETERS, []);\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelCollection(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE, []);\n\n this.setModelValue(PQR.GAS_NOZZLE_DIAMETER_CAP, null);\n this.setModelValue(PQR.NUMBER_OF_ELECTRODES_CAP, null);\n\n this.setModelValue(PQR.ELECTRODE_TYPE_CAP, null);\n this.setModelValue(PQR.WEAVING_CAP, null);\n this.setModelValue(PQR.CONTACT_TUBE_DISTANCE_CAP, null);\n this.setModelValue(PQR.TUNGSTEN_DIAMETER_CAP, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ELECTRODE_FORM_CAP, null);\n this.setModelValue(PQR.FILLER_MATERIAL_GUIDE_CAP, null);\n this.setModelValue(PQR.OSCILLATION_WIDTH_CAP, null);\n this.setModelValue(PQR.OSCILLATION_FREQUENCY_CAP, null);\n this.setModelValue(PQR.OSCILLATION_DWELL_TIME_CAP, null);\n this.setModelValue(PQR.SUPPLEMENTAL_DEVICE_CAP, false);\n\n this.setModelValue(PQR.SHIELDING_CAP, null);\n this.clearShieldingCap(this.pqr);\n }\n\n getBaseMaterialDiameterForApprovalRange(pqr) {\n let diameterBaseMaterial1 = get(pqr, PQR.BASE_MATERIAL1_DIAMETER);\n let diameterBaseMaterial2 = get(pqr, PQR.BASE_MATERIAL2_DIAMETER);\n return this.calculateMinMaxFromPair(diameterBaseMaterial1, diameterBaseMaterial2);\n }\n\n // Calculates the Minimum and Maximum for the Base Material Properties\n calculateMinMaxFromPair(thickness1, thickness2) {\n let result = {\n min: null,\n max: null,\n };\n\n if (isEmpty(thickness1) && isEmpty(thickness2)) {\n return result;\n }\n\n let thickness1Value = parseFloat(thickness1);\n let thickness2Value = parseFloat(thickness2);\n\n if (!isEmpty(thickness1) && !isEmpty(thickness2)) {\n if (!isNaN(thickness1Value) && !isNaN(thickness2Value)) {\n result.min = Math.min(thickness1Value, thickness2Value);\n result.max = Math.max(thickness1Value, thickness2Value);\n }\n } else if (!isEmpty(thickness1)) {\n if (!isNaN(thickness1Value)) {\n result.min = thickness1Value;\n result.max = thickness1Value;\n }\n } else if (!isEmpty(thickness2)) {\n if (!isNaN(thickness2Value)) {\n result.min = thickness2Value;\n result.max = thickness2Value;\n }\n }\n\n return result;\n }\n\n updateWeldingDiameterApprovalRangeFromBaseMaterial() {\n let {\n pqr,\n units: { unitSystem },\n } = this;\n let standard = get(pqr, PQR.STANDARD);\n let weldType = get(pqr, PQR.WELDTYPE_TESTPIECE);\n let productType = get(pqr, PQR.PRODUCT_TYPE_TESTPIECE);\n let thickness = parseFloat(get(pqr, PQR.THICKNESS_TOTAL_TESTPIECE));\n if (isNaN(thickness)) {\n thickness = null;\n }\n let diameter = this.getBaseMaterialDiameterForApprovalRange(pqr);\n\n if (isStandardASME(standard)) {\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, 0);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n if (isEmpty(diameter.min) && isEmpty(diameter.max)) {\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, null);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let weldTypeString = weldType !== null ? weldType.get('weldType') : '';\n let diameterMax = null;\n if (isFilletWeld(weldType)) {\n diameterMax = diameter.max;\n } else {\n diameterMax = parseFloat(get(pqr, PQR.BASE_MATERIAL1_DIAMETER));\n }\n let resultMin = this.approvalRange.diameter(diameter.min);\n let resultMax = this.approvalRange.diameter(diameterMax);\n pqr.set(PQR.DIAMETER_MINIMUM_APPROVALRANGE, resultMin.min);\n pqr.set(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, resultMax.max);\n }\n\n updatePJPButtWeldBaseMaterial1Thickness() {\n let { pqr } = this;\n let result = this.approvalRange.pjpButtWeldBaseMaterial1Thickness();\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, result.min);\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, result.max);\n } else if (!isEmpty(result.min)) {\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, result.min);\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, null);\n }\n }\n\n updatePJPButtWeldBaseMaterial2Thickness() {\n let { pqr } = this;\n let result = this.approvalRange.pjpButtWeldBaseMaterial2Thickness();\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, result.min);\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, result.max);\n } else if (!isEmpty(result.min)) {\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, result.min);\n set(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, null);\n }\n }\n\n updateBaseMaterial1FilletWeldThicknessApprovalRange() {\n let { pqr } = this;\n let thickness = get(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_TESTPIECE);\n if (isEmpty(thickness)) {\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVALRANGE, null);\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let result = this.approvalRange.baseMaterial1FilletWeldThickness(thickness);\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVALRANGE, result.min);\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVALRANGE, result.max);\n } else if (!isEmpty(result.min)) {\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVALRANGE, result.min);\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVALRANGE, null);\n }\n }\n\n updateBaseMaterial2FilletWeldThicknessApprovalRange() {\n let { pqr } = this;\n let thickness = get(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_TESTPIECE);\n\n if (isEmpty(thickness)) {\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVALRANGE, null);\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let result = this.approvalRange.baseMaterial2FilletWeldThickness(thickness);\n if (!isEmpty(result.min) && !isEmpty(result.max)) {\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVALRANGE, result.min);\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVALRANGE, result.max);\n } else if (!isEmpty(result.min)) {\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVALRANGE, result.min);\n set(pqr, PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVALRANGE, null);\n }\n }\n\n trackValidationError() {\n let errors = [];\n get(this, 'pqr.errors').forEach((error) => {\n errors.pushObject(error);\n });\n if (!isEmpty(errors)) {\n get(this, 'analytics').trackEvent(EVENTS.VALIDATION_FAILED, {\n id: get(this, 'pqr.id'),\n type: get(this, 'pqr.metadata.modelName'),\n errors,\n });\n }\n }\n\n checkImpactRequirements() {\n let report = this.getModelValue(PQR.IMPACT_TEST_REPORT);\n let type = this.getModelValue(PQR.IMPACT_TEST_TYPE);\n let temperature = this.getModelValue(PQR.IMPACT_TEST_TEMPERATURE);\n let dimensions = this.getModelValue(PQR.IMPACT_TEST_DIMENSIONS);\n let reportFile = this.getModelValue(PQR.IMPACT_TEST_DOCUMENT);\n\n let hasReport = false;\n if (!isEmpty(reportFile) && !isEmpty(get(reportFile, 'id'))) {\n hasReport = true;\n }\n\n if (\n isEmpty(report) &&\n isEmpty(type) &&\n isEmpty(temperature) &&\n isEmpty(dimensions) &&\n !hasReport\n ) {\n this.setModelValue(PQR.IMPACT_TEST_REQUIRED, false);\n } else {\n this.setModelValue(PQR.IMPACT_TEST_REQUIRED, true);\n }\n }\n\n checkHardnessRequirements() {\n let testReport = this.getModelValue(PQR.HARDNESS_TEST_REPORT);\n let type = this.getModelValue(PQR.HARDNESS_TEST_TYPE);\n let reportFile = this.getModelValue(PQR.HARDNESS_TEST_DOCUMENT);\n\n let hasReport = false;\n if (!isEmpty(reportFile) && !isEmpty(get(reportFile, 'id'))) {\n hasReport = true;\n }\n\n if (isEmpty(testReport) && isEmpty(type) && !hasReport) {\n this.setModelValue(PQR.HARDNESS_TEST_REQUIRED, false);\n } else {\n this.setModelValue(PQR.HARDNESS_TEST_REQUIRED, true);\n }\n }\n\n generateReport = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, taskMonitor, pqr } = this;\n let pqrId = get(pqr, 'id');\n if (taskMonitor.hasTaskByContext('pqr', pqrId)) {\n taskMonitor.removeTaskByContext('pqr', pqrId);\n }\n\n if (!this.validate()) {\n return;\n }\n\n await this.savePQR.perform({\n silentSave: true,\n });\n\n loading.block();\n await pqr\n .createReport()\n .then((response) => {\n if (response.status === '200') {\n get(taskMonitor, 'monitorTask').perform(response.taskIdentifier);\n } else {\n alert.error(`Problem occured ${response.status}`);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n );\n\n duplicatePQR = task(async (options) => {\n let { intl, alertMessage: alert, loading, pqr, router } = this;\n let { certificateNumber, copyTests, unitSystem } = options;\n loading.block();\n\n if (!this.validate()) {\n return;\n }\n\n await this.savePQR.perform({\n silentSave: true,\n });\n\n loading.block();\n try {\n let result = await pqr.duplicate({\n certificate: certificateNumber,\n copyTests,\n unitSystem,\n });\n router.transitionTo('pqr', result.id);\n alert.success(\n intl.t('components.model-pqr/edit.duplicate.messages.duplicate-success', {\n certificateNumber: result.certificate,\n })\n );\n } catch (error) {\n if (isDuplicateError(error)) {\n alert.error(\n intl.t('components.model-pqr/edit.duplicate.messages.certificate-number-error', {\n certificateNumber,\n })\n );\n } else if (isPermissionDenied(error)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: certificateNumber }));\n }\n } finally {\n loading.unblock();\n }\n });\n\n reloadPQR = task(\n {\n drop: true,\n },\n async () => {\n let reloadedPQR = await this.data.loadAllDataPQR(this.pqr.id);\n set(this, 'model', reloadedPQR);\n }\n );\n\n archivePQR = task(\n {\n drop: true,\n },\n async (callback) => {\n let { loading, alertMessage: alert, intl, pqr } = this;\n\n await this.savePQR.perform({\n silentSave: true,\n });\n\n loading.block();\n try {\n await pqr.archive();\n try {\n await this.reloadPQR.perform();\n alert.success(\n intl.t('components.model-pqr/view-mode.messages.archive-success', {\n certificate: get(pqr, 'certificateNumber'),\n })\n );\n if (typeof callback === 'function') {\n callback();\n }\n } finally {\n loading.unblock();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('components.model-pqr/view-mode.messages.archive-error'));\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmArchive', false);\n }\n }\n );\n\n unarchivePQR = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, pqr } = this;\n\n loading.block();\n try {\n await pqr.unarchive();\n try {\n await this.reloadPQR.perform();\n alert.success(\n intl.t('components.model-pqr/view-mode.messages.unarchive-success', {\n certificate: get(pqr, 'certificateNumber'),\n })\n );\n } finally {\n loading.unblock();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('components.model-pqr/view-mode.messages.unarchive-error'));\n }\n } finally {\n set(this, 'showConfirmUnarchive', false);\n }\n }\n );\n\n deletePQR() {\n let { pqr, loading, alertMessage: alert, intl } = this;\n let label = get(pqr, 'certificateNumber');\n let translation = this.intl\n .t('edit-view.actions.deleted', {\n name: get(pqr, 'certificateNumber'),\n })\n .toString();\n loading.block();\n pqr.deleteRecord();\n pqr\n .save()\n .then(() => {\n alert.success(translation);\n get(this, 'deleteInstance')();\n })\n .catch((reason) => {\n pqr.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n let foreignKeyMessage = intl\n .t('edit-view.actions.foreign-key-error', { name: label })\n .toString();\n alert.error(foreignKeyMessage);\n } else {\n alert.error(intl.t('edit-view.actions.generic-delete-error', { name: label }));\n }\n })\n .finally(() => {\n loading.unblock();\n this.toggleProperty('isShowingModal');\n });\n }\n\n moveSectionWithSave = task(\n {\n drop: true,\n },\n async (section) => {\n if (this.validate()) {\n await this.savePQR.perform({\n silentSave: true,\n customLoadingMessage: this.intl\n .t('components.model-pqr/edit.messages.loading.saving-work')\n .toString(),\n });\n set(this, 'section', section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n }\n );\n\n validate() {\n let { pqr, alertMessage: alert, intl } = this;\n if (!pqr.validate()) {\n this.validationFailed();\n this.trackValidationError();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return false;\n }\n return true;\n }\n\n updateArcTransferModeRootApprovalRange(pqr, dataService) {\n let standard = get(pqr, PQR.STANDARD);\n let weldingProcess = pqr.get(PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n let transferMode = pqr.get(PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE);\n let transferModes = dataService.getArcTransferModesByIndustryCode(get(standard, 'code.id'));\n let approvalRange = pqr.get(PQR.ARC_TRANSFER_MODE_ROOT_APPROVALRANGE);\n let weldingProcessShortDesignation = weldingProcess\n ? get(weldingProcess, 'shortDesignation')\n : null;\n if (isEmpty(transferMode)) {\n approvalRange.clear();\n } else {\n let result = this.approvalRange.arcTransferModeRoot(transferMode);\n approvalRange.clear();\n result.forEach((transferMode) => {\n approvalRange.pushObject(transferMode);\n });\n }\n }\n\n updateArcTransferModeFillApprovalRange(pqr, dataService) {\n let standard = get(pqr, PQR.STANDARD);\n let weldingProcess = pqr.get(PQR.WELDING_PROCESS_FILL_TESTPIECE);\n let transferMode = pqr.get(PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE);\n let transferModes = dataService.getArcTransferModesByIndustryCode(get(standard, 'code.id'));\n let approvalRange = pqr.get(PQR.ARC_TRANSFER_MODE_FILL_APPROVALRANGE);\n let weldingProcessShortDesignation = weldingProcess\n ? weldingProcess.get('shortDesignation')\n : null;\n if (isEmpty(transferMode)) {\n approvalRange.clear();\n } else {\n let result = this.approvalRange.arcTransferModeFill(transferMode);\n approvalRange.clear();\n result.forEach((transferMode) => {\n approvalRange.pushObject(transferMode);\n });\n }\n }\n\n updateArcTransferModeCapApprovalRange(pqr, dataService) {\n let standard = get(pqr, PQR.STANDARD);\n let weldingProcess = pqr.get(PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n let transferMode = pqr.get(PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE);\n let transferModes = dataService.getArcTransferModesByIndustryCode(get(standard, 'code.id'));\n let approvalRange = pqr.get(PQR.ARC_TRANSFER_MODE_CAP_APPROVAL_RANGE);\n let weldingProcessShortDesignation = weldingProcess\n ? weldingProcess.get('shortDesignation')\n : null;\n if (isEmpty(transferMode)) {\n approvalRange.clear();\n } else {\n let result = this.approvalRange.arcTransferModeCap(transferMode);\n approvalRange.clear();\n result.forEach((transferMode) => {\n approvalRange.pushObject(transferMode);\n });\n }\n }\n\n updateProcessMecanizationRoot(pqr, allProcessMecanizations) {\n let mecanization = get(pqr, PQR.PROCESS_MECANIZATION_ROOT_TEST_PIECE);\n let mecanizationApprovalRange = this.approvalRange.processMecanizationRoot(mecanization);\n let approvalRange = get(pqr, PQR.PROCESS_MECANIZATION_ROOT_APPROVAL_RANGE);\n approvalRange.clear();\n mecanizationApprovalRange.forEach((result) => {\n approvalRange.pushObject(result);\n });\n }\n\n updateProcessMecanizationFill(pqr, allProcessMecanizations) {\n let mecanization = get(pqr, PQR.PROCESS_MECANIZATION_FILL_TEST_PIECE);\n let mecanizationApprovalRange = this.approvalRange.processMecanizationFill(mecanization);\n let approvalRange = get(pqr, PQR.PROCESS_MECANIZATION_FILL_APPROVAL_RANGE);\n approvalRange.clear();\n mecanizationApprovalRange.forEach((result) => {\n approvalRange.pushObject(result);\n });\n }\n\n updateProcessMecanizationCap(pqr, allProcessMecanizations) {\n let mecanization = get(pqr, PQR.PROCESS_MECANIZATION_CAP_TEST_PIECE);\n let mecanizationApprovalRange = this.approvalRange.processMecanizationCap(mecanization);\n let approvalRange = get(pqr, PQR.PROCESS_MECANIZATION_CAP_APPROVAL_RANGE);\n approvalRange.clear();\n mecanizationApprovalRange.forEach((result) => {\n approvalRange.pushObject(result);\n });\n }\n\n @action\n saveModel() {\n let { pqr, alertMessage: alert, intl } = this;\n if (!pqr.validate()) {\n this.validationFailed();\n this.trackValidationError();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n this.savePQR.perform();\n }\n\n @action\n setCertificateNumber(number) {\n this.setModelValue(PQR.CERTIFICATE_NUMBER, number);\n }\n\n @action\n setAddress(address) {\n this.setModelValue(PQR.ADDRESS, address);\n }\n\n // Updates the current address of the PQR with the one from the company\n @action\n updateCompany(company) {\n if (company) {\n this.setModelValue(PQR.COMPANY, company);\n this.setModelValue(PQR.ADDRESS, company.get('address'));\n } else {\n this.setModelValue(PQR.COMPANY, null);\n this.setModelValue(PQR.ADDRESS, null);\n }\n }\n\n @action\n setConstructionStandard(value) {\n this.setModelValue(PQR.CONSTRUCTION_STANDARD, value);\n }\n\n @action\n setExaminingBody(body) {\n this.setModelValue(PQR.EXAMINING_BODY, body);\n }\n\n @action\n setEmissionDate(value) {\n this.setModelValue(PQR.EMISSION_DATE, value);\n }\n\n @action\n removeExaminingBody() {\n this.setModelValue(PQR.EXAMINING_BODY, null);\n }\n\n @action\n chooseWeldType(weldType) {\n let standard = this.getModelValue(PQR.STANDARD);\n let approvalWeldTypes = this.approvalRange.weldType(weldType);\n this.setModelValue(PQR.WELDTYPE_TESTPIECE, weldType);\n\n // Alway reset the overlay type and joint type\n this.setModelValue(PQR.OVERLAY_TYPE, null);\n this.setModelValue(PQR.JOINT_TYPE, null);\n this.setModelCollection(PQR.WELDTYPE_APPROVALRANGE, approvalWeldTypes);\n\n if (isFilletWeld(weldType)) {\n set(this, 'dissimilarMaterials', true);\n let currentDetailsTestPiece = this.getModelValue(PQR.WELDING_DETAILS_TESTPIECE);\n let validDetails = filterDetailsIncompatibleWithFilletWeld(currentDetailsTestPiece);\n this.setModelCollection(PQR.WELDING_DETAILS_TESTPIECE, validDetails);\n\n let currentDetailsApprovalRange = this.getModelValue(PQR.WELDING_DETAILS_APPROVALRANGE);\n let validDetailsApprovalRange = filterDetailsIncompatibleWithFilletWeld(\n currentDetailsApprovalRange\n );\n this.setModelCollection(PQR.WELDING_DETAILS_APPROVALRANGE, validDetailsApprovalRange);\n }\n\n if (get(this, 'isOverlayWeld')) {\n let currentDetailsTestPiece = this.getModelValue(PQR.WELDING_DETAILS_TESTPIECE);\n let validDetails = filterDetailsIncompatibleWithOverlayWeld(currentDetailsTestPiece);\n this.setModelCollection(PQR.WELDING_DETAILS_TESTPIECE, validDetails);\n\n let currentDetailsApprovalRange = this.getModelValue(PQR.WELDING_DETAILS_APPROVALRANGE);\n let validDetailsApprovalRange = filterDetailsIncompatibleWithOverlayWeld(\n currentDetailsApprovalRange\n );\n this.setModelCollection(PQR.WELDING_DETAILS_APPROVALRANGE, validDetailsApprovalRange);\n }\n\n if (isPartialPenetrationButtWeld(weldType)) {\n let currentDetailsTestPiece = this.getModelValue(PQR.WELDING_DETAILS_TESTPIECE);\n let validDetails =\n filterDetailsIncompatibleWithPartialPenetrationButtWeld(currentDetailsTestPiece);\n this.setModelCollection(PQR.WELDING_DETAILS_TESTPIECE, validDetails);\n }\n\n // Update Disabled conditions\n this.branchAngleDisabledCalculation();\n\n // Update Approval Range Calculation\n this.updateWeldingThicknesses();\n this.updateBaseMaterial1FilletWeldThicknessApprovalRange();\n this.updateBaseMaterial2FilletWeldThicknessApprovalRange();\n this.updatePJPButtWeldBaseMaterial1Thickness();\n this.updatePJPButtWeldBaseMaterial2Thickness();\n this.updateBranchAngleApprovalRange();\n this.diameterMaxDisabledCalculation();\n // Fillet Weld in the Approval Range, affects the Throat Thickness Approval Range\n this.updateThroatThicknessApprovalRange();\n\n // Required because WeldType = Overlay Weld has an influence\n this.updateWeldingPositionsRootApprovalRange();\n this.updateWeldingPositionsFillApprovalRange();\n this.updateWeldingPositionsCapApprovalRange();\n\n // Overlay Welds affect the HeatInput Approval Range\n this.updateHeatInputApprovalRange();\n // Overlay Welds affect Welding Details Approval Range\n this.updateWeldingDetailsApprovalRange();\n // Overlay Welds affect BaseMaterial Approval Range\n this.updateBaseMaterialsApprovalRange();\n }\n\n @action\n setWeldTypeApprovalRange(weldTypes) {\n this.setModelCollection(PQR.WELDTYPE_APPROVALRANGE, weldTypes);\n // Fillet Weld, affects the Throat Thickness Approval Range\n this.updateThroatThicknessApprovalRange();\n }\n\n @action\n chooseWeldingProcessRoot(weldingProcess) {\n this.removeAllRootVariables();\n\n this.setModelValue(PQR.WELDING_PROCESS_ROOT_TESTPIECE, weldingProcess);\n this.setModelCollectionValue(PQR.WELDING_PROCESS_ROOT_APPROVALRANGE, weldingProcess);\n\n // Triggers Approval Ranges\n if (!isEmpty(weldingProcess)) {\n this.updateShieldingRoot(this.pqr);\n } else {\n this.setModelValue(PQR.WELDING_PROCESS_FILL_TESTPIECE, null);\n this.removeAllFillVariables();\n this.setModelValue(PQR.WELDING_PROCESS_CAP_TEST_PIECE, null);\n this.removeAllCapVariables();\n }\n this.calculateArcTransferModeRootDisabled();\n }\n\n @action\n setWeldingProcessRootApprovalRange(weldingProcesses) {\n this.setModelCollection(PQR.WELDING_PROCESS_ROOT_APPROVALRANGE, weldingProcesses);\n }\n\n @action\n setWeldingProcessFillApprovalRange(weldingProcesses) {\n this.setModelCollection(PQR.WELDING_PROCESS_FILL_APPROVALRANGE, weldingProcesses);\n }\n\n @action\n setWeldingProcessCapApprovalRange(weldingProcesses) {\n this.setModelCollection(PQR.WELDING_PROCESS_CAP_APPROVAL_RANGE, weldingProcesses);\n }\n\n @action\n chooseWeldingProcessFill(weldingProcess) {\n this.removeAllFillVariables();\n\n this.setModelValue(PQR.WELDING_PROCESS_FILL_TESTPIECE, weldingProcess);\n this.setModelCollectionValue(PQR.WELDING_PROCESS_FILL_APPROVALRANGE, weldingProcess);\n\n // Triggers Approval Ranges\n if (!isEmpty(weldingProcess)) {\n this.updateShieldingFill(this.pqr);\n } else {\n this.removeAllCapVariables();\n this.setModelValue(PQR.WELDING_PROCESS_CAP_TEST_PIECE, null);\n }\n this.calculateArcTransferModeFillDisabled();\n }\n\n @action\n chooseWeldingProcessCap(weldingProcess) {\n this.removeAllCapVariables();\n\n this.setModelValue(PQR.WELDING_PROCESS_CAP_TEST_PIECE, weldingProcess);\n this.setModelCollectionValue(PQR.WELDING_PROCESS_CAP_APPROVAL_RANGE, weldingProcess);\n\n // Triggers Approval Ranges\n if (!isEmpty(weldingProcess)) {\n this.updateShieldingCap(this.pqr);\n }\n this.calculateArcTransferModeCapDisabled();\n }\n\n @action\n chooseWeldingPositionRoot(weldingPosition) {\n this.setModelValue(PQR.WELDING_POSITION_ROOT_TESTPIECE, weldingPosition);\n this.updateWeldingPositionsRootApprovalRange();\n }\n\n @action\n chooseWeldingPositionFill(weldingPosition) {\n this.setModelValue(PQR.WELDING_POSITION_FILL_TESTPIECE, weldingPosition);\n this.updateWeldingPositionsFillApprovalRange();\n }\n\n @action\n chooseWeldingPositionCap(weldingPosition) {\n this.setModelValue(PQR.WELDING_POSITION_CAP_TEST_PIECE, weldingPosition);\n this.updateWeldingPositionsCapApprovalRange();\n }\n\n @action\n setWeldingPositionRootApprovalRange(weldingPositions) {\n this.setModelCollection(PQR.WELDING_POSITION_ROOT_APPROVALRANGE, weldingPositions);\n }\n\n @action\n setWeldingPositionFillApprovalRange(weldingPositions) {\n this.setModelCollection(PQR.WELDING_POSITION_FILL_APPROVALRANGE, weldingPositions);\n }\n\n @action\n setWeldingPositionCapApprovalRange(weldingPositions) {\n this.setModelCollection(PQR.WELDING_POSITION_CAP_APPROVAL_RANGE, weldingPositions);\n }\n\n @action\n setWeldingDetailsTestPiece(weldingDetails) {\n this.setModelCollection(PQR.WELDING_DETAILS_TESTPIECE, weldingDetails);\n if (isSingleOrMultiLayer(weldingDetails)) {\n this.updateWeldingThicknessTotal();\n this.updateThroatThicknessApprovalRange();\n this.updateWeldTypeApprovalRange();\n }\n this.updateWeldingDetailsApprovalRange();\n this.validateField(PQR.WELDING_DETAILS_TESTPIECE);\n }\n\n @action\n setWeldingDetailsApprovalRange(weldingDetails) {\n this.setModelCollection(PQR.WELDING_DETAILS_APPROVALRANGE, weldingDetails);\n }\n\n @action\n chooseArcTransferModeRoot(arcTransferMode) {\n this.setModelValue(PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE, arcTransferMode);\n\n this.updateArcTransferModeRootApprovalRange(this.model, this.weldnoteData);\n this.updateWeldingThicknesses();\n }\n\n @action\n setArcTransferModeRootApprovalRange(arcTransferModes) {\n this.setModelCollection(PQR.ARC_TRANSFER_MODE_ROOT_APPROVALRANGE, arcTransferModes);\n }\n\n @action\n chooseArcTransferModeFill(arcTransferMode) {\n this.setModelValue(PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE, arcTransferMode);\n\n this.updateArcTransferModeFillApprovalRange(this.model, this.weldnoteData);\n this.updateWeldingThicknesses();\n }\n\n @action\n chooseArcTransferModeCap(arcTransferMode) {\n this.setModelValue(PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE, arcTransferMode);\n\n this.updateArcTransferModeCapApprovalRange(this.model, this.weldnoteData);\n this.updateWeldingThicknesses();\n }\n\n @action\n setArcTransferModeFillApprovalRange(arcTransferModes) {\n this.setModelCollection(PQR.ARC_TRANSFER_MODE_FILL_APPROVALRANGE, arcTransferModes);\n }\n\n @action\n setArcTransferModeCapApprovalRange(arcTransferModes) {\n this.setModelCollection(PQR.ARC_TRANSFER_MODE_CAP_APPROVAL_RANGE, arcTransferModes);\n }\n\n @action\n chooseTypeCurrentRoot(typeCurrent) {\n this.setModelValue(PQR.TYPE_CURRENT_ROOT_TESTPIECE, typeCurrent);\n this.updateTypeCurrentAndPolarityRootApprovalRange();\n }\n\n @action\n setTypeCurrentRootApprovalRange(typeCurrents) {\n this.setModelCollection(PQR.TYPE_CURRENT_ROOT_APPROVALRANGE, typeCurrents);\n }\n\n @action\n chooseTypeCurrentFill(typeCurrent) {\n this.setModelValue(PQR.TYPE_CURRENT_FILL_TESTPIECE, typeCurrent);\n this.updateTypeCurrentAndPolarityFillApprovalRange();\n }\n\n @action\n chooseTypeCurrentCap(typeCurrent) {\n this.setModelValue(PQR.TYPE_CURRENT_CAP_TEST_PIECE, typeCurrent);\n this.updateTypeCurrentAndPolarityCapApprovalRange();\n }\n\n @action\n setTypeCurrentFillApprovalRange(typeCurrents) {\n this.setModelCollection(PQR.TYPE_CURRENT_FILL_APPROVALRANGE, typeCurrents);\n }\n\n @action\n setTypeCurrentCapApprovalRange(typeCurrents) {\n this.setModelCollection(PQR.TYPE_CURRENT_CAP_APPROVAL_RANGE, typeCurrents);\n }\n\n @action\n setBaseMaterial1TestPiece(baseMaterial) {\n this.setModelValue(PQR.BASE_MATERIAL1_TESTPIECE, baseMaterial);\n this.hardnessTestRequirementsDisabledCalculation();\n this.updateHardnessTestRequirements();\n let baseMaterial2 = this.getModelValue(PQR.BASE_MATERIAL2_TESTPIECE);\n if (\n isEmpty(baseMaterial2) ||\n (baseMaterial2 !== null && isEmpty(baseMaterial2.get('id'))) ||\n get(this, 'isOverlayWeld')\n ) {\n this.setBaseMaterial2TestPiece(baseMaterial);\n }\n // Heat Input is Affected by Hardness Requirements, as such calculate needs to be done after\n this.updateHeatInputApprovalRange();\n this.updateBaseMaterialsApprovalRange();\n this.updateInterpassApprovalRange();\n }\n\n @action\n removeBaseMaterial1TestPiece() {\n this.setModelValue(PQR.BASE_MATERIAL1_TESTPIECE, null);\n if (!get(this, 'hasDissimilarMaterials')) {\n this.setModelValue(PQR.BASE_MATERIAL2_TESTPIECE, null);\n }\n this.updateBaseMaterialsApprovalRange();\n this.hardnessTestRequirementsDisabledCalculation();\n this.updateHardnessTestRequirements();\n // Heat Input is Affected by Hardness Requirements, as such calculate needs to be done after\n this.updateHeatInputApprovalRange();\n }\n\n @action\n setBaseMaterial2TestPiece(baseMaterial) {\n this.setModelValue(PQR.BASE_MATERIAL2_TESTPIECE, baseMaterial);\n this.hardnessTestRequirementsDisabledCalculation();\n this.updateHardnessTestRequirements();\n let baseMaterial1 = this.getModelValue(PQR.BASE_MATERIAL1_TESTPIECE);\n if (isEmpty(baseMaterial1) || (baseMaterial1 !== null && isEmpty(baseMaterial1.get('id')))) {\n this.setBaseMaterial1TestPiece(baseMaterial);\n }\n // Heat Input is Affected by Hardness Requirements, as such calculate needs to be done after\n this.updateHeatInputApprovalRange();\n this.updateBaseMaterialsApprovalRange();\n this.updateInterpassApprovalRange();\n }\n\n @action\n removeBaseMaterial2TestPiece() {\n this.setModelValue(PQR.BASE_MATERIAL2_TESTPIECE, null);\n this.updateBaseMaterialsApprovalRange();\n this.hardnessTestRequirementsDisabledCalculation();\n this.updateHardnessTestRequirements();\n // Heat Input is Affected by Hardness Requirements, as such calculate needs to be done after\n this.updateHeatInputApprovalRange();\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCodeId'));\n }\n\n @action\n setBaseMaterial1ApprovalRange(baseMaterials) {\n let sortedMaterials = this.sortBaseMaterialGroups(baseMaterials);\n this.setModelCollection(PQR.BASE_MATERIAL1_APPROVAL_RANGE, sortedMaterials);\n }\n\n @action\n setBaseMaterial2ApprovalRange(baseMaterials) {\n let sortedMaterials = this.sortBaseMaterialGroups(baseMaterials);\n this.setModelCollection(PQR.BASE_MATERIAL2_APPROVAL_RANGE, sortedMaterials);\n }\n\n @action\n choosePreparationMethod(preparationMethods) {\n this.setModelCollection(PQR.PREPARATION_METHODS_TESTPIECE, preparationMethods);\n }\n\n @action\n setProductTypeTestPiece(productType) {\n this.setModelValue(PQR.PRODUCT_TYPE_TESTPIECE, productType);\n let weldType = this.getModelValue(PQR.WELDTYPE_TESTPIECE);\n\n let approvalWeldTypes = this.approvalRange.weldType(weldType);\n this.setModelCollection(PQR.WELDTYPE_APPROVALRANGE, approvalWeldTypes);\n\n this.updateDiameterApprovalRange();\n this.updateBranchAngleApprovalRange();\n this.diameterMaxDisabledCalculation();\n this.updateWeldingThicknesses();\n }\n\n @action\n chooseWeldingThicknessRootLayerTestPiece(rootLayer) {\n this.setModelValue(PQR.THICKNESS_ROOT_LAYER_TESTPIECE, rootLayer);\n if (this.validateField(PQR.THICKNESS_ROOT_TESTPIECE)) {\n this.updateWeldingThicknessRoot();\n }\n }\n\n @action\n chooseWeldingThicknessFillLayerTestPiece(fillLayer) {\n this.setModelValue(PQR.THICKNESS_FILL_LAYER_TESTPIECE, fillLayer);\n if (this.validateField(PQR.THICKNESS_FILL_TESTPIECE)) {\n this.updateWeldingThicknessFill();\n }\n }\n\n @action\n chooseWeldingThicknessCapLayerTestPiece(capLayer) {\n this.setModelValue(PQR.THICKNESS_CAP_LAYER_TEST_PIECE, capLayer);\n if (this.validateField(PQR.THICKNESS_CAP_TEST_PIECE)) {\n this.updateWeldingThicknessCap();\n }\n }\n\n // ****\n // Shielding Root\n // ****\n @action\n setShieldingRoot(selection) {\n this.setModelValue(PQR.SHIELDING_ROOT, selection);\n // When choosing a different shieldingRoot must remove the previous ones\n this.clearShieldingRoot(this.pqr);\n this.validateField(PQR.SHIELDING_ROOT);\n }\n\n @action\n setGasRoot(gas) {\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_TESTPIECE, gas);\n this.setModelCollectionValue(PQR.SHIELDING_ROOT_GAS_APPROVALRANGE, gas);\n\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_MIXTURE, null);\n }\n\n @action\n removeGasRoot() {\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_ROOT_GAS_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_MIXTURE, null);\n }\n\n @action\n setGasRootApprovalRange(gas) {\n this.setModelCollection(PQR.SHIELDING_ROOT_GAS_APPROVALRANGE, gas);\n this.cleanUnusedGasCommercialDesignations(\n PQR.SHIELDING_ROOT_GAS_APPROVALRANGE,\n PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE\n );\n }\n\n @action\n setShieldingRootGasCommercialDesignationTestPiece(gasDesignation) {\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, gasDesignation);\n this.setModelCollectionValue(\n PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n gasDesignation\n );\n if (!isEmpty(gasDesignation)) {\n let gasMixture = gasDesignation.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setShieldingRootGasMixture(gasMixture);\n }\n } else {\n this.setShieldingRootGasMixture(null);\n }\n }\n\n @action\n setShieldingRootGasCommercialDesignationApprovalRange(gases) {\n this.setModelCollection(PQR.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, gases);\n }\n\n @action\n setShieldingFillGasCommercialDesignationTestPiece(gasDesignation) {\n this.setModelValue(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, gasDesignation);\n this.setModelCollectionValue(\n PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n gasDesignation\n );\n if (!isEmpty(gasDesignation)) {\n let gasMixture = gasDesignation.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setShieldingFillGasMixture(gasMixture);\n }\n } else {\n this.setShieldingFillGasMixture(null);\n }\n }\n\n @action\n setShieldingFillGasCommercialDesignationApprovalRange(gases) {\n this.setModelCollection(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, gases);\n }\n\n @action\n setShieldingRootFluxCommercialDesignationTestPiece(flux) {\n this.setModelValue(PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, flux);\n this.setModelCollectionValue(\n PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n flux\n );\n }\n\n @action\n setShieldingRootFluxCommercialDesignationApprovalRange(fluxes) {\n this.setModelCollection(PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, fluxes);\n }\n\n @action\n setShieldingFillFluxCommercialDesignationTestPiece(flux) {\n this.setModelValue(PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, flux);\n this.setModelCollectionValue(\n PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n flux\n );\n }\n\n @action\n setShieldingFillFluxCommercialDesignationApprovalRange(fluxes) {\n this.setModelCollection(PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, fluxes);\n }\n\n @action\n setFluxRoot(flux) {\n this.setModelValue(PQR.SHIELDING_ROOT_FLUX_TESTPIECE, flux);\n this.setModelCollectionValue(PQR.SHIELDING_ROOT_FLUX_APPROVALRANGE, flux);\n\n this.setModelValue(PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(\n PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n removeFluxRoot() {\n this.setModelValue(PQR.SHIELDING_ROOT_FLUX_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_ROOT_FLUX_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(\n PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n setFluxRootApprovalRange(fluxes) {\n this.setModelCollection(PQR.SHIELDING_ROOT_FLUX_APPROVALRANGE, fluxes);\n this.cleanUnusedFluxCommercialDesignations(\n PQR.SHIELDING_ROOT_FLUX_APPROVALRANGE,\n PQR.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE\n );\n }\n\n // ****\n // Shielding Fill\n // ****\n @action\n setShieldingFill(selection) {\n this.setModelValue(PQR.SHIELDING_FILL, selection);\n // When choosing a different shieldingFill must remove the previous ones\n this.clearShieldingFill(this.pqr);\n this.validateField(PQR.SHIELDING_FILL);\n }\n\n @action\n setGasFill(gas) {\n this.setModelValue(PQR.SHIELDING_FILL_GAS_TESTPIECE, gas);\n this.setModelCollectionValue(PQR.SHIELDING_FILL_GAS_APPROVALRANGE, gas);\n\n this.setModelValue(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_FILL_GAS_MIXTURE, null);\n }\n\n @action\n removeGasFill() {\n this.setModelValue(PQR.SHIELDING_FILL_GAS_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_FILL_GAS_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_FILL_GAS_MIXTURE, null);\n }\n\n @action\n setGasFillApprovalRange(gases) {\n this.setModelCollection(PQR.SHIELDING_FILL_GAS_APPROVALRANGE, gases);\n this.cleanUnusedGasCommercialDesignations(\n PQR.SHIELDING_FILL_GAS_APPROVALRANGE,\n PQR.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE\n );\n }\n\n @action\n setFluxFill(flux) {\n this.setModelValue(PQR.SHIELDING_FILL_FLUX_TESTPIECE, flux);\n this.setModelCollectionValue(PQR.SHIELDING_FILL_FLUX_APPROVALRANGE, flux);\n\n this.setModelValue(PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(\n PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n removeFluxFill() {\n this.setModelValue(PQR.SHIELDING_FILL_FLUX_TESTPIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_FILL_FLUX_APPROVALRANGE, null);\n this.setModelValue(PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(\n PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n setFluxFillApprovalRange(fluxes) {\n this.setModelCollection(PQR.SHIELDING_FILL_FLUX_APPROVALRANGE, fluxes);\n this.cleanUnusedFluxCommercialDesignations(\n PQR.SHIELDING_FILL_FLUX_APPROVALRANGE,\n PQR.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE\n );\n }\n\n // ****\n // Shielding Cap\n // ****\n @action\n setShieldingCap(selection) {\n this.setModelValue(PQR.SHIELDING_CAP, selection);\n // When choosing a different shielding cap must remove the previous ones\n this.clearShieldingCap(this.pqr);\n this.validateField(PQR.SHIELDING_CAP);\n }\n\n @action\n setGasCap(gas) {\n this.setModelValue(PQR.SHIELDING_CAP_GAS_TEST_PIECE, gas);\n this.setModelCollectionValue(PQR.SHIELDING_CAP_GAS_APPROVAL_RANGE, gas);\n\n this.setModelValue(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE, null);\n this.setModelValue(PQR.SHIELDING_CAP_GAS_MIXTURE, null);\n }\n\n @action\n removeGasCap() {\n this.setModelValue(PQR.SHIELDING_CAP_GAS_TEST_PIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_CAP_GAS_APPROVAL_RANGE, null);\n this.setModelValue(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE, null);\n this.setModelValue(PQR.SHIELDING_CAP_GAS_MIXTURE, null);\n }\n\n @action\n setGasCapApprovalRange(gases) {\n this.setModelCollection(PQR.SHIELDING_CAP_GAS_APPROVAL_RANGE, gases);\n this.cleanUnusedGasCommercialDesignations(\n PQR.SHIELDING_CAP_GAS_APPROVAL_RANGE,\n PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE\n );\n }\n\n @action\n setFluxCap(flux) {\n this.setModelValue(PQR.SHIELDING_CAP_FLUX_TEST_PIECE, flux);\n this.setModelCollectionValue(PQR.SHIELDING_CAP_FLUX_APPROVAL_RANGE, flux);\n\n this.setModelValue(PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelCollectionValue(\n PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n null\n );\n }\n\n @action\n removeFluxCap() {\n this.setModelValue(PQR.SHIELDING_CAP_FLUX_TEST_PIECE, null);\n this.setModelCollectionValue(PQR.SHIELDING_CAP_FLUX_APPROVAL_RANGE, null);\n this.setModelValue(PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelCollectionValue(\n PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n null\n );\n }\n\n @action\n setFluxCapApprovalRange(fluxes) {\n this.setModelCollection(PQR.SHIELDING_CAP_FLUX_APPROVAL_RANGE, fluxes);\n this.cleanUnusedFluxCommercialDesignations(\n PQR.SHIELDING_CAP_FLUX_APPROVAL_RANGE,\n PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE\n );\n }\n\n @action\n setShieldingCapGasCommercialDesignationTestPiece(gasDesignation) {\n this.setModelValue(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE, gasDesignation);\n this.setModelCollectionValue(\n PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n gasDesignation\n );\n if (!isEmpty(gasDesignation)) {\n let gasMixture = gasDesignation.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setShieldingCapGasMixture(gasMixture);\n }\n } else {\n this.setShieldingCapGasMixture(null);\n }\n }\n\n @action\n setShieldingCapGasMixture(value) {\n this.setModelValue(PQR.SHIELDING_CAP_GAS_MIXTURE, value);\n }\n\n @action\n setShieldingCapGasCommercialDesignationApprovalRange(gases) {\n this.setModelCollection(PQR.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE, gases);\n }\n\n @action\n setShieldingCapFluxCommercialDesignationTestPiece(flux) {\n this.setModelValue(PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE, flux);\n this.setModelCollectionValue(\n PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n flux\n );\n }\n\n @action\n setShieldingCapFluxCommercialDesignationApprovalRange(fluxes) {\n this.setModelCollection(PQR.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE, fluxes);\n }\n\n // ****\n // Backing\n // ****\n //\n @action\n setBacking(backing) {\n this.setModelValue(PQR.BACKING_TESTPIECE, backing);\n this.setModelValue(PQR.BACKING_GAS_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_GAS_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelValue(PQR.BACKING_GAS_MIXTURE, null);\n this.setModelCollectionValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_FLUX_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_FLUX_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_FLOW_RATE_ROOT, null);\n this.setModelValue(PQR.BACKING_FLOW_RATE_FILL, null);\n }\n\n @action\n setBackingGas(gas) {\n this.setModelValue(PQR.BACKING_GAS_TESTPIECE, gas);\n PQRRules.updateBackingGasApprovalRange(this.pqr, this.data);\n\n this.setModelValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_GAS_MIXTURE, null);\n }\n\n @action\n removeBackingGas() {\n this.setModelValue(PQR.BACKING_GAS_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_GAS_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_GAS_MIXTURE, null);\n }\n\n @action\n setBackingGasApprovalRange(gases) {\n this.setModelCollection(PQR.BACKING_GAS_APPROVALRANGE, gases);\n this.cleanUnusedGasCommercialDesignations(\n PQR.BACKING_GAS_APPROVALRANGE,\n PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE\n );\n }\n\n @action\n setBackingGasCommercialDesignationTestPiece(gasDesignation) {\n this.setModelValue(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_TESTPIECE, gasDesignation);\n this.setModelCollectionValue(\n PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n gasDesignation\n );\n\n if (!isEmpty(gasDesignation)) {\n let gasMixture = gasDesignation.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setBackingGasMixture(gasMixture);\n }\n } else {\n this.setBackingGasMixture(null);\n }\n }\n\n @action\n setBackingGasCommercialDesignationApprovalRange(designations) {\n this.setModelCollection(PQR.BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE, designations);\n }\n\n @action\n setBackingFlux(flux) {\n this.setModelValue(PQR.BACKING_FLUX_TESTPIECE, flux);\n this.setModelCollectionValue(PQR.BACKING_FLUX_APPROVALRANGE, flux);\n\n this.setModelValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n }\n\n @action\n removeBackingFlux() {\n this.setModelValue(PQR.BACKING_FLUX_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_FLUX_APPROVALRANGE, null);\n this.setModelValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, null);\n }\n\n @action\n setBackingFluxApprovalRange(fluxes) {\n this.setModelCollection(PQR.BACKING_FLUX_APPROVALRANGE, fluxes);\n this.cleanUnusedFluxCommercialDesignations(\n PQR.BACKING_FLUX_APPROVALRANGE,\n PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE\n );\n }\n\n @action\n setBackingFluxCommercialDesignationTestPiece(value) {\n this.setModelValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE, value);\n this.setModelCollectionValue(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, value);\n }\n\n @action\n setBackingFluxCommercialDesignationApprovalRange(designations) {\n this.setModelCollection(PQR.BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE, designations);\n }\n\n @action\n setThicknessRootTestPiece(value) {\n this.setModelDecimalValue(PQR.THICKNESS_ROOT_TESTPIECE, value);\n\n if (this.validateField(PQR.THICKNESS_ROOT_TESTPIECE)) {\n this.updateWeldingThicknessRoot();\n }\n }\n\n @action\n setThicknessFillTestPiece(value) {\n this.setModelDecimalValue(PQR.THICKNESS_FILL_TESTPIECE, value);\n if (this.validateField(PQR.THICKNESS_FILL_TESTPIECE)) {\n this.updateWeldingThicknessFill();\n }\n }\n\n @action\n setThicknessCapTestPiece(value) {\n this.setModelDecimalValue(PQR.THICKNESS_CAP_TEST_PIECE, value);\n if (this.validateField(PQR.THICKNESS_CAP_TEST_PIECE)) {\n this.updateWeldingThicknessCap();\n }\n }\n\n @action\n setThicknessTotalTestPiece(value) {\n this.setModelDecimalValue(PQR.THICKNESS_TOTAL_TESTPIECE, value);\n if (this.validateField(PQR.THICKNESS_TOTAL_TESTPIECE)) {\n this.updateWeldingThicknessTotal();\n this.updateDiameterApprovalRange();\n\n // Isto fica\n if (this.pqr.isButtWeld()) {\n this.setModelDecimalValue(PQR.THROAT_THICKNESS_TESTPIECE, value);\n }\n this.updateThroatThicknessApprovalRange();\n\n // TODO: Isto Mantém-se?\n this.calculateImpactTestRequirementsDisabled();\n // Heat Input is affected by Impact Requirements, as such calculate it first\n\n // TODO: Isto Mantém-se?\n this.updateHeatInputApprovalRange();\n }\n }\n\n @action\n setThicknessRootMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_ROOT_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setThicknessRootMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_ROOT_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setThicknessFillMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_FILL_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setThicknessFillMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_FILL_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setThicknessCapMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_CAP_MINIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setThicknessCapMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_CAP_MAXIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setThicknessTotalMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_TOTAL_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setThicknessTotalMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.THICKNESS_TOTAL_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setDiameterTestPiece(value) {\n this.setModelDecimalValue(PQR.DIAMETER_TESTPIECE, value);\n // TODO: Isto é para remover, certo?\n // this.updateWeldingThicknessTotal();\n\n this.updateDiameterApprovalRange();\n this.updateBaseMaterial1ThicknessApprovalRange();\n this.updateBaseMaterial2ThicknessApprovalRange();\n\n // TODO: Conferir se isto é para manter\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_DIAMETER, value);\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_DIAMETER, value);\n }\n\n @action\n setBranchAngleTestPiece(value) {\n this.setModelValue(PQR.BRANCH_ANGLE_TESTPIECE, value);\n\n if (this.validateField(PQR.BRANCH_ANGLE_TESTPIECE)) {\n this.updateBranchAngleApprovalRange();\n }\n }\n\n @action\n setDiameterMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.DIAMETER_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setDiameterMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.DIAMETER_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setBranchAngleMinimumApprovalRange(value) {\n this.setModelValue(PQR.BRANCH_ANGLE_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setBranchAngleMaximumApprovalRange(value) {\n this.setModelValue(PQR.BRANCH_ANGLE_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setFlowRateProcess1Min(value) {\n this.setModelValue(PQR.FLOW_RATE_PROCESS1_MINIMUM, value);\n }\n\n @action\n setFlowRateProcess1Max(value) {\n this.setModelValue(PQR.FLOW_RATE_PROCESS1_MAXIMUM, value);\n }\n\n @action\n setFlowRateProcess2Min(value) {\n this.setModelValue(PQR.FLOW_RATE_PROCESS2_MINIMUM, value);\n }\n\n @action\n setFlowRateProcess2Max(value) {\n this.setModelValue(PQR.FLOW_RATE_PROCESS2_MAXIMUM, value);\n }\n\n @action\n setFlowRateProcess3Min(value) {\n this.setModelValue(PQR.FLOW_RATE_PROCESS3_MINIMUM, value);\n }\n\n @action\n setFlowRateProcess3Max(value) {\n this.setModelValue(PQR.FLOW_RATE_PROCESS3_MAXIMUM, value);\n }\n\n @action\n setFlowRateRoot(value) {\n this.setModelValue(PQR.FLOW_RATE_ROOT, value);\n }\n\n @action\n setFlowRateFill(value) {\n this.setModelValue(PQR.FLOW_RATE_FILL, value);\n }\n\n @action\n setFlowRateCap(value) {\n this.setModelValue(PQR.FLOW_RATE_CAP, value);\n }\n\n @action\n setBackingFlowRateRoot(value) {\n this.setModelValue(PQR.BACKING_FLOW_RATE_ROOT, value);\n }\n\n @action\n setBackingFlowRateFill(value) {\n this.setModelValue(PQR.BACKING_FLOW_RATE_FILL, value);\n }\n\n @action\n setBackingFlowRateCap(value) {\n this.setModelValue(PQR.BACKING_FLOW_RATE_CAP, value);\n }\n\n @action\n setFillerMaterialRoot(fm) {\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_TESTPIECE, fm);\n this.reloadFillerMaterialRootCommercialDesignationOptions();\n\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(\n PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n removeFillerMaterialRoot() {\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_TESTPIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_DIAMETERS, []);\n this.setModelCollectionValue(\n PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n setFillerMaterialFill(fm) {\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_TESTPIECE, fm);\n this.reloadFillerMaterialFillCommercialDesignationOptions();\n\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelCollectionValue(\n PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n setFillerMaterialCap(fm) {\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_TEST_PIECE, fm);\n this.reloadFillerMaterialCapCommercialDesignationOptions();\n\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelCollectionValue(\n PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n null\n );\n }\n\n @action\n removeFillerMaterialFill() {\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_TESTPIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_DIAMETERS, []);\n this.setModelCollectionValue(\n PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n null\n );\n }\n\n @action\n removeFillerMaterialCap() {\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_TEST_PIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE, null);\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_DIAMETERS, []);\n this.setModelCollectionValue(\n PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n null\n );\n }\n\n @action\n setFillerMaterialRootCommercialDesignationTestPiece(value) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialRoot(fillerMaterial);\n }\n\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE, value);\n this.updateFillerMaterialRootCommercialDesignationApprovalRange(this.model);\n }\n\n @action\n setFillerMaterialRootCommercialDesignationApprovalRange(commercialDesignations) {\n this.setModelCollection(\n PQR.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n commercialDesignations\n );\n }\n\n @action\n setFillerMaterialFillCommercialDesignationTestPiece(value) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialFill(fillerMaterial);\n }\n\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE, value);\n this.updateFillerMaterialFillCommercialDesignationApprovalRange(this.model);\n }\n\n @action\n setFillerMaterialCapCommercialDesignationTestPiece(value) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialCap(fillerMaterial);\n }\n\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE, value);\n this.updateFillerMaterialCapCommercialDesignationApprovalRange(this.model);\n }\n\n @action\n setFillerMaterialFillCommercialDesignationApprovalRange(commercialDesignations) {\n this.setModelCollection(\n PQR.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE,\n commercialDesignations\n );\n }\n\n @action\n setFillerMaterialCapCommercialDesignationApprovalRange(commercialDesignations) {\n this.setModelCollection(\n PQR.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE,\n commercialDesignations\n );\n }\n\n @action\n setElectrodeType(value) {\n this.setModelValue(PQR.ELECTRODE_TYPE, value);\n }\n\n @action\n setNumberOfElectrodes(value) {\n this.setModelValue(PQR.NUMBER_OF_ELECTRODES, value);\n this.validateField(PQR.NUMBER_OF_ELECTRODES);\n }\n\n @action\n setNumberOfElectrodesFill(value) {\n this.setModelValue(PQR.NUMBER_OF_ELECTRODES_FILL, value);\n this.validateField(PQR.NUMBER_OF_ELECTRODES_FILL);\n }\n\n @action\n setNumberOfElectrodesCap(value) {\n this.setModelValue(PQR.NUMBER_OF_ELECTRODES_CAP, value);\n this.validateField(PQR.NUMBER_OF_ELECTRODES_CAP);\n }\n\n @action\n setPulsedWeldingDetails(value) {\n this.setModelValue(PQR.PULSED_WELDING_DETAILS, value);\n }\n\n @action\n setWeaving(value) {\n this.setModelValue(PQR.WEAVING, value);\n }\n\n @action\n setContactTubeDistance(value) {\n this.setModelValue(PQR.CONTACT_TUBE_DISTANCE, value);\n }\n\n @action\n setBackGaugingDetails(value) {\n this.setModelValue(PQR.BACK_GAUGING_DETAILS, value);\n }\n\n @action\n setPreheatTemperatureTestPiece(value) {\n this.setModelValue(PQR.PREHEAT_TEMPERATURE_TESTPIECE, value);\n\n if (this.validateField(PQR.PREHEAT_TEMPERATURE_TESTPIECE)) {\n this.updatePreHeatApprovalRange();\n }\n }\n\n @action\n setInterpassTemperatureTestPiece(value) {\n this.setModelValue(PQR.INTERPASS_TEMPERATURE_TESTPIECE, value);\n\n if (this.validateField(PQR.INTERPASS_TEMPERATURE_TESTPIECE)) {\n this.updateInterpassApprovalRange();\n }\n }\n\n @action\n setPostHeatTemperatureTestPiece(value) {\n this.setModelValue(PQR.POST_HEAT_TEMPERATURE_TESTPIECE, value);\n\n if (this.validateField(PQR.POST_HEAT_TEMPERATURE_TESTPIECE)) {\n this.updatePostHeatApprovalRange(this.model);\n }\n }\n\n @action\n setPostWeldHeatTreatmentTimeTestPiece(value) {\n this.setModelDecimalValue(PQR.POST_WELD_HEAT_TREATMENT_TIME_TESTPIECE, value);\n if (this.validateField(PQR.POST_WELD_HEAT_TREATMENT_TIME_TESTPIECE)) {\n this.updatePostweldHeatTreatmentTimeApprovalRange(this.pqr);\n }\n }\n\n @action\n setPostWeldHeatTreatmentTimeMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM_APPROVAL_RANGE, value);\n this.validateField(PQR.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM_APPROVAL_RANGE);\n }\n\n @action\n setPostWeldHeatTreatmentTimeMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM_APPROVAL_RANGE, value);\n this.validateField(PQR.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM_APPROVAL_RANGE);\n }\n\n @action\n setPostWeldHeatTreatmentTemperatureTestPiece(value) {\n this.setModelValue(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE, value);\n\n if (this.validateField(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE)) {\n this.updatePostWeldHeatTreatmentApprovalRange(this.model);\n }\n }\n\n @action\n setPostWeldHeatTreatmentMethodTestPiece(value) {\n this.setModelValue(PQR.POST_WELD_HEAT_TREATMENT_METHOD_TESTPIECE, value);\n }\n\n @action\n removePostWeldHeatTreatmentMethodTestPiece() {\n this.setModelValue(PQR.POST_WELD_HEAT_TREATMENT_METHOD_TESTPIECE, null);\n }\n\n @action\n setPostWeldHeatTreatmentHeatingRateTestPiece(value) {\n this.setModelDecimalValue(PQR.POST_WELD_HEAT_TREATMENT_HEATING_RATE_TESTPIECE, value);\n this.validateField(PQR.POST_WELD_HEAT_TREATMENT_HEATING_RATE_TESTPIECE);\n }\n\n @action\n setPostWeldHeatTreatmentCoolingRateTestPiece(value) {\n this.setModelDecimalValue(PQR.POST_WELD_HEAT_TREATMENT_COOLING_RATE_TESTPIECE, value);\n this.validateField(PQR.POST_WELD_HEAT_TREATMENT_COOLING_RATE_TESTPIECE);\n }\n\n @action\n setPreheatTemperatureMinimumApprovalRange(value) {\n this.setModelValue(PQR.PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, value);\n this.setModelValue(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, value);\n this.validateField(PQR.PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE);\n }\n\n @action\n setPreheatTemperatureMaximumApprovalRange(value) {\n this.setModelValue(PQR.PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, value);\n this.validateField(PQR.PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE);\n }\n\n @action\n setInterpassTemperatureMinimumApprovalRange(value) {\n this.setModelValue(PQR.INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setInterpassTemperatureMaximumApprovalRange(value) {\n this.setModelValue(PQR.INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setPostHeatTemperatureMinimumApprovalRange(value) {\n this.setModelValue(PQR.POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setPostHeatTemperatureMaximumApprovalRange(value) {\n this.setModelValue(PQR.POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n setPostWeldHeatTreatmentTemperatureMinimumApprovalRange(value) {\n this.setModelValue(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE, value);\n }\n\n @action\n setPostWeldHeatTreatmentTemperatureMaximumApprovalRange(value) {\n this.setModelValue(PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE, value);\n }\n\n @action\n addNewWeldingParameter() {\n let parameters = this.getModelValue(PQR.WELDING_PARAMETERS);\n let max = 0;\n parameters.forEach((p) => {\n if (p.get('orderNum') > max) {\n max = p.get('orderNum');\n }\n });\n\n let newParameter = this.store.createRecord('pqr-welding-parameter');\n set(newParameter, 'pqr', this.model);\n set(newParameter, 'orderNum', max + 1);\n set(newParameter, 'passNumber', max + 1);\n parameters.pushObject(newParameter);\n return newParameter;\n }\n\n @action\n removeWeldingParameter(parameter) {\n let parameters = this.getModelValue(PQR.WELDING_PARAMETERS);\n if (parameters.includes(parameter)) {\n parameters.removeObject(parameter);\n this.updateHeatInputApprovalRange();\n }\n }\n\n @action\n setTensileTestName(value) {\n this.setModelValue(PQR.TENSILE_TEST_NAME, value);\n }\n\n @action\n setTensileTestTemperature(value) {\n this.setModelValue(PQR.TENSILE_TEST_TEMPERATURE, value);\n this.validateField(PQR.TENSILE_TEST_TEMPERATURE);\n }\n\n @action\n addNewTensileLine() {\n let tensileLines = this.getModelValue(PQR.TENSILE_TEST_LINES);\n let max = 0;\n tensileLines.forEach((p) => {\n if (p.get('orderNum') > max) {\n max = p.get('orderNum');\n }\n });\n\n let newLine = this.store.createRecord('tensile-test-line', {\n orderNum: max + 1,\n pqr: this.pqr,\n });\n tensileLines.pushObject(newLine);\n return newLine;\n }\n\n @action\n addNewBendLine() {\n let bendLines = this.getModelValue(PQR.BEND_TEST_LINES);\n let max = 0;\n bendLines.forEach((p) => {\n if (p.get('orderNum') > max) {\n max = p.get('orderNum');\n }\n });\n\n let newLine = this.store.createRecord('bend-test-line', {\n orderNum: max + 1,\n });\n bendLines.pushObject(newLine);\n return newLine;\n }\n\n @action\n removeTensileLine(line) {\n let lines = this.getModelValue(PQR.TENSILE_TEST_LINES);\n if (lines.includes(line)) {\n if (!line.get('isNew')) {\n line\n .destroyRecord()\n .then(() => {\n lines.removeObject(line);\n })\n .catch(() => {\n line.rollbackAttributes();\n this.alertMessage.error(\n this.intl.t('edit-view.actions.generic-delete-error', {\n name: '',\n })\n );\n });\n } else {\n lines.removeObject(line);\n this.store.unloadRecord(line);\n }\n }\n }\n\n @action\n removeBendLine(line) {\n let lines = this.getModelValue(PQR.BEND_TEST_LINES);\n if (lines.includes(line)) {\n if (!line.get('isNew')) {\n line\n .destroyRecord()\n .then(() => {\n lines.removeObject(line);\n })\n .catch(() => {\n line.rollbackAttributes();\n this.alertMessage.error(\n this.intl.t('edit-view.actions.generic-delete-error', {\n name: '',\n })\n );\n });\n } else {\n lines.removeObject(line);\n this.store.unloadRecord(line);\n }\n }\n }\n\n @action\n setBendMandrillDiameter(value) {\n this.setModelValue(PQR.BEND_TEST_MANDRILL_DIAMETER, value);\n this.validateField(PQR.BEND_TEST_MANDRILL_DIAMETER);\n }\n\n @action\n setBendTestReport(value) {\n this.setModelValue(PQR.BEND_TEST_REPORT, value);\n }\n\n @action\n setMacroscopicExaminationTestReport(value) {\n this.setModelValue(PQR.MACROSCOPIC_EXAMINATION_TEST_REPORT, value);\n }\n\n @action\n setMacroscopicExaminationObservations(value) {\n this.setModelValue(PQR.MACROSCOPIC_EXAMINATION_OBSERVATIONS, value);\n }\n\n @action\n setImpactTestReport(value) {\n this.setModelValue(PQR.IMPACT_TEST_REPORT, value);\n this.checkImpactRequirements();\n\n this.updateWeldingThicknesses();\n this.updateBaseMaterial1ThicknessApprovalRange();\n this.updateBaseMaterial2ThicknessApprovalRange();\n }\n\n @action\n setImpactTestRequired(value) {\n this.setModelValue(PQR.IMPACT_TEST_REQUIRED, value);\n\n this.updateImpactTestRequirementsDependencies();\n }\n\n @action\n setImpactTestType(value) {\n this.setModelValue(PQR.IMPACT_TEST_TYPE, value);\n this.checkImpactRequirements();\n }\n\n @action\n setImpactTestDimensions(value) {\n this.setModelValue(PQR.IMPACT_TEST_DIMENSIONS, value);\n this.checkImpactRequirements();\n }\n\n @action\n setImpactTestTemperature(value) {\n this.setModelDecimalValue(PQR.IMPACT_TEST_TEMPERATURE, value);\n this.checkImpactRequirements();\n if (this.validateField(PQR.IMPACT_TEST_TEMPERATURE)) {\n this.updateHeatInputApprovalRange();\n this.updateImpactTestRequirementsDependencies();\n }\n }\n\n @action\n addNewImpactLine() {\n let impactLines = this.getModelValue(PQR.IMPACT_TEST_LINES);\n let max = 0;\n impactLines.forEach((p) => {\n if (p.get('orderNum') > max) {\n max = p.get('orderNum');\n }\n });\n\n let newLine = this.store.createRecord('impact-test-line', {\n pqr: this.model,\n orderNum: max + 1,\n });\n impactLines.pushObject(newLine);\n return newLine;\n }\n\n @action\n removeImpactLine(line) {\n let lines = this.getModelValue(PQR.IMPACT_TEST_LINES);\n if (lines.includes(line)) {\n if (!line.get('isNew')) {\n line\n .destroyRecord()\n .then(() => {\n lines.removeObject(line);\n })\n .catch(() => {\n line.rollbackAttributes();\n this.alertMessage.error(\n this.intl.t('edit-view.actions.generic-delete-error', {\n name: '',\n })\n );\n });\n } else {\n lines.removeObject(line);\n this.store.unloadRecord(line);\n }\n }\n }\n\n @action\n setHardnessTestReport(value) {\n this.setModelValue(PQR.HARDNESS_TEST_REPORT, value);\n this.checkHardnessRequirements();\n }\n\n @action\n setHardnessTestRequired(value) {\n this.setModelValue(PQR.HARDNESS_TEST_REQUIRED, value);\n this.updateHeatInputApprovalRange();\n }\n\n @action\n setHardnessTestType(value) {\n this.setModelValue(PQR.HARDNESS_TEST_TYPE, value);\n this.checkHardnessRequirements();\n }\n\n @action\n addNewHardnessLine() {\n let hardnessLines = this.getModelValue(PQR.HARDNESS_TEST_LINES);\n let max = 0;\n hardnessLines.forEach((p) => {\n if (p.get('orderNum') > max) {\n max = p.get('orderNum');\n }\n });\n\n let newLine = this.store.createRecord('hardness-test-line', {\n pqr: this.model,\n orderNum: max + 1,\n });\n hardnessLines.pushObject(newLine);\n return newLine;\n }\n\n @action\n removeHardnessLine(line) {\n let lines = this.getModelValue(PQR.HARDNESS_TEST_LINES);\n if (lines.includes(line)) {\n if (!line.get('isNew')) {\n line\n .destroyRecord()\n .then(() => {\n lines.removeObject(line);\n })\n .catch(() => {\n line.rollbackAttributes();\n this.alertMessage.error(\n this.intl.t('edit-view.actions.generic-delete-error', {\n name: '',\n })\n );\n });\n } else {\n lines.removeObject(line);\n this.store.unloadRecord(line);\n }\n }\n }\n\n @action\n setGrooveAngleMinimum(value) {\n this.setModelDecimalValue(PQR.GROOVE_ANGLE_MINIMUM, value);\n this.validateField(PQR.GROOVE_ANGLE_MINIMUM);\n }\n\n @action\n setGrooveAngleMaximum(value) {\n this.setModelDecimalValue(PQR.GROOVE_ANGLE_MAXIMUM, value);\n this.validateField(PQR.GROOVE_ANGLE_MAXIMUM);\n }\n\n @action\n setRootFaceMinimum(value) {\n this.setModelDecimalValue(PQR.ROOT_FACE_MINIMUM, value);\n this.validateField(PQR.ROOT_FACE_MINIMUM);\n }\n\n @action\n setRootFaceMaximum(value) {\n this.setModelDecimalValue(PQR.ROOT_FACE_MAXIMUM, value);\n this.validateField(PQR.ROOT_FACE_MAXIMUM);\n }\n\n @action\n setRootGapMinimum(value) {\n this.setModelDecimalValue(PQR.ROOT_GAP_MINIMUM, value);\n this.validateField(PQR.ROOT_GAP_MINIMUM);\n }\n\n @action\n setRootGapMaximum(value) {\n this.setModelDecimalValue(PQR.ROOT_GAP_MAXIMUM, value);\n this.validateField(PQR.ROOT_GAP_MAXIMUM);\n }\n\n @action\n setGrooveDesigns(value) {\n this._setGrooveDesigns(value);\n let { pqr } = this;\n\n if (!isEmpty(value) && !isEmpty(get(value, 'id'))) {\n let options = {};\n let filters = {};\n let weldType = get(this, 'currentWeldType.id');\n if (!isEmpty(weldType)) {\n filters.weldType = weldType;\n }\n let grooveType = get(value, 'grooveType');\n if (!isEmpty(grooveType)) {\n filters.grooveType = grooveType;\n }\n if (get(this, 'pqr.weldingDetailsTestPiece.length') > 0) {\n filters.weldingDetails = get(this, 'pqr.weldingDetailsTestPiece')\n .map((elem) => {\n return get(elem, 'id');\n })\n .join(',');\n }\n if (!isEmpty(get(value, 'jointType'))) {\n filters.jointType = get(value, 'jointType');\n }\n this.data.listAllWeldLayerConfigurations(options, filters).then((items) => {\n if (\n parseInt(get(items, 'length')) === 1 &&\n get(pqr, 'weldLayerConfigurations.length') === 0\n ) {\n this._setWeldLayerConfigurations(get(items, 'firstObject'));\n }\n });\n }\n }\n\n @action\n setWeldLayerConfigurations(value) {\n this._setWeldLayerConfigurations(value);\n let { pqr } = this;\n\n if (!isEmpty(value) && !isEmpty(get(value, 'id'))) {\n let options = {};\n let filters = {};\n let weldType = get(this, 'currentWeldType.id');\n if (!isEmpty(weldType)) {\n filters.weldType = weldType;\n }\n let grooveType = get(value, 'grooveType');\n if (!isEmpty(grooveType)) {\n filters.grooveType = grooveType;\n }\n if (get(this, 'pqr.weldingDetailsTestPiece.length') > 0) {\n filters.weldingDetails = get(this, 'pqr.weldingDetailsTestPiece')\n .map((elem) => get(elem, 'id'))\n .join(',');\n }\n if (!isEmpty(get(value, 'jointType'))) {\n filters.jointType = get(value, 'jointType');\n }\n this.data.listAllGrooveDesigns(options, filters).then((items) => {\n if (parseInt(get(items, 'length')) === 1 && get(pqr, 'grooveDesigns.length') === 0) {\n this._setGrooveDesigns(get(items, 'firstObject'));\n }\n });\n }\n }\n\n @action\n setTorchAngleMinimum(value) {\n this.setModelValue(PQR.TORCH_ANGLE_MINIMUM, value);\n this.validateField(PQR.TORCH_ANGLE_MINIMUM);\n }\n\n @action\n setTorchAngleMaximum(value) {\n this.setModelValue(PQR.TORCH_ANGLE_MAXIMUM, value);\n this.validateField(PQR.TORCH_ANGLE_MAXIMUM);\n }\n\n @action\n setSection(type) {\n set(this, 'section', type);\n if (type === 'consumables') {\n this.fetchFillerMaterialRootCommercialDesignationOptions();\n this.fetchFillerMaterialFillCommercialDesignationOptions();\n this.fetchFillerMaterialCapCommercialDesignationOptions();\n }\n }\n\n @action\n resetFillerMaterialRootCommercialDesignationOptions() {\n this.reloadFillerMaterialRootCommercialDesignationOptions();\n }\n\n @action\n resetFillerMaterialFillCommercialDesignationOptions() {\n this.reloadFillerMaterialFillCommercialDesignationOptions();\n }\n\n @action\n resetFillerMaterialCapCommercialDesignationOptions() {\n this.reloadFillerMaterialCapCommercialDesignationOptions();\n }\n\n @action\n setGasNozzleDiameterRoot(value) {\n this.setModelDecimalValue(PQR.GAS_NOZZLE_DIAMETER_ROOT, value);\n this.validateField(PQR.GAS_NOZZLE_DIAMETER_ROOT);\n }\n\n @action\n setGasNozzleDiameterFill(value) {\n this.setModelDecimalValue(PQR.GAS_NOZZLE_DIAMETER_FILL, value);\n this.validateField(PQR.GAS_NOZZLE_DIAMETER_FILL);\n }\n\n @action\n setGasNozzleDiameterCap(value) {\n this.setModelDecimalValue(PQR.GAS_NOZZLE_DIAMETER_CAP, value);\n this.validateField(PQR.GAS_NOZZLE_DIAMETER_CAP);\n }\n\n @action\n setProcessMecanizationRootTestPiece(value) {\n this.setModelValue(PQR.PROCESS_MECANIZATION_ROOT_TEST_PIECE, value);\n this.updateProcessMecanizationRoot(this.pqr, this.lists.processMecanizations);\n }\n\n @action\n setProcessMecanizationFillTestPiece(value) {\n this.setModelValue(PQR.PROCESS_MECANIZATION_FILL_TEST_PIECE, value);\n this.updateProcessMecanizationFill(this.pqr, this.lists.processMecanizations);\n }\n\n @action\n setProcessMecanizationCapTestPiece(value) {\n this.setModelValue(PQR.PROCESS_MECANIZATION_CAP_TEST_PIECE, value);\n this.updateProcessMecanizationCap(this.pqr, this.lists.processMecanizations);\n }\n\n @action\n setProcessMecanizationRootApprovalRange(processes) {\n this.setModelCollection(PQR.PROCESS_MECANIZATION_ROOT_APPROVAL_RANGE, processes);\n }\n\n @action\n setProcessMecanizationFillApprovalRange(processes) {\n this.setModelCollection(PQR.PROCESS_MECANIZATION_FILL_APPROVAL_RANGE, processes);\n }\n\n @action\n setProcessMecanizationCapApprovalRange(processes) {\n this.setModelCollection(PQR.PROCESS_MECANIZATION_CAP_APPROVAL_RANGE, processes);\n }\n\n @action\n setShieldingRootGasMixture(value) {\n this.setModelValue(PQR.SHIELDING_ROOT_GAS_MIXTURE, value);\n }\n\n @action\n setShieldingFillGasMixture(value) {\n this.setModelValue(PQR.SHIELDING_FILL_GAS_MIXTURE, value);\n }\n\n @action\n setBackingGasMixture(value) {\n this.setModelValue(PQR.BACKING_GAS_MIXTURE, value);\n }\n\n @action\n setBaseMaterial1Thickness(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_THICKNESS, value);\n this.validateField(PQR.BASE_MATERIAL1_THICKNESS);\n\n this.updateBaseMaterial1ThicknessApprovalRange();\n\n this.setModelDecimalValue(PQR.FILLET_WELD_BASE_MATERIAL1_THICKNESS_TESTPIECE, value);\n this.updateBaseMaterial1FilletWeldThicknessApprovalRange();\n this.updatePJPButtWeldBaseMaterial1Thickness();\n this.updateImpactRequirements();\n\n this.updateWeldingThicknesses();\n }\n\n @action\n setBaseMaterial1Diameter(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_DIAMETER, value);\n this.validateField(PQR.BASE_MATERIAL1_DIAMETER);\n\n this.updateDiameterApprovalRange();\n }\n\n @action\n setBaseMaterial2Thickness(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_THICKNESS, value);\n this.validateField(PQR.BASE_MATERIAL2_THICKNESS);\n\n this.updateBaseMaterial2ThicknessApprovalRange();\n\n this.setModelDecimalValue(PQR.FILLET_WELD_BASE_MATERIAL2_THICKNESS_TESTPIECE, value);\n this.updateBaseMaterial2FilletWeldThicknessApprovalRange();\n this.updatePJPButtWeldBaseMaterial2Thickness();\n this.updateImpactRequirements();\n\n this.updateWeldingThicknesses();\n }\n\n @action\n setBaseMaterial2Diameter(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_DIAMETER, value);\n this.validateField(PQR.BASE_MATERIAL2_DIAMETER);\n\n this.updateDiameterApprovalRange();\n }\n\n @action\n setSpecialRequirements(requirements) {\n this.setModelCollection(PQR.SPECIAL_REQUIREMENTS, requirements);\n }\n\n @action\n setOverlayType(value) {\n this.setModelValue(PQR.OVERLAY_TYPE, value);\n if (value === OVERLAY_TYPE_OPTIONS.HARD_FACING) {\n this.updateFillerMaterialCommercialDesignationsOnASME();\n }\n this.updateWeldingDetailsApprovalRange();\n }\n\n @action\n setWeldingPositionRootDirection(value) {\n this.setModelValue(PQR.WELDING_POSITION_ROOT_DIRECTION, value);\n this.updateWeldingPositionsRootApprovalRange();\n }\n\n @action\n setWeldingPositionFillDirection(value) {\n this.setModelValue(PQR.WELDING_POSITION_FILL_DIRECTION, value);\n this.updateWeldingPositionsFillApprovalRange();\n }\n\n @action\n setWeldingPositionCapDirection(value) {\n this.setModelValue(PQR.WELDING_POSITION_CAP_DIRECTION, value);\n this.updateWeldingPositionsCapApprovalRange();\n }\n\n @action\n setPostHeatTimeTestPiece(value) {\n this.setModelDecimalValue(PQR.POST_HEAT_TIME_TEST_PIECE, value);\n this.validateField(PQR.POST_HEAT_TIME_TEST_PIECE);\n }\n\n @action\n setPostHeatTimeMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.POST_HEAT_TIME_MINIMUM_APPROVAL_RANGE, value);\n this.validateField(PQR.POST_HEAT_TIME_MINIMUM_APPROVAL_RANGE);\n }\n\n @action\n setPostHeatTimeMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.POST_HEAT_TIME_MAXIMUM_APPROVAL_RANGE, value);\n this.validateField(PQR.POST_HEAT_TIME_MAXIMUM_APPROVAL_RANGE);\n }\n\n @action\n setJointType(value) {\n this.setModelValue(PQR.JOINT_TYPE, value);\n }\n\n @action\n setBaseMaterialsThickness(value) {\n this.setBaseMaterial1Thickness(value);\n this.setBaseMaterial2Thickness(value);\n }\n\n @action\n setBaseMaterialsDiameter(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_DIAMETER, value);\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_DIAMETER, value);\n this.updateDiameterApprovalRange();\n }\n\n @action\n setBaseMaterial1ThicknessMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setBaseMaterial1ThicknessMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setBaseMaterial2ThicknessMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setBaseMaterial2ThicknessMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setBaseMaterialsThicknessMinimumApprovalRange(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE, value);\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n setBaseMaterialsThicknessMaximumApprovalRange(value) {\n this.setModelDecimalValue(PQR.BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE, value);\n this.setModelDecimalValue(PQR.BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE, value);\n }\n\n @action\n async setFillerMaterialRootDiameter(values) {\n this.setModelValue(PQR.FILLER_MATERIAL_ROOT_DIAMETERS, values);\n this.validateField(PQR.FILLER_MATERIAL_ROOT_DIAMETERS);\n // in AWS we can't update a value in the pass, as such\n // the passes must be kept in sync\n if (this.isAWSD11 && !isEmpty(values)) {\n let parameters = await this.pqr.get(PQR.WELDING_PARAMETERS);\n let [firstDiameter] = values;\n parameters\n .filter((p) => p.layer === WELDING_LAYER_OPTIONS.ROOT)\n .forEach((p) => p.set('fillerMaterialDiameters', [firstDiameter]));\n }\n }\n\n @action\n async setFillerMaterialFillDiameter(values) {\n this.setModelValue(PQR.FILLER_MATERIAL_FILL_DIAMETERS, values);\n this.validateField(PQR.FILLER_MATERIAL_FILL_DIAMETERS);\n // in AWS we can't update a value in the pass, as such\n // the passes must be kept in sync\n if (this.isAWSD11 && !isEmpty(values)) {\n let parameters = await this.pqr.get(PQR.WELDING_PARAMETERS);\n let [firstDiameter] = values;\n parameters\n .filter((p) => p.layer === WELDING_LAYER_OPTIONS.FILL)\n .forEach((p) => p.set('fillerMaterialDiameters', [firstDiameter]));\n }\n }\n\n @action\n async setFillerMaterialCapDiameter(values) {\n this.setModelValue(PQR.FILLER_MATERIAL_CAP_DIAMETERS, values);\n this.validateField(PQR.FILLER_MATERIAL_CAP_DIAMETERS);\n // in AWS we can't update a value in the pass, as such\n // the passes must be kept in sync\n if (this.isAWSD11 && !isEmpty(values)) {\n let parameters = await this.pqr.get(PQR.WELDING_PARAMETERS);\n let [firstDiameter] = values;\n parameters\n .filter((p) => p.layer === WELDING_LAYER_OPTIONS.CAP)\n .forEach((p) => p.set('fillerMaterialDiameters', [firstDiameter]));\n }\n }\n\n @action\n confirmArchivePQR() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n confirmUnarchivePQR() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n cancelUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n deleteModel() {\n let { pqr, loading, alertMessage: alert, intl, ajax } = this;\n\n loading.block();\n ajax\n .put(`/pqrs/${get(pqr, 'id')}/canDelete`)\n .then(() => {\n this.deletePQR();\n set(this, 'pqrDeleteErrors', null);\n })\n .catch(({ payload }) => {\n alert.error(intl.t('components.model-pqr/edit.delete.errors.cannot-delete'));\n set(this, 'pqrDeleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n removePqrTaskFromContext() {\n this.taskMonitor.removeTaskByContext('pqr', this.pqr.id);\n }\n\n @action\n setAdvancedFields(value) {\n set(this, 'showAdvancedFieldsAction', value);\n }\n\n @action\n setSectionScroll(section) {\n set(this, 'section', section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n\n @action\n generateReportAndScroll() {\n this.generateReport.perform();\n this.scroller.scrollVertical('[data-page-head]', {\n duration: 0,\n easing: 'linear',\n });\n }\n\n @action\n generateNewGrooveName(grooveName) {\n return `${grooveName.replace(/[^A-Z0-9]+/gi, '_')}_PQR_${get(this.pqr, 'id')}_${moment().format(\n 'YYYY_MM_DD_HH_mm_SS'\n )}.png`;\n }\n\n @action\n generateNewWeldLayerName(layerName) {\n return `${layerName.replace(/[^A-Z0-9]+/gi, '_')}_PQR_${get(this.pqr, 'id')}_${moment().format(\n 'YYYY_MM_DD_HH_mm_SS'\n )}.png`;\n }\n\n @action\n setOverlayFillerMaterialFormRoot(newValue) {\n if (!isEmpty(newValue)) {\n this.setModelValue('additionalData.overlayFillerMaterialFormRoot', newValue);\n } else {\n this.setModelValue(\n 'additionalData.overlayFillerMaterialFormRoot',\n OVERLAY_FILLER_METAL_FORM.WIRE\n );\n }\n }\n\n @action\n setOverlayFillerMaterialFormFill(newValue) {\n if (!isEmpty(newValue)) {\n this.setModelValue('additionalData.overlayFillerMaterialFormFill', newValue);\n } else {\n this.setModelValue(\n 'additionalData.overlayFillerMaterialFormFill',\n OVERLAY_FILLER_METAL_FORM.WIRE\n );\n }\n }\n\n @action\n setOverlayFillerMaterialFormCap(newValue) {\n if (!isEmpty(newValue)) {\n this.setModelValue('additionalData.overlayFillerMaterialFormCap', newValue);\n } else {\n this.setModelValue(\n 'additionalData.overlayFillerMaterialFormCap',\n OVERLAY_FILLER_METAL_FORM.WIRE\n );\n }\n }\n\n @action\n setDissimilarMaterials(value) {\n this.dissimilarMaterials = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if @options.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if @options.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @options.hasCap}}\\n \\n \\n \\n {{/if}}\\n\", {\"contents\":\"\\n {{#if @options.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if @options.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if @options.hasCap}}\\n \\n \\n \\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/model-pqr/filler-material-tests.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/filler-material-tests.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class FillerMaterialTest extends Component {\n get rootColumnSize() {\n let { options } = this.args;\n let { hasRoot, hasFill, hasCap } = options;\n if (hasRoot && hasFill && hasCap) {\n return '3';\n }\n if (hasRoot && hasFill) {\n return '2';\n }\n return '1';\n }\n\n get fillColumnSize() {\n let { options } = this.args;\n let { hasRoot, hasFill, hasCap } = options;\n if (hasRoot && hasFill && hasCap) {\n return '3';\n }\n if (hasRoot && hasFill) {\n return '2';\n }\n return '1';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n\\n \\n \\n \\n \\n {{#if @isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isRootProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if @hasFill}}\\n {{! Filler Material Root }}\\n \\n {{! Filler Material Fill }}\\n \\n \\n {{#if @isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isFillProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{#if @isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isCapProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n {{material.specification.specification}}\\n -\\n {{material.classification.classification}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{array-join (map (action \\\"formatDiameter\\\") value) separator=\\\" ; \\\"}}\\n \\n \\n \\n {{#if @isRootProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if @hasFill}}\\n {{! Filler Material Fill }}\\n \\n \\n \\n \\n {{material.specification.specification}}\\n -\\n {{material.classification.classification}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{array-join (map (action \\\"formatDiameter\\\") value) separator=\\\" ; \\\"}}\\n \\n \\n \\n {{#if @isFillProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if @hasCap}}\\n {{! Filler Material Cap }}\\n \\n \\n \\n \\n {{material.specification.specification}}\\n -\\n {{material.classification.classification}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{array-join (map (action \\\"formatDiameter\\\") value) separator=\\\" ; \\\"}}\\n \\n \\n \\n {{#if @isCapProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n
\", {\"contents\":\"\\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n\\n \\n \\n \\n \\n {{#if @isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isRootProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if @hasFill}}\\n {{! Filler Material Root }}\\n \\n {{! Filler Material Fill }}\\n \\n \\n {{#if @isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isFillProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if @hasCap}}\\n \\n \\n \\n {{#if @isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isCapProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n {{material.specification.specification}}\\n -\\n {{material.classification.classification}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{array-join (map (action \\\"formatDiameter\\\") value) separator=\\\" ; \\\"}}\\n \\n \\n \\n {{#if @isRootProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if @hasFill}}\\n {{! Filler Material Fill }}\\n \\n \\n \\n \\n {{material.specification.specification}}\\n -\\n {{material.classification.classification}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{array-join (map (action \\\"formatDiameter\\\") value) separator=\\\" ; \\\"}}\\n \\n \\n \\n {{#if @isFillProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if @hasCap}}\\n {{! Filler Material Cap }}\\n \\n \\n \\n \\n {{material.specification.specification}}\\n -\\n {{material.classification.classification}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{array-join (map (action \\\"formatDiameter\\\") value) separator=\\\" ; \\\"}}\\n \\n \\n \\n {{#if @isCapProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n
\",\"moduleName\":\"weldnote/components/model-pqr/filler-materials.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/filler-materials.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { empty, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, action, computed } from '@ember/object';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport Constants from 'weldnote/utils/constants';\n\nconst { OVERLAY_FILLER_MATERIAL_FORM } = Constants;\n\n@classic\nexport default class FillerMaterials extends Component {\n @service\n store;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n media;\n\n @service\n analytics;\n\n // Reference to the PQR\n model = null;\n\n @alias('model')\n pqr;\n\n fillerMaterialRootCommercialDesignationOptions = [];\n\n fillerMaterialFillCommercialDesignationOptions = [];\n\n fillerMaterialCapCommercialDesignationOptions = [];\n\n @empty('model.fillerMaterialRootTestPiece.id')\n fillerMaterialRootCommercialDesignationDisabled;\n\n @empty('model.fillerMaterialFillTestPiece.id')\n fillerMaterialFillCommercialDesignationDisabled;\n\n @empty('model.fillerMaterialCapTestPiece.id')\n fillerMaterialCapCommercialDesignationDisabled;\n\n @computed(\n 'model.{fillerMaterialRootTestPiece,fillerMaterialFillTestPiece,fillerMaterialCapTestPiece}'\n )\n get fillerMaterialSuggestions() {\n let root = get(this, 'model.fillerMaterialRootTestPiece.id');\n let fill = get(this, 'model.fillerMaterialFillTestPiece.id');\n let cap = get(this, 'model.fillerMaterialCapTestPiece.id');\n let { store } = this;\n let results = [];\n let ids = [];\n if (!isEmpty(root)) {\n ids.pushObject(root);\n results.pushObject(store.peekRecord('filler-material', root));\n }\n if (!isEmpty(fill)) {\n if (!ids.includes(fill)) {\n ids.pushObject(fill);\n results.pushObject(store.peekRecord('filler-material', fill));\n }\n }\n if (!isEmpty(cap)) {\n if (!ids.includes(cap)) {\n ids.pushObject(cap);\n results.pushObject(store.peekRecord('filler-material', cap));\n }\n }\n return results;\n }\n\n @computed('model.additionalData.overlayFillerMaterialFormRoot')\n get fillerMaterialRootDiametersLabel() {\n let { model, intl, units } = this;\n let overlayFillerMaterialFormRoot = get(model, 'additionalData.overlayFillerMaterialFormRoot');\n if (overlayFillerMaterialFormRoot === OVERLAY_FILLER_MATERIAL_FORM.WIRE) {\n return intl\n .t('model.pqr.fillerMaterialRootDiameters.label', { unit: units.distance })\n .toString();\n } else if (overlayFillerMaterialFormRoot === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n return intl.t('components.model-pqr/filler-materials.labels.strip-width', {\n unit: units.distance,\n });\n } else {\n return intl\n .t('model.pqr.fillerMaterialRootDiameters.label', { unit: units.distance })\n .toString();\n }\n }\n\n @computed('model.additionalData.overlayFillerMaterialFormFill')\n get fillerMaterialFillDiametersLabel() {\n let { model, intl, units } = this;\n let overlayFillerMaterialFormFill = get(model, 'additionalData.overlayFillerMaterialFormFill');\n if (overlayFillerMaterialFormFill === OVERLAY_FILLER_MATERIAL_FORM.WIRE) {\n return intl\n .t('model.pqr.fillerMaterialFillDiameters.label', { unit: units.distance })\n .toString();\n } else if (overlayFillerMaterialFormFill === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n return intl.t('components.model-pqr/filler-materials.labels.strip-width', {\n unit: units.distance,\n });\n } else {\n return intl\n .t('model.pqr.fillerMaterialFillDiameters.label', { unit: units.distance })\n .toString();\n }\n }\n\n @computed('model.additionalData.overlayFillerMaterialFormCap')\n get fillerMaterialCapDiametersLabel() {\n let { model, intl, units } = this;\n let overlayFillerMaterialFormCap = get(model, 'additionalData.overlayFillerMaterialFormCap');\n if (overlayFillerMaterialFormCap === OVERLAY_FILLER_MATERIAL_FORM.WIRE) {\n return intl\n .t('model.pqr.fillerMaterialCapDiameters.label', { unit: units.distance })\n .toString();\n } else if (overlayFillerMaterialFormCap === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n return intl.t('components.model-pqr/filler-materials.labels.strip-width', {\n unit: units.distance,\n });\n } else {\n return intl\n .t('model.pqr.fillerMaterialCapDiameters.label', { unit: units.distance })\n .toString();\n }\n }\n\n createFillerMaterialCommercialDesignation(designationName, fillerMaterial, actionName) {\n let designation = this.store.createRecord('filler-material-commercial-designation');\n designation.set('fillerMaterial', fillerMaterial);\n designation.set('commercialDesignation', designationName);\n this.loading.block();\n designation\n .save()\n .then((designationSaved) => {\n this.get(actionName)(designationSaved);\n this.resetFillerMaterialRootCommercialDesignationOptions();\n this.resetFillerMaterialFillCommercialDesignationOptions();\n this.resetFillerMaterialCapCommercialDesignationOptions();\n let name = this.intl\n .t('model.filler-material-commercial-designation.model-name')\n .toString();\n let successMessage = this.intl.t('edit-view.actions.saved', { name });\n this.alertMessage.success(successMessage);\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n let name = this.intl\n .t('model.filler-material-commercial-designation.model-name')\n .toString();\n let errorMessage = this.intl.t('edit-view.actions.error', { name });\n this.alertMessage.error(errorMessage);\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createFillerMaterialRootCommercialDesignation(designationName, fillerMaterial) {\n this.createFillerMaterialCommercialDesignation(\n designationName,\n fillerMaterial,\n 'updateFillerMaterialRootCommercialDesignationTestPiece'\n );\n }\n\n @action\n createFillerMaterialFillCommercialDesignation(designationName, fillerMaterial) {\n this.createFillerMaterialCommercialDesignation(\n designationName,\n fillerMaterial,\n 'updateFillerMaterialFillCommercialDesignationTestPiece'\n );\n }\n\n @action\n createFillerMaterialCapCommercialDesignation(designationName, fillerMaterial) {\n this.createFillerMaterialCommercialDesignation(\n designationName,\n fillerMaterial,\n 'updateFillerMaterialCapCommercialDesignationTestPiece'\n );\n }\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n

\\n {{#if this.hasValue}}\\n {{#if this.hasOnlyOneValue}}\\n {{this.onlyValue}}\\n {{else}}\\n {{#if this.sameValues}}\\n {{@min}}\\n {{else}}\\n {{@min}}\\n -\\n {{@max}}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n

\\n
\", {\"contents\":\"
\\n \\n

\\n {{#if this.hasValue}}\\n {{#if this.hasOnlyOneValue}}\\n {{this.onlyValue}}\\n {{else}}\\n {{#if this.sameValues}}\\n {{@min}}\\n {{else}}\\n {{@min}}\\n -\\n {{@max}}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n

\\n
\",\"moduleName\":\"weldnote/components/model-pqr/flow-rate-display.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/flow-rate-display.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\ninterface ModelPqrFlowRateDisplayArgs {\n min?: Number,\n max?: Number,\n unit: String,\n}\n\nexport default class ModelPqrFlowRateDisplay extends Component {\n\n get hasValue() {\n return !isEmpty(this.args.min) || !isEmpty(this.args.max);\n }\n\n get hasOnlyOneValue() {\n return isEmpty(this.args.min) || isEmpty(this.args.max);\n }\n\n get onlyValue() {\n if (!isEmpty(this.args.min)) {\n return this.args.min;\n } else if (!isEmpty(this.args.max)) {\n return this.args.max;\n }\n return '';\n }\n\n get sameValues() {\n if (!isEmpty(this.args.min) && !isEmpty(this.args.max)) {\n return this.args.min == this.args.max;\n }\n return true;\n }\n\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n {{/if}}\\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n \\n {{/if}}\\n \\n \\n \\n {{#each @model.hardnessTestLines as |hardness|}}\\n \\n {{#if (eq hardness.orderNum this.currentLine.orderNum)}}\\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{#if (eq hardness.orderNum this.currentLine.orderNum)}}\\n \\n \\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.model-pqr/hardness-test.table-column-base-metal\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-deposited-metal\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-base-metal2\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone2\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-edit\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-remove\\\"}}
\\n \\n {{hardness.baseMetalHardnessNumber}}{{hardness.baseMetalHardnessValue1}}{{hardness.baseMetalHardnessValue2}}{{hardness.baseMetalHardnessValue3}}{{hardness.heatAffectedHardnessNumber}}{{hardness.heatAffectedHardnessValue1}}{{hardness.heatAffectedHardnessValue2}}{{hardness.heatAffectedHardnessValue3}}{{hardness.depositedMetalHardnessNumber}}{{hardness.depositedMetalHardnessValue1}}{{hardness.depositedMetalHardnessValue2}}{{hardness.depositedMetalHardnessValue3}}{{hardness.baseMetal2HardnessNumber}}{{hardness.baseMetal2HardnessValue1}}{{hardness.baseMetal2HardnessValue2}}{{hardness.baseMetal2HardnessValue3}}{{hardness.heatAffectedZone2HardnessNumber}}{{hardness.heatAffectedZone2HardnessValue1}}{{hardness.heatAffectedZone2HardnessValue2}}{{hardness.heatAffectedZone2HardnessValue3}}\\n \\n \\n {{#if (eq hardness.orderNum this.lineToDelete.orderNum)}}\\n \\n \\n {{t \\\"components.model-pqr/hardness-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/hardness-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/hardness-test.actions.discard\\\"}}\\n
\\n {{t \\\"components.model-pqr/hardness-test.empty-line-list\\\"}}\\n
\\n {{#if this.hasErrors}}\\n \\n \\n
{{this.errors}}
\\n
\\n
\\n {{/if}}\\n {{#if this.hasMessages}}\\n \\n \\n
\\n ×\\n {{this.messages}}\\n
\\n
\\n
\\n {{/if}}\\n {{#if @isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/hardness-test.actions.add-new-line\\\"}}\\n \\n
\\n {{/if}}\\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n {{/if}}\\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n \\n {{/if}}\\n \\n \\n \\n {{#each @model.hardnessTestLines as |hardness|}}\\n \\n {{#if (eq hardness.orderNum this.currentLine.orderNum)}}\\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{#if (eq hardness.orderNum this.currentLine.orderNum)}}\\n \\n \\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.model-pqr/hardness-test.table-column-base-metal\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-deposited-metal\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-base-metal2\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone2\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t\\n \\\"components.model-pqr/hardness-test.table-column-values\\\"\\n }}{{t \\\"components.model-pqr/hardness-test.table-column-edit\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-remove\\\"}}
\\n \\n {{hardness.baseMetalHardnessNumber}}{{hardness.baseMetalHardnessValue1}}{{hardness.baseMetalHardnessValue2}}{{hardness.baseMetalHardnessValue3}}{{hardness.heatAffectedHardnessNumber}}{{hardness.heatAffectedHardnessValue1}}{{hardness.heatAffectedHardnessValue2}}{{hardness.heatAffectedHardnessValue3}}{{hardness.depositedMetalHardnessNumber}}{{hardness.depositedMetalHardnessValue1}}{{hardness.depositedMetalHardnessValue2}}{{hardness.depositedMetalHardnessValue3}}{{hardness.baseMetal2HardnessNumber}}{{hardness.baseMetal2HardnessValue1}}{{hardness.baseMetal2HardnessValue2}}{{hardness.baseMetal2HardnessValue3}}{{hardness.heatAffectedZone2HardnessNumber}}{{hardness.heatAffectedZone2HardnessValue1}}{{hardness.heatAffectedZone2HardnessValue2}}{{hardness.heatAffectedZone2HardnessValue3}}\\n \\n \\n {{#if (eq hardness.orderNum this.lineToDelete.orderNum)}}\\n \\n \\n {{t \\\"components.model-pqr/hardness-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/hardness-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/hardness-test.actions.discard\\\"}}\\n
\\n {{t \\\"components.model-pqr/hardness-test.empty-line-list\\\"}}\\n
\\n {{#if this.hasErrors}}\\n \\n \\n
{{this.errors}}
\\n
\\n
\\n {{/if}}\\n {{#if this.hasMessages}}\\n \\n \\n
\\n ×\\n {{this.messages}}\\n
\\n
\\n
\\n {{/if}}\\n {{#if @isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/hardness-test.actions.add-new-line\\\"}}\\n \\n
\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/hardness-test.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/hardness-test.hbs\"}});\nimport Component from '@glimmer/component';\nimport { set, action, get } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\nexport default class HardnessNottest extends Component {\n @service\n store;\n\n @tracked\n currentLine = null;\n\n @tracked\n isEditingLine = null;\n\n @tracked\n lineToDelete = null;\n\n @tracked\n errors = null;\n\n get hasErrors() {\n return !isEmpty(this.errors);\n }\n\n @tracked\n messages = '';\n\n get hasMessages() {\n return !isEmpty(this.messages);\n }\n\n get isSaved() {\n return !this.args.model.isNew;\n }\n\n get isActionUnderWay() {\n let result = !(\n isEmpty(get(this, 'lineToDelete.orderNum')) && isEmpty(get(this, 'currentLine.orderNum'))\n );\n return result;\n }\n\n clearErrors() {\n this.errors = null;\n }\n\n setError(error) {\n this.errors = error;\n }\n\n clearMessages() {\n this.messages = null;\n }\n\n setMessage(message) {\n this.messages = message;\n }\n\n validateField(hardness, field) {\n return hardness.validate({ only: [field] });\n }\n\n @action\n setBaseMetalHardnessNumber(hardness, value) {\n set(hardness, 'baseMetalHardnessNumber', value);\n this.validateField(hardness, 'baseMetalHardnessNumber');\n }\n\n @action\n setBaseMetalHardnessValue1(hardness, value) {\n set(hardness, 'baseMetalHardnessValue1', value);\n this.validateField(hardness, 'baseMetalHardnessValue1');\n }\n\n @action\n setBaseMetalHardnessValue2(hardness, value) {\n set(hardness, 'baseMetalHardnessValue2', value);\n this.validateField(hardness, 'baseMetalHardnessValue2');\n }\n\n @action\n setBaseMetalHardnessValue3(hardness, value) {\n set(hardness, 'baseMetalHardnessValue3', value);\n this.validateField(hardness, 'baseMetalHardnessValue3');\n }\n\n @action\n setHeatAffectedHardnessNumber(hardness, value) {\n set(hardness, 'heatAffectedHardnessNumber', value);\n this.validateField(hardness, 'heatAffectedHardnessNumber');\n }\n\n @action\n setHeatAffectedHardnessValue1(hardness, value) {\n set(hardness, 'heatAffectedHardnessValue1', value);\n this.validateField(hardness, 'heatAffectedHardnessValue1');\n }\n\n @action\n setHeatAffectedHardnessValue2(hardness, value) {\n set(hardness, 'heatAffectedHardnessValue2', value);\n this.validateField(hardness, 'heatAffectedHardnessValue2');\n }\n\n @action\n setHeatAffectedHardnessValue3(hardness, value) {\n set(hardness, 'heatAffectedHardnessValue3', value);\n this.validateField(hardness, 'heatAffectedHardnessValue3');\n }\n\n @action\n setDepositedMetalHardnessNumber(hardness, value) {\n set(hardness, 'depositedMetalHardnessNumber', value);\n this.validateField(hardness, 'depositedMetalHardnessNumber');\n }\n\n @action\n setDepositedMetalHardnessValue1(hardness, value) {\n set(hardness, 'depositedMetalHardnessValue1', value);\n this.validateField(hardness, 'depositedMetalHardnessValue1');\n }\n\n @action\n setDepositedMetalHardnessValue2(hardness, value) {\n set(hardness, 'depositedMetalHardnessValue2', value);\n this.validateField(hardness, 'depositedMetalHardnessValue2');\n }\n\n @action\n setDepositedMetalHardnessValue3(hardness, value) {\n set(hardness, 'depositedMetalHardnessValue3', value);\n this.validateField(hardness, 'depositedMetalHardnessValue3');\n }\n\n @action\n setHeatAffectedZone2HardnessNumber(hardness, value) {\n set(hardness, 'heatAffectedZone2HardnessNumber', value);\n this.validateField(hardness, 'heatAffectedZone2HardnessNumber');\n }\n\n @action\n setHeatAffectedZone2HardnessValue1(hardness, value) {\n set(hardness, 'heatAffectedZone2HardnessValue1', value);\n this.validateField(hardness, 'heatAffectedZone2HardnessValue1');\n }\n\n @action\n setHeatAffectedZone2HardnessValue2(hardness, value) {\n set(hardness, 'heatAffectedZone2HardnessValue2', value);\n this.validateField(hardness, 'heatAffectedZone2HardnessValue2');\n }\n\n @action\n setHeatAffectedZone2HardnessValue3(hardness, value) {\n set(hardness, 'heatAffectedZone2HardnessValue3', value);\n this.validateField(hardness, 'heatAffectedZone2HardnessValue3');\n }\n\n @action\n setBaseMetal2HardnessNumber(hardness, value) {\n set(hardness, 'baseMetal2HardnessNumber', value);\n this.validateField(hardness, 'baseMetal2HardnessNumber');\n }\n\n @action\n setBaseMetal2HardnessValue1(hardness, value) {\n set(hardness, 'baseMetal2HardnessValue1', value);\n this.validateField(hardness, 'baseMetal2HardnessValue1');\n }\n\n @action\n setBaseMetal2HardnessValue2(hardness, value) {\n set(hardness, 'baseMetal2HardnessValue2', value);\n this.validateField(hardness, 'baseMetal2HardnessValue2');\n }\n\n @action\n setBaseMetal2HardnessValue3(hardness, value) {\n set(hardness, 'baseMetal2HardnessValue3', value);\n this.validateField(hardness, 'baseMetal2HardnessValue3');\n }\n\n @action\n addNewLine() {\n let line = this.args.addNewLine();\n this.currentLine = line;\n this.isEditingLine = !this.isEditingLine;\n }\n\n @action\n editLine(line) {\n this.isEditingLine = !this.isEditingLine;\n this.currentLine = line;\n }\n\n @action\n cancelRemove() {\n this.lineToDelete = null;\n }\n\n @action\n removeMessages() {\n this.clearMessages();\n }\n\n @action\n confirmRemove() {\n let line = this.lineToDelete;\n this.lineToDelete = null;\n this.clearErrors();\n this.args.removeLine(line);\n }\n\n @action\n discardChanges() {\n let line = this.currentLine;\n line.rollbackAttributes();\n if (line.isNew) {\n this.args.removeLine(line);\n this.store.unloadRecord(line);\n }\n this.currentLine = null;\n this.isEditingLine = !this.isEditingLine;\n this.clearErrors();\n }\n\n @action\n removeLine(line) {\n this.lineToDelete = line;\n this.clearErrors();\n }\n\n @action\n saveLine() {\n let line = this.currentLine;\n if (line.validate()) {\n line\n .save()\n .then(() => {\n this.isEditingLine = !this.isEditingLine;\n this.currentLine = null;\n this.clearErrors();\n this.setMessage('Saved sucessfully');\n })\n .catch((reason) => {\n this.setError(`Error while saving line ${reason}`);\n });\n } else {\n this.setError('Line is not valid, check fields marked in red');\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t \\\"components.model-pqr/hardness-test.table-column-base-metal\\\"}}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t \\\"components.model-pqr/hardness-test.table-column-base-metal2\\\"}}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone2\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/hardness-test.table-column-deposited-metal\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n \\n
\", {\"contents\":\"\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t \\\"components.model-pqr/hardness-test.table-column-base-metal\\\"}}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t \\\"components.model-pqr/hardness-test.table-column-base-metal2\\\"}}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/hardness-test.table-column-heat-affected-zone2\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/hardness-test.table-column-deposited-metal\\\"\\n }}
{{t \\\"components.model-pqr/hardness-test.table-column-number\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value1\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value2\\\"}}{{t \\\"components.model-pqr/hardness-test.table-column-value3\\\"}}
\\n
\\n \\n
\",\"moduleName\":\"weldnote/components/model-pqr/hardness-test/edit-line.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/hardness-test/edit-line.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n{{/if}}\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each this.model.impactTestLines as |impact|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-pqr/impact-test.table-column-location\\\"\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-shear-percentage\\\"\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-lateral-expansion\\\"\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-requirements\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-value1\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-value2\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-value3\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-average\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-remove\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq impact.orderNum this.lineToDelete.orderNum)}}\\n \\n \\n {{t \\\"components.model-pqr/impact-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/impact-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n {{t \\\"components.model-pqr/impact-test.empty-line-list\\\"}}\\n
\\n {{#if @isEditing}}\\n
\\n \\n {{t \\\"components.model-pqr/impact-test.actions.add-new-line\\\"}}\\n
\\n {{/if}}\\n
\\n
\\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n{{/if}}\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each this.model.impactTestLines as |impact|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-pqr/impact-test.table-column-location\\\"\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-shear-percentage\\\"\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-lateral-expansion\\\"\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-requirements\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-value1\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-value2\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-value3\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-average\\\"\\n unit=this.units.energy\\n }}{{t\\n \\\"components.model-pqr/impact-test.table-column-remove\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq impact.orderNum this.lineToDelete.orderNum)}}\\n \\n \\n {{t \\\"components.model-pqr/impact-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/impact-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n {{t \\\"components.model-pqr/impact-test.empty-line-list\\\"}}\\n
\\n {{#if @isEditing}}\\n
\\n \\n {{t \\\"components.model-pqr/impact-test.actions.add-new-line\\\"}}\\n
\\n {{/if}}\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/impact-test.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/impact-test.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action } from '@ember/object';\n\n@classic\nexport default class ImpactNottest extends Component {\n calculateAverage(line) {\n let totalValues = 0;\n let sum = 0;\n if (!isEmpty(get(line, 'value1Energy'))) {\n totalValues += 1;\n sum += parseInt(get(line, 'value1Energy'));\n }\n if (!isEmpty(get(line, 'value2Energy'))) {\n totalValues += 1;\n sum += parseInt(get(line, 'value2Energy'));\n }\n if (!isEmpty(get(line, 'value3Energy'))) {\n totalValues += 1;\n sum += parseInt(get(line, 'value3Energy'));\n }\n if (totalValues > 0) {\n let average = (sum / totalValues).toFixed(1);\n set(line, 'averageEnergy', average);\n }\n }\n\n @action\n setTestPieceLocation(line, value) {\n set(line, 'testPieceLocation', value);\n }\n\n @action\n setRequirements(line, value) {\n set(line, 'requirements', value);\n }\n\n @action\n setValue1Energy(line, value) {\n set(line, 'value1Energy', value);\n if (line.validate()) {\n this.calculateAverage(line);\n }\n }\n\n @action\n setValue2Energy(line, value) {\n set(line, 'value2Energy', value);\n if (line.validate()) {\n this.calculateAverage(line);\n }\n }\n\n @action\n setValue3Energy(line, value) {\n set(line, 'value3Energy', value);\n if (line.validate()) {\n this.calculateAverage(line);\n }\n }\n\n @action\n setAverageEnergy(line, value) {\n set(line, 'averageEnergy', value);\n }\n\n @action\n removeImpactLine(line) {\n set(this, 'lineToDelete', line);\n }\n\n @action\n confirmRemove() {\n get(this, 'removeLine')(get(this, 'lineToDelete'));\n set(this, 'lineToDelete', null);\n }\n\n @action\n cancelRemove() {\n set(this, 'lineToDelete', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n \\n {{#if (has-value this.pqr.certificateNumber)}}\\n {{this.pqr.certificateNumber}}\\n {{else}}\\n {{#if this.showPlaceholder}}\\n {{t \\\"components.model-pqr/lookup.messages.placeholder\\\"}}\\n {{/if}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n \\n \\n \\n {{standard.standard}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"pqr-list.buttons.search\\\"}}\\n \\n {{t \\\"pqr-list.buttons.clear\\\"}} \\n {{t \\\"components.model-pqr/lookup.cancel-button\\\"}}\\n \\n \\n \\n \\n \\n
\\n \\n
\\n {{t \\\"components.model-pqr/lookup.cancel-button\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"
\\n \\n
\\n \\n {{#if (has-value this.pqr.certificateNumber)}}\\n {{this.pqr.certificateNumber}}\\n {{else}}\\n {{#if this.showPlaceholder}}\\n {{t \\\"components.model-pqr/lookup.messages.placeholder\\\"}}\\n {{/if}}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\\n\\n{{#if this.isShowingSearch}}\\n \\n \\n \\n \\n \\n {{standard.standard}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"pqr-list.buttons.search\\\"}}\\n \\n {{t \\\"pqr-list.buttons.clear\\\"}} \\n {{t \\\"components.model-pqr/lookup.cancel-button\\\"}}\\n \\n \\n \\n \\n \\n
\\n \\n
\\n {{t \\\"components.model-pqr/lookup.cancel-button\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/lookup.hbs\"}});\nimport Component from '@ember/component';\nimport { action, computed, get, set } from '@ember/object';\nimport { alias, empty, notEmpty } from '@ember/object/computed';\nimport { tracked } from '@glimmer/tracking';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport classic from 'ember-classic-decorator';\nimport { task, timeout } from 'ember-concurrency';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport Constants from 'weldnote/utils/constants';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport { isFraction, toNumber } from 'weldnote/utils/unit-system/units';\n\nconst { PQR } = PQRRules;\n\nconst {\n HTTP: { DEBOUNCE },\n WELD_TYPES,\n UNIT_SYSTEM,\n} = Constants;\n\n@classic\nexport default class Lookup extends Component {\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n @service\n scroller;\n\n @service\n intl;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @empty('selectedStandard')\n fieldsDisabled;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionsAll;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('selectedStandard.code')\n industryCode;\n\n @alias('data.examiningBodyOptions')\n examiningBodyOptions;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('selectedStandard.code')\n currentIndustryCode;\n\n @alias('userSession.temperatureUnit')\n temperatureUnit;\n\n @alias('userSession.distanceUnit')\n distanceUnit;\n\n @alias('userSession.flowUnit')\n flowUnit;\n\n @alias('userSession.heatDistanceUnit')\n heatDistanceUnit;\n\n @alias('userSession.decimalSeparator')\n decimalSeparator;\n\n @notEmpty('helpText')\n hasHelp;\n\n isShowingSearch = false;\n\n @alias('selected')\n pqr;\n\n baseMaterial1 = null;\n\n baseMaterial2 = null;\n\n searchByBaseMaterial1Group = true;\n\n searchByBaseMaterial2Group = true;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n @filterFromCollectionByKey('weldingPositionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingPositionOptions;\n\n selectedStandard = null;\n\n @tracked selectedUnitSystem = null;\n\n get isThicknessSearchDisabled() {\n return isEmpty(this.selectedUnitSystem);\n }\n\n get disabledThicknessSearchTooltipText() {\n if (this.isThicknessSearchDisabled) {\n return this.intl.t('generic.unit-system.search-without-system').toString();\n }\n return '';\n }\n\n totalCount = 0;\n\n currenPage = 1;\n\n pageSize = 10;\n\n showPlaceholder = true;\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`pqr-list.grid-columns.${label}`, options);\n }\n\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n if (!isEmpty(get(this, 'searchOptions'))) {\n set(this, 'selectedStandard', get(this, 'searchOptions.standard'));\n set(this, 'selectedWeldType', get(this, 'searchOptions.weldType'));\n }\n }\n\n @computed\n get gridColumns() {\n let certificateNumberLabel = this.getGridColumnLabel('certificate-number');\n let weldTypeLabel = this.getGridColumnLabel('weld-type');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let totalThicknessLabel = this.getGridColumnLabel('thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n let heatInputLabel = this.getGridColumnLabel('heat-input');\n let postWeldHeatTreamentLabel = this.getGridColumnLabel('post-weld-heat-treatment');\n let preHeatLabel = this.getGridColumnLabel('pre-heat');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n cellComponent: 'model-pqr/lookup/select-pqr-link',\n width: '180px',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/weld-type',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/welding-processes',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/base-material-for-list',\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'totalThickness',\n label: totalThicknessLabel,\n sortable: false,\n align: 'right',\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n label: heatInputLabel,\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n label: preHeatLabel,\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreament',\n label: postWeldHeatTreamentLabel,\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n label: 'Actions',\n width: '100px',\n sortable: false,\n cellComponent: 'model-pqr/lookup/select-pqr',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n let { dir = 'asc', sort } = this;\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n }\n\n options.page = this.currentPage;\n options.pageSize = this.pageSize;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllPQR(options, this.buildFilters());\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildDecimalFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n let decimalValue = get(this, controllerProperty);\n decimalValue = convertDecimals(decimalValue, get(this, 'userSession.decimalSeparator'));\n filters[apiProperty] = decimalValue;\n }\n }\n\n buildPWHTFilter(filters) {\n let pwhtPresence = get(this, 'selectedPostWeldHeatTreamentPresence');\n if (!isEmpty(pwhtPresence)) {\n filters.pwhtPresence = pwhtPresence;\n } else {\n let pwhtTemp = get(this, 'selectedPostWeldHeatTreament');\n if (!isNaN(parseFloat(pwhtTemp))) {\n filters.postWeldHeatTreatmentTemperatureTestPiece = pwhtTemp;\n }\n }\n }\n\n buildFilters() {\n let filters = {};\n\n this.buildSingleFilter('selectedStandard.id', PQR.STANDARD, filters);\n this.buildSingleFilter('selectedExaminingBody.id', PQR.EXAMINING_BODY, filters);\n this.buildSingleFilter('selectedWeldType.id', PQR.WELDTYPE_TESTPIECE, filters);\n this.buildSingleFilter('selectedProcessRoot.id', PQR.WELDING_PROCESS_ROOT_TESTPIECE, filters);\n this.buildSingleFilter('selectedProcessFill.id', PQR.WELDING_PROCESS_FILL_TESTPIECE, filters);\n this.buildSingleFilter('selectedProcessCap.id', PQR.WELDING_PROCESS_CAP_TEST_PIECE, filters);\n this.buildSingleFilter('selectedUnitSystem.key', PQR.UNIT_SYSTEM, filters);\n if (!isEmpty(this.selectedUnitSystem)) {\n this.buildDecimalFilter('diameter', PQR.DIAMETER_TESTPIECE, filters);\n this.buildDecimalFilter('thickness', PQR.THICKNESS_TOTAL_TESTPIECE, filters);\n this.buildDecimalFilter('thicknessFill', PQR.THICKNESS_FILL_TESTPIECE, filters);\n this.buildDecimalFilter('thicknessRoot', PQR.THICKNESS_ROOT_TESTPIECE, filters);\n this.buildDecimalFilter('thicknessCap', PQR.THICKNESS_CAP_TEST_PIECE, filters);\n this.buildDecimalFilter('throatThickness', PQR.THROAT_THICKNESS_TESTPIECE, filters);\n }\n this.buildSingleFilter('branchAngle', PQR.BRANCH_ANGLE_TESTPIECE, filters);\n this.buildDecimalFilter('heatInput', 'heatInputTestPiece', filters);\n this.buildSingleFilter('preHeat', PQR.PREHEAT_TEMPERATURE_TESTPIECE, filters);\n this.buildSingleFilter(\n 'postWeldHeatTreament',\n PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE,\n filters\n );\n this.buildSingleFilter('impactTemperature', PQR.IMPACT_TEST_TEMPERATURE, filters);\n this.buildSingleFilter('hardnessRequirements', PQR.HARDNESS_TEST_REQUIRED, filters);\n this.buildSingleFilter(\n 'selectedWeldingPositionRoot.id',\n PQR.WELDING_POSITION_ROOT_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionFill.id',\n PQR.WELDING_POSITION_FILL_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionCap.id',\n PQR.WELDING_POSITION_CAP_TEST_PIECE,\n filters\n );\n this.buildSingleFilter('selectedProductType.key', PQR.PRODUCT_TYPE_TESTPIECE, filters);\n if (this.searchByBaseMaterial1Group) {\n this.buildSingleFilter('baseMaterial1.materialGroup.id', 'baseMaterial1Group', filters);\n } else {\n this.buildSingleFilter('baseMaterial1.id', PQR.BASE_MATERIAL1_TESTPIECE, filters);\n }\n if (this.searchByBaseMaterial2Group) {\n this.buildSingleFilter('baseMaterial2.materialGroup.id', 'baseMaterial2Group', filters);\n } else {\n this.buildSingleFilter('baseMaterial2.id', PQR.BASE_MATERIAL2_TESTPIECE, filters);\n }\n this.buildSingleFilter(\n 'selectedFillerMaterialRoot.id',\n PQR.FILLER_MATERIAL_ROOT_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedFillerMaterialFill.id',\n PQR.FILLER_MATERIAL_FILL_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedFillerMaterialCap.id',\n PQR.FILLER_MATERIAL_CAP_TEST_PIECE,\n filters\n );\n this.buildSingleFilter('selectedOverlayType.key', PQR.OVERLAY_TYPE, filters);\n this.buildSingleFilter('certificateNumber', PQR.CERTIFICATE_NUMBER, filters);\n this.buildSingleFilter('fillerMaterialGroupRootSearch', 'fillerMaterialRootGroup', filters);\n this.buildSingleFilter('fillerMaterialGroupFillSearch', 'fillerMaterialFillGroup', filters);\n this.buildSingleFilter('fillerMaterialGroupCapSearch', 'fillerMaterialCapGroup', filters);\n this.buildPWHTFilter(filters);\n filters.exportType = 'pqr';\n\n if (!isEmpty(this.selectedDetails)) {\n let detailsSerialized = this.selectedDetails\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[PQR.WELDING_DETAILS_TESTPIECE] = detailsSerialized;\n }\n\n if (!isEmpty(get(this, 'selectedSpecialRequirements'))) {\n let specialRequirementOptionsSerialized = get(this, 'selectedSpecialRequirements')\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[PQR.SPECIAL_REQUIREMENTS] = specialRequirementOptionsSerialized;\n }\n\n return filters;\n }\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedUnitSystem: null,\n selectedDetails: [],\n selectedExaminingBody: null,\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedWeldingPositionRoot: null,\n selectedWeldingPositionFill: null,\n selectedWeldingPositionCap: null,\n branchAngle: null,\n preHeat: null,\n heatInput: null,\n postWeldHeatTreament: null,\n thicknessRoot: null,\n thicknessRootDisplay: null,\n thicknessFill: null,\n thicknessFillDisplay: null,\n thicknessCap: null,\n thicknessCapDisplay: null,\n impactTemperature: null,\n hardnessRequirements: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n throatThickness: null,\n throatThicknessDisplay: null,\n selectedSpecialRequirements: [],\n selectedOverlayType: null,\n certificateNumber: null,\n selectedPostWeldHeatTreament: null,\n selectedPostWeldHeatTreamentPresence: null,\n fillerMaterialGroupRootSearch: null,\n fillerMaterialGroupFillSearch: null,\n fillerMaterialGroupCapSearch: null,\n baseMaterial1: null,\n baseMaterial2: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n scrollToSearchResults() {\n this.scroller.scrollVertical('#pqr-search-grid');\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchPQR(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n closeModal() {\n set(this, 'isShowingSearch', false);\n }\n\n openModal() {\n set(this, 'isShowingSearch', true);\n }\n\n @action\n openSearch() {\n this.openModal();\n this.searchPQR(1);\n }\n\n @action\n closeSearch() {\n this.closeModal();\n }\n\n @action\n updateStandard(selectedStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n if (isEmpty(get(this, 'weldTypeOptionsAll'))) {\n this.data.getWeldTypes().then((types) => {\n set(this, 'weldTypeOptionsAll', types);\n });\n }\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.searchPQR(pageNumber);\n this.scrollToSearchResults();\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialRoot', fillerMaterial);\n }\n\n @action\n fillerMaterialRootRemoved() {\n set(this, 'selectedFillerMaterialRoot', null);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialFill', fillerMaterial);\n }\n\n @action\n fillerMaterialFillRemoved() {\n set(this, 'selectedFillerMaterialFill', null);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialCap', fillerMaterial);\n }\n\n @action\n fillerMaterialCapRemoved() {\n set(this, 'selectedFillerMaterialCap', null);\n }\n\n @action\n setSelectedWeldType(type) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (type.get('weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n @action\n onColumnClick(column) {\n if (column.sorted) {\n this.setProperties({\n dir: column.ascending ? 'asc' : 'desc',\n sort: column.get('valuePath'),\n });\n this.loadData.perform();\n }\n }\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n }\n\n @action\n setThickness(value) {\n set(this, 'thicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thickness', value);\n }\n } else {\n set(this, 'thickness', value);\n }\n }\n\n @action\n setThicknessRoot(value) {\n set(this, 'thicknessRootDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessRoot', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessRoot', value);\n }\n } else {\n set(this, 'thicknessRoot', value);\n }\n }\n\n @action\n setThicknessFill(value) {\n set(this, 'thicknessFillDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessFill', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessFill', value);\n }\n } else {\n set(this, 'thicknessFill', value);\n }\n }\n\n @action\n setThicknessCap(value) {\n set(this, 'thicknessCapDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessCap', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessCap', value);\n }\n } else {\n set(this, 'thicknessCap', value);\n }\n }\n\n @action\n setThroatThickness(value) {\n set(this, 'throatThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'throatThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'throatThickness', value);\n }\n } else {\n set(this, 'throatThickness', value);\n }\n }\n\n @action\n setDiameter(value) {\n set(this, 'diameterDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'diameter', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'diameter', value);\n }\n } else {\n set(this, 'diameter', value);\n }\n }\n\n @action\n choosePQR(row) {\n this.onSelect(get(row, 'id'));\n this.closeModal();\n }\n\n @action\n setBaseMaterial1(material) {\n set(this, 'baseMaterial1', material);\n if (isEmpty(this.baseMaterial2)) {\n set(this, 'baseMaterial2', material);\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial2Group', false);\n }\n }\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial1Group', false);\n }\n }\n\n @action\n setBaseMaterial2(material) {\n set(this, 'baseMaterial2', material);\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial2Group', false);\n }\n }\n\n @action\n setSearchByMaterial1Group(value) {\n set(this, 'searchByBaseMaterial1Group', value);\n }\n\n @action\n setSearchByMaterial2Group(value) {\n set(this, 'searchByBaseMaterial2Group', value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\", {\"contents\":\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/model-pqr/lookup/select-pqr-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/lookup/select-pqr-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/model-pqr/lookup/select-pqr.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/lookup/select-pqr.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.pqr.impactTestRequired}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n \\n
\\n\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.pqr.impactTestRequired}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n \\n
\\n\\n\",\"moduleName\":\"weldnote/components/model-pqr/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/new.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, set, action } from '@ember/object';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\n\n@classic\nexport default class New extends Component {\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n @service\n alertMessage;\n\n @alias('model')\n pqr;\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n @action\n createPQR() {\n let { loading, intl, alertMessage, data } = this;\n\n let { pqr } = this;\n if (!pqr.validate()) {\n alertMessage.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n if (data.hasOnly1Company) {\n pqr.set('company', data.firstCompany);\n }\n\n loading.block();\n pqr\n .save()\n .then((pqr) => {\n this.instanceCreated(pqr);\n alertMessage.success(\n intl.t('edit-view.actions.saved', { name: get(pqr, 'certificateNumber') })\n );\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alertMessage.error(\n intl\n .t('edit-view.actions.unique-violation-fields', {\n fields: intl.t('model.pqr.certificateNumber.label'),\n })\n .toString()\n );\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.error', { name: get(pqr, 'certificateNumber') })\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n cancel() {\n history.back();\n }\n\n @action\n setImpactTest(impactTest) {\n let { pqr, intl } = this;\n set(pqr, 'impactTestRequired', impactTest);\n if (impactTest) {\n set(pqr, 'impactTestReport', intl.t('components.model-pqr/new.impact-report-value'));\n } else {\n set(pqr, 'impactTestReport', null);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/non-destructive-testing-table.test\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.results\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report\\\"\\n }}
{{t \\\"model.pqr.nonDestructiveVisualTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructivePenetrantTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveMagneticTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveUltrasonicTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
\\n{{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not (is-empty-attribute @pqr.nonDestructiveVisualTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructivePenetrantTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructiveMagneticTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructiveUltrasonicTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructiveRadiographicTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t \\\"components.model-pqr/non-destructive-testing-table.test\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.results\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report\\\"}}
{{t \\\"model.pqr.nonDestructiveVisualTesting.label\\\"}}\\n {{@pqr.nonDestructiveVisualTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.visualTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructivePenetrantTesting.label\\\"}}\\n {{@pqr.nonDestructivePenetrantTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.penetrantTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveMagneticTesting.label\\\"}}\\n {{@pqr.nonDestructiveMagneticTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.magneticTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveUltrasonicTesting.label\\\"}}\\n {{@pqr.nonDestructiveUltrasonicTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.ultrasonicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n {{@pqr.nonDestructiveRadiographicTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.radiographicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/non-destructive-testing-table.test\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.results\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report\\\"\\n }}
{{t \\\"model.pqr.nonDestructiveVisualTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructivePenetrantTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveMagneticTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveUltrasonicTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
\\n{{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not (is-empty-attribute @pqr.nonDestructiveVisualTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructivePenetrantTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructiveMagneticTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructiveUltrasonicTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute @pqr.nonDestructiveRadiographicTesting))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t \\\"components.model-pqr/non-destructive-testing-table.test\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.results\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report\\\"}}
{{t \\\"model.pqr.nonDestructiveVisualTesting.label\\\"}}\\n {{@pqr.nonDestructiveVisualTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.visualTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructivePenetrantTesting.label\\\"}}\\n {{@pqr.nonDestructivePenetrantTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.penetrantTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveMagneticTesting.label\\\"}}\\n {{@pqr.nonDestructiveMagneticTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.magneticTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveUltrasonicTesting.label\\\"}}\\n {{@pqr.nonDestructiveUltrasonicTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.ultrasonicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n {{@pqr.nonDestructiveRadiographicTesting}}\\n \\n \\n \\n {{#if (has-value @pqr.radiographicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/non-destructive-testing-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/non-destructive-testing-table.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class NonDestructiveTestingTable extends Component {\n @service('weldnoteData')\n data;\n\n @alias('data.testResultOptions')\n testResultOptions;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.renderLabel}}\\n
\\n \\n

\\n {{#if (and this.isButtWeld this.isISO this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-butt-weld-iso\\\"}}\\n {{else if (and this.isISO this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-iso\\\"}}\\n {{else if (and this.isASME this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-asme\\\"}}\\n {{else if (and this.isASME this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-asme\\\"}}\\n {{else if (and this.isAWS this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-aws\\\"}}\\n {{else if (and this.isAWS this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-aws\\\"}}\\n {{else if this.isPipe}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe\\\"}}\\n {{else if this.isPlate}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate\\\"}}\\n {{/if}}\\n

\\n
\\n{{else}}\\n {{#if (and this.isButtWeld this.isISO this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-butt-weld-iso\\\"}}\\n {{else if (and this.isISO this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-iso\\\"}}\\n {{else if (and this.isASME this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-asme\\\"}}\\n {{else if (and this.isASME this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-asme\\\"}}\\n {{else if (and this.isAWS this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-aws\\\"}}\\n {{else if (and this.isAWS this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-aws\\\"}}\\n {{else if this.isPipe}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe\\\"}}\\n {{else if this.isPlate}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate\\\"}}\\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if this.renderLabel}}\\n
\\n \\n

\\n {{#if (and this.isButtWeld this.isISO this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-butt-weld-iso\\\"}}\\n {{else if (and this.isISO this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-iso\\\"}}\\n {{else if (and this.isASME this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-asme\\\"}}\\n {{else if (and this.isASME this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-asme\\\"}}\\n {{else if (and this.isAWS this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-aws\\\"}}\\n {{else if (and this.isAWS this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-aws\\\"}}\\n {{else if this.isPipe}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe\\\"}}\\n {{else if this.isPlate}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate\\\"}}\\n {{/if}}\\n

\\n
\\n{{else}}\\n {{#if (and this.isButtWeld this.isISO this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-butt-weld-iso\\\"}}\\n {{else if (and this.isISO this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-iso\\\"}}\\n {{else if (and this.isASME this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-asme\\\"}}\\n {{else if (and this.isASME this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-asme\\\"}}\\n {{else if (and this.isAWS this.isPipe)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe-aws\\\"}}\\n {{else if (and this.isAWS this.isPlate)}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate-aws\\\"}}\\n {{else if this.isPipe}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.pipe\\\"}}\\n {{else if this.isPlate}}\\n {{t \\\"components.model-pqr/product-type-approval-range-help.plate\\\"}}\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/product-type-approval-range-help.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/product-type-approval-range-help.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport { equal } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport { isStandardISO, isStandardASME, isStandardAWS } from 'weldnote/utils/standards';\nimport { isButtWeld } from 'weldnote/utils/rules/weld-type';\n\nconst { PRODUCT_TYPE } = Constants;\n\n@classic\n@tagName('')\nexport default class ProductTypeApprovalRangeHelp extends Component {\n productType = null;\n\n standard = null;\n\n renderLabel = true;\n\n @equal('productType', PRODUCT_TYPE.PIPE)\n isPipe;\n\n @equal('productType', PRODUCT_TYPE.PLATE)\n isPlate;\n\n @computed('weldType')\n get isButtWeld() {\n return isButtWeld(this.weldType);\n }\n\n @computed('standard.code')\n get isISO() {\n return isStandardISO(this.standard);\n }\n\n @computed('standard.code')\n get isASME() {\n return isStandardASME(this.standard);\n }\n\n @computed('standard.code')\n get isAWS() {\n return isStandardAWS(this.standard);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.allValues}}\\n {{#if this.allEqual}}\\n {{@root}}\\n ({{this.labelRoot}},\\n {{this.labelFill}},\\n {{this.labelCap}})\\n {{else}}\\n {{#if this.rootFillEqual}}\\n {{@root}}\\n ({{this.labelRoot}},\\n {{this.labelFill}}) -\\n {{@cap}}\\n ({{this.labelCap}})\\n {{else}}\\n {{#if this.fillCapEqual}}\\n {{@root}}\\n ({{this.labelRoot}}) -\\n {{@fill}}\\n ({{this.labelFill}},\\n {{this.labelCap}})\\n {{else}}\\n {{@root}}\\n ({{this.labelRoot}}) -\\n {{@fill}}\\n ({{this.labelFill}}) -\\n {{@cap}}\\n ({{this.labelCap}})\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n{{else}}\\n {{#if this.hasRoot}}{{@root}} ({{this.labelRoot}}){{/if}}{{#if this.hasFill}}{{#if this.hasRoot}}\\n -\\n {{/if}}{{@fill}}\\n ({{this.labelFill}}){{/if}}{{#if this.hasCap}}{{#if (or this.hasRoot this.hasFill)}}\\n -\\n {{/if}}{{@cap}}\\n ({{this.labelCap}}){{/if}}\\n{{/if}}\", {\"contents\":\"{{#if this.allValues}}\\n {{#if this.allEqual}}\\n {{@root}}\\n ({{this.labelRoot}},\\n {{this.labelFill}},\\n {{this.labelCap}})\\n {{else}}\\n {{#if this.rootFillEqual}}\\n {{@root}}\\n ({{this.labelRoot}},\\n {{this.labelFill}}) -\\n {{@cap}}\\n ({{this.labelCap}})\\n {{else}}\\n {{#if this.fillCapEqual}}\\n {{@root}}\\n ({{this.labelRoot}}) -\\n {{@fill}}\\n ({{this.labelFill}},\\n {{this.labelCap}})\\n {{else}}\\n {{@root}}\\n ({{this.labelRoot}}) -\\n {{@fill}}\\n ({{this.labelFill}}) -\\n {{@cap}}\\n ({{this.labelCap}})\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n{{else}}\\n {{#if this.hasRoot}}{{@root}} ({{this.labelRoot}}){{/if}}{{#if this.hasFill}}{{#if this.hasRoot}}\\n -\\n {{/if}}{{@fill}}\\n ({{this.labelFill}}){{/if}}{{#if this.hasCap}}{{#if (or this.hasRoot this.hasFill)}}\\n -\\n {{/if}}{{@cap}}\\n ({{this.labelCap}}){{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/root-fill-cap-display.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/root-fill-cap-display.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { isBothSides } from 'weldnote/utils/rules/welding-detail';\n\n@classic\n@classNames('display-inline')\nexport default class RootFillCapDisplay extends Component {\n @service\n intl;\n\n @service\n userSession;\n\n @notEmpty('root')\n hasRoot;\n\n @notEmpty('fill')\n hasFill;\n\n @notEmpty('cap')\n hasCap;\n\n // Wether it should show the Seq1/Seq2/Seq3 Labels\n showSequence = false;\n\n @computed('root', 'fill', 'cap')\n get allValues() {\n let { root, fill, cap } = this;\n return !isEmpty(root) && !isEmpty(fill) && !isEmpty(cap);\n }\n\n @computed('root', 'fill', 'cap')\n get allEqual() {\n let { root, fill, cap } = this;\n if (root === fill && fill === cap) {\n return true;\n }\n return false;\n }\n\n @computed('rootFillEqual', 'fill')\n get rootFillEqual() {\n let { root, fill } = this;\n return root === fill;\n }\n\n @computed('fill', 'cap')\n get fillCapEqual() {\n let { cap, fill } = this;\n return cap === fill;\n }\n\n @computed('sides.[]')\n get isPqrBothSides() {\n return isBothSides(this.sides);\n }\n\n @computed('isPqrBothSides', 'showSequence')\n get labelRoot() {\n if (this.isPqrBothSides || this.showSequence) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq1');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.root');\n }\n }\n\n @computed('isPqrBothSides', 'showSequence')\n get labelFill() {\n if (this.isPqrBothSides || this.showSequence) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq2');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.fill');\n }\n }\n\n @computed('isPqrBothSides', 'showSequence')\n get labelCap() {\n if (this.isPqrBothSides || this.showSequence) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq3');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.cap');\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n\\n \\n {{!-- {{#i-panel title=(t 'components.model-pqr/shielding-backing-details.title-test-piece')}} --}}\\n \\n {{! Shielding Root }}\\n \\n \\n \\n \\n \\n {{#if this.isGasRootTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isFluxRootTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{! Shielding Fill }}\\n {{#if @hasFill}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasFillTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isFluxFillTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n {{! Shielding Cap }}\\n {{#if @hasCap}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasCapTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isFluxCapTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n {{! Backing }}\\n \\n \\n \\n \\n \\n \\n {{#if this.isBackingGasVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if this.isBackingFluxVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n {{! ************** }}\\n {{! Approval Range }}\\n {{! ************** }}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isGasRootTestPieceVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.isFluxRootTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{! Fill Approval Range }}\\n {{#if @hasFill}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasFillTestPieceVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.isFluxFillTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n\\n {{! Shielding Cap Approval Range }}\\n {{#if @hasCap}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasCapTestPieceVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.isFluxCapTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n {{#if this.isBackingGasVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if this.hasFill}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if this.isBackingFluxVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{! Backing Approval Range }}\\n \\n\", {\"contents\":\"\\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n\\n \\n {{!-- {{#i-panel title=(t 'components.model-pqr/shielding-backing-details.title-test-piece')}} --}}\\n \\n {{! Shielding Root }}\\n \\n \\n \\n \\n \\n {{#if this.isGasRootTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isFluxRootTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{! Shielding Fill }}\\n {{#if @hasFill}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasFillTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isFluxFillTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n {{! Shielding Cap }}\\n {{#if @hasCap}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasCapTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isFluxCapTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n {{! Backing }}\\n \\n \\n \\n \\n \\n \\n {{#if this.isBackingGasVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if this.isBackingFluxVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n {{! ************** }}\\n {{! Approval Range }}\\n {{! ************** }}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isGasRootTestPieceVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.isFluxRootTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{! Fill Approval Range }}\\n {{#if @hasFill}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasFillTestPieceVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.isFluxFillTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n\\n {{! Shielding Cap Approval Range }}\\n {{#if @hasCap}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isGasCapTestPieceVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.isFluxCapTestPieceVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n {{#if this.isBackingGasVisible}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if this.hasFill}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n {{#if this.isAwsD11}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if this.isBackingFluxVisible}}\\n \\n \\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n \\n {{! Backing Approval Range }}\\n \\n\",\"moduleName\":\"weldnote/components/model-pqr/shielding-backing-details.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/shielding-backing-details.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { equal, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport { A } from '@ember/array';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport Constants from 'weldnote/utils/constants';\nimport { task } from 'ember-concurrency';\nimport { isStandardAWSD11 } from 'weldnote/utils/standards';\n\nconst { PQR } = PQRRules;\n\nconst { SHIELDING_OPTIONS } = Constants;\n\n@classic\nexport default class ShieldingBackingDetails extends Component.extend(ModelSetter) {\n @service\n weldnoteData;\n\n @service\n loading;\n\n @service\n store;\n\n @service\n intl;\n\n @service\n alertMessage;\n\n @service\n media;\n\n @service\n analytics;\n\n // Array with objects representing the options\n shieldingOptions = null;\n\n @alias('weldnoteData')\n data;\n\n @alias('model')\n pqr;\n\n @equal('pqr.shieldingRoot', SHIELDING_OPTIONS.GAS)\n isGasRootTestPieceVisible;\n\n @equal('pqr.shieldingRoot', SHIELDING_OPTIONS.FLUX)\n isFluxRootTestPieceVisible;\n\n @equal('pqr.shieldingFill', SHIELDING_OPTIONS.GAS)\n isGasFillTestPieceVisible;\n\n @equal('pqr.shieldingFill', SHIELDING_OPTIONS.FLUX)\n isFluxFillTestPieceVisible;\n\n @equal('pqr.shieldingCap', SHIELDING_OPTIONS.GAS)\n isGasCapTestPieceVisible;\n\n @equal('pqr.shieldingCap', SHIELDING_OPTIONS.FLUX)\n isFluxCapTestPieceVisible;\n\n @equal('pqr.backingTestPiece', SHIELDING_OPTIONS.GAS)\n isBackingGasVisible;\n\n @equal('pqr.backingTestPiece', SHIELDING_OPTIONS.FLUX)\n isBackingFluxVisible;\n\n gasRootCommercialDesignationTestPieceOptions = [];\n\n gasFillCommercialDesignationTestPieceOptions = [];\n\n gasCapCommercialDesignationTestPieceOptions = [];\n\n fetchGasCommercialDesignationOptions = task(async (property, target) => {\n let gasTestPiece = this.getModelValue(property);\n if (!isEmpty(gasTestPiece) && !isEmpty(get(gasTestPiece, 'id'))) {\n let designations = await this.data.searchGasCommercialDesignationsByGases([gasTestPiece]);\n set(this, target, designations);\n }\n });\n\n fetchGasRootCommercialDesignations() {\n get(this, 'fetchGasCommercialDesignationOptions').perform(\n PQR.SHIELDING_ROOT_GAS_TESTPIECE,\n 'gasRootCommercialDesignationTestPieceOptions'\n );\n }\n\n fetchGasFillCommercialDesignations() {\n get(this, 'fetchGasCommercialDesignationOptions').perform(\n PQR.SHIELDING_FILL_GAS_TESTPIECE,\n 'gasFillCommercialDesignationTestPieceOptions'\n );\n }\n\n fetchGasCapCommercialDesignations() {\n get(this, 'fetchGasCommercialDesignationOptions').perform(\n PQR.SHIELDING_CAP_GAS_TEST_PIECE,\n 'gasCapCommercialDesignationTestPieceOptions'\n );\n }\n\n fluxRootCommercialDesignationTestPieceOptions = [];\n\n fluxFillCommercialDesignationTestPieceOptions = [];\n\n fluxCapCommercialDesignationTestPieceOptions = [];\n\n fetchFluxCommercialDesignationOptions = task(async (property, target) => {\n let fluxTextPiece = this.getModelValue(property);\n if (!isEmpty(fluxTextPiece) && !isEmpty(get(fluxTextPiece, 'id'))) {\n let designations = await this.data.searchFluxCommercialDesignationsByFluxes([fluxTextPiece]);\n set(this, target, designations);\n }\n });\n\n fetchFluxRootCommercialDesignations() {\n this.fetchFluxCommercialDesignationOptions.perform(\n PQR.SHIELDING_ROOT_FLUX_TESTPIECE,\n 'fluxRootCommercialDesignationTestPieceOptions'\n );\n }\n\n fetchFluxFillCommercialDesignations() {\n this.fetchFluxCommercialDesignationOptions.perform(\n PQR.SHIELDING_FILL_FLUX_TESTPIECE,\n 'fluxFillCommercialDesignationTestPieceOptions'\n );\n }\n\n fetchFluxCapCommercialDesignations() {\n this.fetchFluxCommercialDesignationOptions.perform(\n PQR.SHIELDING_CAP_FLUX_TEST_PIECE,\n 'fluxCapCommercialDesignationTestPieceOptions'\n );\n }\n\n gasRootCommercialDesignationApprovalRangeOptions = [];\n\n gasFillCommercialDesignationApprovalRangeOptions = [];\n\n gasCapCommercialDesignationApprovalRangeOptions = [];\n\n fetchGasApprovalRangeCommercialDesignationOptions = task(async (property, target) => {\n let approvalRange = this.getModelValue(property);\n if (!isEmpty(approvalRange)) {\n if (approvalRange.get('length') > 0) {\n let designations = await this.data.searchGasCommercialDesignationsByGases(approvalRange);\n set(this, target, designations);\n }\n }\n });\n\n fetchGasRootCommercialDesignationApprovalRangeOptions() {\n get(this, 'fetchGasApprovalRangeCommercialDesignationOptions').perform(\n PQR.SHIELDING_ROOT_GAS_APPROVALRANGE,\n 'gasRootCommercialDesignationApprovalRangeOptions'\n );\n }\n\n fetchGasFillCommercialDesignationApprovalRangeOptions() {\n get(this, 'fetchGasApprovalRangeCommercialDesignationOptions').perform(\n PQR.SHIELDING_FILL_GAS_APPROVALRANGE,\n 'gasFillCommercialDesignationApprovalRangeOptions'\n );\n }\n\n fetchGasCapCommercialDesignationApprovalRangeOptions() {\n get(this, 'fetchGasApprovalRangeCommercialDesignationOptions').perform(\n PQR.SHIELDING_CAP_GAS_APPROVAL_RANGE,\n 'gasCapCommercialDesignationApprovalRangeOptions'\n );\n }\n\n fluxRootCommercialDesignationApprovalRangeOptions = [];\n\n fluxFillCommercialDesignationApprovalRangeOptions = [];\n\n fluxCapCommercialDesignationApprovalRangeOptions = [];\n\n fetchFluxApprovalRangeCommercialDesignationOptions = task(async (property, target) => {\n let approvalRange = this.getModelValue(property);\n if (!isEmpty(approvalRange)) {\n if (approvalRange.get('length') > 0) {\n let designations = await this.data.searchFluxCommercialDesignationsByFluxes(approvalRange);\n set(this, target, designations);\n }\n }\n });\n\n fetchFluxRootCommercialDesignationApprovalRangeOptions() {\n this.fetchFluxApprovalRangeCommercialDesignationOptions.perform(\n PQR.SHIELDING_ROOT_FLUX_APPROVALRANGE,\n 'fluxRootCommercialDesignationApprovalRangeOptions'\n );\n }\n\n fetchFluxFillCommercialDesignationApprovalRangeOptions() {\n this.fetchFluxApprovalRangeCommercialDesignationOptions.perform(\n PQR.SHIELDING_FILL_FLUX_APPROVALRANGE,\n 'fluxFillCommercialDesignationApprovalRangeOptions'\n );\n }\n\n fetchFluxCapCommercialDesignationApprovalRangeOptions() {\n this.fetchFluxApprovalRangeCommercialDesignationOptions.perform(\n PQR.SHIELDING_CAP_FLUX_APPROVAL_RANGE,\n 'fluxCapCommercialDesignationApprovalRangeOptions'\n );\n }\n\n // Backing Properties\n gasBackingCommercialDesignationTestPieceOptions = [];\n\n fluxBackingCommercialDesignationTestPieceOptions = [];\n\n gasBackingCommercialDesignationApprovalRangeOptions = [];\n\n fluxBackingCommercialDesignationApprovalRangeOptions = [];\n\n fetchBackingGasCommercialDesignations() {\n this.fetchGasCommercialDesignationOptions.perform(\n PQR.BACKING_GAS_TESTPIECE,\n 'gasBackingCommercialDesignationTestPieceOptions'\n );\n }\n\n fetchBackingFluxCommercialDesignations() {\n this.fetchFluxCommercialDesignationOptions.perform(\n PQR.BACKING_FLUX_TESTPIECE,\n 'fluxBackingCommercialDesignationTestPieceOptions'\n );\n }\n\n fetchBackingGasCommercialDesignationApprovalRangeOptions() {\n this.fetchGasApprovalRangeCommercialDesignationOptions.perform(\n PQR.BACKING_GAS_APPROVALRANGE,\n 'gasBackingCommercialDesignationApprovalRangeOptions'\n );\n }\n\n fetchBackingFluxCommercialDesignationApprovalRangeOptions() {\n this.fetchFluxApprovalRangeCommercialDesignationOptions.perform(\n PQR.BACKING_FLUX_APPROVALRANGE,\n 'fluxBackingCommercialDesignationApprovalRangeOptions'\n );\n }\n\n @computed('disabled', 'pqr.shieldingRootGasTestPiece')\n get isGasRootCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.SHIELDING_ROOT_GAS_TESTPIECE}.id`));\n }\n\n @computed('disabled', 'pqr.shieldingRootFluxTestPiece')\n get isFluxRootCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.SHIELDING_ROOT_FLUX_TESTPIECE}.id`));\n }\n\n @computed('disabled', 'pqr.shieldingFillGasTestPiece')\n get isGasFillCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.SHIELDING_FILL_GAS_TESTPIECE}.id`));\n }\n\n @computed('disabled', 'pqr.shieldingFillFluxTestPiece')\n get isFluxFillCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.SHIELDING_FILL_FLUX_TESTPIECE}.id`));\n }\n\n @computed('disabled', 'pqr.shieldingCapGasTestPiece')\n get isGasCapCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.SHIELDING_CAP_GAS_TEST_PIECE}.id`));\n }\n\n @computed('disabled', 'pqr.shieldingCapFluxTestPiece')\n get isFluxCapCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.SHIELDING_CAP_FLUX_TEST_PIECE}.id`));\n }\n\n @computed('disabled', 'pqr.backingGasTestPiece')\n get isGasBackingCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.BACKING_GAS_TESTPIECE}.id`));\n }\n\n @computed('disabled', 'pqr.backingFluxTestPiece')\n get isFluxBackingCommercialDesignationTestPieceDisabled() {\n return this.disabled || isEmpty(this.get(`pqr.${PQR.BACKING_FLUX_TESTPIECE}.id`));\n }\n\n @computed('pqr.standard')\n get isAwsD11() {\n return isStandardAWSD11(get(this, 'pqr.standard'));\n }\n\n _buildSuggestions(rootProperty, fillProperty, capProperty, type) {\n let root = get(this, rootProperty);\n let fill = get(this, fillProperty);\n let cap = get(this, capProperty);\n let store = get(this, 'store');\n let results = A();\n let ids = A();\n if (!isEmpty(root)) {\n ids.pushObject(root);\n results.pushObject(store.peekRecord(type, root));\n }\n if (!isEmpty(fill)) {\n if (!ids.includes(fill)) {\n ids.pushObject(fill);\n results.pushObject(store.peekRecord(type, fill));\n }\n }\n if (!isEmpty(cap)) {\n if (!ids.includes(cap)) {\n ids.pushObject(cap);\n results.pushObject(store.peekRecord(type, cap));\n }\n }\n return results;\n }\n\n @computed('pqr.{shieldingRootGasTestPiece,shieldingFillGasTestPiece,shieldingCapGasTestPiece}')\n get gasSuggestions() {\n return this._buildSuggestions(\n 'pqr.shieldingRootGasTestPiece.id',\n 'pqr.shieldingFillGasTestPiece.id',\n 'pqr.shieldingCapGasTestPiece.id',\n 'gas'\n );\n }\n\n @computed('pqr.{shieldingRootFluxTestPiece,shieldingFillFluxTestPiece,shieldingCapFluxTestPiece}')\n get fluxSuggestions() {\n return this._buildSuggestions(\n 'pqr.shieldingRootFluxTestPiece.id',\n 'pqr.shieldingFillFluxTestPiece.id',\n 'pqr.shieldingCapFluxTestPiece.id',\n 'flux'\n );\n }\n\n gasOptions = [];\n\n fluxOptions = [];\n\n createGasCommercialDesignation(designation, gas, mixture) {\n let commercialDesignation = this.store.createRecord('gas-commercial-designation');\n commercialDesignation.set('commercialDesignation', designation);\n commercialDesignation.set('gas', gas);\n if (!isEmpty(mixture)) {\n commercialDesignation.set('gasMixture', mixture);\n }\n return commercialDesignation;\n }\n\n createFluxCommercialDesignation(designation, flux) {\n let commercialDesignation = this.store.createRecord('flux-commercial-designation');\n commercialDesignation.set('commercialDesignation', designation);\n commercialDesignation.set('flux', flux);\n return commercialDesignation;\n }\n\n resetGasRootCommercialDesignations() {\n this.fetchGasRootCommercialDesignations();\n this.fetchGasRootCommercialDesignationApprovalRangeOptions();\n }\n\n resetGasFillCommercialDesignations() {\n this.fetchGasFillCommercialDesignations();\n this.fetchGasFillCommercialDesignationApprovalRangeOptions();\n }\n\n resetGasCapCommercialDesignations() {\n this.fetchGasCapCommercialDesignations();\n this.fetchGasCapCommercialDesignationApprovalRangeOptions();\n }\n\n resetGasBackingCommercialDesignations() {\n this.fetchBackingGasCommercialDesignations();\n this.fetchBackingGasCommercialDesignationApprovalRangeOptions();\n }\n\n resetFluxRootCommercialDesignations() {\n this.fetchFluxRootCommercialDesignations();\n this.fetchFluxRootCommercialDesignationApprovalRangeOptions();\n }\n\n resetFluxFillCommercialDesignations() {\n this.fetchFluxFillCommercialDesignations();\n this.fetchFluxFillCommercialDesignationApprovalRangeOptions();\n }\n\n resetFluxCapCommercialDesignations() {\n this.fetchFluxCapCommercialDesignations();\n this.fetchFluxCapCommercialDesignationApprovalRangeOptions();\n }\n\n resetFluxBackingCommercialDesignations() {\n this.fetchBackingFluxCommercialDesignations();\n this.fetchBackingFluxCommercialDesignationApprovalRangeOptions();\n }\n\n resetGasCommercialDesignations() {\n this.resetGasRootCommercialDesignations();\n this.resetGasFillCommercialDesignations();\n this.resetGasCapCommercialDesignations();\n this.resetGasBackingCommercialDesignations();\n }\n\n resetFluxCommercialDesignations() {\n this.resetFluxRootCommercialDesignations();\n this.resetFluxFillCommercialDesignations();\n this.resetFluxCapCommercialDesignations();\n this.resetFluxBackingCommercialDesignations();\n }\n\n showCommercialDesignationSuccess(model) {\n let name = this.intl.t(`model.${model}.model-name`);\n let successMessage = this.intl.t('edit-view.actions.saved', { name });\n this.alertMessage.success(successMessage);\n }\n\n showCommercialDesignationError(model) {\n let name = this.intl.t(`model.${model}.model-name`);\n let errorMessage = this.intl.t('edit-view.actions.error', { name });\n this.alertMessage.error(errorMessage);\n }\n\n init() {\n super.init(...arguments);\n this.fetchGasRootCommercialDesignations();\n this.fetchGasFillCommercialDesignations();\n this.fetchGasCapCommercialDesignations();\n this.fetchFluxRootCommercialDesignations();\n this.fetchFluxFillCommercialDesignations();\n this.fetchFluxCapCommercialDesignations();\n this.fetchGasRootCommercialDesignationApprovalRangeOptions();\n this.fetchGasFillCommercialDesignationApprovalRangeOptions();\n this.fetchGasCapCommercialDesignationApprovalRangeOptions();\n this.fetchFluxRootCommercialDesignationApprovalRangeOptions();\n this.fetchFluxFillCommercialDesignationApprovalRangeOptions();\n this.fetchFluxCapCommercialDesignationApprovalRangeOptions();\n this.fetchBackingGasCommercialDesignations();\n this.fetchBackingFluxCommercialDesignations();\n this.fetchBackingGasCommercialDesignationApprovalRangeOptions();\n this.fetchBackingFluxCommercialDesignationApprovalRangeOptions();\n }\n\n @action\n searchGas(term) {\n return this.data.findGas(term);\n }\n\n @action\n searchFlux(term) {\n return this.data.findFlux(term);\n }\n\n // Shielding Root\n @action\n chooseShieldingGasRootTestPiece(gas) {\n this.gasRootChosen(gas);\n this.resetGasRootCommercialDesignations();\n }\n\n @action\n chooseShieldingFluxRootTestPiece(flux) {\n this.fluxRootChosen(flux);\n this.resetFluxRootCommercialDesignations();\n }\n\n @action\n chooseShieldingGasRootApprovalRange(gases) {\n this.gasRootApprovalRangeChosen(gases);\n this.fetchGasRootCommercialDesignationApprovalRangeOptions();\n }\n\n @action\n chooseShieldingFluxRootApprovalRange(fluxes) {\n this.fluxRootApprovalRangeChosen(fluxes);\n this.fetchFluxRootCommercialDesignationApprovalRangeOptions();\n }\n\n // Shielding Fill\n @action\n chooseShieldingGasFillTestPiece(gas) {\n this.gasFillChosen(gas);\n this.resetGasFillCommercialDesignations();\n }\n\n @action\n chooseShieldingFluxFillTestPiece(flux) {\n this.fluxFillChosen(flux);\n this.resetFluxFillCommercialDesignations();\n }\n\n @action\n chooseShieldingGasFillApprovalRange(gases) {\n this.gasFillApprovalRangeChosen(gases);\n this.fetchGasFillCommercialDesignationApprovalRangeOptions();\n }\n\n @action\n chooseShieldingFluxFillApprovalRange(fluxes) {\n this.fluxFillApprovalRangeChosen(fluxes);\n this.fetchFluxFillCommercialDesignationApprovalRangeOptions();\n }\n\n // Shielding Cap\n @action\n chooseShieldingGasCapTestPiece(gas) {\n this.gasCapChosen(gas);\n this.resetGasCapCommercialDesignations();\n }\n\n @action\n chooseShieldingFluxCapTestPiece(flux) {\n this.fluxCapChosen(flux);\n this.resetFluxCapCommercialDesignations();\n }\n\n @action\n chooseShieldingGasCapApprovalRange(gases) {\n this.gasCapApprovalRangeChosen(gases);\n this.fetchGasCapCommercialDesignationApprovalRangeOptions();\n }\n\n @action\n chooseShieldingFluxCapApprovalRange(fluxes) {\n this.fluxCapApprovalRangeChosen(fluxes);\n this.fetchFluxCapCommercialDesignationApprovalRangeOptions();\n }\n\n // Backing\n @action\n chooseBackingGasTestPiece(gas) {\n this.backingGasChosen(gas);\n this.resetGasBackingCommercialDesignations();\n }\n\n @action\n chooseBackingFluxTestPiece(flux) {\n this.backingFluxChosen(flux);\n this.resetFluxBackingCommercialDesignations();\n }\n\n @action\n chooseBackingGasApprovalRange(gases) {\n this.backingGasApprovalRangeChosen(gases);\n this.fetchBackingGasCommercialDesignationApprovalRangeOptions();\n }\n\n @action\n chooseBackingFluxApprovalRange(fluxes) {\n this.backingFluxApprovalRangeChosen(fluxes);\n this.fetchBackingFluxCommercialDesignationApprovalRangeOptions();\n }\n\n @action\n findGas() {\n if (isEmpty(this.gasOptions)) {\n this.weldnoteData.searchGas('').then((gases) => {\n set(this, 'gasOptions', gases);\n });\n }\n }\n\n @action\n findFlux() {\n if (isEmpty(this.fluxOptions)) {\n let industryCode = this.get('pqr.industryCode.id');\n this.weldnoteData.searchFluxByCode('', industryCode).then((fluxes) => {\n set(this, 'fluxOptions', fluxes);\n });\n }\n }\n\n @action\n createShieldingRootGasCommercialDesignation(designation, gas, mixture) {\n this.loading.block();\n let newDesignation = this.createGasCommercialDesignation(designation, gas, mixture);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetGasCommercialDesignations();\n this.updateGasRootCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingFillGasCommercialDesignation(designation, gas, mixture) {\n this.loading.block();\n let newDesignation = this.createGasCommercialDesignation(designation, gas, mixture);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetGasCommercialDesignations();\n this.updateGasFillCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingCapGasCommercialDesignation(designation, gas, mixture) {\n this.loading.block();\n let newDesignation = this.createGasCommercialDesignation(designation, gas, mixture);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetGasCommercialDesignations();\n this.updateGasCapCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createBackingGasCommercialDesignation(designation, gas, mixture) {\n this.loading.block();\n let newDesignation = this.createGasCommercialDesignation(designation, gas, mixture);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetGasCommercialDesignations();\n this.updateGasBackingCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingRootFluxCommercialDesignation(designation, flux) {\n this.loading.block();\n let newDesignation = this.createFluxCommercialDesignation(designation, flux);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetFluxCommercialDesignations();\n this.updateFluxRootCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingFillFluxCommercialDesignation(designation, flux) {\n this.loading.block();\n let newDesignation = this.createFluxCommercialDesignation(designation, flux);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetFluxCommercialDesignations();\n this.updateFluxFillCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingCapFluxCommercialDesignation(designation, flux) {\n this.loading.block();\n let newDesignation = this.createFluxCommercialDesignation(designation, flux);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetFluxCommercialDesignations();\n this.updateFluxCapCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createBackingFluxCommercialDesignation(designation, flux) {\n this.loading.block();\n let newDesignation = this.createFluxCommercialDesignation(designation, flux);\n newDesignation\n .save()\n .then((savedDesignation) => {\n this.resetFluxCommercialDesignations();\n this.updateFluxBackingCommercialDesignationTestPiece(savedDesignation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designation,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each this.model.tensileTestLines as |tensile|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-pqr/tensile-test.table-column-type\\\"\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-width\\\"\\n unit=this.units.distance\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-thickness\\\"\\n unit=this.units.distance\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-area-surface\\\"\\n unit=this.units.area\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-ultimate-total-load\\\"\\n unit=this.units.force\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-tensile-strength\\\"\\n unit=this.units.pressure\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-rupture-location\\\"\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-observations\\\"\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-remove\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n

\\n {{#if (eq tensile this.lineToDelete)}}\\n \\n \\n {{t \\\"components.model-pqr/tensile-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/tensile-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n

\\n
\\n
\\n {{t \\\"components.model-pqr/tensile-test.messages.no-lines\\\"}},\\n {{t\\n \\\"components.model-pqr/tensile-test.messages.add-new-test\\\"\\n }}\\n
\\n {{#if @isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/tensile-test.actions.add-new-line\\\"}}\\n \\n
\\n {{/if}}\\n
\\n
\\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n {{#if @showAdvancedFields}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n\\n{{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each this.model.tensileTestLines as |tensile|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-pqr/tensile-test.table-column-type\\\"\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-width\\\"\\n unit=this.units.distance\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-thickness\\\"\\n unit=this.units.distance\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-area-surface\\\"\\n unit=this.units.area\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-ultimate-total-load\\\"\\n unit=this.units.force\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-tensile-strength\\\"\\n unit=this.units.pressure\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-rupture-location\\\"\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-observations\\\"\\n }}{{t\\n \\\"components.model-pqr/tensile-test.table-column-remove\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n

\\n {{#if (eq tensile this.lineToDelete)}}\\n \\n \\n {{t \\\"components.model-pqr/tensile-test.actions.confirm-remove\\\"}}\\n \\n {{t \\\"components.model-pqr/tensile-test.actions.cancel-remove\\\"}}\\n {{else}}\\n \\n {{/if}}\\n

\\n
\\n
\\n {{t \\\"components.model-pqr/tensile-test.messages.no-lines\\\"}},\\n {{t\\n \\\"components.model-pqr/tensile-test.messages.add-new-test\\\"\\n }}\\n
\\n {{#if @isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-pqr/tensile-test.actions.add-new-line\\\"}}\\n \\n
\\n {{/if}}\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/tensile-test.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/tensile-test.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class TensileNottest extends Component {\n @service('weldnoteData')\n data;\n\n @service\n userSession;\n\n @alias('data.testResultOptions')\n testResultOptions;\n\n @computed('showAdvancedFields')\n get columnSize() {\n if (this.showAdvancedFields) {\n return 3;\n }\n return 2;\n }\n\n lineToDelete = null;\n\n @action\n setDecimalValue(model, attribute, value) {\n let separator = this.get('userSession.decimalSeparator');\n if (separator === ',') {\n if (!isEmpty(value)) {\n value = `${value}`.replace(',', '.');\n }\n }\n set(model, attribute, value);\n }\n\n @action\n doRemoveTensileLine(line) {\n set(this, 'lineToDelete', line);\n }\n\n @action\n confirmRemove() {\n this.removeTensileLine(this.lineToDelete);\n set(this, 'lineToDelete', null);\n }\n\n @action\n cancelRemove() {\n set(this, 'lineToDelete', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n\\n
\\n
\\n \\n
\\n \\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n\\n \\n \\n
\\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n
\\n {{#if this.hasPostHeat}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n
\\n
\\n {{#if this.hasPWHT}}\\n
\\n
{{t\\n \\\"components.model-pqr/thermal-parameters.post-weld-heat-treatment-title\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.designation}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n \\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.maximum-help-text\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasPostHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.maximum-help-text\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.maximum-help-text\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.hasPWHT}}\\n
\\n
{{t\\n \\\"components.model-pqr/thermal-parameters.post-weld-heat-treatment-title\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.designation}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n\\n
\\n
\\n \\n
\\n \\n\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\\n\\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n\\n \\n \\n
\\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n
\\n {{#if this.hasPostHeat}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n
\\n
\\n {{#if this.hasPWHT}}\\n
\\n
{{t\\n \\\"components.model-pqr/thermal-parameters.post-weld-heat-treatment-title\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.designation}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n \\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.maximum-help-text\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasPostHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.maximum-help-text\\\"}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.maximum-help-text\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.hasPWHT}}\\n
\\n
{{t\\n \\\"components.model-pqr/thermal-parameters.post-weld-heat-treatment-title\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.designation}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n
\",\"moduleName\":\"weldnote/components/model-pqr/thermal-parameters.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/thermal-parameters.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport UserSessionService from 'weldnote/services/user-session';\nimport PQRModel from 'weldnote/models/pqr';\n\ninterface ThermalParametersArgs {\n model: PQRModel;\n updatePostWeldHeatTreatmentTemperatureTestPiece: Function;\n updatePostWeldHeatTreatmentTemperatureMinimumApprovalRange: Function;\n updatePostWeldHeatTreatmentTemperatureMaximumApprovalRange: Function;\n updatePostWeldHeatTreatmentTimeTestPiece: Function;\n updatePostWeldHeatTreatmentTimeMinimumApprovalRange: Function;\n updatePostWeldHeatTreatmentTimeMaximumApprovalRange: Function;\n updatePostWeldHeatTreatmentMethodTestPiece: Function;\n updatePostWeldHeatTreatmentHeatingRateTestPiece: Function;\n updatePostWeldHeatTreatmentCoolingRateTestPiece: Function;\n updatePostHeatTemperatureTestPiece: Function;\n updatePostHeatTemperatureMinimumApprovalRange: Function;\n updatePostHeatTemperatureMaximumApprovalRange: Function;\n updatePostHeatTimeTestPiece: Function;\n updatePostHeatTimeMinimumApprovalRange: Function;\n updatePostHeatTimeMaximumApprovalRange: Function;\n updatePreheatTemperatureTestPiece: Function;\n updatePreheatTemperatureMinimumApprovalRange: Function;\n updatePreheatTemperatureMaximumApprovalRange: Function;\n}\n\nexport default class ThermalParameters extends Component {\n @service\n declare weldnoteData: WeldnoteDataService;\n\n @service\n declare userSession: UserSessionService;\n\n @service\n declare scroller: any;\n\n @service\n media: any;\n\n get postWeldTreatmentMethodOptions() {\n return this.data.postWeldTreatmentMethodOptions;\n }\n\n get data() {\n return this.weldnoteData;\n }\n\n get pqr() {\n return this.args.model;\n }\n\n // Classes to be added to the heat rows to show an animation when\n // the checkbox is clicked\n @tracked\n preHeatClasses = '';\n\n @tracked\n postHeatClasses = '';\n\n @tracked\n pwhtClasses = '';\n\n @tracked\n preHeatActivated = false;\n\n @tracked\n postHeatActivated = false;\n\n @tracked\n pwhtActivated = false;\n\n get hasPreHeat() {\n let { preHeatActivated, pqr } = this;\n let {\n preheatTemperatureTestPiece,\n preheatTemperatureMinimumApprovalRange: min,\n preheatTemperatureMaximumApprovalRange: max,\n } = pqr;\n return (\n preHeatActivated || !isEmpty(preheatTemperatureTestPiece) || !isEmpty(min) || !isEmpty(max)\n );\n }\n\n get hasPostHeat() {\n let { postHeatActivated, pqr } = this;\n let {\n postHeatTemperatureTestPiece,\n postHeatTemperatureMinimumApprovalRange: min,\n postHeatTemperatureMaximumApprovalRange: max,\n } = pqr;\n return (\n postHeatActivated || !isEmpty(postHeatTemperatureTestPiece) || !isEmpty(min) || !isEmpty(max)\n );\n }\n\n get hasPWHT() {\n let { pwhtActivated, pqr } = this;\n let {\n postWeldHeatTreatmentTemperatureTestPiece,\n postWeldHeatTreatmentTimeTestPiece,\n postWeldHeatTreatmentMethodTestPiece,\n postWeldHeatTreatmentHeatingRateTestPiece,\n postWeldHeatTreatmentCoolingRateTestPiece,\n postWeldHeatTreatmentTemperatureMinimumApprovalRange,\n postWeldHeatTreatmentTemperatureMaximumApprovalRange,\n postWeldHeatTreatmentTimeMinimumApprovalRange,\n postWeldHeatTreatmentTimeMaximumApprovalRange,\n } = pqr;\n return (\n pwhtActivated ||\n !isEmpty(postWeldHeatTreatmentTemperatureTestPiece) ||\n !isEmpty(postWeldHeatTreatmentTimeTestPiece) ||\n !isEmpty(postWeldHeatTreatmentHeatingRateTestPiece) ||\n !isEmpty(postWeldHeatTreatmentCoolingRateTestPiece) ||\n !isEmpty(postWeldHeatTreatmentTemperatureMinimumApprovalRange) ||\n !isEmpty(postWeldHeatTreatmentTemperatureMaximumApprovalRange) ||\n !isEmpty(postWeldHeatTreatmentTimeMinimumApprovalRange) ||\n !isEmpty(postWeldHeatTreatmentTimeMaximumApprovalRange) ||\n (!isEmpty(postWeldHeatTreatmentMethodTestPiece) &&\n !isEmpty(get(postWeldHeatTreatmentMethodTestPiece, 'id')))\n );\n }\n\n @action\n checkPreHeat(newValue: boolean) {\n this.preHeatActivated = newValue;\n if (!newValue) {\n this.args.updatePreheatTemperatureTestPiece(null);\n this.args.updatePreheatTemperatureMinimumApprovalRange(null);\n this.args.updatePreheatTemperatureMaximumApprovalRange(null);\n }\n if (newValue === true) {\n this.preHeatClasses = 'blue-fade-in';\n this.scroller.scrollVertical('[data-id=\"preheat\"]', { duration: 1000 });\n }\n }\n\n @action\n checkPostHeat(newValue: boolean) {\n this.postHeatActivated = newValue;\n if (!newValue) {\n this.args.updatePostHeatTemperatureTestPiece(null);\n this.args.updatePostHeatTemperatureMinimumApprovalRange(null);\n this.args.updatePostHeatTemperatureMaximumApprovalRange(null);\n this.args.updatePostHeatTimeTestPiece(null);\n this.args.updatePostHeatTimeMinimumApprovalRange(null);\n this.args.updatePostHeatTimeMaximumApprovalRange(null);\n }\n if (newValue === true) {\n this.postHeatClasses = 'blue-fade-in';\n this.scroller.scrollVertical('[data-id=\"postheat\"]', { duration: 1000 });\n }\n }\n\n @action\n checkPWHT(newValue: boolean) {\n this.pwhtActivated = newValue;\n if (!newValue) {\n this.args.updatePostWeldHeatTreatmentTemperatureTestPiece(null);\n this.args.updatePostWeldHeatTreatmentTemperatureMinimumApprovalRange(null);\n this.args.updatePostWeldHeatTreatmentTemperatureMaximumApprovalRange(null);\n\n this.args.updatePostWeldHeatTreatmentTimeTestPiece(null);\n this.args.updatePostWeldHeatTreatmentTimeMinimumApprovalRange(null);\n this.args.updatePostWeldHeatTreatmentTimeMaximumApprovalRange(null);\n\n this.args.updatePostWeldHeatTreatmentMethodTestPiece(null);\n this.args.updatePostWeldHeatTreatmentHeatingRateTestPiece(null);\n this.args.updatePostWeldHeatTreatmentCoolingRateTestPiece(null);\n }\n if (newValue === true) {\n this.pwhtClasses = 'blue-fade-in';\n this.scroller.scrollVertical('[data-id=\"pwht\"]', { duration: 1000 });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\\n \\n\\n {{#unless this.pqr.isArchived}}\\n {{#if this.userSession.canCreatePQR}}\\n {{t \\\"toolbar.edit.label\\\"}}\\n {{/if}}\\n {{/unless}}\\n\\n {{#if\\n (and\\n (not this.pqr.isArchived)\\n (or\\n this.userSession.canDeletePQR this.userSession.canCreatePQR this.userSession.canArchivePQR\\n )\\n )\\n }}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#if this.userSession.canCreateWPSFromPQR}}\\n \\n \\n \\n {{/if}}\\n\\n {{/if}}\\n\\n {{#if this.userSession.canArchivePQR}}\\n {{#if this.pqr.isArchived}}\\n \\n {{t \\\"components.model-pqr/view-mode.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#if (not this.pqr.isArchived)}}\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-pqr/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-pqr/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t \\\"components.model-pqr/edit.export-pdf.messages.exporting-pqr\\\"}}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.pqr\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute task.currentTask.value)}}- {{/unless}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t \\\"components.model-pqr/edit.export-pdf.messages.preparing-link\\\"}}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
{{t \\\"components.model-pqr/edit.export-pdf.buttons.close\\\"}}
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.pqr.isArchived}}\\n
\\n \\n {{t \\\"components.model-pqr/view-mode.messages.pqr-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n
\\n\\n{{#if this.showConfirmDelete}}\\n \\n {{#if this.hasPqrDeleteErrors}}\\n \\n
    \\n {{#each this.pqrDeleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"wps\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.wps-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.welding-book-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"project\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.project-prevents-delete\\\"}}\\n {{error.label}}\\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.unarchive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingDuplicateModal}}\\n \\n{{/if}}\\n\\n{{! Blue Bar }}\\n
\\n
\\n
\\n \\n {{this.pqr.standard.standard}}\\n {{t \\\"components.view-mode.sections.pqr\\\"}}\\n \\n
{{t\\n \\\"components.view-mode.sections.standard\\\"\\n }}
\\n
\\n
\\n {{format-weld-type\\n this.pqr.weldTypeTestPiece\\n small=true\\n }}\\n {{#if (not (is-empty-attribute this.pqr.productTypeTestPiece))}}\\n \\n -\\n {{t (concat \\\"lov.product-type.\\\" this.pqr.productTypeTestPiece)}}\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.weld-type\\\"\\n }}
\\n
\\n
\\n {{this.pqr.weldingProcessRootTestPiece.shortDesignation}}
\\n {{#if (has-value this.pqr.weldingProcessFillTestPiece.id)}}\\n {{this.pqr.weldingProcessFillTestPiece.shortDesignation}}
\\n {{/if}}\\n {{#if (has-value this.pqr.weldingProcessCapTestPiece.id)}}\\n {{this.pqr.weldingProcessCapTestPiece.shortDesignation}}
\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.processes\\\"\\n }}
\\n \\n
\\n
\\n {{#if (not (is-empty-attribute this.pqr.baseMaterial1TestPiece))}}\\n {{this.pqr.baseMaterial1TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial1TestPiece.grade.grade}}\\n {{this.pqr.baseMaterial1TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n {{#if (not (is-empty-attribute this.pqr.baseMaterial2TestPiece))}}\\n {{this.pqr.baseMaterial2TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial2TestPiece.grade.grade}}\\n {{this.pqr.baseMaterial2TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
{{t\\n \\\"components.view-mode.sections.base-metals\\\"\\n }}
\\n
\\n \\n\\n\\n{{! Base Material / Dimensions }}\\n
\\n {{#if\\n (or\\n (gt this.pqr.baseMaterial1ApprovalRange.length 0)\\n (gt this.pqr.baseMaterial2ApprovalRange.length 0)\\n )\\n }}\\n
\\n \\n
\\n {{svg-jar \\\"steelbeam\\\" class=\\\"fill-current\\\"}}\\n
\\n
\\n

\\n {{t \\\"components.view-mode.sections.base-metal-qualifications\\\"}}\\n

\\n
\\n
\\n

\\n {{#each this.pqr.baseMaterial1ApprovalRange as |group|}}\\n {{group.visualLabel}}\\n {{#if (not-eq this.pqr.baseMaterial1ApprovalRange.lastObject group)}}\\n +\\n {{/if}}\\n {{/each}}\\n

\\n {{#if (has-value this.pqr.baseMaterial2TestPiece.id)}}\\n

to

\\n

\\n {{#each this.pqr.baseMaterial2ApprovalRange as |group|}}\\n {{group.visualLabel}}\\n {{#if (not-eq this.pqr.baseMaterial2ApprovalRange.lastObject group)}}\\n +\\n {{/if}}\\n {{/each}}\\n

\\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{#if\\n (or\\n (has-value this.pqr.baseMaterial1TestPiece.id)\\n (has-value this.pqr.baseMaterial1Thickness)\\n (has-value this.pqr.baseMaterial1ThicknessMinimumApprovalRange)\\n (has-value this.pqr.baseMaterial1ThicknessMaximumApprovalRange)\\n (has-value this.pqr.baseMaterial2TestPiece.id)\\n (has-value this.pqr.baseMaterial2Thickness)\\n (has-value this.pqr.baseMaterial2ThicknessMinimumApprovalRange)\\n (has-value this.pqr.baseMaterial2ThicknessMaximumApprovalRange)\\n (has-value this.pqr.thicknessTotalTestPiece)\\n (has-value this.pqr.thicknessTotalMinimumApprovalRange)\\n (has-value this.pqr.thicknessTotalMaximumApprovalRange)\\n )\\n }}\\n
\\n \\n
\\n \\n
\\n

\\n {{t \\\"components.view-mode.sections.thickness\\\"}}\\n

\\n {{#if this.showSingleBaseMaterialThickness}}\\n

\\n {{this.pqr.baseMaterial1TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial1TestPiece.grade.grade}}\\n {{format-decimal\\n this.pqr.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n {{else}}\\n
\\n
\\n

\\n {{this.pqr.baseMaterial1TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial1TestPiece.grade.grade}}\\n {{format-decimal\\n this.pqr.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n
\\n
\\n

\\n {{this.pqr.baseMaterial2TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial2TestPiece.grade.grade}}\\n {{format-decimal\\n this.pqr.baseMaterial2Thickness\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n
\\n
\\n {{/if}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.deposited-thickness\\\"}}\\n {{format-decimal\\n this.pqr.thicknessTotalTestPiece\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n
\\n \\n {{/if}}\\n\\n {{#if this.hasDiameterToShow}}\\n
\\n \\n
\\n {{svg-jar \\\"diameter\\\"}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.diameter\\\"}}\\n

\\n
\\n {{format-decimal\\n this.pqr.diameterTestPiece\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if this.hasImages}}\\n \\n
\\n

{{t\\n \\\"components.view-mode.sections.groove-design\\\"\\n }}

\\n

{{this.sideType}}

\\n {{#if (has-value this.pqr.grooveDesigns.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.weld-layer-configuration\\\"\\n }}

\\n

{{this.layerType}}

\\n {{#if (has-value this.pqr.weldLayerConfigurations.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n \\n{{/if}}\\n\\n
\\n {{#if (has-value this.pqr.weldingProcessRootTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.pqr.weldingProcessRootTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.pqr.processMecanizationRootTestPiece.name)}}\\n {{this.pqr.processMecanizationRootTestPiece.name}} \\n {{/if}}\\n {{#if (has-value this.pqr.weldingPositionRootTestPiece.code)}}\\n {{this.pqr.weldingPositionRootTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.pqr.arcTransferModeRootTestPiece.transferMode)}}\\n {{this.pqr.arcTransferModeRootTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.pqr.typeCurrentRootTestPiece.typeCurrent)}}\\n {{this.pqr.typeCurrentRootTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.pqr.fillerMaterialRootTestPiece.id)}}\\n \\n {{this.pqr.fillerMaterialRootTestPiece.specification.specification}}\\n {{this.pqr.fillerMaterialRootTestPiece.classification.classification}}\\n {{this.pqr.fillerMaterialRootTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.shieldingRoot)}}\\n {{#if (eq this.pqr.shieldingRoot \\\"G\\\")}}\\n \\n {{this.pqr.shieldingRootGasTestPiece.specification.specification}}\\n {{this.pqr.shieldingRootGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.pqr.shieldingRootGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.pqr.shieldingRoot \\\"F\\\")}}\\n \\n \\n {{this.pqr.shieldingRootFluxTestPiece.specification.specification}}\\n \\n {{this.pqr.shieldingRootFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.pqr.shieldingRoot \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.pqr.weldingProcessFillTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.pqr.weldingProcessFillTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.pqr.processMecanizationFillTestPiece.name)}}\\n {{this.pqr.processMecanizationFillTestPiece.name}} \\n {{/if}}\\n {{#if (has-value this.pqr.weldingPositionFillTestPiece.code)}}\\n {{this.pqr.weldingPositionFillTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.pqr.arcTransferModeFillTestPiece.transferMode)}}\\n {{this.pqr.arcTransferModeFillTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.pqr.typeCurrentFillTestPiece.typeCurrent)}}\\n {{this.pqr.typeCurrentFillTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.pqr.fillerMaterialFillTestPiece.id)}}\\n \\n {{this.pqr.fillerMaterialFillTestPiece.specification.specification}}\\n {{this.pqr.fillerMaterialFillTestPiece.classification.classification}}\\n {{this.pqr.fillerMaterialFillTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.shieldingFill)}}\\n {{#if (eq this.pqr.shieldingFill \\\"G\\\")}}\\n \\n {{this.pqr.shieldingFillGasTestPiece.specification.specification}}\\n {{this.pqr.shieldingFillGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.pqr.shieldingFillGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.pqr.shieldingFill \\\"F\\\")}}\\n \\n \\n {{this.pqr.shieldingFillFluxTestPiece.specification.specification}}\\n \\n {{this.pqr.shieldingFillFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.pqr.shieldingFill \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.pqr.weldingProcessCapTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.pqr.weldingProcessCapTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.pqr.processMecanizationCapTestPiece.name)}}\\n {{this.pqr.processMecanizationCapTestPiece.name}} \\n {{/if}}\\n {{#if (has-value this.pqr.weldingPositionCapTestPiece.code)}}\\n {{this.pqr.weldingPositionCapTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.pqr.arcTransferModeCapTestPiece.transferMode)}}\\n {{this.pqr.arcTransferModeCapTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.pqr.typeCurrentCapTestPiece.typeCurrent)}}\\n {{this.pqr.typeCurrentCapTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.pqr.fillerMaterialCapTestPiece.id)}}\\n \\n {{this.pqr.fillerMaterialCapTestPiece.specification.specification}}\\n {{this.pqr.fillerMaterialCapTestPiece.classification.classification}}\\n {{this.pqr.fillerMaterialCapTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.shieldingCap)}}\\n {{#if (eq this.pqr.shieldingCap \\\"G\\\")}}\\n \\n {{this.pqr.shieldingCapGasTestPiece.specification.specification}}\\n {{this.pqr.shieldingCapGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.pqr.shieldingCapGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.pqr.shieldingCap \\\"F\\\")}}\\n \\n \\n {{this.pqr.shieldingCapFluxTestPiece.specification.specification}}\\n \\n {{this.pqr.shieldingCapFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.pqr.shieldingCap \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if (has-value this.pqr.preheatTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.preheat\\\"\\n }}

\\n
{{this.pqr.preheatTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n )\\n
\\n
\\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.interpassTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.interpass\\\"\\n }}

\\n
{{this.pqr.interpassTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n )\\n \\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.postHeatTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.post-heat\\\"\\n }}

\\n
{{this.pqr.postHeatTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n \\n )\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.postWeldHeatTreatmentTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
{{this.pqr.postWeldHeatTreatmentTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n )\\n
{{this.pqr.postWeldHeatTreatmentTimeTestPiece}}h
\\n (\\n )\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
\\n
\\n {{svg-jar \\\"forbidden\\\"}}\\n
\\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if (gt this.pqr.weldingParameters.length 0)}}\\n
\\n
\\n
\\n
\\n {{svg-jar \\\"welding-machine\\\"}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.welding-passes\\\"\\n }}

\\n
\\n \\n
\\n
\\n
\\n{{/if}}\", {\"contents\":\"\\n \\n\\n \\n\\n {{#unless this.pqr.isArchived}}\\n {{#if this.userSession.canCreatePQR}}\\n {{t \\\"toolbar.edit.label\\\"}}\\n {{/if}}\\n {{/unless}}\\n\\n {{#if\\n (and\\n (not this.pqr.isArchived)\\n (or\\n this.userSession.canDeletePQR this.userSession.canCreatePQR this.userSession.canArchivePQR\\n )\\n )\\n }}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#if this.userSession.canCreateWPSFromPQR}}\\n \\n \\n \\n {{/if}}\\n\\n {{/if}}\\n\\n {{#if this.userSession.canArchivePQR}}\\n {{#if this.pqr.isArchived}}\\n \\n {{t \\\"components.model-pqr/view-mode.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#if (not this.pqr.isArchived)}}\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-pqr/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-pqr/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t \\\"components.model-pqr/edit.export-pdf.messages.exporting-pqr\\\"}}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.pqr\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute task.currentTask.value)}}- {{/unless}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t \\\"components.model-pqr/edit.export-pdf.messages.preparing-link\\\"}}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
{{t \\\"components.model-pqr/edit.export-pdf.buttons.close\\\"}}
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.pqr.isArchived}}\\n
\\n \\n {{t \\\"components.model-pqr/view-mode.messages.pqr-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n
\\n\\n{{#if this.showConfirmDelete}}\\n \\n {{#if this.hasPqrDeleteErrors}}\\n \\n
    \\n {{#each this.pqrDeleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"wps\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.wps-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.welding-book-prevents-delete\\\"}}\\n {{error.label}}\\n {{else if (eq error.type \\\"project\\\")}}\\n \\n {{t \\\"components.model-pqr/edit.delete.errors.project-prevents-delete\\\"}}\\n {{error.label}}\\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n
\\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-pqr/view-mode.messages.unarchive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingDuplicateModal}}\\n \\n{{/if}}\\n\\n{{! Blue Bar }}\\n
\\n
\\n
\\n \\n {{this.pqr.standard.standard}}\\n {{t \\\"components.view-mode.sections.pqr\\\"}}\\n \\n
{{t\\n \\\"components.view-mode.sections.standard\\\"\\n }}
\\n
\\n
\\n {{format-weld-type\\n this.pqr.weldTypeTestPiece\\n small=true\\n }}\\n {{#if (not (is-empty-attribute this.pqr.productTypeTestPiece))}}\\n \\n -\\n {{t (concat \\\"lov.product-type.\\\" this.pqr.productTypeTestPiece)}}\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.weld-type\\\"\\n }}
\\n
\\n
\\n {{this.pqr.weldingProcessRootTestPiece.shortDesignation}}
\\n {{#if (has-value this.pqr.weldingProcessFillTestPiece.id)}}\\n {{this.pqr.weldingProcessFillTestPiece.shortDesignation}}
\\n {{/if}}\\n {{#if (has-value this.pqr.weldingProcessCapTestPiece.id)}}\\n {{this.pqr.weldingProcessCapTestPiece.shortDesignation}}
\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.processes\\\"\\n }}
\\n \\n
\\n
\\n {{#if (not (is-empty-attribute this.pqr.baseMaterial1TestPiece))}}\\n {{this.pqr.baseMaterial1TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial1TestPiece.grade.grade}}\\n {{this.pqr.baseMaterial1TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n {{#if (not (is-empty-attribute this.pqr.baseMaterial2TestPiece))}}\\n {{this.pqr.baseMaterial2TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial2TestPiece.grade.grade}}\\n {{this.pqr.baseMaterial2TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
{{t\\n \\\"components.view-mode.sections.base-metals\\\"\\n }}
\\n
\\n \\n\\n\\n{{! Base Material / Dimensions }}\\n
\\n {{#if\\n (or\\n (gt this.pqr.baseMaterial1ApprovalRange.length 0)\\n (gt this.pqr.baseMaterial2ApprovalRange.length 0)\\n )\\n }}\\n
\\n \\n
\\n {{svg-jar \\\"steelbeam\\\" class=\\\"fill-current\\\"}}\\n
\\n
\\n

\\n {{t \\\"components.view-mode.sections.base-metal-qualifications\\\"}}\\n

\\n
\\n
\\n

\\n {{#each this.pqr.baseMaterial1ApprovalRange as |group|}}\\n {{group.visualLabel}}\\n {{#if (not-eq this.pqr.baseMaterial1ApprovalRange.lastObject group)}}\\n +\\n {{/if}}\\n {{/each}}\\n

\\n {{#if (has-value this.pqr.baseMaterial2TestPiece.id)}}\\n

to

\\n

\\n {{#each this.pqr.baseMaterial2ApprovalRange as |group|}}\\n {{group.visualLabel}}\\n {{#if (not-eq this.pqr.baseMaterial2ApprovalRange.lastObject group)}}\\n +\\n {{/if}}\\n {{/each}}\\n

\\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{#if\\n (or\\n (has-value this.pqr.baseMaterial1TestPiece.id)\\n (has-value this.pqr.baseMaterial1Thickness)\\n (has-value this.pqr.baseMaterial1ThicknessMinimumApprovalRange)\\n (has-value this.pqr.baseMaterial1ThicknessMaximumApprovalRange)\\n (has-value this.pqr.baseMaterial2TestPiece.id)\\n (has-value this.pqr.baseMaterial2Thickness)\\n (has-value this.pqr.baseMaterial2ThicknessMinimumApprovalRange)\\n (has-value this.pqr.baseMaterial2ThicknessMaximumApprovalRange)\\n (has-value this.pqr.thicknessTotalTestPiece)\\n (has-value this.pqr.thicknessTotalMinimumApprovalRange)\\n (has-value this.pqr.thicknessTotalMaximumApprovalRange)\\n )\\n }}\\n
\\n \\n
\\n \\n
\\n

\\n {{t \\\"components.view-mode.sections.thickness\\\"}}\\n

\\n {{#if this.showSingleBaseMaterialThickness}}\\n

\\n {{this.pqr.baseMaterial1TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial1TestPiece.grade.grade}}\\n {{format-decimal\\n this.pqr.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n {{else}}\\n
\\n
\\n

\\n {{this.pqr.baseMaterial1TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial1TestPiece.grade.grade}}\\n {{format-decimal\\n this.pqr.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n
\\n
\\n

\\n {{this.pqr.baseMaterial2TestPiece.specification.specification}}\\n {{this.pqr.baseMaterial2TestPiece.grade.grade}}\\n {{format-decimal\\n this.pqr.baseMaterial2Thickness\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n
\\n
\\n {{/if}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.deposited-thickness\\\"}}\\n {{format-decimal\\n this.pqr.thicknessTotalTestPiece\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n

\\n
\\n \\n {{/if}}\\n\\n {{#if this.hasDiameterToShow}}\\n
\\n \\n
\\n {{svg-jar \\\"diameter\\\"}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.diameter\\\"}}\\n

\\n
\\n {{format-decimal\\n this.pqr.diameterTestPiece\\n convertToFraction=true\\n }}\\n {{this.distanceUnit}}\\n \\n \\n \\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if this.hasImages}}\\n \\n
\\n

{{t\\n \\\"components.view-mode.sections.groove-design\\\"\\n }}

\\n

{{this.sideType}}

\\n {{#if (has-value this.pqr.grooveDesigns.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.weld-layer-configuration\\\"\\n }}

\\n

{{this.layerType}}

\\n {{#if (has-value this.pqr.weldLayerConfigurations.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n \\n{{/if}}\\n\\n
\\n {{#if (has-value this.pqr.weldingProcessRootTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.pqr.weldingProcessRootTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.pqr.processMecanizationRootTestPiece.name)}}\\n {{this.pqr.processMecanizationRootTestPiece.name}} \\n {{/if}}\\n {{#if (has-value this.pqr.weldingPositionRootTestPiece.code)}}\\n {{this.pqr.weldingPositionRootTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.pqr.arcTransferModeRootTestPiece.transferMode)}}\\n {{this.pqr.arcTransferModeRootTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.pqr.typeCurrentRootTestPiece.typeCurrent)}}\\n {{this.pqr.typeCurrentRootTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.pqr.fillerMaterialRootTestPiece.id)}}\\n \\n {{this.pqr.fillerMaterialRootTestPiece.specification.specification}}\\n {{this.pqr.fillerMaterialRootTestPiece.classification.classification}}\\n {{this.pqr.fillerMaterialRootTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.shieldingRoot)}}\\n {{#if (eq this.pqr.shieldingRoot \\\"G\\\")}}\\n \\n {{this.pqr.shieldingRootGasTestPiece.specification.specification}}\\n {{this.pqr.shieldingRootGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.pqr.shieldingRootGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.pqr.shieldingRoot \\\"F\\\")}}\\n \\n \\n {{this.pqr.shieldingRootFluxTestPiece.specification.specification}}\\n \\n {{this.pqr.shieldingRootFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.pqr.shieldingRoot \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.pqr.weldingProcessFillTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.pqr.weldingProcessFillTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.pqr.processMecanizationFillTestPiece.name)}}\\n {{this.pqr.processMecanizationFillTestPiece.name}} \\n {{/if}}\\n {{#if (has-value this.pqr.weldingPositionFillTestPiece.code)}}\\n {{this.pqr.weldingPositionFillTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.pqr.arcTransferModeFillTestPiece.transferMode)}}\\n {{this.pqr.arcTransferModeFillTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.pqr.typeCurrentFillTestPiece.typeCurrent)}}\\n {{this.pqr.typeCurrentFillTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.pqr.fillerMaterialFillTestPiece.id)}}\\n \\n {{this.pqr.fillerMaterialFillTestPiece.specification.specification}}\\n {{this.pqr.fillerMaterialFillTestPiece.classification.classification}}\\n {{this.pqr.fillerMaterialFillTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.shieldingFill)}}\\n {{#if (eq this.pqr.shieldingFill \\\"G\\\")}}\\n \\n {{this.pqr.shieldingFillGasTestPiece.specification.specification}}\\n {{this.pqr.shieldingFillGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.pqr.shieldingFillGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.pqr.shieldingFill \\\"F\\\")}}\\n \\n \\n {{this.pqr.shieldingFillFluxTestPiece.specification.specification}}\\n \\n {{this.pqr.shieldingFillFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.pqr.shieldingFill \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.pqr.weldingProcessCapTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.pqr.weldingProcessCapTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.pqr.processMecanizationCapTestPiece.name)}}\\n {{this.pqr.processMecanizationCapTestPiece.name}} \\n {{/if}}\\n {{#if (has-value this.pqr.weldingPositionCapTestPiece.code)}}\\n {{this.pqr.weldingPositionCapTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.pqr.arcTransferModeCapTestPiece.transferMode)}}\\n {{this.pqr.arcTransferModeCapTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.pqr.typeCurrentCapTestPiece.typeCurrent)}}\\n {{this.pqr.typeCurrentCapTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.pqr.fillerMaterialCapTestPiece.id)}}\\n \\n {{this.pqr.fillerMaterialCapTestPiece.specification.specification}}\\n {{this.pqr.fillerMaterialCapTestPiece.classification.classification}}\\n {{this.pqr.fillerMaterialCapTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.shieldingCap)}}\\n {{#if (eq this.pqr.shieldingCap \\\"G\\\")}}\\n \\n {{this.pqr.shieldingCapGasTestPiece.specification.specification}}\\n {{this.pqr.shieldingCapGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.pqr.shieldingCapGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.pqr.shieldingCap \\\"F\\\")}}\\n \\n \\n {{this.pqr.shieldingCapFluxTestPiece.specification.specification}}\\n \\n {{this.pqr.shieldingCapFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.pqr.shieldingCap \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if (has-value this.pqr.preheatTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.preheat\\\"\\n }}

\\n
{{this.pqr.preheatTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n )\\n
\\n
\\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.interpassTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.interpass\\\"\\n }}

\\n
{{this.pqr.interpassTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n )\\n \\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.postHeatTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.post-heat\\\"\\n }}

\\n
{{this.pqr.postHeatTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n \\n )\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if (has-value this.pqr.postWeldHeatTreatmentTemperatureTestPiece)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
{{this.pqr.postWeldHeatTreatmentTemperatureTestPiece}}\\n {{this.temperatureUnit}}
\\n (\\n )\\n
{{this.pqr.postWeldHeatTreatmentTimeTestPiece}}h
\\n (\\n )\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
\\n
\\n {{svg-jar \\\"forbidden\\\"}}\\n
\\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if (gt this.pqr.weldingParameters.length 0)}}\\n
\\n
\\n
\\n
\\n {{svg-jar \\\"welding-machine\\\"}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.welding-passes\\\"\\n }}

\\n
\\n \\n
\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/view-mode.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/view-mode.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { readOnly, or, notEmpty, alias, not } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport {\n isDuplicateError,\n isPermissionDenied,\n isForeignKeyError,\n} from 'weldnote/utils/json-api-errors';\nimport { somePropertyHasValue } from 'weldnote/macros/property-check';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport { task } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst { TASK_STATUS } = Constants;\n\n@classic\nexport default class ViewMode extends Component {\n @service\n intl;\n\n @service\n loading;\n\n @service\n alertMessage;\n\n @service\n store;\n\n @service\n userSession;\n\n @service\n unitSystem;\n\n @service\n taskMonitor;\n\n @service\n router;\n\n @service\n ajax;\n\n @service\n media;\n\n @service('weldnote-data')\n data;\n\n @readOnly('model')\n pqr;\n\n get temperatureUnit() {\n return this.unitSystem.getTemperatureUnit(this.pqr.unitSystem);\n }\n\n get distanceUnit() {\n return this.unitSystem.getDistanceUnit(this.pqr.unitSystem);\n }\n\n get flowUnit() {\n return this.unitSystem.getFlowUnit(this.pqr.unitSystem);\n }\n\n get heatDistanceUnit() {\n return this.unitSystem.getHeatDistanceUnit(this.pqr.unitSystem);\n }\n\n get travelSpeedUnit() {\n return this.unitSystem.getTravelSpeedUnit(this.pqr.unitSystem);\n }\n\n get wireSpeedUnit() {\n return this.unitSystem.getWireSpeedUnit(this.pqr.unitSystem);\n }\n\n @notEmpty('pqr.grooveDesigns.firstObject.renderedImagePath')\n hasGrooveDesign;\n\n @notEmpty('pqr.weldLayerConfigurations.firstObject.renderedImagePath')\n hasWeldLayerConfigurations;\n\n @or('hasGrooveDesign', 'hasWeldLayerConfigurations')\n hasImages;\n\n @notEmpty('pqr.pqrDocumentPath')\n hasDocument;\n\n // Thermal Parameters\n @somePropertyHasValue(\n 'pqr',\n 'postHeatTemperatureTestPiece',\n 'postHeatTemperatureMinimumApprovalRange',\n 'postHeatTemperatureMaximumApprovalRange'\n )\n hasPostHeat;\n\n @somePropertyHasValue(\n 'pqr',\n 'preheatTemperatureTestPiece',\n 'preheatTemperatureMinimumApprovalRange',\n 'preheatTemperatureMaximumApprovalRange'\n )\n hasPreHeat;\n\n @somePropertyHasValue(\n 'pqr',\n 'postWeldHeatTreatmentTemperatureTestPiece',\n 'postWeldHeatTreatmentTemperatureMinimumApprovalRange',\n 'postWeldHeatTreatmentTemperatureMaximumApprovalRange'\n )\n hasPWHT;\n\n @somePropertyHasValue(\n 'pqr',\n 'interpassTemperatureTestPiece',\n 'interpassTemperatureMinimumApprovalRange',\n 'interpassTemperatureMaximumApprovalRange'\n )\n hasInterpass;\n\n @or('hasImages', 'hasGrooveAngle', 'hasRootFace', 'hasRootGap')\n hasJointDetails;\n\n @or('hasPostHeat', 'hasPreHeat', 'hasPWHT', 'hasInterpass')\n hasThermalParameters;\n\n @notEmpty('pqrDeleteErrors')\n hasPqrDeleteErrors;\n\n @alias('pqr.isOverlayWeld')\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showBothBaseMaterials;\n\n @computed('pqr.weldingDetailsTestPiece')\n get layerType() {\n let { weldingDetailsTestPiece } = this.pqr;\n if (!isEmpty(weldingDetailsTestPiece)) {\n let result = weldingDetailsTestPiece.filter(\n (e) => e.shortDesignation === 'sl' || e.shortDesignation === 'ml'\n );\n if (result.length > 0) {\n return result[0].completeDesignation;\n }\n }\n return '';\n }\n\n @computed('pqr.weldingDetailsTestPiece')\n get sideType() {\n let { weldingDetailsTestPiece } = this.pqr;\n if (!isEmpty(weldingDetailsTestPiece)) {\n let result = weldingDetailsTestPiece.filter(\n (e) =>\n e.shortDesignation === 'ss nb' ||\n e.shortDesignation === 'ss mb' ||\n e.shortDesignation === 'ss gb' ||\n e.shortDesignation === 'ss fb' ||\n e.shortDesignation === 'bs'\n );\n if (result.length > 0) {\n return result[0].completeDesignation;\n }\n }\n return '';\n }\n\n @computed(\n 'pqr.{baseMaterial1ThicknessTestPiece,baseMaterial2ThicknessTestPiece,baseMaterial1ThicknessMinimumApprovalRange,baseMaterial1ThicknessMaximumApprovalRange,baseMaterial2ThicknessMinimumApprovalRange,baseMaterial2ThicknessMinimumApprovalRange}'\n )\n get showSingleBaseMaterialThickness() {\n let {\n baseMaterial1ThicknessTestPiece: bm1tp,\n baseMaterial2ThicknessTestPiece,\n bm2tp,\n baseMaterial1ThicknessMinimumApprovalRange: bm1min,\n baseMaterial1ThicknessMaximumApprovalRange: bm1max,\n baseMaterial2ThicknessMinimumApprovalRange: bm2min,\n baseMaterial2ThicknessMaximumApprovalRange: bm2max,\n } = this.pqr;\n\n return bm1tp === bm2tp && bm1min === bm2min && bm1max && bm2max;\n }\n\n @somePropertyHasValue('pqr', 'grooveAngleMinimum', 'grooveAngleMaximum')\n hasGrooveAngle;\n\n @somePropertyHasValue('pqr', 'rootFaceMinimum', 'rootFaceMaximum')\n hasRootFace;\n\n @somePropertyHasValue('pqr', 'rootGapMinimum', 'rootGapMaximum')\n hasRootGap;\n\n @somePropertyHasValue(\n 'pqr',\n 'diameterTestPiece',\n 'diameterMinimumApprovalRange',\n 'diameterMaximumApprovalRange'\n )\n hasDiameter;\n\n @computed('pqr.{diameterTestPiece,diameterMinimumApprovalRange,diameterMaximumApprovalRange}')\n get hasDiameterToShow() {\n let {\n diameterTestPiece: tp,\n diameterMinimumApprovalRange: min,\n diameterMaximumApprovalRange: max,\n } = this.pqr;\n if (!isEmpty(tp)) {\n return true;\n }\n if (!isEmpty(max)) {\n return true;\n }\n if (!isEmpty(min) && min !== 0) {\n return true;\n }\n\n return false;\n }\n\n @notEmpty('pqr.pqrReportDocumentPath')\n hasExportedPdfPath;\n\n @computed('pqr.{pqrReportOutdated,pqrReportDocumentPath}', 'isGeneratingReport')\n get canShowCreateButton() {\n let { pqr } = this;\n let { pqrReportOutdated, pqrReportDocumentPath } = pqr;\n\n if (this.isGeneratingReport) {\n return false;\n }\n\n if (isEmpty(pqrReportDocumentPath)) {\n return true;\n }\n\n if (pqrReportOutdated) {\n return true;\n }\n return false;\n }\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingReport() {\n let tasks = get(this, 'taskMonitor.currentTasks');\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'pqr') {\n if (item.contextId === this.pqr.id) {\n if (parseInt(item.status) === TASK_STATUS.IN_PROGRESS) {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n @alias('isGeneratingReport')\n isExportingPqrReport;\n\n @computed('taskMonitor.currentTasks.[]')\n get pqrReportProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'pqr') {\n if (item.contextId === this.pqr.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n reloadPQR = task(\n {\n drop: true,\n },\n async () => {\n let reloadedPQR = await this.data.loadAllDataPQR(this.pqr.id);\n set(this, 'model', reloadedPQR);\n }\n );\n\n reloadPQRWithData() {\n return this.data.loadAllDataPQR(this.pqr.id);\n }\n\n finishReportGeneration = task(async () => {\n await this.reloadPQR.perform();\n });\n\n @computed\n get gridColumns() {\n let { intl } = this;\n let passNumberLabel = intl.t('components.model-pqr/view-mode.labels.pass-number');\n let weldingProcessLabel = intl.t('components.model-pqr/view-mode.labels.welding-process');\n let fillerMaterialLabel = intl.t('components.model-pqr/view-mode.labels.filler-material');\n let currentLabel = intl.t('components.model-pqr/view-mode.labels.current');\n let voltageLabel = intl.t('components.model-pqr/view-mode.labels.voltage');\n let travelSpeedLabel = intl.t('components.model-pqr/view-mode.labels.travel-speed', {\n unit: get(this, 'travelSpeedUnit'),\n });\n let heatInputLabel = intl.t('components.model-pqr/view-mode.labels.heat-input', {\n unit: get(this, 'heatDistanceUnit'),\n });\n let wireFeedLabel = intl.t('components.model-pqr/view-mode.labels.wire-feed-speed', {\n unit: get(this, 'wireSpeedUnit'),\n });\n let arcTransferLabel = intl.t('components.model-pqr/view-mode.labels.arc-transfer-mode');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'passNumber',\n label: passNumberLabel,\n sortable: false,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcess.shortDesignation',\n label: weldingProcessLabel,\n cellComponent: 'weldnote-grid/passes/process',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'fillerMaterialType.specification',\n label: fillerMaterialLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/pqr-view/filler-material',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'currentMinimum',\n label: currentLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/current',\n },\n {\n valuePath: 'voltageMinimum',\n label: voltageLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/voltage',\n },\n {\n valuePath: 'travelSpeedMinimum',\n label: travelSpeedLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/travel-speed',\n },\n {\n valuePath: 'wireFeedSpeed',\n label: wireFeedLabel,\n sortable: false,\n breakpoints: ['desktop'],\n cellComponent: 'weldnote-grid/numeric-range/wire-feed',\n },\n {\n valuePath: 'arcTransferMode.transferMode',\n label: arcTransferLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInputMinimum',\n label: heatInputLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/heat-input',\n },\n ];\n }\n\n deletePQR() {\n let { loading, intl, alertMessage: alert, pqr, router } = this;\n let certificateNumber = get(pqr, 'certificateNumber');\n loading.block();\n pqr\n .destroyRecord()\n .then(() => {\n router.transitionTo('pqrs');\n alert.success(intl.t('edit-view.actions.deleted', { name: certificateNumber }));\n set(this, 'showConfirmDelete', false);\n })\n .catch((reason) => {\n pqr.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n alert.error(intl.t('edit-view.actions.foreign-key-error', { name: certificateNumber }));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: certificateNumber }));\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n generateReport = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, taskMonitor, pqr } = this;\n let pqrId = get(pqr, 'id');\n if (taskMonitor.hasTaskByContext('pqr', pqrId)) {\n taskMonitor.removeTaskByContext('pqr', pqrId);\n }\n\n loading.block();\n await pqr\n .createReport()\n .then((response) => {\n if (response.status === '200') {\n get(taskMonitor, 'monitorTask').perform(response.taskIdentifier);\n } else {\n alert.error(`Problem occured ${response.status}`);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n );\n\n @action\n onAfterResponsiveChange(matches) {\n if (matches.indexOf('desktop') > -1) {\n this.get('table.expandedRows').setEach('expanded', false);\n }\n }\n\n @action\n confirmArchivePQR() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n confirmUnarchivePQR() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n cancelUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n archivePQR(onAfterArchiveCallback = null) {\n let { loading, alertMessage: alert, intl, pqr } = this;\n loading.block();\n pqr\n .archive()\n .then(() => {\n this.reloadPQRWithData()\n .then(() => {\n alert.success(\n intl.t('components.model-pqr/view-mode.messages.archive-success', {\n certificate: get(pqr, 'certificateNumber'),\n })\n );\n })\n .finally(() => {\n if (onAfterArchiveCallback && typeof onAfterArchiveCallback === 'function') {\n onAfterArchiveCallback();\n }\n loading.unblock();\n });\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('components.model-pqr/view-mode.messages.archive-error'));\n }\n loading.unblock();\n });\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n unarchivePQR() {\n let { loading, alertMessage: alert, intl, pqr } = this;\n loading.block();\n pqr\n .unarchive()\n .then(() => {\n this.reloadPQRWithData()\n .then(() => {\n alert.success(\n intl.t('components.model-pqr/view-mode.messages.unarchive-success', {\n certificate: get(pqr, 'certificateNumber'),\n })\n );\n })\n .finally(() => {\n loading.unblock();\n });\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('components.model-pqr/view-mode.messages.unarchive-error'));\n }\n loading.unblock();\n });\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n duplicatePQR(options = {}) {\n let { intl, alertMessage: alert, loading, pqr, router } = this;\n let { certificateNumber, copyTests, unitSystem } = options;\n loading.block();\n pqr\n .duplicate({\n certificate: certificateNumber,\n copyTests,\n unitSystem,\n })\n .then((result) => {\n router.transitionTo('pqr', result.id);\n alert.success(\n intl.t('components.model-pqr/edit.duplicate.messages.duplicate-success', {\n certificateNumber: result.certificate,\n })\n );\n })\n .catch((error) => {\n if (isDuplicateError(error)) {\n alert.error(\n intl.t('components.model-pqr/edit.duplicate.messages.certificate-number-error', {\n certificateNumber,\n })\n );\n } else if (isPermissionDenied(error)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: certificateNumber }));\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n confirmDelete() {\n set(this, 'showConfirmDelete', true);\n }\n\n @action\n cancelConfirmdelete() {\n set(this, 'showConfirmDelete', false);\n }\n\n @action\n deleteModel() {\n let { pqr, loading, alertMessage: alert, intl } = this;\n loading.block();\n get(this, 'ajax')\n .put(`/pqrs/${get(pqr, 'id')}/canDelete`)\n .then(() => {\n this.deletePQR();\n set(this, 'pqrDeleteErrors', null);\n })\n .catch(({ payload }) => {\n alert.error(intl.t('components.model-pqr/edit.delete.errors.cannot-delete'));\n set(this, 'pqrDeleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n onArchiveFromDeleteCallback() {\n set(this, 'showConfirmDelete', false);\n }\n\n @action\n formatDiameter(value) {\n if (this.unitSystem.isImperialSystem(this.pqr.unitSystem)) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n\n @action\n removePqrTaskFromContext() {\n this.taskMonitor.removeTaskByContext('pqr', this.pqr.id);\n }\n\n @action\n emptySearch() {}\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{@title}}

\\n
\\n
\\n {{svg-jar \\\"forbidden\\\"}}\\n
\\n
\\n
\\n\", {\"contents\":\"
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{@title}}

\\n
\\n
\\n {{svg-jar \\\"forbidden\\\"}}\\n
\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-pqr/view-mode/empty-thermal-parameter.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/view-mode/empty-thermal-parameter.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n \\n {{t \\\"components.model-pqr/welding-parameters.title\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{!-- --}}\\n \\n \\n \\n \\n \\n \\n {{#each @model.weldingParameters as |parameter|}}\\n {{#if (eq parameter.id @currentParameter.id)}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq parameter.id this.parameterToDelete.id)}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{#if\\n (and\\n (not (is-empty-attribute @heatInputMinimumTestPiece))\\n (not (is-empty-attribute @heatInputMaximumTestPiece))\\n )\\n }}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-pqr/welding-parameters.table-column-pass-number\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-welding-process\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-filler-material\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-current\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-voltage\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-travel-speed\\\"\\n unit=@units.travelSpeed\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-wire-feed-speed\\\"\\n unit=@units.wireSpeed\\n }}{{t 'components.model-pqr/welding-parameters.table-column-polarity'}}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-heat-input\\\"\\n unit=@units.heatDistance\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-edit\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-remove\\\"\\n }}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (and\\n (has-value @currentParameter.layer)\\n (is-empty-attribute @currentParameter.fillerMaterialType)\\n )\\n }}\\n
\\n \\n

\\n \\n {{t\\n \\\"components.model-pqr/welding-parameters.filler-material-missing\\\"\\n }}\\n \\n

\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.saveParameter.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-pqr/welding-parameters.actions.save\\\"}}\\n \\n \\n {{t \\\"components.model-pqr/welding-parameters.actions.discard\\\"}}\\n \\n \\n
\\n
{{parameter.passNumber}}\\n {{parameter.weldingProcess.visualLabel}}\\n {{parameter.typeCurrent.visualLabel}}\\n {{parameter.fillerMaterialType.classification.classification}}\\n {{#if (not (is-empty (compact parameter.fillerMaterialDiameters)))}}\\n \\n {{array-join\\n (map this.formatDiameter parameter.fillerMaterialDiameters)\\n separator=\\\" ; \\\"\\n ignoreEmpty=true\\n }}\\n {{@units.distance}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{#if @isEditing}}\\n \\n \\n {{t\\n \\\"components.model-pqr/welding-parameters.actions.confirm-remove\\\"\\n }}\\n \\n {{t\\n \\\"components.model-pqr/welding-parameters.actions.cancel-remove\\\"\\n }}\\n {{/if}}\\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n
{{t\\n \\\"components.model-pqr/welding-parameters.empty-parameter-list\\\"\\n }}
{{t \\\"components.model-pqr/welding-parameters.total-heat-input\\\"}}:\\n \\n {{@heatInputMinimumTestPiece}}\\n -\\n {{@heatInputMaximumTestPiece}}
\\n {{#if @isEditing}}\\n \\n {{t \\\"components.model-pqr/welding-parameters.add-new-parameter\\\"}}\\n {{/if}}\\n
\\n \\n
\\n
\\n{{#if\\n (or\\n (has-value @model.heatInputMinimumApprovalRange)\\n (has-value @model.heatInputMaximumApprovalRange)\\n )\\n}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.heat-input-help-text\\\"}}\\n \\n \\n \\n{{/if}}\", {\"contents\":\"\\n \\n
\\n \\n {{t \\\"components.model-pqr/welding-parameters.title\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{!-- --}}\\n \\n \\n \\n \\n \\n \\n {{#each @model.weldingParameters as |parameter|}}\\n {{#if (eq parameter.id @currentParameter.id)}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq parameter.id this.parameterToDelete.id)}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{#if\\n (and\\n (not (is-empty-attribute @heatInputMinimumTestPiece))\\n (not (is-empty-attribute @heatInputMaximumTestPiece))\\n )\\n }}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-pqr/welding-parameters.table-column-pass-number\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-welding-process\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-filler-material\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-current\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-voltage\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-travel-speed\\\"\\n unit=@units.travelSpeed\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-wire-feed-speed\\\"\\n unit=@units.wireSpeed\\n }}{{t 'components.model-pqr/welding-parameters.table-column-polarity'}}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-heat-input\\\"\\n unit=@units.heatDistance\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-edit\\\"\\n }}{{t\\n \\\"components.model-pqr/welding-parameters.table-column-remove\\\"\\n }}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (and\\n (has-value @currentParameter.layer)\\n (is-empty-attribute @currentParameter.fillerMaterialType)\\n )\\n }}\\n
\\n \\n

\\n \\n {{t\\n \\\"components.model-pqr/welding-parameters.filler-material-missing\\\"\\n }}\\n \\n

\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.saveParameter.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-pqr/welding-parameters.actions.save\\\"}}\\n \\n \\n {{t \\\"components.model-pqr/welding-parameters.actions.discard\\\"}}\\n \\n \\n
\\n
{{parameter.passNumber}}\\n {{parameter.weldingProcess.visualLabel}}\\n {{parameter.typeCurrent.visualLabel}}\\n {{parameter.fillerMaterialType.classification.classification}}\\n {{#if (not (is-empty (compact parameter.fillerMaterialDiameters)))}}\\n \\n {{array-join\\n (map this.formatDiameter parameter.fillerMaterialDiameters)\\n separator=\\\" ; \\\"\\n ignoreEmpty=true\\n }}\\n {{@units.distance}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{#if @isEditing}}\\n \\n \\n {{t\\n \\\"components.model-pqr/welding-parameters.actions.confirm-remove\\\"\\n }}\\n \\n {{t\\n \\\"components.model-pqr/welding-parameters.actions.cancel-remove\\\"\\n }}\\n {{/if}}\\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n
{{t\\n \\\"components.model-pqr/welding-parameters.empty-parameter-list\\\"\\n }}
{{t \\\"components.model-pqr/welding-parameters.total-heat-input\\\"}}:\\n \\n {{@heatInputMinimumTestPiece}}\\n -\\n {{@heatInputMaximumTestPiece}}
\\n {{#if @isEditing}}\\n \\n {{t \\\"components.model-pqr/welding-parameters.add-new-parameter\\\"}}\\n {{/if}}\\n
\\n \\n
\\n
\\n{{#if\\n (or\\n (has-value @model.heatInputMinimumApprovalRange)\\n (has-value @model.heatInputMaximumApprovalRange)\\n )\\n}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.heat-input-help-text\\\"}}\\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-pqr/welding-parameters.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-pqr/welding-parameters.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { observes } from '@ember-decorators/object';\nimport { service } from '@ember/service';\nimport { notEmpty, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { A } from '@ember/array';\nimport { task, timeout } from 'ember-concurrency';\nimport { set, get, action, computed } from '@ember/object';\nimport WeldingParameter from 'weldnote/utils/pqr-welding-parameter';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport Constants from 'weldnote/utils/constants';\nimport { isForeignKeyError } from 'weldnote/utils/json-api-errors';\nimport {\n fromMilimeterMinuteToMilimeterSecond,\n fromMeterMinuteToMilimeterSecond,\n} from 'weldnote/utils/unit-system/speed';\nimport { calculateLayerOptions } from 'weldnote/utils/welding/welding-process';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\n\nconst { WELDING } = WeldingParameter;\nconst { PQR } = PQRRules;\nconst { WELDING_LAYER_OPTIONS, OVERLAY_FILLER_MATERIAL_FORM } = Constants;\n\n@classic\nexport default class WeldingParameters extends Component {\n @service\n store;\n\n @service\n userSession;\n\n @service\n unitSystem;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n currentParameter = null;\n\n isEditingParameter = false;\n\n parameterToDelete = null;\n\n errors = '';\n\n @notEmpty('errors')\n hasErrors;\n\n messages = '';\n\n @notEmpty('messages')\n hasMessages;\n\n @alias('userSession.decimalSeparator')\n separator;\n\n @alias('model')\n pqr;\n\n get unitSystem() {\n get(this.pqr, 'unitSystem');\n }\n\n @computed('hasFill', 'hasCap')\n get weldingLayerOptions() {\n let { hasFill, hasCap } = this;\n let data = this.data.weldingLayerOptions;\n\n let result = calculateLayerOptions(data, hasFill, hasCap);\n return result.map((e) => {\n let layer = get(e, 'key');\n let weldingProcess = '';\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n weldingProcess = this.processes.process1;\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n weldingProcess = this.processes.process2;\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n weldingProcess = this.processes.process3;\n }\n return {\n key: get(e, 'key'),\n label: `${weldingProcess}`,\n };\n });\n }\n\n get unit() {\n return get(this, 'pqr.unitSystem');\n }\n\n @alias('pqr.isDetailBothSides')\n isBothSides;\n\n get isMetricSystem() {\n return this.unitSystem.isMetricSystem(this.unit);\n }\n\n get isImperialSystem() {\n return this.unitSystem.isImperialSystem(this.unit);\n }\n\n @notEmpty('currentParameter.layer')\n hasLayerChosen;\n\n @computed('currentParameter')\n get isCreatingNew() {\n if (!isEmpty(this.currentParameter)) {\n return this.get('currentParameter.isNew');\n }\n }\n\n // HACK: This is here because if a user is editing\n // a parameter and goes to save the PQR, the state of this component\n // becomes inconsistent\n @observes('currentParameter')\n parameterObserver() {\n if (isEmpty(get(this, 'currentParameter'))) {\n set(this, 'isEditingParameter', false);\n }\n }\n\n // HACK: This method encapsultates two calls so that when a parameter is added\n // the isEditingParameter property is updated (this is required, because we have an\n // observer on the currentParameter, and observers are eager)\n updateParameter(parameter) {\n this.toggleProperty('isEditingParameter');\n set(this, 'currentParameter', parameter);\n }\n\n @computed('currentParameter', 'parameterToDelete')\n get isActionUnderway() {\n return !isEmpty(this.currentParameter) || !isEmpty(this.parameterToDelete);\n }\n\n hasObjectValue(attribute) {\n return !isEmpty(this.get(`model.${attribute}.id`));\n }\n\n calculateOptions(rootProperty, fillProperty, capProperty) {\n let options = A();\n if (this.hasObjectValue(rootProperty)) {\n options.pushObject(this.get(`model.${rootProperty}`));\n }\n if (this.hasObjectValue(fillProperty)) {\n let optionFill = this.get(`model.${fillProperty}`);\n if (!options.findBy('id', optionFill.get('id'))) {\n options.pushObject(optionFill);\n }\n }\n if (this.hasObjectValue(capProperty)) {\n let optionCap = this.get(`model.${capProperty}`);\n if (!options.findBy('id', optionCap.get('id'))) {\n options.pushObject(optionCap);\n }\n }\n return options;\n }\n\n getFillerMaterialOverlayFillerMaterialForm(layer) {\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n return this.pqr.get('additionalData.overlayFillerMaterialFormRoot');\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n return this.pqr.get('additionalData.overlayFillerMaterialFormFill');\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n return this.pqr.get('additionalData.overlayFillerMaterialFormCap');\n }\n return '';\n }\n\n @computed(\n `pqr.{${PQR.FILLER_MATERIAL_ROOT_TESTPIECE},${PQR.FILLER_MATERIAL_FILL_TESTPIECE},${PQR.FILLER_MATERIAL_CAP_TEST_PIECE}}`\n )\n get fillerMaterialAllOptions() {\n let options = A();\n if (this.hasObjectValue(PQR.FILLER_MATERIAL_ROOT_TESTPIECE)) {\n options.pushObject(this.get(`model.${PQR.FILLER_MATERIAL_ROOT_TESTPIECE}`));\n }\n if (this.hasObjectValue(PQR.FILLER_MATERIAL_FILL_TESTPIECE)) {\n options.pushObject(this.get(`model.${PQR.FILLER_MATERIAL_FILL_TESTPIECE}`));\n }\n if (this.hasObjectValue(PQR.FILLER_MATERIAL_ROOT_TESTPIECE)) {\n options.pushObject(this.get(`model.${PQR.FILLER_MATERIAL_ROOT_TESTPIECE}`));\n }\n return options;\n }\n\n @computed(\n `pqr.{${PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE},${PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE},${PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE}}`\n )\n get arcTransferModeOptions() {\n return this.calculateOptions(\n PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE,\n PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE,\n PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE\n );\n }\n\n @computed('currentParameterForm')\n get fillerMaterialDiametersLabel() {\n let {\n intl,\n units: { distance },\n } = this;\n if (this.currentParameterForm === OVERLAY_FILLER_MATERIAL_FORM.WIRE) {\n return intl.t('model.pqr-welding-parameter.fillerMaterialDiameters.label', {\n unit: distance,\n });\n } else if (this.currentParameterForm === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n return intl.t('components.model-pqr/welding-parameters.label.strip-width', {\n unit: distance,\n });\n }\n return intl.t('model.pqr-welding-parameter.fillerMaterialDiameters.label', {\n unit: distance,\n });\n }\n\n @computed(\n `pqr.{${PQR.TYPE_CURRENT_ROOT_TESTPIECE},${PQR.TYPE_CURRENT_FILL_TESTPIECE},${PQR.TYPE_CURRENT_CAP_TEST_PIECE}}`\n )\n get typeCurrentOptions() {\n return this.calculateOptions(\n PQR.TYPE_CURRENT_ROOT_TESTPIECE,\n PQR.TYPE_CURRENT_FILL_TESTPIECE,\n PQR.TYPE_CURRENT_CAP_TEST_PIECE\n );\n }\n\n @computed('currentParameter.layer')\n get currentParameterForm() {\n let { currentParameter } = this;\n let fillerMaterialLayer = get(currentParameter, 'layer');\n return this.getFillerMaterialOverlayFillerMaterialForm(fillerMaterialLayer);\n }\n\n @computed('currentParameter.layer')\n get currentParameterLayerForm() {\n let { currentParameter } = this;\n let currentLayer = get(currentParameter, 'layer');\n return this.getFillerMaterialOverlayFillerMaterialForm(currentLayer);\n }\n\n @computed('currentParameterLayerForm')\n get currentParameterLayerFormVisualLabel() {\n let layerForm = this.currentParameterLayerForm;\n if (layerForm === OVERLAY_FILLER_MATERIAL_FORM.WIRE) {\n return ` (${this.intl.t('components.model-pqr/edit.filler-materials.overlay-form-wire')})`;\n }\n if (layerForm === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n return ` (${this.intl.t('components.model-pqr/edit.filler-materials.overlay-form-strip')})`;\n }\n return '';\n }\n\n @computed('currentParameter.layer')\n get currentLayerForFillerMaterialDiameter() {\n let { currentParameter } = this;\n let layer = get(currentParameter, 'layer');\n return layer;\n }\n\n validateField(pqrParameter, field) {\n return pqrParameter.validate({ only: [field] });\n }\n\n updateHeatInputValues(parameter) {\n PQRRules.updateParameterHeatInputMinimum(this.pqr, parameter, this.unit);\n PQRRules.updateParameterHeatInputMaximum(this.pqr, parameter, this.unit);\n }\n\n saveParameter = task(async () => {\n let { alert, intl, currentParameter: parameter } = this;\n if (parameter.validate()) {\n await timeout(300);\n try {\n await parameter.save();\n this.updateParameter(null);\n alert.success(intl.t('components.model-pqr/welding-parameters.messages.saved'));\n } catch (e) {\n parameter.rollbackAttributes();\n alert.error(\n intl.t('components.model-pqr/welding-parameters.messages.error-saving', { reason: e })\n );\n }\n } else {\n alert.error(intl.t('components.model-pqr/welding-parameters.messages.invalid-parameter'));\n }\n });\n\n @action\n chooseParameter(param) {\n this.updateParameter(param);\n }\n\n @action\n discardChanges() {\n let parameter = this.currentParameter;\n parameter.rollbackAttributes();\n if (parameter.get('isNew')) {\n get(this, 'removeWeldingParameter')(parameter);\n this.store.unloadRecord(parameter);\n }\n this.updateParameter(null);\n }\n\n @action\n removeParameter(parameter) {\n set(this, 'parameterToDelete', parameter);\n }\n\n @action\n confirmRemove() {\n let { parameterToDelete: parameter, intl, alert } = this;\n parameter\n .destroyRecord()\n .then(() => {\n set(this, 'parameterToDelete', null);\n alert.success(intl.t('components.model-pqr/welding-parameters.actions.parameter-removed'));\n })\n .catch((reason) => {\n parameter.rollbackAttributes();\n if (isForeignKeyError(reason)) {\n alert.error(intl.t('components.model-pqr/welding-parameters.actions.error-foreign-key'));\n } else {\n alert.error(reason);\n }\n });\n }\n\n @action\n cancelRemove() {\n set(this, 'parameterToDelete', null);\n }\n\n @action\n createNewParameter() {\n let parameter = get(this, 'addNewWeldingParameter')();\n this.updateParameter(parameter);\n }\n\n @action\n setOrderNum(parameter, value) {\n parameter.set(WELDING.ORDER_NUM, convertDecimals(value, this.separator));\n }\n\n @action\n setPassNumber(parameter, value) {\n parameter.set(WELDING.PASS_NUMBER, value);\n }\n\n @action\n setCurrentMinimum(parameter, value) {\n parameter.set(WELDING.CURRENT_MINIMUM, convertDecimals(value, this.separator));\n if (this.validateField(parameter, WELDING.CURRENT_MINIMUM)) {\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n setCurrentMaximum(parameter, value) {\n parameter.set(WELDING.CURRENT_MAXIMUM, convertDecimals(value, this.separator));\n if (this.validateField(parameter, WELDING.CURRENT_MAXIMUM)) {\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n setVoltageMinimum(parameter, value) {\n parameter.set(WELDING.VOLTAGE_MINIMUM, convertDecimals(value, this.separator));\n if (this.validateField(parameter, WELDING.VOLTAGE_MINIMUM)) {\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n setVoltageMaximum(parameter, value) {\n parameter.set(WELDING.VOLTAGE_MAXIMUM, convertDecimals(value, this.separator));\n if (this.validateField(parameter, WELDING.VOLTAGE_MAXIMUM)) {\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n setTypeCurrent(parameter, value) {\n parameter.set(WELDING.TYPE_CURRENT, value);\n }\n\n @action\n setWireFeedSpeedMinimum(parameter, value) {\n if (this.isMetricSystem) {\n parameter.set(\n WELDING.WIRE_FEED_SPEED_MINIMUM,\n fromMeterMinuteToMilimeterSecond(convertDecimals(value, this.separator))\n );\n } else if (this.isImperialSystem) {\n parameter.set(WELDING.WIRE_FEED_SPEED_MINIMUM, convertDecimals(value, this.separator));\n }\n this.validateField(parameter, WELDING.WIRE_FEED_SPEED_MINIMUM);\n }\n\n @action\n setWireFeedSpeedMaximum(parameter, value) {\n if (this.isMetricSystem) {\n parameter.set(\n WELDING.WIRE_FEED_SPEED_MAXIMUM,\n fromMeterMinuteToMilimeterSecond(convertDecimals(value, this.separator))\n );\n } else if (this.isImperialSystem) {\n parameter.set(WELDING.WIRE_FEED_SPEED_MAXIMUM, convertDecimals(value, this.separator));\n }\n this.validateField(parameter, WELDING.WIRE_FEED_SPEED_MAXIMUM);\n }\n\n @action\n setTravelSpeedMinimum(parameter, value) {\n if (this.isMetricSystem) {\n parameter.set(\n WELDING.TRAVEL_SPEED_MINIMUM,\n fromMilimeterMinuteToMilimeterSecond(convertDecimals(value, this.separator))\n );\n } else if (this.isImperialSystem) {\n parameter.set(WELDING.TRAVEL_SPEED_MINIMUM, convertDecimals(value, this.separator));\n }\n if (this.validateField(parameter, WELDING.TRAVEL_SPEED_MINIMUM)) {\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n setTravelSpeedMaximum(parameter, value) {\n if (this.isMetricSystem) {\n parameter.set(\n WELDING.TRAVEL_SPEED_MAXIMUM,\n fromMilimeterMinuteToMilimeterSecond(convertDecimals(value, this.separator))\n );\n } else if (this.isImperialSystem) {\n parameter.set(WELDING.TRAVEL_SPEED_MAXIMUM, convertDecimals(value, this.separator));\n }\n if (this.validateField(parameter, WELDING.TRAVEL_SPEED_MAXIMUM)) {\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n setHeatInputMinimum(parameter, value) {\n parameter.set(WELDING.HEAT_INPUT_MINIMUM, convertDecimals(value, this.separator));\n if (this.validateField(parameter, WELDING.HEAT_INPUT_MINIMUM)) {\n PQRRules.updateHeatInputApprovalRange(this.pqr);\n }\n }\n\n @action\n setHeatInputMaximum(parameter, value) {\n parameter.set(WELDING.HEAT_INPUT_MAXIMUM, convertDecimals(value, this.separator));\n if (this.validateField(parameter, WELDING.HEAT_INPUT_MAXIMUM)) {\n PQRRules.updateHeatInputApprovalRange(this.pqr);\n }\n }\n\n @action\n setArcTransferMode(parameter, value) {\n parameter.set(WELDING.ARC_TRANSFER_MODE, value);\n }\n\n @action\n setLayer(parameter, value) {\n parameter.set(WELDING.LAYER, value);\n let { pqr } = this;\n if (!isEmpty(value)) {\n if (value === WELDING_LAYER_OPTIONS.ROOT) {\n let diameters = get(pqr, PQR.FILLER_MATERIAL_ROOT_DIAMETERS);\n if (!isEmpty(diameters) && diameters.length > 3) {\n diameters = diameters.slice(0, 3);\n }\n parameter.set(WELDING.FILLER_MATERIAL_DIAMETER, diameters);\n parameter.set(WELDING.ARC_TRANSFER_MODE, get(pqr, PQR.ARC_TRANSFER_MODE_ROOT_TESTPIECE));\n parameter.set(WELDING.TYPE_CURRENT, get(pqr, PQR.TYPE_CURRENT_ROOT_TESTPIECE));\n } else if (value === WELDING_LAYER_OPTIONS.FILL) {\n let diameters = get(pqr, PQR.FILLER_MATERIAL_FILL_DIAMETERS);\n if (!isEmpty(diameters) && diameters.length > 3) {\n diameters = diameters.slice(0, 3);\n }\n parameter.set(WELDING.FILLER_MATERIAL_DIAMETER, diameters);\n parameter.set(WELDING.ARC_TRANSFER_MODE, get(pqr, PQR.ARC_TRANSFER_MODE_FILL_TESTPIECE));\n parameter.set(WELDING.TYPE_CURRENT, get(pqr, PQR.TYPE_CURRENT_FILL_TESTPIECE));\n } else if (value === WELDING_LAYER_OPTIONS.CAP) {\n let diameters = get(pqr, PQR.FILLER_MATERIAL_CAP_DIAMETERS);\n if (!isEmpty(diameters) && diameters.length > 3) {\n diameters = diameters.slice(0, 3);\n }\n parameter.set(WELDING.FILLER_MATERIAL_DIAMETER, diameters);\n parameter.set(WELDING.ARC_TRANSFER_MODE, get(pqr, PQR.ARC_TRANSFER_MODE_CAP_TEST_PIECE));\n parameter.set(WELDING.TYPE_CURRENT, get(pqr, PQR.TYPE_CURRENT_CAP_TEST_PIECE));\n }\n\n this.updateHeatInputValues(parameter);\n }\n }\n\n @action\n dummy() {}\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-preparation-method/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-preparation-method/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n\n @service\n userSession;\n\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n{{else}}\\n \\n \\n

{{get (get @model @attribute) \\\"name\\\"}}

\\n
\\n{{/if}}\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{@error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n{{else}}\\n \\n \\n

{{get (get @model @attribute) \\\"name\\\"}}

\\n
\\n{{/if}}\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{@error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-project-client/lookup-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-project-client/lookup-create.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, action } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { isBlank, isEmpty } from '@ember/utils';\n\n@classic\nexport default class LookupCreate extends Component {\n @service\n store;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n isCreating = false;\n\n error = null;\n\n @notEmpty('error')\n hasError;\n\n findProjectClient = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n let result = await this.data.listAllProjectClients({}, { name: term });\n return result;\n }\n );\n\n @action\n search(term) {\n return this.findProjectClient.perform(term);\n }\n\n @action\n showCreateWindow(searchText = '') {\n set(this, 'isCreating', true);\n set(this, 'name', searchText);\n }\n\n @action\n createClient() {\n set(this, 'error', []);\n\n let { store, alertMessage: alert, intl, loading, analytics } = this;\n\n let { name } = this;\n\n if (isEmpty(name)) {\n set(this, 'error', intl.t('generic.error.field-required'));\n alert.error(intl.t('components.model-project-client/lookup-create.errors.title'));\n return;\n }\n\n let client = store.createRecord('project-client');\n set(client, 'name', name);\n loading.block();\n client\n .save()\n .then((newClient) => {\n this.onUpdate(newClient);\n alert.success(\n intl.t('components.model-project/edit.messages.client-created', { client: name })\n );\n set(this, 'isCreating', false);\n analytics.trackEvent('create-project-client-inline', {\n type: 'project-client',\n category: 'create-inline',\n name,\n });\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-project/edit.messages.client-error-duplicate', {\n client: name,\n })\n );\n } else {\n alert.error(\n intl.t('components.model-project/edit.messages.client-error-generic', {\n client: name,\n })\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n set(this, 'isCreating', true);\n set(this, 'name', select.searchText);\n }\n }\n\n @action\n closeWindow() {\n set(this, 'isCreating', false);\n set(this, 'error', []);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{project.projectName}}\\n -\\n {{project.designation}}\\n\", {\"contents\":\"\\n {{project.projectName}}\\n -\\n {{project.designation}}\\n\",\"moduleName\":\"weldnote/components/model-project/chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-project/chooser.hbs\"}});\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\n\nexport default class ProjectChooser extends Component {\n @service('weldnote-data')\n data;\n\n @tracked\n selectedProject = null;\n\n @tracked\n options;\n\n @action\n async fetchInitialOptions() {\n if (isEmpty(this.options)) {\n this.options = await this.data.findProjects.perform(this.args.standard, '', {\n pageSize: 5,\n sort: '-id',\n });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{component.componentNumber}}\\n -\\n {{component.componentName}}\\n\", {\"contents\":\"\\n {{component.componentNumber}}\\n -\\n {{component.componentName}}\\n\",\"moduleName\":\"weldnote/components/model-project/component-chooser-with-options.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-project/component-chooser-with-options.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\nexport default class ProjectComponentChooser extends Component {\n fetchedComponentsProjectId = null;\n\n @action\n componentNumberAndNameMatcher(projectComponent, searchTerm) {\n return `${projectComponent.componentNumber} - ${projectComponent.componentName}`.indexOf(\n searchTerm\n );\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/model-project/component-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-project/component-chooser.hbs\"}});\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\nexport default class ProjectComponentChooser extends Component {\n @service('weldnote-data')\n data;\n\n @tracked\n selectableComponents = [];\n\n constructor() {\n super(...arguments);\n this.fetchProjectComponents();\n }\n\n fetchedComponentsProjectId = null;\n\n // TODO: instead of fetching all components of a project, we should instead have a backend search\n @action\n async fetchProjectComponents() {\n if (isEmpty(this.args.project)) {\n this.selectableComponents = [];\n } else {\n if (\n this.fetchedComponentsProjectId == null ||\n this.fetchedComponentsProjectId !== this.args.project.id\n ) {\n this.fetchedComponentsProjectId = this.args.project.id;\n this.selectableComponents = await this.data.listAllProjectComponents({\n project: this.args.project.id,\n pageSize: 999,\n });\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadProjectsData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n \\n {{t \\\"components.model-project/lookup.messages.no-project-found\\\"}}\\n \\n \\n
\", {\"contents\":\"
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadProjectsData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n \\n {{t \\\"components.model-project/lookup.messages.no-project-found\\\"}}\\n \\n \\n
\",\"moduleName\":\"weldnote/components/model-project/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-project/lookup.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { tracked } from '@glimmer/tracking';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\nexport default class Lookup extends Component {\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n @tracked\n currentProjectPage = 1;\n\n @tracked\n designation = '';\n\n @tracked\n projectName = '';\n\n @tracked\n unitSystem = null;\n\n @tracked\n totalCount = null;\n\n @tracked\n projects = null;\n\n buildProjectSearchFilters() {\n let finalFilters = {};\n\n if (!isEmpty(this.designation)) {\n finalFilters.designation = this.designation;\n }\n if (!isEmpty(this.projectName)) {\n finalFilters.projectName = this.projectName;\n }\n if (!isEmpty(this.selectedUnitSystem)) {\n finalFilters.unitSystem = this.selectedUnitSystem.key;\n }\n\n return finalFilters;\n }\n\n loadProjectsData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentProjectPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllProjects(options, this.buildProjectSearchFilters());\n this.projects = data.list;\n this.totalCount = data.count;\n }\n );\n\n get gridColumns() {\n let designationLabel = this.getProjectAttributeLabel('designation');\n let projectLabel = this.getProjectAttributeLabel('projectName');\n let customerLabel = this.getProjectAttributeLabel('projectClient');\n let supplierLabel = this.getProjectAttributeLabel('supplier');\n let standardLabel = this.getProjectAttributeLabel('standard');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'designation',\n label: designationLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n cellComponent: 'weldnote-grid/project-no-link',\n sortable: false,\n },\n {\n valuePath: 'projectName',\n label: projectLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'customer',\n label: customerLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'supplier',\n label: supplierLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'standard',\n label: standardLabel,\n breakpoints: ['desktop'],\n sortable: false,\n },\n {\n label: this.intl.t('generic.buttons.actions'),\n width: '100px',\n sortable: false,\n cellComponent: 'model-project/lookup/select-project',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n constructor() {\n super(...arguments);\n this.selectedUnitSystem = this.notesData.unitSystemOptions.find(\n (option) => option.key === this.userSession.unitSystem\n );\n this.loadProjectsData.perform();\n }\n\n getProjectAttributeLabel(value) {\n return this.intl.t(`model.project.${value}.label`);\n }\n\n resetPage() {\n this.currentProjectPage = 1;\n }\n\n @action\n searchProject(page = 1) {\n this.currentProjectPage = page;\n this.loadProjectsData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.designation = null;\n this.projectName = null;\n this.loadProjectsData.perform();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{t \\\"components.model-project/lookup.labels.select-project\\\"}}\", {\"contents\":\"{{t \\\"components.model-project/lookup.labels.select-project\\\"}}\",\"moduleName\":\"weldnote/components/model-project/lookup/select-project.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-project/lookup/select-project.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{option.name}}\\n \\n\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{t\\n \\\"model.certification-special-requirement.name.help\\\"\\n }}\\n {{#if this.nameHasErrors}}\\n {{#each this.errors.name as |e|}}\\n {{e.message}}\\n {{/each}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n \\n {{t\\n \\\"model.certification-special-requirement.description.help\\\"\\n }}\\n {{#if this.descriptionHasErrors}}\\n {{#if (gt this.errors.description.length 0)}}\\n {{#each this.errors.description as |e|}}\\n {{e.message}}\\n {{/each}}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-special-requirements/lookup-create.buttons.create\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n \\n {{option.name}}\\n \\n\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{t\\n \\\"model.certification-special-requirement.name.help\\\"\\n }}\\n {{#if this.nameHasErrors}}\\n {{#each this.errors.name as |e|}}\\n {{e.message}}\\n {{/each}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n \\n {{t\\n \\\"model.certification-special-requirement.description.help\\\"\\n }}\\n {{#if this.descriptionHasErrors}}\\n {{#if (gt this.errors.description.length 0)}}\\n {{#each this.errors.description as |e|}}\\n {{e.message}}\\n {{/each}}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-special-requirements/lookup-create.buttons.create\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-special-requirement/lookup-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-special-requirement/lookup-create.hbs\"}});\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { get, action } from '@ember/object';\nimport { isEmpty, isBlank } from '@ember/utils';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\nimport { objectValidator } from 'ember-model-validator';\n\n@objectValidator\nexport default class LookupCreate extends Component {\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @tracked\n isCreating = false;\n\n @tracked\n name = null;\n\n @tracked\n description = null;\n\n @notEmpty('errors.name')\n nameHasErrors;\n\n @notEmpty('errors.description')\n descriptionHasErrors;\n\n validations = {\n name: {\n presence: true,\n },\n\n description: {\n presence: true,\n },\n };\n\n @action\n createSpecialRequirement(searchText = '') {\n this.isCreating = true;\n this.name = searchText;\n }\n\n @action\n createRequirement() {\n this.clearErrors();\n let { model } = this.args;\n let { name, description, store, loading, alert, intl, data, analytics } = this;\n\n if (!this.validate()) {\n alert.error(\n intl.t('components.model-special-requirements/lookup-create.messages.errors.required')\n );\n return;\n }\n\n let requirement = store.createRecord('certification-special-requirement', {\n name,\n description,\n });\n\n loading.block();\n requirement\n .save()\n .then((savedRequirement) => {\n let result = [];\n get(model, this.args.attribute).forEach((requirement) => {\n result.pushObject(requirement);\n });\n result.pushObject(savedRequirement);\n this.args.onUpdate(result);\n data.bustSpecialRequirementsCache();\n alert.success(\n intl.t('components.model-special-requirements/lookup-create.messages.success')\n );\n this.isCreating = false;\n analytics.trackEvent('create-special-requirement-inline', {\n type: 'special-requirement',\n category: 'create-inline',\n name,\n });\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-ndt-report-certificate/edit.inspector.errors.duplicate')\n );\n } else {\n alert.error(\n intl.t('components.model-special-requirements/lookup-create.messages.errors.generic')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.isCreating = true;\n this.name = select.searchText;\n }\n }\n\n @action\n closeWindow() {\n this.isCreating = false;\n this.name = '';\n this.description = '';\n this.clearErrors();\n }\n\n @action\n setDescription(desc) {\n this.description = desc;\n }\n\n @action\n setName(name) {\n this.name = name;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-staff-position/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-staff-position/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n _postSave() {\n this.data.bustStaffPositionCache();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless @model.isNew}}\\n {{#if this.userSession.isAccountAdmin}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless @model.isNew}}\\n {{#if this.userSession.isAccountAdmin}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n\",\"moduleName\":\"weldnote/components/model-staff/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-staff/edit.hbs\"}});\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit-glimmer';\n\nexport default class Edit extends Base {\n @alias('model')\n staff;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n _postSave() {\n this.data.bustStaffCache();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\\n \\n {{#if this.saveInspection.isRunning}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.saving\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.save\\\"}}\\n {{/if}}\\n \\n\\n \\n {{#if this.deleteInspection.isRunning}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.deleting\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.delete\\\"}}\\n {{/if}}\\n \\n\\n\\n{{#if this.showConfirmDelete}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.add-test-stage\\\"}}\\n \\n \\n {{#each this.sortedStages as |stage|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n\\n \\n\", {\"contents\":\"\\n \\n\\n \\n {{#if this.saveInspection.isRunning}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.saving\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.save\\\"}}\\n {{/if}}\\n \\n\\n \\n {{#if this.deleteInspection.isRunning}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.deleting\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.delete\\\"}}\\n {{/if}}\\n \\n\\n\\n{{#if this.showConfirmDelete}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.add-test-stage\\\"}}\\n \\n \\n {{#each this.sortedStages as |stage|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n\\n \\n\",\"moduleName\":\"weldnote/components/model-test-inspection-class/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-inspection-class/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { isDuplicateError, isForeignKeyError } from 'weldnote/utils/json-api-errors';\nimport { task } from 'ember-concurrency';\nimport { get, set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class Edit extends Component {\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n router;\n\n @service\n store;\n\n @service\n loading;\n\n @service\n scroller;\n\n showConfirmDelete = false;\n\n stagesSortedByDisplayOrder = [];\n\n get sortedStages() {\n if (isEmpty(this.stagesSortedByDisplayOrder)) {\n this.stagesSortedByDisplayOrder = this.model.stages.sortBy('name.displayOrder');\n }\n return this.stagesSortedByDisplayOrder;\n }\n\n saveInspection = task(\n {\n drop: true,\n },\n async () => {\n let { model, alert, loading, intl, router, stagesSortedByDisplayOrder } = this;\n if (model.validate()) {\n loading.block();\n try {\n let stages = get(model, 'stages');\n let stagesArray = [];\n let stageTests = [];\n stages.forEach((stage) => {\n stagesArray.push(stage);\n let tests = stage.get('tests');\n tests.forEach((test) => {\n stageTests.push(test);\n });\n });\n let someInvalid = false;\n // Save all tests\n for (let i = 0; i < stageTests.length; i++) {\n if (stageTests[i].validate()) {\n await stageTests[i].save();\n } else {\n someInvalid = true;\n }\n }\n // Save all stages\n for (let i = 0; i < stagesArray.length; i++) {\n if (stagesArray[i].validate()) {\n await stagesArray[i].save();\n } else {\n someInvalid = true;\n }\n }\n // Save the final model\n if (!someInvalid) {\n await model.save();\n } else {\n alert.error(\n this.intl\n .t('edit-view.actions.generic-delete-error', {\n name: this.get('model.name'),\n })\n .toString()\n );\n return;\n }\n\n stagesSortedByDisplayOrder.clear(); // forces stages to recalculate ordering\n if (model.isNew) {\n router.transitionTo('test-inspection-class', get(result, 'id'));\n }\n alert.success(\n intl.t('components.model-test-inspection-class/edit.messages.save.success', {\n name: model.name,\n })\n );\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-test-inspection-class/edit.messages.errors.duplicate')\n );\n } else {\n alert.error(\n intl.t('components.model-test-inspection-class/edit.messages.errors.unknown')\n );\n }\n } finally {\n loading.unblock();\n }\n } else {\n alert.error(\n intl.t('components.model-test-inspection-class/edit.messages.errors.validation')\n );\n }\n }\n );\n\n deleteInspection = task(\n {\n drop: true,\n },\n async () => {\n let { model, alert, router, store, loading, intl } = this;\n let stages = get(model, 'stages');\n let stagesArray = [];\n let stageTests = [];\n stages.forEach((stage) => {\n stagesArray.push(stage);\n let tests = stage.get('tests');\n tests.forEach((test) => {\n stageTests.push(test);\n });\n });\n\n loading.block();\n for (let i = 0; i < stageTests.length; i++) {\n store.unloadRecord(stageTests[i]);\n }\n for (let i = 0; i < stagesArray.length; i++) {\n store.unloadRecord(stagesArray[i]);\n }\n\n try {\n await model.destroyRecord();\n set(this, 'showConfirmDelete', false);\n alert.success(\n intl.t('components.model-test-inspection-class/edit.messages.delete.delete-success')\n );\n router.transitionTo('test-inspection-classes');\n } catch (reason) {\n model.rollbackAttributes();\n if (isForeignKeyError(reason)) {\n alert.error(\n intl.t(\n 'components.model-test-inspection-class/edit.messages.errors.foreign-key-projects'\n )\n );\n } else {\n alert.error(reason);\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n @action\n addTestStage() {\n this.scroller.scrollVertical('#form-end');\n let { model, store } = this;\n let testStage = store.createRecord('test-stage', {\n testInspection: model,\n });\n get(model, 'stages').pushObject(testStage);\n this.stagesSortedByDisplayOrder.pushObject(testStage);\n }\n\n @action\n removeTestStage(stage) {\n let { model, store, loading } = this;\n loading.block();\n get(model, 'stages').removeObject(stage);\n try {\n let tests = get(stage, 'tests');\n tests.slice().forEach((test) => {\n store.unloadRecord(test);\n });\n stage.destroyRecord();\n this.stagesSortedByDisplayOrder.removeObject(stage);\n } catch (reason) {\n stage.rollbackAttributes();\n console.log(reason);\n } finally {\n loading.unblock();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\\n \\n {{#if this.saveInspection.isRunning}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.saving\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.save\\\"}}\\n {{/if}}\\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n \\n\\n \\n {{#if this.saveInspection.isRunning}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.saving\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-inspection-class/edit.buttons.save\\\"}}\\n {{/if}}\\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-test-inspection-class/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-inspection-class/new.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { task } from 'ember-concurrency';\nimport { get } from '@ember/object';\n\n@classic\nexport default class New extends Component {\n @service('alert-message')\n alert;\n\n @service\n router;\n\n @service\n intl;\n\n saveInspection = task(\n {\n drop: true,\n },\n async () => {\n let { model, alert, intl } = this;\n if (model.validate()) {\n try {\n let result = await model.save();\n this.alert.success(\n intl.t('generic.success.created', {\n name: result.name,\n })\n );\n this.router.transitionTo('test-inspection-class', get(result, 'id'));\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-test-inspection-class/edit.messages.errors.duplicate')\n );\n }\n }\n } else {\n alert.error(\n intl.t('components.model-test-inspection-class/edit.messages.errors.validation')\n );\n }\n }\n );\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-test-location/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-location/edit.hbs\"}});\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport { service } from '@ember/service';\n\nexport default class ModelTestLocationEditComponent extends Base {\n\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n{{else}}\\n \\n \\n

\\n {{get @selected \\\"name\\\"}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n{{else}}\\n \\n \\n

\\n {{get @selected \\\"name\\\"}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-test-location/lookup-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-location/lookup-create.hbs\"}});\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { isBlank, isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class LookupCreate extends Component {\n @service\n store;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @tracked\n isCreating = false;\n\n @tracked\n error = null;\n\n @notEmpty('error')\n hasError;\n\n @tracked\n testLocations = null;\n\n @tracked\n name = null;\n\n findTestLocations = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return await this.data.listAllTestLocations({}, { name: term });\n }\n );\n\n @action\n search(term) {\n return this.findTestLocations.perform(term);\n }\n\n @action\n setInitialTestLocations() {\n if (isEmpty(this.testLocations)) {\n this.testLocations = this.findTestLocations.perform('');\n }\n }\n\n @action\n showCreateWindow(name) {\n this.isCreating = true;\n this.name = name;\n }\n\n @action\n createTest() {\n this.error = [];\n\n let { store, alertMessage: alert, intl, loading, analytics } = this;\n\n let { name } = this;\n\n if (isEmpty(name)) {\n this.error = intl.t('generic.error.field-required');\n alert.error(intl.t('components.model-test-location/lookup-create.errors.title'));\n return;\n }\n\n let location = store.createRecord('test-location');\n location.name = name;\n loading.block();\n location\n .save()\n .then((newTestLocation) => {\n this.args.onUpdate(newTestLocation);\n alert.success(\n intl.t('components.model-test-location/lookup-create.message.location-created', {\n location: name,\n })\n );\n this.isCreating = false;\n analytics.trackEvent('create-test-location-inline', {\n type: 'test-location',\n category: 'create-inline',\n name,\n });\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-test-location/lookup-create.message.duplicate-location', {\n location: name,\n })\n );\n } else {\n alert.error(\n intl.t('components.model-test-location/lookup-create.message.generic-location-error', {\n location: name,\n })\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.isCreating = true;\n this.name = select.searchText;\n }\n }\n\n @action\n closeWindow() {\n this.isCreating = false;\n this.error = [];\n }\n\n @action\n setName({ target }) {\n let { value } = target;\n this.name = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.canSave)}}\\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-test-stage-name/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-stage-name/edit.hbs\"}});\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport { service } from '@ember/service';\n\nexport default class ModelTestStageNameEditComponent extends Base {\n\n @service\n userSession; \n\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n \\n \\n {{option.name}}\\n \\n \\n {{#if @showDisplayOrderHelp}}\\n

\\n \\n {{t \\\"components.model-test-stage-name/lookup-create.message.stage-name-help\\\"}}\\n

\\n {{/if}}\\n
\\n{{else}}\\n \\n \\n

\\n {{get @selected \\\"name\\\"}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n {{#if @showDisplayOrderHelp}}\\n

\\n \\n {{t\\n \\\"components.model-test-stage-name/lookup-create.message.stage-name-help\\\"\\n }}\\n

\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n \\n \\n {{option.name}}\\n \\n \\n {{#if @showDisplayOrderHelp}}\\n

\\n \\n {{t \\\"components.model-test-stage-name/lookup-create.message.stage-name-help\\\"}}\\n

\\n {{/if}}\\n
\\n{{else}}\\n \\n \\n

\\n {{get @selected \\\"name\\\"}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isCreating}}\\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.hasError}}\\n {{this.error}}\\n {{/if}}\\n {{#if @showDisplayOrderHelp}}\\n

\\n \\n {{t\\n \\\"components.model-test-stage-name/lookup-create.message.stage-name-help\\\"\\n }}\\n

\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-test-stage-name/lookup-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-stage-name/lookup-create.hbs\"}});\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { isBlank, isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class LookupCreate extends Component {\n @service\n store;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @tracked\n isCreating = false;\n\n @tracked\n error = null;\n\n @notEmpty('error')\n hasError;\n\n @tracked\n testStageNames = null;\n\n @tracked\n name = null;\n\n findTestStageNames = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return await this.data.listAllTestStageNames({}, { name: term });\n }\n );\n\n @action\n search(term) {\n return this.findTestStageNames.perform(term);\n }\n\n @action\n setInitialTestStageNames() {\n if (isEmpty(this.testStageNames)) {\n this.testStageNames = this.findTestStageNames.perform('');\n }\n }\n\n @action\n showCreateWindow(name) {\n this.isCreating = true;\n this.name = name;\n }\n\n @action\n createTest() {\n this.error = [];\n\n let { store, alertMessage: alert, intl, loading, analytics } = this;\n\n let { name } = this;\n\n if (isEmpty(name)) {\n this.error = intl.t('generic.error.field-required');\n alert.error(intl.t('components.model-project-client/lookup-create.errors.title'));\n return;\n }\n\n let client = store.createRecord('test-stage-name');\n client.name = name;\n loading.block();\n client\n .save()\n .then((newTestStageName) => {\n this.args.onUpdate(newTestStageName);\n alert.success(\n intl.t('components.model-project/edit.messages.client-created', { client: name })\n );\n this.isCreating = false;\n analytics.trackEvent('create-test-stage-name-inline', {\n type: 'test-stage-name',\n category: 'create-inline',\n name,\n });\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-project/edit.messages.client-error-duplicate', {\n client: name,\n })\n );\n } else {\n alert.error(\n intl.t('components.model-project/edit.messages.client-error-generic', {\n client: name,\n })\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n createOnEnter(select, e) {\n if (e.keyCode === 13 && select.isOpen && !select.highlighted && !isBlank(select.searchText)) {\n this.isCreating = true;\n this.name = select.searchText;\n }\n }\n\n @action\n closeWindow() {\n this.isCreating = false;\n this.error = [];\n }\n\n @action\n setName({ target }) {\n let { value } = target;\n this.name = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{#if this.isRemoving}}\\n {{t \\\"generic.buttons.cancel\\\"}} \\n Really Remove\\n {{else}}\\n {{t \\\"generic.buttons.delete\\\"}}\\n {{/if}}
\\n
\\n
\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{#if this.isRemoving}}\\n {{t \\\"generic.buttons.cancel\\\"}} \\n Really Remove\\n {{else}}\\n {{t \\\"generic.buttons.delete\\\"}}\\n {{/if}}
\\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/model-test-stage/create-test.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-stage/create-test.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, action } from '@ember/object';\n\n@classic\nexport default class CreateNotest extends Component {\n @service('weldnote-data')\n data;\n\n @service\n weldcloudNotesData;\n\n stageBeingRemoved = null;\n\n @notEmpty('stageBeingRemoved')\n isRemoving;\n\n @action\n confirmRemove(stage) {\n if (stage.isNew) {\n this.onRemove(stage);\n return;\n }\n set(this, 'stageBeingRemoved', stage);\n }\n\n @action\n cancelRemove() {\n set(this, 'stageBeingRemoved', null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n
\\n

{{this.stageName}}\\n

\\n
\\n {{#if this.isRemoving}}\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t \\\"components.model-test-stage/inline-edit.buttons.remove-confirm\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-stage/inline-edit.buttons.remove\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @model.tests as |test index|}}\\n \\n {{/each}}\\n \\n \\n \\n {{t \\\"components.model-test-stage/inline-edit.buttons.add-test\\\"}}\\n \\n \\n \\n
\", {\"contents\":\"
\\n
\\n
\\n

{{this.stageName}}\\n

\\n
\\n {{#if this.isRemoving}}\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t \\\"components.model-test-stage/inline-edit.buttons.remove-confirm\\\"}}\\n {{else}}\\n \\n {{t \\\"components.model-test-stage/inline-edit.buttons.remove\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @model.tests as |test index|}}\\n \\n {{/each}}\\n \\n \\n \\n {{t \\\"components.model-test-stage/inline-edit.buttons.add-test\\\"}}\\n \\n \\n \\n
\",\"moduleName\":\"weldnote/components/model-test-stage/inline-edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-test-stage/inline-edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class InlineEdit extends Component {\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @computed('model.name')\n get stageName() {\n let { model } = this;\n let modelName = get(model, 'name');\n if (!isEmpty(modelName)) {\n return get(modelName, 'name');\n }\n return 'New Test Stage';\n }\n\n isRemoving = false;\n\n onRemoveStage() {\n // default no-op\n }\n\n @action\n changeName(name) {\n if (!isEmpty(name)) {\n set(this, 'model.name', name);\n this.model.save();\n }\n }\n\n @action\n updateLocation(location) {\n set(this, 'model.location', location);\n this.model.save();\n }\n\n @action\n addTestStage() {\n let newTest = this.store.createRecord('test-stage-test', {\n testStage: this.model,\n });\n get(this, 'model.tests').pushObject(newTest);\n }\n\n @action\n onRemove(test) {\n let { model, alert, loading } = this;\n let testName = get(test, 'typeOfTest.designation');\n get(model, 'tests').removeObject(test);\n if (!test.isNew) {\n loading.block();\n try {\n test.destroyRecord();\n } catch (reason) {\n test.rollbackAttributes();\n console.log(reason);\n } finally {\n loading.unblock();\n }\n }\n alert.success(`Removed ${testName} successfully`);\n }\n\n @action\n removeStage() {\n set(this, 'isRemoving', false);\n this.onRemoveStage(this.model);\n }\n\n @action\n confirmRemove() {\n set(this, 'isRemoving', true);\n }\n\n @action\n cancelRemove() {\n set(this, 'isRemoving', false);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-type-current-polarity/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-type-current-polarity/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.canUserEdit}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.canEdit (not this.weldLayer.isNew) this.canCreateGrooveDesign)}}\\n \\n \\n Create Groove Design\\n \\n \\n {{/if}}\\n {{#if (and (not this.weldLayer.isNew) this.canUserEdit)}}\\n \\n {{/if}}\\n\\n {{#unless this.canEdit}}\\n
\\n \\n {{t \\\"components.model-weld-layer-configuration.messages.system-design\\\"}}\\n \\n
\\n {{/unless}}\\n\\n {{#if this.showMissingValuesMessage}}\\n
\\n \\n {{t \\\"components.model-weld-layer-configuration.messages.fill-all-details\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isShowingCreateGrooveDesign}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{yield}}\\n \\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n {{t \\\"components.model-weld-layer-configuration.buttons.create-groove-design\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if (has-value this.deleteErrors)}}\\n \\n {{t \\\"components.model-weld-layer-configuration.errors.text-message\\\"}}\\n
    \\n {{#each this.deleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"WPS\\\")}}\\n \\n {{t \\\"components.model-weld-layer-configuration.errors.wps-prevent-deletion\\\"}}:\\n {{error.label}}\\n \\n {{else if (eq error.type \\\"PQR\\\")}}\\n \\n {{t \\\"components.model-weld-layer-configuration.errors.pqr-prevent-deletion\\\"}}:\\n {{error.label}}\\n \\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n \\n {{else}}\\n {{t \\\"components.confirm-delete-modal.text\\\"}}\\n {{/if}}\\n
\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.isMissingDetails}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.select-layer-and-sides\\\"}}\\n \\n
\\n {{/if}}\\n \\n
\\n
\\n \\n \\n {{detail.label}}\\n \\n \\n
\\n \\n \\n \\n \\n \\n {{#if (and (has-value this.weldLayer.upload.id) (not this.weldLayer.isNew) this.canUserEdit)}}\\n \\n \\n
\\n \\n \\n {{t \\\"components.model-weld-layer-configuration.buttons.edit-image\\\"}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n
\\n \\n \\n
\\n {{#each this.weldLayer.errors.upload as |error|}}\\n
\\n {{error.message}}\\n
\\n {{/each}}\\n
\\n
\\n \\n
\\n\\n{{#if this.showEditor}}\\n \\n
\\n
\\n {{t \\\"components.model-weld-layer-configuration.title.edit-image\\\"}}\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n\\n {{#if this.canUserEdit}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.canEdit (not this.weldLayer.isNew) this.canCreateGrooveDesign)}}\\n \\n \\n Create Groove Design\\n \\n \\n {{/if}}\\n {{#if (and (not this.weldLayer.isNew) this.canUserEdit)}}\\n \\n {{/if}}\\n\\n {{#unless this.canEdit}}\\n
\\n \\n {{t \\\"components.model-weld-layer-configuration.messages.system-design\\\"}}\\n \\n
\\n {{/unless}}\\n\\n {{#if this.showMissingValuesMessage}}\\n
\\n \\n {{t \\\"components.model-weld-layer-configuration.messages.fill-all-details\\\"}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isShowingCreateGrooveDesign}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{yield}}\\n \\n \\n
\\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n {{t \\\"components.model-weld-layer-configuration.buttons.create-groove-design\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if (has-value this.deleteErrors)}}\\n \\n {{t \\\"components.model-weld-layer-configuration.errors.text-message\\\"}}\\n
    \\n {{#each this.deleteErrors as |error|}}\\n
  • \\n {{#if (eq error.type \\\"WPS\\\")}}\\n \\n {{t \\\"components.model-weld-layer-configuration.errors.wps-prevent-deletion\\\"}}:\\n {{error.label}}\\n \\n {{else if (eq error.type \\\"PQR\\\")}}\\n \\n {{t \\\"components.model-weld-layer-configuration.errors.pqr-prevent-deletion\\\"}}:\\n {{error.label}}\\n \\n {{/if}}\\n
  • \\n {{/each}}\\n
\\n \\n {{else}}\\n {{t \\\"components.confirm-delete-modal.text\\\"}}\\n {{/if}}\\n
\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.isMissingDetails}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.select-layer-and-sides\\\"}}\\n \\n
\\n {{/if}}\\n \\n
\\n
\\n \\n \\n {{detail.label}}\\n \\n \\n
\\n \\n \\n \\n \\n \\n {{#if (and (has-value this.weldLayer.upload.id) (not this.weldLayer.isNew) this.canUserEdit)}}\\n \\n \\n
\\n \\n \\n {{t \\\"components.model-weld-layer-configuration.buttons.edit-image\\\"}}\\n \\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n
\\n \\n \\n
\\n {{#each this.weldLayer.errors.upload as |error|}}\\n
\\n {{error.message}}\\n
\\n {{/each}}\\n
\\n
\\n \\n
\\n\\n{{#if this.showEditor}}\\n \\n
\\n
\\n {{t \\\"components.model-weld-layer-configuration.title.edit-image\\\"}}\\n
\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n
\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-weld-layer-configuration/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-weld-layer-configuration/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/weld-layer-configuration-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\nimport Constants from 'weldnote/utils/constants';\nimport { getProperties, set, get, action, computed } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELD_LAYER_CONFIGURATION } = Rules;\nconst { WELD_TYPES, FILE_CONTEXT } = Constants;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter, SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n store;\n\n @service\n fileService;\n\n @service\n loading;\n\n @service\n ajax;\n\n @service\n router;\n\n @alias('data.schematicsWeldTypeOptions')\n weldTypeOptions;\n\n @alias('data.weldTypeOptions')\n realWeldTypeOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.grooveShapeOptions')\n grooveShapeOptions;\n\n @alias('data.jointTypeOptions')\n jointTypeOptions;\n\n @alias('model')\n weldLayer;\n\n @tracked\n showEditor = false;\n\n @computed('weldLayer.weldingDetails')\n get isMissingDetails() {\n let { weldLayer } = this;\n if (!isEmpty(weldLayer.weldingDetails)) {\n let { weldingDetails } = weldLayer;\n let layers = weldingDetails.filter((d) => {\n let { shortDesignation } = d;\n return shortDesignation === 'sl' || shortDesignation === 'ml';\n });\n let sides = weldingDetails.filter((d) => {\n let { shortDesignation } = d;\n return (\n shortDesignation === 'ss mb' ||\n shortDesignation === 'ss gb' ||\n shortDesignation === 'ss fb' ||\n shortDesignation === 'bs' ||\n shortDesignation === 'ss nb'\n );\n });\n return isEmpty(layers) || isEmpty(sides);\n }\n return true;\n }\n\n get canUserEdit() {\n if (!this.canEdit) {\n return false;\n }\n if (get(this.weldLayer, 'isNew')) {\n return this.userSession.canCreateWeldSketch;\n }\n return this.userSession.canEditWeldSketch(get(this.weldLayer, 'createdById'));\n }\n\n @computed('weldLayer.{weldingDetails,weldTypes,grooveType,jointType}', 'canEdit')\n get showMissingValuesMessage() {\n let { weldLayer, canEdit } = this;\n if (!canEdit) {\n return false;\n }\n\n let { weldingDetails, weldTypes, grooveType, jointType, isNew } = getProperties(\n weldLayer,\n 'weldingDetails',\n 'weldTypes',\n 'grooveType',\n 'jointType'\n );\n return (\n isEmpty(grooveType) || isEmpty(jointType) || isEmpty(weldingDetails) || isEmpty(weldTypes)\n );\n }\n\n @computed('weldLayer.weldTypes.[]')\n get selectedWeldTypes() {\n let { weldTypes } = this.weldLayer;\n let result = [];\n weldTypes.forEach((type) => {\n let { weldType } = type;\n if (\n weldType === WELD_TYPES.BUTT_WELD ||\n weldType === WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD\n ) {\n if (!result.findBy('id', 'butt-weld')) {\n result.pushObject({\n id: 'butt-weld',\n label: 'Full Penetration Butt Weld',\n });\n }\n }\n if (weldType === WELD_TYPES.FILLET_WELD) {\n if (!result.findBy('id', 'fillet-weld')) {\n result.pushObject({\n id: 'fillet-weld',\n label: 'Fillet Weld',\n });\n }\n }\n if (weldType === WELD_TYPES.BRANCH_CONNECTION) {\n if (!result.findBy('id', 'branch-connection')) {\n result.pushObject({\n id: 'branch-connection',\n label: 'Branch Connection',\n });\n }\n }\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (!result.findBy('id', 'overlay-weld')) {\n result.pushObject({\n id: 'overlay-weld',\n label: 'Overlay Weld',\n });\n }\n }\n if (\n weldType === WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD ||\n weldType === WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD\n ) {\n if (!result.findBy('id', 'partial-butt-weld')) {\n result.pushObject({\n id: 'partial-butt-weld',\n label: 'Partial Penetration Butt Weld',\n });\n }\n }\n });\n return result;\n }\n\n @computed('weldLayer.{isNew,upload,renderedImagePath}')\n get previewLink() {\n let { weldLayer } = this;\n let isNew = get(weldLayer, 'isNew');\n if (isNew) {\n return get(weldLayer, 'upload.downloadPath');\n } else {\n return get(weldLayer, 'renderedImagePath');\n }\n }\n\n get canCreateGrooveDesign() {\n if (!this.canEdit) {\n return false;\n }\n\n if (!this.userSession.canCreateWeldSketch) {\n return false;\n }\n\n if (get(this.weldLayer, 'isNew')) {\n return false;\n }\n\n if (get(this.weldLayer, 'imageSituation') === 'CUSTOMIZED') {\n return false;\n }\n\n return true;\n }\n\n saveImage = task(\n {\n drop: true,\n },\n async ({ state, image }) => {\n let { store, weldLayer, loading } = this;\n loading.block();\n\n let imageId = get(weldLayer, 'upload.id');\n let renderedImageId = get(weldLayer, 'renderedImage.id');\n\n if (imageId === renderedImageId) {\n let upload = await this.fileService.uploadNewBase64Image.perform(\n get(weldLayer, 'description'),\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n weldLayer.set('renderedImage', upload);\n } else {\n let upload = await store.findRecord('file-upload', get(weldLayer, 'renderedImage.id'));\n await this.fileService.updateExistingBase64Image.perform(\n get(upload, 'id'),\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n // Need to update the saved time on this, for backend\n await upload.save();\n }\n set(weldLayer, 'imageState', JSON.stringify(state));\n await weldLayer.save();\n await weldLayer.reload();\n\n this.showEditor = false;\n loading.unblock();\n }\n );\n\n createGrooveDesign = task(\n {\n drop: true,\n },\n async () => {\n let {\n weldLayer,\n loading,\n router,\n grooveDesignFromCopy,\n store,\n alertMessage,\n description,\n longDescription,\n } = this;\n\n if (isEmpty(description) || isEmpty(longDescription)) {\n alertMessage.error('Both fields are required');\n if (isEmpty(description)) {\n set(this, 'descriptionErrors', [{ message: 'Field is required' }]);\n }\n if (isEmpty(longDescription)) {\n set(this, 'longDescriptionErrors', [{ message: 'Field is required' }]);\n }\n return;\n }\n\n if (!grooveDesignFromCopy) {\n grooveDesignFromCopy = store.createRecord('groove-design-weld-layer-copy');\n set(this, 'grooveDesignFromCopy', grooveDesignFromCopy);\n }\n set(grooveDesignFromCopy, 'description', description);\n set(grooveDesignFromCopy, 'longDescription', longDescription);\n set(grooveDesignFromCopy, 'weldLayerConfiguration', weldLayer);\n try {\n loading.block();\n let myWeldLayer = await grooveDesignFromCopy.save();\n router.transitionTo('groove-design', myWeldLayer.id);\n store.unloadRecord(myWeldLayer);\n store.unloadRecord(grooveDesignFromCopy);\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alertMessage.error('There is already a Groove Design with that name');\n } else if (isPermissionDenied(reason)) {\n alertMessage.error('Sorry you cannot do that');\n } else {\n alertMessage.error('unknown error');\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n @action\n setWeldTypes(values) {\n let weldTypes = values;\n let { realWeldTypeOptions } = this;\n let result = [];\n this.setModelCollection(WELD_LAYER_CONFIGURATION.WELD_TYPES, []);\n\n weldTypes.forEach((type) => {\n if (type.id === 'butt-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'fillet-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.FILLET_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'branch-connection') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.BRANCH_CONNECTION)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'overlay-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.OVERLAY_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'partial-butt-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n }\n });\n this.setModelCollection(WELD_LAYER_CONFIGURATION.WELD_TYPES, result);\n }\n\n @action\n saveModel() {\n if (!isEmpty(this.get('model.upload.filePath'))) {\n // TODO: This call to super is within an action, and has to refer to the parent\n // class's actions to be safe. This should be refactored to call a normal method\n // on the parent class. If the parent class has not been converted to native\n // classes, it may need to be refactored as well. See\n // https: //github.com/scalvert/ember-native-class-codemod/blob/master/README.md\n // for more details.\n super.actions.saveModel.call(this, ...arguments);\n } else {\n this.model.validate();\n this.alertMessage.error(\n this.intl.t('components.model-weld-layer-configuration.messages.image-required')\n );\n }\n }\n\n @action\n editImage(type) {\n this.showEditor = true;\n this.type = type;\n }\n\n @action\n async imageUploaded(fileUpload) {\n set(this.weldLayer, 'renderedImage', fileUpload);\n this.saveModel();\n\n let drawEditions = get(this.weldLayer, 'imageState');\n if (drawEditions) {\n let drawEditions = JSON.parse(get(this.weldLayer, 'imageState'));\n let hasDrawingsOverBaseImage =\n drawEditions.operations?.filter((o) => o.type === 'sprite')[0].options?.sprites?.length > 0;\n if (hasDrawingsOverBaseImage) {\n // we should be able to immediatly show the editor, but for some reason\n // if we don't wait a bit, sometimes we get an error stating the image is\n // not available.\n await timeout(333);\n this.showEditor = true;\n }\n }\n }\n\n @action\n deleteLayer() {\n let { weldLayer, loading, alertMessage: alert, intl, ajax } = this;\n\n loading.block();\n ajax\n .put(`/weld-layer-configurations/${get(weldLayer, 'id')}/canDelete`)\n .then(() => {\n set(this, 'deleteErrors', null);\n set(this, 'isShowingModal', false);\n this.actions.deleteModel.call(this);\n })\n .catch(({ payload }) => {\n alert.error(intl.t('components.model-weld-layer-configuration.errors.alert-message'));\n set(this, 'deleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n cancelCreateGrooveDesign() {\n set(this, 'isShowingCreateGrooveDesign', false);\n set(this, 'descriptionErrors', []);\n set(this, 'longDescriptionErrors', []);\n }\n\n @action\n confirmCreateGrooveDesign() {\n set(this, 'isShowingCreateGrooveDesign', true);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n {{this.model.errors.messages}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n {{this.model.errors.messages}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-weld-type/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-weld-type/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n weldType;\n}\n","import { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport IntlService from 'ember-intl/services/intl';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WopqApprovalRange from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-approval-range';\nimport {\n AutomaticArcVoltageControl,\n WelderCertificateTestPieceValues,\n WelderOperatorTypes,\n} from 'weldnote/src-weldnote/wopq/types';\n\ninterface ModelWelderCertificateArcLengthControlApprovalRangeArgs {\n arcLengthControl: AutomaticArcVoltageControl | null;\n certificate: WelderCertificate;\n approvalRange: WopqApprovalRange;\n process: string;\n}\n\nexport default class ModelWelderCertificateArcLengthControlApprovalRange extends Component {\n @service\n declare intl: IntlService;\n\n constructor(owner: unknown, args: ModelWelderCertificateArcLengthControlApprovalRangeArgs) {\n super(owner, args);\n }\n\n get value(): string {\n if (this.args.arcLengthControl) {\n let result = '';\n let possibleArcLength = WelderOperatorTypes.arcVoltageControlFromString(\n this.args.arcLengthControl\n );\n if (possibleArcLength.isPresent()) {\n let arcLengthValue = possibleArcLength.get();\n let possibleProcess = WelderOperatorTypes.processFromString(this.args.process);\n let process = null;\n if (possibleProcess.isEmpty()) {\n return result;\n } else {\n process = possibleProcess.get();\n }\n let testPieces = new WelderCertificateTestPieceValues(this.args.certificate, process);\n let approvalRange = this.args.approvalRange.automaticVoltageControl(\n arcLengthValue,\n testPieces\n );\n result = approvalRange\n .map((t) => {\n if (t === AutomaticArcVoltageControl.WITH) {\n return this.intl.t('lov.arc-voltage.with');\n } else if (t === AutomaticArcVoltageControl.WITHOUT) {\n return this.intl.t('lov.arc-voltage.without');\n }\n return '';\n })\n .join('+');\n return result;\n }\n }\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#unless @certificate.isArchived}}\\n {{#if (gt (get @supportingWelds \\\"length\\\") 0)}}\\n \\n
\\n {{#if @certificate.automaticRenewal}}\\n
\\n \\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.automatic-renewal\\\"\\n }}\\n

\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.renew-on\\\"\\n date=(format-date date=@deadline format=this.dateFormat)\\n }}\\n

\\n
\\n
\\n {{else}}\\n
\\n \\n
\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}\\n

\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n

\\n
\\n
\\n {{/if}}\\n
\\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"\\n }}

\\n
    \\n {{#each @supportingWelds as |weld|}}\\n
  • \\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n
  • \\n {{/each}}\\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n \\n {{else if @certificate.automaticRenewal}}\\n
\\n
\\n \\n
\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.cannot-renew\\\"}}\\n

\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.could-not-find-activity\\\"\\n }}\\n

\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.expire-on\\\"\\n date=(format-date date=@deadline format=this.dateFormat)\\n }}\\n

\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n{{/unless}}\", {\"contents\":\"{{#unless @certificate.isArchived}}\\n {{#if (gt (get @supportingWelds \\\"length\\\") 0)}}\\n \\n
\\n {{#if @certificate.automaticRenewal}}\\n
\\n \\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.automatic-renewal\\\"\\n }}\\n

\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.renew-on\\\"\\n date=(format-date date=@deadline format=this.dateFormat)\\n }}\\n

\\n
\\n
\\n {{else}}\\n
\\n \\n
\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}\\n

\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n

\\n
\\n
\\n {{/if}}\\n
\\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"\\n }}

\\n
    \\n {{#each @supportingWelds as |weld|}}\\n
  • \\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n
  • \\n {{/each}}\\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n \\n {{else if @certificate.automaticRenewal}}\\n
\\n
\\n \\n
\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.cannot-renew\\\"}}\\n

\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.could-not-find-activity\\\"\\n }}\\n

\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.expire-on\\\"\\n date=(format-date date=@deadline format=this.dateFormat)\\n }}\\n

\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n{{/unless}}\",\"moduleName\":\"weldnote/components/model-welder-certificate/auto-renewal-status.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/auto-renewal-status.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport ENV from 'weldnote/config/environment';\nimport UserSessionService from 'weldnote/services/user-session';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport AlertMessageService from 'weldnote/services/alert-message';\nimport { task } from 'ember-concurrency';\nimport type IntlService from 'ember-intl/services/intl';\n\ninterface AutoRenewalStatusArgs {\n certificate: WelderCertificate;\n supportingWeldsRefreshed?: () => void;\n}\n\nexport default class AutoRenewalStatus extends Component {\n @service('user-session')\n declare userSession: UserSessionService;\n\n @service('alert-message')\n declare alertMessage: AlertMessageService;\n\n @service\n declare intl: IntlService;\n\n get dateFormat() {\n return this.userSession.dateFormat;\n }\n\n get esabCloudLink() {\n return ENV.esabCloudLink;\n }\n\n refreshSupportingWelds = task(\n {\n drop: true,\n },\n async () => {\n try {\n await this.args.certificate.refreshSupportingWelds({});\n await this.args.supportingWeldsRefreshed?.();\n this.alertMessage.success(\n this.intl.t(\n 'components.model-welder-certificate/edit.messages.auto-renewal.refresh-success'\n )\n );\n } catch (error) {\n this.alertMessage.error(\n this.intl.t(\n 'components.model-welder-certificate/edit.messages.auto-renewal.refresh-error'\n )\n );\n }\n }\n );\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-welder-certificate/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welder-certificate/confirm-delete.messages.suggest-archive\\\"\\n }}

\\n

{{t\\n \\\"components.model-welder-certificate/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-welder-certificate/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welder-certificate/confirm-delete.messages.suggest-archive\\\"\\n }}

\\n

{{t\\n \\\"components.model-welder-certificate/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welder-certificate/confirm-delete.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/confirm-delete.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport Component from '@ember/component';\n\n@classic\nexport default class ConfirmDelete extends Component {\n @action\n archiveCertificate() {\n this.onArchive(this.onArchiveCallback);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.isEditing}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/non-destructive-testing-table.test\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.results\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report\\\"\\n }}
{{t \\\"components.model-welder-certificate/destructive-tests.tensile-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.bend-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.macrographic-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.impact-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.fracture-test\\\"}}\\n \\n \\n \\n \\n \\n
\\n{{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not (is-empty-attribute this.certificate.tensileTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.bendTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.macrographicTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.impactTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.fractureTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t \\\"components.model-pqr/non-destructive-testing-table.test\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.results\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report\\\"}}
{{t \\\"components.model-welder-certificate/destructive-tests.tensile-test\\\"}}\\n {{this.certificate.tensileTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.tensileTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.bend-test\\\"}}\\n {{this.certificate.bendTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.bendTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.macrographic-test\\\"}}\\n {{this.certificate.macrographicTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.macrographicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.impact-test\\\"}}\\n {{this.certificate.impactTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.impactTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.fracture-test\\\"}}\\n {{this.certificate.fractureTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.fractureTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if this.isEditing}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/non-destructive-testing-table.test\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.results\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report\\\"\\n }}
{{t \\\"components.model-welder-certificate/destructive-tests.tensile-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.bend-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.macrographic-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.impact-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/destructive-tests.fracture-test\\\"}}\\n \\n \\n \\n \\n \\n
\\n{{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not (is-empty-attribute this.certificate.tensileTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.bendTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.macrographicTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.impactTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (not (is-empty-attribute this.certificate.fractureTestNumber))}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t \\\"components.model-pqr/non-destructive-testing-table.test\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.results\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report\\\"}}
{{t \\\"components.model-welder-certificate/destructive-tests.tensile-test\\\"}}\\n {{this.certificate.tensileTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.tensileTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.bend-test\\\"}}\\n {{this.certificate.bendTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.bendTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.macrographic-test\\\"}}\\n {{this.certificate.macrographicTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.macrographicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.impact-test\\\"}}\\n {{this.certificate.impactTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.impactTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/destructive-tests.fracture-test\\\"}}\\n {{this.certificate.fractureTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.fractureTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welder-certificate/destructive-tests.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/destructive-tests.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class DestructiveTests extends Component {\n @service('weldnote-data')\n data;\n\n @alias('model')\n certificate;\n\n @alias('data.testResultOptions')\n testResultOptions;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n
\\n \\n \\n {{#if this.hasCertificateError}}\\n {{this.certificateError}}\\n {{/if}}\\n
\\n
\\n \\n \\n {{welder.welderName}}\\n ({{welder.welderStamp}})\\n \\n \\n
\\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n {{#if this.showUnitSystemMessage}}\\n
\\n \\n {{t \\\"components.model-pqr/duplicate.messages.new-unit-system\\\"}}\\n \\n
\\n {{/if}}\\n
\\n \\n \\n \\n {{t \\\"components.model-welder-certificate/duplicate.create-certificate-button\\\"}}\\n \\n\", {\"contents\":\"\\n \\n \\n \\n
\\n \\n \\n {{#if this.hasCertificateError}}\\n {{this.certificateError}}\\n {{/if}}\\n
\\n
\\n \\n \\n {{welder.welderName}}\\n ({{welder.welderStamp}})\\n \\n \\n
\\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n {{#if this.showUnitSystemMessage}}\\n
\\n \\n {{t \\\"components.model-pqr/duplicate.messages.new-unit-system\\\"}}\\n \\n
\\n {{/if}}\\n
\\n \\n \\n \\n {{t \\\"components.model-welder-certificate/duplicate.create-certificate-button\\\"}}\\n \\n\",\"moduleName\":\"weldnote/components/model-welder-certificate/duplicate.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/duplicate.hbs\"}});\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action, get } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class Duplicate extends Component {\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @tracked\n certificateNumber = null;\n\n @tracked\n welder = null;\n\n @tracked\n welderError = null;\n\n @tracked\n certificateError = null;\n\n @tracked\n selectedUnitSystem = null;\n\n constructor() {\n super(...arguments);\n if (this.args.certificate) {\n let unitSystem = this.args.certificate.unitSystem;\n if (!isEmpty(unitSystem)) {\n const option = this.notesData.getUnitSystem(unitSystem);\n if (option) {\n this.selectedUnitSystem = option;\n }\n }\n }\n }\n\n get showUnitSystemMessage() {\n if (this.selectedUnitSystem) {\n if (this.selectedUnitSystem.key !== this.args.certificate.unitSystem) {\n return true;\n }\n }\n return false;\n }\n\n searchWelder = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n let data = await this.data.findWelderByName(term);\n return data;\n },\n );\n\n @notEmpty('certificateError')\n hasCertificateError;\n\n hasErrors() {\n let { intl, certificateNumber } = this;\n let hasError = false;\n if (isEmpty(certificateNumber)) {\n this.certificateError = intl.t(\n 'components.model-welder-certificate/duplicate.certificate-required',\n );\n hasError = true;\n } else {\n this.certificateError = null;\n }\n let welderId = get(this, 'welder.id');\n if (isEmpty(welderId)) {\n (this.welderError = intl.t('components.model-welder-certificate/duplicate.welder-required')),\n (hasError = true);\n } else {\n this.welderError = null;\n }\n return hasError;\n }\n\n @action\n createCertificate() {\n let { certificateNumber, welder, alert, intl } = this;\n if (!this.hasErrors()) {\n this.args.onSave({\n certificateNumber,\n welder: get(welder, 'id'),\n unitSystem: this.selectedUnitSystem.key,\n });\n } else {\n alert.error(intl.t('components.model-welder-certificate/duplicate.error-message-warning'));\n }\n }\n\n @action\n setCertificateNumber(newValue) {\n this.certificateNumber = newValue;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

{{this.title}}\\n ({{this.certificate.standard.standard}})\\n {{this.subtitle}}\\n

\\n \\n\\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.userSession.canCreateCertificate}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n {{#if\\n (and\\n (not this.certificate.isArchived)\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n this.userSession.canRevalidateCertificate\\n )\\n )\\n }}\\n {{#if\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n )\\n }}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n
    \\n {{#if this.userSession.canDeleteCertificate}}\\n
  • \\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateCertificate}}\\n
  • \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.duplicate-button\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n {{#if this.userSession.canArchiveCertificate}}\\n
  • \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.isExpiringInLessThan30Days}}\\n {{#if this.showExternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-externally\\\"}}\\n \\n \\n {{else if this.showInternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-internally\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.userSession.canArchiveCertificate}}\\n {{#if this.certificate.isArchived}}\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.canShowCreateButton}}\\n \\n {{t \\\"components.model-welder-certificate/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.exporting-welder-certificate\\\"\\n }}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.certificate\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#if (not (is-empty-attribute task.currentTask.value))}}- {{/if}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.preparing-link\\\"\\n }}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.export-pdf.buttons.close\\\"}}\\n \\n
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.certificate.isArchived}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.messages.certificate-is-archived\\\"}}\\n \\n
\\n {{else}}\\n {{#if this.isExternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.externaly-expired\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isInternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expired\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isExpiringExternallyLess30Days}}\\n
\\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.expiring-externally-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}

\\n {{#if (gt (get this.certificate.externalAutoRenewSupportingWelds \\\"length\\\") 0)}}\\n {{#if this.certificate.automaticRenewal}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.will-be-renewed\\\"\\n }}

\\n {{else}}\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}.\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n

\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{else if this.isExpiringInternallyLess30Days}}\\n
\\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expire-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}

\\n {{#if (gt (get this.certificate.internalAutoRenewSupportingWelds \\\"length\\\") 0)}}\\n {{#if this.certificate.automaticRenewal}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.will-be-renewed\\\"\\n }}

\\n {{else}}\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}.\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n

\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{/if}}\\n\\n
\\n
\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n {{#if this.hasCertificateDeleteErrors}}\\n \\n {{#each this.certificateDeleteErrors as |error|}}\\n
    \\n
  • \\n {{#if (eq error.type \\\"project\\\")}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.delete.errors.project-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{/if}}\\n
  • \\n
\\n {{/each}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.isShowingDuplicateModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.archive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevalidateInternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isCertificateASME}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.internally.button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevalidateExternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.externally.button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showInternalRevalidationSurpassesExternalDeadlineSingle}}\\n \\n {{#if this.showConfirmRevalidateInternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n \\n \\n \\n {{else if this.showConfirmRevalidateExternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.help-message\\\"\\n dayCount=this.errorData.daysToExternalExpire\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n {{/if}}\\n \\n{{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
\\n \\n
\\n
\\n {{#if this.showValidationTab}}\\n \\n {{#if this.isStandardWithExternalDates}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (and this.isExpiringInternallyLess30Days (not this.isExpiringExternallyLess30Days))\\n }}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isExpiringExternallyLess30Days}}\\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (and this.isExpiringInternallyLess30Days (not this.isExpiringExternallyLess30Days))\\n }}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.showExternalRequalificationDate}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isExpiringExternallyLess30Days}}\\n \\n {{/if}}\\n {{/if}}\\n\\n {{/if}}\\n \\n\\n
\\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.details\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showDetailsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.input}}\\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n {{lov.input}}\\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n {{lov.input}}\\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n {{#if this.showSupplementaryFilletWeldTest}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n {{#if this.isNotStandardISO}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{this.processNames.process1}}\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n {{this.processNames.process2}}\\n \\n {{t \\\"certificate-edit.welding-position-direction\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n {{this.processNames.process3}}\\n \\n {{t \\\"certificate-edit.welding-position-direction\\\"}}\\n \\n \\n {{/if}}\\n
\\n \\n {{t\\n \\\"certificate-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n \\n \\n \\n
\\n \\n \\n \\n
\\n {{else}}\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showTypeOfCurrent}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showWeldingDetailJointSensor}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n \\n {{#if this.media.isMobile}}\\n \\n \\n {{t \\\"generic.welding.approval-range\\\"}}
\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n
\\n \\n

{{this.overlayTypeLabel}}

\\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n \\n {{#if this.showSupplementaryFilletWeldTest}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showTypeOfCurrent}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showWeldingDetailJointSensor}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{/if}}\\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showBaseMaterialsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-welder-certificate/edit.base-material1\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.dissimilar-materials\\\"}}\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n
\\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n {{#if this.media.isMobile}}\\n \\n \\n {{t \\\"generic.welding.approval-range\\\"}}
\\n \\n \\n {{/if}}\\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-welder-certificate/edit.base-material1\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n {{option.visualLabel}}\\n \\n
\\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n {{#if this.isPartialPenetrationButtWeld}}\\n \\n
\\n \\n

\\n \\n

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

\\n \\n

\\n
\\n
\\n {{else}}\\n \\n \\n \\n {{/if}}\\n
\\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n {{#if this.isPartialPenetrationButtWeld}}\\n \\n
\\n \\n

\\n \\n

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

\\n \\n

\\n
\\n
\\n {{else}}\\n \\n \\n \\n {{/if}}\\n
\\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n \\n \\n {{#unless this.hasOnlyRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n
\\n
\\n
\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isLayerSumBiggerThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-bigger-than-total\\\"\\n difference=this.rootFillCapDifference\\n differencePercent=this.rootFillCapDifferencePercentage\\n unit=this.distanceUnit\\n }}\\n

\\n
\\n {{else}}\\n {{#if this.isLayerSumLessThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-less-than-total\\\"\\n difference=this.rootFillCapDifferencePositive\\n unit=this.distanceUnit\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n \\n
\\n {{/unless}}\\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n {{#if this.canShowConsumablesTab}}\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n \\n {{else}}\\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.tests\\\")}}\\n \\n \\n {{/if}}\\n
\\n {{/if}}\\n {{#if this.showConsumablesTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.media.isMobile}}\\n \\n \\n {{t \\\"generic.welding.approval-range\\\"}}
\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n \\n \\n\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n\\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.tests\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showTestsTab}}\\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n {{#if this.hasRevalidations}}\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.revalidations\\\")\\n }}\\n \\n \\n {{/if}}\\n
\\n {{/if}}\\n {{#if this.showRevalidationsTab}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#each this.internalRevalidations as |revalidation|}}\\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.internal-revalidation-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.deadline-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.responsible\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence1\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence2\\\"\\n }}{{t \\\"generic.buttons.actions\\\"}}
{{format-date\\n date=revalidation.previousDate\\n format=this.userSession.dateFormat\\n }}\\n {{format-date\\n date=revalidation.nextDate\\n format=this.userSession.dateFormat\\n }}\\n {{revalidation.revalidator}}\\n \\n ({{format-date\\n date=revalidation.dateOfRevalidation\\n format=this.userSession.dateFormat\\n }})\\n \\n \\n {{#each revalidation.supportingWelds as |weld|}}\\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n {{/each}}\\n \\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report1\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report1\\\"\\n }}\\n {{#if (has-value revalidation.report1Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report2\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report2\\\"\\n }}\\n {{#if (has-value revalidation.report2Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if\\n (and this.isEditing (eq revalidation.id this.latestInternalRevalidation.id))\\n }}\\n \\n \\n \\n \\n {{/if}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.empty-internal-revalidations\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#each this.externalRevalidations as |revalidation|}}\\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.external-revalidation-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.deadline-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.responsible\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence1\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence2\\\"\\n }}{{t \\\"generic.buttons.actions\\\"}}
{{format-date\\n date=revalidation.previousDate\\n format=this.userSession.dateFormat\\n }}\\n {{format-date\\n date=revalidation.nextDate\\n format=this.userSession.dateFormat\\n }}\\n \\n {{revalidation.revalidator}}\\n \\n ({{format-date\\n date=revalidation.dateOfRevalidation\\n format=this.userSession.dateFormat\\n }})\\n \\n \\n {{#each revalidation.supportingWelds as |weld|}}\\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n {{/each}}\\n \\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report1\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report1\\\"\\n }}\\n {{#if (has-value revalidation.report1Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report2\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report2\\\"\\n }}\\n {{#if (has-value revalidation.report2Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if\\n (and this.isEditing (eq revalidation.id this.latestExternalRevalidation.id))\\n }}\\n \\n \\n \\n \\n {{/if}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.empty-external-revalidations\\\"\\n }}
\\n \\n\\n {{#if this.isAddingReport1}}\\n \\n {{/if}}\\n {{#if this.isAddingReport2}}\\n \\n {{/if}}\\n {{#if this.isRemovingReport1}}\\n \\n \\n
\\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.messages.remove-warning-message\\\"\\n }}\\n

\\n
\\n
\\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.remove-report\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.isRemovingReport2}}\\n \\n \\n
\\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.messages.remove-warning-message\\\"\\n }}\\n

\\n
\\n
\\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.remove-report\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.isDeletingRevalidation}}\\n \\n \\n
\\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.messages.delete-warning-message\\\"\\n }}\\n

\\n
\\n
\\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t \\\"generic.buttons.delete\\\"}}\\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{! End Revalidation Tab }}\\n \\n \\n \\n\\n
\", {\"contents\":\"
\\n
\\n

{{this.title}}\\n ({{this.certificate.standard.standard}})\\n {{this.subtitle}}\\n

\\n \\n\\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.userSession.canCreateCertificate}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n {{#if\\n (and\\n (not this.certificate.isArchived)\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n this.userSession.canRevalidateCertificate\\n )\\n )\\n }}\\n {{#if\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n )\\n }}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n
    \\n {{#if this.userSession.canDeleteCertificate}}\\n
  • \\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateCertificate}}\\n
  • \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.duplicate-button\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n {{#if this.userSession.canArchiveCertificate}}\\n
  • \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.isExpiringInLessThan30Days}}\\n {{#if this.showExternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-externally\\\"}}\\n \\n \\n {{else if this.showInternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-internally\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.userSession.canArchiveCertificate}}\\n {{#if this.certificate.isArchived}}\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.canShowCreateButton}}\\n \\n {{t \\\"components.model-welder-certificate/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.exporting-welder-certificate\\\"\\n }}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.certificate\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#if (not (is-empty-attribute task.currentTask.value))}}- {{/if}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.preparing-link\\\"\\n }}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.export-pdf.buttons.close\\\"}}\\n \\n
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.certificate.isArchived}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.messages.certificate-is-archived\\\"}}\\n \\n
\\n {{else}}\\n {{#if this.isExternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.externaly-expired\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isInternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expired\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isExpiringExternallyLess30Days}}\\n
\\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.expiring-externally-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}

\\n {{#if (gt (get this.certificate.externalAutoRenewSupportingWelds \\\"length\\\") 0)}}\\n {{#if this.certificate.automaticRenewal}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.will-be-renewed\\\"\\n }}

\\n {{else}}\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}.\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n

\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{else if this.isExpiringInternallyLess30Days}}\\n
\\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expire-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}

\\n {{#if (gt (get this.certificate.internalAutoRenewSupportingWelds \\\"length\\\") 0)}}\\n {{#if this.certificate.automaticRenewal}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.will-be-renewed\\\"\\n }}

\\n {{else}}\\n

\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.eligible\\\"}}.\\n {{t \\\"components.model-welder-certificate/edit.messages.auto-renewal.turn-on\\\"}}\\n

\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{/if}}\\n\\n
\\n
\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n {{#if this.hasCertificateDeleteErrors}}\\n \\n {{#each this.certificateDeleteErrors as |error|}}\\n
    \\n
  • \\n {{#if (eq error.type \\\"project\\\")}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.delete.errors.project-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{/if}}\\n
  • \\n
\\n {{/each}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.isShowingDuplicateModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.archive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevalidateInternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isCertificateASME}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.internally.button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevalidateExternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.externally.button\\\"}}\\n \\n \\n \\n \\n \\n{{/if}}\\n\\n{{#if this.showInternalRevalidationSurpassesExternalDeadlineSingle}}\\n \\n {{#if this.showConfirmRevalidateInternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n \\n \\n \\n {{else if this.showConfirmRevalidateExternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.help-message\\\"\\n dayCount=this.errorData.daysToExternalExpire\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n {{/if}}\\n \\n{{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n
\\n \\n
\\n
\\n {{#if this.showValidationTab}}\\n \\n {{#if this.isStandardWithExternalDates}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (and this.isExpiringInternallyLess30Days (not this.isExpiringExternallyLess30Days))\\n }}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isExpiringExternallyLess30Days}}\\n \\n {{/if}}\\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if\\n (and this.isExpiringInternallyLess30Days (not this.isExpiringExternallyLess30Days))\\n }}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.showExternalRequalificationDate}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isExpiringExternallyLess30Days}}\\n \\n {{/if}}\\n {{/if}}\\n\\n {{/if}}\\n \\n\\n
\\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.details\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showDetailsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.input}}\\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n {{lov.input}}\\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n {{lov.input}}\\n {{lov.help}}\\n {{lov.errors}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n {{#if this.showSupplementaryFilletWeldTest}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n {{#if this.isNotStandardISO}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{this.processNames.process1}}\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n {{this.processNames.process2}}\\n \\n {{t \\\"certificate-edit.welding-position-direction\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n {{this.processNames.process3}}\\n \\n {{t \\\"certificate-edit.welding-position-direction\\\"}}\\n \\n \\n {{/if}}\\n
\\n \\n {{t\\n \\\"certificate-edit.welding-position-direction\\\"\\n }}\\n \\n
\\n \\n \\n \\n
\\n \\n \\n \\n
\\n {{else}}\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showTypeOfCurrent}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showWeldingDetailJointSensor}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n \\n {{#if this.media.isMobile}}\\n \\n \\n {{t \\\"generic.welding.approval-range\\\"}}
\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n \\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n \\n
\\n \\n

{{this.overlayTypeLabel}}

\\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n \\n {{#if this.showSupplementaryFilletWeldTest}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showTypeOfCurrent}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.canShowWeldingOperatorSpecificFields}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.showWeldingDetailJointSensor}}\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{/if}}\\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showBaseMaterialsTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-welder-certificate/edit.base-material1\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.dissimilar-materials\\\"}}\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n
\\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n {{#if this.media.isMobile}}\\n \\n \\n {{t \\\"generic.welding.approval-range\\\"}}
\\n \\n \\n {{/if}}\\n \\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n {{t \\\"components.model-welder-certificate/edit.base-material1\\\"}}\\n {{/if}}\\n
\\n \\n \\n {{#if this.showBothBaseMaterials}}\\n {{#if this.isEditing}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n {{option.visualLabel}}\\n \\n
\\n
\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n \\n {{#if this.isPartialPenetrationButtWeld}}\\n \\n
\\n \\n

\\n \\n

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

\\n \\n

\\n
\\n
\\n {{else}}\\n \\n \\n \\n {{/if}}\\n
\\n {{/if}}\\n {{#if (and this.hasDissimilarMaterials this.showBothBaseMaterials)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.base-material2\\\"\\n }}
\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n {{#if this.isPartialPenetrationButtWeld}}\\n \\n
\\n \\n

\\n \\n

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

\\n \\n

\\n
\\n
\\n {{else}}\\n \\n \\n \\n {{/if}}\\n
\\n {{else}}\\n {{#if this.showBothBaseMaterials}}\\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\\n \\n \\n {{#unless this.hasOnlyRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n
\\n
\\n
\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.isLayerSumBiggerThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-bigger-than-total\\\"\\n difference=this.rootFillCapDifference\\n differencePercent=this.rootFillCapDifferencePercentage\\n unit=this.distanceUnit\\n }}\\n

\\n
\\n {{else}}\\n {{#if this.isLayerSumLessThanTotal}}\\n \\n

{{t\\n \\\"model-validations.pqr.root-fill-cap-less-than-total\\\"\\n difference=this.rootFillCapDifferencePositive\\n unit=this.distanceUnit\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welder-certificate/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n \\n
\\n {{/unless}}\\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n {{#if this.canShowConsumablesTab}}\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n \\n {{else}}\\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.tests\\\")}}\\n \\n \\n {{/if}}\\n
\\n {{/if}}\\n {{#if this.showConsumablesTab}}\\n \\n \\n
{{t\\n \\\"generic.welding.test-piece\\\"\\n }}
\\n
\\n {{#if (or this.media.isDesktop this.media.isLaptop this.media.isTablet)}}\\n \\n
{{t\\n \\\"generic.welding.approval-range\\\"\\n }}
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.media.isMobile}}\\n \\n \\n {{t \\\"generic.welding.approval-range\\\"}}
\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{electrode.shortDesignation}}\\n ({{electrode.longDesignation}})\\n \\n \\n \\n \\n {{/if}}\\n \\n \\n\\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n\\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.tests\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showTestsTab}}\\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n {{#if this.hasRevalidations}}\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.revalidations\\\")\\n }}\\n \\n \\n {{/if}}\\n
\\n {{/if}}\\n {{#if this.showRevalidationsTab}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#each this.internalRevalidations as |revalidation|}}\\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.internal-revalidation-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.deadline-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.responsible\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence1\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence2\\\"\\n }}{{t \\\"generic.buttons.actions\\\"}}
{{format-date\\n date=revalidation.previousDate\\n format=this.userSession.dateFormat\\n }}\\n {{format-date\\n date=revalidation.nextDate\\n format=this.userSession.dateFormat\\n }}\\n {{revalidation.revalidator}}\\n \\n ({{format-date\\n date=revalidation.dateOfRevalidation\\n format=this.userSession.dateFormat\\n }})\\n \\n \\n {{#each revalidation.supportingWelds as |weld|}}\\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n {{/each}}\\n \\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report1\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report1\\\"\\n }}\\n {{#if (has-value revalidation.report1Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report2\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report2\\\"\\n }}\\n {{#if (has-value revalidation.report2Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if\\n (and this.isEditing (eq revalidation.id this.latestInternalRevalidation.id))\\n }}\\n \\n \\n \\n \\n {{/if}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.empty-internal-revalidations\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#each this.externalRevalidations as |revalidation|}}\\n \\n \\n \\n \\n {{#if this.certificate.automaticRenewal}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.external-revalidation-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.deadline-date\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.responsible\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.messages.auto-renewal.supporting-welds\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence1\\\"\\n }}{{t\\n \\\"components.model-welder-certificate/edit.revalidation.columns.evidence2\\\"\\n }}{{t \\\"generic.buttons.actions\\\"}}
{{format-date\\n date=revalidation.previousDate\\n format=this.userSession.dateFormat\\n }}\\n {{format-date\\n date=revalidation.nextDate\\n format=this.userSession.dateFormat\\n }}\\n \\n {{revalidation.revalidator}}\\n \\n ({{format-date\\n date=revalidation.dateOfRevalidation\\n format=this.userSession.dateFormat\\n }})\\n \\n \\n {{#each revalidation.supportingWelds as |weld|}}\\n \\n {{weld.projectLabel}}\\n -\\n {{weld.weldId}}\\n \\n {{/each}}\\n \\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report1\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport1.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report1\\\"\\n }}\\n {{#if (has-value revalidation.report1Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if this.isEditing}}\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.select-report2\\\"\\n }}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if (has-value revalidation.revalidationEvidenceReport2.id)}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.labels.report2\\\"\\n }}\\n {{#if (has-value revalidation.report2Path)}}\\n -\\n \\n (PDF)\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{#if\\n (and this.isEditing (eq revalidation.id this.latestExternalRevalidation.id))\\n }}\\n \\n \\n \\n \\n {{/if}}\\n
{{t\\n \\\"components.model-welder-certificate/edit.revalidation.empty-external-revalidations\\\"\\n }}
\\n \\n\\n {{#if this.isAddingReport1}}\\n \\n {{/if}}\\n {{#if this.isAddingReport2}}\\n \\n {{/if}}\\n {{#if this.isRemovingReport1}}\\n \\n \\n
\\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.messages.remove-warning-message\\\"\\n }}\\n

\\n
\\n
\\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.remove-report\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.isRemovingReport2}}\\n \\n \\n
\\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.messages.remove-warning-message\\\"\\n }}\\n

\\n
\\n
\\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.buttons.remove-report\\\"\\n }}\\n \\n \\n {{/if}}\\n {{#if this.isDeletingRevalidation}}\\n \\n \\n
\\n
\\n

\\n {{t\\n \\\"components.model-welder-certificate/edit.revalidation.messages.delete-warning-message\\\"\\n }}\\n

\\n
\\n
\\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t \\\"generic.buttons.delete\\\"}}\\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{! End Revalidation Tab }}\\n \\n \\n \\n\\n
\",\"moduleName\":\"weldnote/components/model-welder-certificate/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/edit.hbs\"}});\nimport { service } from '@ember/service';\nimport { filterBy } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport ENV from 'weldnote/config/environment';\nimport { set, get, getProperties, action, computed } from '@ember/object';\nimport { hash } from 'rsvp';\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport Rules from 'weldnote/utils/welder-certificate-rules';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport jointTypeFilteredOptions from 'weldnote/macros/joint-type-options';\nimport { isFilletWeld, isPartialPenetrationButtWeld } from 'weldnote/utils/rules/weld-type';\nimport {\n filterDetailsIncompatibleWithFilletWeld,\n filterDetailsIncompatibleWithOverlayWeld,\n filterDetailsIncompatibleWithPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/welding-detail';\nimport {\n isDuplicateError,\n isPermissionDenied,\n isForeignKeyError,\n getErrorCode,\n getErrorDetail,\n} from 'weldnote/utils/json-api-errors';\nimport { task, timeout } from 'ember-concurrency';\nimport {\n isWelderStandardISO96061,\n isStandardASME,\n isWelderStandardISO96062,\n isStandardOfTypeISO,\n isStandardAWSD11,\n isWelderStandardISO14732,\n isStandardAWSD15,\n} from 'weldnote/utils/standards';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport moment from 'moment';\nimport { allowedMultiplePositionsCertificates } from 'weldnote/utils/rules/welding-position';\nimport { calculateProcessLabels } from 'weldnote/src-weldnote/welding/process-name-label-calculator';\nimport WopqApprovalRange from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-approval-range';\nimport { tracked } from '@glimmer/tracking';\nimport FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport Gas from 'weldnote/models/gas';\nimport GasCommercialDesignation from 'weldnote/models/gas-commercial-designation';\nimport Flux from 'weldnote/models/flux';\nimport FluxCommercialDesignation from 'weldnote/models/flux-commercial-designation';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport WeldType from 'weldnote/models/weld-type';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport { AjaxServiceClass } from 'ember-ajax/services/ajax';\nimport WelderCertificateRevalidation from 'weldnote/models/welder-certificate-revalidation';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport Welder from 'weldnote/models/welder';\nimport NdtReportCertificate from 'weldnote/models/ndt-report-certificate';\nimport TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport {\n NumericalRange,\n WelderCertificateApprovalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport { assert } from '@ember/debug';\nimport DS from 'ember-data';\nimport WpqApprovalRange from 'weldnote/src-weldnote/wpq/approval-ranges/wpq-approval-range';\nimport WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport { Process, WelderCertificateTestPieceValues } from 'weldnote/src-weldnote/wopq/types';\nimport WeldcloudData from 'weldnote/services/weldcloud-data';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport UserSessionService from 'weldnote/services/user-session';\n\nconst { WELDER_CERTIFICATE } = Rules;\n\nconst {\n PRODUCT_TYPE,\n UNIT_SYSTEM,\n CERTIFICATE_REVALIDATION_TYPE,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE,\n ERROR_CODES,\n TASK_STATUS,\n DEFAULT_DATE_FORMAT,\n} = Constants;\n\nexport default class Edit extends Base {\n @service\n declare weldnoteData: WeldnoteDataService;\n\n @service\n declare welderCertificateData: any;\n\n @service\n declare weldcloudNotesData: WeldcloudNotesData;\n\n @service\n declare weldcloudData: WeldcloudData;\n\n @service('user-session')\n declare userSession: UserSessionService;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @service\n declare scroller: any;\n\n get esabCloudLink() {\n return ENV.esabCloudLink;\n }\n\n get data() {\n return this.weldnoteData;\n }\n\n get notesData() {\n return this.weldcloudNotesData;\n }\n\n get alert() {\n return this.alertMessage;\n }\n\n @service\n declare taskMonitor: any;\n\n @service\n declare ajax: AjaxServiceClass;\n\n @service\n declare media: any;\n\n @service\n declare store: DS.Store;\n\n @tracked\n showConfirmArchive = false;\n\n @tracked\n showConfirmUnarchive = false;\n\n @tracked\n showConfirmRevalidateInternally = false;\n\n @tracked\n showConfirmRevalidateExternally = false;\n\n // References to NDT Reports the user can add when revalidating\n @tracked\n ndtReport1 = null;\n\n @tracked\n ndtReport2 = null;\n\n @tracked\n lastWeldingDate = null;\n\n // Flag to show the confirmation dialog when the internal deadline is close to the external deadline\n @tracked\n showInternalRevalidationSurpassesExternalDeadlineSingle = false;\n\n // Flags to control whe\n @tracked\n showConfirmRevalidateInternallyFromInternal = false;\n\n @tracked\n showConfirmRevalidateExternallyFromInternal = false;\n\n get jobKnowledgeOptions() {\n return this.data.jobKnowledgeOptions;\n }\n\n get layerOptions() {\n return this.data.layerOptions;\n }\n\n get weldingPositionDirectionOptions() {\n return this.data.weldingPositionDirectionOptions;\n }\n\n get certificate(): WelderCertificate {\n return this.args.model;\n }\n\n get isCurrentStandardAWSD11() {\n return isStandardAWSD11(this.certificateStandard);\n }\n\n get currentIndustryCode(): IndustryCode | null {\n let standard = this.certificateStandard;\n if (standard) {\n return get(standard, 'code');\n }\n return null;\n }\n\n get currentIndustryCodeId() {\n let code = this.currentIndustryCode;\n if (code) {\n return get(code, 'id');\n }\n return null;\n }\n\n get examiningBodyOptions() {\n return this.data.examiningBodyOptions;\n }\n\n get processMecanizationOptionsForOperators() {\n return this.notesData.processMecanizationsForWeldingOperators;\n }\n\n get certificateBaseMaterialGroupStandard(): WelderStandard | null {\n if (isStandardAWSD15(this.certificate.standard)) {\n return this.certificate.standard;\n }\n return null;\n }\n\n get specialRequirementOptions() {\n return this.data.specialRequirementOptions;\n }\n\n @jointTypeFilteredOptions('data.jointTypeOptions', 'certificate.weldTypeTestPiece')\n declare jointTypeOptions: any;\n\n get showValidationTab() {\n return this.args.section === 'validation';\n }\n\n get showDetailsTab() {\n return this.args.section === 'details';\n }\n\n get isWeldingOperatorCertificateInAWSD11() {\n if (this.certificate.isWelderOperatorCertificate) {\n if (this.isCurrentStandardAWSD11) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n }\n\n get showSupplementaryFilletWeldTest() {\n return this.certificate.isWelderCertificate || this.isWeldingOperatorCertificateInAWSD11;\n }\n\n get showTypeOfCurrent() {\n return this.certificate.isWelderCertificate || this.isWeldingOperatorCertificateInAWSD11;\n }\n\n get isWeldingOperatorCertificate() {\n return this.certificate.isWelderOperatorCertificate;\n }\n\n get canShowWeldingOperatorSpecificFields() {\n return this.certificate.isWelderOperatorCertificate && !this.isCurrentStandardAWSD11;\n }\n\n get showWeldingDetailJointSensor() {\n return this.isISO14732;\n }\n\n get canShowConsumablesTab() {\n return this.certificate.isWelderCertificate || this.isWeldingOperatorCertificateInAWSD11;\n }\n\n get showConsumablesTab() {\n return this.args.section === 'consumables';\n }\n\n get showBaseMaterialsTab() {\n return this.args.section === 'baseMaterials';\n }\n\n get showTestsTab() {\n return this.args.section === 'tests';\n }\n\n get showRevalidationsTab() {\n return this.args.section === 'revalidations';\n }\n\n get unitSystem(): string {\n return this.certificate.unitSystem || this.userSession.unitSystem || '';\n }\n\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem);\n }\n\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem);\n }\n\n get hasRevalidations() {\n let { certificate } = this;\n let revalidations = get(certificate, 'revalidations');\n if (revalidations) {\n return (get(revalidations, 'length') as number) > 0;\n }\n return false;\n }\n\n @tracked\n certificateDeleteErrors: string[] | null = [];\n\n get hasCertificateDeleteErrors() {\n return !isEmpty(this.certificateDeleteErrors);\n }\n\n get isCertificateASME() {\n return isStandardASME(this.certificateStandard);\n }\n\n @computed()\n get currentDay() {\n // The endOf('day') is here to work around this issue\n // If I just return new Date() it does not work, and triggers the double rendering\n // https://github.com/edgycircle/ember-pikaday/issues/141\n let today = moment(new Date()).endOf('day');\n return today.toDate();\n }\n\n // Flag that controls whether or not the \"Show Duplicate Certificate\" modal is displayed\n @tracked\n isShowingDuplicateModal = false;\n\n get productTypeOptions() {\n let { isISO96061, data } = this;\n if (isISO96061) {\n return data.productTypeOptionsCertificatesIso96061Options;\n } else {\n return data.productTypeOptions;\n }\n }\n\n get certificateStandard() {\n return get(this.certificate, 'standard');\n }\n\n get isISO96061() {\n return isWelderStandardISO96061(this.certificateStandard);\n }\n\n get isISO14732() {\n return isWelderStandardISO14732(this.certificateStandard);\n }\n\n get isNotStandardISO() {\n let standard = this.certificateStandard;\n if (!isEmpty(standard)) {\n let isISO = isWelderStandardISO96061(standard);\n return !isISO;\n }\n return true;\n }\n\n @computed('certificate.productTypeTestPiece')\n get diameterDisabled() {\n return this.certificate.isPlate;\n }\n\n get isExpired() {\n return this.certificate.isInternallyExpired || this.certificate.isExternallyExpired;\n }\n\n get isInternallyExpired() {\n return this.certificate.isInternallyExpired;\n }\n\n get isExternallyExpired() {\n return this.certificate.isExternallyExpired;\n }\n\n @computed('certificate.internalRequalificationDeadline')\n get isExpiringInternallyLess30Days() {\n let { certificate } = this;\n let internalRequalificationDeadline = get(certificate, 'internalRequalificationDeadline');\n let today = moment();\n if (!isEmpty(internalRequalificationDeadline)) {\n let daysDifference = moment(internalRequalificationDeadline).diff(today, 'days');\n if (daysDifference < 30) {\n return true;\n }\n }\n return false;\n }\n\n @computed('certificate.internalRequalificationDeadline')\n get isExpiringExternallyLess30Days() {\n let { certificate } = this;\n let externalRequalificationDeadline = get(certificate, 'externalRequalificationDeadline');\n let today = moment();\n if (!isEmpty(externalRequalificationDeadline)) {\n let daysDifference = moment(externalRequalificationDeadline).diff(today, 'days');\n if (daysDifference < 30) {\n return true;\n }\n }\n return false;\n }\n\n get isExpiringInLessThan30Days() {\n return this.isExpiringInternallyLess30Days || this.isExpiringExternallyLess30Days;\n }\n\n get showInternalExpireButton() {\n return this.isExpiringInternallyLess30Days;\n }\n\n get showExternalExpireButton() {\n return this.isExpiringExternallyLess30Days;\n }\n\n @filterBy('certificate.revalidations', 'type', CERTIFICATE_REVALIDATION_TYPE.INTERNAL)\n declare internalRevalidations: WelderCertificateRevalidation[];\n\n @filterBy('certificate.revalidations', 'type', CERTIFICATE_REVALIDATION_TYPE.EXTERNAL)\n declare externalRevalidations: WelderCertificateRevalidation[];\n\n get isSupplementaryFilletWeldTestNotChecked() {\n return !this.certificate.supplementaryFilletWeldTestRequired;\n }\n\n get isSupplementaryFilletWeldTestDisabled() {\n return this.isSupplementaryFilletWeldTestNotChecked;\n }\n\n get welderStandardOptions() {\n return this.data.welderStandardOptions;\n }\n\n get weldingProcessOptionsAll() {\n return this.data.weldingProcessOptions;\n }\n\n get arcVoltageControlOptions() {\n return this.weldcloudNotesData.arcVoltageControlOptions;\n }\n\n get jointTrackingOptions() {\n return this.weldcloudNotesData.jointTrackingOptions;\n }\n\n get visualControlOptions() {\n return this.weldcloudNotesData.visualControlOptions;\n }\n\n get weldingOperatorWeldingDetailsOptions() {\n return this.weldcloudNotesData.weldingOperatorWeldingDetailsOptions;\n }\n\n get weldTypeOptionsAll() {\n return this.data.weldTypeOptions;\n }\n\n get weldingDetailOptions() {\n return this.data.weldingDetailOptions;\n }\n\n get electrodeTypeOptions() {\n return this.data.electrodeTypeOptions;\n }\n\n get arcTransferModeOptionsAll() {\n return this.data.arcTransferModeOptions;\n }\n\n get weldingPositionOptionsAll() {\n return this.data.weldingPositionOptions;\n }\n\n get typeCurrentPolarityOptions() {\n return this.data.typeCurrentPolarityOptions;\n }\n\n get constructionStandardOptions() {\n return this.data.constructionStandardOptions;\n }\n\n get companyOptions() {\n return this.data.companyOptions;\n }\n\n get overlayTypeOptions() {\n return this.data.overlayTypeOptions;\n }\n\n get isOverlayWeld() {\n return this.certificate.isOverlayWeld;\n }\n\n get hasWeldType() {\n return !isEmpty(get(this.certificate, 'weldTypeTestPiece'));\n }\n\n // Whether to show all the welding details (overlay welds don't show all)\n get showWeldingDetailsParts() {\n return !this.isOverlayWeld;\n }\n\n // Whether to show the 2 base materials, overlay welds always have both equal\n get showBothBaseMaterials() {\n return !this.isOverlayWeld;\n }\n\n get hasFilePath() {\n return !isEmpty(this.certificate.certificateReportDocumentPath);\n }\n\n @computed('hasWeldType')\n get showJointType() {\n let { hasWeldType } = this;\n let isNotOverlayWeld = !this.isOverlayWeld;\n return hasWeldType && isNotOverlayWeld;\n }\n\n get isLayerSumBiggerThanTotal() {\n return this.rootFillCapDifference > 0;\n }\n\n get isLayerSumLessThanTotal() {\n return this.rootFillCapDifference < 0;\n }\n\n @computed('rootFillCapDifference')\n get rootFillCapDifferencePositive() {\n return Math.abs(this.rootFillCapDifference);\n }\n\n @computed('certificate.{thicknessRootTestPiece,thicknessFillTestPiece,thicknessCapTestPiece}')\n get rootFillCapSum() {\n let root = this.getModelValue('thicknessRootTestPiece');\n let fill = this.getModelValue('thicknessFillTestPiece');\n let cap = this.getModelValue('thicknessCapTestPiece');\n\n let sum = 0;\n if (!isNaN(parseFloat(root))) {\n sum += parseFloat(root);\n }\n if (!isNaN(parseFloat(fill))) {\n sum += parseFloat(fill);\n }\n if (!isNaN(parseFloat(cap))) {\n sum += parseFloat(cap);\n }\n\n return sum;\n }\n\n @computed('rootFillCapSum', 'certificate.thicknessTotalTestPiece')\n get rootFillCapDifference(): number {\n let layerSum = this.rootFillCapSum;\n let thickness = parseFloat(this.getModelValue('thicknessTotalTestPiece'));\n if (isNaN(thickness)) {\n return 0;\n }\n if (layerSum === 0) {\n return 0;\n }\n let result = layerSum - thickness;\n return parseFloat(result.toFixed(2));\n }\n\n @computed('rootFillCapSum', 'certificate.thicknessTotalTestPiece')\n get rootFillCapDifferencePercentage() {\n let totalLayers = this.rootFillCapSum;\n let totalThickness = parseFloat(this.getModelValue('thicknessTotalTestPiece'));\n\n if (isNaN(totalThickness)) {\n return '';\n }\n\n let result =\n (Math.abs(totalLayers - totalThickness) / ((totalLayers + totalThickness) / 2)) * 100;\n return result.toFixed(2);\n }\n\n @tracked\n dissimilarMaterials = false;\n\n @computed(\n 'dissimilarMaterials',\n 'certificate.{baseMaterial1TestPiece,baseMaterial2TestPiece,baseMaterial1Diameter,baseMaterial2Diameter,baseMaterial1Thickness,baseMaterial2Thickness}'\n )\n get hasDissimilarMaterials() {\n if (this.dissimilarMaterials) {\n return true;\n }\n let hasBothMaterials =\n !isEmpty(this.getBelongsToId('baseMaterial1TestPiece')) &&\n !isEmpty(this.getBelongsToId('baseMaterial2TestPiece'));\n if (\n this.getBelongsToId('baseMaterial1TestPiece') !==\n this.getBelongsToId('baseMaterial2TestPiece') &&\n hasBothMaterials\n ) {\n return true;\n }\n\n let hasBothDiameter =\n !isEmpty(this.certificate.baseMaterial1Diameter) &&\n !isEmpty(this.certificate.baseMaterial2Diameter);\n if (\n this.certificate.baseMaterial1Diameter !== this.certificate.baseMaterial2Diameter &&\n hasBothDiameter\n ) {\n return true;\n }\n\n let hasBothThickness =\n !isEmpty(this.certificate.baseMaterial1Thickness) &&\n !isEmpty(this.certificate.baseMaterial2Thickness);\n if (\n this.certificate.baseMaterial1Thickness !== this.certificate.baseMaterial2Thickness &&\n hasBothThickness\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed('hasDissimilarMaterials')\n get baseMaterial1Label() {\n if (this.hasDissimilarMaterials) {\n return this.intl.t('components.model-welder-certificate/edit.base-material');\n } else {\n return this.intl.t('components.model-welder-certificate/edit.base-material1');\n }\n }\n\n @computed('certificate.overlayType')\n get overlayTypeLabel() {\n let type = this.getModelValue('overlayType');\n if (!isEmpty(type)) {\n return this.intl.t(`lov.overlay-type.${type}`);\n }\n return '';\n }\n\n get isEditing() {\n if (this.certificate.isArchived) {\n return false;\n }\n if (!this.userSession.canCreateCertificate) {\n return false;\n }\n\n return true;\n }\n\n get canEditApprovalRange() {\n return this.userSession.canEditCertificateApprovalRange && this.isEditing;\n }\n\n @computed(\n 'certificate.{weldingProcessRootTestPiece.id,weldingProcessFillTestPiece.id,weldingProcessCapTestPiece.id}'\n )\n get hasOnlyRoot() {\n if (\n !isEmpty(this.getBelongsToId('weldingProcessRootTestPiece')) &&\n isEmpty(this.getBelongsToId('weldingProcessFillTestPiece')) &&\n isEmpty(this.getBelongsToId('weldingProcessCapTestPiece'))\n ) {\n return true;\n }\n if (\n isEmpty(this.getBelongsToId('weldingProcessRootTestPiece')) &&\n isEmpty(this.getBelongsToId('weldingProcessFillTestPiece')) &&\n isEmpty(this.getBelongsToId('weldingProcessCapTestPiece'))\n ) {\n return true;\n }\n return false;\n }\n\n getBelongsToId(relationName: keyof WelderCertificate) {\n let belongsTo = get(this.certificate, relationName);\n if (belongsTo) {\n return get(belongsTo, 'id');\n }\n return '';\n }\n\n get hasRoot() {\n return !isEmpty(this.getBelongsToId('weldingProcessRootTestPiece'));\n }\n\n get hasFill() {\n return !isEmpty(this.getBelongsToId('weldingProcessFillTestPiece'));\n }\n\n get hasCap() {\n return !isEmpty(this.getBelongsToId('weldingProcessCapTestPiece'));\n }\n\n @computed(\n 'certificate.{weldingProcessRootTestPiece,weldingProcessFillTestPiece,weldingProcessCapTestPiece}'\n )\n get processNames() {\n let {\n weldingProcessRootTestPiece: process1,\n weldingProcessFillTestPiece: process2,\n weldingProcessCapTestPiece: process3,\n } = this.certificate;\n return calculateProcessLabels(process1, process2, process3);\n }\n\n @computed('certificate.weldTypeTestPiece')\n get isPartialPenetrationButtWeld() {\n return this.certificate.isPartialPenetrationButtWeld();\n }\n\n @computed('certificate.baseMaterial1Thickness')\n get partialPenetrationButtWeldThicknessBaseMaterial1() {\n let thickness = this.getModelValue('baseMaterial1Thickness');\n let {\n userSession: { unitSystem },\n } = this;\n let result = this.approvalRange.thickness(thickness);\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (thickness > 38) {\n result.max = null;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (thickness > 1.5) {\n result.max = null;\n }\n }\n return result;\n }\n\n @computed('certificate.baseMaterial2Thickness')\n get partialPenetrationButtWeldThicknessBaseMaterial2() {\n let thickness = this.getModelValue('baseMaterial2Thickness');\n let {\n userSession: { unitSystem },\n } = this;\n let result = this.approvalRange.thickness(thickness);\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (thickness > 38) {\n result.max = null;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (thickness > 1.5) {\n result.max = null;\n }\n }\n return result;\n }\n\n @computed('certificate.baseMaterial1Diameter')\n get partialPenetrationButtWeldDiameterBaseMaterial1() {\n let diameter = this.getModelValue('baseMaterial1Diameter');\n let result = this.approvalRange.diameter(diameter);\n return result;\n }\n\n @computed('certificate.baseMaterial2Diameter')\n get partialPenetrationButtWeldDiameterBaseMaterial2() {\n let diameter = this.getModelValue('baseMaterial2Diameter');\n let result = this.approvalRange.diameter(diameter);\n return result;\n }\n\n getWeldingProcessShortDesignation(property: keyof WelderCertificate) {\n let process: WeldingProcess | null | undefined = get(this.certificate, property) as\n | WeldingProcess\n | null\n | undefined;\n if (process) {\n return get(process, 'shortDesignation');\n }\n return '';\n }\n\n @computed('certificate.weldingProcessRootTestPiece')\n get isArcTransferModeRootDisabled() {\n let standard = this.certificateStandard;\n let process = this.getWeldingProcessShortDesignation('weldingProcessRootTestPiece');\n return Rules.isArcTransferModeDisabled(standard, process);\n }\n\n @computed('certificate.weldingProcessFillTestPiece')\n get isArcTransferModeFillDisabled() {\n let standard = this.certificateStandard;\n let process = this.getWeldingProcessShortDesignation('weldingProcessFillTestPiece');\n return Rules.isArcTransferModeDisabled(standard, process);\n }\n\n @computed('certificate.weldingProcessCapTestPiece')\n get isArcTransferModeCapDisabled() {\n let standard = this.certificateStandard;\n let process = this.getWeldingProcessShortDesignation('weldingProcessCapTestPiece');\n return Rules.isArcTransferModeDisabled(standard, process);\n }\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingReport() {\n let tasks = get(this.taskMonitor, 'currentTasks');\n let contextTask = tasks.find((item: any) => {\n if (item.contextName === 'welder-certificate') {\n if (item.contextId === this.certificate.id) {\n if (parseInt(item.status) === TASK_STATUS.IN_PROGRESS) {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n @computed('taskMonitor.currentTasks.[]')\n get certificateReportProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item: any) => {\n if (item.contextName === 'welder-certificate') {\n if (item.contextId === this.certificate.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n get isExportingReport() {\n return this.isGeneratingReport;\n }\n\n @computed('isGeneratingReport')\n get canShowCreateButton() {\n let { isGeneratingReport } = this;\n if (isGeneratingReport) {\n return false;\n }\n\n return true;\n }\n\n isValidPropertyList(propertiesToCheck: string[]) {\n let { certificate } = this;\n let result = propertiesToCheck.find((property) => {\n let errors = get(certificate, 'errors');\n if (get(errors, property) && !isEmpty(get(errors, property))) {\n return true;\n }\n return false;\n });\n return isEmpty(result);\n }\n\n @tracked\n hasErrorValidationsTab = false;\n\n @tracked\n hasErrorBaseMaterialsTab = false;\n\n @tracked\n hasErrorConsumablesTab = false;\n\n @tracked\n hasErrorDetailsTab = false;\n\n resetTabErrors() {\n this.hasErrorValidationsTab = false;\n this.hasErrorDetailsTab = false;\n this.hasErrorBaseMaterialsTab = false;\n this.hasErrorConsumablesTab = false;\n }\n\n calculateErrorValidationsTab() {\n let properties = [\n 'emissionDate',\n 'internalRequalificationDate',\n 'internalRequalificationDeadline',\n 'requalificationPeriod',\n 'externalRequalificationDeadline',\n 'previousExternalRequalificationDate',\n ];\n if (!this.isValidPropertyList(properties)) {\n this.hasErrorValidationsTab = true;\n } else {\n this.hasErrorValidationsTab = false;\n }\n }\n\n calculateErrorBaseMaterialsTab() {\n let properties = [\n 'thicknessRootTestPiece',\n 'thicknessFillTestPiece',\n 'thicknessCapTestPiece',\n 'thicknessRootMinimumApprovalRange',\n 'thicknessRootMaximumApprovalRange',\n 'thicknessFillMinimumApprovalRange',\n 'thicknessFillMaximumApprovalRange',\n 'thicknessCapMinimumApprovalRange',\n 'thicknessCapMaximumApprovalRange',\n ];\n if (!this.isValidPropertyList(properties)) {\n this.hasErrorBaseMaterialsTab = true;\n } else {\n this.hasErrorBaseMaterialsTab = false;\n }\n }\n\n calculateErrorsDetailsTab() {\n let properties = [\n 'thicknessTotalTestPiece',\n 'thicknessTotalMinimumApprovalRange',\n 'thicknessTotalMaximumApprovalRange',\n 'diameterTestPiece',\n 'diameterMinimumApprovalRange',\n 'diameterMaximumApprovalRange',\n ];\n if (!this.isValidPropertyList(properties)) {\n this.hasErrorDetailsTab = true;\n } else {\n this.hasErrorDetailsTab = false;\n }\n }\n\n calculateErrorConsumablesTab() {\n let properties = [\n WELDER_CERTIFICATE.SHIELDING_ROOT,\n 'shieldingRootGasTestPiece',\n 'shieldingRootGasCommercialDesignationTestPiece',\n 'shieldingRootGasMixture',\n 'shieldingRootFluxTestPiece',\n 'shieldingRootFluxCommercialDesignationTestPiece',\n 'flowRateRoot',\n WELDER_CERTIFICATE.SHIELDING_FILL,\n 'shieldingFillGasTestPiece',\n 'shieldingFillGasCommercialDesignationTestPiece',\n 'shieldingFillGasMixture',\n 'shieldingFillFluxTestPiece',\n 'shieldingFillFluxCommercialDesignationTestPiece',\n 'flowRateFill',\n WELDER_CERTIFICATE.SHIELDING_CAP,\n 'shieldingCapGasTestPiece',\n 'shieldingCapGasCommercialDesignationTestPiece',\n 'shieldingCapGasMixture',\n 'shieldingCapFluxTestPiece',\n 'shieldingCapFluxCommercialDesignationTestPiece',\n 'backingGasTestPiece',\n 'backingFlowRateRoot',\n ];\n if (!this.isValidPropertyList(properties)) {\n this.hasErrorConsumablesTab = true;\n } else {\n this.hasErrorConsumablesTab = false;\n }\n }\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n declare weldTypeOptions: WeldType[];\n\n get weldingProcessOptions(): WeldingProcess[] {\n return this.weldingProcessOptionsAll\n .filter(\n (w: WeldingProcess) => get(w, 'industryCode.id') == get(this, 'currentIndustryCode.id')\n )\n .filter((w: WeldingProcess) => {\n if (!isEmpty(get(w, 'welderStandard.id'))) {\n return get(w, 'welderStandard.id') == get(this.certificate, 'standard.id');\n } else {\n return true;\n }\n });\n }\n\n @filterFromCollectionByKey(\n 'arcTransferModeOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id'\n )\n declare arcTransferModeOptions: ArcTransferMode[];\n\n get processMecanizationOptions() {\n return this.data.processMecanizationOptions;\n }\n\n get isStandardWithExternalDates() {\n let { certificate } = this;\n let standard = get(certificate, 'standard');\n if (!isEmpty(standard) && !isEmpty(get(standard, 'id'))) {\n return isStandardOfTypeISO(standard);\n }\n return false;\n }\n\n @tracked\n showExternalRequalificationOverride = false;\n\n @computed(\n 'certificate.{requalificationPeriod,previousExternalRequalificationDate,externalRequalificationDeadline}'\n )\n get externalDateHasAnyValue() {\n let { certificate } = this;\n let {\n requalificationPeriod,\n previousExternalRequalificationDate,\n externalRequalificationDeadline,\n } = getProperties(\n certificate,\n 'requalificationPeriod',\n 'previousExternalRequalificationDate',\n 'externalRequalificationDeadline'\n );\n return (\n !isEmpty(requalificationPeriod) ||\n !isEmpty(previousExternalRequalificationDate) ||\n !isEmpty(externalRequalificationDeadline)\n );\n }\n\n get showExternalRequalificationDate() {\n return this.showExternalRequalificationOverride || this.externalDateHasAnyValue;\n }\n\n get hasExportedPdfPath() {\n return !isEmpty(get(this.certificate, 'certificateReportDocumentPath'));\n }\n\n @computed(\n 'weldingPositionOptionsAll.[]',\n 'currentIndustryCode.id',\n 'certificate.productTypeTestPiece'\n )\n get weldingPositionOptions() {\n let { certificate, weldingPositionOptionsAll } = this;\n let { productTypeTestPiece: productType } = certificate;\n let allowedPositions = allowedMultiplePositionsCertificates(certificate.standard);\n let d15Positions = ['1G', '2G', '3G', '4G', '3G+4G', '1F', '2F', '3F', '4F', '3F+4F'];\n return weldingPositionOptionsAll\n .filter((position: WeldingPosition) => {\n return position.industryCodeId === this.currentIndustryCodeId;\n })\n .filter((position: WeldingPosition) => {\n return position.code.indexOf('+') < 0 || allowedPositions.includes(position.code);\n })\n .filter((position: WeldingPosition) => {\n if (productType === PRODUCT_TYPE.PLATE) {\n return !position.isPipeOnly;\n }\n return true;\n })\n .filter((position: WeldingPosition) => {\n if (isStandardAWSD15(certificate.standard)) {\n if (d15Positions.includes(position.code)) {\n return true;\n }\n return false;\n }\n return true;\n });\n }\n\n @computed(\n 'weldingPositionOptionsAll.[]',\n 'currentIndustryCode.id',\n 'certificate.productTypeTestPiece'\n )\n get weldingPositionApprovalRangeOptions() {\n let { productTypeTestPiece: productType } = this.certificate;\n return this.weldingPositionOptionsAll\n .filter((position: WeldingPosition) => {\n return position.industryCodeId === this.currentIndustryCodeId && !position.isMultiple;\n })\n .filter((position: WeldingPosition) => {\n if (productType === PRODUCT_TYPE.PLATE) {\n return !position.isPipeOnly;\n }\n return true;\n });\n }\n\n get internalRequalificationDisabled() {\n return this.isISO96061;\n }\n\n get externalRequalificationDisabled() {\n return this.isISO96061;\n }\n\n get isProcessMecanizationProcess1Automatic() {\n return get(this.certificate, 'processMecanizationRootTestPiece')?.isAutomatic;\n }\n\n get isProcessMecanizationProcess2Automatic() {\n return get(this.certificate, 'processMecanizationFillTestPiece')?.isAutomatic;\n }\n\n get isProcessMecanizationProcess3Automatic() {\n return get(this.certificate, 'processMecanizationCapTestPiece')?.isAutomatic;\n }\n\n get isOperatorWeldingDetailProcess1Disabled(): boolean {\n if (!this.isISO14732) {\n return true;\n }\n if (get(this.certificate, 'processMecanizationRootTestPiece')?.isMechanized) {\n return true;\n }\n return false;\n }\n\n get isOperatorWeldingDetailProcess2Disabled(): boolean {\n if (!this.isISO14732) {\n return true;\n }\n if (get(this.certificate, 'processMecanizationFillTestPiece')?.isMechanized) {\n return true;\n }\n return false;\n }\n\n get isOperatorWeldingDetailProcess3Disabled(): boolean {\n if (!this.isISO14732) {\n return true;\n }\n if (get(this.certificate, 'processMecanizationCapTestPiece')?.isMechanized) {\n return true;\n }\n return false;\n }\n\n searchWelderCertificate = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return this.data.searchWelderCertificate(term).then((data: any) => {\n return data;\n });\n }\n );\n\n updateMachineName = task({}, async () => {\n // Since the machine name can be changed on the backend\n // we try to update it here to keep it in sync\n // we're not saving the certificate here\n // if the user generates the report the certificate will be saved\n if (this.certificate.remoteWeldingUnitId) {\n let result = await this.weldcloudData.getMachineNameById(\n this.certificate.remoteWeldingUnitId\n );\n if (result && result.displayName) {\n set(this.certificate, 'remoteWeldingUnitDisplayName', result.displayName);\n }\n }\n });\n\n updateElectrodeTypeRoot() {\n this.updateElectrodeType(\n 'electrodeTypeRootTestPiece',\n 'electrodeTypeRootApprovalRange',\n Process.PROCESS1\n );\n }\n\n updateElectrodeTypeFill() {\n this.updateElectrodeType(\n 'electrodeTypeFillTestPiece',\n 'electrodeTypeFillApprovalRange',\n Process.PROCESS2\n );\n }\n\n updateElectrodeTypeCap() {\n this.updateElectrodeType(\n 'electrodeTypeCapTestPiece',\n 'electrodeTypeCapApprovalRange',\n Process.PROCESS3\n );\n }\n\n updateElectrodeType(\n propertyTestPiece: keyof WelderCertificate,\n propertyApprovalRange: keyof WelderCertificate,\n process: Process = Process.PROCESS1\n ) {\n let { certificate } = this;\n let standard = this.certificateStandard;\n let electrode = certificate.get(propertyTestPiece);\n if (!isEmpty(standard) && !isEmpty(electrode)) {\n let testPieceValues = new WelderCertificateTestPieceValues(this.certificate, process);\n let results = this.approvalRange.electrodeType(electrode as ElectrodeType, testPieceValues);\n let electrodeApprovalRange = certificate.get(propertyApprovalRange) as ElectrodeType[] | null;\n if (electrodeApprovalRange != null && electrodeApprovalRange instanceof Array) {\n electrodeApprovalRange.clear();\n results.forEach((electrode) => {\n electrodeApprovalRange!.pushObject(electrode);\n });\n }\n }\n }\n\n updateThicknessRoot() {\n this.updateWeldingThickness(\n this.certificate,\n 'thicknessRootTestPiece',\n 'thicknessRootMinimumApprovalRange',\n 'thicknessRootMaximumApprovalRange'\n );\n }\n\n updateThicknessFill() {\n this.updateWeldingThickness(\n this.certificate,\n 'thicknessFillTestPiece',\n 'thicknessFillMinimumApprovalRange',\n 'thicknessFillMaximumApprovalRange'\n );\n }\n\n updateThicknessCap() {\n this.updateWeldingThickness(\n this.certificate,\n 'thicknessCapTestPiece',\n 'thicknessCapMinimumApprovalRange',\n 'thicknessCapMaximumApprovalRange'\n );\n }\n\n updateThicknessTotal() {\n this.updateWeldingThickness(\n this.certificate,\n 'thicknessTotalTestPiece',\n 'thicknessTotalMinimumApprovalRange',\n 'thicknessTotalMaximumApprovalRange'\n );\n }\n\n updateWeldingThickness(\n certificate: WelderCertificate,\n propertyTestPiece: keyof WelderCertificate,\n propertyApprovalRangeMin: keyof WelderCertificate,\n propertyApprovalRangeMax: keyof WelderCertificate\n ) {\n let standard = this.certificateStandard;\n let weldType = get(certificate, 'weldTypeTestPiece');\n if (!isEmpty(standard) && !isEmpty(weldType)) {\n let result = this.approvalRange.thickness(\n certificate.get(propertyTestPiece) as number | null | undefined\n );\n if (result.min !== null) {\n certificate.set(propertyApprovalRangeMin, result.min);\n certificate.set(propertyApprovalRangeMax, result.max);\n }\n }\n }\n\n updateAllThickness() {\n this.updateThicknessRoot();\n this.updateThicknessFill();\n this.updateThicknessTotal();\n }\n\n updateWeldTypes() {\n this.updateWeldType(this.certificate);\n }\n\n updateWeldType(certificate: WelderCertificate) {\n let weldType = get(certificate, 'weldTypeTestPiece');\n let result = this.approvalRange.weldType(weldType);\n if (!isEmpty(result)) {\n let weldTypeApprovalRange = certificate.get('weldTypeApprovalRange');\n weldTypeApprovalRange.clear();\n result.forEach((element: WeldType) => {\n weldTypeApprovalRange.pushObject(element);\n });\n }\n }\n\n updateWeldingPositionsRoot() {\n this.updateWeldingPositionApprovalRange(\n 'weldingPositionRootTestPiece',\n 'weldingPositionRootApprovalRange',\n Process.PROCESS1\n );\n }\n\n updateWeldingPositionsFill() {\n this.updateWeldingPositionApprovalRange(\n 'weldingPositionFillTestPiece',\n 'weldingPositionFillApprovalRange',\n Process.PROCESS2\n );\n }\n\n updateWeldingPositionsCap() {\n this.updateWeldingPositionApprovalRange(\n 'weldingPositionCapTestPiece',\n 'weldingPositionCapApprovalRange',\n Process.PROCESS3\n );\n }\n\n // Welding Positions\n updateWeldingPositionApprovalRange(\n propertyTestPiece: keyof WelderCertificate,\n propertyApprovalRange: keyof WelderCertificate,\n process: Process\n ) {\n let { certificate } = this;\n let standard = certificate.get('standard');\n let weldingPosition = certificate.get(propertyTestPiece) as WeldingPosition | null;\n\n if (!isEmpty(standard) && !isEmpty(weldingPosition)) {\n let results = this.approvalRange.weldingPosition(\n weldingPosition,\n new WelderCertificateTestPieceValues(this.certificate, process)\n );\n let approvalRange = certificate.get(propertyApprovalRange) as WeldingPosition[] | null;\n if (approvalRange != null) {\n approvalRange.clear();\n approvalRange.pushObjects(results);\n }\n }\n }\n\n updateAllWeldingPositions() {\n this.updateWeldingPositionsRoot();\n this.updateWeldingPositionsFill();\n this.updateWeldingPositionsCap();\n }\n\n // Filler Material Groups\n updateFillerMaterialGroupRoot() {\n this.updateFillerMaterialGroup(\n this.certificate,\n 'fillerMaterialRootTestPiece',\n 'fillerMaterialRootApprovalRange',\n Process.PROCESS1\n );\n }\n\n updateFillerMaterialGroupFill() {\n this.updateFillerMaterialGroup(\n this.certificate,\n 'fillerMaterialFillTestPiece',\n 'fillerMaterialFillApprovalRange',\n Process.PROCESS2\n );\n }\n\n updateFillerMaterialGroupCap() {\n this.updateFillerMaterialGroup(\n this.certificate,\n 'fillerMaterialCapTestPiece',\n 'fillerMaterialCapApprovalRange',\n Process.PROCESS3\n );\n }\n\n updateFillerMaterialGroup(\n certificate: WelderCertificate,\n propertyTestPiece: keyof WelderCertificate,\n propertyApprovalRange: keyof WelderCertificate,\n process: Process\n ) {\n let standard = certificate.get('standard');\n let fillerMaterial = certificate.get(propertyTestPiece) as FillerMaterial | null;\n if (!isEmpty(standard) && fillerMaterial != null && !isEmpty(fillerMaterial.get('group'))) {\n let results = this.approvalRange.fillerMaterial(\n fillerMaterial,\n new WelderCertificateTestPieceValues(this.certificate, process)\n );\n const approvalRange = certificate.get(propertyApprovalRange) as FillerMaterialGroup | null;\n if (approvalRange != null && approvalRange instanceof Array) {\n approvalRange.clear();\n results.forEach((group: FillerMaterialGroup) => {\n approvalRange.pushObject(group);\n });\n }\n }\n }\n\n updateInternalRequalificationDeadline() {\n let { certificate } = this;\n let result = this.approvalRange.internalDeadline(\n certificate.get('internalRequalificationDate')\n );\n if (result !== null) {\n certificate.set('internalRequalificationDeadline', result);\n }\n }\n\n updateExternalRequalificationDate() {\n let { certificate } = this;\n let result = this.approvalRange.externalDeadline(\n certificate.get('previousExternalRequalificationDate')\n );\n if (result !== null) {\n certificate.set('externalRequalificationDeadline', result);\n }\n }\n\n updateArcTransferModeRoot() {\n let { certificate } = this;\n this.updateArcTransferMode(\n certificate,\n 'arcTransferModeRootTestPiece',\n 'arcTransferModeRootApprovalRange',\n Process.PROCESS1\n );\n }\n\n updateArcTransferModeFill() {\n let { certificate } = this;\n this.updateArcTransferMode(\n certificate,\n 'arcTransferModeFillTestPiece',\n 'arcTransferModeFillApprovalRange',\n Process.PROCESS2\n );\n }\n\n updateArcTransferModeCap() {\n let { certificate } = this;\n this.updateArcTransferMode(\n certificate,\n 'arcTransferModeCapTestPiece',\n 'arcTransferModeCapApprovalRange',\n Process.PROCESS3\n );\n }\n\n // Arc Transfer Modes\n updateArcTransferMode(\n certificate: WelderCertificate,\n propertyTestPiece: keyof WelderCertificate,\n propertyApprovalRange: keyof WelderCertificate,\n process: Process\n ) {\n let standard = this.certificateStandard;\n let arcTransferMode = certificate.get(propertyTestPiece) as ArcTransferMode | undefined | null;\n if (!isEmpty(standard) && !isEmpty(arcTransferMode)) {\n let results = this.approvalRange.transferMode(\n arcTransferMode,\n new WelderCertificateTestPieceValues(this.certificate, process)\n );\n let modesApprovalRange = certificate.get(propertyApprovalRange) as ArcTransferMode[] | null;\n if (modesApprovalRange != null && modesApprovalRange instanceof Array) {\n modesApprovalRange.clear();\n results.forEach((mode: ArcTransferMode) => {\n modesApprovalRange!.pushObject(mode);\n });\n }\n }\n }\n\n updateWeldingDetails() {\n let { certificate } = this;\n let standard = this.certificateStandard;\n let weldingDetails = certificate.get('weldingDetailTestPiece');\n if (!isEmpty(standard) && !isEmpty(weldingDetails)) {\n let results = this.approvalRange.weldingDetails(weldingDetails);\n let detailsApprovalRange = certificate.get('weldingDetailsApprovalRange');\n detailsApprovalRange.clear();\n results.forEach((detail: WeldingDetail) => {\n detailsApprovalRange.pushObject(detail);\n });\n }\n }\n\n updateBaseMaterial1() {\n this.updateBaseMaterialGroups(\n this.certificate,\n 'baseMaterial1TestPiece',\n 'baseMaterial1ApprovalRange'\n );\n }\n\n updateBaseMaterial2() {\n this.updateBaseMaterialGroups(\n this.certificate,\n 'baseMaterial2TestPiece',\n 'baseMaterial2ApprovalRange'\n );\n }\n\n updateBaseMaterialGroups(\n certificate: WelderCertificate,\n testPieceProperty: keyof WelderCertificate,\n approvalRangeProperty: keyof WelderCertificate\n ) {\n let standard = this.certificateStandard;\n let baseMaterial = certificate.get(testPieceProperty) as BaseMaterial;\n if (!isEmpty(standard) && !isEmpty(baseMaterial)) {\n let results = this.approvalRange.baseMaterial(baseMaterial);\n let baseMaterialGroupsApprovalRange = certificate.get(approvalRangeProperty) as\n | BaseMaterialGroup[]\n | null;\n if (\n baseMaterialGroupsApprovalRange != null &&\n baseMaterialGroupsApprovalRange instanceof Array\n ) {\n baseMaterialGroupsApprovalRange.clear();\n baseMaterialGroupsApprovalRange.pushObjects(results);\n }\n }\n }\n\n updateWeldingProcessRootApprovalRange() {\n let { certificate } = this;\n let standard = this.certificateStandard;\n let process = certificate.get('weldingProcessRootTestPiece');\n if (!isEmpty(standard) && !isEmpty(process)) {\n let result = this.approvalRange.weldingProcessRoot(process);\n let approvalRange = certificate.get('weldingProcessRootApprovalRange');\n approvalRange.clear();\n approvalRange.pushObjects(result);\n }\n }\n\n updateWeldingProcessFillApprovalRange() {\n let { certificate } = this;\n let standard = this.certificateStandard;\n let process = certificate.get('weldingProcessFillTestPiece');\n if (!isEmpty(standard) && !isEmpty(process)) {\n let result = this.approvalRange.weldingProcessFill(process);\n let approvalRange = certificate.get('weldingProcessFillApprovalRange');\n approvalRange.clear();\n approvalRange.pushObjects(result);\n }\n }\n\n updateWeldingProcessCapApprovalRange() {\n let { certificate } = this;\n let standard = this.certificateStandard;\n let process = certificate.get('weldingProcessCapTestPiece');\n if (!isEmpty(standard) && !isEmpty(process)) {\n let result = this.approvalRange.weldingProcessCap(process);\n let approvalRange = certificate.get('weldingProcessCapApprovalRange');\n approvalRange.clear();\n approvalRange.pushObjects(result);\n }\n }\n\n setModelValue(attribute: keyof WelderCertificate, value: any) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n set(this.args.model, attribute, value);\n }\n\n setModelCollection(attribute: keyof WelderCertificate, values: any) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = get(this.args.model, attribute);\n collection.clear();\n if (values && !isEmpty(values)) {\n values.forEach((value: any) => {\n collection.pushObject(value);\n });\n }\n }\n\n updateShieldingRoot(certificate: WelderCertificate) {\n let weldingProcessRoot = get(certificate, 'weldingProcessRootTestPiece');\n if (!isEmpty(weldingProcessRoot)) {\n let shielding = this.approvalRange.shielding(weldingProcessRoot);\n let currentShielding = get(certificate, 'shieldingRoot');\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n this.setModelValue('shieldingRoot', shielding);\n this.clearShieldingRoot();\n }\n }\n }\n\n updateShieldingFill(certificate: WelderCertificate) {\n let weldingProcessFill = get(certificate, 'weldingProcessFillTestPiece');\n if (!isEmpty(weldingProcessFill)) {\n let shielding = this.approvalRange.shielding(weldingProcessFill);\n let currentShielding = get(certificate, 'shieldingFill');\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n this.setModelValue('shieldingFill', shielding);\n this.clearShieldingFill();\n }\n }\n }\n\n updateShieldingCap(certificate: WelderCertificate) {\n let weldingProcessCap = get(certificate, 'weldingProcessCapTestPiece');\n if (!isEmpty(weldingProcessCap)) {\n let shielding = this.approvalRange.shielding(weldingProcessCap);\n let currentShielding = get(certificate, 'shieldingCap');\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n this.setModelValue('shieldingCap', shielding);\n this.clearShieldingCap();\n }\n }\n }\n\n clearShieldingRoot() {\n // Clear Gas\n this.setModelValue('shieldingRootGasTestPiece', null);\n this.setModelValue('shieldingRootGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingRootGasMixture', null);\n this.setModelValue('flowRateRoot', null);\n // Clear Flux\n this.setModelValue('shieldingRootFluxTestPiece', null);\n this.setModelValue('shieldingRootFluxCommercialDesignationTestPiece', null);\n }\n\n clearShieldingFill() {\n // Clear Gas\n this.setModelValue('shieldingFillGasTestPiece', null);\n this.setModelValue('shieldingFillGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingFillGasMixture', null);\n this.setModelValue('flowRateFill', null);\n // Clear Flux\n this.setModelValue('shieldingFillFluxTestPiece', null);\n this.setModelValue('shieldingFillFluxCommercialDesignationTestPiece', null);\n }\n\n clearShieldingCap() {\n // Clear Gas\n this.setModelValue('shieldingCapGasTestPiece', null);\n this.setModelValue('shieldingCapGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingCapGasMixture', null);\n this.setModelValue('flowRateCap', null);\n // Clear Flux\n this.setModelValue('shieldingCapFluxTestPiece', null);\n this.setModelValue('shieldingCapFluxCommercialDesignationTestPiece', null);\n }\n\n updateDiameter() {\n let { certificate } = this;\n let diameter = get(certificate, 'diameterTestPiece');\n let thicknessTestPiece = get(certificate, 'thicknessTotalTestPiece');\n let results: NumericalRange = this.approvalRange.diameter(diameter);\n if (results) {\n certificate.set('diameterMinimumApprovalRange', results.min);\n certificate.set('diameterMaximumApprovalRange', results.max);\n }\n // We update the thickness total, because the diameter influences the calculation,\n // and in the UI the diameter comes after, so a user might input the thickness (which gets\n // calculated) and only then the diameter, so we need to recalculate the thickness total approval range\n let thickness: NumericalRange = this.approvalRange.thickness(thicknessTestPiece);\n if (thickness) {\n certificate.set('thicknessTotalMinimumApprovalRange', thickness.min);\n certificate.set('thicknessTotalMaximumApprovalRange', thickness.max);\n }\n }\n\n translate(key: string, options: any) {\n return this.intl.t(`components.model-welder-certificate/edit.${key}`, options);\n }\n\n _postSave(_model: WelderCertificate, _options: any) {\n this.welderCertificateData.clearCacheAll();\n this.resetTabErrors();\n }\n\n createFillerMaterialCommercialDesignation(\n designationName: string,\n fillerMaterial: FillerMaterial\n ) {\n let designation = this.store.createRecord('filler-material-commercial-designation');\n designation.set('fillerMaterial', fillerMaterial);\n designation.set('commercialDesignation', designationName);\n return designation.save();\n }\n\n createGasCommercialDesignation(designationName: string, gas: Gas, mixture: string) {\n let designation = this.store.createRecord('gas-commercial-designation');\n designation.set('gas', gas);\n designation.set('commercialDesignation', designationName);\n if (!isEmpty(mixture)) {\n designation.set('gasMixture', mixture);\n }\n return designation.save();\n }\n\n createFluxCommercialDesignation(designationName: string, flux: Flux) {\n let designation = this.store.createRecord('flux-commercial-designation');\n designation.set('flux', flux);\n designation.set('commercialDesignation', designationName);\n return designation.save();\n }\n\n showCommercialDesignationSuccess(model: string) {\n let name = this.intl.t(`model.${model}.model-name`);\n let successMessage = this.intl.t('edit-view.actions.saved', { name });\n this.alertMessage.success(successMessage);\n }\n\n showCommercialDesignationError(model: string) {\n let name = this.intl.t(`model.${model}.model-name`);\n let errorMessage = this.intl.t('edit-view.actions.error', { name });\n this.alertMessage.error(errorMessage);\n }\n\n validationFailed() {\n this.calculateErrorValidationsTab();\n this.calculateErrorBaseMaterialsTab();\n this.calculateErrorConsumablesTab();\n this.calculateErrorsDetailsTab();\n }\n\n validateField(field: keyof WelderCertificate) {\n return this.certificate.validate({ only: [field] });\n }\n\n removeAllRootVariables() {\n this.clearModelCollection('weldingProcessRootApprovalRange');\n\n this.setModelValue('weldingPositionRootTestPiece', null);\n this.clearModelCollection('weldingPositionRootApprovalRange');\n this.setModelValue('weldingPositionRootDirection', null);\n\n this.setModelValue('arcTransferModeRootTestPiece', null);\n this.clearModelCollection('arcTransferModeRootApprovalRange');\n\n this.setModelValue('typeCurrentRootTestPiece', null);\n\n this.setModelDecimalValue('thicknessRootTestPiece', null);\n this.setModelValue('thicknessRootLayerTestPiece', null);\n this.setModelDecimalValue('thicknessRootMinimumApprovalRange', null);\n this.setModelDecimalValue('thicknessRootMaximumApprovalRange', null);\n\n this.setModelValue('shieldingRoot', null);\n this.clearShieldingRoot();\n\n this.removeFillerMaterialRootVariables();\n this.removeElectrodeTypeRoot();\n }\n\n removeAllFillVariables() {\n this.clearModelCollection('weldingProcessFillApprovalRange');\n\n this.setModelValue('weldingPositionFillTestPiece', null);\n this.clearModelCollection('weldingPositionFillApprovalRange');\n this.setModelValue('weldingPositionFillDirection', null);\n\n this.setModelValue('arcTransferModeFillTestPiece', null);\n this.clearModelCollection('arcTransferModeFillApprovalRange');\n\n this.setModelValue('typeCurrentFillTestPiece', null);\n\n this.setModelDecimalValue('thicknessFillTestPiece', null);\n this.setModelValue('thicknessFillLayerTestPiece', null);\n this.setModelDecimalValue('thicknessFillMinimumApprovalRange', null);\n this.setModelDecimalValue('thicknessFillMaximumApprovalRange', null);\n\n this.setModelValue('shieldingFill', null);\n this.clearShieldingFill();\n\n this.removeFillerMaterialFillVariables();\n this.removeElectrodeTypeFill();\n }\n\n removeAllCapVariables() {\n this.clearModelCollection('weldingProcessCapApprovalRange');\n\n this.setModelValue('weldingPositionCapTestPiece', null);\n this.clearModelCollection('weldingPositionCapApprovalRange');\n this.setModelValue('weldingPositionCapDirection', null);\n\n this.setModelValue('arcTransferModeCapTestPiece', null);\n this.clearModelCollection('arcTransferModeCapApprovalRange');\n\n this.setModelValue('typeCurrentCapTestPiece', null);\n\n this.setModelDecimalValue('thicknessCapTestPiece', null);\n this.setModelValue('thicknessCapLayerTestPiece', null);\n this.setModelDecimalValue('thicknessCapMinimumApprovalRange', null);\n this.setModelDecimalValue('thicknessCapMaximumApprovalRange', null);\n\n this.setModelValue('shieldingCap', null);\n this.clearShieldingCap();\n\n this.removeFillerMaterialCapVariables();\n this.removeElectrodeTypeCap();\n }\n\n removeElectrodeTypeRoot() {\n this.setModelValue('electrodeTypeRootTestPiece', null);\n this.clearModelCollection('electrodeTypeRootApprovalRange');\n }\n\n removeElectrodeTypeFill() {\n this.setModelValue('electrodeTypeFillTestPiece', null);\n this.clearModelCollection('electrodeTypeFillApprovalRange');\n }\n\n removeElectrodeTypeCap() {\n this.setModelValue('electrodeTypeCapTestPiece', null);\n this.clearModelCollection('electrodeTypeCapApprovalRange');\n }\n\n removeFillerMaterialRootVariables() {\n this.setModelValue('fillerMaterialRootTestPiece', null);\n this.setModelValue('fillerMaterialRootCommercialDesignationTestPiece', null);\n this.clearModelCollection('fillerMaterialRootApprovalRange');\n }\n\n removeFillerMaterialFillVariables() {\n this.setModelValue('fillerMaterialFillTestPiece', null);\n this.clearModelCollection('fillerMaterialFillApprovalRange');\n this.setModelValue('fillerMaterialFillCommercialDesignationTestPiece', null);\n }\n\n removeFillerMaterialCapVariables() {\n this.setModelValue('fillerMaterialCapTestPiece', null);\n this.clearModelCollection('fillerMaterialCapApprovalRange');\n this.setModelValue('fillerMaterialCapCommercialDesignationTestPiece', null);\n }\n\n trackValidationError() {\n let errors: string[] = [];\n get(this.certificate, 'errors').forEach((error: any) => {\n errors.pushObject(error);\n });\n if (!isEmpty(errors)) {\n this.analytics.trackEvent(EVENTS.VALIDATION_FAILED, {\n id: get(this.certificate, 'id'),\n type: 'welder-certificate',\n errors,\n });\n }\n }\n\n saveCertificate = task(\n {\n drop: true,\n },\n async (options = {}) => {\n let { certificate, alertMessage: alert, intl, loading } = this;\n\n try {\n loading.block();\n await certificate.save();\n let reloadedCertificate = await this.data.loadAllDataWPQ(get(certificate, 'id'));\n this.args.replaceCertificate(reloadedCertificate);\n if (!options.silentSave) {\n this.showSaveSuccessMessage();\n }\n this.resetTabErrors();\n this._postSave(certificate, {});\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n alert.error(\n intl.t('edit-view.actions.generic-error', {\n name: get(certificate, 'certificateNumber'),\n })\n );\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n deleteCertificate() {\n let { certificate, loading, alertMessage: alert, intl } = this;\n let label = get(certificate, 'certificateNumber');\n let translation = intl.t('edit-view.actions.deleted', {\n name: label,\n });\n loading.block();\n certificate.deleteRecord();\n certificate\n .save()\n .then(() => {\n alert.success(translation);\n if (this.args.deleteInstance && typeof this.args.deleteInstance === 'function') {\n this.args.deleteInstance();\n }\n })\n .catch((reason: any) => {\n certificate.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n let foreignKeyMessage = intl.t('edit-view.actions.foreign-key-error', { name: label });\n alert.error(foreignKeyMessage);\n } else {\n alert.error(intl.t('edit-view.actions.generic-delete-error', { name: label }));\n }\n })\n .finally(() => {\n loading.unblock();\n this.isShowingDeleteModal = false;\n });\n }\n\n duplicateWelderCertificate = task(\n {\n drop: true,\n },\n async (options) => {\n let { intl, alertMessage: alert, loading, certificate } = this;\n let { certificateNumber, welder, unitSystem } = options;\n loading.block();\n\n await this.saveCertificate.perform({\n silentSave: true,\n });\n\n loading.block();\n try {\n let result = await certificate.duplicateCertificate({\n certificate: certificateNumber,\n welder,\n unitSystem,\n });\n this.args.afterDuplicateCertificate(result);\n } catch (error) {\n if (isDuplicateError(error)) {\n alert.error(\n intl.t('components.model-welder-certificate/edit.duplicated-certificate-number-error', {\n number: certificate,\n })\n );\n } else if (isPermissionDenied(error)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: certificate }));\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n archiveCertificate = task(\n {\n drop: true,\n },\n async (callback) => {\n let { loading, alertMessage: alert, intl, certificate } = this;\n\n await this.saveCertificate.perform({\n silentSave: true,\n });\n\n loading.block();\n try {\n await certificate.archive({});\n this.reloadCertificate()\n .then(() => {\n alert.success(\n intl.t('components.model-welder-certificate/edit.archive.messages.archive-success', {\n certificate: get(certificate, 'certificateNumber'),\n })\n );\n })\n .finally(() => {\n loading.unblock();\n if (typeof callback === 'function') {\n callback();\n }\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-welder-certificate/edit.archive.messages.archive-error')\n );\n }\n loading.unblock();\n } finally {\n this.showConfirmArchive = false;\n }\n }\n );\n\n unarchiveCertificate = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, certificate } = this;\n loading.block();\n try {\n await certificate.unarchive({});\n this.reloadCertificate()\n .then(() => {\n alert.success(\n intl.t(\n 'components.model-welder-certificate/edit.archive.messages.unarchive-success',\n {\n certificate: get(certificate, 'certificateNumber'),\n }\n )\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-welder-certificate/edit.archive.messages.unarchive-error')\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmUnarchive', false);\n }\n }\n );\n\n formatLastWeldingDate(date: Date | null) {\n if (!isEmpty(date)) {\n return moment(date).format(DEFAULT_DATE_FORMAT);\n }\n return null;\n }\n\n reloadCertificateTask = task(\n {\n drop: true,\n },\n async () => {\n let result = await this.data.loadAllDataWPQ(this.certificate.id);\n return result;\n }\n );\n\n reloadCertificate() {\n return this.data.loadAllDataWPQ(this.certificate.id);\n }\n\n // Flushes pending form edits so the backend recalculates the deadlines from the latest values\n async savePendingCertificateChanges() {\n if (get(this.certificate, 'hasDirtyAttributes')) {\n await this.certificate.save();\n }\n }\n\n revalidateCertificateInternallyAction = task(\n {\n drop: true,\n },\n async (\n certificate,\n type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR,\n report1,\n report2,\n weldingDate = null\n ) => {\n let report1Id = !isEmpty(report1) ? get(report1, 'id') : null;\n let report2Id = !isEmpty(report2) ? get(report2, 'id') : null;\n let result = await certificate.validateInternally({\n type,\n report1: report1Id,\n report2: report2Id,\n weldingDate: this.formatLastWeldingDate(weldingDate),\n });\n return result;\n }\n );\n\n @tracked\n errorData: string[] | null = [];\n\n revalidateCertificateInternally = task(\n {\n drop: true,\n },\n async (type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR) => {\n let { certificate, alert, intl, loading } = this;\n let { ndtReport1, ndtReport2, lastWeldingDate } = this;\n try {\n loading.block();\n await this.savePendingCertificateChanges();\n let { newDate } = await this.revalidateCertificateInternallyAction.perform(\n certificate,\n type,\n ndtReport1,\n ndtReport2,\n lastWeldingDate\n );\n alert.success(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-revalidated',\n { certificateNumber: get(certificate, 'certificateNumber'), newDate }\n )\n );\n this.ndtReport1 = null;\n this.ndtReport2 = null;\n this.showConfirmRevalidateInternally = false;\n await this.reloadCertificateTask.perform();\n } catch (reason) {\n if (\n getErrorCode(reason) === ERROR_CODES.CERTIFICATE_INTERNAL_DEADLINE_AFTER_EXTERNAL_DEADLINE\n ) {\n let errorData = JSON.parse(getErrorDetail(reason));\n this.showInternalRevalidationSurpassesExternalDeadlineSingle = true;\n this.showConfirmRevalidateInternally = false;\n this.errorData = errorData;\n } else {\n alert.error(\n intl.t('components.welder-certificate-expiration-table-internal', {\n certificateNumber: get(certificate, 'certificateNumber'),\n reason: reason.message,\n })\n );\n }\n } finally {\n loading.unblock();\n }\n }\n );\n\n revalidateCertificateExternally = task(\n {\n drop: true,\n },\n async () => {\n let { certificate, alert, intl, loading } = this;\n let { ndtReport1, ndtReport2 } = this;\n try {\n loading.block();\n await this.savePendingCertificateChanges();\n let report1Id = !isEmpty(ndtReport1) ? get(ndtReport1, 'id') : null;\n let report2Id = !isEmpty(ndtReport2) ? get(ndtReport2, 'id') : null;\n let { newDate } = await certificate.validateExternally({\n report1: report1Id,\n report2: report2Id,\n });\n await this.reloadCertificateTask.perform();\n alert.success(\n intl.t('components.welder-certificate-expiration-table.single-certificates-revalidated', {\n certificateNumber: get(certificate, 'certificateNumber'),\n newDate,\n })\n );\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n set(this, 'showConfirmRevalidateExternally', false);\n } catch ({ message }) {\n alert.error(\n intl.t('components.welder-certificate-expiration-table.single-certificates-error', {\n certificateNumber: get(certificate, 'certificateNumber'),\n message: message,\n })\n );\n } finally {\n loading.unblock();\n }\n }\n );\n\n revalidateCertificateInternallyOverrideInternal = task(\n {\n drop: true,\n },\n async () => {\n let { alertMessage: alert, intl, certificate } = this;\n let { ndtReport1, ndtReport2, lastWeldingDate } = this;\n try {\n await this.savePendingCertificateChanges();\n let { newDate } = await get(this, 'revalidateCertificateInternallyAction').perform(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.INTERNAL,\n ndtReport1,\n ndtReport2,\n lastWeldingDate\n );\n alert.success(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-revalidated',\n { certificateNumber: get(certificate, 'certificateNumber'), newDate }\n )\n );\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateInternallyFromInternal', false);\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n await this.reloadCertificateTask.perform();\n } catch ({ message }) {\n alert.error(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-error',\n { certificateNumber: get(certificate, 'certificateNumber'), reason: message }\n )\n );\n }\n }\n );\n\n revalidateCertificateInternallyOverrideExternal = task(\n {\n drop: true,\n },\n async () => {\n let { ndtReport1, ndtReport2, lastWeldingDate } = this;\n let { alertMessage: alert, intl, certificate } = this;\n try {\n await this.savePendingCertificateChanges();\n let { newDate } = await get(this, 'revalidateCertificateInternallyAction').perform(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.EXTERNAL,\n ndtReport1,\n ndtReport2,\n lastWeldingDate\n );\n alert.success(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-revalidated',\n { certificateNumber: get(certificate, 'certificateNumber'), newDate }\n )\n );\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateExternallyFromInternal', false);\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n await this.reloadCertificateTask.perform();\n } catch ({ message }) {\n alert.error(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-error',\n { certificateNumber: get(certificate, 'certificateNumber'), reason: message }\n )\n );\n }\n }\n );\n\n generateReport = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, taskMonitor, intl, certificate } = this;\n let certificateId = get(certificate, 'id');\n if (taskMonitor.hasTaskByContext('welder-certificate', certificateId)) {\n taskMonitor.removeTaskByContext('welder-certificate', certificateId);\n }\n\n if (!certificate.validate()) {\n this.validationFailed();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n await this.saveCertificate.perform({\n silentSave: true,\n });\n\n loading.block();\n await certificate\n .createReport({})\n .then((response: any) => {\n if (response.status === '200') {\n get(taskMonitor, 'monitorTask').perform(response.taskIdentifier);\n } else {\n alert.error(`Problem occured ${response.status}`);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n );\n\n finishReportGeneration = task(async () => {\n await this.reloadCertificateTask.perform();\n });\n\n approvalRange: WelderCertificateApprovalRange;\n\n constructor() {\n super(...arguments);\n if (this.certificate.isWelderOperatorCertificate) {\n this.approvalRange = new WopqApprovalRange(\n this.certificate,\n this.data,\n this.certificate.unitSystem || this.userSession.unitSystem\n );\n } else {\n this.approvalRange = new WpqApprovalRange(\n this.certificate,\n this.data,\n this.certificate.unitSystem || this.userSession.unitSystem\n );\n }\n this.updateMachineName.perform();\n }\n\n @action\n setWelder(welder: Welder) {\n this.setModelValue('welder', welder);\n if (!isEmpty(welder) && !isEmpty(welder.id)) {\n hash({\n welderCompany: get(welder, 'company'),\n currentCompany: this.getModelValue('company'),\n }).then(({ welderCompany, currentCompany }) => {\n if (!isEmpty(welderCompany) && !isEmpty(welderCompany.id) && isEmpty(currentCompany)) {\n this.setModelValue('company', welderCompany);\n }\n });\n }\n }\n\n @action\n searchWelderByStamp(term: string) {\n return this.data.findWelderByStamp(term);\n }\n\n @action\n searchWelderByName(term: string) {\n return this.data.findWelderByName(term);\n }\n\n @action\n setEmissionDate(value: Date | null) {\n this.setModelValue('emissionDate', value);\n let standard = this.certificateStandard;\n\n if (isEmpty(this.getModelValue('internalRequalificationDate'))) {\n this.setInternalRequalificationDate(value);\n }\n if (\n isEmpty(this.getModelValue('previousExternalRequalificationDate')) &&\n (isWelderStandardISO96061(standard) || isWelderStandardISO96062(standard))\n ) {\n this.setPreviousExternalRequalificationDate(value);\n }\n }\n\n @action\n setPreviousExternalRequalificationDate(value: Date | null) {\n this.setModelValue('previousExternalRequalificationDate', value);\n let requalificationPeriod = this.getModelValue('requalificationPeriod');\n if (!isEmpty(requalificationPeriod) && !isNaN(parseInt(requalificationPeriod))) {\n this.updateExternalRequalificationDate();\n } else {\n let message = this.intl.t(\n 'model-validations.welder-certificate.requalificationPeriod.cannot-calculate'\n );\n let title = this.intl.t('model.welder-certificate.requalificationPeriod.label');\n this.alertMessage.info(message, title, { timeOut: 15000, extendedTimeOut: 15000 });\n }\n }\n\n @action\n setInternalRequalificationDate(value: Date | null) {\n this.setModelValue('internalRequalificationDate', value);\n this.updateInternalRequalificationDeadline();\n }\n\n @action\n setWeldingProcessRootTestPiece(value: WeldingProcess | null) {\n this.removeAllRootVariables();\n this.setModelValue('weldingProcessRootTestPiece', value);\n if (!isEmpty(value)) {\n this.updateWeldingProcessRootApprovalRange();\n this.updateShieldingRoot(this.certificate);\n } else {\n this.removeAllFillVariables();\n this.setModelValue('weldingProcessFillTestPiece', null);\n this.removeAllCapVariables();\n this.setModelValue('weldingProcessCapTestPiece', null);\n }\n }\n\n @action\n setWeldingProcessFillTestPiece(value: WeldingProcess | null) {\n this.removeAllFillVariables();\n this.setModelValue('weldingProcessFillTestPiece', value);\n if (!isEmpty(value)) {\n this.updateWeldingProcessFillApprovalRange();\n this.updateShieldingFill(this.certificate);\n } else {\n this.removeAllCapVariables();\n this.setModelValue('weldingProcessCapTestPiece', null);\n }\n }\n\n @action\n setWeldingProcessCapTestPiece(value: WeldingProcess | null) {\n this.removeAllCapVariables();\n this.setModelValue('weldingProcessCapTestPiece', value);\n if (!isEmpty(value)) {\n this.updateWeldingProcessCapApprovalRange();\n this.updateShieldingCap(this.certificate);\n }\n }\n\n @action\n setWeldTypeTestPiece(value: WeldType) {\n this.setModelValue('weldTypeTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('weldTypeApprovalRange');\n }\n\n if (isFilletWeld(value)) {\n set(this, 'dissimilarMaterials', true);\n let currentDetailsTestPiece = this.getModelValue('weldingDetailTestPiece');\n let validDetails = filterDetailsIncompatibleWithFilletWeld(currentDetailsTestPiece);\n this.setModelCollection('weldingDetailTestPiece', validDetails);\n\n let currentDetailsApprovalRange = this.getModelValue('weldingDetailsApprovalRange');\n let validDetailsApprovalRange = filterDetailsIncompatibleWithFilletWeld(\n currentDetailsApprovalRange\n );\n this.setModelCollection('weldingDetailsApprovalRange', validDetailsApprovalRange);\n }\n\n if (this.isOverlayWeld) {\n let currentDetailsTestPiece = this.getModelValue('weldingDetailTestPiece');\n let validDetails = filterDetailsIncompatibleWithOverlayWeld(currentDetailsTestPiece);\n this.setModelCollection('weldingDetailTestPiece', validDetails);\n\n let currentDetailsApprovalRange = this.getModelValue('weldingDetailsApprovalRange');\n let validDetailsApprovalRange = filterDetailsIncompatibleWithOverlayWeld(\n currentDetailsApprovalRange\n );\n this.setModelCollection('weldingDetailsApprovalRange', validDetailsApprovalRange);\n }\n\n if (isPartialPenetrationButtWeld(value)) {\n let currentDetailsTestPiece = this.getModelValue('weldingDetailTestPiece');\n let validDetails =\n filterDetailsIncompatibleWithPartialPenetrationButtWeld(currentDetailsTestPiece);\n this.setModelCollection('weldingDetailTestPiece', validDetails);\n }\n\n // Alway reset the overlay type and joint type\n this.setModelValue('overlayType', null);\n this.setModelValue('jointType', null);\n\n this.updateAllThickness();\n this.updateWeldTypes();\n this.updateAllWeldingPositions();\n this.updateWeldingDetails();\n }\n\n @action\n setSupplementaryFilletWeldTest(value: WelderCertificate | null) {\n this.setModelValue('supplementaryFilletWeldTest', value);\n }\n\n @action\n setSupplementaryFilletWeldTestRequired(value: boolean) {\n this.setModelValue('supplementaryFilletWeldTestRequired', value);\n this.updateWeldTypes();\n this.updateAllWeldingPositions();\n }\n\n @action\n setArcTransferModeRootTestPiece(value: ArcTransferMode) {\n this.setModelValue('arcTransferModeRootTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('arcTransferModeRootApprovalRange');\n } else {\n this.updateArcTransferModeRoot();\n this.updateWeldingProcessRootApprovalRange();\n }\n }\n\n @action\n setArcTransferModeFillTestPiece(value: ArcTransferMode) {\n this.setModelValue('arcTransferModeFillTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('arcTransferModeFillApprovalRange');\n } else {\n this.updateArcTransferModeFill();\n this.updateWeldingProcessFillApprovalRange();\n }\n }\n\n @action\n setArcTransferModeCapTestPiece(value: ArcTransferMode) {\n this.setModelValue('arcTransferModeCapTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('arcTransferModeCapApprovalRange');\n } else {\n this.updateArcTransferModeCap();\n this.updateWeldingProcessCapApprovalRange();\n }\n }\n\n @action\n setProcessMecanizationRootTestPiece(value: ProcessMecanization) {\n if (value) {\n set(this.certificate, 'processMecanizationRootTestPiece', value);\n let approvalRange = this.approvalRange.processMecanization(\n value,\n new WelderCertificateTestPieceValues(this.certificate, Process.PROCESS1)\n );\n get(this.certificate, 'processMecanizationRootApprovalRange').clear();\n get(this.certificate, 'processMecanizationRootApprovalRange').pushObjects(approvalRange);\n } else {\n set(this.certificate, 'processMecanizationRootTestPiece', null);\n get(this.certificate, 'processMecanizationRootApprovalRange').clear();\n }\n }\n\n @action\n setProcessMecanizationRootApprovalRange(_value: ProcessMecanization[]) {}\n\n @action\n setProcessMecanizationFillApprovalRange(_value: ProcessMecanization[]) {}\n\n @action\n setProcessMecanizationCapApprovalRange(_value: ProcessMecanization[]) {}\n\n @action\n setProcessMecanizationFillTestPiece(value: ProcessMecanization) {\n if (value) {\n set(this.certificate, 'processMecanizationFillTestPiece', value);\n let approvalRange = this.approvalRange.processMecanization(\n value,\n new WelderCertificateTestPieceValues(this.certificate, Process.PROCESS2)\n );\n get(this.certificate, 'processMecanizationFillApprovalRange').clear();\n get(this.certificate, 'processMecanizationFillApprovalRange').pushObjects(approvalRange);\n } else {\n set(this.certificate, 'processMecanizationFillTestPiece', null);\n get(this.certificate, 'processMecanizationFillApprovalRange').clear();\n }\n }\n\n @action\n setProcessMecanizationCapTestPiece(value: ProcessMecanization) {\n if (value) {\n set(this.certificate, 'processMecanizationCapTestPiece', value);\n let approvalRange = this.approvalRange.processMecanization(\n value,\n new WelderCertificateTestPieceValues(this.certificate, Process.PROCESS3)\n );\n get(this.certificate, 'processMecanizationCapApprovalRange').clear();\n get(this.certificate, 'processMecanizationCapApprovalRange').pushObjects(approvalRange);\n } else {\n set(this.certificate, 'processMecanizationCapTestPiece', null);\n get(this.certificate, 'processMecanizationCapApprovalRange').clear();\n }\n }\n\n @action\n setWeldingDetailTestPiece(value: WeldingDetail[]) {\n this.setModelCollection('weldingDetailTestPiece', value);\n this.validateField('weldingDetailTestPiece');\n if (!isEmpty(value)) {\n this.updateWeldingDetails();\n } else {\n this.clearModelCollection('weldingDetailsApprovalRange');\n }\n }\n\n @action\n setWeldingPositionRootTestPiece(value: WeldingPosition) {\n this.setModelValue('weldingPositionRootTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('weldingPositionRootApprovalRange');\n }\n this.updateWeldingPositionsRoot();\n }\n\n @action\n setWeldingPositionFillTestPiece(value: WeldingPosition) {\n this.setModelValue('weldingPositionFillTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('weldingPositionFillApprovalRange');\n }\n this.updateWeldingPositionsFill();\n }\n\n @action\n setWeldingPositionCapTestPiece(value: WeldingPosition) {\n this.setModelValue('weldingPositionCapTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('weldingPositionCapApprovalRange');\n }\n this.updateWeldingPositionsCap();\n }\n\n @action\n setTypeCurrentRootTestPiece(value: TypeCurrentPolarity) {\n this.setModelValue('typeCurrentRootTestPiece', value);\n }\n\n @action\n setTypeCurrentFillTestPiece(value: TypeCurrentPolarity) {\n this.setModelValue('typeCurrentFillTestPiece', value);\n }\n\n @action\n setTypeCurrentCapTestPiece(value: TypeCurrentPolarity) {\n this.setModelValue('typeCurrentCapTestPiece', value);\n }\n\n @action\n setBaseMaterial1TestPiece(value: BaseMaterial) {\n this.setModelValue('baseMaterial1TestPiece', value);\n let baseMaterial2 = this.getModelValue('baseMaterial2TestPiece');\n if (\n isEmpty(baseMaterial2) ||\n (baseMaterial2 !== null && isEmpty(baseMaterial2.get('id'))) ||\n this.isOverlayWeld\n ) {\n this.setBaseMaterial2TestPiece(value);\n }\n this.updateBaseMaterial1();\n }\n\n @action\n removeBaseMaterial1TestPiece() {\n this.setModelValue('baseMaterial1TestPiece', null);\n this.clearModelCollection('baseMaterial1ApprovalRange');\n if (!this.hasDissimilarMaterials) {\n this.setModelValue('baseMaterial2TestPiece', null);\n this.clearModelCollection('baseMaterial2ApprovalRange');\n }\n }\n\n @action\n searchBaseMaterialGroup(term: string) {\n return this.data.findBaseMaterialGroup(term, this.currentIndustryCodeId);\n }\n\n @action\n searchFillerMaterialGroup(term: string) {\n return this.data.findFillerMaterialGroup(term, this.currentIndustryCodeId);\n }\n\n @action\n setBaseMaterial2TestPiece(value: BaseMaterial) {\n this.setModelValue('baseMaterial2TestPiece', value);\n let baseMaterial1 = this.getModelValue('baseMaterial1TestPiece');\n if (isEmpty(baseMaterial1) || (baseMaterial1 !== null && isEmpty(baseMaterial1.get('id')))) {\n this.setBaseMaterial1TestPiece(value);\n }\n this.updateBaseMaterial2();\n }\n\n @action\n removeBaseMaterial2TestPiece() {\n this.setModelValue('baseMaterial2TestPiece', null);\n this.clearModelCollection('baseMaterial2ApprovalRange');\n }\n\n @action\n setProductTypeTestPiece(value: string) {\n this.setModelValue('productTypeTestPiece', value);\n this.updateWeldTypes();\n this.updateAllThickness();\n if (value === PRODUCT_TYPE.PLATE) {\n this.setModelValue('diameterTestPiece', null);\n this.setModelValue('diameterMinimumApprovalRange', null);\n this.setModelValue('diameterMaximumApprovalRange', null);\n }\n this.updateDiameter();\n }\n\n @action\n setThicknessRootTestPiece(value: number) {\n this.setModelDecimalValue('thicknessRootTestPiece', value);\n if (this.validateField('thicknessRootTestPiece')) {\n this.updateThicknessRoot();\n }\n }\n\n @action\n setThicknessRootLayerTestPiece(value: string) {\n this.setModelValue('thicknessRootLayerTestPiece', value);\n }\n\n @action\n setThicknessFillTestPiece(value: number) {\n this.setModelDecimalValue('thicknessFillTestPiece', value);\n if (this.validateField('thicknessFillTestPiece')) {\n this.updateThicknessFill();\n }\n }\n\n @action\n setThicknessFillLayerTestPiece(value: number) {\n this.setModelValue('thicknessFillLayerTestPiece', value);\n }\n\n @action\n setThicknessCapTestPiece(value: number) {\n this.setModelDecimalValue('thicknessCapTestPiece', value);\n if (this.validateField('thicknessCapTestPiece')) {\n this.updateThicknessCap();\n }\n }\n\n @action\n setThicknessCapLayerTestPiece(value: number) {\n this.setModelValue('thicknessCapLayerTestPiece', value);\n }\n\n @action\n setThicknessTotalTestPiece(value: number) {\n this.setModelDecimalValue('thicknessTotalTestPiece', value);\n if (this.validateField('thicknessTotalTestPiece')) {\n this.updateThicknessTotal();\n\n this.setModelDecimalValue('baseMaterial1Thickness', value);\n this.setModelDecimalValue('baseMaterial2Thickness', value);\n }\n }\n\n @action\n setDiameterTestPiece(value: number) {\n this.setModelDecimalValue('diameterTestPiece', value);\n if (this.validateField('diameterTestPiece')) {\n this.updateDiameter();\n this.updateThicknessTotal();\n this.setModelDecimalValue('baseMaterial1Diameter', value);\n this.setModelDecimalValue('baseMaterial2Diameter', value);\n }\n }\n\n @action\n setFillerMaterialRootTestPiece(value: FillerMaterial) {\n this.setModelValue('fillerMaterialRootTestPiece', value);\n this.setModelValue('fillerMaterialRootCommercialDesignationTestPiece', null);\n this.updateFillerMaterialGroupRoot();\n }\n\n @action\n removeFillerMaterialRootTestPiece() {\n this.removeFillerMaterialRootVariables();\n this.removeElectrodeTypeRoot();\n }\n\n @action\n setFillerMaterialRootCommercialDesignationTestPiece(value: FillerMaterialCommercialDesignation) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialRootTestPiece(fillerMaterial);\n }\n\n this.setModelValue('fillerMaterialRootCommercialDesignationTestPiece', value);\n }\n\n @action\n setFillerMaterialFillTestPiece(value: FillerMaterial) {\n this.setModelValue('fillerMaterialFillTestPiece', value);\n this.setModelValue('fillerMaterialFillCommercialDesignationTestPiece', null);\n this.updateFillerMaterialGroupFill();\n }\n\n @action\n setFillerMaterialCapTestPiece(value: FillerMaterial) {\n this.setModelValue('fillerMaterialCapTestPiece', value);\n this.setModelValue('fillerMaterialCapCommercialDesignationTestPiece', null);\n this.updateFillerMaterialGroupCap();\n }\n\n @action\n removeFillerMaterialFillTestPiece() {\n this.removeFillerMaterialFillVariables();\n this.removeElectrodeTypeFill();\n }\n\n @action\n removeFillerMaterialCapTestPiece() {\n this.removeFillerMaterialCapVariables();\n this.removeElectrodeTypeCap();\n }\n\n @action\n setFillerMaterialFillCommercialDesignationTestPiece(value: FillerMaterialCommercialDesignation) {\n if (!isEmpty(value)) {\n let fillerMaterial = get(value, 'fillerMaterial');\n this.setFillerMaterialFillTestPiece(fillerMaterial);\n }\n\n this.setModelValue('fillerMaterialFillCommercialDesignationTestPiece', value);\n }\n\n @action\n setFillerMaterialCapCommercialDesignationTestPiece(value: FillerMaterialCommercialDesignation) {\n if (!isEmpty(value)) {\n let fillerMaterial = get(value, 'fillerMaterial');\n this.setFillerMaterialCapTestPiece(fillerMaterial);\n }\n\n this.setModelValue('fillerMaterialCapCommercialDesignationTestPiece', value);\n }\n\n @action\n setElectrodeTypeRootTestPiece(value: ElectrodeType) {\n this.setModelValue('electrodeTypeRootTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('electrodeTypeRootApprovalRange');\n }\n this.updateElectrodeTypeRoot();\n }\n\n @action\n setElectrodeTypeFillTestPiece(value: ElectrodeType) {\n this.setModelValue('electrodeTypeFillTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('electrodeTypeFillApprovalRange');\n }\n this.updateElectrodeTypeFill();\n }\n\n @action\n setElectrodeTypeCapTestPiece(value: ElectrodeType) {\n this.setModelValue('electrodeTypeCapTestPiece', value);\n if (isEmpty(value)) {\n this.clearModelCollection('electrodeTypeCapApprovalRange');\n }\n this.updateElectrodeTypeCap();\n }\n\n @action\n setShieldingRoot(value: string) {\n this.setModelValue('shieldingRoot', value);\n this.validateField('shieldingRoot');\n this.clearShieldingRoot();\n }\n\n @action\n setShieldingRootGasTestPiece(value: Gas) {\n this.setModelValue('shieldingRootGasTestPiece', value);\n\n this.setModelValue('shieldingRootGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingRootGasMixture', null);\n\n this.validateField('shieldingRootGasTestPiece');\n }\n\n @action\n removeShieldingRootGasTestPiece() {\n this.setModelValue('shieldingRootGasTestPiece', null);\n this.setModelValue('shieldingRootGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingRootGasMixture', null);\n\n this.validateField('shieldingRootGasTestPiece');\n }\n\n @action\n setShieldingRootGasCommercialDesignationTestPiece(value: GasCommercialDesignation) {\n this.setModelValue('shieldingRootGasCommercialDesignationTestPiece', value);\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (gasMixture && !isEmpty(gasMixture)) {\n this.setShieldingRootGasMixture(gasMixture);\n }\n } else {\n this.setShieldingRootGasMixture(null);\n }\n }\n\n @action\n setShieldingRootFluxTestPiece(value: Flux) {\n this.setModelValue('shieldingRootFluxTestPiece', value);\n this.setModelValue('shieldingRootFluxCommercialDesignationTestPiece', null);\n this.validateField('shieldingRootFluxTestPiece');\n }\n\n @action\n removeShieldingRootFluxTestPiece() {\n this.setModelValue('shieldingRootFluxTestPiece', null);\n this.setModelValue('shieldingRootFluxCommercialDesignationTestPiece', null);\n this.validateField('shieldingRootFluxTestPiece');\n }\n\n @action\n setShieldingRootFluxCommercialDesignationTestPiece(value: FluxCommercialDesignation) {\n this.setModelValue('shieldingRootFluxCommercialDesignationTestPiece', value);\n }\n\n @action\n setFlowRateRoot(value: string) {\n this.setModelValue('flowRateRoot', value);\n }\n\n @action\n setShieldingFill(value: string) {\n this.setModelValue('shieldingFill', value);\n this.validateField('shieldingFill');\n this.clearShieldingFill();\n }\n\n @action\n setShieldingFillGasTestPiece(value: Gas) {\n this.setModelValue('shieldingFillGasTestPiece', value);\n\n this.setModelValue('shieldingFillGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingFillGasMixture', null);\n this.validateField('shieldingFillGasTestPiece');\n }\n\n @action\n removeShieldingFillGasTestPiece() {\n this.setModelValue('shieldingFillGasTestPiece', null);\n this.setModelValue('shieldingFillGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingFillGasMixture', null);\n this.validateField('shieldingFillGasTestPiece');\n }\n\n @action\n setShieldingFillGasCommercialDesignationTestPiece(value: GasCommercialDesignation) {\n this.setModelValue('shieldingFillGasCommercialDesignationTestPiece', value);\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (gasMixture && !isEmpty(gasMixture)) {\n this.setShieldingFillGasMixture(gasMixture);\n }\n } else {\n this.setShieldingFillGasMixture(null);\n }\n }\n\n @action\n setShieldingFillFluxTestPiece(value: Flux) {\n this.setModelValue('shieldingFillFluxTestPiece', value);\n this.setModelValue('shieldingFillFluxCommercialDesignationTestPiece', null);\n this.validateField('shieldingFillFluxTestPiece');\n }\n\n @action\n removeShieldingFillFluxTestPiece() {\n this.setModelValue('shieldingFillFluxTestPiece', null);\n this.setModelValue('shieldingFillFluxCommercialDesignationTestPiece', null);\n this.validateField('shieldingFillFluxTestPiece');\n }\n\n @action\n setShieldingFillFluxCommercialDesignationTestPiece(value: FluxCommercialDesignation) {\n this.setModelValue('shieldingFillFluxCommercialDesignationTestPiece', value);\n }\n\n @action\n setFlowRateFill(value: string) {\n this.setModelValue('flowRateFill', value);\n }\n\n @action\n setShieldingCap(value: string) {\n this.setModelValue('shieldingCap', value);\n this.validateField('shieldingCap');\n this.clearShieldingCap();\n }\n\n @action\n setShieldingCapGasTestPiece(value: Gas) {\n this.setModelValue('shieldingCapGasTestPiece', value);\n\n this.setModelValue('shieldingCapGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingCapGasMixture', null);\n this.validateField('shieldingCapGasTestPiece');\n }\n\n @action\n removeShieldingCapGasTestPiece() {\n this.setModelValue('shieldingCapGasTestPiece', null);\n this.setModelValue('shieldingCapGasCommercialDesignationTestPiece', null);\n this.setModelValue('shieldingCapGasMixture', null);\n this.validateField('shieldingCapGasTestPiece');\n }\n\n @action\n setShieldingCapGasCommercialDesignationTestPiece(value: GasCommercialDesignation) {\n this.setModelValue('shieldingCapGasCommercialDesignationTestPiece', value);\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (gasMixture && !isEmpty(gasMixture)) {\n this.setShieldingCapGasMixture(gasMixture);\n }\n } else {\n this.setShieldingCapGasMixture(null);\n }\n }\n\n @action\n setShieldingCapFluxTestPiece(value: Flux) {\n this.setModelValue('shieldingCapFluxTestPiece', value);\n this.setModelValue('shieldingCapFluxCommercialDesignationTestPiece', null);\n this.validateField('shieldingCapFluxTestPiece');\n }\n\n @action\n removeShieldingCapFluxTestPiece() {\n this.setModelValue('shieldingCapFluxTestPiece', null);\n this.setModelValue('shieldingCapFluxCommercialDesignationTestPiece', null);\n this.validateField('shieldingCapFluxTestPiece');\n }\n\n @action\n setShieldingCapFluxCommercialDesignationTestPiece(value: FluxCommercialDesignation) {\n this.setModelValue('shieldingCapFluxCommercialDesignationTestPiece', value);\n }\n\n @action\n setFlowRateCap(value: string) {\n this.setModelValue('flowRateCap', value);\n }\n\n @action\n setBackingTestPiece(value: string) {\n this.setModelValue('backingTestPiece', value);\n\n this.setModelValue('backingGasTestPiece', null);\n this.setModelValue('backingGasCommercialDesignationTestPiece', null);\n this.setModelValue('backingGasMixture', null);\n this.setModelValue('backingFluxTestPiece', null);\n this.setModelValue('backingFluxCommercialDesignationTestPiece', null);\n this.setModelValue('backingFlowRateRoot', null);\n this.setModelValue('backingFlowRateFill', null);\n this.setModelValue('backingFlowRateCap', null);\n }\n\n @action\n setBackingGasTestPiece(value: Gas) {\n this.setModelValue('backingGasTestPiece', value);\n\n this.setModelValue('backingGasCommercialDesignationTestPiece', null);\n this.setModelValue('backingGasMixture', null);\n\n this.validateField('backingGasTestPiece');\n }\n\n @action\n removeBackingGasTestPiece() {\n this.setModelValue('backingGasTestPiece', null);\n this.setModelValue('backingGasCommercialDesignationTestPiece', null);\n this.setModelValue('backingGasMixture', null);\n\n this.validateField('backingGasTestPiece');\n }\n\n @action\n setBackingGasCommercialDesignationTestPiece(value: GasCommercialDesignation) {\n this.setModelValue('backingGasCommercialDesignationTestPiece', value);\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (gasMixture && !isEmpty(gasMixture)) {\n this.setBackingGasMixture(gasMixture);\n }\n } else {\n this.setBackingGasMixture(null);\n }\n }\n\n @action\n setBackingFluxTestPiece(value: Flux) {\n this.setModelValue('backingFluxTestPiece', value);\n\n this.setModelValue('backingFluxCommercialDesignationTestPiece', null);\n\n this.validateField('backingFluxTestPiece');\n }\n\n @action\n removeBackingFluxTestPiece() {\n this.setModelValue('backingFluxTestPiece', null);\n this.setModelValue('backingFluxCommercialDesignationTestPiece', null);\n this.validateField('backingFluxTestPiece');\n }\n\n @action\n setBackingFluxCommercialDesignationTestPiece(value: FluxCommercialDesignation) {\n this.setModelValue('backingFluxCommercialDesignationTestPiece', value);\n }\n\n @action\n setBackingFlowRateRoot(value: string) {\n this.setModelValue('backingFlowRateRoot', value);\n }\n\n @action\n setBackingFlowRateFill(value: string) {\n this.setModelValue('backingFlowRateFill', value);\n }\n\n @action\n setBackingFlowRateCap(value: string) {\n this.setModelValue('backingFlowRateCap', value);\n }\n\n @action\n setWeldingProcessRootApprovalRange(value: WeldingProcess[]) {\n this.setModelCollection('weldingProcessRootApprovalRange', value);\n }\n\n @action\n setWeldingProcessFillApprovalRange(value: WeldingProcess[]) {\n this.setModelCollection('weldingProcessFillApprovalRange', value);\n }\n\n @action\n setWeldingProcessCapApprovalRange(value: WeldingProcess[]) {\n this.setModelCollection('weldingProcessCapApprovalRange', value);\n }\n\n @action\n setWeldTypeApprovalRange(value: WeldType[]) {\n this.setModelCollection('weldTypeApprovalRange', value);\n }\n\n @action\n setArcTransferModeRootApprovalRange(value: ArcTransferMode[]) {\n this.setModelCollection('arcTransferModeRootApprovalRange', value);\n }\n\n @action\n setArcTransferModeFillApprovalRange(value: ArcTransferMode[]) {\n this.setModelCollection('arcTransferModeFillApprovalRange', value);\n }\n\n @action\n setArcTransferModeCapApprovalRange(value: ArcTransferMode[]) {\n this.setModelCollection('arcTransferModeCapApprovalRange', value);\n }\n\n @action\n setWeldingDetailsApprovalRange(value: WeldingDetail[]) {\n this.setModelCollection('weldingDetailsApprovalRange', value);\n }\n\n @action\n setWeldingPositionRootApprovalRange(value: WeldingPosition[]) {\n this.setModelCollection('weldingPositionRootApprovalRange', value);\n }\n\n @action\n setWeldingPositionFillApprovalRange(value: WeldingPosition[]) {\n this.setModelCollection('weldingPositionFillApprovalRange', value);\n }\n\n @action\n setWeldingPositionCapApprovalRange(value: WeldingPosition[]) {\n this.setModelCollection('weldingPositionCapApprovalRange', value);\n }\n\n @action\n setBaseMaterial1ApprovalRange(value: BaseMaterialGroup[]) {\n this.setModelCollection('baseMaterial1ApprovalRange', value);\n }\n\n @action\n setBaseMaterial2ApprovalRange(value: BaseMaterialGroup[]) {\n this.setModelCollection('baseMaterial2ApprovalRange', value);\n }\n\n @action\n setThicknessRootMinimumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessRootMinimumApprovalRange', value);\n this.validateField('thicknessRootMinimumApprovalRange');\n }\n\n @action\n setThicknessRootMaximumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessRootMaximumApprovalRange', value);\n this.validateField('thicknessRootMaximumApprovalRange');\n }\n\n @action\n setThicknessFillMinimumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessFillMinimumApprovalRange', value);\n this.validateField('thicknessFillMinimumApprovalRange');\n }\n\n @action\n setThicknessFillMaximumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessFillMaximumApprovalRange', value);\n this.validateField('thicknessFillMaximumApprovalRange');\n }\n\n @action\n setThicknessCapMinimumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessCapMinimumApprovalRange', value);\n this.validateField('thicknessCapMinimumApprovalRange');\n }\n\n @action\n setThicknessCapMaximumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessCapMaximumApprovalRange', value);\n this.validateField('thicknessCapMaximumApprovalRange');\n }\n\n @action\n setThicknessTotalMinimumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessTotalMinimumApprovalRange', value);\n this.validateField('thicknessTotalMinimumApprovalRange');\n }\n\n @action\n setThicknessTotalMaximumApprovalRange(value: number) {\n this.setModelDecimalValue('thicknessTotalMaximumApprovalRange', value);\n this.validateField('thicknessTotalMaximumApprovalRange');\n }\n\n @action\n setDiameterMinimumApprovalRange(value: number) {\n this.setModelDecimalValue('diameterMinimumApprovalRange', value);\n this.validateField('diameterMinimumApprovalRange');\n }\n\n @action\n setDiameterMaximumApprovalRange(value: number) {\n this.setModelDecimalValue('diameterMaximumApprovalRange', value);\n this.validateField('diameterMaximumApprovalRange');\n }\n\n @action\n setFillerMaterialRootApprovalRange(value: FillerMaterialGroup[]) {\n this.setModelCollection('fillerMaterialRootApprovalRange', value);\n }\n\n @action\n setFillerMaterialFillApprovalRange(value: FillerMaterialGroup[]) {\n this.setModelCollection('fillerMaterialFillApprovalRange', value);\n }\n\n @action\n setFillerMaterialCapApprovalRange(value: FillerMaterialGroup[]) {\n this.setModelCollection('fillerMaterialCapApprovalRange', value);\n }\n\n @action\n setElectrodeTypeRootApprovalRange(value: ElectrodeType[]) {\n this.setModelCollection('electrodeTypeRootApprovalRange', value);\n }\n\n @action\n setElectrodeTypeFillApprovalRange(value: ElectrodeType[]) {\n this.setModelCollection('electrodeTypeFillApprovalRange', value);\n }\n\n @action\n setElectrodeTypeCapApprovalRange(value: ElectrodeType[]) {\n this.setModelCollection('electrodeTypeCapApprovalRange', value);\n }\n\n @action\n setRequalificationPeriod(value: number) {\n this.setModelValue('requalificationPeriod', value);\n if (!isEmpty(value) && this.validateField('requalificationPeriod')) {\n this.updateExternalRequalificationDate();\n }\n }\n\n @action\n setSection(type: string) {\n this.args.onSectionSelect(type);\n }\n\n @action\n createFillerMaterialRootCommercialDesignation(\n designationName: string,\n fillerMaterial: FillerMaterial\n ) {\n this.loading.block();\n this.createFillerMaterialCommercialDesignation(designationName, fillerMaterial)\n .then((designation: FillerMaterialCommercialDesignation) => {\n this.setFillerMaterialRootCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('filler-material-commercial-designation');\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('filler-material-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createFillerMaterialFillCommercialDesignation(\n designationName: string,\n fillerMaterial: FillerMaterial\n ) {\n this.loading.block();\n this.createFillerMaterialCommercialDesignation(designationName, fillerMaterial)\n .then((designation: FillerMaterialCommercialDesignation) => {\n this.setFillerMaterialFillCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('filler-material-commercial-designation');\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('filler-material-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createFillerMaterialCapCommercialDesignation(\n designationName: string,\n fillerMaterial: FillerMaterial\n ) {\n this.loading.block();\n this.createFillerMaterialCommercialDesignation(designationName, fillerMaterial)\n .then((designation: FillerMaterialCommercialDesignation) => {\n this.setFillerMaterialCapCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('filler-material-commercial-designation');\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('filler-material-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingRootGasCommercialDesignation(designationName: string, gas: Gas, mixture: string) {\n this.loading.block();\n this.createGasCommercialDesignation(designationName, gas, mixture)\n .then((designation: GasCommercialDesignation) => {\n this.setShieldingRootGasCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingFillGasCommercialDesignation(designationName: string, gas: Gas, mixture: string) {\n this.loading.block();\n this.createGasCommercialDesignation(designationName, gas, mixture)\n .then((designation: GasCommercialDesignation) => {\n this.setShieldingFillGasCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingCapGasCommercialDesignation(designationName: string, gas: Gas, mixture: string) {\n this.loading.block();\n this.createGasCommercialDesignation(designationName, gas, mixture)\n .then((designation: GasCommercialDesignation) => {\n this.setShieldingCapGasCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createBackingGasCommercialDesignation(designationName: string, gas: Gas, mixture: string) {\n this.loading.block();\n this.createGasCommercialDesignation(designationName, gas, mixture)\n .then((designation: GasCommercialDesignation) => {\n this.setBackingGasCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n this.analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingRootFluxCommercialDesignation(designationName: string, flux: Flux) {\n this.loading.block();\n this.createFluxCommercialDesignation(designationName, flux)\n .then((designation: FluxCommercialDesignation) => {\n this.setShieldingRootFluxCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingFillFluxCommercialDesignation(designationName: string, flux: Flux) {\n this.loading.block();\n this.createFluxCommercialDesignation(designationName, flux)\n .then((designation: FluxCommercialDesignation) => {\n this.setShieldingFillFluxCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createShieldingCapFluxCommercialDesignation(designationName: string, flux: Flux) {\n this.loading.block();\n this.createFluxCommercialDesignation(designationName, flux)\n .then((designation: FluxCommercialDesignation) => {\n this.setShieldingCapFluxCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createBackingFluxCommercialDesignation(designationName: string, flux: Flux) {\n this.loading.block();\n this.createFluxCommercialDesignation(designationName, flux)\n .then((designation: FluxCommercialDesignation) => {\n this.setBackingFluxCommercialDesignationTestPiece(designation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n this.analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n setShieldingRootGasMixture(mixture: string | null) {\n this.setModelValue('shieldingRootGasMixture', mixture);\n }\n\n @action\n setShieldingFillGasMixture(mixture: string | null) {\n this.setModelValue('shieldingFillGasMixture', mixture);\n }\n\n @action\n setShieldingCapGasMixture(mixture: string | null) {\n this.setModelValue('shieldingCapGasMixture', mixture);\n }\n\n @action\n setBackingGasMixture(mixture: string | null) {\n this.setModelValue('backingGasMixture', mixture);\n }\n\n @action\n setBaseMaterial1Thickness(value: number) {\n this.setModelDecimalValue('baseMaterial1Thickness', value);\n this.validateField('baseMaterial1Thickness');\n }\n\n @action\n setBaseMaterial1Diameter(value: number) {\n this.setModelDecimalValue('baseMaterial1Diameter', value);\n this.validateField('baseMaterial1Diameter');\n }\n\n @action\n setBaseMaterial2Thickness(value: number) {\n this.setModelDecimalValue('baseMaterial2Thickness', value);\n this.validateField('baseMaterial2Thickness');\n }\n\n @action\n setBaseMaterial2Diameter(value: number) {\n this.setModelDecimalValue('baseMaterial2Diameter', value);\n this.validateField('baseMaterial2Diameter');\n }\n\n @action\n setOverlayType(value: string) {\n this.setModelValue('overlayType', value);\n this.updateWeldingDetails();\n }\n\n @action\n setBaseMaterialsDiameter(value: number) {\n this.setModelDecimalValue('baseMaterial1Diameter', value);\n this.setModelDecimalValue('baseMaterial2Diameter', value);\n }\n\n @action\n setBaseMaterialsThickness(value: number) {\n this.setModelDecimalValue('baseMaterial1Thickness', value);\n this.setModelDecimalValue('baseMaterial2Thickness', value);\n }\n\n @tracked\n currentRevalidation: WelderCertificateRevalidation | null = null;\n\n @tracked\n isAddingReport1: boolean = false;\n\n @tracked\n isAddingReport2: boolean = false;\n\n @tracked\n isRemovingReport1: boolean = false;\n\n @tracked\n isRemovingReport2: boolean = false;\n\n @tracked\n isDeletingRevalidation: boolean = false;\n\n @tracked\n revalidationToDelete: WelderCertificateRevalidation | null = null;\n\n get latestInternalRevalidation() {\n return this.getLatestRevalidation(this.internalRevalidations);\n }\n\n get latestExternalRevalidation() {\n return this.getLatestRevalidation(this.externalRevalidations);\n }\n\n getLatestRevalidation(revalidations: WelderCertificateRevalidation[] | null | undefined) {\n let list = Array.from(revalidations || []);\n if (isEmpty(list)) {\n return null;\n }\n return list.sort((a, b) => {\n let aDate = this.getRevalidationDateValue(a);\n let bDate = this.getRevalidationDateValue(b);\n if (bDate !== aDate) {\n return bDate - aDate;\n }\n return +b.id - +a.id;\n })[0];\n }\n\n getRevalidationDateValue(revalidation: WelderCertificateRevalidation) {\n return revalidation.dateOfRevalidation\n ? new Date(revalidation.dateOfRevalidation).getTime()\n : 0;\n }\n\n @action\n selectReportEvidence1(report: NdtReportCertificate) {\n let revalidation = this.currentRevalidation;\n if (!revalidation) {\n return;\n }\n set(revalidation, 'revalidationEvidenceReport1', report);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then((saved) => {\n saved.reload();\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-added')\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n selectReportEvidence2(report: NdtReportCertificate) {\n let revalidation = this.currentRevalidation;\n if (!revalidation) {\n return;\n }\n set(revalidation, 'revalidationEvidenceReport2', report);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then((saved) => {\n saved.reload();\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-added')\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setCurrentEvidence1(revalidation: WelderCertificateRevalidation) {\n this.currentRevalidation = revalidation;\n this.isAddingReport1 = true;\n }\n\n @action\n closeEvidenceReport1Modal() {\n this.currentRevalidation = null;\n this.isAddingReport1 = false;\n }\n\n @action\n setCurrentEvidence2(revalidation: WelderCertificateRevalidation) {\n this.currentRevalidation = revalidation;\n this.isAddingReport2 = true;\n }\n\n @action\n closeEvidenceReport2Modal() {\n this.currentRevalidation = null;\n this.isAddingReport2 = false;\n }\n\n @action\n confirmRemoveReport1(revalidation: WelderCertificateRevalidation) {\n this.currentRevalidation = revalidation;\n this.isRemovingReport1 = true;\n }\n\n @action\n cancelRemoveReport1() {\n this.currentRevalidation = null;\n this.isRemovingReport1 = false;\n }\n\n @action\n removeReport1() {\n let revalidation: WelderCertificateRevalidation | null = this.currentRevalidation;\n if (!revalidation) {\n return;\n }\n set(revalidation, 'revalidationEvidenceReport1', null);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then((saved) => {\n saved.reload();\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-removed')\n );\n })\n .finally(() => {\n set(this, 'isRemovingReport1', false);\n loading.unblock();\n });\n }\n\n @action\n confirmRemoveReport2(revalidation: WelderCertificateRevalidation) {\n set(this, 'currentRevalidation', revalidation);\n set(this, 'isRemovingReport2', true);\n }\n\n @action\n confirmDeleteRevalidation(revalidation: WelderCertificateRevalidation) {\n this.revalidationToDelete = revalidation;\n this.isDeletingRevalidation = true;\n }\n\n @action\n closeDeleteRevalidation() {\n this.revalidationToDelete = null;\n this.isDeletingRevalidation = false;\n }\n\n @action\n cancelRemoveReport2() {\n set(this, 'currentRevalidation', null);\n set(this, 'isRemovingReport2', false);\n }\n\n @action\n removeReport2() {\n let revalidation = this.currentRevalidation;\n if (!revalidation) {\n return;\n }\n set(revalidation, 'revalidationEvidenceReport2', null);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then(() => {\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-removed')\n );\n })\n .finally(() => {\n set(this, 'isRemovingReport2', false);\n loading.unblock();\n });\n }\n\n @action\n async deleteRevalidation() {\n if (!this.revalidationToDelete) {\n return;\n }\n let { loading, intl, alertMessage: alert } = this;\n loading.block();\n try {\n await this.revalidationToDelete.destroyRecord();\n let reloadedCertificate = await this.reloadCertificateTask.perform();\n this.args.replaceCertificate(reloadedCertificate);\n alert.success(\n intl.t(\n 'components.model-welder-certificate/edit.revalidation.messages.revalidation-deleted'\n )\n );\n } catch (error) {\n alert.error(\n intl.t(\n 'components.model-welder-certificate/edit.revalidation.messages.revalidation-delete-error'\n )\n );\n } finally {\n loading.unblock();\n this.closeDeleteRevalidation();\n }\n }\n\n @action\n saveWelderCertificate() {\n let { certificate, alertMessage: alert, intl } = this;\n if (!certificate.validate()) {\n this.validationFailed();\n this.trackValidationError();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n this.saveCertificate.perform();\n }\n\n @action\n deleteWelderCertificate() {\n let { certificate, loading, alertMessage: alert, intl } = this;\n\n loading.block();\n this.ajax\n .put(`/welder-certificates/${get(certificate, 'id')}/canDelete`)\n .then(() => {\n this.deleteCertificate();\n set(this, 'certificateDeleteErrors', null);\n })\n .catch(({ payload }) => {\n alert.error(intl.t('components.model-welder-certificate/edit.delete.errors.cannot-delete'));\n set(this, 'certificateDeleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n confirmArchiveCertificate() {\n this.showConfirmArchive = true;\n }\n\n @action\n confirmUnarchiveCertificate() {\n this.showConfirmUnarchive = true;\n }\n\n @action\n cancelArchive() {\n this.showConfirmArchive = false;\n }\n\n @action\n cancelUnarchive() {\n this.showConfirmUnarchive = false;\n }\n\n @action\n cancelInternalDeadlineOverExternal() {\n this.showInternalRevalidationSurpassesExternalDeadlineSingle = false;\n this.showConfirmRevalidateInternallyFromInternal = false;\n this.showConfirmRevalidateExternallyFromInternal = false;\n }\n\n @action\n confirmValidateExternal() {\n this.showConfirmRevalidateExternallyFromInternal = true;\n }\n\n @action\n cancelValidateInternal() {\n this.showConfirmRevalidateInternallyFromInternal = false;\n }\n\n @action\n cancelValidateExternal() {\n this.showConfirmRevalidateExternallyFromInternal = false;\n }\n\n @action\n confirmValidateInternal() {\n this.showConfirmRevalidateInternallyFromInternal = true;\n }\n\n @action\n removeCertificateTaskFromContext() {\n this.taskMonitor.removeTaskByContext('welder-certificate', this.certificate.id);\n }\n\n @action\n dummy() {}\n\n @action\n onRemoveMachine() {\n this.certificate.remoteWeldingUnitId = null;\n this.certificate.remoteWeldingUnitDisplayName = null;\n }\n\n @action\n onSelectMachine({ id, displayName }: { id: string; displayName: string }) {\n this.certificate.remoteWeldingUnitId = id;\n this.certificate.remoteWeldingUnitDisplayName = displayName;\n }\n\n validate() {\n let { certificate, alertMessage: alert, intl } = this;\n if (!certificate.validate()) {\n this.validationFailed();\n this.trackValidationError();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return false;\n }\n return true;\n }\n\n moveSectionWithSave = task(\n {\n drop: true,\n },\n async (section) => {\n if (this.validate()) {\n await this.saveCertificate.perform({\n silentSave: true,\n });\n this.setSection(section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n }\n );\n\n @action\n setSectionScroll(section: string) {\n this.setSection(section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n}\n","import Component from '@glimmer/component';\nimport IntlService from 'ember-intl/services/intl';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WopqApprovalRange from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-approval-range';\nimport {\n AutomaticJointTracking,\n WelderCertificateTestPieceValues,\n WelderOperatorTypes,\n} from 'weldnote/src-weldnote/wopq/types';\nimport { service } from '@ember/service';\ninterface ModelWelderCertificateJointTrackingApprovalRangeArgs {\n jointTracking: AutomaticJointTracking | null;\n certificate: WelderCertificate;\n approvalRange: WopqApprovalRange;\n process: string;\n}\n\nexport default class ModelWelderCertificateJointTrackingApprovalRange extends Component {\n @service\n declare intl: IntlService;\n\n constructor(owner: unknown, args: ModelWelderCertificateJointTrackingApprovalRangeArgs) {\n super(owner, args);\n }\n\n get value(): string {\n if (this.args.jointTracking) {\n let result = '';\n let tracking = WelderOperatorTypes.jointTrackingFromString(this.args.jointTracking);\n if (tracking.isPresent()) {\n let trackingValue = tracking.get();\n let possibleProcess = WelderOperatorTypes.processFromString(this.args.process);\n let process = null;\n if (possibleProcess.isEmpty()) {\n return result;\n } else {\n process = possibleProcess.get();\n }\n let testPieces = new WelderCertificateTestPieceValues(this.args.certificate, process);\n let approvalRange = this.args.approvalRange.automaticJointTracking(\n trackingValue,\n testPieces\n );\n result = approvalRange\n .map((t) => {\n if (t === AutomaticJointTracking.WITH) {\n return this.intl.t('lov.joint-tracking.with');\n } else if (t === AutomaticJointTracking.WITHOUT) {\n return this.intl.t('lov.joint-tracking.without');\n }\n return '';\n })\n .join('+');\n return result;\n }\n }\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n {{!-- --}}\\n \\n \\n \\n {{this.createButtonText}}\\n \\n \\n \\n
\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n {{!-- --}}\\n \\n \\n \\n {{this.createButtonText}}\\n \\n \\n \\n
\\n
\",\"moduleName\":\"weldnote/components/model-welder-certificate/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/new.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action, get, set } from '@ember/object';\nimport AlertMessageService from 'weldnote/services/alert-message';\nimport RouterService from '@ember/routing/router-service';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport LoadingService from 'weldnote/services/loading';\nimport IntlService from 'ember-intl/services/intl';\nimport UserSessionService from 'weldnote/services/user-session';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { isEmpty } from '@ember/utils';\nimport { isStandardAWSD15 } from 'weldnote/utils/standards';\n\ninterface ModelWelderCertificateNewArgs {\n certificate: WelderCertificate;\n}\n\nexport default class ModelWelderCertificateNew extends Component {\n @service\n declare userSession: UserSessionService;\n\n @service()\n declare weldnoteData: any;\n\n @service\n declare intl: IntlService;\n\n @service('weldcloud-notes-data')\n declare notesData: WeldcloudNotesData;\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n @service() declare alertMessage: AlertMessageService;\n\n @service() declare router: RouterService;\n\n @service() declare weldcloudNotesData: WeldcloudNotesData;\n\n @service\n declare loading: LoadingService;\n\n get data(): any {\n return this.weldnoteData;\n }\n\n get welderStandardOptions() {\n let {\n args: { certificate },\n weldcloudNotesData: data,\n } = this;\n if (certificate.isWelderOperatorCertificate) {\n return data.weldingOperatorStandards;\n } else if (certificate.isWelderCertificate) {\n return data.welderCertificateStandards;\n }\n return data.welderCertificateStandards;\n }\n\n get isWelderOperator() {\n return this.args.certificate.isWelderOperatorCertificate;\n }\n\n get isWelderCertificate() {\n return this.args.certificate.isWelderCertificate;\n }\n\n get title(): string {\n if (this.isWelderOperator) {\n return this.intl.t('components.model-welder-certificate/new.title.operator');\n } else if (this.isWelderCertificate) {\n return this.intl.t('components.model-welder-certificate/new.title.welder');\n }\n return '';\n }\n\n get createButtonText(): string {\n if (this.isWelderOperator) {\n return this.intl.t('components.model-welder-certificate/new.buttons.new-welder-operator');\n } else if (this.isWelderCertificate) {\n return this.intl.t('components.model-welder-certificate/new.buttons.new-welder-certificate');\n }\n return '';\n }\n\n get isEditing(): boolean {\n return true;\n }\n\n @action\n async createCertificate() {\n if (!this.args.certificate.validate()) {\n this.alertMessage.error(\n this.intl.t('components.model-welder-certificate/new.messages.invalid')\n );\n return;\n }\n try {\n if (this.data.hasOnly1Company) {\n set(this.args.certificate, 'company', this.data.firstCompany);\n }\n if (isEmpty(this.args.certificate.requalificationPeriod)) {\n if (isStandardAWSD15(get(this.args.certificate, 'standard'))) {\n set(this.args.certificate, 'requalificationPeriod', 1);\n }\n }\n this.loading.block();\n let result = await this.args.certificate.save();\n this.alertMessage.success(\n this.intl.t('components.model-welder-certificate/new.messages.saved')\n );\n this.router.transitionTo('welder-certificate', result.id);\n } catch (e) {\n if (isDuplicateError(e)) {\n this.alertMessage.error(this.intl.t('components.model-welder-certificate/new.messages.duplicate-error'));\n } else {\n this.alertMessage.error(this.intl.t('generic.error.unknown-error'));\n }\n \n } finally {\n this.loading.unblock();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#let @provider as |FormProvider|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/non-destructive-testing-table.test\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.results\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report\\\"\\n }}
{{t \\\"components.model-welder-certificate/non-destructive-tests.visual-test\\\"}}\\n \\n {{form.input}}\\n \\n \\n \\n {{form.input}}\\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.penetrant-test\\\"}}\\n \\n {{form.input}}\\n \\n \\n \\n {{form.input}}\\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.magnetic-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.ultrasonic-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
\\n {{/let}}\\n{{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value this.certificate.visualTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.penetrantTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.magneticTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.ultrasonicTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.radiographicTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t \\\"components.model-pqr/non-destructive-testing-table.test\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.results\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report\\\"}}
{{t \\\"components.model-welder-certificate/non-destructive-tests.visual-test\\\"}}\\n {{this.certificate.visualTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.visualTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.penetrant-test\\\"}}\\n {{this.certificate.penetrantTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.penetrantTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.magnetic-test\\\"}}\\n {{this.certificate.magneticTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.magneticTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.ultrasonic-test\\\"}}\\n {{this.certificate.ultrasonicTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.ultrasonicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n {{this.certificate.radiographicTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.radiographicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#let @provider as |FormProvider|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-pqr/non-destructive-testing-table.test\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.results\\\"\\n }}{{t\\n \\\"components.model-pqr/non-destructive-testing-table.report\\\"\\n }}
{{t \\\"components.model-welder-certificate/non-destructive-tests.visual-test\\\"}}\\n \\n {{form.input}}\\n \\n \\n \\n {{form.input}}\\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.penetrant-test\\\"}}\\n \\n {{form.input}}\\n \\n \\n \\n {{form.input}}\\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.magnetic-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.ultrasonic-test\\\"}}\\n \\n \\n \\n \\n \\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n \\n \\n \\n \\n \\n
\\n {{/let}}\\n{{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (has-value this.certificate.visualTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.penetrantTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.magneticTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.ultrasonicTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value this.certificate.radiographicTestNumber)}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t \\\"components.model-pqr/non-destructive-testing-table.test\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report-name\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.results\\\"}}{{t \\\"components.model-pqr/non-destructive-testing-table.report\\\"}}
{{t \\\"components.model-welder-certificate/non-destructive-tests.visual-test\\\"}}\\n {{this.certificate.visualTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.visualTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.penetrant-test\\\"}}\\n {{this.certificate.penetrantTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.penetrantTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.magnetic-test\\\"}}\\n {{this.certificate.magneticTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.magneticTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"components.model-welder-certificate/non-destructive-tests.ultrasonic-test\\\"}}\\n {{this.certificate.ultrasonicTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.ultrasonicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
{{t \\\"model.pqr.nonDestructiveRadiographicTesting.label\\\"}}\\n {{this.certificate.radiographicTestNumber}}\\n \\n \\n \\n {{#if (has-value this.certificate.radiographicTestDocumentPath)}}\\n \\n (PDF)\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welder-certificate/non-destructive-tests.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/non-destructive-tests.hbs\"}});\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\n\nexport default class NonDestructiveTests extends Component {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n certificate;\n\n @alias('data.testResultOptions')\n testResultOptions;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n {{#if (and this.isOperatorApprovalRange this.hasValue)}}\\n

\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.pipe-plus-plate\\\"}}\\n

\\n {{else}}\\n

\\n {{#if (and this.isWelderStandardISO96061 this.isPlate)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-iso\\\"}}\\n {{else if (and this.isWelderStandardISO96061 this.isPipePlate (gt @diameter 25))}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso9609-pipe-plate-diameter-more-25\\\"\\n }}\\n {{else if (and this.isWelderStandardISO96061 this.isPipePlate (lte @diameter 25))}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso9609-pipe-plate-diameter-less-25\\\"\\n }}\\n {{else if (and this.isWelderStandardISO96062 this.isPlate)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-iso-96062\\\"}}\\n {{else if (and this.isASME this.isPipe)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.pipe-asme\\\"}}\\n {{else if (and this.isASME this.isPlate)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-asme\\\"}}\\n {{else if\\n (and\\n this.isWelderStandardISO96061\\n this.isPipe\\n (or (lt @diameter 25) (not (has-value @diameter)))\\n )\\n }}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso-pipe-less-25\\\"\\n }}\\n {{else if\\n (and\\n this.isWelderStandardISO96062\\n this.isPipe\\n (or (lt @diameter 25) (not (has-value @diameter)))\\n )\\n }}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso-pipe-less-25\\\"\\n }}\\n {{else if (and this.isWelderStandardISO96061 this.isPipe (gte @diameter 25))}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso-pipe-more-25\\\"\\n }}\\n {{else if (and this.isAWS this.hasValue)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-pipe-aws\\\"}}\\n {{else if (and this.isAWSB21 this.isPipe)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.aws-b21-pipe\\\"}}\\n {{else if (and this.isAWSB21 this.isPlate this.isOverlayWeld)}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.aws-b21-plate-overlay-weld\\\"\\n }}\\n {{else if (and this.isAWSB21 this.isPlate this.notOverlayWeld)}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.aws-b21-plate-not-overlay\\\"\\n }}\\n {{else if this.isAWSD15}}\\n {{#if this.isPipe}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.pipe\\\"}}\\n {{else if this.isPlate}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n {{#if (and this.isOperatorApprovalRange this.hasValue)}}\\n

\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.pipe-plus-plate\\\"}}\\n

\\n {{else}}\\n

\\n {{#if (and this.isWelderStandardISO96061 this.isPlate)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-iso\\\"}}\\n {{else if (and this.isWelderStandardISO96061 this.isPipePlate (gt @diameter 25))}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso9609-pipe-plate-diameter-more-25\\\"\\n }}\\n {{else if (and this.isWelderStandardISO96061 this.isPipePlate (lte @diameter 25))}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso9609-pipe-plate-diameter-less-25\\\"\\n }}\\n {{else if (and this.isWelderStandardISO96062 this.isPlate)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-iso-96062\\\"}}\\n {{else if (and this.isASME this.isPipe)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.pipe-asme\\\"}}\\n {{else if (and this.isASME this.isPlate)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-asme\\\"}}\\n {{else if\\n (and\\n this.isWelderStandardISO96061\\n this.isPipe\\n (or (lt @diameter 25) (not (has-value @diameter)))\\n )\\n }}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso-pipe-less-25\\\"\\n }}\\n {{else if\\n (and\\n this.isWelderStandardISO96062\\n this.isPipe\\n (or (lt @diameter 25) (not (has-value @diameter)))\\n )\\n }}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso-pipe-less-25\\\"\\n }}\\n {{else if (and this.isWelderStandardISO96061 this.isPipe (gte @diameter 25))}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.iso-pipe-more-25\\\"\\n }}\\n {{else if (and this.isAWS this.hasValue)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate-pipe-aws\\\"}}\\n {{else if (and this.isAWSB21 this.isPipe)}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.aws-b21-pipe\\\"}}\\n {{else if (and this.isAWSB21 this.isPlate this.isOverlayWeld)}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.aws-b21-plate-overlay-weld\\\"\\n }}\\n {{else if (and this.isAWSB21 this.isPlate this.notOverlayWeld)}}\\n {{t\\n \\\"components.model-welder-certificate/product-type-approval-range-help.aws-b21-plate-not-overlay\\\"\\n }}\\n {{else if this.isAWSD15}}\\n {{#if this.isPipe}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.pipe\\\"}}\\n {{else if this.isPlate}}\\n {{t \\\"components.model-welder-certificate/product-type-approval-range-help.plate\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/model-welder-certificate/product-type-approval-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/product-type-approval-range.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport WeldType from 'weldnote/models/weld-type';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isWelderStandardISO96061,\n isWelderStandardISO96062,\n isStandardAWS,\n isStandardASME,\n isStandardAWSB21,\n isWelderStandardAWSD11,\n isStandardAWSD15,\n} from 'weldnote/utils/standards';\n\nconst { PRODUCT_TYPE } = Constants;\n\ninterface ProductTypeApprovalRangeArgs {\n certificate: WelderCertificate;\n standard: WelderStandard | null;\n productType: string | null;\n diameter: number | null;\n weldType: WeldType | null;\n}\n\nexport default class ProductTypeApprovalRange extends Component {\n productType = null;\n\n standard = null;\n\n get isPipe() {\n return this.args.productType === PRODUCT_TYPE.PIPE;\n }\n\n get isPlate() {\n return this.args.productType === PRODUCT_TYPE.PLATE;\n }\n\n get isPipePlate() {\n return this.args.productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n\n get hasValue() {\n return !isEmpty(this.args.productType);\n }\n\n get isOperatorApprovalRange() {\n if (this.args.certificate && this.args.standard) {\n return (\n this.args.certificate.isWelderOperatorCertificate &&\n !isWelderStandardAWSD11(this.args.standard)\n );\n }\n return false;\n }\n\n get isOverlayWeld() {\n if (this.args.weldType) {\n return this.args.weldType.isOverlayWeld;\n }\n return false;\n }\n\n get notOverlayWeld() {\n return !this.isOverlayWeld;\n }\n\n get isASME() {\n if (this.args.standard) {\n return isStandardASME(this.args.standard);\n }\n return false;\n }\n\n get isAWSD15() {\n if (this.args.standard) {\n return isStandardAWSD15(this.args.standard);\n }\n return false;\n }\n\n get isAWS() {\n if (this.args.standard) {\n return isStandardAWS(this.args.standard) && !isStandardAWSD15(this.args.standard);\n }\n return false;\n }\n\n get isWelderStandardISO96061() {\n if (this.args.standard) {\n return isWelderStandardISO96061(this.args.standard);\n }\n return false;\n }\n\n get isWelderStandardISO96062() {\n if (this.args.standard) {\n return isWelderStandardISO96062(this.args.standard);\n }\n return false;\n }\n\n get isAWSB21() {\n if (this.args.standard) {\n return isStandardAWSB21(this.args.standard);\n }\n return false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.userSession.canCreateCertificate}}\\n {{t \\\"toolbar.edit.label\\\"}}\\n {{/if}}\\n {{/unless}}\\n\\n {{#if\\n (and\\n (not this.certificate.isArchived)\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n this.userSession.canRevalidateCertificate\\n )\\n )\\n }}\\n {{#if\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n )\\n }}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if (and this.isExpiringInLessThan30Days (not this.certificate.isNew))}}\\n {{#if this.showExternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-externally\\\"}}\\n \\n \\n {{else if this.showInternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-internally\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.userSession.canArchiveCertificate}}\\n {{#if this.certificate.isArchived}}\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.canShowCreateButton}}\\n \\n {{t \\\"components.model-welder-certificate/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.exporting-welder-certificate\\\"\\n }}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.certificate\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute task.currentTask.value)}}- {{/unless}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.preparing-link\\\"\\n }}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
{{t\\n \\\"components.model-welder-certificate/edit.export-pdf.buttons.close\\\"\\n }}
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.certificate.isArchived}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.messages.certificate-is-archived\\\"}}\\n \\n
\\n {{else}}\\n {{#if this.isExternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.externaly-expired\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isInternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expired\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isExpiringExternallyLess30Days}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.expiring-externally-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isExpiringInternallyLess30Days}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expire-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.isShowingModal}}\\n \\n {{#if this.hasCertificateDeleteErrors}}\\n \\n {{#each this.certificateDeleteErrors as |error|}}\\n
    \\n
  • \\n {{#if (eq error.type \\\"project\\\")}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.delete.errors.project-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{/if}}\\n
  • \\n
\\n {{/each}}\\n \\n {{/if}}\\n \\n {{/if}}\\n\\n {{#if this.isShowingDuplicateModal}}\\n \\n {{/if}}\\n\\n {{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.archive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showConfirmRevalidateInternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isCertificateASME}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.internally.button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showConfirmRevalidateExternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.externally.button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showInternalRevalidationSurpassesExternalDeadlineSingle}}\\n \\n {{#if this.showConfirmRevalidateInternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n \\n \\n \\n {{else if this.showConfirmRevalidateExternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.help-message\\\"\\n dayCount=this.errorData.daysToExternalExpire\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n\\n
\\n\\n{{! gray Bar }}\\n
\\n
\\n
\\n \\n {{this.certificate.standard.standard}}\\n {{#if this.certificate.isWelderOperatorCertificate}}\\n {{t \\\"components.view-mode.sections.welder-operator\\\"}}\\n {{else}}\\n {{t \\\"components.view-mode.sections.certificate\\\"}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.view-mode.sections.standard\\\"\\n }}
\\n
\\n
\\n {{format-weld-type\\n this.certificate.weldTypeTestPiece\\n small=true\\n }}\\n {{#if (not (is-empty-attribute this.certificate.productTypeTestPiece))}}\\n \\n -\\n {{t (concat \\\"lov.product-type.\\\" this.certificate.productTypeTestPiece)}}\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.weld-type\\\"\\n }}
\\n
\\n
\\n {{this.certificate.weldingProcessRootTestPiece.shortDesignation}}
\\n {{#if (has-value this.certificate.weldingProcessFillTestPiece.id)}}\\n {{this.certificate.weldingProcessFillTestPiece.shortDesignation}}
\\n {{/if}}\\n {{#if (has-value this.certificate.weldingProcessCapTestPiece.id)}}\\n {{this.certificate.weldingProcessCapTestPiece.shortDesignation}}
\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.processes\\\"\\n }}
\\n \\n
\\n
\\n {{#if (not (is-empty-attribute this.certificate.baseMaterial1TestPiece))}}\\n {{this.certificate.baseMaterial1TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial1TestPiece.grade.grade}}\\n {{this.certificate.baseMaterial1TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n {{#if (not (is-empty-attribute this.certificate.baseMaterial2TestPiece))}}\\n {{this.certificate.baseMaterial2TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial2TestPiece.grade.grade}}\\n {{this.certificate.baseMaterial2TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
{{t\\n \\\"components.view-mode.sections.base-metals\\\"\\n }}
\\n
\\n \\n\\n\\n{{! Base Material / Dimensions }}\\n
\\n {{#if\\n (or\\n (has-value this.layerType)\\n (has-value this.sideType)\\n (has-value this.certificate.baseMaterial1TestPiece.id)\\n (has-value this.certificate.baseMaterial2TestPiece.id)\\n )\\n }}\\n
\\n \\n
\\n {{svg-jar \\\"steelbeam\\\" class=\\\"fill-current\\\"}}\\n
\\n {{#if (not this.isIsoStandard)}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.base-metal-qualifications\\\"}}\\n

\\n
\\n
\\n

\\n {{this.baseMaterial1ApprovalRange}}\\n

\\n {{#if (has-value this.certificate.baseMaterial2TestPiece.id)}}\\n

to

\\n

\\n {{this.baseMaterial2ApprovalRange}}\\n

\\n {{/if}}\\n
\\n
\\n {{this.layerType}}\\n
\\n
\\n {{this.sideType}}\\n
\\n {{else}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.base-metal-qualifications\\\"}}\\n

\\n
\\n {{#if this.isWelderStandardISO96061}}\\n

{{t \\\"components.view-mode.message.welders-iso96061\\\"}}

\\n {{/if}}\\n
\\n
\\n {{this.layerType}}\\n
\\n
\\n {{this.sideType}}\\n
\\n
\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{#if\\n (or\\n (has-value this.certificate.baseMaterial1Thickness)\\n (has-value this.certificate.baseMaterial2Thickness)\\n (has-value this.certificate.thicknessTotalTestPiece)\\n )\\n }}\\n
\\n \\n
\\n \\n
\\n

\\n {{t \\\"components.view-mode.sections.thickness\\\"}}\\n

\\n {{#if this.showBaseMaterialThickness}}\\n {{#if this.showSingleBaseMaterialThickness}}\\n

\\n {{this.certificate.baseMaterial1TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial1TestPiece.grade.grade}}\\n {{#if (has-value this.certificate.baseMaterial1Thickness)}}\\n {{format-decimal\\n this.certificate.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n {{/if}}\\n

\\n {{else}}\\n
\\n
\\n

\\n {{this.certificate.baseMaterial1TestPiece.grade.grade}}\\n {{this.certificate.baseMaterial1TestPiece.specification.specification}}\\n {{#if (has-value this.certificate.baseMaterial1Thickness)}}\\n {{format-decimal\\n this.certificate.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n {{/if}}\\n\\n

\\n
\\n
\\n

\\n {{this.certificate.baseMaterial2TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial2TestPiece.grade.grade}}\\n {{#if (has-value this.certificate.baseMaterial2Thickness)}}\\n {{format-decimal\\n this.certificate.baseMaterial2Thickness\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n \\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if this.showBaseMaterialThickness}}\\n
\\n {{/if}}\\n

\\n {{t \\\"components.view-mode.sections.deposited-thickness\\\"}}\\n {{format-decimal\\n this.certificate.thicknessTotalTestPiece\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n \\n \\n \\n

\\n
\\n \\n {{/if}}\\n {{#if this.hasDiameterToShow}}\\n
\\n \\n
\\n {{svg-jar \\\"diameter\\\"}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.diameter\\\"}}\\n

\\n
\\n {{format-decimal\\n this.certificate.diameterTestPiece\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n \\n \\n \\n
\\n
\\n \\n {{/if}}\\n\\n\\n
\\n {{#if (has-value this.certificate.internalRequalificationDeadline)}}\\n
\\n
\\n
\\n {{svg-jar \\\"calendar\\\"}}\\n
\\n
\\n
\\n

\\n {{t \\\"components.view-mode.sections.certificates.internal-renewal\\\"}}\\n

\\n

\\n {{t \\\"components.view-mode.sections.certificates.upcoming-6-month\\\"}}\\n {{format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{#if (has-value this.certificate.internalRequalificationDate)}}\\n

\\n {{t \\\"components.view-mode.sections.certificates.previous-renewal-6-month\\\"}}\\n {{format-date\\n date=this.certificate.internalRequalificationDate\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.certificate.externalRequalificationDeadline)}}\\n
\\n
\\n
\\n {{svg-jar \\\"calendar\\\"}}\\n
\\n
\\n
\\n

\\n {{t\\n \\\"components.view-mode.sections.certificates.n-year-renewal\\\"\\n period=this.certificate.requalificationPeriod\\n }}\\n

\\n

\\n {{t \\\"components.view-mode.sections.certificates.next-renewal-external\\\"}}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{#if (has-value this.certificate.previousExternalRequalificationDate)}}\\n

\\n {{t \\\"components.view-mode.sections.certificates.previous-renewal-external\\\"}}\\n {{format-date\\n date=this.certificate.previousExternalRequalificationDate\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{/if}}\\n
\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if (has-value this.certificate.weldingProcessRootTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n {{this.certificate.weldingProcessRootTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.certificate.processMecanizationRootTestPiece.name)}}\\n {{this.certificate.processMecanizationRootTestPiece.name}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.weldingPositionRootTestPiece.code)}}\\n {{this.certificate.weldingPositionRootTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.certificate.arcTransferModeRootTestPiece.transferMode)}}\\n {{this.certificate.arcTransferModeRootTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.certificate.typeCurrentRootTestPiece.typeCurrent)}}\\n {{this.certificate.typeCurrentRootTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.certificate.fillerMaterialRootTestPiece.id)}}\\n \\n {{this.certificate.fillerMaterialRootTestPiece.specification.specification}}\\n {{this.certificate.fillerMaterialRootTestPiece.classification.classification}}\\n {{this.certificate.fillerMaterialRootTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.shieldingRoot)}}\\n {{#if (eq this.certificate.shieldingRoot \\\"G\\\")}}\\n \\n {{this.certificate.shieldingRootGasTestPiece.specification.specification}}\\n {{this.certificate.shieldingRootGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.certificate.shieldingRootGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.certificate.shieldingRoot \\\"F\\\")}}\\n \\n \\n {{this.certificate.shieldingRootFluxTestPiece.specification.specification}}\\n \\n {{this.certificate.shieldingRootFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.certificate.shieldingRoot \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.certificate.weldingProcessFillTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n {{this.certificate.weldingProcessFillTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.certificate.processMecanizationFillTestPiece.name)}}\\n {{this.certificate.processMecanizationFillTestPiece.name}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.weldingPositionFillTestPiece.code)}}\\n {{this.certificate.weldingPositionFillTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.certificate.arcTransferModeFillTestPiece.transferMode)}}\\n {{this.certificate.arcTransferModeFillTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.certificate.typeCurrentFillTestPiece.typeCurrent)}}\\n {{this.certificate.typeCurrentFillTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.certificate.fillerMaterialFillTestPiece.id)}}\\n \\n {{this.certificate.fillerMaterialFillTestPiece.specification.specification}}\\n {{this.certificate.fillerMaterialFillTestPiece.classification.classification}}\\n {{this.certificate.fillerMaterialFillTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.shieldingFill)}}\\n {{#if (eq this.certificate.shieldingFill \\\"G\\\")}}\\n \\n {{this.certificate.shieldingFillGasTestPiece.specification.specification}}\\n {{this.certificate.shieldingFillGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.certificate.shieldingFillGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.certificate.shieldingFill \\\"F\\\")}}\\n \\n \\n {{this.certificate.shieldingFillFluxTestPiece.specification.specification}}\\n \\n {{this.certificate.shieldingFillFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.certificate.shieldingFill \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.certificate.weldingProcessCapTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n {{this.certificate.weldingProcessCapTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.certificate.processMecanizationCapTestPiece.name)}}\\n {{this.certificate.processMecanizationCapTestPiece.name}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.weldingPositionCapTestPiece.code)}}\\n {{this.certificate.weldingPositionCapTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.certificate.arcTransferModeCapTestPiece.transferMode)}}\\n {{this.certificate.arcTransferModeCapTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.certificate.typeCurrentCapTestPiece.typeCurrent)}}\\n {{this.certificate.typeCurrentCapTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.certificate.fillerMaterialCapTestPiece.id)}}\\n \\n {{this.certificate.fillerMaterialCapTestPiece.specification.specification}}\\n {{this.certificate.fillerMaterialCapTestPiece.classification.classification}}\\n {{this.certificate.fillerMaterialCapTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.shieldingCap)}}\\n {{#if (eq this.certificate.shieldingCap \\\"G\\\")}}\\n \\n {{this.certificate.shieldingCapGasTestPiece.specification.specification}}\\n {{this.certificate.shieldingCapGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.certificate.shieldingCapGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.certificate.shieldingCap \\\"F\\\")}}\\n \\n \\n {{this.certificate.shieldingCapFluxTestPiece.specification.specification}}\\n \\n {{this.certificate.shieldingCapFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.certificate.shieldingCap \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n
\", {\"contents\":\"\\n \\n\\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.userSession.canCreateCertificate}}\\n {{t \\\"toolbar.edit.label\\\"}}\\n {{/if}}\\n {{/unless}}\\n\\n {{#if\\n (and\\n (not this.certificate.isArchived)\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n this.userSession.canRevalidateCertificate\\n )\\n )\\n }}\\n {{#if\\n (or\\n this.userSession.canDeleteCertificate\\n this.userSession.canCreateCertificate\\n this.userSession.canArchiveCertificate\\n )\\n }}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if (and this.isExpiringInLessThan30Days (not this.certificate.isNew))}}\\n {{#if this.showExternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-externally\\\"}}\\n \\n \\n {{else if this.showInternalExpireButton}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.buttons.revalidate-internally\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.userSession.canArchiveCertificate}}\\n {{#if this.certificate.isArchived}}\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n \\n \\n {{t \\\"components.model-pqr/edit.download-pdf.buttons.download\\\"}}\\n \\n \\n \\n \\n \\n\\n {{#unless this.certificate.isArchived}}\\n {{#if this.canShowCreateButton}}\\n \\n {{t \\\"components.model-welder-certificate/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.export-pdf.error-export-message\\\"}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n {{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.exporting-welder-certificate\\\"\\n }}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"tasks.certificate\\\" \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute task.currentTask.value)}}- {{/unless}}\\n {{task.currentTask.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n {{#if this.finishReportGeneration.isRunning}}\\n

{{t\\n \\\"components.model-welder-certificate/edit.export-pdf.messages.preparing-link\\\"\\n }}\\n

\\n {{else}}\\n
\\n \\n \\n
\\n
{{t\\n \\\"components.model-welder-certificate/edit.export-pdf.buttons.close\\\"\\n }}
\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n
\\n {{/if}}\\n \\n\\n {{#if this.certificate.isArchived}}\\n
\\n \\n {{t \\\"components.model-welder-certificate/edit.archive.messages.certificate-is-archived\\\"}}\\n \\n
\\n {{else}}\\n {{#if this.isExternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.externaly-expired\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isInternallyExpired}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expired\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isExpiringExternallyLess30Days}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.expiring-externally-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{else if this.isExpiringInternallyLess30Days}}\\n
\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.messages.revalidation.internally-expire-less-than-30-days\\\"\\n date=(format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n }}\\n \\n
\\n {{/if}}\\n {{/if}}\\n\\n {{#if this.isShowingModal}}\\n \\n {{#if this.hasCertificateDeleteErrors}}\\n \\n {{#each this.certificateDeleteErrors as |error|}}\\n
    \\n
  • \\n {{#if (eq error.type \\\"project\\\")}}\\n \\n {{t\\n \\\"components.model-welder-certificate/edit.delete.errors.project-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{/if}}\\n
  • \\n
\\n {{/each}}\\n \\n {{/if}}\\n \\n {{/if}}\\n\\n {{#if this.isShowingDuplicateModal}}\\n \\n {{/if}}\\n\\n {{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.archive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.archive-button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welder-certificate/edit.archive.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welder-certificate/edit.archive.unarchive-button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showConfirmRevalidateInternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isCertificateASME}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.internally.button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showConfirmRevalidateExternally}}\\n \\n \\n \\n \\n

{{this.certificate.certificateNumber}}

\\n {{t \\\"components.welder-certificate-expiration-table.messages.select-ndt-reports\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"components.model-welder-certificate/edit.revalidation.externally.button\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if this.showInternalRevalidationSurpassesExternalDeadlineSingle}}\\n \\n {{#if this.showConfirmRevalidateInternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n \\n \\n \\n {{else if this.showConfirmRevalidateExternallyFromInternal}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-confirm-message\\\"\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.help-message\\\"\\n dayCount=this.errorData.daysToExternalExpire\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n\\n
\\n\\n{{! gray Bar }}\\n
\\n
\\n
\\n \\n {{this.certificate.standard.standard}}\\n {{#if this.certificate.isWelderOperatorCertificate}}\\n {{t \\\"components.view-mode.sections.welder-operator\\\"}}\\n {{else}}\\n {{t \\\"components.view-mode.sections.certificate\\\"}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.view-mode.sections.standard\\\"\\n }}
\\n
\\n
\\n {{format-weld-type\\n this.certificate.weldTypeTestPiece\\n small=true\\n }}\\n {{#if (not (is-empty-attribute this.certificate.productTypeTestPiece))}}\\n \\n -\\n {{t (concat \\\"lov.product-type.\\\" this.certificate.productTypeTestPiece)}}\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.weld-type\\\"\\n }}
\\n
\\n
\\n {{this.certificate.weldingProcessRootTestPiece.shortDesignation}}
\\n {{#if (has-value this.certificate.weldingProcessFillTestPiece.id)}}\\n {{this.certificate.weldingProcessFillTestPiece.shortDesignation}}
\\n {{/if}}\\n {{#if (has-value this.certificate.weldingProcessCapTestPiece.id)}}\\n {{this.certificate.weldingProcessCapTestPiece.shortDesignation}}
\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.processes\\\"\\n }}
\\n \\n
\\n
\\n {{#if (not (is-empty-attribute this.certificate.baseMaterial1TestPiece))}}\\n {{this.certificate.baseMaterial1TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial1TestPiece.grade.grade}}\\n {{this.certificate.baseMaterial1TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n {{#if (not (is-empty-attribute this.certificate.baseMaterial2TestPiece))}}\\n {{this.certificate.baseMaterial2TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial2TestPiece.grade.grade}}\\n {{this.certificate.baseMaterial2TestPiece.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
{{t\\n \\\"components.view-mode.sections.base-metals\\\"\\n }}
\\n
\\n \\n\\n\\n{{! Base Material / Dimensions }}\\n
\\n {{#if\\n (or\\n (has-value this.layerType)\\n (has-value this.sideType)\\n (has-value this.certificate.baseMaterial1TestPiece.id)\\n (has-value this.certificate.baseMaterial2TestPiece.id)\\n )\\n }}\\n
\\n \\n
\\n {{svg-jar \\\"steelbeam\\\" class=\\\"fill-current\\\"}}\\n
\\n {{#if (not this.isIsoStandard)}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.base-metal-qualifications\\\"}}\\n

\\n
\\n
\\n

\\n {{this.baseMaterial1ApprovalRange}}\\n

\\n {{#if (has-value this.certificate.baseMaterial2TestPiece.id)}}\\n

to

\\n

\\n {{this.baseMaterial2ApprovalRange}}\\n

\\n {{/if}}\\n
\\n
\\n {{this.layerType}}\\n
\\n
\\n {{this.sideType}}\\n
\\n {{else}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.base-metal-qualifications\\\"}}\\n

\\n
\\n {{#if this.isWelderStandardISO96061}}\\n

{{t \\\"components.view-mode.message.welders-iso96061\\\"}}

\\n {{/if}}\\n
\\n
\\n {{this.layerType}}\\n
\\n
\\n {{this.sideType}}\\n
\\n
\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{#if\\n (or\\n (has-value this.certificate.baseMaterial1Thickness)\\n (has-value this.certificate.baseMaterial2Thickness)\\n (has-value this.certificate.thicknessTotalTestPiece)\\n )\\n }}\\n
\\n \\n
\\n \\n
\\n

\\n {{t \\\"components.view-mode.sections.thickness\\\"}}\\n

\\n {{#if this.showBaseMaterialThickness}}\\n {{#if this.showSingleBaseMaterialThickness}}\\n

\\n {{this.certificate.baseMaterial1TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial1TestPiece.grade.grade}}\\n {{#if (has-value this.certificate.baseMaterial1Thickness)}}\\n {{format-decimal\\n this.certificate.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n {{/if}}\\n

\\n {{else}}\\n
\\n
\\n

\\n {{this.certificate.baseMaterial1TestPiece.grade.grade}}\\n {{this.certificate.baseMaterial1TestPiece.specification.specification}}\\n {{#if (has-value this.certificate.baseMaterial1Thickness)}}\\n {{format-decimal\\n this.certificate.baseMaterial1Thickness\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n {{/if}}\\n\\n

\\n
\\n
\\n

\\n {{this.certificate.baseMaterial2TestPiece.specification.specification}}\\n {{this.certificate.baseMaterial2TestPiece.grade.grade}}\\n {{#if (has-value this.certificate.baseMaterial2Thickness)}}\\n {{format-decimal\\n this.certificate.baseMaterial2Thickness\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n \\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if this.showBaseMaterialThickness}}\\n
\\n {{/if}}\\n

\\n {{t \\\"components.view-mode.sections.deposited-thickness\\\"}}\\n {{format-decimal\\n this.certificate.thicknessTotalTestPiece\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n \\n \\n \\n

\\n
\\n \\n {{/if}}\\n {{#if this.hasDiameterToShow}}\\n
\\n \\n
\\n {{svg-jar \\\"diameter\\\"}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.diameter\\\"}}\\n

\\n
\\n {{format-decimal\\n this.certificate.diameterTestPiece\\n convertToFraction=true\\n }}\\n ({{this.distanceUnit}})\\n \\n \\n \\n
\\n
\\n \\n {{/if}}\\n\\n\\n
\\n {{#if (has-value this.certificate.internalRequalificationDeadline)}}\\n
\\n
\\n
\\n {{svg-jar \\\"calendar\\\"}}\\n
\\n
\\n
\\n

\\n {{t \\\"components.view-mode.sections.certificates.internal-renewal\\\"}}\\n

\\n

\\n {{t \\\"components.view-mode.sections.certificates.upcoming-6-month\\\"}}\\n {{format-date\\n date=this.certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{#if (has-value this.certificate.internalRequalificationDate)}}\\n

\\n {{t \\\"components.view-mode.sections.certificates.previous-renewal-6-month\\\"}}\\n {{format-date\\n date=this.certificate.internalRequalificationDate\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.certificate.externalRequalificationDeadline)}}\\n
\\n
\\n
\\n {{svg-jar \\\"calendar\\\"}}\\n
\\n
\\n
\\n

\\n {{t\\n \\\"components.view-mode.sections.certificates.n-year-renewal\\\"\\n period=this.certificate.requalificationPeriod\\n }}\\n

\\n

\\n {{t \\\"components.view-mode.sections.certificates.next-renewal-external\\\"}}\\n {{format-date\\n date=this.certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{#if (has-value this.certificate.previousExternalRequalificationDate)}}\\n

\\n {{t \\\"components.view-mode.sections.certificates.previous-renewal-external\\\"}}\\n {{format-date\\n date=this.certificate.previousExternalRequalificationDate\\n format=this.userSession.dateFormat\\n }}\\n

\\n {{/if}}\\n
\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if (has-value this.certificate.weldingProcessRootTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n {{this.certificate.weldingProcessRootTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.certificate.processMecanizationRootTestPiece.name)}}\\n {{this.certificate.processMecanizationRootTestPiece.name}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.weldingPositionRootTestPiece.code)}}\\n {{this.certificate.weldingPositionRootTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.certificate.arcTransferModeRootTestPiece.transferMode)}}\\n {{this.certificate.arcTransferModeRootTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.certificate.typeCurrentRootTestPiece.typeCurrent)}}\\n {{this.certificate.typeCurrentRootTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.certificate.fillerMaterialRootTestPiece.id)}}\\n \\n {{this.certificate.fillerMaterialRootTestPiece.specification.specification}}\\n {{this.certificate.fillerMaterialRootTestPiece.classification.classification}}\\n {{this.certificate.fillerMaterialRootTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.shieldingRoot)}}\\n {{#if (eq this.certificate.shieldingRoot \\\"G\\\")}}\\n \\n {{this.certificate.shieldingRootGasTestPiece.specification.specification}}\\n {{this.certificate.shieldingRootGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.certificate.shieldingRootGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.certificate.shieldingRoot \\\"F\\\")}}\\n \\n \\n {{this.certificate.shieldingRootFluxTestPiece.specification.specification}}\\n \\n {{this.certificate.shieldingRootFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.certificate.shieldingRoot \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.certificate.weldingProcessFillTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n {{this.certificate.weldingProcessFillTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.certificate.processMecanizationFillTestPiece.name)}}\\n {{this.certificate.processMecanizationFillTestPiece.name}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.weldingPositionFillTestPiece.code)}}\\n {{this.certificate.weldingPositionFillTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.certificate.arcTransferModeFillTestPiece.transferMode)}}\\n {{this.certificate.arcTransferModeFillTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.certificate.typeCurrentFillTestPiece.typeCurrent)}}\\n {{this.certificate.typeCurrentFillTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.certificate.fillerMaterialFillTestPiece.id)}}\\n \\n {{this.certificate.fillerMaterialFillTestPiece.specification.specification}}\\n {{this.certificate.fillerMaterialFillTestPiece.classification.classification}}\\n {{this.certificate.fillerMaterialFillTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.shieldingFill)}}\\n {{#if (eq this.certificate.shieldingFill \\\"G\\\")}}\\n \\n {{this.certificate.shieldingFillGasTestPiece.specification.specification}}\\n {{this.certificate.shieldingFillGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.certificate.shieldingFillGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.certificate.shieldingFill \\\"F\\\")}}\\n \\n \\n {{this.certificate.shieldingFillFluxTestPiece.specification.specification}}\\n \\n {{this.certificate.shieldingFillFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.certificate.shieldingFill \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.certificate.weldingProcessCapTestPiece.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n {{this.certificate.weldingProcessCapTestPiece.shortDesignation}}

\\n

\\n {{#if (has-value this.certificate.processMecanizationCapTestPiece.name)}}\\n {{this.certificate.processMecanizationCapTestPiece.name}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.weldingPositionCapTestPiece.code)}}\\n {{this.certificate.weldingPositionCapTestPiece.code}}\\n {{/if}}\\n {{#if (has-value this.certificate.arcTransferModeCapTestPiece.transferMode)}}\\n {{this.certificate.arcTransferModeCapTestPiece.transferMode}}\\n {{/if}}\\n {{#if (has-value this.certificate.typeCurrentCapTestPiece.typeCurrent)}}\\n {{this.certificate.typeCurrentCapTestPiece.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.certificate.fillerMaterialCapTestPiece.id)}}\\n \\n {{this.certificate.fillerMaterialCapTestPiece.specification.specification}}\\n {{this.certificate.fillerMaterialCapTestPiece.classification.classification}}\\n {{this.certificate.fillerMaterialCapTestPiece.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.certificate.shieldingCap)}}\\n {{#if (eq this.certificate.shieldingCap \\\"G\\\")}}\\n \\n {{this.certificate.shieldingCapGasTestPiece.specification.specification}}\\n {{this.certificate.shieldingCapGasTestPiece.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.certificate.shieldingCapGasTestPiece.composition}}\\n \\n \\n {{else if (eq this.certificate.shieldingCap \\\"F\\\")}}\\n \\n \\n {{this.certificate.shieldingCapFluxTestPiece.specification.specification}}\\n \\n {{this.certificate.shieldingCapFluxTestPiece.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.certificate.shieldingCap \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/model-welder-certificate/view-mode.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-certificate/view-mode.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { readOnly, or, notEmpty, alias, not } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport {\n isDuplicateError,\n isPermissionDenied,\n isForeignKeyError,\n getErrorCode,\n getErrorDetail,\n} from 'weldnote/utils/json-api-errors';\nimport { somePropertyHasValue } from 'weldnote/macros/property-check';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport { task } from 'ember-concurrency';\nimport {\n isWelderStandardISO96061,\n isWelderStandardISO96062,\n isStandardASME,\n isStandardAWS,\n isStandardAWSB21,\n} from 'weldnote/utils/standards';\nimport CertificateBaseMaterialRules from 'weldnote/utils/welder-certificate-base-material-rules-asme';\nimport moment from 'moment';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ERROR_CODES, DEFAULT_DATE_FORMAT } = Constants;\n\n@classic\nexport default class ViewMode extends Component {\n @service\n intl;\n\n @service\n loading;\n\n @service\n alertMessage;\n\n @service('unit-system')\n units;\n\n @alias('alertMessage')\n alert;\n\n @service\n store;\n\n @service\n userSession;\n\n @service('unit-system')\n units;\n\n @service\n taskMonitor;\n\n @service\n router;\n\n @service\n ajax;\n\n @service\n media;\n\n @service\n taskMonitor;\n\n @service('weldnote-data')\n data;\n\n @alias('model')\n certificate;\n\n // Flag that controls whether or not the \"Show Duplicate Certificate\" modal is displayed\n isShowingDuplicateModal = false;\n\n get unitSystem() {\n return this.certificate.unitSystem;\n }\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || this.userSession.unitSystem);\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || this.userSession.unitSystem);\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || this.userSession.unitSystem);\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || this.userSession.unitSystem);\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || this.userSession.unitSystem);\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || this.userSession.unitSystem);\n }\n\n @notEmpty('certificate.certificateDocumentPath')\n hasDocument;\n\n @notEmpty('certificate.certificateReportDocumentPath')\n hasExportedPdfPath;\n\n @alias('certificate.isOverlayWeld')\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showBothBaseMaterials;\n\n get isExpired() {\n return this.certificate.isInternallyExpired || this.certificate.isExternallyExpired;\n }\n\n get isInternallyExpired() {\n return this.certificate.isInternallyExpired;\n }\n\n get isExternallyExpired() {\n return this.certificate.isExternallyExpired;\n }\n\n @alias('isGeneratingReport')\n isExportingReport;\n\n @notEmpty('certificateDeleteErrors')\n hasCertificateDeleteErrors;\n\n @computed('certificate.{baseMaterial1Thickness,baseMaterial2Thickness}')\n get showBaseMaterialThickness() {\n return (\n !isEmpty(this.certificate.baseMaterial1Thickness) ||\n !isEmpty(this.certificate.baseMaterial2Thickness)\n );\n }\n\n @computed()\n get currentDay() {\n // The endOf('day') is here to work around this issue\n // If I just return new Date() it does not work, and triggers the double rendering\n // https://github.com/edgycircle/ember-pikaday/issues/141\n let today = moment(new Date()).endOf('day');\n return today.toDate();\n }\n\n @computed('certificate.standard')\n get isWelderStandardISO96061() {\n let { standard } = this.certificate;\n if (!isEmpty(standard)) {\n return isWelderStandardISO96061(standard);\n }\n return false;\n }\n\n @computed('certificate.standard')\n get isIsoStandard() {\n let { standard } = this.certificate;\n if (!isEmpty(standard)) {\n return isWelderStandardISO96061(standard) || isWelderStandardISO96062(standard);\n }\n return false;\n }\n\n @computed('isGeneratingReport')\n get canShowCreateButton() {\n let isGeneratingReport = get(this, 'isGeneratingReport');\n if (isGeneratingReport) {\n return false;\n }\n\n return true;\n }\n\n @computed('taskMonitor.currentTasks.[]')\n get certificateReportProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'welder-certificate') {\n if (item.contextId === this.certificate.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n @computed('certificate.internalRequalificationDeadline')\n get isExpiringInternallyLess30Days() {\n let certificate = get(this, 'certificate');\n let internalRequalificationDeadline = get(certificate, 'internalRequalificationDeadline');\n let today = moment();\n if (!isEmpty(internalRequalificationDeadline)) {\n let daysDifference = moment(internalRequalificationDeadline).diff(today, 'days');\n if (daysDifference < 30) {\n return true;\n }\n }\n return false;\n }\n\n @computed('certificate.internalRequalificationDeadline')\n get isExpiringExternallyLess30Days() {\n let certificate = get(this, 'certificate');\n let externalRequalificationDeadline = get(certificate, 'externalRequalificationDeadline');\n let today = moment();\n if (!isEmpty(externalRequalificationDeadline)) {\n let daysDifference = moment(externalRequalificationDeadline).diff(today, 'days');\n if (daysDifference < 30) {\n return true;\n }\n }\n return false;\n }\n\n @or('isExpiringInternallyLess30Days', 'isExpiringExternallyLess30Days')\n isExpiringInLessThan30Days;\n\n @alias('isExpiringInternallyLess30Days')\n showInternalExpireButton;\n\n @alias('isExpiringExternallyLess30Days')\n showExternalExpireButton;\n\n @computed('certificate.baseMaterial1TestPiece')\n get baseMaterial1ApprovalRange() {\n let { baseMaterial1TestPiece: bm1 } = this.certificate;\n if (!isEmpty(bm1)) {\n let groupName = get(bm1, 'materialGroup.groupName');\n if (\n isStandardASME(this.certificate.standard) ||\n isStandardAWSB21(this.certificate.standard)\n ) {\n if (CertificateBaseMaterialRules.isSteelAndNickelAlloys(groupName)) {\n return '1-15F, 34, 41-49';\n } else if (CertificateBaseMaterialRules.isAluminiumAlloys(groupName)) {\n return '21-26';\n } else if (CertificateBaseMaterialRules.isTitaniumAndZirconiumAlloys(groupName)) {\n return '51-53, 62, 63';\n } else {\n return groupName;\n }\n } else if (isStandardAWS(this.certificate.standard)) {\n return this.certificate.baseMaterial1ApprovalRange.map((g) => g.groupName).join(' + ');\n }\n }\n return '';\n }\n\n @computed('certificate.baseMaterial2TestPiece')\n get baseMaterial2ApprovalRange() {\n let { baseMaterial2TestPiece: bm2 } = this.certificate;\n if (!isEmpty(bm2)) {\n let groupName = get(bm2, 'materialGroup.groupName');\n if (\n isStandardASME(this.certificate.standard) ||\n isStandardAWSB21(this.certificate.standard)\n ) {\n if (CertificateBaseMaterialRules.isSteelAndNickelAlloys(groupName)) {\n return '1-15F, 34, 41-49';\n } else if (CertificateBaseMaterialRules.isAluminiumAlloys(groupName)) {\n return '21-26';\n } else if (CertificateBaseMaterialRules.isTitaniumAndZirconiumAlloys(groupName)) {\n return '51-53, 62, 63';\n } else {\n return groupName;\n }\n } else if (isStandardAWS(this.certificate.standard)) {\n return this.certificate.baseMaterial2ApprovalRange.map((g) => g.groupName).join(' + ');\n }\n }\n return '';\n }\n\n @computed('certificate.weldingDetailTestPiece')\n get layerType() {\n let { weldingDetailTestPiece } = this.certificate;\n if (!isEmpty(weldingDetailTestPiece)) {\n let result = weldingDetailTestPiece.filter(\n (e) => e.shortDesignation === 'sl' || e.shortDesignation === 'ml',\n );\n if (result.length > 0) {\n return result[0].completeDesignation;\n }\n }\n return '';\n }\n\n @computed('certificate.weldingDetailTestPiece')\n get sideType() {\n let { weldingDetailTestPiece } = this.certificate;\n if (!isEmpty(weldingDetailTestPiece)) {\n let result = weldingDetailTestPiece.filter(\n (e) =>\n e.shortDesignation === 'ss nb' ||\n e.shortDesignation === 'ss mb' ||\n e.shortDesignation === 'ss gb' ||\n e.shortDesignation === 'ss fb' ||\n e.shortDesignation === 'bs',\n );\n if (result.length > 0) {\n return result[0].completeDesignation;\n }\n }\n return '';\n }\n\n @computed('certificate.{baseMaterial1Thickness,baseMaterial2Thickness}')\n get showSingleBaseMaterialThickness() {\n let { baseMaterial1Thickness: bm1tp, baseMaterial2Thickness, bm2tp } = this.certificate;\n\n if (isEmpty(bm1tp) || isEmpty(bm2tp)) {\n return true;\n }\n\n return bm1tp === bm2tp;\n }\n\n get isCertificateASME() {\n return isStandardASME(get(this.certificate, 'standard'));\n }\n\n @somePropertyHasValue(\n 'certificate',\n 'diameterTestPiece',\n 'diameterMinimumApprovalRange',\n 'diameterMaximumApprovalRange',\n )\n hasDiameter;\n\n @computed(\n 'certificate.{diameterTestPiece,diameterMinimumApprovalRange,diameterMaximumApprovalRange}',\n )\n get hasDiameterToShow() {\n let {\n diameterTestPiece: tp,\n diameterMinimumApprovalRange: min,\n diameterMaximumApprovalRange: max,\n } = this.certificate;\n if (!isEmpty(tp)) {\n return true;\n }\n if (!isEmpty(max)) {\n return true;\n }\n if (!isEmpty(min) && min !== 0) {\n return true;\n }\n\n return false;\n }\n\n deleteCertificate() {\n let { certificate, loading, alertMessage: alert, intl } = this;\n let label = get(certificate, 'certificateNumber');\n let translation = intl.t('edit-view.actions.deleted', {\n name: this.certificate.certificateNumber,\n });\n loading.block();\n certificate.deleteRecord();\n certificate\n .save()\n .then(() => {\n alert.success(translation);\n get(this, 'onDelete')();\n })\n .catch((reason) => {\n certificate.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n let foreignKeyMessage = intl\n .t('edit-view.actions.foreign-key-error', { name: label })\n .toString();\n alert.error(foreignKeyMessage);\n } else {\n alert.error(intl.t('edit-view.actions.generic-delete-error', { name: label }));\n }\n })\n .finally(() => {\n loading.unblock();\n this.toggleProperty('isShowingModal');\n });\n }\n\n duplicateWelderCertificate = task(\n {\n drop: true,\n },\n async (options) => {\n let { intl, alertMessage: alert, loading, certificate } = this;\n let { certificateNumber, welder, unitSystem } = options;\n\n loading.block();\n try {\n let result = await certificate.duplicateCertificate({\n certificate: certificateNumber,\n welder,\n unitSystem,\n });\n get(this, 'afterDuplicateCertificate')(result);\n } catch (error) {\n if (isDuplicateError(error)) {\n alert.error(\n intl.t('components.model-welder-certificate/edit.duplicated-certificate-number-error', {\n number: certificate,\n }),\n );\n } else if (isPermissionDenied(error)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: certificate }));\n }\n } finally {\n loading.unblock();\n }\n },\n );\n\n archiveCertificate = task(\n {\n drop: true,\n },\n async (callback) => {\n let { loading, alertMessage: alert, intl, certificate } = this;\n\n loading.block();\n try {\n await certificate.archive();\n this.reloadCertificate()\n .then(() => {\n alert.success(\n intl.t('components.model-welder-certificate/edit.archive.messages.archive-success', {\n certificate: get(certificate, 'certificateNumber'),\n }),\n );\n })\n .finally(() => {\n loading.unblock();\n if (typeof callback === 'function') {\n callback();\n }\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-welder-certificate/edit.archive.messages.archive-error'),\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmArchive', false);\n }\n },\n );\n\n unarchiveCertificate = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, certificate } = this;\n\n loading.block();\n try {\n await certificate.unarchive();\n this.reloadCertificate()\n .then(() => {\n alert.success(\n intl.t(\n 'components.model-welder-certificate/edit.archive.messages.unarchive-success',\n {\n certificate: get(certificate, 'certificateNumber'),\n },\n ),\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-welder-certificate/edit.archive.messages.unarchive-error'),\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmUnarchive', false);\n }\n },\n );\n\n formatLastWeldingDate(date) {\n if (!isEmpty(date)) {\n return moment(date).format(DEFAULT_DATE_FORMAT);\n }\n return null;\n }\n\n reloadCertificateTask = task(\n {\n drop: true,\n },\n async () => {\n return await this.data.loadAllDataWPQ(this.certificate.id);\n },\n );\n\n reloadCertificate() {\n return this.data.loadAllDataWPQ(this.certificate.id);\n }\n\n revalidateCertificateInternallyAction = task(\n {\n drop: true,\n },\n async (\n certificate,\n type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR,\n report1,\n report2,\n weldingDate = null,\n ) => {\n let report1Id = !isEmpty(report1) ? get(report1, 'id') : null;\n let report2Id = !isEmpty(report2) ? get(report2, 'id') : null;\n return await certificate.validateInternally({\n type,\n report1: report1Id,\n report2: report2Id,\n weldingDate: this.formatLastWeldingDate(weldingDate),\n });\n },\n );\n\n revalidateCertificateInternally = task(\n {\n drop: true,\n },\n async (type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR) => {\n let { certificate, alert, intl, loading } = this;\n let { ndtReport1, ndtReport2, lastWeldingDate } = this;\n try {\n loading.block();\n let { newDate } = await this.revalidateCertificateInternallyAction.perform(\n certificate,\n type,\n ndtReport1,\n ndtReport2,\n lastWeldingDate,\n );\n alert.success(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-revalidated',\n { certificateNumber: get(certificate, 'certificateNumber'), newDate },\n ),\n );\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n set(this, 'showConfirmRevalidateInternally', false);\n await this.reloadCertificateTask.perform();\n } catch (reason) {\n if (\n getErrorCode(reason) === ERROR_CODES.CERTIFICATE_INTERNAL_DEADLINE_AFTER_EXTERNAL_DEADLINE\n ) {\n let errorData = JSON.parse(getErrorDetail(reason));\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', true);\n set(this, 'showConfirmRevalidateInternally', false);\n set(this, 'errorData', errorData);\n } else {\n alert.error(\n intl.t('components.welder-certificate-expiration-table-internal', {\n certificateNumber: get(certificate, 'certificateNumber'),\n reason: reason.message,\n }),\n );\n }\n } finally {\n loading.unblock();\n }\n },\n );\n\n revalidateCertificateExternally = task(\n {\n drop: true,\n },\n async () => {\n let { certificate, alertMessage: alert, intl, loading } = this;\n let { ndtReport1, ndtReport2 } = this;\n try {\n loading.block();\n let { newDate } = await certificate.validateExternally({\n report1: ndtReport1,\n report2: ndtReport2,\n });\n await this.reloadCertificateTask.perform();\n alert.success(\n intl.t('components.welder-certificate-expiration-table.single-certificates-revalidated', {\n certificateNumber: get(certificate, 'certificateNumber'),\n newDate,\n }),\n );\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n set(this, 'showConfirmRevalidateExternally', false);\n } catch ({ message }) {\n alert.error(\n intl.t('components.welder-certificate-expiration-table.single-certificates-error', {\n certificateNumber: get(certificate, 'certificateNumber'),\n message: message,\n }),\n );\n } finally {\n loading.unblock();\n }\n },\n );\n\n revalidateCertificateInternallyOverrideInternal = task(\n {\n drop: true,\n },\n async () => {\n let { alertMessage: alert, intl, certificate } = this;\n let { ndtReport1, ndtReport2, lastWeldingDate } = this;\n try {\n let { newDate } = await get(this, 'revalidateCertificateInternallyAction').perform(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.INTERNAL,\n ndtReport1,\n ndtReport2,\n lastWeldingDate,\n );\n alert.success(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-revalidated',\n { certificateNumber: get(certificate, 'certificateNumber'), newDate },\n ),\n );\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateInternallyFromInternal', false);\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n await this.reloadCertificateTask.perform();\n } catch ({ message }) {\n alert.error(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-error',\n { certificateNumber: get(certificate, 'certificateNumber'), reason: message },\n ),\n );\n }\n },\n );\n\n revalidateCertificateInternallyOverrideExternal = task(\n {\n drop: true,\n },\n async () => {\n let { ndtReport1, ndtReport2, lastWeldingDate } = this;\n let { alertMessage: alert, intl, certificate } = this;\n try {\n let { newDate } = await get(this, 'revalidateCertificateInternallyAction').perform(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.EXTERNAL,\n ndtReport1,\n ndtReport2,\n lastWeldingDate,\n );\n alert.success(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-revalidated',\n { certificateNumber: get(certificate, 'certificateNumber'), newDate },\n ),\n );\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateExternallyFromInternal', false);\n set(this, 'ndtReport1', null);\n set(this, 'ndtReport2', null);\n await this.reloadCertificateTask.perform();\n } catch ({ message }) {\n alert.error(\n intl.t(\n 'components.welder-certificate-expiration-table-internal.single-certificates-error',\n { certificateNumber: get(certificate, 'certificateNumber'), reason: message },\n ),\n );\n }\n },\n );\n\n generateReport = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, taskMonitor, intl, certificate } = this;\n let certificateId = get(certificate, 'id');\n if (taskMonitor.hasTaskByContext('welder-certificate', certificateId)) {\n taskMonitor.removeTaskByContext('welder-certificate', certificateId);\n }\n\n loading.block();\n await certificate\n .createReport()\n .then((response) => {\n if (response.status === '200') {\n get(taskMonitor, 'monitorTask').perform(response.taskIdentifier);\n } else {\n alert.error(`Problem occured ${response.status}`);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n },\n );\n\n finishReportGeneration = task(async () => {\n await this.reloadCertificateTask.perform();\n });\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n\n @action\n selectReportEvidence1(report) {\n let revalidation = get(this, 'currentRevalidation');\n set(revalidation, 'revalidationEvidenceReport1', report);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then((saved) => {\n saved.reload();\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-added'),\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n selectReportEvidence2(report) {\n let revalidation = get(this, 'currentRevalidation');\n set(revalidation, 'revalidationEvidenceReport2', report);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then((saved) => {\n saved.reload();\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-added'),\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setCurrentEvidence1(revalidation) {\n set(this, 'currentRevalidation', revalidation);\n set(this, 'isAddingReport1', true);\n }\n\n @action\n closeEvidenceReport1Modal() {\n set(this, 'currentRevalidation', null);\n set(this, 'isAddingReport1', false);\n }\n\n @action\n setCurrentEvidence2(revalidation) {\n set(this, 'currentRevalidation', revalidation);\n set(this, 'isAddingReport2', true);\n }\n\n @action\n closeEvidenceReport2Modal() {\n set(this, 'currentRevalidation', null);\n set(this, 'isAddingReport2', false);\n }\n\n @action\n confirmRemoveReport1(revalidation) {\n set(this, 'currentRevalidation', revalidation);\n set(this, 'isRemovingReport1', true);\n }\n\n @action\n cancelRemoveReport1() {\n set(this, 'currentRevalidation', null);\n set(this, 'isRemovingReport1', false);\n }\n\n @action\n removeReport1() {\n let revalidation = get(this, 'currentRevalidation');\n set(revalidation, 'revalidationEvidenceReport1', null);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then((saved) => {\n saved.reload();\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-removed'),\n );\n })\n .finally(() => {\n set(this, 'isRemovingReport1', false);\n loading.unblock();\n });\n }\n\n @action\n confirmRemoveReport2(revalidation) {\n set(this, 'currentRevalidation', revalidation);\n set(this, 'isRemovingReport2', true);\n }\n\n @action\n cancelRemoveReport2() {\n set(this, 'currentRevalidation', null);\n set(this, 'isRemovingReport2', false);\n }\n\n @action\n removeReport2() {\n let revalidation = get(this, 'currentRevalidation');\n set(revalidation, 'revalidationEvidenceReport2', null);\n let { loading, intl, alert } = this;\n loading.block();\n revalidation\n .save()\n .then(() => {\n alert.success(\n intl.t('components.model-welder-certificate/edit.revalidation.messages.report-removed'),\n );\n })\n .finally(() => {\n set(this, 'isRemovingReport2', false);\n loading.unblock();\n });\n }\n\n @action\n confirmArchiveCertificate() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n confirmUnarchiveCertificate() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n cancelUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n cancelInternalDeadlineOverExternal() {\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateInternallyFromInternal', false);\n set(this, 'showConfirmRevalidateExternallyFromInternal', false);\n }\n\n @action\n confirmValidateExternal() {\n set(this, 'showConfirmRevalidateExternallyFromInternal', true);\n }\n\n @action\n cancelValidateInternal() {\n set(this, 'showConfirmRevalidateInternallyFromInternal', false);\n }\n\n @action\n cancelValidateExternal() {\n set(this, 'showConfirmRevalidateExternallyFromInternal', false);\n }\n\n @action\n confirmValidateInternal() {\n set(this, 'showConfirmRevalidateInternallyFromInternal', true);\n }\n\n @action\n removeCertificateTaskFromContext() {\n this.taskMonitor.removeTaskByContext('welder-certificate', this.certificate.id);\n }\n\n @action\n confirmDelete() {\n set(this, 'isShowingModal', true);\n }\n\n @action\n deleteModel() {\n let { certificate, loading, alertMessage: alert, intl, ajax } = this;\n\n loading.block();\n ajax\n .put(`/welder-certificates/${get(certificate, 'id')}/canDelete`)\n .then(() => {\n this.deleteCertificate();\n set(this, 'certificateDeleteErrors', null);\n })\n .catch(({ payload }) => {\n alert.error(intl.t('components.model-welder-certificate/edit.delete.errors.cannot-delete'));\n set(this, 'certificateDeleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n}\n","import Component from '@glimmer/component';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WopqApprovalRange from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-approval-range';\nimport {\n WelderOperatorTypes,\n WelderCertificateTestPieceValues,\n VisualControl,\n} from 'weldnote/src-weldnote/wopq/types';\nimport { service } from '@ember/service';\nimport IntlService from 'ember-intl/services/intl';\n\ninterface ModelWelderCertificateVisualControlApprovalRangeArgs {\n visualControl: VisualControl | null;\n certificate: WelderCertificate;\n approvalRange: WopqApprovalRange;\n process: string;\n}\n\nexport default class ModelWelderCertificateVisualControlApprovalRange extends Component {\n @service\n declare intl: IntlService;\n\n constructor(owner: unknown, args: ModelWelderCertificateVisualControlApprovalRangeArgs) {\n super(owner, args);\n }\n\n get value(): string {\n if (this.args.visualControl) {\n let result = '';\n let visualControl = WelderOperatorTypes.visualControlFromString(this.args.visualControl);\n if (visualControl.isPresent()) {\n let visualValue = visualControl.get();\n let possibleProcess = WelderOperatorTypes.processFromString(this.args.process);\n let process = null;\n if (possibleProcess.isEmpty()) {\n return result;\n } else {\n process = possibleProcess.get();\n }\n let testPieces = new WelderCertificateTestPieceValues(this.args.certificate, process);\n let approvalRange = this.args.approvalRange.visualControl(visualValue, testPieces);\n result = approvalRange\n .map((t) => {\n if (t === VisualControl.DIRECT) {\n return this.intl.t('lov.visual-control.direct');\n } else if (t === VisualControl.REMOTE) {\n return this.intl.t('lov.visual-control.remote');\n }\n return '';\n })\n .join('+');\n }\n return result;\n } else {\n return '';\n }\n }\n}\n","import Component from '@glimmer/component';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WopqApprovalRange from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-approval-range';\nimport {\n WelderCertificateTestPieceValues,\n WelderOperatorTypes,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\nimport { service } from '@ember/service';\nimport IntlService from 'ember-intl/services/intl';\n\ninterface ModelWelderCertificateWeldingOperatorWeldingDetailApprovalRangeArgs {\n detail: WeldingOperatorSpecificWeldingDetails | null;\n certificate: WelderCertificate;\n approvalRange: WopqApprovalRange;\n process: string;\n}\n\nexport default class ModelWelderCertificateWeldingOperatorWeldingDetailApprovalRange extends Component {\n @service\n declare intl: IntlService;\n\n constructor(\n owner: unknown,\n args: ModelWelderCertificateWeldingOperatorWeldingDetailApprovalRangeArgs\n ) {\n super(owner, args);\n }\n\n get value(): string {\n if (this.args.detail) {\n let result = '';\n let detail = WelderOperatorTypes.weldingOperatorDetailFromString(this.args.detail);\n if (detail.isPresent()) {\n let detailValue = detail.get();\n let possibleProcess = WelderOperatorTypes.processFromString(this.args.process);\n let process = null;\n if (possibleProcess.isEmpty()) {\n return result;\n } else {\n process = possibleProcess.get();\n }\n let testPieces = new WelderCertificateTestPieceValues(this.args.certificate, process);\n let approvalRange = this.args.approvalRange.weldingDetailsForOperator(\n detailValue,\n testPieces\n );\n result = approvalRange\n .map((t) => {\n if (t === WeldingOperatorSpecificWeldingDetails.ARC) {\n return this.intl.t('lov.welding-detail-operator.arc');\n } else if (t === WeldingOperatorSpecificWeldingDetails.JOINT) {\n return this.intl.t('lov.welding-detail-operator.joint');\n } else if (t === WeldingOperatorSpecificWeldingDetails.NONE) {\n return this.intl.t('lov.welding-detail-operator.none');\n }\n return '';\n })\n .join('+');\n return result;\n }\n }\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-welder-standard/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder-standard/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n standard;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if this.welder.isArchived}}\\n {{#if this.canShowDownloadButton}}\\n \\n \\n {{t \\\"components.model-welder/edit.download-button\\\"}}\\n \\n {{/if}}\\n {{else if this.welder.isActive}}\\n
\\n
\\n {{#if this.userSession.canCreateWelder}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.userSession.canCreateCertificate}}\\n \\n \\n {{t \\\"components.model-welder/edit.buttons.create-add-certificate\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.canShowDownloadButton}}\\n \\n \\n {{t \\\"components.model-welder/edit.download-button\\\"}}\\n \\n {{/if}}\\n
\\n
\\n
\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-welder/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n
\\n
\\n
\\n\\n {{/if}}\\n\\n {{#if this.welder.isArchived}}\\n
\\n \\n {{t \\\"components.model-welder/edit.messages.welder-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n \\n\\n {{#if this.hasCertificateErrors}}\\n
\\n \\n {{#each this.welderReportErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-welder/edit.certificate-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n \\n
  • \\n
\\n {{/each}}\\n \\n
\\n {{/if}}\\n\\n {{#if this.hasCertificateError}}\\n
\\n \\n {{#if (eq this.welderReportError \\\"no-certificates\\\")}}\\n {{t \\\"components.model-welder/edit.no-certificates\\\"}}\\n {{/if}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isCreatingWelderCertificate}}\\n \\n \\n \\n \\n \\n {{standard.standard}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.model-welder/edit.create-welder-certificate.buttons.create-certificate\\\"\\n }}\\n
\\n
\\n \\n\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{#if (eq this.welder.totalWelds 0)}}\\n

{{t\\n \\\"components.model-welder/edit.messages.no-welds-performed\\\"\\n }}

\\n {{else}}\\n

{{this.welder.repairedWelds}}\\n /\\n {{this.welder.totalWelds}}\\n /\\n {{percentage-formatter rate=this.welder.repairRate decimalPlaces=2}}\\n

\\n {{/if}}\\n
\\n
\\n
\\n
\\n\\n\\n
\\n
    \\n
  • {{t \\\"components.model-welder/edit.certificates-tab-title\\\"}}
  • \\n
  • {{t \\\"components.model-welder/edit.miscellaneous-tab-title\\\"}}
  • \\n
\\n
\\n
\\n {{#if this.showCertificatesTab}}\\n \\n {{t\\n \\\"components.model-welder/edit.certificates-panel-title\\\"\\n welder=this.welder.welderName\\n }}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n {{/if}}\\n {{#if this.showMiscellaneousTab}}\\n \\n {{t\\n \\\"components.model-welder/edit.miscellaneous-panel-title\\\"\\n welder=this.welder.welderName\\n }}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n {{#if this.fetchMiscellaneousCertificates.isRunning}}\\n \\n {{t \\\"components.model-welder/edit.loading-certificates\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n \\n\", {\"contents\":\"\\n\\n \\n\\n {{#if this.welder.isArchived}}\\n {{#if this.canShowDownloadButton}}\\n \\n \\n {{t \\\"components.model-welder/edit.download-button\\\"}}\\n \\n {{/if}}\\n {{else if this.welder.isActive}}\\n
\\n
\\n {{#if this.userSession.canCreateWelder}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.userSession.canCreateCertificate}}\\n \\n \\n {{t \\\"components.model-welder/edit.buttons.create-add-certificate\\\"}}\\n \\n \\n {{/if}}\\n {{#if this.canShowDownloadButton}}\\n \\n \\n {{t \\\"components.model-welder/edit.download-button\\\"}}\\n \\n {{/if}}\\n
\\n
\\n
\\n {{#if this.canShowCreateButton}}\\n \\n \\n {{t \\\"components.model-welder/edit.create-report-button\\\"}}\\n \\n \\n {{/if}}\\n
\\n
\\n
\\n\\n {{/if}}\\n\\n {{#if this.welder.isArchived}}\\n
\\n \\n {{t \\\"components.model-welder/edit.messages.welder-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n \\n\\n {{#if this.hasCertificateErrors}}\\n
\\n \\n {{#each this.welderReportErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-welder/edit.certificate-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n \\n
  • \\n
\\n {{/each}}\\n \\n
\\n {{/if}}\\n\\n {{#if this.hasCertificateError}}\\n
\\n \\n {{#if (eq this.welderReportError \\\"no-certificates\\\")}}\\n {{t \\\"components.model-welder/edit.no-certificates\\\"}}\\n {{/if}}\\n \\n
\\n {{/if}}\\n\\n
\\n\\n{{#if this.isCreatingWelderCertificate}}\\n \\n \\n \\n \\n \\n {{standard.standard}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n {{t\\n \\\"components.model-welder/edit.create-welder-certificate.buttons.create-certificate\\\"\\n }}\\n
\\n
\\n \\n\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{#if (eq this.welder.totalWelds 0)}}\\n

{{t\\n \\\"components.model-welder/edit.messages.no-welds-performed\\\"\\n }}

\\n {{else}}\\n

{{this.welder.repairedWelds}}\\n /\\n {{this.welder.totalWelds}}\\n /\\n {{percentage-formatter rate=this.welder.repairRate decimalPlaces=2}}\\n

\\n {{/if}}\\n
\\n
\\n
\\n
\\n\\n\\n
\\n
    \\n
  • {{t \\\"components.model-welder/edit.certificates-tab-title\\\"}}
  • \\n
  • {{t \\\"components.model-welder/edit.miscellaneous-tab-title\\\"}}
  • \\n
\\n
\\n
\\n {{#if this.showCertificatesTab}}\\n \\n {{t\\n \\\"components.model-welder/edit.certificates-panel-title\\\"\\n welder=this.welder.welderName\\n }}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n {{/if}}\\n {{#if this.showMiscellaneousTab}}\\n \\n {{t\\n \\\"components.model-welder/edit.miscellaneous-panel-title\\\"\\n welder=this.welder.welderName\\n }}\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n {{#if this.fetchMiscellaneousCertificates.isRunning}}\\n \\n {{t \\\"components.model-welder/edit.loading-certificates\\\"}}\\n {{else}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n \\n\",\"moduleName\":\"weldnote/components/model-welder/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder/edit.hbs\"}});\nimport { service } from '@ember/service';\nimport { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport { task, timeout } from 'ember-concurrency';\nimport {\n isDuplicateError\n} from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\nimport _AjaxService from 'weldnote/services/ajax';\nimport WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\nimport WeldcloudData from 'weldnote/services/weldcloud-data';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\n\nexport default class Edit extends Base {\n @service('weldnote-data')\n declare data: WeldnoteDataService;\n\n @service\n declare taskMonitor: any;\n\n @service\n declare ajax: _AjaxService;\n\n get welder() {\n return this.args.model;\n }\n\n @service('instance-tracker')\n tracker: any;\n\n @service\n declare weldcloud: WeldcloudData;\n\n @service\n declare weldcloudNotesData: WeldcloudNotesData;\n\n @tracked\n type: string = 'certificates';\n\n get showCertificatesTab() {\n return this.type === 'certificates';\n };\n\n get showMiscellaneousTab() {\n return this.type === 'miscellaneous';\n }\n\n get distanceUnit() {\n return this.userSession.distanceUnit;\n }\n\n get companyOptions() {\n return this.data.companyOptions;\n }\n\n get hasFilePath() {\n return !isEmpty(this.welder.welderReportPath);\n }\n\n get hasCertificateErrors() {\n return !isEmpty(this.welderReportErrors);\n }\n\n get hasCertificateError() {\n return !isEmpty(this.welderReportError);\n }\n\n @tracked\n welderCertificates = null;\n\n @tracked\n welderCertificateCount = null;\n\n @tracked\n miscellaneousCertificates = null;\n\n @tracked\n miscellaneousCertificateCount = null;\n\n @tracked\n pageNumberCertificates = 1;\n\n @tracked\n pageNumberMiscellaneous = 1;\n\n @tracked\n showExpiredCertificates = false;\n\n @tracked\n showArchivedCertificates = false;\n\n @tracked\n showExpiredMiscellaneous = false;\n\n @tracked\n showArchivedMiscellaneous = false;\n\n @tracked\n welderReportErrors = [];\n\n @tracked\n welderReportError = null;\n\n @tracked\n selectedUnitSystem: {\n key: string,\n label: string\n } | null = null;\n\n @tracked\n certificateNumber = '';\n\n @tracked\n certificateStandard: WelderStandard | null = null;\n\n @tracked\n errors: any = [];\n\n @tracked\n isCreatingWelderCertificate = false;\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingReport() {\n let tasks: any = get(this, 'taskMonitor.currentTasks');\n let contextTask = tasks.find((item: any) => {\n if (item.get('contextName') === 'welder-report') {\n if (item.get('contextId') === get(this, 'welder.id')) {\n if (item.get('status') === '200') {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n @computed('isGeneratingReport')\n get canShowCreateButton() {\n let { isGeneratingReport } = this;\n if (isGeneratingReport) {\n return false;\n }\n\n return true;\n }\n\n get canShowDownloadButton() {\n let { isGeneratingReport } = this;\n if (isGeneratingReport) {\n return false;\n }\n\n let { hasFilePath } = this;\n if (!hasFilePath) {\n return false;\n }\n\n return true;\n }\n\n\n get columnsMiscellaneous() {\n let certificateNumberLabel = this.getAttributeLabel('certificateNumber');\n let typeLabel = this.getAttributeLabel('type');\n let expirationDateLabel = this.getAttributeLabel('expirationDate');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n cellComponent: 'weldnote-grid/miscellaneous-certificate-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'type.type',\n label: typeLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'expirationDate',\n label: expirationDateLabel,\n cellComponent: 'weldnote-grid/date-cell',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n\n get columnsCertificates() {\n let certificateNumberLabel = this.getGridColumnLabel('certificate-number');\n let weldTypeLabel = this.getGridColumnLabel('weld-type');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let weldingPositionsLabel = this.getGridColumnLabel('welding-positions');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let weldingDetailsLabel = this.getGridColumnLabel('welding-details');\n let totalThicknessLabel = this.getGridColumnLabel('total-thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n let internalExpirationLabel = this.getGridColumnLabel('internal-expiration-date');\n let externalExpirationLabel = this.getGridColumnLabel('external-expiration-date');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/welder-certificate-link',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n cellComponent: 'weldnote-grid/welding-processes',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingPositions',\n label: weldingPositionsLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'weldingDetails',\n label: weldingDetailsLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'internalRequalificationDeadline',\n label: internalExpirationLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'externalRequalificationDeadline',\n label: externalExpirationLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/pqr-diameter',\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'totalThickness',\n cellComponent: 'weldnote-grid/wpq-thickness',\n label: totalThicknessLabel,\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n @computed('welder.{id,welderId}')\n get welderLinkWeldCloud() {\n if (!isEmpty(this.welder.welderId)) {\n return this.weldcloud.generateWelderLink(this.welder.welderId);\n } else {\n return this.weldcloud.generateWelderLink(this.welder.id);\n }\n }\n\n getGridColumnLabel(label: string, options = {}) {\n return this.intl.t(`certificate-list.grid-columns.${label}`, options);\n }\n\n getAttributeLabel(attribute: string) {\n return this.intl.t(`model.miscellaneous-certificate.${attribute}.label`);\n }\n\n fetchWelderCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(100);\n let filters: any = {};\n let options = { page: this.pageNumberCertificates };\n filters.welder = get(this, 'welder.id');\n if (this.showExpiredCertificates) {\n filters._activeExpired = true;\n }\n if (this.showArchivedCertificates) {\n filters._activeArchived = true;\n }\n let certificates = await this.data.listAllWelderCertificates(options, filters);\n this.welderCertificates = certificates.list;\n this.welderCertificateCount = certificates.count;\n }\n );\n\n fetchMiscellaneousCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(100);\n let filters: any = {};\n filters.welder = get(this, 'welder.id');\n filters.person = get(this, 'welder.id');\n if (this.showExpiredMiscellaneous) {\n filters._activeExpired = true;\n }\n if (this.showArchivedMiscellaneous) {\n filters._activeArchived = true;\n }\n let options = { page: this.pageNumberMiscellaneous };\n let certificates = await this.data.listAllMiscellaneousCertificates(options, filters);\n this.miscellaneousCertificates = certificates;\n this.miscellaneousCertificateCount = certificates.meta.records;\n }\n );\n\n constructor() {\n super(...arguments);\n if (this.welder.isArchived) {\n this.showArchivedCertificates = true;\n }\n this.fetchWelderCertificates.perform();\n }\n\n @action\n setDateBirth(value: Date) {\n set(this.welder, 'dateBirth', value);\n }\n\n @action\n setSection(type: string) {\n this.type = type;\n if (type === 'miscellaneous' && this.miscellaneousCertificates === null) {\n if (this.welder.isArchived) {\n this.showArchivedMiscellaneous = true;\n }\n this.fetchMiscellaneousCertificates.perform();\n }\n }\n\n @action\n searchCertificates(pageNumber: number) {\n this.pageNumberCertificates = pageNumber;\n this.fetchWelderCertificates.perform();\n }\n\n @action\n searchMiscellaneous(pageNumber: number) {\n this.pageNumberMiscellaneous = pageNumber;\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n setShowExpiredCertificates(value: boolean) {\n this.showExpiredCertificates = value;\n this.fetchWelderCertificates.perform();\n }\n\n @action\n setShowArchivedCertificates(value: boolean) {\n this.showArchivedCertificates = value;\n this.fetchWelderCertificates.perform();\n }\n\n @action\n setShowExpiredMiscellaneous(value: boolean) {\n this.showExpiredMiscellaneous = value;\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n setShowArchivedMiscellaneous(value: boolean) {\n this.showArchivedMiscellaneous = value;\n this.fetchMiscellaneousCertificates.perform();\n }\n\n @action\n generateWelderReport() {\n let { welder, taskMonitor, loading, alert, intl } = this;\n if (welder.validate()) {\n this.welderReportErrors.clear();\n\n let welderId = welder.id;\n if (taskMonitor.hasTaskByContext('welder-report', welderId)) {\n taskMonitor.removeTaskByContext('welder-report', welderId);\n }\n loading.block();\n welder\n .createWelderReport()\n .then((response: any) => {\n if (response.status === '200') {\n let task: any = get(this, 'taskMonitor.monitorTask');\n task.perform(response.taskIdentifier);\n } else {\n let error = JSON.parse(response.error);\n if (error.certificates) {\n set(this, 'welderReportErrors', error.certificates);\n } else if (error.errors) {\n set(this, 'welderReportError', error.errors);\n }\n }\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n finishWelderReportGeneration() {\n let { taskMonitor, welder } = this;\n taskMonitor.removeTaskByContext('welder-report', welder.id);\n welder.reload();\n }\n\n @action\n createWelderCertificate() {\n let { store, router, loading, alertMessage: alert, intl } = this;\n let { certificateNumber, certificateStandard } = this;\n let errors: any = {};\n\n if (isEmpty(certificateNumber)) {\n errors.number = [intl.t('edit-view.attributes.required')];\n }\n if (isEmpty(certificateStandard)) {\n errors.standard = [intl.t('edit-view.attributes.required')];\n }\n this.errors = errors;\n\n if (!isEmpty(errors.number) || !isEmpty(errors.standard)) {\n alert.error(\n intl.t('components.model-welder/edit.create-welder-certificate.error.form-has-errors')\n );\n return;\n }\n\n let newCertificate = store.createRecord('welder-certificate', {\n welder: this.welder,\n company: this.welder.company,\n standard: this.certificateStandard,\n certificateNumber: this.certificateNumber,\n unitSystem: this.selectedUnitSystem?.key,\n });\n loading.block();\n newCertificate\n .save()\n .then((savedCertificate: WelderCertificate) => {\n router.transitionTo('welder-certificate', savedCertificate);\n alert.success('Certificate Created');\n this.isCreatingWelderCertificate = false;\n })\n .catch((reason: any) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t(\n 'components.model-welder/edit.create-welder-certificate.error.duplicate-certificate',\n {\n certificateNumber,\n }\n )\n );\n this.errors = {\n number: [\n intl.t(\n 'components.model-welder/edit.create-welder-certificate.error.number-must-be-unique'\n ),\n ],\n };\n } else {\n alert.error(\n intl.t('components.model-welder/edit.create-welder-certificate.error.generic')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n showCreateWelderCertificate() {\n this.isCreatingWelderCertificate = true;\n const option = this.weldcloudNotesData.getUnitSystem('M');\n if (option) {\n this.selectedUnitSystem = option;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n \\n {{#if @isMultiWelder}}\\n \\n {{option.welderName}}\\n ({{option.welderStamp}})\\n \\n {{else}}\\n \\n {{option.welderName}}\\n ({{option.welderStamp}})\\n \\n {{/if}}\\n \\n \\n{{else}}\\n \\n \\n {{#if @isMultiWelder}}\\n

\\n {{#each @value as |welder|}}\\n {{welder.welderName}}{{#if\\n (not-eq @value.lastObject welder)\\n }}, {{/if}}\\n {{/each}}\\n

\\n {{else}}\\n

{{@value.welderName}}

\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n \\n {{#if @isMultiWelder}}\\n \\n {{option.welderName}}\\n ({{option.welderStamp}})\\n \\n {{else}}\\n \\n {{option.welderName}}\\n ({{option.welderStamp}})\\n \\n {{/if}}\\n \\n \\n{{else}}\\n \\n \\n {{#if @isMultiWelder}}\\n

\\n {{#each @value as |welder|}}\\n {{welder.welderName}}{{#if\\n (not-eq @value.lastObject welder)\\n }}, {{/if}}\\n {{/each}}\\n

\\n {{else}}\\n

{{@value.welderName}}

\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welder/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welder/lookup.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class WelderLookup extends Component {\n @service('weldnote-data')\n data;\n\n searchWelder(term) {\n return this.data.findWelder.perform(term, {\n personType: this.args.personType || '',\n });\n }\n\n @action\n searchWelderByName(term) {\n if (this.args.search) {\n return this.args.search(term);\n } else {\n return this.searchWelder(term);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\",\"moduleName\":\"weldnote/components/model-welding-book-status/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book-status/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\n\n@classic\nexport default class Edit extends Base {\n @service('weldnote-data')\n data;\n\n @service()\n userSession;\n\n _postSave() {\n this.data.bustWeldingBookStatusCache();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{t \\\"components.model-welding-book/edit.welds.base-material1-short\\\"}}:\\n\\n\\n {{#if this.hasWeldDiameter1}}\\n Ø\\n ({{format-decimal\\n @weld.baseMaterial1Diameter\\n convertToFraction=true\\n }})\\n {{else}}\\n Ø\\n ({{format-decimal\\n @wps.baseMaterial1Diameter\\n convertToFraction=true\\n }})\\n {{/if}}\\n {{#if this.hasWeldThickness1}}\\n t\\n ({{format-decimal\\n @weld.baseMaterial1Thickness\\n convertToFraction=true\\n }})\\n {{else}}\\n t\\n ()\\n {{/if}}\\n\\n{{#if this.hasSecondBaseMaterial}}\\n
\\n \\n {{t \\\"components.model-welding-book/edit.welds.base-material2-short\\\"}}:\\n \\n \\n {{#if this.hasWeldDiameter2}}\\n Ø\\n ({{format-decimal\\n @weld.baseMaterial2Diameter\\n convertToFraction=true\\n }})\\n {{else}}\\n Ø\\n ({{format-decimal\\n @wps.baseMaterial2Diameter\\n convertToFraction=true\\n }})\\n {{/if}}\\n {{#if this.hasWeldThickness2}}\\n t\\n ({{format-decimal\\n @weld.baseMaterial2Thickness\\n convertToFraction=true\\n }})\\n {{else}}\\n t\\n ()\\n {{/if}}\\n \\n{{/if}}\", {\"contents\":\"\\n {{t \\\"components.model-welding-book/edit.welds.base-material1-short\\\"}}:\\n\\n\\n {{#if this.hasWeldDiameter1}}\\n Ø\\n ({{format-decimal\\n @weld.baseMaterial1Diameter\\n convertToFraction=true\\n }})\\n {{else}}\\n Ø\\n ({{format-decimal\\n @wps.baseMaterial1Diameter\\n convertToFraction=true\\n }})\\n {{/if}}\\n {{#if this.hasWeldThickness1}}\\n t\\n ({{format-decimal\\n @weld.baseMaterial1Thickness\\n convertToFraction=true\\n }})\\n {{else}}\\n t\\n ()\\n {{/if}}\\n\\n{{#if this.hasSecondBaseMaterial}}\\n
\\n \\n {{t \\\"components.model-welding-book/edit.welds.base-material2-short\\\"}}:\\n \\n \\n {{#if this.hasWeldDiameter2}}\\n Ø\\n ({{format-decimal\\n @weld.baseMaterial2Diameter\\n convertToFraction=true\\n }})\\n {{else}}\\n Ø\\n ({{format-decimal\\n @wps.baseMaterial2Diameter\\n convertToFraction=true\\n }})\\n {{/if}}\\n {{#if this.hasWeldThickness2}}\\n t\\n ({{format-decimal\\n @weld.baseMaterial2Thickness\\n convertToFraction=true\\n }})\\n {{else}}\\n t\\n ()\\n {{/if}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-book-weld-display-base-material-thickness.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book-weld-display-base-material-thickness.hbs\"}});\nimport { computed } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class ModelWeldingBookWeldDisplayBaseMaterialThickness extends Component {\n get hasWeldThickness1() {\n return !isEmpty(this.args.weld.baseMaterial1Thickness);\n }\n\n get hasWeldThickness2() {\n return !isEmpty(this.args.weld.baseMaterial2Thickness);\n }\n\n get hasWeldDiameter1() {\n return !isEmpty(this.args.weld.baseMaterial1Diameter);\n }\n\n get hasWeldDiameter2() {\n return !isEmpty(this.args.weld.baseMaterial2Diameter);\n }\n\n get hasSecondBaseMaterial() {\n let { weld, wps } = this.args;\n let { baseMaterial2Diameter, baseMaterial2Thickness } = weld;\n if (!isEmpty(baseMaterial2Thickness) || !isEmpty(baseMaterial2Diameter)) {\n return true;\n }\n\n let {\n baseMaterial2Diameter: diameter,\n baseMaterial2ThicknessMinimum: min,\n baseMaterial2ThicknessMaximum: max,\n } = wps;\n if (!isEmpty(diameter) || !isEmpty(min) || !isEmpty(max)) {\n return true;\n }\n return false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n {{t \\\"generic.buttons.save\\\"}}\\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n \\n \\n {{t \\\"generic.buttons.save\\\"}}\\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-book-weld-inspection/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book-weld-inspection/edit.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\n\nexport default class Edit extends Component {\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n get inspection() {\n return this.args.model;\n }\n\n get ndtOptions() {\n return this.data.nonDestructiveTestOptions;\n }\n\n @action\n save() {\n if (this.inspection.validate()) {\n this.args.saveInspection(this.inspection);\n } else {\n this.alert.error(this.intl.t('edit-view.actions.validation-failed'));\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.isEditing}}\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n
\\n \\n \\n {{option.revision}}\\n \\n \\n
\\n{{else}}\\n \\n
\\n \\n

{{this.wps.wpsNumber}} ({{this.wps.revision}})

\\n
\\n
\\n{{/if}}\\n{{#if this.isShowingSearch}}\\n \\n
\\n \\n

{{t \\\"components.model-welding-book/choose-wps-weld.help-text\\\"}}

\\n \\n
\\n {{#if (has-value this.wps.id)}}\\n

{{t \\\"components.model-welding-book/choose-wps-weld.wps-copied-values-help\\\"}}

\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isCurrentWeldTypeOverlayWeld}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n {{else}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/choose-wps-weld.search-button\\\"}}\\n {{t \\\"components.model-welding-book/choose-wps-weld.close-search-button\\\"}}\\n \\n \\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-results-title\\\"\\n }}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showSelectMasterWps}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.wpsList as |wps|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showSelectMasterWps}}\\n \\n {{/if}}\\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.model-welding-book/choose-wps-weld.columns.wps-number\\\"}}{{t \\\"components.model-welding-book/choose-wps-weld.columns.base-material\\\"}}{{t \\\"components.model-welding-book/choose-wps-weld.columns.filler-material\\\"}}{{t \\\"components.model-welding-book/choose-wps-weld.columns.welding-process\\\"}}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.preheat\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.pwht\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.welded-thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}
{{wps.wpsNumber}}{{{format-base-materials-with-thickness\\n material1=wps.baseMaterial1All\\n thickness1=wps.baseMaterial1Thickness\\n material2=wps.baseMaterial2All\\n thickness2=wps.baseMaterial2Thickness\\n }}}{{wps.fillerMaterials}}{{wps.weldingProcesses}}{{wps.preHeat}}{{wps.postWeldHeatTreatment}}{{wps.thickness}}{{wps.diameter}}\\n {{t \\\"components.model-welding-book/choose-wps-weld.select-wps-button\\\"}}\\n \\n {{#if wps.projectWps}}\\n \\n {{else}}\\n \\n {{t \\\"components.model-welding-book/choose-wps-weld.create-wps-button\\\"}}\\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.could-not-find-wps\\\"\\n }}
\\n \\n
\\n {{t \\\"components.model-welding-book/choose-wps-weld.close-search-button\\\"}}\\n \\n{{else}}\\n {{yield}}\\n{{/if}}\\n\\n{{#if this.showProjectSpecificWps}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.help-text\\\"\\n }}\\n {{this.project.projectName}}

\\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.help-text-save\\\"\\n }}

\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasBaseMaterial1}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial1Thickness}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial1Diameter}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial2}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial2Thickness}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial2Diameter}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasPwhtTemperature}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasPwhtTime}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasWeldType}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.field-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.value-column\\\"\\n }}
{{t \\\"components.model-pqr/edit.base-material1\\\"}}{{this.selectedBaseMaterial1.specification.specification}}\\n -\\n {{this.selectedBaseMaterial1.grade.grade}}-\\n {{this.selectedBaseMaterial1.materialGroup.visualLabel}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material1-thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial1Thickness}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material1-diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial1Diameter}}
{{t \\\"components.model-pqr/edit.base-material2\\\"}}{{this.selectedBaseMaterial2.specification.specification}}\\n -\\n {{this.selectedBaseMaterial2.grade.grade}}-\\n {{this.selectedBaseMaterial2.materialGroup.visualLabel}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material2-thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial2Thickness}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material2-diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial2Diameter}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.pwht-temperature\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{this.selectedPwhtTemperature}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.pwht-time\\\"\\n }}{{this.selectedPwhtTime}}
{{t \\\"model.pqr.weldTypeTestPiece.label\\\"}}{{this.selectedWeldType.weldType}}\\n -\\n {{this.selectedWeldType.designation}}
{{t \\\"generic.welding.pre-heat\\\" unit=@weldingBook.temperatureUnit}}{{this.selectedPreHeat}}
\\n
\\n
\\n
\\n \\n
\\n {{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.go-back-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.selectedWpsHasDifferentValuesFromSearch}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.help-text\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.help-text2\\\"\\n }}

\\n
    \\n
  • {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.know-that-item1\\\"\\n }}
  • \\n
  • {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.know-that-item2\\\"\\n }}
  • \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasDifferentBaseMaterial1}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentBaseMaterial2}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentWeldType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentPwhtTemperature}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentPwhtTime}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentPreHeat}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.field-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.search-value-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.wps-value-column\\\"\\n }}
{{t \\\"components.model-pqr/edit.base-material1\\\"}}{{this.selectedBaseMaterial1.specification.specification}}\\n {{this.selectedBaseMaterial1.grade.grade}}\\n {{this.selectedBaseMaterial1.materialGroup.visualLabel}}{{this.masterWps.baseMaterial1.specification.specification}}\\n {{this.masterWps.baseMaterial1.grade.grade}}\\n {{this.masterWps.baseMaterial1.materialGroup.visualLabel}}
{{t \\\"components.model-pqr/edit.base-material2\\\"}}{{this.selectedBaseMaterial2.specification.specification}}\\n {{this.selectedBaseMaterial2.grade.grade}}\\n {{this.selectedBaseMaterial2.materialGroup.visualLabel}}{{this.masterWps.baseMaterial2.specification.specification}}\\n {{this.masterWps.baseMaterial2.grade.grade}}\\n {{this.masterWps.baseMaterial2.materialGroup.visualLabel}}
{{t \\\"model.pqr.weldTypeTestPiece.label\\\"}}{{this.selectedWeldType.weldType}}\\n -\\n {{this.selectedWeldType.designation}}{{this.masterWps.weldType.weldType}}\\n -\\n {{this.masterWps.weldType.designation}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.pwht-temperature\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{this.selectedPwhtTemperature}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.pwht-time\\\"\\n }}{{this.selectedPwhtTime}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.preheat\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{this.selectedPreHeat}}
\\n
\\n
\\n
\\n \\n
\\n {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.buttons.go-back\\\"\\n }}\\n {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.buttons.use-master-wps\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"{{#if this.isEditing}}\\n \\n \\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n
\\n \\n \\n {{option.revision}}\\n \\n \\n
\\n{{else}}\\n \\n
\\n \\n

{{this.wps.wpsNumber}} ({{this.wps.revision}})

\\n
\\n
\\n{{/if}}\\n{{#if this.isShowingSearch}}\\n \\n
\\n \\n

{{t \\\"components.model-welding-book/choose-wps-weld.help-text\\\"}}

\\n \\n
\\n {{#if (has-value this.wps.id)}}\\n

{{t \\\"components.model-welding-book/choose-wps-weld.wps-copied-values-help\\\"}}

\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isCurrentWeldTypeOverlayWeld}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n {{else}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/choose-wps-weld.search-button\\\"}}\\n {{t \\\"components.model-welding-book/choose-wps-weld.close-search-button\\\"}}\\n \\n \\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-results-title\\\"\\n }}
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showSelectMasterWps}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.wpsList as |wps|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showSelectMasterWps}}\\n \\n {{/if}}\\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.model-welding-book/choose-wps-weld.columns.wps-number\\\"}}{{t \\\"components.model-welding-book/choose-wps-weld.columns.base-material\\\"}}{{t \\\"components.model-welding-book/choose-wps-weld.columns.filler-material\\\"}}{{t \\\"components.model-welding-book/choose-wps-weld.columns.welding-process\\\"}}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.preheat\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.pwht\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.welded-thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}
{{wps.wpsNumber}}{{{format-base-materials-with-thickness\\n material1=wps.baseMaterial1All\\n thickness1=wps.baseMaterial1Thickness\\n material2=wps.baseMaterial2All\\n thickness2=wps.baseMaterial2Thickness\\n }}}{{wps.fillerMaterials}}{{wps.weldingProcesses}}{{wps.preHeat}}{{wps.postWeldHeatTreatment}}{{wps.thickness}}{{wps.diameter}}\\n {{t \\\"components.model-welding-book/choose-wps-weld.select-wps-button\\\"}}\\n \\n {{#if wps.projectWps}}\\n \\n {{else}}\\n \\n {{t \\\"components.model-welding-book/choose-wps-weld.create-wps-button\\\"}}\\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.could-not-find-wps\\\"\\n }}
\\n \\n
\\n {{t \\\"components.model-welding-book/choose-wps-weld.close-search-button\\\"}}\\n \\n{{else}}\\n {{yield}}\\n{{/if}}\\n\\n{{#if this.showProjectSpecificWps}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.help-text\\\"\\n }}\\n {{this.project.projectName}}

\\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.help-text-save\\\"\\n }}

\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasBaseMaterial1}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial1Thickness}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial1Diameter}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial2}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial2Thickness}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasBaseMaterial2Diameter}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasPwhtTemperature}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasPwhtTime}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasWeldType}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.field-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.value-column\\\"\\n }}
{{t \\\"components.model-pqr/edit.base-material1\\\"}}{{this.selectedBaseMaterial1.specification.specification}}\\n -\\n {{this.selectedBaseMaterial1.grade.grade}}-\\n {{this.selectedBaseMaterial1.materialGroup.visualLabel}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material1-thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial1Thickness}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material1-diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial1Diameter}}
{{t \\\"components.model-pqr/edit.base-material2\\\"}}{{this.selectedBaseMaterial2.specification.specification}}\\n -\\n {{this.selectedBaseMaterial2.grade.grade}}-\\n {{this.selectedBaseMaterial2.materialGroup.visualLabel}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material2-thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial2Thickness}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.base-material2-diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}{{this.selectedBaseMaterial2Diameter}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.columns.pwht-temperature\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{this.selectedPwhtTemperature}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.pwht-time\\\"\\n }}{{this.selectedPwhtTime}}
{{t \\\"model.pqr.weldTypeTestPiece.label\\\"}}{{this.selectedWeldType.weldType}}\\n -\\n {{this.selectedWeldType.designation}}
{{t \\\"generic.welding.pre-heat\\\" unit=@weldingBook.temperatureUnit}}{{this.selectedPreHeat}}
\\n
\\n
\\n
\\n \\n
\\n {{t\\n \\\"components.model-welding-book/choose-wps-weld.create-project-wps-modal.go-back-button\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.selectedWpsHasDifferentValuesFromSearch}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.help-text\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.help-text2\\\"\\n }}

\\n
    \\n
  • {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.know-that-item1\\\"\\n }}
  • \\n
  • {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.know-that-item2\\\"\\n }}
  • \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasDifferentBaseMaterial1}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentBaseMaterial2}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentWeldType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentPwhtTemperature}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentPwhtTime}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasDifferentPreHeat}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.field-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.search-value-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.wps-value-column\\\"\\n }}
{{t \\\"components.model-pqr/edit.base-material1\\\"}}{{this.selectedBaseMaterial1.specification.specification}}\\n {{this.selectedBaseMaterial1.grade.grade}}\\n {{this.selectedBaseMaterial1.materialGroup.visualLabel}}{{this.masterWps.baseMaterial1.specification.specification}}\\n {{this.masterWps.baseMaterial1.grade.grade}}\\n {{this.masterWps.baseMaterial1.materialGroup.visualLabel}}
{{t \\\"components.model-pqr/edit.base-material2\\\"}}{{this.selectedBaseMaterial2.specification.specification}}\\n {{this.selectedBaseMaterial2.grade.grade}}\\n {{this.selectedBaseMaterial2.materialGroup.visualLabel}}{{this.masterWps.baseMaterial2.specification.specification}}\\n {{this.masterWps.baseMaterial2.grade.grade}}\\n {{this.masterWps.baseMaterial2.materialGroup.visualLabel}}
{{t \\\"model.pqr.weldTypeTestPiece.label\\\"}}{{this.selectedWeldType.weldType}}\\n -\\n {{this.selectedWeldType.designation}}{{this.masterWps.weldType.weldType}}\\n -\\n {{this.masterWps.weldType.designation}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.pwht-temperature\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{this.selectedPwhtTemperature}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.pwht-time\\\"\\n }}{{this.selectedPwhtTime}}
{{t\\n \\\"components.model-welding-book/choose-wps-weld.search-label.preheat\\\"\\n unit=@weldingBook.temperatureUnit\\n }}{{this.selectedPreHeat}}
\\n
\\n
\\n
\\n \\n
\\n {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.buttons.go-back\\\"\\n }}\\n {{t\\n \\\"components.model-welding-book/choose-wps-weld.select-master-wps-modal.buttons.use-master-wps\\\"\\n }}\\n \\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-book/choose-wps-weld.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/choose-wps-weld.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty, empty, equal, readOnly } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { getProperties, get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport Constants from 'weldnote/utils/constants';\nimport { tracked } from '@glimmer/tracking';\nimport { isStandardAWSD15 } from 'weldnote/utils/standards';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\nconst { WELD_TYPES } = Constants;\n\n@classic\nexport default class ChooseWpsWeld extends Component {\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @service\n userSession;\n\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n intl;\n\n isShowingSearch = false;\n\n @alias('data.pageSize')\n pageSize;\n\n currentPage = 1;\n\n totalCount = -1;\n\n selectedBaseMaterial1 = null;\n\n // Passed in parameter\n currentIndustryCode = null;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n searchThickness = null;\n\n searchDiameter = null;\n\n @notEmpty('project')\n hasProject;\n\n standard = null;\n\n currentPwhtPresence = null;\n\n selectedPwhtTemperature = null;\n\n @empty('currentPwhtTemperature')\n pwhtTimeDisabled;\n\n get temperatureUnit() {\n return this.weldingBook.temperatureUnit;\n }\n\n searchByBaseMaterial1Group = true;\n\n searchByBaseMaterial2Group = true;\n\n @tracked\n selectedFillerMaterialRoot = null;\n\n @tracked\n selectedFillerMaterialFill = null;\n\n @tracked\n selectedFillerMaterialCap = null;\n\n @tracked\n selectedFillerMaterialRootCommercialDesignation = null;\n\n @tracked\n selectedFillerMaterialFillCommercialDesignation = null;\n\n @tracked\n selectedFillerMaterialCapCommercialDesignation = null;\n\n @tracked\n findProjectWPSsOnly = false;\n\n @computed('userSession')\n get showSelectMasterWps() {\n // Show the Select Master WPS button\n return true;\n }\n\n get baseMaterialGroupStandard() {\n let standard = get(this, 'project.standard');\n if (isStandardAWSD15(standard)) {\n return standard;\n }\n return null;\n }\n\n selectedBaseMaterial2 = null;\n\n @computed('selectedWeldType', 'wps.weldType')\n get currentWeldType() {\n if (this.hasValue('selectedWeldType.id')) {\n return get(this, 'selectedWeldType');\n }\n return get(this, `wps.${WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE}`);\n }\n\n // Overlay Welds only use a Single Base Material so we need to know when to show a single/both material\n @equal('selectedWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isCurrentWeldTypeOverlayWeld;\n\n @computed('weld.baseMaterial1Thickness')\n get currentBaseMaterial1Thickness() {\n if (this.hasValue('weld.baseMaterial1Thickness')) {\n return get(this, 'weld.baseMaterial1Thickness');\n }\n return null;\n }\n\n @computed('weld.baseMaterial1Diameter')\n get currentBaseMaterial1Diameter() {\n if (this.hasValue('weld.baseMaterial1Diameter')) {\n return get(this, 'weld.baseMaterial1Diameter');\n }\n return null;\n }\n\n @computed('weld.baseMaterial2Thickness')\n get currentBaseMaterial2Thickness() {\n if (this.hasValue('weld.baseMaterial2Thickness')) {\n return get(this, 'weld.baseMaterial2Thickness');\n }\n return null;\n }\n\n @computed('weld.baseMaterial2Diameter')\n get currentBaseMaterial2Diameter() {\n if (this.hasValue('weld.baseMaterial2Diameter')) {\n return get(this, 'weld.baseMaterial2Diameter');\n }\n return null;\n }\n\n @computed(\n 'selectedPwhtTemperature',\n 'wps.{postWeldHeatTreatmentTemperatureMinimum,postWeldHeatTreatmentTemperatureMaximum}'\n )\n get currentPwhtTemperature() {\n let {\n postWeldHeatTreatmentTemperatureMinimum: min,\n postWeldHeatTreatmentTemperatureMaximum: max,\n } = this;\n if (!isEmpty(min) && !isEmpty(max) && min === max) {\n return min;\n }\n return get(this, 'selectedPwhtTemperature');\n }\n\n @computed(\n 'selectedPwhtTime',\n 'wps.{postWeldHeatTreatmentTimeMinimum,postWeldHeatTreatmentTimeMaximum}'\n )\n get currentPwhtTime() {\n let { postWeldHeatTreatmentTimeMinimum: min, postWeldHeatTreatmentTimeMaximum: max } = this;\n if (!isEmpty(min) && !isEmpty(max) && min === max) {\n return min;\n }\n return get(this, 'selectedPwhtTime');\n }\n\n hasValue(property) {\n return !isEmpty(get(this, property));\n }\n\n @notEmpty('selectedBaseMaterial1.id')\n hasBaseMaterial1;\n\n @notEmpty('selectedBaseMaterial2.id')\n hasBaseMaterial2;\n\n @notEmpty('selectedBaseMaterial1Thickness')\n hasBaseMaterial1Thickness;\n\n @notEmpty('selectedBaseMaterial1Diameter')\n hasBaseMaterial1Diameter;\n\n @notEmpty('selectedBaseMaterial2Thickness')\n hasBaseMaterial2Thickness;\n\n @notEmpty('selectedBaseMaterial2Diameter')\n hasBaseMaterial2Diameter;\n\n @notEmpty('selectedWeldType.id')\n hasWeldType;\n\n @notEmpty('selectedPwhtTemperature')\n hasPwhtTemperature;\n\n @notEmpty('selectedPwhtTime')\n hasPwhtTime;\n\n @notEmpty('selectedPreHeat')\n hasPreHeat;\n\n @computed('revisionsDisabled', 'isShowingSearch')\n get isRevisionListDisabled() {\n if (get(this, 'revisionsDisabled')) {\n return true;\n }\n if (get(this, 'isShowingSearch')) {\n return true;\n }\n return false;\n }\n\n @computed('selectedBaseMaterial1', 'masterWps.baseMaterial1')\n get hasDifferentBaseMaterial1() {\n if (this.hasValue('selectedBaseMaterial1.id')) {\n return !(get(this, 'selectedBaseMaterial1.id') === get(this, 'masterWps.baseMaterial1.id'));\n }\n return false;\n }\n\n @computed('selectedBaseMaterial2', 'masterWps.baseMaterial2')\n get hasDifferentBaseMaterial2() {\n if (this.hasValue('selectedBaseMaterial2.id')) {\n return !(get(this, 'selectedBaseMaterial2.id') === get(this, 'masterWps.baseMaterial2.id'));\n }\n return false;\n }\n\n @computed('selectedWeldType', 'masterWps.weldType')\n get hasDifferentWeldType() {\n if (this.hasValue('selectedWeldType.id')) {\n return !(get(this, 'selectedWeldType.id') === get(this, 'masterWps.weldType.id'));\n }\n return false;\n }\n\n @computed(\n 'selectedPwhtTemperature',\n 'masterWps.{postWeldHeatTreatmentTemperatureMinimum,postWeldHeatTreatmentTemperatureMaximum}'\n )\n get hasDifferentPwhtTemperature() {\n if (this.hasValue('selectedPwhtTemperature')) {\n if (\n get(this, 'masterWps.postWeldHeatTreatmentTemperatureMinimum') ===\n get(this, 'masterWps.postWeldHeatTreatmentTemperatureMaximum')\n ) {\n return (\n get(this, 'selectedPwhtTemperature') !==\n get(this, 'masterWps.postWeldHeatTreatmentTemperatureMinimum')\n );\n } else {\n return true;\n }\n }\n return false;\n }\n\n @computed(\n 'selectedPwhtTime',\n 'masterWps.{postWeldHeatTreatmentTimeMinimum,postWeldHeatTreatmentTimeMaximum}'\n )\n get hasDifferentPwhtTime() {\n if (this.hasValue('selectedPwhtTime')) {\n if (\n get(this, 'masterWps.postWeldHeatTreatmentTimeMinimum') ===\n get(this, 'masterWps.postWeldHeatTreatmentTimeMaximum')\n ) {\n return (\n get(this, 'selectedPwhtTime') !== get(this, 'masterWps.postWeldHeatTreatmentTimeMinimum')\n );\n } else {\n return true;\n }\n }\n return false;\n }\n\n @computed('selectedPreHeat', 'masterWps.{preheatTemperatureMinimum,preheatTemperatureMaximum}')\n get hasDifferentPreHeat() {\n if (this.hasValue('selectedPreHeat')) {\n if (\n get(this, 'masterWps.preheatTemperatureMinimum') ===\n get(this, 'masterWps.preheatTemperatureMaximum')\n ) {\n return get(this, 'selectedPreHeat') !== get(this, 'masterWps.preheatTemperatureMinimum');\n } else {\n return true;\n }\n }\n return false;\n }\n\n setModelDecimalValue(property, value) {\n let separator = get(this, 'userSession.decimalSeparator');\n if (separator === ',') {\n if (!isEmpty(value)) {\n value = `${value}`.replace(',', '.');\n }\n }\n set(this, property, value);\n }\n\n updateDimensionToMinimumValue(property1, property2, targetPropery) {\n let value1 = parseFloat(get(this, property1));\n let value2 = parseFloat(get(this, property2));\n let result = Math.min(value1, value2);\n if (isNaN(result) || result === null || result === Infinity) {\n if (!isNaN(value1)) {\n result = value1;\n } else if (!isNaN(value2)) {\n result = value2;\n } else {\n result = null;\n }\n }\n if (!isEmpty(result)) {\n result = `${result}`;\n }\n this.setModelDecimalValue(targetPropery, result);\n }\n\n search = task(\n {\n restartable: true,\n },\n async (page = 1) => {\n // TODO: Keep the results before each search to be able to check if they changed\n await timeout(250);\n\n let filters = {};\n if (this.hasValue('selectedBaseMaterial1.id')) {\n if (this.searchByBaseMaterial1Group) {\n filters[WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1] = get(\n this,\n 'selectedBaseMaterial1.materialGroup.id'\n );\n } else {\n filters.baseMaterial1Instance = get(this, 'selectedBaseMaterial1.id');\n }\n }\n if (this.hasValue('selectedBaseMaterial2.id')) {\n if (this.searchByBaseMaterial2Group) {\n filters[WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2] = get(\n this,\n 'selectedBaseMaterial2.materialGroup.id'\n );\n } else {\n filters.baseMaterial2Instance = get(this, 'selectedBaseMaterial2.id');\n }\n }\n if (this.hasValue('currentWeldType.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE] = get(this, 'currentWeldType.id');\n }\n if (this.hasValue('currentPwhtTime')) {\n filters.postWeldHeatTreatmentTime = get(this, 'currentPwhtTime');\n }\n\n if (this.hasValue('currentPwhtTemperature')) {\n filters.postWeldHeatTreatment = get(this, 'currentPwhtTemperature');\n }\n if (this.hasValue('currentPwhtPresence')) {\n filters.pwhtPresence = get(this, 'currentPwhtPresence');\n }\n if (this.hasValue('selectedBaseMaterial1Thickness')) {\n filters.baseMaterial1Thickness = get(this, 'selectedBaseMaterial1Thickness');\n }\n if (this.hasValue('selectedBaseMaterial2Thickness')) {\n filters.baseMaterial2Thickness = get(this, 'selectedBaseMaterial2Thickness');\n }\n\n if (this.hasValue('selectedBaseMaterial2Thickness')) {\n filters.baseMaterial2Thickness = get(this, 'selectedBaseMaterial2Thickness');\n }\n\n if (this.hasValue('selectedProcessRoot.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT] = get(\n this,\n 'selectedProcessRoot.id'\n );\n }\n\n if (this.hasValue('selectedProcessFill.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL] = get(\n this,\n 'selectedProcessFill.id'\n );\n }\n\n if (this.hasValue('selectedProcessCap.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP] = get(\n this,\n 'selectedProcessCap.id'\n );\n }\n\n if (this.hasValue('searchDiameter')) {\n filters.diameter = get(this, 'searchDiameter');\n }\n if (this.hasValue('standard.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.STANDARD] = get(this, 'standard.id');\n }\n\n if (this.hasValue('selectedPreHeat')) {\n filters.preHeat = get(this, 'selectedPreHeat');\n }\n\n if (this.hasValue('selectedWpsNumber')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.WPS_NUMBER] = get(this, 'selectedWpsNumber');\n }\n\n if (!isEmpty(get(this, 'project.id'))) {\n filters.plusProjectWps = get(this, 'project.id');\n }\n\n // filler material filters\n if (this.hasValue('selectedFillerMaterialRoot.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT] =\n this.selectedFillerMaterialRoot.id;\n }\n if (this.hasValue('selectedFillerMaterialFill.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL] =\n this.selectedFillerMaterialFill.id;\n }\n if (this.hasValue('selectedFillerMaterialCap.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP] =\n this.selectedFillerMaterialCap.id;\n }\n\n // filler material commercial designation filters\n if (this.hasValue('selectedFillerMaterialRootCommercialDesignation.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION] =\n this.selectedFillerMaterialRootCommercialDesignation.id;\n }\n if (this.hasValue('selectedFillerMaterialFillCommercialDesignation.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION] =\n this.selectedFillerMaterialFillCommercialDesignation.id;\n }\n if (this.hasValue('selectedFillerMaterialCapCommercialDesignation.id')) {\n filters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION] =\n this.selectedFillerMaterialCapCommercialDesignation.id;\n }\n\n if (this.findProjectWPSsOnly) {\n filters.wpsSearchType = 'project';\n }\n\n filters.unitSystem = this.weldingBook.unitSystem;\n\n return get(this, 'data')\n .listAllWeldingProcedureSpecifications(\n {\n page,\n },\n filters\n )\n .then((data) => {\n set(this, 'wpsList', data.list);\n set(this, 'totalCount', data.count);\n return data;\n });\n }\n );\n\n hideSearch() {\n set(this, 'isShowingSearch', false);\n }\n\n chooseWps(wps) {\n this.hideSearch();\n get(this, 'onUpdateValue')(wps);\n get(this, 'analytics').trackEvent(EVENTS.SELECT, {\n type: 'wps',\n context: 'welding-book-weld',\n });\n }\n\n selectedWpsIsDifferentFromSearchValues(wps) {\n let {\n baseMaterial1,\n baseMaterial2,\n weldType,\n postWeldHeatTreatmentTemperatureMinimum: pwhtMin,\n postWeldHeatTreatmentTemperatureMaximum: pwhtMax,\n postWeldHeatTreatmentTimeMinimum: pwhtTimeMin,\n postWeldHeatTreatmentTimeMaximum: pwhtTimeMax,\n preheatTemperatureMinimum: preHeatMin,\n preheatTemperatureMaximum: preHeatMax,\n } = getProperties(\n wps,\n 'baseMaterial1',\n 'baseMaterial2',\n 'weldType',\n 'postWeldHeatTreatmentTemperatureMinimum',\n 'postWeldHeatTreatmentTemperatureMaximum',\n 'postWeldHeatTreatmentTimeMinimum',\n 'postWeldHeatTreatmentTimeMaximum',\n 'preheatTemperatureMinimum',\n 'preheatTemperatureMaximum'\n );\n\n if (\n this.hasValue('selectedBaseMaterial1.id') &&\n get(this, 'selectedBaseMaterial1.id') !== get(baseMaterial1, 'id')\n ) {\n return true;\n }\n if (\n this.hasValue('selectedBaseMaterial2.id') &&\n get(this, 'selectedBaseMaterial2.id') !== get(baseMaterial2, 'id')\n ) {\n return true;\n }\n if (\n this.hasValue('selectedWeldType.id') &&\n get(this, 'selectedWeldType.id') !== get(weldType, 'id')\n ) {\n return true;\n }\n if (this.hasValue('selectedPwhtTemperature')) {\n if (pwhtMax === pwhtMin) {\n if (get(this, 'selectedPwhtTemperature') !== pwhtMax) {\n return true;\n }\n }\n }\n\n if (this.hasValue('selectedPwhtTime')) {\n if (pwhtTimeMax === pwhtTimeMin) {\n if (get(this, 'selectedPwhtTime') !== pwhtTimeMax) {\n return true;\n }\n }\n }\n\n if (this.hasValue('selectedPreHeat')) {\n if (preHeatMin === preHeatMax) {\n if (get(this, 'selectedPreHeat') !== preHeatMin) {\n return true;\n }\n }\n if (!isEmpty(preHeatMin) && isEmpty(preHeatMax)) {\n if (get(this, 'selectedPreHeat') !== preHeatMin) {\n return true;\n }\n }\n return false;\n }\n\n return false;\n }\n\n @action\n openSearch() {\n if (this.hasValue(`wps.${WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1}`)) {\n this.selectedBaseMaterial1 = get(\n this,\n `wps.${WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1}`\n );\n }\n if (this.hasValue(`wps.${WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2}`)) {\n this.selectedBaseMaterial2 = get(\n this,\n `wps.${WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2}`\n );\n }\n set(this, 'isShowingSearch', true);\n }\n\n @action\n cancel() {\n this.hideSearch();\n }\n\n @action\n confirmWpsCanBeChosen(wpsItem) {\n get(this, 'store')\n .findRecord('welding-procedure-specification', wpsItem.id)\n .then((wps) => {\n if (this.selectedWpsIsDifferentFromSearchValues(wps)) {\n set(this, 'masterWps', wps);\n set(this, 'selectedWpsHasDifferentValuesFromSearch', true);\n } else {\n this.chooseWps(wps);\n }\n });\n }\n\n @action\n searchWps() {\n get(this, 'search').perform();\n }\n\n @action\n setBaseMaterial1Search(material) {\n set(this, 'selectedBaseMaterial1', material);\n // Overlay Welds only use a Single Base Material\n // but we copy to the second one for seach purposes\n if (get(this, 'isCurrentWeldTypeOverlayWeld')) {\n set(this, 'selectedBaseMaterial2', material);\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial2Group', false);\n }\n }\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial1Group', false);\n }\n }\n\n @action\n setBaseMaterial2Search(material) {\n set(this, 'selectedBaseMaterial2', material);\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial2Group', false);\n }\n }\n\n @action\n removeBaseMaterial1Search() {\n set(this, 'selectedBaseMaterial1', null);\n set(this, 'searchByBaseMaterial1Group', true);\n // Overlay Welds only use a Single Base Material\n // but we copy to the second one for seach purposes\n if (get(this, 'isCurrentWeldTypeOverlayWeld')) {\n set(this, 'selectedBaseMaterial2', null);\n set(this, 'searchByBaseMaterial2Group', true);\n }\n }\n\n @action\n removeBaseMaterial2Search() {\n set(this, 'selectedBaseMaterial2', null);\n set(this, 'searchByBaseMaterial2Group', true);\n }\n\n @action\n setWeldType(value) {\n set(this, 'selectedWeldType', value);\n }\n\n @action\n setPwhtTime(value) {\n set(this, 'selectedPwhtTime', value);\n }\n\n @action\n setPwhtTemperature(value) {\n set(this, 'selectedPwhtTemperature', value);\n }\n\n @action\n setBaseMaterial1ThicknessWPSChoose(value) {\n set(this, 'selectedBaseMaterial1Thickness', value);\n get(this, 'setBaseMaterial1Thickness')(value);\n }\n\n @action\n setBaseMaterial1DiameterWPSChoose(value) {\n set(this, 'selectedBaseMaterial1Diameter', value);\n get(this, 'setBaseMaterial1Diameter')(value);\n this.updateDimensionToMinimumValue(\n 'currentBaseMaterial1Diameter',\n 'currentBaseMaterial2Diameter',\n 'searchDiameter'\n );\n }\n\n @action\n setBaseMaterial2ThicknessWPSChoose(value) {\n set(this, 'selectedBaseMaterial2Thickness', value);\n get(this, 'setBaseMaterial2Thickness')(value);\n }\n\n @action\n setBaseMaterial2DiameterWPSChoose(value) {\n set(this, 'selectedBaseMaterial2Diameter', value);\n get(this, 'setBaseMaterial2Diameter')(value);\n this.updateDimensionToMinimumValue(\n 'currentBaseMaterial1Diameter',\n 'currentBaseMaterial2Diameter',\n 'searchDiameter'\n );\n }\n\n @action\n confirmCreateProjectWps(wps) {\n set(this, 'showProjectSpecificWps', true);\n set(this, 'masterWps', wps);\n }\n\n @action\n cancelProjectSpecificWps() {\n set(this, 'showProjectSpecificWps', false);\n set(this, 'masterWps', null);\n }\n\n @action\n cancelProjectSpecificWpsFromMasterWPS() {\n set(this, 'selectedWpsHasDifferentValuesFromSearch', false);\n set(this, 'masterWps', null);\n }\n\n @action\n confirmWpsCreate() {\n let { loading, alert, masterWps, store } = this;\n loading.block();\n let wpsOptions = {\n project: get(this, 'project.id'),\n };\n if (this.hasBaseMaterial1) {\n wpsOptions.baseMaterial1 = get(this, 'selectedBaseMaterial1.id');\n }\n if (this.hasBaseMaterial1Thickness) {\n wpsOptions.baseMaterial1Thickness = get(this, 'selectedBaseMaterial1Thickness');\n }\n if (this.hasBaseMaterial1Diameter) {\n wpsOptions.baseMaterial1Diameter = get(this, 'selectedBaseMaterial1Diameter');\n }\n if (this.hasBaseMaterial2) {\n wpsOptions.baseMaterial2 = get(this, 'selectedBaseMaterial2.id');\n }\n if (this.hasBaseMaterial2Thickness) {\n wpsOptions.baseMaterial2Thickness = get(this, 'selectedBaseMaterial2Thickness');\n }\n if (this.hasBaseMaterial2Diameter) {\n wpsOptions.baseMaterial2Diameter = get(this, 'selectedBaseMaterial2Diameter');\n }\n if (this.hasWeldType) {\n wpsOptions.weldType = get(this, 'selectedWeldType.id');\n }\n if (this.hasPwhtTemperature) {\n wpsOptions.pwhtTemperature = get(this, 'selectedPwhtTemperature');\n }\n if (this.hasPwhtTime) {\n wpsOptions.pwhtTime = get(this, 'selectedPwhtTime');\n }\n if (this.hasPreHeat) {\n wpsOptions.preHeat = get(this, 'selectedPreHeat');\n }\n store.findRecord('welding-procedure-specification', masterWps.id).then((wps) => {\n wps\n .createForProject(wpsOptions)\n .then((result) => {\n get(this, 'onCreateProjectSpecific')(result);\n })\n .catch((error) => {\n alert.error(error);\n })\n .finally(() => {\n set(this, 'showProjectSpecificWps', false);\n set(this, 'selectedWpsHasDifferentValuesFromSearch', false);\n set(this, 'masterWps', null);\n this.hideSearch();\n loading.unblock();\n })\n .catch(() => {\n alert.error('Error while loading the WPS');\n loading.unblock();\n });\n });\n }\n\n @action\n chooseMasterWps(wps) {\n this.chooseWps(wps);\n set(this, 'selectedWpsHasDifferentValuesFromSearch', false);\n set(this, 'masterWps', null);\n }\n\n @action\n resetSearchResults() {\n get(this, 'search').perform();\n }\n\n @action\n setCurrentPwhtPresence(value) {\n set(this, 'currentPwhtPresence', value);\n if (value === 'ABSENT' || value === 'NO') {\n set(this, 'selectedPwhtTime', null);\n }\n }\n\n @action\n setSearchByMaterial1Group(value) {\n set(this, 'searchByBaseMaterial1Group', value);\n }\n\n @action\n setSearchByMaterial2Group(value) {\n set(this, 'searchByBaseMaterial2Group', value);\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n this.selectedFillerMaterialRoot = fillerMaterial;\n this.fillerMaterialRootCommercialDesignationChosen(null);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n this.selectedFillerMaterialFill = fillerMaterial;\n this.fillerMaterialFillCommercialDesignationChosen(null);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n this.selectedFillerMaterialCap = fillerMaterial;\n this.fillerMaterialCapCommercialDesignationChosen(null);\n }\n\n @action\n fillerMaterialRootCommercialDesignationChosen(value) {\n if (!isEmpty(value)) {\n this.fillerMaterialRootChosen(value.fillerMaterial);\n }\n this.selectedFillerMaterialRootCommercialDesignation = value;\n }\n\n @action\n fillerMaterialFillCommercialDesignationChosen(value) {\n if (!isEmpty(value)) {\n this.fillerMaterialFillChosen(value.fillerMaterial);\n }\n this.selectedFillerMaterialFillCommercialDesignation = value;\n }\n\n @action\n fillerMaterialCapCommercialDesignationChosen(value) {\n if (!isEmpty(value)) {\n this.fillerMaterialCapChosen(value.fillerMaterial);\n }\n this.selectedFillerMaterialCapCommercialDesignation = value;\n }\n\n @action\n setFindProjectWPSsOnly(value) {\n this.findProjectWPSsOnly = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.delete-warning-all-revisions\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.suggest-archive\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.delete-warning-all-revisions\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.suggest-archive\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-book/confirm-delete.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/confirm-delete.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n\\n {{#if this.showComponentHasWeldsWarning}}\\n \\n {{t\\n \\\"components.model-welding-book/edit.messages.component-has-welds\\\"\\n weldsCount=this.weldsCount\\n }}\\n \\n {{/if}}\\n\\n {{#if this.isShowingNewComponentCreating}}\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n {{t \\\"generic.buttons.create\\\"}}\\n \\n
\\n
\\n {{else}}\\n \\n \\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.create-component\\\"}}\\n \\n {{/if}}\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.welds-to-copy\\\"}}\\n
\\n
\\n \\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.all-welds\\\"}}\\n ({{this.weldingBookWelds.length}}\\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.n-welds\\\"}})\\n \\n \\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.selected-welds\\\"}}\\n ({{this.selectedWeldsToCopy.length}}\\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.n-welds\\\"}})\\n \\n
\\n\\n {{#if this.shouldCopyOnlySelectedWelds}}\\n \\n {{weld.weldNumber}}\\n \\n {{/if}}\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n\\n {{#if this.showComponentHasWeldsWarning}}\\n \\n {{t\\n \\\"components.model-welding-book/edit.messages.component-has-welds\\\"\\n weldsCount=this.weldsCount\\n }}\\n \\n {{/if}}\\n\\n {{#if this.isShowingNewComponentCreating}}\\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.cancel\\\"}}\\n \\n \\n {{t \\\"generic.buttons.create\\\"}}\\n \\n
\\n
\\n {{else}}\\n \\n \\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.create-component\\\"}}\\n \\n {{/if}}\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.welds-to-copy\\\"}}\\n
\\n
\\n \\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.all-welds\\\"}}\\n ({{this.weldingBookWelds.length}}\\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.n-welds\\\"}})\\n \\n \\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.selected-welds\\\"}}\\n ({{this.selectedWeldsToCopy.length}}\\n {{t \\\"components.model-welding-book/copy-welds-to-project-modal.n-welds\\\"}})\\n \\n
\\n\\n {{#if this.shouldCopyOnlySelectedWelds}}\\n \\n {{weld.weldNumber}}\\n \\n {{/if}}\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-book/copy-welds-to-project-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/copy-welds-to-project-modal.hbs\"}});\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class EditDrawing extends Component {\n @service\n intl;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n store;\n\n @tracked\n manuallySelectedComponent;\n\n @tracked\n componentErrors = [];\n\n @tracked\n showComponentHasWeldsWarning = false;\n\n @tracked\n weldsCount = null;\n\n @tracked\n isShowingNewComponentCreating = false;\n\n @tracked\n projectComponents = null;\n\n newProjectComponentName = null;\n\n @tracked\n weldsToCopyOption = 'all-welds';\n\n @tracked\n weldingBookWelds = [];\n\n @tracked\n selectedWeldsToCopy = [];\n\n // TODO: we are currently fetching everything in this component and then making frontend filters.\n // Ideally, we want to convert this to backend searching.\n constructor() {\n super(...arguments);\n\n this.data\n .listAllProjectComponents({\n project: this.args.project.id,\n pageSize: 999,\n })\n .then((components) => {\n this.projectComponents = components.slice();\n });\n\n this.data\n .loadWeldingBookWelds({\n weldingBook: this.args.weldingBook.id,\n pageSize: 999,\n })\n .then((welds) => {\n this.weldingBookWelds = welds;\n this.selectedWeldsToCopy = welds.slice();\n });\n }\n\n get selectedComponent() {\n return this.manuallySelectedComponent ?? this.args.projectComponent;\n }\n\n get shouldCopyOnlySelectedWelds() {\n return 'selected-welds' === this.weldsToCopyOption;\n }\n\n @action\n async checkComponentWelds() {\n if (isEmpty(this.selectedComponent)) {\n return;\n }\n\n let options = {\n project: this.args.project.id,\n component: this.selectedComponent.id,\n };\n let componentWelds = await this.data.listAllProjectWelds(options);\n\n if (componentWelds.count > 0) {\n this.weldsCount = componentWelds.count;\n this.showComponentHasWeldsWarning = true;\n } else {\n this.showComponentHasWeldsWarning = false;\n }\n }\n\n @action\n copyWeldsToProject() {\n if (isEmpty(this.selectedComponent)) {\n this.componentErrors = [{ message: this.intl.t('generic.error.field-required') }];\n return;\n } else {\n this.componentErrors = [];\n }\n\n let { intl, loading, alert } = this;\n\n loading.block();\n this.args.weldingBook\n .copyWeldsToProject({\n projectComponent: this.selectedComponent.id,\n copyType: this.weldsToCopyOption,\n welds: this.selectedWeldsToCopy.map((w) => w.id),\n })\n .then((duplicatedBook) => {\n let projectComponentUrl = `/projects/${this.args.project.id}/components/${this.selectedComponent.id}?section=components`;\n alert.success(\n `${intl.t('components.model-welding-book/edit.messages.copy-welds-success', {\n component: this.selectedComponent.componentName,\n })}\n

\n \n \n ${intl.t('generic.actions.click-here')}\n \n \n ${intl.t('generic.actions.to-access-it')}\n `\n );\n })\n .catch((reason) => {\n alert.error(intl.t('generic.error.error-occured'));\n })\n .finally(() => {\n loading.unblock();\n this.args.onClose();\n });\n }\n\n @action\n async createNewComponent() {\n let { intl, loading, alert } = this;\n loading.block();\n\n let createdComponent = this.store.createRecord('project-component', {\n project: this.args.project,\n componentName: this.newProjectComponentName,\n });\n try {\n await createdComponent.save();\n this.projectComponents.pushObject(createdComponent);\n\n this.newProjectComponentName = '';\n this.showComponentHasWeldsWarning = false;\n this.manuallySelectedComponent = createdComponent;\n this.isShowingNewComponentCreating = false;\n alert.success(intl.t('generic.success.created', { name: this.newProjectComponentName }));\n } catch (e) {\n alert.error(intl.t('generic.error.unknown-error'));\n } finally {\n loading.unblock();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each (sort-by \\\"referenceNumber\\\" @drawings) as |drawing|}}\\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-book/edit.drawings.columns.reference-number\\\"\\n }}{{t \\\"components.model-welding-book/edit.drawings.columns.title\\\"}}{{t\\n \\\"components.model-welding-book/edit.drawings.columns.revision\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.drawings.columns.drawing\\\"\\n }}
\\n \\n \\n {{drawing.referenceNumber}}\\n \\n {{drawing.title}}{{drawing.revision}}\\n {{#if (not (is-empty-attribute drawing.drawingContentPath))}}\\n \\n {{t \\\"components.model-welding-book/edit.drawings.download-link\\\"}}\\n {{/if}}\\n \\n \\n \\n {{t \\\"components.model-welding-book/edit.drawings.remove-drawing\\\"}}\\n \\n
\\n\\n{{#if this.isShowingDeleteConfirmation}}\\n \\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each (sort-by \\\"referenceNumber\\\" @drawings) as |drawing|}}\\n \\n \\n \\n \\n \\n {{#if @isEditing}}\\n \\n {{/if}}\\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-book/edit.drawings.columns.reference-number\\\"\\n }}{{t \\\"components.model-welding-book/edit.drawings.columns.title\\\"}}{{t\\n \\\"components.model-welding-book/edit.drawings.columns.revision\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.drawings.columns.drawing\\\"\\n }}
\\n \\n \\n {{drawing.referenceNumber}}\\n \\n {{drawing.title}}{{drawing.revision}}\\n {{#if (not (is-empty-attribute drawing.drawingContentPath))}}\\n \\n {{t \\\"components.model-welding-book/edit.drawings.download-link\\\"}}\\n {{/if}}\\n \\n \\n \\n {{t \\\"components.model-welding-book/edit.drawings.remove-drawing\\\"}}\\n \\n
\\n\\n{{#if this.isShowingDeleteConfirmation}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-book/drawings-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/drawings-table.hbs\"}});\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class EditDrawing extends Component {\n @service\n intl;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @tracked\n isShowingDeleteConfirmation = false;\n\n drawingToBeDeleted = null;\n\n @action\n removeDrawing(drawing) {\n this.isShowingDeleteConfirmation = true;\n this.drawingToBeDeleted = drawing;\n }\n\n @action\n confirmRemoveDrawing() {\n this.args.onDelete(this.drawingToBeDeleted);\n this.isShowingDeleteConfirmation = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n
\\n {{#if this.isEditing}}\\n
\\n {{#if @model.isNew}}\\n \\n \\n {{t \\\"components.model-welding-book/edit-weld.cancel-button\\\"}}\\n \\n {{else}}\\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{/if}}\\n \\n \\n {{t \\\"components.model-welding-book/edit-weld.buttons.save-weld\\\"}}\\n \\n
\\n {{#unless @model.isNew}}\\n \\n {{t \\\"components.model-welding-book/edit.welds.buttons.delete\\\"}}\\n {{/unless}}\\n {{else}}\\n \\n {{t \\\"components.model-welding-book/edit-weld.close-button\\\"}}\\n {{/if}}\\n
\\n\\n
\\n \\n {{t \\\"components.model-welding-book/edit-weld.messages.save-weld\\\"}}\\n \\n
\\n\\n {{t\\n \\\"components.model-welding-book/edit-weld.registration-parameters-help\\\"\\n }}\\n {{t\\n \\\"components.model-welding-book/edit-weld.registration-parameters-help2\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n {{#if (has-value @model.wps.id)}}\\n
{{t \\\"components.model-welding-book/edit.welds.wps.details\\\"}}
\\n
\\n
\\n
\\n
\\n {{t \\\"components.model-welding-book/edit.welds.wps.columns.base-material\\\"}}:\\n
\\n
\\n {{#if (has-value @model.wps.baseMaterial1)}}\\n {{@model.wps.baseMaterial1.specification.specification}}\\n {{@model.wps.baseMaterial1.grade.grade}}\\n {{@model.wps.baseMaterial1.materialGroup.visualLabel}}\\n {{/if}}\\n {{#if (has-value @model.wps.baseMaterial2)}}\\n +\\n {{@model.wps.baseMaterial2.specification.specification}}\\n {{@model.wps.baseMaterial2.grade.grade}}\\n {{@model.wps.baseMaterial2.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n {{t \\\"components.model-welding-book/edit.welds.wps.columns.welding-process\\\"}}:\\n
\\n
\\n
\\n
\\n
\\n
\\n {{t \\\"components.model-welding-book/edit.welds.wps.columns.weld-type\\\"}}:\\n
\\n
\\n {{@model.wps.weldType.designation}}\\n
\\n
\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit.welds.wps.columns.thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit.welds.wps.columns.diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n \\n
\\n
\\n
\\n\\n {{#if (has-value @model.wps.baseMaterial1Diameter)}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit-weld.selected-wps.base-material1-dimensions\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n D({{@model.wps.baseMaterial1Diameter}}), t({{@model.wps.baseMaterial1Thickness}})\\n
\\n
\\n {{/if}}\\n {{#if (has-value @model.wps.baseMaterial2Diameter)}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit-weld.selected-wps.base-material2-dimensions\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n D({{@model.wps.baseMaterial2Diameter}}), t({{@model.wps.baseMaterial2Thickness}})\\n
\\n
\\n {{/if}}\\n {{#if (has-value @model.wps.postWeldHeatTreatmentTemperatureMinimum)}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit-weld.selected-wps.pwht-temperature\\\"\\n unit=@weldingBook.temperatureUnit\\n }}:\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n {{#if (has-value @model.wps.postWeldHeatTreatmentTimeMinimum)}}\\n
\\n
\\n {{t \\\"components.model-welding-book/edit-weld.selected-wps.pwht-time\\\"}}:\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n {{/if}}\\n \\n
\\n\\n\\n {{#if @model.isNew}}\\n
\\n \\n {{t \\\"components.model-project-weld/edit.inspection.save-warning\\\"}}\\n
\\n \\n \\n {{t \\\"generic.buttons.save\\\"}}\\n \\n
\\n
\\n
\\n {{else}}\\n {{#if this.isEditing}}\\n
\\n \\n {{t\\n \\\"components.model-welding-book/edit.welds.inspections.add-inspection.add-inspection\\\"\\n }}\\n
\\n {{/if}}\\n {{#if this.isEditingInspection}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each\\n (sort-by\\n \\\"testStageName.displayOrder\\\"\\n \\\"testLocation.name\\\"\\n \\\"test.designation\\\"\\n \\\"id\\\"\\n @model.inspections\\n )\\n as |inspection|\\n }}\\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.test-stage-name\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.test-location\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.test\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.percentage\\\"\\n }}
{{inspection.testStageName.name}}{{inspection.testLocation.name}}{{inspection.test.designation}}{{inspection.percentage}}\\n {{#if this.isEditing}}\\n \\n \\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.empty-message\\\"\\n }}
\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n{{#if this.isDeletingInspection}}\\n \\n{{/if}}\\n\\n{{#if this.isDeletingWeld}}\\n \\n{{/if}}\", {\"contents\":\"\\n\\n
\\n {{#if this.isEditing}}\\n
\\n {{#if @model.isNew}}\\n \\n \\n {{t \\\"components.model-welding-book/edit-weld.cancel-button\\\"}}\\n \\n {{else}}\\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{/if}}\\n \\n \\n {{t \\\"components.model-welding-book/edit-weld.buttons.save-weld\\\"}}\\n \\n
\\n {{#unless @model.isNew}}\\n \\n {{t \\\"components.model-welding-book/edit.welds.buttons.delete\\\"}}\\n {{/unless}}\\n {{else}}\\n \\n {{t \\\"components.model-welding-book/edit-weld.close-button\\\"}}\\n {{/if}}\\n
\\n\\n
\\n \\n {{t \\\"components.model-welding-book/edit-weld.messages.save-weld\\\"}}\\n \\n
\\n\\n {{t\\n \\\"components.model-welding-book/edit-weld.registration-parameters-help\\\"\\n }}\\n {{t\\n \\\"components.model-welding-book/edit-weld.registration-parameters-help2\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n {{#if (has-value @model.wps.id)}}\\n
{{t \\\"components.model-welding-book/edit.welds.wps.details\\\"}}
\\n
\\n
\\n
\\n
\\n {{t \\\"components.model-welding-book/edit.welds.wps.columns.base-material\\\"}}:\\n
\\n
\\n {{#if (has-value @model.wps.baseMaterial1)}}\\n {{@model.wps.baseMaterial1.specification.specification}}\\n {{@model.wps.baseMaterial1.grade.grade}}\\n {{@model.wps.baseMaterial1.materialGroup.visualLabel}}\\n {{/if}}\\n {{#if (has-value @model.wps.baseMaterial2)}}\\n +\\n {{@model.wps.baseMaterial2.specification.specification}}\\n {{@model.wps.baseMaterial2.grade.grade}}\\n {{@model.wps.baseMaterial2.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n {{t \\\"components.model-welding-book/edit.welds.wps.columns.welding-process\\\"}}:\\n
\\n
\\n
\\n
\\n
\\n
\\n {{t \\\"components.model-welding-book/edit.welds.wps.columns.weld-type\\\"}}:\\n
\\n
\\n {{@model.wps.weldType.designation}}\\n
\\n
\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit.welds.wps.columns.thickness\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit.welds.wps.columns.diameter\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n \\n
\\n
\\n
\\n\\n {{#if (has-value @model.wps.baseMaterial1Diameter)}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit-weld.selected-wps.base-material1-dimensions\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n D({{@model.wps.baseMaterial1Diameter}}), t({{@model.wps.baseMaterial1Thickness}})\\n
\\n
\\n {{/if}}\\n {{#if (has-value @model.wps.baseMaterial2Diameter)}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit-weld.selected-wps.base-material2-dimensions\\\"\\n unit=@weldingBook.distanceUnit\\n }}:\\n
\\n
\\n D({{@model.wps.baseMaterial2Diameter}}), t({{@model.wps.baseMaterial2Thickness}})\\n
\\n
\\n {{/if}}\\n {{#if (has-value @model.wps.postWeldHeatTreatmentTemperatureMinimum)}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-book/edit-weld.selected-wps.pwht-temperature\\\"\\n unit=@weldingBook.temperatureUnit\\n }}:\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n {{#if (has-value @model.wps.postWeldHeatTreatmentTimeMinimum)}}\\n
\\n
\\n {{t \\\"components.model-welding-book/edit-weld.selected-wps.pwht-time\\\"}}:\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n {{/if}}\\n \\n
\\n\\n\\n {{#if @model.isNew}}\\n
\\n \\n {{t \\\"components.model-project-weld/edit.inspection.save-warning\\\"}}\\n
\\n \\n \\n {{t \\\"generic.buttons.save\\\"}}\\n \\n
\\n
\\n
\\n {{else}}\\n {{#if this.isEditing}}\\n
\\n \\n {{t\\n \\\"components.model-welding-book/edit.welds.inspections.add-inspection.add-inspection\\\"\\n }}\\n
\\n {{/if}}\\n {{#if this.isEditingInspection}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isEditing}}\\n \\n {{/if}}\\n \\n \\n \\n {{#each\\n (sort-by\\n \\\"testStageName.displayOrder\\\"\\n \\\"testLocation.name\\\"\\n \\\"test.designation\\\"\\n \\\"id\\\"\\n @model.inspections\\n )\\n as |inspection|\\n }}\\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.test-stage-name\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.test-location\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.test\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.columns.percentage\\\"\\n }}
{{inspection.testStageName.name}}{{inspection.testLocation.name}}{{inspection.test.designation}}{{inspection.percentage}}\\n {{#if this.isEditing}}\\n \\n \\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/edit.welds.inspections.table.empty-message\\\"\\n }}
\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\\n{{#if this.isDeletingInspection}}\\n \\n{{/if}}\\n\\n{{#if this.isDeletingWeld}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-book/edit-weld.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/edit-weld.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport { task } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\n\n@classic\nexport default class EditWeld extends Component.extend(ModelSetter) {\n @service('weldnoteData')\n data;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @alias('weldingBook.standard.code')\n currentIndustryCode;\n\n @notEmpty('currentIndustryCode')\n hasStandard;\n\n revisions = null;\n\n @tracked\n currentInspection = null;\n\n @tracked\n currentInspectionToDelete = null;\n\n @notEmpty('currentInspection')\n isEditingInspection;\n\n @tracked\n isDeletingWeld = false;\n\n fetchRevisions = task(\n {\n restartable: true,\n },\n async () => {\n if (isEmpty(get(this, 'model.wps.id'))) {\n set(this, 'revisions', []);\n return [];\n }\n let wps = await this.store.findRecord(\n 'welding-procedure-specification',\n get(this, 'model.wps.id')\n );\n let data = await wps.fetchRevisions();\n set(this, 'revisions', data);\n return data;\n }\n );\n\n @alias('userSession.distanceUnit')\n distanceUnit;\n\n @alias('userSession.temperatureUnit')\n temperatureUnit;\n\n @computed('model.wps.id', 'revisions.[]')\n get currentRevision() {\n let currentRevision = get(this, 'model.wps.revision');\n if (isEmpty(currentRevision)) {\n return null;\n }\n\n let revisions = get(this, 'revisions');\n if (isEmpty(revisions)) {\n return null;\n }\n\n return revisions.findBy('revision', currentRevision);\n }\n\n @computed('model.wps.id', 'revisions.[]')\n get revisionsDisabled() {\n if (isEmpty(get(this, 'model.wps.id'))) {\n return true;\n }\n\n if (isEmpty(get(this, 'revisions'))) {\n return true;\n }\n\n return false;\n }\n\n get isDeletingInspection() {\n return !isEmpty(this.currentInspectionToDelete);\n }\n\n init() {\n super.init(...arguments);\n set(this, 'revisions', []);\n this.fetchRevisions.perform();\n }\n\n @action\n removeWps() {\n set(this.model, 'wps', null);\n }\n\n @action\n afterCreateWps(wps) {\n let { store, alert, model } = this;\n store.findRecord('welding-procedure-specification', wps.id).then((specification) => {\n set(this, 'model.wps', specification);\n this.validateChanges();\n });\n }\n\n @action\n setWps(wps) {\n let weld = this.model;\n set(weld, 'wps', wps);\n set(weld, 'visualData', {});\n let grade1 = get(wps, 'baseMaterial1.grade.grade');\n if ('---' === grade1) {\n grade1 = get(wps, 'baseMaterial1.specification.specification');\n }\n set(weld, 'visualData.baseMaterial1', grade1);\n let grade2 = get(wps, 'baseMaterial2.grade.grade');\n if ('---' === grade2) {\n grade2 = get(wps, 'baseMaterial2.specification.specification');\n }\n set(weld, 'visualData.baseMaterial2', grade2);\n set(weld, 'visualData.wpsBaseMaterial1Thickness', get(wps, 'baseMaterial1thickness'));\n set(weld, 'visualData.wpsBaseMaterial2Thickness', get(wps, 'baseMaterial2thickness'));\n set(weld, 'visualData.wpsNumber', get(wps, 'wpsNumber'));\n set(weld, 'visualData.wpsWeldType', get(wps, 'weldType.weldType'));\n set(weld, 'visualData.wpsRevision', get(wps, 'revision'));\n set(weld, 'visualData.wpsId', get(wps, 'id'));\n set(weld, 'visualData.wpsPwhtMinimum', get(wps, 'postWeldHeatTreatmentTemperatureMinimum'));\n set(weld, 'visualData.wpsPwhtMaximum', get(wps, 'postWeldHeatTreatmentTemperatureMaximum'));\n\n this.fetchRevisions.perform();\n }\n\n @action\n setWpsRevision(revision) {\n if (revision) {\n this.store.findRecord('welding-procedure-specification', revision.id).then((wps) => {\n set(this, 'model.wps', wps);\n });\n }\n }\n\n @action\n setBaseMaterial1Thickness(value) {\n this.setModelDecimalValue('baseMaterial1Thickness', value);\n }\n\n @action\n setBaseMaterial1Diameter(value) {\n this.setModelDecimalValue('baseMaterial1Diameter', value);\n }\n\n @action\n setBaseMaterial2Thickness(value) {\n this.setModelDecimalValue('baseMaterial2Thickness', value);\n }\n\n @action\n setBaseMaterial2Diameter(value) {\n this.setModelDecimalValue('baseMaterial2Diameter', value);\n }\n\n @action\n addInspection() {\n let { model: weld } = this;\n let newInspection = this.store.createRecord('welding-book-weld-inspection', {\n weld,\n });\n this.currentInspection = newInspection;\n }\n\n @action\n saveInspection(inspection) {\n let { loading, alert, intl } = this;\n loading.block();\n let inspectionLabel = get(inspection, 'test.designation');\n if (inspection.validate()) {\n inspection\n .save()\n .then(() => {\n alert.success(\n intl.t('components.model-welding-book/edit.actions.inspection-save-success', {\n inspection: inspectionLabel,\n })\n );\n this.currentInspection = null;\n })\n .catch((e) => {\n alert.error(\n intl.t('components.model-welding-book/edit.actions.inspection-save-fail', {\n inspection: inspectionLabel,\n })\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n cancelEditInspection() {\n if (this.currentInspection.isNew) {\n this.store.unloadRecord(this.currentInspection);\n }\n this.currentInspection = null;\n }\n\n @action\n deleteInspection() {\n let inspection = this.currentInspectionToDelete;\n let { loading, alert, intl } = this;\n if (!isEmpty(inspection)) {\n loading.block();\n let inspectionLabel = get(inspection, 'test.designation');\n inspection\n .destroyRecord()\n .then(() => {\n alert.success(\n intl.t('components.model-welding-book/edit.actions.inspection-delete-success', {\n inspection: inspectionLabel,\n })\n );\n })\n .catch(() => {\n inspection.rollbackAttributes();\n alert.success(\n intl.t('components.model-welding-book/edit.actions.inspection-delete-fail', {\n inspection: inspectionLabel,\n })\n );\n })\n .finally(() => {\n loading.unblock();\n });\n }\n this.currentInspectionToDelete = null;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n {{#unless this.weldingBook.isArchived}}\\n {{#if this.userSession.canCreateWeldingBook}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n {{#unless this.weldingBook.isArchived}}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n
    \\n {{#if (or this.userSession.canVerifyWeldingBook this.userSession.canApproveWeldingBook)}}\\n {{#if (and (not this.isVerified) this.userSession.canVerifyWeldingBook)}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/welding-book-approval.verify-btn\\\"}}\\n
  • \\n {{/if}}\\n {{#if\\n (and (not this.isApproved) this.userSession.canApproveWeldingBook this.isVerified)\\n }}\\n
  • \\n \\n {{t \\\"components.model-welding-book/welding-book-approval.approve-btn\\\"}}\\n
  • \\n {{/if}}\\n {{#if (and (or this.isApproved this.isVerified) this.canRevoke)}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/welding-book-approval.revoke-btn\\\"}}\\n
  • \\n {{/if}}\\n {{/if}}\\n\\n {{#unless this.weldingBook.isNew}}\\n
  • \\n\\n
  • \\n \\n {{t \\\"components.model-welding-book/edit.revisions.manage\\\"}}\\n
  • \\n\\n {{#if this.canCreateWeldingBook}}\\n
  • \\n \\n \\n {{t \\\"generic.actions.duplicate\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n {{/unless}}\\n\\n {{#if (or this.userSession.canArchiveWeldingBook this.userSession.canDeleteWeldingBook)}}\\n
  • \\n\\n {{#if this.userSession.canArchiveWeldingBook}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.archive\\\"}}\\n \\n \\n
  • \\n\\n {{#if this.userSession.canDeleteWeldingBook}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/edit.delete-welding-book-button\\\"}}\\n \\n
  • \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{/unless}}\\n\\n {{#if (and this.userSession.canArchiveWeldingBook this.weldingBook.isArchived)}}\\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.hasFilePath (not this.isGeneratingWeldingBook))}}\\n {{t \\\"components.model-welding-book/edit.download-book-button\\\"}}\\n {{/if}}\\n\\n {{#if (and (not this.weldingBook.isNew) this.userSession.canCreateWeldingBook)}}\\n {{#unless this.isGeneratingWeldingBook}}\\n \\n {{t \\\"components.model-welding-book/edit.generate-book-button\\\"}}\\n {{/unless}}\\n {{/if}}\\n\\n
\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n \\n {{this.pdfReportError.documentName}}\\n ({{this.pdfReportError.type}})\\n \\n {{this.pdfReportError.message}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"components.welding-book-progress.progress\\\" \\\".\\\" task.taskStep.step)}}\\n {{#if (not (is-empty-attribute task.taskStep.value))}}- {{/if}}\\n {{task.taskStep.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n
\\n \\n \\n
\\n
\\n \\n {{t \\\"generic.buttons.close\\\"}}\\n \\n
\\n
\\n \\n
\\n {{/if}}\\n
\\n {{/if}}\\n \\n
\\n\\n {{#if this.weldingBookWpsErrors}}\\n
\\n {{t\\n \\\"components.model-welding-book/edit.error-message.wps-title\\\"\\n }}\\n {{#each this.weldingBookWpsErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-welding-book/edit.error-message.wps-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n
\\n {{/if}}\\n\\n {{#if this.weldingBookPqrErrors}}\\n
\\n {{t\\n \\\"components.model-welding-book/edit.error-message.pqr-title\\\"\\n }}\\n {{#each this.weldingBookPqrErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-welding-book/edit.error-message.pqr-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n
\\n {{/if}}\\n\\n {{#if this.isApproved}}\\n
\\n \\n {{t\\n \\\"components.model-welding-book/edit.messages.book-approved-cannot-edit\\\"\\n staff=this.weldingBook.approvedBy.name\\n }}\\n \\n
\\n {{else if this.isVerified}}\\n
\\n \\n {{t\\n \\\"components.model-welding-book/edit.messages.book-verified-cannot-edit\\\"\\n staff=this.weldingBook.verifiedBy.name\\n }}\\n \\n
\\n {{/if}}\\n\\n {{#if this.weldingBook.isArchived}}\\n
\\n \\n {{t \\\"components.model-welding-book/edit.archive.messages.book-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n{{#if this.showNewRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showUpdateRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-book/edit.archive.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.archive\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-book/edit.archive.messages.unarchive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.unarchive\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmVerify}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-book/welding-book-approval.verify-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/welding-book-approval.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-book/welding-book-approval.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmApprove}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-book/welding-book-approval.approve-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/welding-book-approval.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-book/welding-book-approval.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevoke}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-book/welding-book-approval.revoke-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/welding-book-approval.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-book/welding-book-approval.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n
\\n
    \\n
  • {{t \\\"components.model-welding-book/edit.tabs.details\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.weld-list\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.wps\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.pqr\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.pqr-extra\\\"}}
  • \\n {{!--
  • {{t 'components.model-welding-book/edit.tabs.welder'}}
  • --}}\\n
  • {{t \\\"components.model-welding-book/edit.tabs.drawings\\\"}}
  • \\n {{#unless this.model.isNew}}\\n
  • {{t \\\"components.model-welding-book/edit.tabs.revision\\\"}}
  • \\n {{/unless}}\\n
  • {{t \\\"components.model-welding-book/edit.tabs.export-options\\\"}}
  • \\n\\n
\\n
\\n
\\n {{#if this.showDetailsTab}}\\n \\n \\n \\n \\n {{#if\\n (and\\n (not this.weldingBook.isNew)\\n this.isEditing\\n this.userSession.canCreateWeldingBook\\n )\\n }}\\n \\n {{t \\\"components.model-welding-book/edit.update-designation-btn\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{project.projectName}}\\n -\\n {{project.designation}}\\n \\n \\n \\n \\n {{component.componentNumber}}\\n -\\n {{component.componentName}}\\n \\n \\n \\n \\n \\n
\\n \\n

\\n {{#if (has-value this.weldingBook.weldingProject.projectClient.id)}}\\n {{this.weldingBook.weldingProject.projectClient.name}}\\n {{/if}}\\n

\\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.abbreviation}}\\n -\\n {{option.designation}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showWeldListTab}}\\n {{#if this.shouldShowWeldEdit}}\\n
\\n \\n
\\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadWelds.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each (sort-by \\\"weldNumber\\\" this.welds) as |weld|}}\\n \\n \\n {{else}}\\n {{weld.weldNumber}}\\n {{/if}}\\n \\n \\n \\n \\n \\n {{#let\\n (sort-by\\n \\\"testStageName.displayOrder\\\"\\n \\\"testLocation.name\\\"\\n \\\"test.designation\\\"\\n \\\"id\\\"\\n weld.inspections\\n )\\n as |sortedWeldInspections|\\n }}\\n \\n {{/let}}\\n \\n \\n {{else}}\\n \\n {{/each}}\\n {{/if}}\\n \\n
\\n {{t \\\"components.model-welding-book/edit.welds.columns.weld-number\\\"}}\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.base-materials\\\"}}\\n \\n {{t\\n \\\"components.model-welding-book/edit.welds.columns.dimensions\\\"\\n unit=this.distanceUnit\\n }}\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.weld-type\\\"}}\\n \\n {{t\\n \\\"components.model-welding-book/edit.welds.columns.post-weld-heat-treatment\\\"\\n unit=this.temperatureUnit\\n }}\\n {{t \\\"components.model-welding-book/edit.welds.columns.ndt\\\"}}\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.wps\\\"}}\\n
\\n \\n
\\n {{#if this.isEditing}}\\n \\n \\n \\n {{weld.weldNumber}}\\n \\n \\n {{weld.visualData.baseMaterial1}}\\n {{#if (not (is-empty-attribute weld.visualData.baseMaterial2))}} + {{/if}}\\n {{weld.visualData.baseMaterial2}}\\n \\n \\n {{weld.visualData.wpsWeldType}}\\n \\n \\n {{#each sortedWeldInspections as |inspection index|}}\\n
\\n {{#if\\n (or inspection.testStageName.name inspection.testLocation.name)\\n }}\\n \\n
{{inspection.testStageName.name}}
\\n
{{inspection.testLocation.name}}
\\n
\\n {{/if}}\\n
\\n {{inspection.test.shortDesignation}}\\n
\\n •\\n
\\n {{inspection.percentage}}%\\n
\\n \\n {{/each}}\\n
\\n {{#if (has-value weld.visualData.wpsId)}}\\n \\n {{weld.visualData.wpsNumber}}\\n ({{weld.visualData.wpsRevision}})\\n \\n {{/if}}\\n\\n {{#if (and (has-value weld.visualData.wpsId) weld.hasAssociatedPqr)}}\\n
\\n
\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.pqr\\\"}}:\\n \\n \\n {{#if weld.hasRootPqr}}\\n {{weld.visualData.pqrRootNumber}}\\n {{/if}}\\n {{#if weld.hasUniqueFillPqr}}\\n
{{weld.visualData.pqrFillNumber}}\\n {{/if}}\\n {{#if weld.hasUniqueCapPqr}}\\n
{{weld.visualData.pqrCapNumber}}\\n {{/if}}\\n {{#if (not (is-empty-attribute weld.visualData.pqrPcId))}}\\n {{weld.visualData.pqrPcNumber}}\\n +\\n {{weld.visualData.pqrPfNumber}}\\n (PC+PF)\\n {{/if}}\\n
\\n
\\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/edit.empty-welds\\\"\\n }}
\\n
\\n \\n
\\n {{#if this.isEditing}}\\n {{#unless this.shouldShowWeldEdit}}\\n
\\n \\n \\n {{t \\\"components.model-welding-book/edit.welds.add-weld\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-book/edit.actions.copy-to-project\\\"}}\\n \\n \\n
\\n {{/unless}}\\n {{/if}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showWpsTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadWelds.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.weldsWithWps as |weld|}}\\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}{{t\\n \\\"components.wps-chooser.thickness-column-title\\\"\\n unit=this.distanceUnit\\n }}
\\n \\n
{{weld.wps.wpsNumber}}{{weld.wps.standard.standard}}{{weld.wps.weldingProcessRoot.visualLabel}}\\n -\\n {{weld.wps.weldingProcessFill.visualLabel}}{{weld.wps.baseMaterial1.specification.specification}}\\n -\\n {{weld.wps.baseMaterial2.specification.specification}}{{weld.wps.thicknessMinimum}} - {{weld.wps.thicknessMaximum}}
{{t\\n \\\"components.model-welding-book/edit.empty-welds-wps-list\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model.wps as |wps|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n {{/each}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}{{t\\n \\\"components.wps-chooser.thickness-column-title\\\"\\n unit=this.distanceUnit\\n }}
{{wps.wpsNumber}}{{wps.standard.standard}}{{wps.weldingProcessRoot.visualLabel}}\\n -\\n {{wps.weldingProcessFill.visualLabel}}{{wps.baseMaterial1.specification.specification}}\\n -\\n {{wps.baseMaterial2.specification.specification}}{{wps.thicknessMinimum}} - {{wps.thicknessMaximum}}\\n {{#if this.isEditing}}\\n \\n {{t \\\"components.model-welding-book/edit.remove-element-list\\\"}}\\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/edit.empty-wps-list\\\"\\n }}
\\n
\\n \\n {{t \\\"components.model-welding-book/edit.wps.add-title\\\"}}\\n
\\n \\n {{/if}}\\n {{#if this.showPqrTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadPqrForWelds.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.loadPqrForWelds.lastSuccessful.value.list as |pqr|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}
\\n \\n
{{pqr.certificateNumber}}{{pqr.standard}}{{pqr.weldingProcesses}}{{pqr.baseMaterials}}
{{t \\\"components.model-welding-book/edit.empty-pqr-list\\\"}}
\\n \\n {{/if}}\\n {{#if this.showPqrExtraTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadPqrForExtraWps.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.loadPqrForExtraWps.lastSuccessful.value.list as |pqr|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}
\\n \\n
{{pqr.certificateNumber}}{{pqr.standard}}{{pqr.weldingProcesses}}{{pqr.baseMaterials}}
{{t \\\"components.model-welding-book/edit.empty-pqr-list\\\"}}
\\n \\n {{/if}}\\n {{#if this.showDrawingsTab}}\\n \\n {{#if this.hasDrawings}}\\n \\n {{else}}\\n
\\n

{{t \\\"components.model-welding-book/edit.drawings.no-drawings\\\"}}

\\n
\\n {{/if}}\\n {{#if this.isEditing}}\\n {{#if this.isAddingDrawing}}\\n \\n {{else}}\\n
\\n {{t \\\"components.model-welding-book/edit.drawings.add-drawing-btn\\\"}}\\n

\\n {{t \\\"components.model-welding-book/list.messages.disclaimer\\\"}}\\n \\n {{t \\\"components.model-welding-book/list.messages.disclaimer-link\\\"}}\\n \\n

\\n
\\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n {{#if this.showRevisionTab}}\\n \\n

{{this.weldingBook.designation}}\\n -\\n {{this.weldingBook.revision}}

\\n {{#if\\n (and\\n (not this.weldingBook.isNew)\\n this.userSession.canCreateWeldingBookRevision\\n (not this.isGeneratingWeldingBook)\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-book/edit.revisions.new-revision-btn-title\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisions as |revision index|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.model-welding-book/edit.revisions.table.revision-column\\\"}}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-date-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-written-by-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-verified-by-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-approved-by-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-active-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-delete-column\\\"\\n }}
\\n {{#if (id-equal revision.id this.weldingBook.id)}}\\n {{revision.revision}}\\n -\\n {{t \\\"components.model-welding-book/edit.revisions.table.current-one\\\"}}\\n {{else}}\\n \\n {{revision.revision}}\\n {{/if}}\\n {{format-date\\n date=revision.revisionDate\\n format=this.userSession.dateFormat\\n time=true\\n }}{{revision.writtenBy}}{{revision.verifiedBy}}{{revision.approvedBy}}\\n {{#if revision.active}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if (lte this.revisions.length 1)}}\\n \\n {{else if (not revision.active)}}\\n \\n {{else if (or revision.verifiedBy revision.approvedBy)}}\\n \\n {{/if}}\\n \\n
\\n \\n\\n {{#if this.isShowingDeleteRevisionModal}}\\n \\n

{{t \\\"components.model-welding-book/edit.revisions.delete-warning\\\"}}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.delete-warning\\\"\\n }}

\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showOptionsTab}}\\n \\n \\n \\n \\n \\n \\n
\\n {{t \\\"components.model-welding-book/edit.options.labels.type-of-inclusion\\\"}}\\n
\\n \\n \\n
\\n {{t\\n \\\"components.model-welding-book/edit.options.messages.help\\\"\\n }}\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n
\\n\\n{{#if this.isShowingSelectWpsModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmDuplicate}}\\n \\n \\n \\n \\n
\\n {{t\\n \\\"components.model-welding-book/edit.duplicate.message\\\"\\n }}\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"generic.actions.duplicate\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showCopyWeldsToProjectModal}}\\n \\n{{/if}}\", {\"contents\":\"\\n\\n \\n\\n \\n\\n {{#unless this.weldingBook.isArchived}}\\n {{#if this.userSession.canCreateWeldingBook}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n {{/unless}}\\n\\n {{#unless this.weldingBook.isArchived}}\\n \\n \\n {{t \\\"generic.buttons.actions\\\"}}\\n \\n \\n
    \\n {{#if (or this.userSession.canVerifyWeldingBook this.userSession.canApproveWeldingBook)}}\\n {{#if (and (not this.isVerified) this.userSession.canVerifyWeldingBook)}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/welding-book-approval.verify-btn\\\"}}\\n
  • \\n {{/if}}\\n {{#if\\n (and (not this.isApproved) this.userSession.canApproveWeldingBook this.isVerified)\\n }}\\n
  • \\n \\n {{t \\\"components.model-welding-book/welding-book-approval.approve-btn\\\"}}\\n
  • \\n {{/if}}\\n {{#if (and (or this.isApproved this.isVerified) this.canRevoke)}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/welding-book-approval.revoke-btn\\\"}}\\n
  • \\n {{/if}}\\n {{/if}}\\n\\n {{#unless this.weldingBook.isNew}}\\n
  • \\n\\n
  • \\n \\n {{t \\\"components.model-welding-book/edit.revisions.manage\\\"}}\\n
  • \\n\\n {{#if this.canCreateWeldingBook}}\\n
  • \\n \\n \\n {{t \\\"generic.actions.duplicate\\\"}}\\n \\n \\n
  • \\n {{/if}}\\n {{/unless}}\\n\\n {{#if (or this.userSession.canArchiveWeldingBook this.userSession.canDeleteWeldingBook)}}\\n
  • \\n\\n {{#if this.userSession.canArchiveWeldingBook}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.archive\\\"}}\\n \\n \\n
  • \\n\\n {{#if this.userSession.canDeleteWeldingBook}}\\n
  • \\n \\n {{t \\\"components.model-welding-book/edit.delete-welding-book-button\\\"}}\\n \\n
  • \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n {{/unless}}\\n\\n {{#if (and this.userSession.canArchiveWeldingBook this.weldingBook.isArchived)}}\\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.hasFilePath (not this.isGeneratingWeldingBook))}}\\n {{t \\\"components.model-welding-book/edit.download-book-button\\\"}}\\n {{/if}}\\n\\n {{#if (and (not this.weldingBook.isNew) this.userSession.canCreateWeldingBook)}}\\n {{#unless this.isGeneratingWeldingBook}}\\n \\n {{t \\\"components.model-welding-book/edit.generate-book-button\\\"}}\\n {{/unless}}\\n {{/if}}\\n\\n
\\n \\n {{#if (or task.isError task.isRunning task.isFinished)}}\\n
\\n {{#if task.isError}}\\n
\\n \\n \\n {{this.pdfReportError.documentName}}\\n ({{this.pdfReportError.type}})\\n \\n {{this.pdfReportError.message}}\\n \\n
\\n {{/if}}\\n {{#if task.isRunning}}\\n

\\n {{task.currentTask.progress}}%\\n {{t (concat \\\"components.welding-book-progress.progress\\\" \\\".\\\" task.taskStep.step)}}\\n {{#if (not (is-empty-attribute task.taskStep.value))}}- {{/if}}\\n {{task.taskStep.value}}\\n

\\n \\n {{/if}}\\n {{#if task.isFinished}}\\n
\\n \\n \\n
\\n
\\n \\n {{t \\\"generic.buttons.close\\\"}}\\n \\n
\\n
\\n \\n
\\n {{/if}}\\n
\\n {{/if}}\\n \\n
\\n\\n {{#if this.weldingBookWpsErrors}}\\n
\\n {{t\\n \\\"components.model-welding-book/edit.error-message.wps-title\\\"\\n }}\\n {{#each this.weldingBookWpsErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-welding-book/edit.error-message.wps-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n
\\n {{/if}}\\n\\n {{#if this.weldingBookPqrErrors}}\\n
\\n {{t\\n \\\"components.model-welding-book/edit.error-message.pqr-title\\\"\\n }}\\n {{#each this.weldingBookPqrErrors as |error|}}\\n
    \\n
  • \\n \\n {{t\\n \\\"components.model-welding-book/edit.error-message.pqr-missing-pdf\\\"\\n number=error.certificate\\n }}\\n ->\\n {{error.certificate}}\\n
  • \\n
\\n {{/each}}\\n
\\n {{/if}}\\n\\n {{#if this.isApproved}}\\n
\\n \\n {{t\\n \\\"components.model-welding-book/edit.messages.book-approved-cannot-edit\\\"\\n staff=this.weldingBook.approvedBy.name\\n }}\\n \\n
\\n {{else if this.isVerified}}\\n
\\n \\n {{t\\n \\\"components.model-welding-book/edit.messages.book-verified-cannot-edit\\\"\\n staff=this.weldingBook.verifiedBy.name\\n }}\\n \\n
\\n {{/if}}\\n\\n {{#if this.weldingBook.isArchived}}\\n
\\n \\n {{t \\\"components.model-welding-book/edit.archive.messages.book-is-archived\\\"}}\\n \\n
\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n{{#if this.showNewRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showUpdateRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-book/edit.archive.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.archive\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-book/edit.archive.messages.unarchive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-welding-book/edit.archive.buttons.unarchive\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmVerify}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-book/welding-book-approval.verify-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/welding-book-approval.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-book/welding-book-approval.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmApprove}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-book/welding-book-approval.approve-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/welding-book-approval.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-book/welding-book-approval.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevoke}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-book/welding-book-approval.revoke-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/welding-book-approval.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-book/welding-book-approval.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n
\\n
    \\n
  • {{t \\\"components.model-welding-book/edit.tabs.details\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.weld-list\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.wps\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.pqr\\\"}}
  • \\n
  • {{t \\\"components.model-welding-book/edit.tabs.pqr-extra\\\"}}
  • \\n {{!--
  • {{t 'components.model-welding-book/edit.tabs.welder'}}
  • --}}\\n
  • {{t \\\"components.model-welding-book/edit.tabs.drawings\\\"}}
  • \\n {{#unless this.model.isNew}}\\n
  • {{t \\\"components.model-welding-book/edit.tabs.revision\\\"}}
  • \\n {{/unless}}\\n
  • {{t \\\"components.model-welding-book/edit.tabs.export-options\\\"}}
  • \\n\\n
\\n
\\n
\\n {{#if this.showDetailsTab}}\\n \\n \\n \\n \\n {{#if\\n (and\\n (not this.weldingBook.isNew)\\n this.isEditing\\n this.userSession.canCreateWeldingBook\\n )\\n }}\\n \\n {{t \\\"components.model-welding-book/edit.update-designation-btn\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{project.projectName}}\\n -\\n {{project.designation}}\\n \\n \\n \\n \\n {{component.componentNumber}}\\n -\\n {{component.componentName}}\\n \\n \\n \\n \\n \\n
\\n \\n

\\n {{#if (has-value this.weldingBook.weldingProject.projectClient.id)}}\\n {{this.weldingBook.weldingProject.projectClient.name}}\\n {{/if}}\\n

\\n
\\n
\\n \\n \\n \\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.abbreviation}}\\n -\\n {{option.designation}}\\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showWeldListTab}}\\n {{#if this.shouldShowWeldEdit}}\\n
\\n \\n
\\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadWelds.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each (sort-by \\\"weldNumber\\\" this.welds) as |weld|}}\\n \\n \\n {{else}}\\n {{weld.weldNumber}}\\n {{/if}}\\n \\n \\n \\n \\n \\n {{#let\\n (sort-by\\n \\\"testStageName.displayOrder\\\"\\n \\\"testLocation.name\\\"\\n \\\"test.designation\\\"\\n \\\"id\\\"\\n weld.inspections\\n )\\n as |sortedWeldInspections|\\n }}\\n \\n {{/let}}\\n \\n \\n {{else}}\\n \\n {{/each}}\\n {{/if}}\\n \\n
\\n {{t \\\"components.model-welding-book/edit.welds.columns.weld-number\\\"}}\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.base-materials\\\"}}\\n \\n {{t\\n \\\"components.model-welding-book/edit.welds.columns.dimensions\\\"\\n unit=this.distanceUnit\\n }}\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.weld-type\\\"}}\\n \\n {{t\\n \\\"components.model-welding-book/edit.welds.columns.post-weld-heat-treatment\\\"\\n unit=this.temperatureUnit\\n }}\\n {{t \\\"components.model-welding-book/edit.welds.columns.ndt\\\"}}\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.wps\\\"}}\\n
\\n \\n
\\n {{#if this.isEditing}}\\n \\n \\n \\n {{weld.weldNumber}}\\n \\n \\n {{weld.visualData.baseMaterial1}}\\n {{#if (not (is-empty-attribute weld.visualData.baseMaterial2))}} + {{/if}}\\n {{weld.visualData.baseMaterial2}}\\n \\n \\n {{weld.visualData.wpsWeldType}}\\n \\n \\n {{#each sortedWeldInspections as |inspection index|}}\\n
\\n {{#if\\n (or inspection.testStageName.name inspection.testLocation.name)\\n }}\\n \\n
{{inspection.testStageName.name}}
\\n
{{inspection.testLocation.name}}
\\n
\\n {{/if}}\\n
\\n {{inspection.test.shortDesignation}}\\n
\\n •\\n
\\n {{inspection.percentage}}%\\n
\\n \\n {{/each}}\\n
\\n {{#if (has-value weld.visualData.wpsId)}}\\n \\n {{weld.visualData.wpsNumber}}\\n ({{weld.visualData.wpsRevision}})\\n \\n {{/if}}\\n\\n {{#if (and (has-value weld.visualData.wpsId) weld.hasAssociatedPqr)}}\\n
\\n
\\n \\n {{t \\\"components.model-welding-book/edit.welds.columns.pqr\\\"}}:\\n \\n \\n {{#if weld.hasRootPqr}}\\n {{weld.visualData.pqrRootNumber}}\\n {{/if}}\\n {{#if weld.hasUniqueFillPqr}}\\n
{{weld.visualData.pqrFillNumber}}\\n {{/if}}\\n {{#if weld.hasUniqueCapPqr}}\\n
{{weld.visualData.pqrCapNumber}}\\n {{/if}}\\n {{#if (not (is-empty-attribute weld.visualData.pqrPcId))}}\\n {{weld.visualData.pqrPcNumber}}\\n +\\n {{weld.visualData.pqrPfNumber}}\\n (PC+PF)\\n {{/if}}\\n
\\n
\\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/edit.empty-welds\\\"\\n }}
\\n
\\n \\n
\\n {{#if this.isEditing}}\\n {{#unless this.shouldShowWeldEdit}}\\n
\\n \\n \\n {{t \\\"components.model-welding-book/edit.welds.add-weld\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-book/edit.actions.copy-to-project\\\"}}\\n \\n \\n
\\n {{/unless}}\\n {{/if}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showWpsTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadWelds.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.weldsWithWps as |weld|}}\\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}{{t\\n \\\"components.wps-chooser.thickness-column-title\\\"\\n unit=this.distanceUnit\\n }}
\\n \\n
{{weld.wps.wpsNumber}}{{weld.wps.standard.standard}}{{weld.wps.weldingProcessRoot.visualLabel}}\\n -\\n {{weld.wps.weldingProcessFill.visualLabel}}{{weld.wps.baseMaterial1.specification.specification}}\\n -\\n {{weld.wps.baseMaterial2.specification.specification}}{{weld.wps.thicknessMinimum}} - {{weld.wps.thicknessMaximum}}
{{t\\n \\\"components.model-welding-book/edit.empty-welds-wps-list\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model.wps as |wps|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n {{/each}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}{{t\\n \\\"components.wps-chooser.thickness-column-title\\\"\\n unit=this.distanceUnit\\n }}
{{wps.wpsNumber}}{{wps.standard.standard}}{{wps.weldingProcessRoot.visualLabel}}\\n -\\n {{wps.weldingProcessFill.visualLabel}}{{wps.baseMaterial1.specification.specification}}\\n -\\n {{wps.baseMaterial2.specification.specification}}{{wps.thicknessMinimum}} - {{wps.thicknessMaximum}}\\n {{#if this.isEditing}}\\n \\n {{t \\\"components.model-welding-book/edit.remove-element-list\\\"}}\\n {{/if}}\\n
{{t\\n \\\"components.model-welding-book/edit.empty-wps-list\\\"\\n }}
\\n
\\n \\n {{t \\\"components.model-welding-book/edit.wps.add-title\\\"}}\\n
\\n \\n {{/if}}\\n {{#if this.showPqrTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadPqrForWelds.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.loadPqrForWelds.lastSuccessful.value.list as |pqr|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}
\\n \\n
{{pqr.certificateNumber}}{{pqr.standard}}{{pqr.weldingProcesses}}{{pqr.baseMaterials}}
{{t \\\"components.model-welding-book/edit.empty-pqr-list\\\"}}
\\n \\n {{/if}}\\n {{#if this.showPqrExtraTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadPqrForExtraWps.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each this.loadPqrForExtraWps.lastSuccessful.value.list as |pqr|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t \\\"components.wps-chooser.wps-number-column-title\\\"}}{{t \\\"components.wps-chooser.standard-column-title\\\"}}{{t \\\"components.wps-chooser.process-column-title\\\"}}{{t\\n \\\"components.wps-chooser.base-material-column-title\\\"\\n }}
\\n \\n
{{pqr.certificateNumber}}{{pqr.standard}}{{pqr.weldingProcesses}}{{pqr.baseMaterials}}
{{t \\\"components.model-welding-book/edit.empty-pqr-list\\\"}}
\\n \\n {{/if}}\\n {{#if this.showDrawingsTab}}\\n \\n {{#if this.hasDrawings}}\\n \\n {{else}}\\n
\\n

{{t \\\"components.model-welding-book/edit.drawings.no-drawings\\\"}}

\\n
\\n {{/if}}\\n {{#if this.isEditing}}\\n {{#if this.isAddingDrawing}}\\n \\n {{else}}\\n
\\n {{t \\\"components.model-welding-book/edit.drawings.add-drawing-btn\\\"}}\\n

\\n {{t \\\"components.model-welding-book/list.messages.disclaimer\\\"}}\\n \\n {{t \\\"components.model-welding-book/list.messages.disclaimer-link\\\"}}\\n \\n

\\n
\\n {{/if}}\\n {{/if}}\\n \\n {{/if}}\\n {{#if this.showRevisionTab}}\\n \\n

{{this.weldingBook.designation}}\\n -\\n {{this.weldingBook.revision}}

\\n {{#if\\n (and\\n (not this.weldingBook.isNew)\\n this.userSession.canCreateWeldingBookRevision\\n (not this.isGeneratingWeldingBook)\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-book/edit.revisions.new-revision-btn-title\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisions as |revision index|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.model-welding-book/edit.revisions.table.revision-column\\\"}}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-date-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-written-by-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-verified-by-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-approved-by-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-active-column\\\"\\n }}{{t\\n \\\"components.model-welding-book/edit.revisions.table.revision-delete-column\\\"\\n }}
\\n {{#if (id-equal revision.id this.weldingBook.id)}}\\n {{revision.revision}}\\n -\\n {{t \\\"components.model-welding-book/edit.revisions.table.current-one\\\"}}\\n {{else}}\\n \\n {{revision.revision}}\\n {{/if}}\\n {{format-date\\n date=revision.revisionDate\\n format=this.userSession.dateFormat\\n time=true\\n }}{{revision.writtenBy}}{{revision.verifiedBy}}{{revision.approvedBy}}\\n {{#if revision.active}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if (lte this.revisions.length 1)}}\\n \\n {{else if (not revision.active)}}\\n \\n {{else if (or revision.verifiedBy revision.approvedBy)}}\\n \\n {{/if}}\\n \\n
\\n \\n\\n {{#if this.isShowingDeleteRevisionModal}}\\n \\n

{{t \\\"components.model-welding-book/edit.revisions.delete-warning\\\"}}

\\n

{{t\\n \\\"components.model-welding-book/confirm-delete.messages.delete-warning\\\"\\n }}

\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showOptionsTab}}\\n \\n \\n \\n \\n \\n \\n
\\n {{t \\\"components.model-welding-book/edit.options.labels.type-of-inclusion\\\"}}\\n
\\n \\n \\n
\\n {{t\\n \\\"components.model-welding-book/edit.options.messages.help\\\"\\n }}\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n
\\n\\n{{#if this.isShowingSelectWpsModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmDuplicate}}\\n \\n \\n \\n \\n
\\n {{t\\n \\\"components.model-welding-book/edit.duplicate.message\\\"\\n }}\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n {{t \\\"generic.actions.duplicate\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showCopyWeldsToProjectModal}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-book/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, equal, notEmpty, mapBy, max, empty } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/welding-book-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport {\n isDuplicateError,\n isError,\n getErrorCode,\n isPermissionDenied,\n isForeignKeyError,\n} from 'weldnote/utils/json-api-errors';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\nimport ProjectAttributes from 'weldnote/pods/project/attributes';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELDING_BOOK } = Rules;\nconst { PROJECT } = ProjectAttributes;\n\nconst { ERROR_CODES, WPS_INCLUSION } = Constants;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n taskMonitor;\n\n @service\n store;\n\n @service\n loading;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n intl;\n\n @service('instance-tracker')\n tracker;\n\n @service\n scroller;\n\n @service\n router;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.welderStandardOptions')\n welderStandardOptions;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('data.weldingBookStatusOptions')\n statusOptions;\n\n @equal('section', 'details')\n showDetailsTab;\n\n @equal('section', 'wps')\n showWpsTab;\n\n @equal('section', 'pqr')\n showPqrTab;\n\n @equal('section', 'welder')\n showWelderTab;\n\n @equal('section', 'revision')\n showRevisionTab;\n\n @equal('section', 'drawings')\n showDrawingsTab;\n\n @equal('section', 'weldList')\n showWeldListTab;\n\n @equal('section', 'options')\n showOptionsTab;\n\n @equal('section', 'pqrExtra')\n showPqrExtraTab;\n\n @computed('userSession.canCreateWeldingBook', 'weldingBook.{isArchived,isVerified,isApproved}')\n get isEditing() {\n let { userSession, weldingBook } = this;\n if (!userSession.canCreateWeldingBook) {\n return false;\n }\n if (weldingBook.isArchived) {\n return false;\n }\n if (weldingBook.isVerified || weldingBook.isApproved) {\n return false;\n }\n return true;\n }\n\n @computed('weldingBook.weldingProject.id', 'isEditing')\n get canEditWeldingBookProject() {\n return (\n this.isEditing &&\n (isEmpty(get(this, 'weldingBook.weldingProject.id')) ||\n get(this, 'weldingBook.hasDirtyAttributes'))\n );\n }\n\n get welds() {\n return this.loadWelds?.lastSuccessful?.value;\n }\n\n get maxWeldOrderNumber() {\n return Math.max(...this.welds.map((w) => w.orderNum), this.weldsTotalCount);\n }\n\n @equal('weldingBook.typeOfWpsInclusion', WPS_INCLUSION.INCLUDE_UPLOADED)\n includeChecked;\n\n @equal('weldingBook.typeOfWpsInclusion', WPS_INCLUSION.GENERATE_PDF)\n generateChecked;\n\n @notEmpty('weldingBook.verifiedBy.id')\n isVerified;\n\n @notEmpty('weldingBook.approvedBy.id')\n isApproved;\n\n @alias('userSession.canApproveWeldingBook')\n canRevoke;\n\n weldingBookWpsErrors = [];\n\n weldingBookPqrErrors = [];\n\n @notEmpty('weldingBook.componentDrawings')\n hasDrawings;\n\n @alias('model')\n weldingBook;\n\n @notEmpty('weldingBook.weldingBookDocumentPath')\n hasFilePath;\n\n @empty('weldingBook.weldingProject.id')\n isComponentDisabled;\n\n componentOptions = null;\n\n hasErrorDetailsTab = false;\n\n showNewRevision = false;\n\n @tracked\n revisionsCache = [];\n\n // Hold the values for the verified/approved by date\n verifiedByDate = null;\n\n approvedByDate = null;\n\n currentlyDeletingWeld = null;\n\n @tracked\n currentlyEditingWeld = null;\n\n // Query Parameter with the weld identifier to edit\n @tracked\n weldIdToEdit = null;\n\n get distanceUnit() {\n return this.weldingBook.distanceUnit;\n }\n\n get temperatureUnit() {\n return this.weldingBook.temperatureUnit;\n }\n\n @tracked\n showConfirmVerify;\n\n @tracked\n showConfirmApprove;\n\n @tracked\n showConfirmRevoke;\n\n @tracked\n isShowingDeleteRevisionModal = false;\n\n revisionIdToDelete = null;\n\n @tracked\n isShowingSelectWpsModal = false;\n\n @tracked\n weldsCurrentPage = 1;\n\n @tracked\n weldsTotalCount = 0;\n\n weldsPageSize = 20;\n\n showConfirmDuplicate = false;\n\n @tracked\n newDesignation = '';\n\n @tracked\n newDesignationErrors = null;\n\n @tracked\n selectedProject = null;\n\n @tracked\n newProjectErrors = null;\n\n selectedComponent = null;\n\n @tracked\n newWrittenByDate = null;\n\n @tracked\n newWrittenByDateErrors = null;\n\n @tracked\n isAddingDrawing = false;\n\n @tracked\n showCopyWeldsToProjectModal = false;\n\n get weldsWithWps() {\n let { welds } = this;\n let existingWps = [];\n let wpsList = welds?.filter((item) => {\n let wpsId = get(item, 'wps.id');\n if (!isEmpty(wpsId)) {\n if (!existingWps.includes(wpsId)) {\n existingWps.push(wpsId);\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n });\n return wpsList;\n }\n\n @computed('userSession.account')\n get staffOptions() {\n let { userSession } = this;\n if (userSession.canAssignStaffWPS) {\n return this.data.staffOptions;\n }\n\n let hasStaff = get(userSession, 'account.staff.id');\n if (hasStaff) {\n return [get(this, 'userSession.account.staff')];\n }\n return [];\n }\n\n get shouldShowWeldEdit() {\n return (\n !isEmpty(this.currentlyEditingWeld) &&\n (!isEmpty(this.weldIdToEdit) || this.currentlyEditingWeld.isNew)\n );\n }\n\n fetchRevisionsTask = task(\n {\n drop: true,\n },\n async () => {\n if (!this.weldingBook.isNew) {\n let revisions = await this.weldingBook.fetchRevisions();\n\n let processedRevisions = revisions.map(function (revision) {\n revision.canBeDeleted =\n revision.active &&\n isEmpty(revision.verifiedBy) &&\n isEmpty(revision.approvedBy) &&\n revisions.length > 1;\n return revision;\n });\n\n this.revisionsCache = processedRevisions;\n }\n }\n );\n\n @alias('revisionsCache')\n revisions;\n\n @alias('weldingBook.isNew')\n canEditRevision;\n\n @computed('userSession.account.staff.id', 'weldingBook.verifiedBy.id', 'isEditing')\n get canChangeApprovedByDate() {\n let myStaff = get(this, 'userSession.account.staff.id');\n let verifiedBy = get(this, 'weldingBook.verifiedBy.id');\n\n if (isEmpty(myStaff) || isEmpty(verifiedBy)) {\n return false;\n }\n\n if (myStaff === verifiedBy) {\n if (get(this, 'isEditing')) {\n return true;\n }\n }\n\n return false;\n }\n\n @computed('weldingBook.{approvedBy,verifiedBy}')\n get isApprovedOrVerified() {\n let { weldingBook } = this;\n let approvedById = get(weldingBook, 'approvedBy.id');\n let verifiedById = get(weldingBook, 'verifiedBy.id');\n return !isEmpty(approvedById) || !isEmpty(verifiedById);\n }\n\n @computed('userSession.account.staff.id', 'weldingBook.approvedBy.id', 'isEditing')\n get canChangeVerifiedByDate() {\n let myStaff = get(this, 'userSession.account.staff.id');\n let approvedBy = get(this, 'weldingBook.approvedBy.id');\n\n if (isEmpty(myStaff) || isEmpty(approvedBy)) {\n return false;\n }\n\n if (myStaff === approvedBy) {\n if (get(this, 'isEditing')) {\n return true;\n }\n }\n\n return false;\n }\n\n @computed('userSession.canCreateWeldingBook', 'weldingBook.{isApproved,isVerified}')\n get canEditWeldingBook() {\n let { userSession, weldingBook } = this;\n if (!userSession.canCreateWeldingBook) {\n return false;\n }\n\n if (weldingBook.isVerified || weldingBook.isApproved) {\n return false;\n }\n\n return true;\n }\n\n @computed('taskMonitor.currentTasks.[]', 'weldingBook.id')\n get weldingBookProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'welding-book') {\n if (item.contextId === this.weldingBook.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n get pdfReportError() {\n let { weldingBookProgressTask, intl } = this;\n if (isEmpty(weldingBookProgressTask)) {\n return {};\n }\n let { result } = weldingBookProgressTask;\n let route = '';\n let type = '';\n let message = '';\n let documentType = '';\n if (result?.documentType) {\n switch (result.documentType) {\n case 'pqr':\n route = 'pqr';\n documentType = 'pqr';\n type = intl.t('generic.document-types.pqr');\n break;\n case 'wps':\n route = 'welding-procedure-specification';\n documentType = 'wps';\n type = intl.t('generic.document-types.wps');\n break;\n case 'welding_book_drawing':\n route = 'component-drawing';\n documentType = 'drawing';\n type = intl.t('generic.document-types.drawing');\n break;\n default:\n break;\n }\n if (result.errorType === 'password-protected') {\n message = intl.t('generic.error.pdf-processing.password-protected');\n } else if (result.errorType === 'pdf-forms') {\n message = intl.t('generic.error.pdf-processing.pdf-forms');\n } else if (result.errorType === 'unknown-error') {\n message = intl.t('generic.error.pdf-processing.unknown-error');\n } else if (result.errorType === 'out-of-memory') {\n message = intl.t('generic.error.pdf-processing.out-of-memory');\n }\n\n return {\n id: result.internalId,\n route,\n type,\n documentName: result.documentId,\n documentType,\n message,\n };\n }\n return '';\n }\n\n get canCreateWeldingBook() {\n return this.userSession.canCreateWeldingBook;\n }\n\n isValidPropertyList(propertiesToCheck) {\n let { weldingBook } = this;\n let result = propertiesToCheck.find((property) => {\n if (!isEmpty(weldingBook.get(`errors.${property}`))) {\n return true;\n }\n return false;\n });\n return isEmpty(result);\n }\n\n @computed('taskMonitor.currentTasks.@each.status')\n get isGeneratingWeldingBook() {\n let tasks = this.get('taskMonitor.currentTasks');\n let contextTask = tasks.find((item) => {\n if (item.get('contextName') === 'welding-book') {\n if (item.get('contextId') === this.get('weldingBook.id')) {\n if (item.get('status') === '200') {\n return true;\n }\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return true;\n }\n return false;\n }\n\n validateField(field) {\n return get(this, 'model').validate({ only: [field] });\n }\n\n calculateErrorDetailsTab() {\n let properties = [\n WELDING_BOOK.DESIGNATION,\n WELDING_BOOK.WELDING_PROJECT,\n WELDING_BOOK.REVISION,\n WELDING_BOOK.REVISION_DATE,\n WELDING_BOOK.STANDARD,\n WELDING_BOOK.WELDER_STANDARD,\n WELDING_BOOK.SUPPLIER,\n ];\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorDetailsTab', true);\n } else {\n set(this, 'hasErrorDetailsTab', false);\n }\n }\n\n validationFailed() {\n this.calculateErrorDetailsTab();\n }\n\n resetTabErrors() {\n set(this, 'hasErrorDetailsTab', false);\n }\n\n _postSave(model, options) {\n this.weldingBook.clearNonSavedWelds();\n // This is added here as a fix because the server is currently not sending all\n // the data back, a workaround for issue #155\n this.weldingBook.hasMany(WELDING_BOOK.WELDS).reload();\n if (options.isNew) {\n this.tracker.savedWeldingBook();\n }\n this.resetTabErrors();\n }\n\n padLeft(n, width = 3) {\n let padSymbol = '0';\n n = `${n}`;\n return n.length >= width ? n : new Array(width - n.length + 1).join(padSymbol) + n;\n }\n\n // Designation is disabled if there's an automatic naming schem\n @computed('model.supplier')\n get designationDisabled() {\n return get(this, 'userSession').hasFeature('welding-book-automatic-naming');\n }\n\n // Fetches the name of a new WeldingBook from the backend\n fetchNewName() {\n if (get(this, 'userSession').hasFeature('welding-book-automatic-naming')) {\n let company = this.getModelValue(WELDING_BOOK.SUPPLIER);\n let companyId = get(company, 'id');\n if (!isEmpty(companyId)) {\n get(this, 'ajax')\n .request(`welding-books/createName/${companyId}`)\n .then((result) => {\n this.setModelValue(WELDING_BOOK.DESIGNATION, result.name);\n });\n }\n }\n }\n\n loadComponentsForProject = task(\n {\n restartable: true,\n },\n async () => {\n await timeout(1);\n let projectId = get(this, 'weldingBook.weldingProject.id');\n if (isEmpty(projectId)) {\n return;\n }\n return get(this, 'data')\n .listAllProjectComponents({\n project: projectId,\n })\n .then((data) => {\n set(this, 'componentOptions', data);\n return data;\n });\n }\n );\n\n loadPqrForWelds = task(\n {\n restartable: true,\n },\n async () => {\n await timeout(250);\n let { weldingBook } = this;\n let { id } = weldingBook;\n\n if (!isEmpty(id)) {\n return this.data.listAllPQR(\n {},\n {\n weldingBookId: id,\n archivalState: 'ALL',\n }\n );\n } else {\n return [];\n }\n }\n );\n\n loadPqrForExtraWps = task(\n {\n restartable: true,\n },\n async () => {\n await timeout(250);\n let { weldingBook } = this;\n let { id } = weldingBook;\n\n if (!isEmpty(id)) {\n return this.data.listAllPQR(\n {},\n {\n weldingBookExtraWps: id,\n archivalState: 'ALL',\n }\n );\n } else {\n return [];\n }\n }\n );\n\n loadWelds = task(\n {\n restartable: true,\n },\n async (page = 1) => {\n this.weldsCurrentPage = page;\n\n let { weldingBook, weldsCurrentPage, weldsPageSize, section } = this;\n let { id } = weldingBook;\n\n // TODO: remove this horrible hack.\n // More info at: https://dev.azure.com/esabdigitalsolutions/ESABCloud/_boards/board/t/Notes%20Team/Stories/?workitem=5092\n let pageSize = section === 'wps' ? 999 : weldsPageSize;\n\n if (!isEmpty(id)) {\n let result = await this.data.loadWeldingBookWelds(\n { weldingBook: id, page: weldsCurrentPage, pageSize },\n 'wps,inspections,inspections.weld,inspections.test,inspections.testStageName,inspections.testLocation'\n );\n this.weldsTotalCount = result.meta.records;\n return result;\n } else {\n return [];\n }\n }\n );\n\n reloadWeldingBook = task(\n {\n drop: true,\n },\n async () => {\n await this.weldingBook.reload();\n }\n );\n\n archiveWeldingBookOnDelete = task(\n {\n drop: true,\n },\n async () => {\n await this.archiveWeldingBook.perform();\n set(this, 'isShowingModal', false);\n }\n );\n\n archiveWeldingBook = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, weldingBook } = this;\n\n loading.block();\n try {\n await weldingBook.archive();\n try {\n await this.reloadWeldingBook.perform();\n alert.success(\n intl.t('components.model-welding-book/edit.archive.messages.archive-success', {\n book: get(weldingBook, 'designation'),\n })\n );\n } finally {\n loading.unblock();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(intl.t('components.model-welding-book/edit.archive.messages.archive-error'));\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmArchive', false);\n }\n }\n );\n\n unarchiveWeldingBook = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, weldingBook } = this;\n\n loading.block();\n try {\n await weldingBook.unarchive();\n try {\n await this.reloadWeldingBook.perform();\n alert.success(\n intl.t('components.model-welding-book/edit.archive.messages.unarchive-success', {\n book: get(weldingBook, 'designation'),\n })\n );\n } finally {\n loading.unblock();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('components.model-welding-book/edit.archive.messages.unarchive-error')\n );\n }\n } finally {\n set(this, 'showConfirmUnarchive', false);\n }\n }\n );\n\n init() {\n super.init(...arguments);\n if (!isEmpty(isEmpty(get(this, 'weldingBook.weldingProject.id')))) {\n get(this, 'loadComponentsForProject').perform();\n } else {\n set(this, 'componentOptions', []);\n }\n if (!isEmpty(this.weldIdToEdit)) {\n get(this, 'store')\n .findRecord('welding-book-weld', this.weldIdToEdit)\n .then((weld) => {\n this.currentlyEditingWeld = weld;\n });\n }\n this.loadSectionData();\n this.fetchRevisionsTask.perform();\n }\n\n @action\n setDesignation(value) {\n this.setModelValue(WELDING_BOOK.DESIGNATION, value);\n }\n\n @action\n setProject(value) {\n this.setModelValue(WELDING_BOOK.PROJECT, value);\n }\n\n @action\n setRevision(value) {\n this.setModelValue(WELDING_BOOK.REVISION, value);\n }\n\n @action\n setRevisionStatus(value) {\n this.setModelValue(WELDING_BOOK.REVISION_STATUS, value);\n }\n\n @action\n setCustomer(value) {\n this.setModelValue(WELDING_BOOK.CUSTOMER, value);\n }\n\n @action\n setSupplier(value) {\n this.setModelValue(WELDING_BOOK.SUPPLIER, value);\n // Automatic naming scheme for WeldingBook is triggered when a new supplier is chosen\n let isNew = get(this, 'weldingBook.isNew');\n if (get(this, 'userSession').hasFeature('welding-book-automatic-naming') && isNew) {\n this.fetchNewName();\n }\n }\n\n @action\n setStandard(value) {\n this.setModelValue(WELDING_BOOK.STANDARD, value);\n this.validateField(WELDING_BOOK.STANDARD);\n }\n\n @action\n setWelderStandard(value) {\n this.setModelValue(WELDING_BOOK.WELDER_STANDARD, value);\n this.validateField(WELDING_BOOK.WELDER_STANDARD);\n }\n\n @action\n setJobDescription(value) {\n this.setModelValue(WELDING_BOOK.JOB_DESCRIPTION, value);\n }\n\n @action\n setRevisionDate(value) {\n this.setModelValue(WELDING_BOOK.REVISION_DATE, value);\n }\n\n @action\n setWrittenBy(value) {\n this.setModelValue(WELDING_BOOK.WRITTEN_BY, value);\n }\n\n @action\n setVerifiedBy(value) {\n this.setModelValue(WELDING_BOOK.VERIFIED_BY, value);\n }\n\n @action\n setApprovedBy(value) {\n this.setModelValue(WELDING_BOOK.APPROVED_BY, value);\n }\n\n @action\n setWrittenByDate(value) {\n this.setModelValue(WELDING_BOOK.WRITTEN_BY_DATE, value);\n }\n\n @action\n setVerifiedByDate(value) {\n this.setModelValue(WELDING_BOOK.VERIFIED_BY_DATE, value);\n }\n\n @action\n setApprovedByDate(value) {\n this.setModelValue(WELDING_BOOK.APPROVED_BY_DATE, value);\n }\n\n @action\n setStatus(value) {\n this.setModelValue(WELDING_BOOK.STATUS, value);\n }\n\n @action\n setNotes(value) {\n this.setModelValue(WELDING_BOOK.NOTES, value);\n }\n\n @action\n setIncludePQR(value) {\n this.setModelValue(WELDING_BOOK.INCLUDE_PQRS, value);\n }\n\n @action\n setWeldingProject(project) {\n this.setModelValue(WELDING_BOOK.WELDING_PROJECT, project);\n if (!isEmpty(project)) {\n let isNew = get(this, 'weldingBook.isNew');\n if (isNew) {\n this.setModelValue(WELDING_BOOK.CUSTOMER, get(project, PROJECT.CUSTOMER));\n this.setModelValue(WELDING_BOOK.SUPPLIER, get(project, PROJECT.SUPPLIER));\n if (get(this, 'userSession').hasFeature('welding-book-automatic-naming') && isNew) {\n this.fetchNewName();\n }\n this.setModelValue(WELDING_BOOK.STANDARD, get(project, PROJECT.STANDARD));\n this.setModelValue(WELDING_BOOK.WELDER_STANDARD, get(project, PROJECT.WELDER_STANDARD));\n }\n get(this, 'loadComponentsForProject').perform();\n } else {\n this.setModelValue(WELDING_BOOK.CUSTOMER, null);\n this.setModelValue(WELDING_BOOK.SUPPLIER, null);\n this.setModelValue(WELDING_BOOK.STANDARD, null);\n this.setModelValue(WELDING_BOOK.WELDER_STANDARD, null);\n }\n }\n\n @action\n setComponent(value) {\n this.setModelValue(WELDING_BOOK.COMPONENT, value);\n }\n\n @action\n setSection(type) {\n set(this, 'section', type);\n this.loadSectionData();\n }\n\n loadSectionData() {\n let { section } = this;\n if (section === 'pqr') {\n this.loadPqrForWelds.perform();\n }\n if (section === 'pqrExtra') {\n this.loadPqrForExtraWps.perform();\n }\n // we also need welds data in WPS tab because WPSs are associated to welds\n if (section === 'weldList' || section === 'wps') {\n this.loadWelds.perform();\n }\n }\n\n @action\n setSectionScroll(section) {\n set(this, 'section', section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n\n @action\n selectWPS(wps) {\n if (!isEmpty(wps.get('mainPqr.id'))) {\n this.get('weldingBook.pqrs').then((pqrs) => {\n this.store.findRecord('pqr', wps.get('mainPqr.id')).then((pqr) => {\n pqrs.pushObject(pqr);\n });\n });\n }\n if (!isEmpty(wps.get('pqrFill.id'))) {\n this.get('weldingBook.pqrs').then((pqrs) => {\n this.store.findRecord('pqr', wps.get('pqrFill.id')).then((pqr) => {\n pqrs.pushObject(pqr);\n });\n });\n }\n if (!isEmpty(wps.get('pqrCap.id'))) {\n this.get('weldingBook.pqrs').then((pqrs) => {\n this.store.findRecord('pqr', wps.get('pqrCap.id')).then((pqr) => {\n pqrs.pushObject(pqr);\n });\n });\n }\n let existingWps = get(this, 'weldingBook.wps');\n if (!existingWps.findBy('id', get(wps, 'id'))) {\n existingWps.pushObject(wps);\n }\n }\n\n @action\n removeWps(wps) {\n this.get('weldingBook.wps').removeObject(wps);\n if (wps.belongsTo('mainPqr').value() !== null) {\n wps.get('mainPqr').then((pqr) => {\n this.get('weldingBook.pqrs').then((pqrs) => {\n pqrs.removeObject(pqr);\n });\n });\n }\n if (wps.belongsTo('pqrFill').value() !== null) {\n wps.get('pqrFill').then((pqr) => {\n this.get('weldingBook.pqrs').then((pqrs) => {\n pqrs.removeObject(pqr);\n });\n });\n }\n if (wps.belongsTo('pqrCap').value() !== null) {\n wps.get('pqrCap').then((pqr) => {\n this.get('weldingBook.pqrs').then((pqrs) => {\n pqrs.removeObject(pqr);\n });\n });\n }\n }\n\n @action\n generateWeldingBook() {\n let weldingBook = get(this, 'weldingBook');\n if (weldingBook.validate()) {\n this.weldingBookWpsErrors.clear();\n this.weldingBookPqrErrors.clear();\n\n let { taskMonitor } = this;\n let weldingBookId = this.get('weldingBook.id');\n if (taskMonitor.hasTaskByContext('welding-book', weldingBookId)) {\n taskMonitor.removeTaskByContext('welding-book', weldingBookId);\n }\n this.loading.block();\n this.weldingBook\n .createBook()\n .then((response) => {\n if (response.status === '200') {\n this.get('taskMonitor.monitorTask').perform(response.taskIdentifier);\n } else {\n let error = JSON.parse(response.error);\n if (!isEmpty(error.wps)) {\n set(this, 'weldingBookWpsErrors', error.wps);\n }\n if (!isEmpty(error.pqrs)) {\n set(this, 'weldingBookPqrErrors', error.pqrs);\n }\n }\n })\n .finally(() => {\n this.loading.unblock();\n });\n } else {\n this.alert.error(this.intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n finishWeldingBookGeneration() {\n this.weldingBook.reload();\n }\n\n @action\n newRevision() {\n set(this, 'showNewRevision', true);\n }\n\n @action\n cancelRevision() {\n set(this, 'showNewRevision', false);\n }\n\n @action\n createNewRevision() {\n let weldingBook = get(this, 'weldingBook');\n let { loading, intl, alert } = this;\n weldingBook\n .createRevision()\n .then((savedBook) => {\n get(this, 'revisionCreated')(get(savedBook, 'id'));\n alert.success(\n intl.t('components.model-welding-book/edit.sucess-message.revision-created', {\n book: get(weldingBook, 'designation'),\n })\n );\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n let duplicateMessage = intl.t('edit-view.actions.unique-violation');\n alert.error(duplicateMessage);\n } else {\n alert.error(\n intl\n .t('edit-view.actions.generic-error', { name: get(weldingBook, 'designation') })\n .toString()\n );\n }\n })\n .finally(() => {\n set(this, 'showNewRevision', false);\n loading.unblock();\n });\n }\n\n @action\n async selectDrawing(drawingId) {\n let drawing = await this.data.loadAllDataComponentDrawing(drawingId);\n this.weldingBook.componentDrawings.pushObject(drawing);\n this.saveModel();\n this.isAddingDrawing = false;\n }\n\n @action\n deleteDrawing(drawing) {\n this.weldingBook.componentDrawings.removeObject(drawing);\n this.saveModel();\n }\n\n @action\n goToRevision(weldingBook) {\n this.fetchRevisionsTask.perform();\n this.navigateToRevision(weldingBook);\n }\n\n // Experiment\n @action\n addWeld() {\n let currentMax = this.maxWeldOrderNumber;\n if (isNaN(currentMax) || !Number.isFinite(currentMax)) {\n currentMax = 0;\n }\n let newOrderNumber = currentMax + 1;\n let newWeldNumber = `W-${this.padLeft(newOrderNumber)}`;\n let newWeld = this.store.createRecord('welding-book-weld', {\n weldNumber: newWeldNumber,\n orderNum: newOrderNumber,\n weldingBook: this.weldingBook,\n });\n this.getModelValue(WELDING_BOOK.WELDS).then((welds) => {\n welds.pushObject(newWeld);\n });\n this.currentlyEditingWeld = newWeld;\n }\n\n @action\n confirmRemoveWeld(weld) {\n set(this, 'currentlyDeletingWeld', weld);\n }\n\n @action\n removeWeld(weld) {\n this.stopEditingWeld();\n this.getModelValue(WELDING_BOOK.WELDS).then((welds) => {\n if (weld.get('isNew')) {\n welds.removeObject(weld);\n } else {\n weld\n .destroyRecord()\n .then(() => {\n welds.removeObject(weld);\n this.alert.success(\n this.intl.t('components.model-welding-book/edit.actions.weld-delete-success', {\n weld: weld.weldNumber,\n })\n );\n })\n .catch((e) => {\n console.error(e);\n weld.rollbackAttributes();\n this.alert.error(\n this.intl.t('edit-view.actions.generic-delete-error', {\n name: weld.weldNumber,\n })\n );\n });\n }\n });\n }\n\n @action\n cancelRemoveWeld() {\n set(this, 'currentlyDeletingWeld', null);\n }\n\n @action\n editWeld(weld) {\n this.currentlyEditingWeld = weld;\n get(this, 'onEditWeld')(get(weld, 'id'));\n }\n\n @action\n updateRevision(designation) {\n let { alertMessage, loading, intl } = this;\n loading.block();\n get(this, 'weldingBook')\n .updateRevisionId({\n newDesignation: designation,\n })\n .then(() => {\n get(this, 'weldingBook').reload();\n alertMessage.success(\n intl.t('components.model-welding-book/edit.update-designation-sucess', { designation })\n );\n set(this, 'showUpdateRevision', false);\n })\n .catch((error) => {\n if (isDuplicateError(error)) {\n alertMessage.error(\n intl.t('components.model-welding-book/edit.duplicate-welding-book-copy')\n );\n } else {\n alertMessage.error(\n intl.t('components.model-welding-book/edit.error-updating-designation')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n verifyBook(date) {\n let { loading, alertMessage, intl, weldingBook } = this;\n loading.block();\n weldingBook\n .verifyBook({\n date,\n })\n .then(() => {\n this.weldingBook.belongsTo('verifiedBy').reload();\n this.fetchRevisionsTask.perform();\n alertMessage.success(\n intl.t('components.model-welding-book/edit.sucess-message.welding-book-verified', {\n book: get(this, 'weldingBook.designation'),\n })\n );\n })\n .catch((error) => {\n if (isError(error, ERROR_CODES.MISSING_STAFF)) {\n let message = intl.t('components.model-welding-book/edit.error-message.missing-staff', {\n error: getErrorCode(error),\n });\n alertMessage.error(message);\n } else {\n let message = intl.t('components.model-welding-book/edit.error-message.generic-error', {\n error: getErrorCode(error),\n });\n alertMessage.error(message);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n approveBook(date) {\n let { loading, alertMessage, intl, weldingBook } = this;\n loading.block();\n weldingBook\n .approveBook({\n date,\n })\n .then(() => {\n this.weldingBook.belongsTo('approvedBy').reload();\n this.fetchRevisionsTask.perform();\n alertMessage.success(\n intl.t('components.model-welding-book/edit.sucess-message.welding-book-approved', {\n book: get(this, 'weldingBook.designation'),\n })\n );\n })\n .catch((error) => {\n if (isError(error, ERROR_CODES.MISSING_STAFF)) {\n let message = intl.t('components.model-welding-book/edit.error-message.missing-staff', {\n error: getErrorCode(error),\n });\n alertMessage.error(message);\n } else {\n let message = intl.t('components.model-welding-book/edit.error-message.generic-error', {\n error: getErrorCode(error),\n });\n alertMessage.error(message);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n revokeBook() {\n let { loading, alertMessage, intl, weldingBook } = this;\n loading.block();\n weldingBook\n .revokeApproval()\n .then(() => {\n this.weldingBook.belongsTo('approvedBy').reload();\n this.weldingBook.belongsTo('verifiedBy').reload();\n this.fetchRevisionsTask.perform();\n alertMessage.success(\n intl.t('components.model-welding-book/edit.sucess-message.welding-book-revoked', {\n book: get(this, 'weldingBook.designation'),\n })\n );\n })\n .catch((error) => {\n if (isError(error, ERROR_CODES.MISSING_STAFF)) {\n let message = intl.t('components.model-welding-book/edit.error-message.missing-staff', {\n error: getErrorCode(error),\n });\n alertMessage.error(message);\n } else {\n let message = intl.t('components.model-welding-book/edit.error-message.generic-error', {\n error: getErrorCode(error),\n });\n alertMessage.error(message);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n validateChanges() {\n if (this.currentlyEditingWeld.validate()) {\n this.currentlyEditingWeld\n .save()\n .then((savedWeld) => {\n this.alert.success(\n this.intl\n .t('components.model-welding-book/edit.sucess-message.weld-saved', {\n weld: savedWeld.weldNumber,\n })\n .toString()\n );\n this.currentlyEditingWeld = savedWeld;\n get(this, 'onEditWeld')(savedWeld.id);\n this.loadWelds.perform();\n })\n .catch(() => {\n if (this.currentlyEditingWeld) {\n this.currentlyEditingWeld.rollbackAttributes();\n }\n });\n } else {\n this.alert.error(\n this.intl\n .t('components.model-welding-book/edit.messages.weld-error', {\n weld: this.currentlyEditingWeld.weldNumber,\n })\n .toString()\n );\n }\n }\n\n @action\n stopEditingWeld() {\n this.currentlyEditingWeld = null;\n get(this, 'onEditWeld')(null);\n }\n\n @action\n cancelNewWeld() {\n this.currentlyEditingWeld.destroyRecord();\n this.currentlyEditingWeld = null;\n }\n\n @action\n includeWpsPdf(value) {\n if (value) {\n this.setModelValue(WELDING_BOOK.TYPE_OF_WPS_INCLUSION, WPS_INCLUSION.INCLUDE_UPLOADED);\n } else {\n this.setModelValue(WELDING_BOOK.TYPE_OF_WPS_INCLUSION, WPS_INCLUSION.GENERATE_PDF);\n }\n }\n\n @action\n generateWpsPdf(value) {\n if (value) {\n this.setModelValue(WELDING_BOOK.TYPE_OF_WPS_INCLUSION, WPS_INCLUSION.GENERATE_PDF);\n } else {\n this.setModelValue(WELDING_BOOK.TYPE_OF_WPS_INCLUSION, WPS_INCLUSION.INCLUDE_UPLOADED);\n }\n }\n\n @action\n confirmArchiveWeldingBook() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n confirmUnarchiveWeldingBook() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n cancelUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n toggleShowConfirmVerify() {\n this.showConfirmVerify = !this.showConfirmVerify;\n }\n\n @action\n toggleShowConfirmApprove() {\n this.showConfirmApprove = !this.showConfirmApprove;\n }\n\n @action\n toggleShowConfirmRevoke() {\n this.showConfirmRevoke = !this.showConfirmRevoke;\n }\n\n deleteRevision = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, revisionIdToDelete, weldingBook } = this;\n\n loading.block();\n\n try {\n let revisionToDelete = weldingBook;\n let bookId = parseInt(weldingBook.id);\n\n if (bookId !== revisionIdToDelete) {\n revisionToDelete = await this.store.findRecord('welding-book', revisionIdToDelete);\n }\n\n let response = await revisionToDelete.deleteRevision();\n\n alert.success(\n intl.t('components.model-welding-book/edit.revisions.delete-success', {\n revision: revisionToDelete.revision,\n })\n );\n\n // transition to active welding book in case we deleted the welding book we were editing\n if (bookId === revisionIdToDelete && !isEmpty(response.id)) {\n let options = {\n queryParams: {\n section: 'revision',\n },\n };\n this.router.transitionTo('welding-book', response.id, options);\n } else {\n this.fetchRevisionsTask.perform();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('edit-view.actions.generic-delete-error', {\n name: intl.t('components.model-welding-book/edit.revisions.table.revision-column'),\n })\n );\n }\n } finally {\n loading.unblock();\n this.isShowingDeleteRevisionModal = false;\n }\n }\n );\n\n @action\n showDeleteRevisionModal(revision) {\n if (revision.canBeDeleted) {\n this.isShowingDeleteRevisionModal = true;\n this.revisionIdToDelete = parseInt(revision.id);\n }\n }\n\n @action\n hideDeleteRevisionModal() {\n this.isShowingDeleteRevisionModal = false;\n this.revisionIdToDelete = null;\n }\n\n @action\n removeWeldingBookTaskFromContext() {\n this.taskMonitor.removeTaskByContext('welding-book', this.get('weldingBook.id'));\n }\n\n @action\n duplicateWeldingBook() {\n let { loading, intl, alert } = this;\n\n if (!this.validateDuplication()) {\n alert.error(intl.t('generic.actions.validation-failed'));\n return;\n }\n\n loading.block();\n let weldingBook = get(this, 'weldingBook');\n weldingBook\n .duplicate({\n newDesignation: this.newDesignation,\n newProject: this.selectedProject.id,\n newComponent: this.selectedComponent?.id,\n newWrittenByDate: this.newWrittenByDate,\n })\n .then((duplicatedBook) => {\n alert.success(\n intl.t('edit-view.actions.duplicated', {\n name: this.newDesignation,\n })\n );\n this.router.transitionTo('welding-book', duplicatedBook.id);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: this.newDesignation }));\n }\n })\n .finally(() => {\n this.showConfirmDuplicate = false;\n this.newWrittenByDate = null;\n this.newWrittenByDateErrors = null;\n loading.unblock();\n });\n }\n\n validateDuplication() {\n if (isEmpty(this.newDesignation)) {\n this.newDesignationErrors = [{ message: this.intl.t('generic.error.field-required') }];\n } else {\n this.newDesignationErrors = null;\n }\n\n if (isEmpty(this.selectedProject)) {\n this.newProjectErrors = [{ message: this.intl.t('generic.error.field-required') }];\n } else {\n this.newProjectErrors = null;\n }\n\n if (isEmpty(this.newWrittenByDate)) {\n this.newWrittenByDateErrors = [this.intl.t('generic.error.field-required')];\n } else {\n this.newWrittenByDateErrors = null;\n }\n\n return (\n !this.newDesignationErrors && !this.newProjectErrors && !this.newWrittenByDateErrors\n );\n }\n\n get weldingBookProject() {\n return this.weldingBook.belongsTo('weldingProject').value();\n }\n\n get weldingBookProjectComponent() {\n return this.weldingBook.belongsTo('component').value();\n }\n\n @action\n setUnitSystem() {\n // do nothing on purpose\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n

{{t \\\"components.model-welding-book/new.message.main\\\"}}

\\n\\n\\n
\\n {{#if this.stepInitial}}\\n \\n \\n {{t \\\"components.model-welding-book/new.message.select-project\\\"}}\\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/new.buttons.search-project\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-book/new.buttons.create-project\\\"}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.stepChooseProject}}\\n \\n \\n \\n {{/if}}\\n {{#if this.stepChooseComponent}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.stepCreateProject}}\\n \\n
\\n \\n
\\n \\n {{/if}}\\n\\n {{#if this.stepCreateWeldingBook}}\\n \\n {{/if}}\\n
\", {\"contents\":\"\\n

{{t \\\"components.model-welding-book/new.message.main\\\"}}

\\n\\n\\n
\\n {{#if this.stepInitial}}\\n \\n \\n {{t \\\"components.model-welding-book/new.message.select-project\\\"}}\\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/new.buttons.search-project\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-book/new.buttons.create-project\\\"}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.stepChooseProject}}\\n \\n \\n \\n {{/if}}\\n {{#if this.stepChooseComponent}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.stepCreateProject}}\\n \\n
\\n \\n
\\n \\n {{/if}}\\n\\n {{#if this.stepCreateWeldingBook}}\\n \\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/model-welding-book/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/new.hbs\"}});\nimport { service } from '@ember/service';\nimport { alias, equal } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { set, get, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport WeldingBookAttributes from 'weldnote/utils/welding-book-rules';\nimport ProjectAttributes from 'weldnote/pods/project/attributes';\nimport { isPermissionDenied, isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELDING_BOOK } = WeldingBookAttributes;\nconst { PROJECT } = ProjectAttributes;\n\nexport default class New extends Component {\n @service\n userSession;\n\n @service\n ajax;\n\n @service('weldnote-data')\n data;\n\n @service\n intl;\n\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n get weldingBook() {\n return this.args.model;\n }\n\n @tracked\n wizardSection = 'default';\n\n get stepInitial() {\n return this.wizardSection === 'default';\n }\n\n get stepChooseProject() {\n return this.wizardSection === 'selectProject';\n }\n\n get stepCreateProject() {\n return this.wizardSection === 'createProject';\n }\n\n get stepChooseComponent() {\n return this.wizardSection === 'selectComponent';\n }\n\n get stepCreateWeldingBook() {\n return this.wizardSection === 'createWeldingBook';\n }\n\n @tracked\n createdProject = false;\n\n @tracked\n selectedProject = null;\n\n @tracked\n selectedComponent = null;\n\n @tracked\n project = null;\n\n // For Welding Books with Automatic Naming, fetches the new name\n fetchNewName() {\n if (this.userSession.hasFeature('welding-book-automatic-naming')) {\n let company = this.getModelValue(WELDING_BOOK.SUPPLIER);\n let companyId = get(company, 'id');\n if (!isEmpty(companyId)) {\n this.ajax.request(`welding-books/createName/${companyId}`).then((result) => {\n this.setModelValue(WELDING_BOOK.DESIGNATION, result.name);\n });\n }\n }\n }\n\n setModelValue(attribute, value) {\n set(this.args, `model.${attribute}`, value);\n }\n\n getModelValue(attribute) {\n return get(this.args.model, attribute);\n }\n\n setProjectValues(project, component) {\n this.setModelValue(WELDING_BOOK.CUSTOMER, get(project, PROJECT.CUSTOMER));\n this.setModelValue(WELDING_BOOK.SUPPLIER, get(project, PROJECT.SUPPLIER));\n if (this.userSession.hasFeature('welding-book-automatic-naming')) {\n this.fetchNewName();\n }\n this.setModelValue(WELDING_BOOK.STANDARD, get(project, PROJECT.STANDARD));\n this.setModelValue(WELDING_BOOK.WELDER_STANDARD, get(project, PROJECT.WELDER_STANDARD));\n this.setModelValue(WELDING_BOOK.COMPONENT, component);\n this.setModelValue(WELDING_BOOK.WELDING_PROJECT, project);\n }\n\n moveToCreateWeldingBookSection(project, component) {\n this.setProjectValues(project, component);\n this.selectedProject = project;\n\n if (!isEmpty(component)) {\n this.selectedComponent = component;\n }\n this.wizardSection = 'createWeldingBook';\n }\n\n @action\n selectProjectLink() {\n this.wizardSection = 'selectProject';\n }\n\n @action\n createProjectLink() {\n this.wizardSection = 'createProject';\n let project = this.store.createRecord('project', {\n unitSystem: this.userSession.unitSystem,\n });\n this.project = project;\n }\n\n @action\n selectProject(project) {\n this.store.findRecord('project', get(project, 'id')).then((project) => {\n this.selectedProject = project;\n this.wizardSection = 'selectComponent';\n set(this.weldingBook, 'unitSystem', project.unitSystem);\n });\n }\n\n @action\n selectComponent(component) {\n this.selectedComponent = component;\n this.wizardSection = 'createWeldingBook';\n this.setProjectValues(this.selectedProject, component);\n }\n\n @action\n selectSupplier() {\n // Automatic naming scheme for WeldingBook is triggered when a new supplier is chosen\n if (this.userSession.hasFeature('welding-book-automatic-naming')) {\n this.fetchNewName();\n }\n }\n\n // Saves the new Welding Book\n @action\n saveWeldingBook() {\n let { loading, intl, alert, weldingBook } = this;\n if (!weldingBook.validate()) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n loading.block();\n weldingBook\n .save()\n .then((result) => {\n this.args.instanceCreated(result.id);\n alert.success(\n intl.t('edit-view.actions.saved', {\n name: get(result, 'designation'),\n })\n );\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alert.error(this.intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(\n intl\n .t('edit-view.actions.unique-violation-fields', {\n fields: intl.t('model.welding-book.designation.label'),\n })\n .toString()\n );\n } else {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n moveToCreateWeldingBook(project, component) {\n this.moveToCreateWeldingBookSection(project, component);\n set(this.weldingBook, 'unitSystem', project.unitSystem);\n this.createdProject = true;\n }\n\n @action\n cancelCreateProject(project) {\n this.wizardSection = 'default';\n if (project) {\n this.store.unloadRecord(project);\n }\n }\n\n @action\n createComponent(componentName) {\n let { loading, store } = this;\n let { selectedProject: project } = this;\n let component = store.createRecord('project-component');\n set(component, 'componentName', componentName);\n set(component, 'project', get(this, 'selectedProject'));\n loading.block();\n component\n .save()\n .then((componentSaved) => {\n this.moveToCreateWeldingBookSection(project, componentSaved);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n skipComponent() {\n this.wizardSection = 'createWeldingBook';\n this.setProjectValues(this.selectedProject, null);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n

{{t \\\"components.model-welding-book/new/create-project.messages.instructions\\\"}}

\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n {{t \\\"components.model-welding-book/new/create-project.buttons.cancel-project\\\"}}\\n \\n \\n\", {\"contents\":\"\\n \\n

{{t \\\"components.model-welding-book/new/create-project.messages.instructions\\\"}}

\\n
\\n
\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n {{t \\\"components.model-welding-book/new/create-project.buttons.cancel-project\\\"}}\\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-book/new/create-project.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/new/create-project.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Attributes from 'weldnote/pods/project/attributes';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport { isPermissionDenied, isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { task, timeout } from 'ember-concurrency';\n\nconst { PROJECT } = Attributes;\n\n@classic\nexport default class CreateProject extends Component.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n store;\n\n @service\n intl;\n\n @alias('model')\n project;\n\n clientsSearched = null;\n\n findProjectClient = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n let data = await this.data.listAllProjectClients({}, { name: term });\n set(this, 'clientsSearched', data);\n return data;\n }\n );\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n init() {\n super.init(...arguments);\n set(this, 'clientsSearched', []);\n }\n\n @action\n setDesignation(value) {\n this.setModelValue(PROJECT.DESIGNATION, value);\n }\n\n @action\n setProjectName(value) {\n this.setModelValue(PROJECT.PROJECT_NAME, value);\n }\n\n @action\n setCustomer(value) {\n this.setModelValue(PROJECT.CUSTOMER, value);\n }\n\n @action\n setSupplier(value) {\n this.setModelValue(PROJECT.SUPPLIER, value);\n }\n\n @action\n setConstructionStandard(value) {\n this.setModelValue(PROJECT.CONSTRUCTION_STANDARD, value);\n }\n\n @action\n setStandard(value) {\n this.setModelValue(PROJECT.STANDARD, value);\n }\n\n @action\n setWelderStandard(value) {\n this.setModelValue(PROJECT.WELDER_STANDARD, value);\n }\n\n @action\n saveProject() {\n let project = get(this, 'project');\n let { loading, intl, alert } = this;\n if (project.validate()) {\n loading.block();\n project\n .save()\n .then((projectSaved) => {\n let componentName = get(this, 'componentName');\n if (!isEmpty(componentName)) {\n let query = {};\n query['filter[project.id]'] = get(projectSaved, 'id');\n // Since when we create a Project the first component is created,\n // we want to rename the component\n get(this, 'store')\n .query('project-component', query)\n .then((results) => {\n let component = get(results, 'firstObject');\n set(component, 'componentName', componentName);\n component.save().then((componentSaved) => {\n get(this, 'afterSaveProject')(projectSaved, componentSaved);\n });\n });\n } else {\n get(this, 'afterSaveProject')(projectSaved);\n }\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alert.error(this.intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(\n intl\n .t('edit-view.actions.unique-violation-fields', {\n fields: intl.t('model.project.designation.label'),\n })\n .toString()\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n }\n\n @action\n createProjectClient(term) {\n let { store, alert, intl, loading } = this;\n let client = store.createRecord('project-client');\n set(client, 'name', term);\n set(this, 'project.projectClient', client);\n loading.block();\n client\n .save()\n .then(() => {\n alert.success(\n intl.t('components.model-project/edit.messages.client-created', { client: term })\n );\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.model-project/edit.messages.client-error-duplicate', {\n client: term,\n })\n );\n } else {\n alert.error(\n intl.t('components.model-project/edit.messages.client-error-generic', {\n client: term,\n })\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n showWhenCreateClient() {\n let clients = get(this, 'clientsSearched');\n if (clients != null && get(clients, 'length') === 0) {\n return true;\n }\n return false;\n }\n\n @action\n suggestClient(term) {\n return this.intl.t('components.model-project/edit.messages.suggest-create-client', {\n client: term,\n });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n

{{t \\\"components.model-welding-book/new/edit-form.messages.creating-book\\\"}}

\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/new/edit-form.buttons.cancel-welding-book\\\"}}\\n \\n {{t \\\"components.model-welding-book/new/edit-form.buttons.create-welding-book\\\"}}\\n \\n \\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{#if this.showWarningForProjectCreation}}\\n \\n {{t \\\"components.model-welding-book/new/edit-form.messages.cancel-welding-book\\\"}}\\n
\\n{{/if}}\", {\"contents\":\"\\n \\n \\n

{{t \\\"components.model-welding-book/new/edit-form.messages.creating-book\\\"}}

\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/new/edit-form.buttons.cancel-welding-book\\\"}}\\n \\n {{t \\\"components.model-welding-book/new/edit-form.buttons.create-welding-book\\\"}}\\n \\n \\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n{{#if this.showWarningForProjectCreation}}\\n \\n {{t \\\"components.model-welding-book/new/edit-form.messages.cancel-welding-book\\\"}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-book/new/edit-form.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/new/edit-form.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport WeldingBookAttributes from 'weldnote/utils/welding-book-rules';\n\nconst { WELDING_BOOK } = WeldingBookAttributes;\n\n@classic\nexport default class EditForm extends Component.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @alias('model')\n weldingBook;\n\n @notEmpty('project.standard.id')\n hasStandard;\n\n @notEmpty('project.welderStandard.id')\n hasWelderStandard;\n\n @notEmpty('project.supplier.id')\n hasCompany;\n\n @notEmpty('project.customer')\n hasClient;\n\n showWarningForProjectCreation = false;\n\n // Parameter from outside\n createdProject = false;\n\n // Designation is disabled if there's an automatic naming schem\n @computed('weldingBook.supplier')\n get designationDisabled() {\n return this.userSession.hasFeature('welding-book-automatic-naming');\n }\n\n validateField(field) {\n return this.weldingBook.validate({ only: [field] });\n }\n\n @action\n setRevisionDate(value) {\n this.setModelValue(WELDING_BOOK.REVISION_DATE, value);\n }\n\n @action\n setSupplier(value) {\n this.setModelValue(WELDING_BOOK.SUPPLIER, value);\n get(this, 'onSupplierSet')();\n }\n\n @action\n setUnitSystem(unit) {\n this.setModelValue(WELDING_BOOK.UNIT_SYSTEM, unit);\n }\n\n @action\n setDesignation(value) {\n this.setModelValue(WELDING_BOOK.DESIGNATION, value);\n }\n\n @action\n setCustomer(value) {\n this.setModelValue(WELDING_BOOK.CUSTOMER, value);\n }\n\n @action\n setStandard(value) {\n this.setModelValue(WELDING_BOOK.STANDARD, value);\n this.validateField(WELDING_BOOK.STANDARD);\n }\n\n @action\n setWelderStandard(value) {\n this.setModelValue(WELDING_BOOK.WELDER_STANDARD, value);\n this.validateField(WELDING_BOOK.WELDER_STANDARD);\n }\n\n @action\n cancelWeldingBookInternal() {\n if (get(this, 'createdProject')) {\n set(this, 'showWarningForProjectCreation', true);\n } else {\n get(this, 'cancelWeldingBook')();\n }\n }\n\n @action\n hideCancelModal() {\n set(this, 'showWarningForProjectCreation', false);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n \\n \\n \\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.components as |component|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-project-component/list.table.number-column\\\"\\n }}{{t \\\"components.model-project-component/list.table.name-column\\\"}}{{t\\n \\\"components.model-project-component/list.table.drawing-column\\\"\\n }}{{t\\n \\\"components.model-project-component/list.table.component-drawing-column\\\"\\n }}{{t\\n \\\"components.model-project-component/list.table.line-class-column\\\"\\n }}
{{component.componentNumber}}{{component.componentName}}\\n {{component.originalDrawing.referenceNumber}}\\n {{#if (not (is-empty-attribute component.originalDrawing.drawingContentPath))}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{component.componentDrawing.referenceNumber}}\\n {{#if (not (is-empty-attribute component.componentDrawing.drawingContentPath))}}\\n \\n (PDF)\\n {{/if}}\\n {{component.lineClass.lineIdentifier}}\\n {{t\\n \\\"components.model-welding-book/new/lookup-component.buttons.select-component\\\"\\n }}\\n
\\n\\n\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/new/lookup-component.buttons.create-component\\\"}}\\n \\n \\n
\", {\"contents\":\"
\\n \\n \\n \\n \\n \\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.components as |component|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-project-component/list.table.number-column\\\"\\n }}{{t \\\"components.model-project-component/list.table.name-column\\\"}}{{t\\n \\\"components.model-project-component/list.table.drawing-column\\\"\\n }}{{t\\n \\\"components.model-project-component/list.table.component-drawing-column\\\"\\n }}{{t\\n \\\"components.model-project-component/list.table.line-class-column\\\"\\n }}
{{component.componentNumber}}{{component.componentName}}\\n {{component.originalDrawing.referenceNumber}}\\n {{#if (not (is-empty-attribute component.originalDrawing.drawingContentPath))}}\\n \\n (PDF)\\n {{/if}}\\n \\n {{component.componentDrawing.referenceNumber}}\\n {{#if (not (is-empty-attribute component.componentDrawing.drawingContentPath))}}\\n \\n (PDF)\\n {{/if}}\\n {{component.lineClass.lineIdentifier}}\\n {{t\\n \\\"components.model-welding-book/new/lookup-component.buttons.select-component\\\"\\n }}\\n
\\n\\n\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"components.model-welding-book/new/lookup-component.buttons.create-component\\\"}}\\n \\n \\n
\",\"moduleName\":\"weldnote/components/model-welding-book/new/lookup-component.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/new/lookup-component.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class LookupComponent extends Component {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n currentPage = 1;\n\n totalCount = 0;\n\n @alias('data.pageSize')\n pageSize;\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = get(this, 'currentPage');\n options.project = get(this, 'project.id');\n\n await timeout(250);\n let data = await this.data.listAllProjectComponents(options);\n set(this, 'components', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n init() {\n super.init(...arguments);\n this.loadData.perform();\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-book/edit.revisions.confirm-create-revision\\\"}}

\\n
    \\n
  • {{t\\n \\\"components.model-welding-book/edit.revisions.current-revision\\\"\\n revision=this.revision\\n }}
  • \\n
  • {{t\\n \\\"components.model-welding-book/edit.revisions.new-revision\\\"\\n revision=this.newRevision\\n }}
  • \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/revision.labels.new-revision-btn\\\"\\n }}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-book/edit.revisions.confirm-create-revision\\\"}}

\\n
    \\n
  • {{t\\n \\\"components.model-welding-book/edit.revisions.current-revision\\\"\\n revision=this.revision\\n }}
  • \\n
  • {{t\\n \\\"components.model-welding-book/edit.revisions.new-revision\\\"\\n revision=this.newRevision\\n }}
  • \\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/revision.labels.new-revision-btn\\\"\\n }}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-book/revision.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/revision.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Component from '@ember/component';\nimport { get, computed } from '@ember/object';\n\n@classic\nexport default class Revision extends Component {\n @computed('revision')\n get newRevision() {\n return parseInt(this.revision) + 1;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n {{#if this.hasErrors}}\\n {{error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/update-revision.cancel-btn\\\"}}\\n \\n {{t \\\"components.model-welding-book/update-revision.update-btn\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n {{#if this.hasErrors}}\\n {{error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-book/update-revision.cancel-btn\\\"}}\\n \\n {{t \\\"components.model-welding-book/update-revision.update-btn\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-book/update-revision.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-book/update-revision.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class UpdateRevision extends Component {\n @service\n intl;\n\n newDesignation = '';\n\n error = '';\n\n @notEmpty('error')\n hasErrors;\n\n @action\n updateDesignation(designation) {\n if (isEmpty(designation)) {\n set(\n this,\n 'error',\n this.intl.t('components.model-welding-book/update-revision.new-number-required').toString()\n );\n } else {\n set(this, 'error', '');\n this.updateRevisions(designation);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-detail/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-detail/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not this.isISO96061)}}\\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n
\\n {{#if this.showCertificateMap}}\\n
\\n \\n \\n {{#if this.isGeneratingCertificateMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{else}}\\n
\\n \\n \\n {{#if this.isGeneratingWelderMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not this.isISO96061)}}\\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n
\\n {{#if this.showCertificateMap}}\\n
\\n \\n \\n {{#if this.isGeneratingCertificateMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{else}}\\n
\\n \\n \\n {{#if this.isGeneratingWelderMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/model-welding-map/certificate-map.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-map/certificate-map.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty, empty, equal, not } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { debounce } from '@ember/runloop';\nimport { get, action, computed, set } from '@ember/object';\nimport RSVP from 'rsvp';\nimport Rules from 'weldnote/utils/welding-map-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { isWelderStandardISO96061 } from 'weldnote/utils/standards';\n\nconst { WELDING_MAP } = Rules;\n\nconst { WELD_TYPES } = Constants;\n\n@classic\nexport default class CertificateMap extends Component.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service\n session;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n userSession;\n\n @alias('data.welderStandardOptions')\n standardOptions;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.weldingProcessOptions')\n weldingProcessOptionsAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionOptionsAll;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('model.certificateStandard.code')\n currentIndustryCode;\n\n @alias('model.certificateStandard.id')\n currentStandard;\n\n @notEmpty('currentStandard')\n hasStandard;\n\n @empty('currentStandard')\n fieldsDisabled;\n\n @alias('data.examiningBodyOptions')\n examiningBodyOptions;\n\n @alias('model.noPieces')\n noPieces;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @alias('model')\n qmatrix;\n\n // Flag indicating whether the Map is being generated\n isGeneratingCertificateMap = false;\n\n isGeneratingWelderMap = false;\n\n showCertificateMap = true;\n\n @alias('showCertificateMap')\n isShowingCertificateMapTab;\n\n @not('showCertificateMap')\n isShowingWelderMapTab;\n\n @equal('model.certificateWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n get isEditing() {\n return this.userSession.canCreateQMatrix;\n }\n\n @computed('qmatrix.certificateStandard')\n get isISO96061() {\n let { qmatrix } = this;\n let certificateStandard = get(qmatrix, 'certificateStandard');\n if (!isEmpty(certificateStandard)) {\n return isWelderStandardISO96061(certificateStandard);\n }\n return false;\n }\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey(\n 'weldingProcessOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id'\n )\n weldingProcessOptions;\n\n @filterFromCollectionByKey(\n 'weldingPositionOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id'\n )\n weldingPositionOptions;\n\n @computed('fieldsDisabled', 'certificateStandard')\n get baseMaterialDisabled() {\n let standard = get(this, 'model.certificateStandard');\n if (!isEmpty(standard)) {\n let standardName = get(standard, 'standard');\n if (isWelderStandardISO96061(standard) && standardName === 'ISO 9606-1') {\n return true;\n }\n }\n return this.fieldsDisabled;\n }\n\n _searchWelder(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.data.searchWelder(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n @action\n setCertificateStandard(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_STANDARD, value);\n }\n\n @action\n setCertificateExaminingBody(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_EXAMINING_BODY, value);\n }\n\n @action\n setCertificateWeldType(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELD_TYPE, value);\n this.setModelValue(WELDING_MAP.CERTIFICATE_OVERLAY_TYPE, null);\n }\n\n @action\n setCertificateWeldingProcessRoot(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELDING_PROCESS_ROOT, value);\n }\n\n @action\n setCertificateWeldingProcessFill(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELDING_PROCESS_FILL, value);\n }\n\n @action\n setCertificateWeldingProcessCap(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELDING_PROCESS_CAP, value);\n }\n\n @action\n setCertificateWeldingDetails(value) {\n this.setModelCollection(WELDING_MAP.CERTIFICATE_WELDING_DETAILS, value);\n }\n\n @action\n setCertificateBaseMaterial1Group(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_BASE_MATERIAL1_GROUP, value);\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n setCertificateBaseMaterial2Group(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_BASE_MATERIAL2_GROUP, value);\n }\n\n @action\n setCertificateFillerMaterialGroupRoot(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_FILLER_MATERIAL_GROUP_ROOT, value);\n }\n\n @action\n searchFillerMaterialGroup(term) {\n return this.data.findFillerMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n setCertificateFillerMaterialGroupFill(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_FILLER_MATERIAL_GROUP_FILL, value);\n }\n\n @action\n setCertificateFillerMaterialGroupCap(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_FILLER_MATERIAL_GROUP_CAP, value);\n }\n\n @action\n searchWelder(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchWelder, term, resolve, reject, 500);\n });\n }\n\n @action\n setCertificateWelders(value) {\n this.setModelCollection(WELDING_MAP.CERTIFICATE_WELDERS, value);\n }\n\n @action\n setCertificateWeldingPositionRoot(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELDING_POSITION_ROOT, value);\n }\n\n @action\n setCertificateWeldingPositionFill(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELDING_POSITION_FILL, value);\n }\n\n @action\n setCertificateWeldingPositionCap(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_WELDING_POSITION_CAP, value);\n }\n\n @action\n setCertificateSpecialRequirements(value) {\n this.setModelCollection(WELDING_MAP.CERTIFICATE_SPECIAL_REQUIREMENTS, value);\n }\n\n @action\n setCertificateOverlayType(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_OVERLAY_TYPE, value);\n }\n\n @action\n setCertificateSearchExpired(value) {\n this.setModelValue(WELDING_MAP.CERTIFICATE_SEARCH_EXPIRED, value);\n }\n\n @action\n generateMap() {\n let { model: qmatrix, alert, intl } = this;\n if (!qmatrix.validate()) {\n alert.error(intl.t('generic.error.invalid-form'));\n return;\n }\n if (!this.noPieces) {\n set(this, 'isGeneratingCertificateMap', true);\n this.model.retrieveAllRelations().then((relations) => {\n let json = this.model.convertToJSON(relations);\n this.model\n .generateCertificateMap(json)\n .then((result) => {\n set(this, 'model.currentCertificateMap', result);\n })\n .catch(() => {\n alert.error(intl.t('components.model-welding-map.qmatrix-generating-error'));\n })\n .finally(() => {\n set(this, 'isGeneratingCertificateMap', false);\n });\n });\n }\n }\n\n @action\n generateWelderMap() {\n let { model: qmatrix, alert, intl } = this;\n if (!qmatrix.validate()) {\n alert.error(intl.t('generic.error.invalid-form'));\n return;\n }\n if (!this.noPieces) {\n set(this, 'isGeneratingWelderMap', true);\n this.model.retrieveAllRelations().then((relations) => {\n let json = this.model.convertToJSON(relations);\n this.model\n .generateWelderMap(json)\n .then((result) => {\n set(this, 'model.currentWelderMap', result);\n })\n .catch(() => {\n alert.error(intl.t('components.model-welding-map.qmatrix-generating-error'));\n })\n .finally(() => {\n set(this, 'isGeneratingWelderMap', false);\n });\n });\n }\n }\n\n @action\n chooseCertificateMap() {\n this.toggleProperty('showCertificateMap');\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\\n \\n\\n {{#if this.userSession.canSave}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless this.qmatrix.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n
\\n
\\n
    \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.welding-map-tab\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.pqr-map-tab\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.certificate-map-tab\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.wps-map-tab\\\"\\n }}\\n
  • \\n
\\n
\\n
\\n {{outlet}}\\n
\\n
\\n
\\n
\", {\"contents\":\"\\n \\n\\n \\n\\n {{#if this.userSession.canSave}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#unless this.qmatrix.isNew}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n
\\n
\\n
    \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.welding-map-tab\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.pqr-map-tab\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.certificate-map-tab\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"components.model-welding-map.edit.wps-map-tab\\\"\\n }}\\n
  • \\n
\\n
\\n
\\n {{outlet}}\\n
\\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/model-welding-map/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-map/edit.hbs\"}});\nimport { service } from '@ember/service';\nimport { alias, equal } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport ModelSetter from 'weldnote/mixins/model-setters';\n\nexport default class Edit extends Base.extend(ModelSetter) {\n\n get isIndexRoute() {\n return this.router.isActive('welding-map.index');\n }\n\n get isPQRMapRoute() {\n return this.router.isActive('welding-map.pqrMap');\n }\n\n get isCertificateMapRoute() {\n return this.router.isActive('welding-map.certificateMap');\n }\n\n get isWPSMapRoute() {\n return this.router.isActive('welding-map.wpsMap')\n }\n\n @service\n weldnoteData;\n\n @service\n session;\n\n @service\n router;\n\n @service('instanceTracker')\n tracker;\n\n @alias('model')\n qmatrix;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n \\n
\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n
\\n \\n
\",\"moduleName\":\"weldnote/components/model-welding-map/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-map/new.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/welding-map-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\n\nconst { WELDING_MAP } = Rules;\n\n@classic\nexport default class New extends Base.extend(ModelSetter) {\n @service('weldnoteData')\n data;\n\n @service('instanceTracker')\n tracker;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n get isEditing() {\n return this.userSession.canCreateQMatrix;\n }\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n @alias('data.companyOptions')\n companyOptions;\n\n init() {\n super.init(...arguments);\n if (this.data.hasOnly1Company) {\n this.model.set('company', this.data.firstCompany);\n }\n set(this, 'model.unitSystem', this.userSession.unitSystem);\n }\n\n _postSave(model, options) {\n if (options.isNew) {\n this.tracker.savedWeldingMap();\n }\n }\n\n @action\n setDesignation(designation) {\n this.setModelValue(WELDING_MAP.DESIGNATION, designation);\n }\n\n @action\n setMapDate(value) {\n this.setModelValue(WELDING_MAP.MAP_DATE, value);\n }\n\n @action\n setCompany(company) {\n this.setModelValue(WELDING_MAP.COMPANY, company);\n }\n\n customDuplicateMessage() {\n return {\n attribute: 'designation',\n message: this.intl.t('welding-map-new.errors.designation.duplicate'),\n };\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n {{#if this.isGeneratingPQRMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n {{#if this.isGeneratingPQRMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\",\"moduleName\":\"weldnote/components/model-welding-map/pqr-map.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-map/pqr-map.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty, empty, equal } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, action, computed, set } from '@ember/object';\nimport Rules from 'weldnote/utils/welding-map-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\n\nconst { WELDING_MAP } = Rules;\n\nconst { WELD_TYPES } = Constants;\n\n@classic\nexport default class PqrMap extends Component.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service\n session;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n userSession;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.weldingProcessOptions')\n weldingProcessOptionsAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionOptionsAll;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('model.pqrStandard.code')\n currentIndustryCode;\n\n @alias('model.pqrStandard.id')\n currentStandard;\n\n @notEmpty('currentStandard')\n hasStandard;\n\n @empty('currentStandard')\n fieldsDisabled;\n\n @alias('data.examiningBodyOptions')\n examiningBodyOptions;\n\n @alias('model.noPieces')\n noPieces;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @equal('model.pqrWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n get temperatureUnit() {\n return this.qmatrix.temperatureUnit;\n }\n\n get distanceUnit() {\n return this.qmatrix.distanceUnit;\n }\n\n get heatDistanceUnit() {\n return this.qmatrix.heatDistanceUnit;\n }\n\n @alias('model')\n qmatrix;\n\n // Flag indicating whether the PQRMap is being generated\n isGeneratingPQRMap = false;\n\n get isEditing() {\n return this.userSession.canCreateQMatrix;\n }\n\n @computed('fieldsDisabled', 'model.pqrFillerMaterialRoot')\n get searchFillerMaterialRootGroupDisabled() {\n return (\n this.fieldsDisabled ||\n isEmpty(this.model.belongsTo(WELDING_MAP.PQR_FILLER_MATERIAL_ROOT).id())\n );\n }\n\n @computed('fieldsDisabled', 'model.pqrFillerMaterialFill')\n get searchFillerMaterialFillGroupDisabled() {\n return (\n this.fieldsDisabled ||\n isEmpty(this.model.belongsTo(WELDING_MAP.PQR_FILLER_MATERIAL_FILL).id())\n );\n }\n\n @computed('fieldsDisabled', 'model.pqrFillerMaterialCap')\n get searchFillerMaterialCapGroupDisabled() {\n return (\n this.fieldsDisabled || isEmpty(this.model.belongsTo(WELDING_MAP.PQR_FILLER_MATERIAL_CAP).id())\n );\n }\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey(\n 'weldingProcessOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id',\n )\n weldingProcessOptions;\n\n @filterFromCollectionByKey(\n 'weldingPositionOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id',\n )\n weldingPositionOptions;\n\n setPropertyIfEmpty(property, newValue) {\n let value = this.getModelValue(property);\n if (isEmpty(value)) {\n this.setModelValue(property, newValue);\n } else {\n let valueId = get(value, 'id');\n if (isEmpty(valueId)) {\n this.setModelValue(property, newValue);\n }\n }\n }\n\n @action\n setPqrStandard(value) {\n this.setModelValue(WELDING_MAP.PQR_STANDARD, value);\n this.setModelValue(WELDING_MAP.PQR_POST_WELD_HEAT_TREATMENT_PRESENCE, null);\n this.setModelValue(WELDING_MAP.PQR_POST_WELD_HEAT_TREATMENT_TEMPERATURE, null);\n this.setModelValue(WELDING_MAP.PQR_WELDING_PROCESS_ROOT, null);\n this.setModelValue(WELDING_MAP.PQR_WELDING_PROCESS_FILL, null);\n this.setModelValue(WELDING_MAP.PQR_WELDING_PROCESS_CAP, null);\n this.setModelValue(WELDING_MAP.PQR_WELD_TYPE, null);\n this.setModelValue(WELDING_MAP.PQR_WELDING_POSITION_ROOT, null);\n this.setModelValue(WELDING_MAP.PQR_WELDING_POSITION_FILL, null);\n this.setModelValue(WELDING_MAP.PQR_WELDING_POSITION_CAP, null);\n this.setModelValue(WELDING_MAP.PQR_BASE_MATERIAL1_GROUP, null);\n this.setModelValue(WELDING_MAP.PQR_BASE_MATERIAL2_GROUP, null);\n this.setModelValue(WELDING_MAP.PQR_OVERLAY_TYPE, null);\n this.setPropertyIfEmpty(WELDING_MAP.WPS_STANDARD, value);\n }\n\n @action\n setPqrExaminingBody(value) {\n this.setModelValue(WELDING_MAP.PQR_EXAMINING_BODY, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_EXAMINING_BODY, value);\n }\n\n @action\n setPqrWeldType(value) {\n this.setModelValue(WELDING_MAP.PQR_WELD_TYPE, value);\n this.setModelValue(WELDING_MAP.PQR_OVERLAY_TYPE, null);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELD_TYPE, value);\n this.setPropertyIfEmpty(WELDING_MAP.WPS_WELD_TYPE, value);\n }\n\n @action\n setPqrWeldingProcessRoot(value) {\n this.setModelValue(WELDING_MAP.PQR_WELDING_PROCESS_ROOT, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELDING_PROCESS_ROOT, value);\n this.setPropertyIfEmpty(WELDING_MAP.WPS_WELDING_PROCESS_ROOT, value);\n }\n\n @action\n setPqrWeldingProcessFill(value) {\n this.setModelValue(WELDING_MAP.PQR_WELDING_PROCESS_FILL, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELDING_PROCESS_FILL, value);\n this.setPropertyIfEmpty(WELDING_MAP.WPS_WELDING_PROCESS_FILL, value);\n }\n\n @action\n setPqrWeldingProcessCap(value) {\n this.setModelValue(WELDING_MAP.PQR_WELDING_PROCESS_CAP, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELDING_PROCESS_CAP, value);\n this.setPropertyIfEmpty(WELDING_MAP.WPS_WELDING_PROCESS_CAP, value);\n }\n\n @action\n setPqrWeldingDetails(value) {\n this.setModelCollection(WELDING_MAP.PQR_WELDING_DETAILS, value);\n }\n\n @action\n setPqrBaseMaterial1Group(value) {\n this.setModelValue(WELDING_MAP.PQR_BASE_MATERIAL1_GROUP, value);\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n setPqrBaseMaterial2Group(value) {\n this.setModelValue(WELDING_MAP.PQR_BASE_MATERIAL2_GROUP, value);\n }\n\n @action\n setPqrFillerMaterialRoot(value) {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_ROOT, value);\n }\n\n @action\n removePqrFillerMaterialRoot() {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_ROOT, null);\n this.setModelValue(WELDING_MAP.PQR_SEARCH_FILLER_MATERIAL_ROOT_GROUP, false);\n }\n\n @action\n setPqrFillerMaterialFill(value) {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_FILL, value);\n }\n\n @action\n removePqrFillerMaterialFill() {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_FILL, null);\n this.setModelValue(WELDING_MAP.PQR_SEARCH_FILLER_MATERIAL_FILL_GROUP, false);\n }\n\n @action\n setPqrFillerMaterialCap(value) {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_CAP, value);\n }\n\n @action\n removePqrFillerMaterialCap() {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_CAP, null);\n this.setModelValue(WELDING_MAP.PQR_SEARCH_FILLER_MATERIAL_CAP_GROUP, false);\n }\n\n @action\n setPqrFillerMaterialGroupRoot(value) {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_GROUP_ROOT, value);\n }\n\n @action\n setPqrFillerMaterialGroupFill(value) {\n this.setModelValue(WELDING_MAP.PQR_FILLER_MATERIAL_GROUP_FILL, value);\n }\n\n @action\n setPqrHeatInput(value) {\n this.setModelDecimalValue(WELDING_MAP.PQR_HEAT_INPUT, value);\n }\n\n @action\n setPqrPreheatTemperature(value) {\n this.setModelValue(WELDING_MAP.PQR_PREHEAT_TEMPERATURE, value);\n }\n\n @action\n setPqrPostWeldHeatTreatmentTemperature(value) {\n this.setModelValue(WELDING_MAP.PQR_POST_WELD_HEAT_TREATMENT_TEMPERATURE, value);\n }\n\n @action\n setPqrImpactTestTemperature(value) {\n this.setModelDecimalValue(WELDING_MAP.PQR_IMPACT_TEST_TEMPERATURE, value);\n }\n\n @action\n setPqrHardnessTestRequired(value) {\n this.setModelValue(WELDING_MAP.PQR_HARDNESS_TEST_REQUIRED, value);\n }\n\n @action\n setPqrSearchFillerMaterialRootGroup(value) {\n this.setModelValue(WELDING_MAP.PQR_SEARCH_FILLER_MATERIAL_ROOT_GROUP, value);\n }\n\n @action\n setPqrSearchFillerMaterialFillGroup(value) {\n this.setModelValue(WELDING_MAP.PQR_SEARCH_FILLER_MATERIAL_FILL_GROUP, value);\n }\n\n @action\n setPqrSearchFillerMaterialCapGroup(value) {\n this.setModelValue(WELDING_MAP.PQR_SEARCH_FILLER_MATERIAL_CAP_GROUP, value);\n }\n\n @action\n setPqrThroatThickness(value) {\n this.setModelDecimalValue(WELDING_MAP.PQR_THROAT_THICKNESS, value);\n }\n\n @action\n setPqrSpecialRequirements(value) {\n this.setModelCollection(WELDING_MAP.PQR_SPECIAL_REQUIREMENTS, value);\n }\n\n @action\n setPqrOverlayType(value) {\n this.setModelValue(WELDING_MAP.PQR_OVERLAY_TYPE, value);\n }\n\n @action\n setPqrWeldingPositionRoot(value) {\n this.setModelValue(WELDING_MAP.PQR_WELDING_POSITION_ROOT, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELDING_POSITION_ROOT, value);\n }\n\n @action\n setPqrWeldingPositionFill(value) {\n this.setModelValue(WELDING_MAP.PQR_WELDING_POSITION_FILL, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELDING_POSITION_FILL, value);\n }\n\n @action\n setPqrWeldingPositionCap(value) {\n this.setModelValue(WELDING_MAP.PQR_WELDING_POSITION_CAP, value);\n this.setPropertyIfEmpty(WELDING_MAP.CERTIFICATE_WELDING_POSITION_CAP, value);\n }\n\n @action\n generateMap() {\n let { model: qmatrix, alert, intl } = this;\n if (!qmatrix.validate()) {\n alert.error(intl.t('generic.error.invalid-form'));\n return;\n }\n if (!this.noPieces) {\n set(this, 'isGeneratingPQRMap', true);\n this.model.retrieveAllRelations().then((relations) => {\n let json = this.model.convertToJSON(relations);\n this.model\n .generatePQRMap(json)\n .then((result) => {\n set(this, 'model.currentPQRMap', result);\n })\n .catch(() => {\n alert.error(intl.t('components.model-welding-map.qmatrix-generating-error'));\n })\n .finally(() => {\n set(this, 'isGeneratingPQRMap', false);\n });\n });\n }\n }\n\n @action\n setPqrPostWeldHeatTreatmentTemperaturePresence(value) {\n this.setModelValue(WELDING_MAP.PQR_POST_WELD_HEAT_TREATMENT_PRESENCE, value);\n }\n\n @action\n setPqrSearchByWeldedThickness(value) {\n this.setModelValue(WELDING_MAP.PQR_SEARCH_BY_WELDED_THICKNESS, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n
\\n {{#if this.isShowingWpsMapTab}}\\n
\\n \\n \\n {{#if this.isGeneratingWPSMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{else}}\\n
\\n \\n \\n {{#if this.isGeneratingWPSMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type option}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n {{lov.label}}\\n \\n {{option.visualLabel}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n
\\n {{#if this.isShowingWpsMapTab}}\\n
\\n \\n \\n {{#if this.isGeneratingWPSMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{else}}\\n
\\n \\n \\n {{#if this.isGeneratingWPSMap}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-map.common.preview-map-btn\\\"}}\\n \\n {{#if this.noPieces}}\\n \\n {{t \\\"components.model-welding-map.common.preview-map-no-pieces\\\"}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/model-welding-map/wps-map.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-map/wps-map.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, notEmpty, empty, equal, not } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { debounce } from '@ember/runloop';\nimport { set, get, action, computed } from '@ember/object';\nimport RSVP from 'rsvp';\nimport Rules from 'weldnote/utils/welding-map-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\n\nconst { WELDING_MAP } = Rules;\n\nconst { WELD_TYPES, WPS_TYPE } = Constants;\n\n@classic\nexport default class WpsMap extends Component.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service\n session;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n userSession;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.weldingProcessOptions')\n weldingProcessOptionsAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionOptionsAll;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('model.wpsStandard.code')\n currentIndustryCode;\n\n @alias('model.wpsStandard.id')\n currentStandard;\n\n @notEmpty('currentStandard')\n hasStandard;\n\n @empty('currentStandard')\n fieldsDisabled;\n\n @alias('model.noPieces')\n noPieces;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @alias('model')\n qmatrix;\n\n @equal('model.wpsWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n get temperatureUnit() {\n return this.qmatrix.temperatureUnit;\n }\n\n get distanceUnit() {\n return this.qmatrix.distanceUnit;\n }\n\n get heatDistanceUnit() {\n return this.qmatrix.heatDistanceUnit;\n }\n\n showWpsMap = true;\n\n get isEditing() {\n return this.userSession.canCreateQMatrix;\n }\n\n @alias('showWpsMap')\n isShowingWpsMapTab;\n\n @not('showWpsMap')\n isShowingPreliminaryMapTab;\n\n @computed('fieldsDisabled', 'model.wpsFillerMaterialRoot')\n get searchFillerMaterialRootGroupDisabled() {\n return (\n this.fieldsDisabled ||\n isEmpty(this.model.belongsTo(WELDING_MAP.WPS_FILLER_MATERIAL_ROOT).id())\n );\n }\n\n @computed('fieldsDisabled', 'model.wpsFillerMaterialFill')\n get searchFillerMaterialFillGroupDisabled() {\n return (\n this.fieldsDisabled ||\n isEmpty(this.model.belongsTo(WELDING_MAP.WPS_FILLER_MATERIAL_FILL).id())\n );\n }\n\n @computed('fieldsDisabled', 'model.wpsFillerMaterialCap')\n get searchFillerMaterialCapGroupDisabled() {\n return (\n this.fieldsDisabled || isEmpty(this.model.belongsTo(WELDING_MAP.WPS_FILLER_MATERIAL_CAP).id())\n );\n }\n\n // Flag indicating whether the PQRMap is being generated\n isGeneratingWPSMap = false;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey(\n 'weldingProcessOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id',\n )\n weldingProcessOptions;\n\n _searchWPS(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.data.searchWPS(term).then(\n (data) => resolve(data),\n (err) => reject(err),\n );\n }\n\n @action\n setWpsStandard(value) {\n this.setModelValue(WELDING_MAP.WPS_STANDARD, value);\n this.setModelValue(WELDING_MAP.WPS_POST_WELD_HEAT_TREATMENT_PRESENCE, null);\n this.setModelValue(WELDING_MAP.WPS_POST_WELD_HEAT_TREATMENT_TEMPERATURE, null);\n }\n\n @action\n setWpsWeldType(value) {\n this.setModelValue(WELDING_MAP.WPS_WELD_TYPE, value);\n this.setModelValue(WELDING_MAP.WPS_OVERLAY_TYPE, null);\n }\n\n @action\n setWpsWeldingProcessRoot(value) {\n this.setModelValue(WELDING_MAP.WPS_WELDING_PROCESS_ROOT, value);\n }\n\n @action\n setWpsWeldingProcessFill(value) {\n this.setModelValue(WELDING_MAP.WPS_WELDING_PROCESS_FILL, value);\n }\n\n @action\n setWpsWeldingProcessCap(value) {\n this.setModelValue(WELDING_MAP.WPS_WELDING_PROCESS_CAP, value);\n }\n\n @action\n setWpsWeldingDetails(value) {\n this.setModelCollection(WELDING_MAP.WPS_WELDING_DETAILS, value);\n }\n\n @action\n setWpsBaseMaterial1Group(value) {\n this.setModelValue(WELDING_MAP.WPS_BASE_MATERIAL1_GROUP, value);\n }\n\n @action\n setWpsBaseMaterial2Group(value) {\n this.setModelValue(WELDING_MAP.WPS_BASE_MATERIAL2_GROUP, value);\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n setWpsFillerMaterialRoot(value) {\n this.setModelValue(WELDING_MAP.WPS_FILLER_MATERIAL_ROOT, value);\n }\n\n @action\n removeWpsFillerMaterialRoot() {\n this.setModelValue(WELDING_MAP.WPS_FILLER_MATERIAL_ROOT, null);\n this.setModelValue(WELDING_MAP.WPS_SEARCH_FILLER_MATERIAL_ROOT_GROUP, false);\n }\n\n @action\n setWpsFillerMaterialFill(value) {\n this.setModelValue(WELDING_MAP.WPS_FILLER_MATERIAL_FILL, value);\n }\n\n @action\n removeWpsFillerMaterialFill() {\n this.setModelValue(WELDING_MAP.WPS_FILLER_MATERIAL_FILL, null);\n this.setModelValue(WELDING_MAP.WPS_SEARCH_FILLER_MATERIAL_FILL_GROUP, false);\n }\n\n @action\n setWpsFillerMaterialCap(value) {\n this.setModelValue(WELDING_MAP.WPS_FILLER_MATERIAL_CAP, value);\n }\n\n @action\n removeWpsFillerMaterialCap() {\n this.setModelValue(WELDING_MAP.WPS_FILLER_MATERIAL_CAP, null);\n this.setModelValue(WELDING_MAP.WPS_SEARCH_FILLER_MATERIAL_CAP_GROUP, false);\n }\n\n @action\n setWpsHeatInput(value) {\n this.setModelDecimalValue(WELDING_MAP.WPS_HEAT_INPUT, value);\n }\n\n @action\n setWpsPreheatTemperature(value) {\n this.setModelValue(WELDING_MAP.WPS_PREHEAT_TEMPERATURE, value);\n }\n\n @action\n setWpsPostWeldHeatTreatmentTemperature(value) {\n this.setModelValue(WELDING_MAP.WPS_POST_WELD_HEAT_TREATMENT_TEMPERATURE, value);\n }\n\n @action\n setWpsWeldingProcedureSpecifications(value) {\n this.setModelCollection(WELDING_MAP.WPS_WELDING_PROCEDURE_SPECIFICATIONS, value);\n }\n\n @action\n setWpsSearchFillerMaterialRootGroup(value) {\n this.setModelValue(WELDING_MAP.WPS_SEARCH_FILLER_MATERIAL_ROOT_GROUP, value);\n }\n\n @action\n setWpsSearchFillerMaterialFillGroup(value) {\n this.setModelValue(WELDING_MAP.WPS_SEARCH_FILLER_MATERIAL_FILL_GROUP, value);\n }\n\n @action\n setWpsSearchFillerMaterialCapGroup(value) {\n this.setModelValue(WELDING_MAP.WPS_SEARCH_FILLER_MATERIAL_CAP_GROUP, value);\n }\n\n @action\n setWpsThroatThickness(value) {\n this.setModelDecimalValue(WELDING_MAP.WPS_THROAT_THICKNESS, value);\n }\n\n @action\n searchWPS(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchWPS, term, resolve, reject, 500);\n });\n }\n\n @action\n setWpsSpecialRequirements(value) {\n this.setModelCollection(WELDING_MAP.WPS_SPECIAL_REQUIREMENTS, value);\n }\n\n @action\n setWpsOverlayType(value) {\n this.setModelValue(WELDING_MAP.WPS_OVERLAY_TYPE, value);\n }\n\n @action\n generateMap() {\n let { model: qmatrix, alert, intl } = this;\n if (!qmatrix.validate()) {\n alert.error(intl.t('generic.error.invalid-form'));\n return;\n }\n if (!this.noPieces) {\n set(this, 'isGeneratingWPSMap', true);\n this.model.retrieveAllRelations().then((relations) => {\n let json = this.model.convertToJSON(relations);\n json.wpsType = WPS_TYPE.PRIMARY;\n this.model\n .generateWPSMap(json)\n .then((result) => {\n set(this, 'model.currentWPSMap', result);\n })\n .catch(() => {\n alert.error(intl.t('components.model-welding-map.qmatrix-generating-error'));\n })\n .finally(() => {\n set(this, 'isGeneratingWPSMap', false);\n });\n });\n }\n }\n\n @action\n generatePreliminaryWpsMap() {\n let { model: qmatrix, alert, intl } = this;\n if (!qmatrix.validate()) {\n alert.error(intl.t('generic.error.invalid-form'));\n return;\n }\n if (!this.noPieces) {\n set(this, 'isGeneratingWPSMap', true);\n qmatrix.retrieveAllRelations().then((relations) => {\n let json = qmatrix.convertToJSON(relations);\n json.wpsType = WPS_TYPE.PRELIMINARY;\n qmatrix\n .generateWPSMap(json)\n .then((result) => {\n set(this, 'model.currentPWPSMap', result);\n })\n .catch(() => {\n alert.error(intl.t('components.model-welding-map.qmatrix-generating-error'));\n })\n .finally(() => {\n set(this, 'isGeneratingWPSMap', false);\n });\n });\n }\n }\n\n @action\n setWpsPostWeldHeatTreatmentTemperaturePresence(value) {\n this.setModelValue(WELDING_MAP.WPS_POST_WELD_HEAT_TREATMENT_PRESENCE, value);\n }\n\n @action\n setWpsSearchByWeldedThickness(value) {\n this.setModelValue(WELDING_MAP.WPS_SEARCH_BY_WELDED_THICKNESS, value);\n }\n\n @action\n chooseWpsMap() {\n this.toggleProperty('showWpsMap');\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-position/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-position/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n weldingPosition;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n {{#if this.showPcPlusPfChoice}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.messages.source-is-pc-plus-pf\\\"\\n }}

\\n
\\n
\\n {{#if this.setupButtonLabels.isRunning}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.messages.loading-pc-plus-pf\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.buttons.choose-from\\\"\\n pqr=this.firstPqrLabel\\n }}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.buttons.choose-from\\\"\\n pqr=this.secondPqrLabel\\n }}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showPasses}}\\n \\n \\n {{#if this.loadPasses.isRunning}}\\n \\n {{else}}\\n {{#unless (is-empty this.selectedLayer)}}\\n

{{this.textMessage}}

\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.passesToChoose as |pass|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.pass-number-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.welding-process-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.filler-material-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.current-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.voltage-header\\\"\\n }}
{{pass.passNumber}}\\n {{pass.weldingProcess.visualLabel}}\\n {{pass.typeCurrent.visualLabel}}\\n \\n {{wps-format-filler-material pass=pass wps=this.wps}}\\n {{#unless (is-empty pass.fillerMaterialDiameters)}}\\n \\n {{array-join\\n (map this.formatDiameter pass.fillerMaterialDiameters)\\n separator=\\\" ; \\\"\\n }}\\n ({{@units.distance}})\\n \\n {{/unless}}\\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.buttons.choose\\\"\\n }}\\n \\n
\\n {{/unless}}\\n {{/if}}\\n
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n {{#if this.showPcPlusPfChoice}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.messages.source-is-pc-plus-pf\\\"\\n }}

\\n
\\n
\\n {{#if this.setupButtonLabels.isRunning}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.messages.loading-pc-plus-pf\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.buttons.choose-from\\\"\\n pqr=this.firstPqrLabel\\n }}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.buttons.choose-from\\\"\\n pqr=this.secondPqrLabel\\n }}\\n \\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showPasses}}\\n \\n \\n {{#if this.loadPasses.isRunning}}\\n \\n {{else}}\\n {{#unless (is-empty this.selectedLayer)}}\\n

{{this.textMessage}}

\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.passesToChoose as |pass|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.pass-number-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.welding-process-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.filler-material-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.current-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.voltage-header\\\"\\n }}
{{pass.passNumber}}\\n {{pass.weldingProcess.visualLabel}}\\n {{pass.typeCurrent.visualLabel}}\\n \\n {{wps-format-filler-material pass=pass wps=this.wps}}\\n {{#unless (is-empty pass.fillerMaterialDiameters)}}\\n \\n {{array-join\\n (map this.formatDiameter pass.fillerMaterialDiameters)\\n separator=\\\" ; \\\"\\n }}\\n ({{@units.distance}})\\n \\n {{/unless}}\\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/add-new-linked-parameter.buttons.choose\\\"\\n }}\\n \\n
\\n {{/unless}}\\n {{/if}}\\n
\\n
\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/add-new-linked-parameter.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/add-new-linked-parameter.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { calculateLayerOptions } from 'weldnote/utils/welding/welding-process';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport { htmlSafe } from '@ember/template';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELDING_LAYER_OPTIONS } = Constants;\n\n@classic\nexport default class AddNewLinkedParameter extends Component {\n @service('weldnote-data')\n data;\n\n @service\n store;\n\n @service\n intl;\n\n @service\n userSession;\n\n @tracked\n passesToChoose = null;\n\n pqrLabel = null;\n\n setupButtonLabels = task(\n {\n drop: true,\n },\n async () => {\n await timeout(300);\n let { wps, store } = this;\n let pqrFirstId = get(wps.mainPqr, 'id');\n let pqrSecondId = get(wps.multiplePositionPqrRoot, 'id');\n let firstPqr = await store.findRecord('pqr', pqrFirstId);\n let secondPqr = await store.findRecord('pqr', pqrSecondId);\n set(this, 'firstPqr', firstPqr);\n set(this, 'secondPqr', secondPqr);\n set(this, 'firstPqrLabel', firstPqr.certificateNumber);\n set(this, 'secondPqrLabel', secondPqr.certificateNumber);\n }\n );\n\n @computed('intl.locale', 'pqrLabel', 'selectedLayer')\n get textMessage() {\n let {\n intl,\n selectedLayer: { key: layerValue },\n } = this;\n let process = '';\n let layerName = '';\n if (layerValue === 'ROOT') {\n process = get(this, 'wps.weldingProcessRoot.shortDesignation');\n layerName = intl.t('generic.welding.processes.process1');\n } else if (layerValue === 'FILL') {\n process = get(this, 'wps.weldingProcessFill.shortDesignation');\n layerName = intl.t('generic.welding.processes.process2');\n } else if (layerValue === 'CAP') {\n process = get(this, 'wps.weldingProcessCap.shortDesignation');\n layerName = intl.t('generic.welding.processes.process3');\n }\n let weldingProcess = `${process}`;\n let layer = `${layerName}`;\n return intl.t(\n 'components.model-welding-procedure-specification/add-new-linked-parameter.messages.table',\n {\n weldingProcess: htmlSafe(weldingProcess),\n layer: htmlSafe(layer),\n pqr: this.pqrLabel,\n htmlSafe: true,\n }\n );\n }\n\n loadPasses = task(\n {\n drop: true,\n },\n async () => {\n await timeout(300);\n let {\n wps,\n store,\n selectedLayer: { key: layerValue, label: processName },\n } = this;\n\n let pqrId = null;\n let pqr = null;\n if (wps.isAdvancedWPS) {\n // We need to load the correct PQR depending on what process\n // we have on the WPS\n if (layerValue === 'ROOT') {\n pqrId = get(wps.mainPqr, 'id');\n } else if (layerValue === 'FILL') {\n pqrId = get(wps, 'pqrFill.id');\n } else if (layerValue === 'CAP') {\n pqrId = get(wps, 'pqrCap.id');\n }\n\n if (!isEmpty(pqrId)) {\n pqr = await store.findRecord('pqr', pqrId);\n set(this, 'pqrLabel', pqr.certificateNumber);\n let passes = await store.query('pqr-welding-parameter', { 'filter[pqr.id]': pqrId, 'paging[limit]': 300 });\n let passesOfLayer = passes.filter((e) => e.layer === layerValue);\n this.passesToChoose = passesOfLayer;\n }\n } else if (wps.isPcPlusPfPosition) {\n // TODO: This one here I don't think it works there's no `this.multiplePositionPqr`\n let passes = await store.query('pqr-welding-parameter', { 'filter[pqr.id]': get(this.multiplePositionPqr, 'id'), 'paging[limit]': 300 });\n \n this.passesToChoose = passes;\n set(this, 'pqrLabel', this.multiplePositionPqr.certificateNumber);\n } else {\n let pqrId = get(wps.mainPqr, 'id');\n pqr = await store.findRecord('pqr', pqrId);\n let passes = await store.query('pqr-welding-parameter', { 'filter[pqr.id]': pqrId, 'paging[limit]': 300 });\n let passesOfLayer = passes.filter((e) => e.layer === layerValue);\n this.passesToChoose = passesOfLayer;\n set(this, 'pqrLabel', pqr.certificateNumber);\n }\n }\n );\n\n @computed('layers.{hasFill,hasCap}')\n get weldingLayerOptions() {\n let { hasFill, hasCap } = this.layers;\n let { data: weldNoteData } = this;\n let data = weldNoteData.weldingLayerOptions;\n\n let result = calculateLayerOptions(data, hasFill, hasCap);\n return result.map((e) => {\n let layer = get(e, 'key');\n let weldingProcess = '';\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n weldingProcess = this.processes.process1;\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n weldingProcess = this.processes.process2;\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n weldingProcess = this.processes.process3;\n }\n return {\n key: get(e, 'key'),\n label: `${weldingProcess}`,\n };\n });\n }\n\n @action\n setLayer(layer) {\n let { wps } = this;\n set(this, 'selectedLayer', layer);\n if (wps.isPcPlusPfPosition) {\n set(this, 'showPcPlusPfChoice', true);\n this.setupButtonLabels.perform();\n } else {\n set(this, 'showPasses', true);\n this.loadPasses.perform();\n }\n }\n\n @action\n chooseFirst(pqr) {\n set(this, 'multiplePositionPqr', pqr);\n set(this, 'showPasses', true);\n this.loadPasses.perform();\n }\n\n @action\n chooseSecond(pqr) {\n set(this, 'multiplePositionPqr', pqr);\n set(this, 'showPasses', true);\n this.loadPasses.perform();\n }\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isRequalificationPeriodRequired}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{welder.welderName}}\\n ({{welder.welderStamp}})\\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/certificate-from-pwps.sections.thickness\\\"\\n }}
\\n \\n \\n \\n \\n \\n {{#if this.showDiameter}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if (or this.hasOnlyRoot this.hasFill this.hasCap)}}\\n
{{t\\n \\\"components.model-welding-procedure-specification/certificate-from-pwps.sections.welding-position\\\"\\n }}
\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n {{#if (has-value this.errors.generic)}}\\n
\\n \\n {{#each this.errors.generic as |error|}}\\n {{error}}\\n {{/each}}\\n \\n
\\n {{/if}}\\n
\\n
\\n
\\n \\n \\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isRequalificationPeriodRequired}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{welder.welderName}}\\n ({{welder.welderStamp}})\\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/certificate-from-pwps.sections.thickness\\\"\\n }}
\\n \\n \\n \\n \\n \\n {{#if this.showDiameter}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if (or this.hasOnlyRoot this.hasFill this.hasCap)}}\\n
{{t\\n \\\"components.model-welding-procedure-specification/certificate-from-pwps.sections.welding-position\\\"\\n }}
\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n {{#if (has-value this.errors.generic)}}\\n
\\n \\n {{#each this.errors.generic as |error|}}\\n {{error}}\\n {{/each}}\\n \\n
\\n {{/if}}\\n
\\n
\\n
\\n \\n \\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/certificate-from-pwps.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/certificate-from-pwps.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty, readOnly } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport {\n isDuplicateError,\n isPermissionDenied,\n isWelderStandardNotSupported,\n} from 'weldnote/utils/json-api-errors';\nimport moment from 'moment';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { isStandardISO } from 'weldnote/utils/standards';\n\nconst { DEFAULT_DATE_FORMAT } = Constants;\n\n@classic\nexport default class CertificateFromPwps extends Component {\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n emissionDate = null;\n\n requalificationPeriod = null;\n\n source = null;\n\n errors = null;\n\n get distanceUnit() {\n return this.source.distanceUnit;\n }\n\n get temperatureUnit() {\n return this.source.temperatureUnit;\n }\n\n @readOnly('userSession.timeUnit')\n timeUnit;\n\n @readOnly('source.standard.code')\n currentIndustryCode;\n\n @readOnly('source.standard.standard')\n standardName;\n\n @readOnly('source.weldingPositionsRoot')\n weldingPositionRootOptions;\n\n @readOnly('source.weldingPositionsFill')\n weldingPositionFillOptions;\n\n @readOnly('source.weldingPositionsCap')\n weldingPositionCapOptions;\n\n @computed('source.{weldingProcessRoot,weldingProcessFill,weldingProcessCap}')\n get hasNoProcesses() {\n let rootId = get(this.source, 'weldingProcessRoot.id');\n let fillId = get(this.source, 'weldingProcessFill.id');\n let capId = get(this.source, 'weldingProcessCap.id');\n return isEmpty(rootId) && isEmpty(fillId) && isEmpty(capId);\n }\n\n @computed('source.weldType')\n get hasWeldType() {\n return !isEmpty(get(this.source, 'weldType.id'));\n }\n\n get unitSystem() {\n return this.source.unitSystem;\n }\n\n @computed('source.{weldingProcessRoot,hasFill,hasCap}')\n get hasOnlyRoot() {\n return (\n !isEmpty(get(this, 'source.weldingProcessRoot.id')) &&\n !get(this, 'hasFill') &&\n !get(this, 'hasCap')\n );\n }\n\n @computed('source.weldingProcessFill,hasCap')\n get hasFill() {\n return !isEmpty(get(this, 'source.weldingProcessFill.id')) && !get(this, 'hasCap');\n }\n\n @notEmpty('source.weldingProcessCap.id')\n hasCap;\n\n @computed('source.isPipe')\n get thicknessColumnSize() {\n if (get(this, 'source.isPipe')) {\n return 2;\n }\n return 1;\n }\n\n @computed('source.standard')\n get isRequalificationPeriodRequired() {\n let { standard } = this.source;\n if (isStandardISO(standard)) {\n return true;\n }\n return false;\n }\n\n @computed('souce.standard')\n get requalificationColumnSize() {\n if (this.isRequalificationPeriodRequired) {\n return '4';\n }\n return '2';\n }\n\n @readOnly('source.isPipe')\n showDiameter;\n\n @readOnly('source.weldingProcessRoot.shortDesignation')\n weldingProcessRoot;\n\n @readOnly('source.weldingProcessFill.shortDesignation')\n weldingProcessFill;\n\n @readOnly('source.weldingProcessCap.shortDesignation')\n weldingProcessCap;\n\n @computed(\n 'source.{thicknessMinimum,thicknessMaximum,diameterMinimum,diameterMaximum,thicknessRootMinimum,thicknessRootMaximum,thicknessFillMinimum,thicknessFillMaximum,thicknessCapMinimum,thicknessCapMaximum}'\n )\n get ranges() {\n let {\n source: {\n thicknessMinimum,\n thicknessMaximum,\n diameterMinimum,\n diameterMaximum,\n thicknessRootMinimum,\n thicknessRootMaximum,\n thicknessFillMinimum,\n thicknessFillMaximum,\n thicknessCapMinimum,\n thicknessCapMaximum,\n },\n } = this;\n return {\n thickness: {\n min: thicknessMinimum,\n max: thicknessMaximum,\n },\n\n diameter: {\n min: diameterMinimum,\n max: diameterMaximum,\n },\n\n thicknessRoot: {\n min: thicknessRootMinimum,\n max: thicknessRootMaximum,\n },\n\n thicknessFill: {\n min: thicknessFillMinimum,\n max: thicknessFillMaximum,\n },\n\n thicknessCap: {\n min: thicknessCapMinimum,\n max: thicknessCapMaximum,\n },\n };\n }\n\n searchWelder = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return get(this, 'data')\n .findWelderByName(term)\n .then((data) => {\n return data;\n });\n }\n );\n\n init() {\n super.init(...arguments);\n set(this, 'errors', []);\n set(this, 'emissionDate', moment());\n let weldingPositionsRoot = get(this, 'weldingPositionRootOptions.length');\n let weldingPositionsFill = get(this, 'weldingPositionFillOptions.length');\n let weldingPositionsCap = get(this, 'weldingPositionCapOptions.length');\n if (weldingPositionsRoot === 1) {\n set(this, 'weldingPositionRoot', get(this, 'weldingPositionRootOptions.firstObject'));\n }\n if (weldingPositionsFill === 1) {\n set(this, 'weldingPositionFill', get(this, 'weldingPositionFillOptions.firstObject'));\n }\n if (weldingPositionsCap === 1) {\n set(this, 'weldingPositionCap', get(this, 'weldingPositionCapOptions.firstObject'));\n }\n }\n\n setRequired(field) {\n let { intl } = this;\n let requiredFieldMessage = intl.t('generic.error.field-required');\n set(this, `errors.${field}`, [requiredFieldMessage]);\n }\n\n validateRequiredFields() {\n let {\n certificateNumber,\n weldedThickness,\n diameter,\n weldingPositionRoot,\n weldingPositionFill,\n weldingPositionCap,\n emissionDate,\n requalificationPeriod,\n welder,\n } = this;\n\n let { intl } = this;\n let requiredFieldMessage = intl.t('generic.error.field-required');\n\n if (isEmpty(certificateNumber)) {\n this.setRequired('certificateNumber');\n }\n if (isEmpty(weldedThickness)) {\n set(this, 'errors.weldedThickness', [{ message: requiredFieldMessage }]);\n }\n\n if (isEmpty(emissionDate)) {\n set(this, 'errors.emissionDate', [requiredFieldMessage]);\n }\n\n if (isEmpty(requalificationPeriod) && this.isRequalificationPeriodRequired) {\n set(this, 'errors.requalificationPeriod', [{ message: requiredFieldMessage }]);\n }\n\n if (isEmpty(welder) || isEmpty(get(welder, 'id'))) {\n set(this, 'errors.welder', [requiredFieldMessage]);\n }\n\n if (get(this, 'showDiameter') && isEmpty(diameter)) {\n set(this, 'errors.diameter', [{ message: requiredFieldMessage }]);\n }\n\n if (isEmpty(weldingPositionRoot)) {\n this.setRequired('weldingPositionRoot');\n }\n\n if (get(this, 'hasFill') || get(this, 'hasCap')) {\n if (isEmpty(weldingPositionFill)) {\n this.setRequired('weldingPositionFill');\n }\n }\n\n if (get(this, 'hasCap') && isEmpty(weldingPositionCap)) {\n this.setRequired('weldingPositionCap');\n }\n }\n\n validateNumericFields() {\n let {\n weldedThickness,\n diameter,\n thicknessRoot,\n thicknessFill,\n thicknessCap,\n requalificationPeriod,\n } = this;\n\n let { intl } = this;\n let numericNumberError = intl.t('generic.error.number-bigger-than-zero');\n\n if (isNaN(parseFloat(weldedThickness)) || parseFloat(weldedThickness) < 0) {\n set(this, 'errors.weldedThickness', [{ message: numericNumberError }]);\n }\n\n if (\n (this.isRequalificationPeriodRequired && isNaN(parseFloat(requalificationPeriod))) ||\n parseFloat(requalificationPeriod) < 0\n ) {\n set(this, 'errors.requalificationPeriod', [{ message: numericNumberError }]);\n }\n\n if (get(this, 'showDiameter') && (isNaN(parseFloat(diameter)) || parseFloat(diameter) < 0)) {\n set(this, 'errors.diameter', [{ message: numericNumberError }]);\n }\n\n if (\n !isEmpty(thicknessRoot) &&\n (isNaN(parseFloat(thicknessRoot)) || parseFloat(thicknessRoot) < 0)\n ) {\n set(this, 'errors.thicknessRoot', [numericNumberError]);\n }\n\n if (\n !isEmpty(thicknessFill) &&\n (isNaN(parseFloat(thicknessFill)) || parseFloat(thicknessFill) < 0)\n ) {\n set(this, 'errors.thicknessFill', [numericNumberError]);\n }\n\n if (\n !isEmpty(thicknessCap) &&\n (isNaN(parseFloat(thicknessCap)) || parseFloat(thicknessCap) < 0)\n ) {\n set(this, 'errors.thicknessCap', [numericNumberError]);\n }\n\n if (requalificationPeriod && isNaN(parseInt(requalificationPeriod))) {\n set(this, 'errors.requalificationPeriod', [{ message: 'Must be a number (of years)' }]);\n }\n\n if (requalificationPeriod && !isNaN(parseInt(requalificationPeriod))) {\n let period = parseInt(requalificationPeriod);\n if (period > 10 || period < 0) {\n set(this, 'errors.requalificationPeriod', [{ message: 'Must be between 0 and 10' }]);\n }\n }\n }\n\n validateThicknessForLayers() {\n let { thicknessRoot, thicknessFill, thicknessCap, weldedThickness, intl } = this;\n\n let totalThickness = parseFloat(weldedThickness);\n if (!isEmpty(weldedThickness) && !isNaN(totalThickness)) {\n let sum = 0;\n if (!isEmpty(thicknessRoot) && !isNaN(parseFloat(thicknessRoot))) {\n sum += parseFloat(thicknessRoot);\n }\n if (!isEmpty(thicknessFill) && !isNaN(parseFloat(thicknessFill))) {\n sum += parseFloat(thicknessFill);\n }\n if (!isEmpty(thicknessCap) && !isNaN(parseFloat(thicknessCap))) {\n sum += parseFloat(thicknessCap);\n }\n let message = intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.thickness-exceed-welded-thickness',\n {\n sum,\n welded: weldedThickness,\n }\n );\n if (sum > totalThickness * 1.1) {\n set(this, 'errors.thicknessRoot', [{ message }]);\n if (get(this, 'hasFill') || (get(this, 'hasCap') && !isEmpty(thicknessFill))) {\n set(this, 'errors.thicknessFill', [{ message }]);\n }\n if (get(this, 'hasCap') && !isEmpty(thicknessCap)) {\n set(this, 'errors.thicknessCap', [{ message }]);\n }\n }\n }\n }\n\n validateDimensions() {\n let { weldedThickness, diameter, intl, source: wps } = this;\n\n let { thicknessMinimum, thicknessMaximum } = wps;\n let { diameterMinimum, diameterMaximum } = wps;\n\n if (!isEmpty(weldedThickness)) {\n if (\n parseFloat(weldedThickness) > parseFloat(thicknessMaximum) ||\n parseFloat(weldedThickness) < parseFloat(thicknessMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.thickness-outside-range',\n {\n min: thicknessMinimum,\n max: thicknessMaximum,\n }\n );\n set(this, 'errors.weldedThickness', [{ message }]);\n }\n }\n\n if (!isEmpty(diameter)) {\n if (\n parseFloat(diameter) > parseFloat(diameterMaximum) ||\n parseFloat(diameter) < parseFloat(diameterMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.thickness-outside-range',\n {\n min: diameterMinimum,\n max: diameterMaximum,\n }\n );\n set(this, 'errors.diameter', [{ message }]);\n }\n }\n }\n\n hasErrors() {\n let errors = get(this, 'errors');\n return Object.getOwnPropertyNames(errors).length > 0;\n }\n\n isValid() {\n let errors = {};\n set(this, 'errors', errors);\n\n if (this.hasNoProcesses) {\n if (!errors.generic) {\n errors.generic = [];\n }\n errors.generic.push(\n this.intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.no-welding-process',\n {\n wpsNumber: this.source.wpsNumber,\n }\n )\n );\n }\n\n if (!this.hasWeldType) {\n if (!errors.generic) {\n errors.generic = [];\n }\n errors.generic.push(\n this.intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.no-weld-type',\n {\n wpsNumber: this.source.wpsNumber,\n }\n )\n );\n }\n\n this.validateRequiredFields();\n if (!this.hasErrors()) {\n this.validateNumericFields();\n }\n if (!this.hasErrors()) {\n this.validateThicknessForLayers();\n }\n if (!this.hasErrors()) {\n this.validateDimensions();\n }\n\n return !this.hasErrors();\n }\n\n getValueOrEmpty(property) {\n let value = get(this, property);\n if (isEmpty(value)) {\n return '';\n }\n return value;\n }\n\n @action\n createCertificate() {\n let { loading, intl, alert, certificateNumber } = this;\n if (!this.isValid()) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n } else {\n loading.block();\n let testPieceValues = {\n certificateNumber,\n examiningBody: this.getValueOrEmpty('examiningBody.id'),\n emissionDate: moment(this.getValueOrEmpty('emissionDate')).format(DEFAULT_DATE_FORMAT),\n requalificationPeriod: this.getValueOrEmpty('requalificationPeriod'),\n weldedThickness: this.getValueOrEmpty('weldedThickness'),\n diameter: this.getValueOrEmpty('diameter'),\n thicknessRoot: this.getValueOrEmpty('thicknessRoot'),\n thicknessFill: this.getValueOrEmpty('thicknessFill'),\n thicknessCap: this.getValueOrEmpty('thicknessCap'),\n weldingPositionRoot: this.getValueOrEmpty('weldingPositionRoot.id'),\n weldingPositionFill: this.getValueOrEmpty('weldingPositionFill.id'),\n weldingPositionCap: this.getValueOrEmpty('weldingPositionCap.id'),\n welder: this.getValueOrEmpty('welder.id'),\n };\n get(this, 'source')\n .createCertificate({\n testPieceValues,\n })\n .then(({ id }) => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.messages.certificate-created',\n {\n certificateNumber,\n }\n )\n );\n get(this, 'onCreateCertificate')(id);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.duplicate-certificate',\n {\n certificateNumber,\n }\n )\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.no-permission'\n )\n );\n } else if (isWelderStandardNotSupported(reason)) {\n alert.error(\n `We currently don\\'t support creating Welder Certificates with this standard - ${this.standardName}`\n );\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.error-creating-certificate'\n )\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.delete-warning-all-revisions\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.suggest-archive\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n
\\n
\\n

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.delete-warning-all-revisions\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.suggest-archive\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.archive\\\"\\n }}

\\n

\\n
\\n
\\n {{yield}}\\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/confirm-delete.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/confirm-delete.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport Component from '@ember/component';\n\n@classic\nexport default class ConfirmDelete extends Component {\n @action\n archiveWPS() {\n this.onArchive(this.onArchiveCallback);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#each @errors as |error|}}\\n
    \\n
  • \\n {{#if (eq error.type \\\"wps\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.wps-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.welding-book-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"project\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.project-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"project-weld\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.project-weld-prevents-delete\\\"\\n }}\\n {{error.labelWhere}}\\n ({{error.label}})\\n {{else if (eq error.type \\\"pqr\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.pqr-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"welder-certificate\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.certificate-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book-weld\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.welding-book-weld-prevents-delete\\\"\\n }}\\n {{error.labelWhere}} ({{error.label}}) \\n {{else if (eq error.type \\\"welding-procedure-specification\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.wps-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"ieis\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.ieis-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{/if}}\\n
  • \\n
\\n {{/each}}\\n\", {\"contents\":\"\\n {{#each @errors as |error|}}\\n
    \\n
  • \\n {{#if (eq error.type \\\"wps\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.wps-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.welding-book-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"project\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.project-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"project-weld\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.project-weld-prevents-delete\\\"\\n }}\\n {{error.labelWhere}}\\n ({{error.label}})\\n {{else if (eq error.type \\\"pqr\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.pqr-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"welder-certificate\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.certificate-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"welding-book-weld\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.welding-book-weld-prevents-delete\\\"\\n }}\\n {{error.labelWhere}} ({{error.label}}) \\n {{else if (eq error.type \\\"welding-procedure-specification\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.wps-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{else if (eq error.type \\\"ieis\\\")}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.delete.errors.ieis-prevents-delete\\\"\\n }}\\n {{error.label}}\\n {{/if}}\\n
  • \\n
\\n {{/each}}\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/delete-errors.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/delete-errors.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/duplicate-modal.messages.help\\\"\\n }}

\\n
\\n
\\n \\n \\n \\n \\n \\n {{#if @wps.isProject}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n
\\n \\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/duplicate-modal.messages.help\\\"\\n }}

\\n
\\n
\\n \\n \\n \\n \\n \\n {{#if @wps.isProject}}\\n \\n \\n \\n \\n \\n {{/if}}\\n
\\n \\n
\\n \\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/duplicate-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/duplicate-modal.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class DuplicateModal extends Component {\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @service\n router;\n\n @tracked\n errors = null;\n\n @tracked\n wpsNumber = null;\n\n @tracked\n convertToStandardWps = false;\n\n @action\n duplicate() {\n let { loading, alert, router, intl, wpsNumber, convertToStandardWps } = this;\n\n if (isEmpty(wpsNumber)) {\n alert.error(intl.t('edit-view.attributes.required'));\n this.errors = [intl.t('edit-view.attributes.required')];\n return;\n } else {\n this.errors = null;\n }\n\n loading.block();\n this.args.wps\n .duplicateWps({\n wpsNumber,\n convertToStandardWps,\n })\n .then((newWps) => {\n router.transitionTo('welding-procedure-specification', newWps.id);\n alert.success(\n intl\n .t(\n 'components.model-welding-procedure-specification/duplicate-modal.messages.success',\n { wpsNumber }\n )\n .toString()\n );\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n let duplicateMessage = intl\n .t('components.model-welding-procedure-specification/edit.duplicate-wps-copy')\n .toString();\n this.errors = [duplicateMessage];\n alert.error(duplicateMessage);\n } else {\n alert.error(\n intl\n .t(\n 'components.model-welding-procedure-specification/duplicate-modal.messages.duplicate.error'\n )\n .toString()\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setWpsNumber(newNumber) {\n this.wpsNumber = newNumber;\n }\n\n @action\n setConvertToStandardWps({ target }) {\n let { checked } = target;\n this.convertToStandardWps = checked;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

\\n {{this.wpsTitle}}\\n ({{this.wps.standard.standard}})\\n {{this.subtitle}}\\n \\n\\n {{#if this.userSession.hasProductivity}}\\n \\n (#{{this.wps.id}})\\n \\n {{/if}}\\n

\\n\\n \\n
\\n
\\n {{#if this.canShowSaveButton}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.userSession.canArchiveWPS}}\\n {{#if this.wps.isArchived}}\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.buttons.unarchive\\\"}}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/view-mode.tooltips.unarchive-button')}} --}}\\n \\n {{/if}}\\n {{/if}}\\n\\n {{! Regular WPS }}\\n {{#if (and (not this.wps.isPreliminary) (not this.wps.isArchived) (not this.wps.isNew))}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n\\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if\\n (and\\n this.wps.isPrimary\\n (not this.wps.isNew)\\n this.userSession.canCreateWPS\\n (not this.wps.isArchived)\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.project\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if\\n (and\\n (not this.wps.isPreliminary)\\n (not this.wps.isNew)\\n this.userSession.canCreateCertificate\\n (not this.wps.isArchived)\\n )\\n }}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n {{#if this.isCreateQualificationDisabled}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{! Preliminary WPS }}\\n {{#if (and this.wps.isPreliminary (not this.wps.isNew))}}\\n {{! Preliminary WPS Actions }}\\n {{#if this.userSession.canDeleteWPS}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{! Preliminary WPS Create Qualification }}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.toolbar.create-qualification\\\"\\n }}\\n \\n\\n \\n
    \\n {{#if (and this.userSession.canCreatePQR this.userSession.isPlanQuality)}}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateCertificate\\n (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and this.userSession.canCreateWPS this.wps.isPreliminary this.wpsIsOfCodeAWS)\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateWPS\\n this.wps.isPreliminary\\n this.showStandardWpsButton\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{! Export Documents }}\\n {{#if (and (not this.wps.isNew) (not this.wps.isArchived))}}\\n
\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.export\\\"}}\\n \\n\\n \\n \\n \\n \\n {{#if this.userSession.hasProductivity}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{else}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n
\\n\\n {{#if this.showLinkToProject}}\\n
\\n \\n

\\n {{t \\\"components.model-welding-procedure-specification/edit.link-to-project\\\"}}\\n {{this.wps.project.designation}}\\n

\\n
\\n
\\n {{/if}}\\n\\n {{#if this.wps.isArchived}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.wps-is-archived\\\"\\n }}\\n \\n
\\n {{/if}}\\n\\n {{#if this.wps.isApproved}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.messages.wps-approved-cannot-edit\\\"\\n staff=this.wps.verifiedBy.name\\n }}\\n \\n
\\n {{else if this.wps.isVerified}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.messages.wps-verified-cannot-edit\\\"\\n staff=this.wps.verifiedBy.name\\n }}\\n \\n
\\n\\n {{/if}}\\n\\n \\n
\\n {{#if task.isRunning}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-pdf-export\\\"}}\\n \\n {{else if task.isFinished}}\\n {{! Required so that the observer that triggers on finish is called }}\\n {{else if task.isError}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-export-error\\\"}}\\n \\n {{/if}}\\n
\\n \\n\\n
\\n
\\n\\n{{#if this.showDuplicateWindow}}\\n \\n{{/if}}\\n\\n{{#if this.showAddWpsToProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.add-to-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showCreateWpsForProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.create-specific-for-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-procedure-specification/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if this.hasWpsDeleteErrors}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.showNewRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showUpdateRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmSaveWithError}}\\n \\n{{/if}}\\n\\n{{#if this.isShowingConfirmVerify}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-status.verify-modal-text\\\"\\n }}

\\n
\\n
\\n {{#if (and this.userSession.canAssignStaffWPS (gt this.data.staffOptions.length 1))}}\\n
\\n
\\n \\n {{staff.name}}\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-no\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-yes\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingConfirmApprove}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-status.approve-modal-text\\\"\\n }}

\\n
\\n
\\n {{#if (and this.userSession.canAssignStaffWPS (gt this.data.staffOptions.length 1))}}\\n
\\n
\\n \\n {{staff.name}}\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-no\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-yes\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingWeldCloudLicense}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevoke}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-status.revoke-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if (not this.wps.isPreliminary)}}\\n {{#if this.hasProjectOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.projectsOfWps as |project|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-designation-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-name-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.customer-column\\\"\\n }}
{{project.projectDesignation}}{{project.projectName}}{{project.customer}}
\\n \\n {{/if}}\\n\\n {{#if this.hasWeldsOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.weldsOfWps as |weld|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.welding-book-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.weld-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.project-column\\\"\\n }}
{{weld.weldingBookDesignation}}{{weld.weldNumber}}{{weld.projectName}}
\\n \\n {{/if}}\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.wps.isPreliminary}}\\n \\n \\n {{#if (and this.isEditing (not this.wps.isNew) this.userSession.canCreateWPS)}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.update-number-btn\\\"}}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/edit.tooltips.update-number-btn-title')}} --}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n {{#if (and this.isEditing (not this.wps.isNew) this.userSession.canCreateWPS)}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.update-number-btn\\\"}}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/edit.tooltips.update-number-btn-title')}} --}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n {{#unless this.wps.isPreliminary}}\\n \\n
\\n \\n {{#if (eq this.wps.totalWelds 0)}}\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.messages.no-welds-performed\\\"\\n }}

\\n {{else}}\\n

{{this.wps.repairedWelds}}\\n /\\n {{this.wps.totalWelds}}\\n /\\n {{this.wps.repairRate}}%

\\n {{/if}}\\n
\\n
\\n {{/unless}}\\n
\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not this.wps.isPreliminary)}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.wps.isMultiplePositionWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{#if this.isMultiplePqr}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{#if this.isSinglePqr}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n {{#if (and (not this.wps.isPreliminary) (not this.wps.isPrequalified))}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n\\n\\n{{#if this.isStandardSelected}}\\n
\\n
    \\n
  • {{t \\\"wps-edit.tabs.details\\\"}}
  • \\n {{t \\\"wps-edit.tabs.base-materials\\\"}}\\n {{t \\\"wps-edit.tabs.consumables\\\"}}\\n
  • {{t \\\"wps-edit.tabs.passes\\\"}}
  • \\n {{#if this.showAdvancedFields}}\\n
  • {{t \\\"wps-edit.tabs.other\\\"}}
  • \\n {{/if}}\\n
  • {{t \\\"wps-edit.tabs.status\\\"}}
  • \\n {{#if (not this.wps.isPreliminary)}}\\n {{#if (and this.showRevisionsTab)}}\\n
  • {{t \\\"wps-edit.tabs.revisions\\\"}}
  • \\n {{/if}}\\n {{#if (and this.showProjectWpsTab this.isPrimaryWps)}}\\n
  • {{t \\\"wps-edit.tabs.project-wps\\\"}}
  • \\n {{/if}}\\n {{/if}}\\n
  • {{t \\\"wps-edit.tabs.print-options\\\"}}
  • \\n
\\n
\\n
\\n {{#if this.showDetailsTab}}\\n {{!-- {{#ui-panel title=(t 'components.model-welding-procedure-specification/edit.details-information-title')}} --}}\\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n {{/if}}\\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n {{#if this.showPreHeatPresenceMessage}}\\n {{this.preHeatPresenceErrorMessage}}

\\n {{/if}}\\n
\\n \\n
\\n \\n
\\n {{#if this.showPostHeatPresenceMessage}}\\n {{this.postHeatPresenceErrorMessage}}

\\n {{/if}}\\n
\\n \\n
\\n \\n
\\n {{#if this.showPWHTPresenceMessage}}\\n {{this.pwhtPresenceErrorMessage}}

\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n \\n
\\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.hasPostHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n
\\n {{#if this.hasPWHT}}\\n
\\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.pass-variable.post-weld-heat-treatment\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.designation}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isHeatingRateDifferent}}\\n \\n

\\n {{t\\n \\\"model-validations.wps.heating-rate-different\\\"\\n pqrValue=this.pqr.postWeldHeatTreatmentHeatingRateTestPiece\\n unit=this.temperatureUnit\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n
\\n \\n \\n {{#if this.isCoolingRateDifferent}}\\n \\n

\\n {{t\\n \\\"model-validations.wps.cooling-rate-different\\\"\\n pqrValue=this.pqr.postWeldHeatTreatmentHeatingRateTestPiece\\n unit=this.temperatureUnit\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n
\\n
\\n {{/if}}\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showBaseMaterialsTab}}\\n \\n {{#if this.showBothBaseMaterials}}\\n {{! Normal Situation }}\\n \\n \\n {{#if this.isEditing}}\\n {{! Show the Switch Dissimilar Thickness / Grade }}\\n
\\n \\n {{!-- {{tooltip-on-element text=(t 'components.model-pqr/edit.dissimilar-base-materials.title')}} --}}\\n \\n {{t \\\"components.model-pqr/edit.dissimilar-materials\\\"}}\\n \\n
\\n {{/if}}\\n
\\n
\\n {{#if this.hasDissimilarMaterials}}\\n {{! Show both Base Materials }}\\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.base-material1\\\"\\n }}
\\n
\\n
\\n \\n \\n \\n \\n {{#if (and this.isPipe this.hasDissimilarMaterials)}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.base-material2\\\"\\n }}
\\n
\\n
\\n \\n \\n \\n \\n {{#if (and this.isPipe this.hasDissimilarMaterials)}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{! Show two base materials (only 1 selectable), but only 1 thickness/diameter }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (and this.isPipe this.hasDissimilarMaterials)}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{else}}\\n {{! Overlay Weld (Single Base material) }}\\n \\n \\n \\n \\n {{#if this.isPipe}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{#if this.isPipe}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n {{#if this.showDimensionsPanel}}\\n \\n {{#if this.showThicknessRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if (and this.wps.isPipe this.showAdvancedFields)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-angle-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showGrooveAngle}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootFace}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootGap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showNumberOfLayers}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showConsumablesTab}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.isRootProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.isFillProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.isCapProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n\\n {{!-- {{#ui-panel title=(t 'components.model-welding-procedure-specification/edit.shielding-title') classes='my-4'}} --}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.passes\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showPassesTab}}\\n \\n {{#if this.isEditing}}\\n
\\n {{#if (not this.isEditingWeldingParameter)}}\\n {{#if this.canAddLinkedParameter}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.buttons.add-linked-parameter\\\"\\n }}\\n {{/if}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.add-new\\\"\\n }}\\n {{/if}}\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showNewLinkedParameter}}\\n \\n {{/if}}\\n {{#each this.weldingParametersOrdered as |parameter index|}}\\n {{#if\\n (or\\n (eq parameter this.currentEditingParameter)\\n (and parameter.isNew (has-value this.currentEditingParameter))\\n )\\n }}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (gt parameter.errors.length 0)}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{#if\\n (and\\n (not (is-empty-attribute this.wps.heatInputMinimum))\\n (not (is-empty-attribute this.wps.heatInputMaximum))\\n )\\n }}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.pass-number-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.welding-process-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.filler-material-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.current-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.voltage-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.travel-speed-header\\\"\\n unit=this.travelSpeedUnit\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.wire-feed-speed-header\\\"\\n unit=this.wireSpeedUnit\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.heat-input-header\\\"\\n unit=this.heatDistanceUnit\\n }}
\\n {{#if parameter.isLinkedToPass}}\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.tooltips.wps-parameter-linked-pqr\\\"\\n }}
\\n {{/if}}\\n \\n
\\n {{parameter.passNumber}}\\n {{#if parameter.isLinkedToPass}}\\n
\\n {{/if}}\\n
\\n {{parameter.weldingProcess.visualLabel}}\\n {{parameter.typeCurrent.visualLabel}}\\n \\n {{parameter.fillerMaterialType.specification.specification}}\\n -\\n {{parameter.fillerMaterialType.classification.classification}}\\n {{#if (not (is-empty (compact parameter.fillerMaterialDiameters)))}}\\n \\n {{array-join\\n (map this.formatDiameter parameter.fillerMaterialDiameters)\\n separator=\\\" ; \\\"\\n ignoreEmpty=true\\n }}\\n ({{this.distanceUnit}})\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isEditing}}\\n {{#if\\n (and\\n (not this.isEditingWeldingParameter)\\n this.isNotDeletingWeldingParameter\\n )\\n }}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.edit\\\"\\n }}\\n {{/if}}\\n {{#if (eq this.currentDeletingParameter parameter)}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.confirm-delete\\\"\\n }}\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.cancel-delete\\\"\\n }}\\n {{else}}\\n {{#if (not this.isEditingWeldingParameter)}}\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.delete\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n {{#if (gt this.weldingParametersOrdered.length 1)}}\\n {{#if (not (eq index 0))}}\\n \\n {{/if}}\\n {{#if (not (eq this.weldingParametersOrdered.lastObject parameter))}}\\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameters-error\\\"\\n }}

{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.no-parameters\\\"\\n }}
{{t \\\"components.model-pqr/welding-parameters.total-heat-input\\\"}}:\\n \\n {{this.wps.heatInputMinimum}}\\n -\\n {{this.wps.heatInputMaximum}}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.heat-input-help-text\\\"\\n }}\\n \\n \\n \\n
\\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n
\\n \\n {{#if this.confirmDownloadExcel.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n Excel\\n \\n \\n {{#if this.confirmDownloadPdf.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n PDF\\n \\n
\\n
\\n {{/if}}\\n {{#if this.showOtherTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showStatusTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n {{#if (not this.wps.isPreliminary)}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (not this.wps.isPreliminary)}}\\n {{#if this.showRevisionsTabContent}}\\n \\n

{{this.wps.wpsNumber}} - {{this.wps.revision}}

\\n {{#if\\n (and\\n (not this.wps.isNew)\\n (not this.wps.isArchived)\\n this.userSession.canCreateRevisionWPS\\n )\\n }}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.new-revision-btn\\\"\\n }}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/edit.tooltips.new-revision-button')}} --}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisions as |revision|}}\\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-notes-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-date-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-active-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-delete-column\\\"\\n }}
\\n {{#if (id-equal revision.id this.wps.id)}}\\n {{revision.revision}}\\n -\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.current-one\\\"\\n }}\\n {{else}}\\n {{revision.revision}}\\n {{/if}}\\n {{revision.revisionNotes}}{{format-date\\n date=revision.revisionDate\\n format=this.userSession.dateFormat\\n time=true\\n }}\\n {{#if revision.active}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if (lte this.revisions.length 1)}}\\n \\n {{else if (not revision.active)}}\\n \\n {{else if (or revision.verifiedBy revision.approvedBy)}}\\n \\n {{/if}}\\n \\n
\\n \\n\\n {{#if this.isShowingDeleteRevisionModal}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.delete-warning\\\"\\n }}

\\n\\n {{#if this.hasWpsDeleteErrors}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showProjectWpsTabContent}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.projectWpsFromThis as |wps|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.projects.wps-table-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.projects.project-table-column\\\"\\n }}
{{wps.wpsNumber}}{{wps.projectDesignation}}
\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showPrintOptionsTab}}\\n \\n {{/if}}\\n
\\n
\\n
\\n{{/if}}\", {\"contents\":\"
\\n
\\n

\\n {{this.wpsTitle}}\\n ({{this.wps.standard.standard}})\\n {{this.subtitle}}\\n \\n\\n {{#if this.userSession.hasProductivity}}\\n \\n (#{{this.wps.id}})\\n \\n {{/if}}\\n

\\n\\n \\n
\\n
\\n {{#if this.canShowSaveButton}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.userSession.canArchiveWPS}}\\n {{#if this.wps.isArchived}}\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.buttons.unarchive\\\"}}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/view-mode.tooltips.unarchive-button')}} --}}\\n \\n {{/if}}\\n {{/if}}\\n\\n {{! Regular WPS }}\\n {{#if (and (not this.wps.isPreliminary) (not this.wps.isArchived) (not this.wps.isNew))}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n\\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if\\n (and\\n this.wps.isPrimary\\n (not this.wps.isNew)\\n this.userSession.canCreateWPS\\n (not this.wps.isArchived)\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.project\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if\\n (and\\n (not this.wps.isPreliminary)\\n (not this.wps.isNew)\\n this.userSession.canCreateCertificate\\n (not this.wps.isArchived)\\n )\\n }}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n {{#if this.isCreateQualificationDisabled}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{! Preliminary WPS }}\\n {{#if (and this.wps.isPreliminary (not this.wps.isNew))}}\\n {{! Preliminary WPS Actions }}\\n {{#if this.userSession.canDeleteWPS}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{! Preliminary WPS Create Qualification }}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.toolbar.create-qualification\\\"\\n }}\\n \\n\\n \\n
    \\n {{#if (and this.userSession.canCreatePQR this.userSession.isPlanQuality)}}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateCertificate\\n (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and this.userSession.canCreateWPS this.wps.isPreliminary this.wpsIsOfCodeAWS)\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateWPS\\n this.wps.isPreliminary\\n this.showStandardWpsButton\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{! Export Documents }}\\n {{#if (and (not this.wps.isNew) (not this.wps.isArchived))}}\\n
\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.export\\\"}}\\n \\n\\n \\n \\n \\n \\n {{#if this.userSession.hasProductivity}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{else}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n
\\n\\n {{#if this.showLinkToProject}}\\n
\\n \\n

\\n {{t \\\"components.model-welding-procedure-specification/edit.link-to-project\\\"}}\\n {{this.wps.project.designation}}\\n

\\n
\\n
\\n {{/if}}\\n\\n {{#if this.wps.isArchived}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.wps-is-archived\\\"\\n }}\\n \\n
\\n {{/if}}\\n\\n {{#if this.wps.isApproved}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.messages.wps-approved-cannot-edit\\\"\\n staff=this.wps.verifiedBy.name\\n }}\\n \\n
\\n {{else if this.wps.isVerified}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.messages.wps-verified-cannot-edit\\\"\\n staff=this.wps.verifiedBy.name\\n }}\\n \\n
\\n\\n {{/if}}\\n\\n \\n
\\n {{#if task.isRunning}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-pdf-export\\\"}}\\n \\n {{else if task.isFinished}}\\n {{! Required so that the observer that triggers on finish is called }}\\n {{else if task.isError}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-export-error\\\"}}\\n \\n {{/if}}\\n
\\n \\n\\n
\\n
\\n\\n{{#if this.showDuplicateWindow}}\\n \\n{{/if}}\\n\\n{{#if this.showAddWpsToProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.add-to-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showCreateWpsForProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.create-specific-for-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-procedure-specification/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if this.hasWpsDeleteErrors}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n{{#if this.showNewRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showUpdateRevision}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmSaveWithError}}\\n \\n{{/if}}\\n\\n{{#if this.isShowingConfirmVerify}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-status.verify-modal-text\\\"\\n }}

\\n
\\n
\\n {{#if (and this.userSession.canAssignStaffWPS (gt this.data.staffOptions.length 1))}}\\n
\\n
\\n \\n {{staff.name}}\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-no\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-yes\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingConfirmApprove}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-status.approve-modal-text\\\"\\n }}

\\n
\\n
\\n {{#if (and this.userSession.canAssignStaffWPS (gt this.data.staffOptions.length 1))}}\\n
\\n
\\n \\n {{staff.name}}\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-no\\\"}}\\n \\n \\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-yes\\\"}}\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingWeldCloudLicense}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmRevoke}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-status.revoke-modal-text\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-no\\\"}}\\n \\n {{t \\\"components.model-welding-procedure-specification/wps-status.modal-yes\\\"}}\\n
\\n
\\n \\n{{/if}}\\n\\n{{#if (not this.wps.isPreliminary)}}\\n {{#if this.hasProjectOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.projectsOfWps as |project|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-designation-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-name-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.customer-column\\\"\\n }}
{{project.projectDesignation}}{{project.projectName}}{{project.customer}}
\\n \\n {{/if}}\\n\\n {{#if this.hasWeldsOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.weldsOfWps as |weld|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.welding-book-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.weld-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.project-column\\\"\\n }}
{{weld.weldingBookDesignation}}{{weld.weldNumber}}{{weld.projectName}}
\\n \\n {{/if}}\\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.wps.isPreliminary}}\\n \\n \\n {{#if (and this.isEditing (not this.wps.isNew) this.userSession.canCreateWPS)}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.update-number-btn\\\"}}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/edit.tooltips.update-number-btn-title')}} --}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n {{#if (and this.isEditing (not this.wps.isNew) this.userSession.canCreateWPS)}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.update-number-btn\\\"}}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/edit.tooltips.update-number-btn-title')}} --}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n {{#unless this.wps.isPreliminary}}\\n \\n
\\n \\n {{#if (eq this.wps.totalWelds 0)}}\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.messages.no-welds-performed\\\"\\n }}

\\n {{else}}\\n

{{this.wps.repairedWelds}}\\n /\\n {{this.wps.totalWelds}}\\n /\\n {{this.wps.repairRate}}%

\\n {{/if}}\\n
\\n
\\n {{/unless}}\\n
\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (not this.wps.isPreliminary)}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.wps.isMultiplePositionWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{#if this.isMultiplePqr}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{#if this.isSinglePqr}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n {{#if (and (not this.wps.isPreliminary) (not this.wps.isPrequalified))}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n\\n\\n{{#if this.isStandardSelected}}\\n
\\n
    \\n
  • {{t \\\"wps-edit.tabs.details\\\"}}
  • \\n {{t \\\"wps-edit.tabs.base-materials\\\"}}\\n {{t \\\"wps-edit.tabs.consumables\\\"}}\\n
  • {{t \\\"wps-edit.tabs.passes\\\"}}
  • \\n {{#if this.showAdvancedFields}}\\n
  • {{t \\\"wps-edit.tabs.other\\\"}}
  • \\n {{/if}}\\n
  • {{t \\\"wps-edit.tabs.status\\\"}}
  • \\n {{#if (not this.wps.isPreliminary)}}\\n {{#if (and this.showRevisionsTab)}}\\n
  • {{t \\\"wps-edit.tabs.revisions\\\"}}
  • \\n {{/if}}\\n {{#if (and this.showProjectWpsTab this.isPrimaryWps)}}\\n
  • {{t \\\"wps-edit.tabs.project-wps\\\"}}
  • \\n {{/if}}\\n {{/if}}\\n
  • {{t \\\"wps-edit.tabs.print-options\\\"}}
  • \\n
\\n
\\n
\\n {{#if this.showDetailsTab}}\\n {{!-- {{#ui-panel title=(t 'components.model-welding-procedure-specification/edit.details-information-title')}} --}}\\n \\n \\n \\n \\n {{format-weld-type weldType}}\\n \\n {{#if this.showJointType}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isOverlayWeld}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n {{/if}}\\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n {{#if this.isNotStandardISO}}\\n \\n {{/if}}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{/if}}\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n {{#if this.showPreHeatPresenceMessage}}\\n {{this.preHeatPresenceErrorMessage}}

\\n {{/if}}\\n
\\n \\n
\\n \\n
\\n {{#if this.showPostHeatPresenceMessage}}\\n {{this.postHeatPresenceErrorMessage}}

\\n {{/if}}\\n
\\n \\n
\\n \\n
\\n {{#if this.showPWHTPresenceMessage}}\\n {{this.pwhtPresenceErrorMessage}}

\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n \\n
\\n {{#if this.hasPreHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.hasPostHeat}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n
\\n {{#if this.hasPWHT}}\\n
\\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.pass-variable.post-weld-heat-treatment\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.designation}}\\n \\n \\n \\n \\n \\n \\n {{#if this.isHeatingRateDifferent}}\\n \\n

\\n {{t\\n \\\"model-validations.wps.heating-rate-different\\\"\\n pqrValue=this.pqr.postWeldHeatTreatmentHeatingRateTestPiece\\n unit=this.temperatureUnit\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n
\\n \\n \\n {{#if this.isCoolingRateDifferent}}\\n \\n

\\n {{t\\n \\\"model-validations.wps.cooling-rate-different\\\"\\n pqrValue=this.pqr.postWeldHeatTreatmentHeatingRateTestPiece\\n unit=this.temperatureUnit\\n }}\\n

\\n
\\n {{else}}\\n
\\n {{/if}}\\n
\\n
\\n {{/if}}\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showBaseMaterialsTab}}\\n \\n {{#if this.showBothBaseMaterials}}\\n {{! Normal Situation }}\\n \\n \\n {{#if this.isEditing}}\\n {{! Show the Switch Dissimilar Thickness / Grade }}\\n
\\n \\n {{!-- {{tooltip-on-element text=(t 'components.model-pqr/edit.dissimilar-base-materials.title')}} --}}\\n \\n {{t \\\"components.model-pqr/edit.dissimilar-materials\\\"}}\\n \\n
\\n {{/if}}\\n
\\n
\\n {{#if this.hasDissimilarMaterials}}\\n {{! Show both Base Materials }}\\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.base-material1\\\"\\n }}
\\n
\\n
\\n \\n \\n \\n \\n {{#if (and this.isPipe this.hasDissimilarMaterials)}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.base-material2\\\"\\n }}
\\n
\\n
\\n \\n \\n \\n \\n {{#if (and this.isPipe this.hasDissimilarMaterials)}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n {{! Show two base materials (only 1 selectable), but only 1 thickness/diameter }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (and this.isPipe this.hasDissimilarMaterials)}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{else}}\\n {{! Overlay Weld (Single Base material) }}\\n \\n \\n \\n \\n {{#if this.isPipe}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{#if this.isPipe}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n {{#if this.showDimensionsPanel}}\\n \\n {{#if this.showThicknessRoot}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessFill}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showThicknessCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if (and this.wps.isPipe this.showAdvancedFields)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.maximum-angle-help-text\\\"\\n }}\\n \\n \\n {{/if}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showGrooveAngle}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootFace}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showRootGap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showNumberOfLayers}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.details\\\")\\n }}\\n \\n \\n {{t\\n \\\"edit-view.tab-change.labels.next\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showConsumablesTab}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.isRootProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{#if this.hasFill}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.isFillProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n
\\n
\\n \\n
\\n
\\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-wire\\\"}}\\n \\n \\n \\n \\n {{t \\\"components.model-pqr/edit.filler-materials.overlay-form-strip\\\"}}\\n \\n \\n
\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n
\\n {{#if this.isCapProcessESW}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n\\n {{!-- {{#ui-panel title=(t 'components.model-welding-procedure-specification/edit.shielding-title') classes='my-4'}} --}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.base-materials\\\")\\n }}\\n \\n \\n {{t \\\"edit-view.tab-change.labels.next\\\" label=(t \\\"edit-view.tab-change.tabs.passes\\\")}}\\n \\n \\n
\\n {{/if}}\\n {{#if this.showPassesTab}}\\n \\n {{#if this.isEditing}}\\n
\\n {{#if (not this.isEditingWeldingParameter)}}\\n {{#if this.canAddLinkedParameter}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.buttons.add-linked-parameter\\\"\\n }}\\n {{/if}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.add-new\\\"\\n }}\\n {{/if}}\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.showNewLinkedParameter}}\\n \\n {{/if}}\\n {{#each this.weldingParametersOrdered as |parameter index|}}\\n {{#if\\n (or\\n (eq parameter this.currentEditingParameter)\\n (and parameter.isNew (has-value this.currentEditingParameter))\\n )\\n }}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if (gt parameter.errors.length 0)}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{#if\\n (and\\n (not (is-empty-attribute this.wps.heatInputMinimum))\\n (not (is-empty-attribute this.wps.heatInputMaximum))\\n )\\n }}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.pass-number-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.welding-process-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.filler-material-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.current-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.voltage-header\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.travel-speed-header\\\"\\n unit=this.travelSpeedUnit\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.wire-feed-speed-header\\\"\\n unit=this.wireSpeedUnit\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.heat-input-header\\\"\\n unit=this.heatDistanceUnit\\n }}
\\n {{#if parameter.isLinkedToPass}}\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.tooltips.wps-parameter-linked-pqr\\\"\\n }}
\\n {{/if}}\\n \\n
\\n {{parameter.passNumber}}\\n {{#if parameter.isLinkedToPass}}\\n
\\n {{/if}}\\n
\\n {{parameter.weldingProcess.visualLabel}}\\n {{parameter.typeCurrent.visualLabel}}\\n \\n {{parameter.fillerMaterialType.specification.specification}}\\n -\\n {{parameter.fillerMaterialType.classification.classification}}\\n {{#if (not (is-empty (compact parameter.fillerMaterialDiameters)))}}\\n \\n {{array-join\\n (map this.formatDiameter parameter.fillerMaterialDiameters)\\n separator=\\\" ; \\\"\\n ignoreEmpty=true\\n }}\\n ({{this.distanceUnit}})\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isEditing}}\\n {{#if\\n (and\\n (not this.isEditingWeldingParameter)\\n this.isNotDeletingWeldingParameter\\n )\\n }}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.edit\\\"\\n }}\\n {{/if}}\\n {{#if (eq this.currentDeletingParameter parameter)}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.confirm-delete\\\"\\n }}\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.cancel-delete\\\"\\n }}\\n {{else}}\\n {{#if (not this.isEditingWeldingParameter)}}\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-actions.delete\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n {{#if (gt this.weldingParametersOrdered.length 1)}}\\n {{#if (not (eq index 0))}}\\n \\n {{/if}}\\n {{#if (not (eq this.weldingParametersOrdered.lastObject parameter))}}\\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameters-error\\\"\\n }}

{{t\\n \\\"components.model-welding-procedure-specification/edit.welding-parameter-list.no-parameters\\\"\\n }}
{{t \\\"components.model-pqr/welding-parameters.total-heat-input\\\"}}:\\n \\n {{this.wps.heatInputMinimum}}\\n -\\n {{this.wps.heatInputMaximum}}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.heat-input-help-text\\\"\\n }}\\n \\n \\n \\n
\\n {{t\\n \\\"edit-view.tab-change.labels.previous\\\"\\n label=(t \\\"edit-view.tab-change.tabs.consumables\\\")\\n }}\\n
\\n \\n {{#if this.confirmDownloadExcel.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n Excel\\n \\n \\n {{#if this.confirmDownloadPdf.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n PDF\\n \\n
\\n
\\n {{/if}}\\n {{#if this.showOtherTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.showStatusTab}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n {{#if (not this.wps.isPreliminary)}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (not this.wps.isPreliminary)}}\\n {{#if this.showRevisionsTabContent}}\\n \\n

{{this.wps.wpsNumber}} - {{this.wps.revision}}

\\n {{#if\\n (and\\n (not this.wps.isNew)\\n (not this.wps.isArchived)\\n this.userSession.canCreateRevisionWPS\\n )\\n }}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.new-revision-btn\\\"\\n }}\\n {{!-- {{tooltip-on-element text=(t 'components.model-welding-procedure-specification/edit.tooltips.new-revision-button')}} --}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.revisions as |revision|}}\\n \\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-notes-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-date-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-active-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.revision-delete-column\\\"\\n }}
\\n {{#if (id-equal revision.id this.wps.id)}}\\n {{revision.revision}}\\n -\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.table.current-one\\\"\\n }}\\n {{else}}\\n {{revision.revision}}\\n {{/if}}\\n {{revision.revisionNotes}}{{format-date\\n date=revision.revisionDate\\n format=this.userSession.dateFormat\\n time=true\\n }}\\n {{#if revision.active}}\\n \\n {{/if}}\\n \\n \\n \\n {{#if (lte this.revisions.length 1)}}\\n \\n {{else if (not revision.active)}}\\n \\n {{else if (or revision.verifiedBy revision.approvedBy)}}\\n \\n {{/if}}\\n \\n
\\n \\n\\n {{#if this.isShowingDeleteRevisionModal}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.revisions.delete-warning\\\"\\n }}

\\n

{{t\\n \\\"components.model-welding-procedure-specification/confirm-delete.messages.delete-warning\\\"\\n }}

\\n\\n {{#if this.hasWpsDeleteErrors}}\\n \\n {{/if}}\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showProjectWpsTabContent}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.projectWpsFromThis as |wps|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/edit.projects.wps-table-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/edit.projects.project-table-column\\\"\\n }}
{{wps.wpsNumber}}{{wps.projectDesignation}}
\\n \\n {{/if}}\\n {{/if}}\\n {{#if this.showPrintOptionsTab}}\\n \\n {{/if}}\\n
\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport {\n bool,\n readOnly,\n alias,\n empty,\n or,\n equal,\n notEmpty,\n sort,\n and,\n not,\n} from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { later, debounce } from '@ember/runloop';\nimport RSVP from 'rsvp';\nimport { set, get, action, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit-wps';\nimport Rules from 'weldnote/utils/welding-procedure-specification-rules';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport PreviewImage from 'weldnote/mixins/preview-groove-layer-images';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport jointTypeFilteredOptions from 'weldnote/macros/joint-type-options';\nimport processMecanizationOptions from 'weldnote/macros/process-mecanization-options';\nimport {\n isDuplicateError,\n isError,\n isPermissionDenied,\n isForeignKeyError,\n getErrorCode,\n} from 'weldnote/utils/json-api-errors';\nimport { isFilletWeld, isPartialPenetrationButtWeld } from 'weldnote/utils/rules/weld-type';\nimport {\n filterDetailsIncompatibleWithFilletWeld,\n filterDetailsIncompatibleWithOverlayWeld,\n filterDetailsIncompatibleWithPartialPenetrationButtWeld,\n isSingleLayer,\n isMultiLayer,\n} from 'weldnote/utils/rules/welding-detail';\nimport { applyThicknessFromPQR } from 'weldnote/utils/rules/thickness';\nimport { isSameProcess } from 'weldnote/utils/rules/welding-process';\nimport { task, timeout } from 'ember-concurrency';\nimport {\n isStandardISO,\n isStandardOfTypeAWS,\n isStandardASME,\n isStandardAWSB21,\n isStandardAWSD11,\n isStandardAWSD15,\n} from 'weldnote/utils/standards';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport { downloadExcel } from 'weldnote/utils/ajax/file-download';\nimport { calculateProcessLabels } from 'weldnote/src-weldnote/welding/process-name-label-calculator';\nimport { tracked } from '@glimmer/tracking';\nimport { htmlSafe } from '@ember/template';\nimport WpsValidation from 'weldnote/utils/validation/wps-from-pqr';\nimport AwsB21Validator from 'weldnote/src-weldnote/wps/validation/aws-b2-1';\nimport validateWpsAndPasses from 'weldnote/utils/validation/validate-wps-and-passes';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = Rules;\n\nconst { PQR } = PQRRules;\n\nconst {\n WELD_TYPES,\n WELDING_LAYER_OPTIONS,\n GROOVE_SHAPE_OPTIONS,\n WPS_TYPE,\n WELDING_PROCESSES,\n PRODUCT_TYPE,\n ERROR_CODES,\n OVERLAY_FILLER_METAL_FORM,\n} = Constants;\n\n@classic\nexport default class Edit extends Base.extend(ModelSetter, PreviewImage) {\n @service\n weldnoteData;\n\n @alias('weldnoteData')\n data;\n\n @service\n alertMessage;\n\n @service\n store;\n\n @service\n session;\n\n @service('user-session')\n userSession;\n\n @service\n unitSystem;\n\n @alias('model')\n wps;\n\n @alias('wps.mainPqr')\n pqr;\n\n @service\n analytics;\n\n @service\n loading;\n\n @service\n scroller;\n\n @service\n intl;\n\n @service\n ajax;\n\n @service\n scroller;\n\n @service\n router;\n\n @service\n taskMonitor;\n\n @service\n weldcloud;\n\n // Flag to display the \"Create New Revision\" modal\n showNewRevision = false;\n\n // Flag to display the \"Change WPS Number\" modal\n showUpdateRevision = false;\n\n showCopyWPS = false;\n\n @tracked\n revisionsCache = [];\n\n projectWpsCache = [];\n\n // Search for clients\n clientsSearched = null;\n\n // List of errors of WPS when deleting (references)\n wpsDeleteErrors = null;\n\n // *****\n // WPS Status Flags\n // *****\n // Temporary field to store the value selected for the verified By Date\n verifiedByDate = null;\n\n // Temporary field to store the value selected for the approved By Date\n approvedByDate = null;\n\n @tracked\n isShowingWeldCloudLicense = false;\n\n @tracked\n showConfirmSaveWithError = false;\n\n @computed\n get advancedFieldHaveValue() {\n let {\n electrodeType,\n electrodeTypeFill,\n electrodeTypeCap,\n numberOfElectrodes,\n numberOfElectrodesFill,\n numberOfElectrodesCap,\n gasNozzleDiameterRoot,\n gasNozzleDiameterFill,\n gasNozzleDiameterCap,\n contactTubeDistance,\n contactTubeDistanceFill,\n contactTubeDistanceCap,\n weaving,\n weavingFill,\n weavingCap,\n tungstenDiameterRoot,\n tungstenDiameterFill,\n tungstenDiameterCap,\n oscillationWidthRoot,\n oscillationWidthFill,\n oscillationWidthCap,\n oscillationFrequencyRoot,\n oscillationFrequencyFill,\n oscillationFrequencyCap,\n oscillationDwellTimeRoot,\n oscillationDwellTimeFill,\n oscillationDwellTimeCap,\n supplementalDeviceRoot,\n supplementalDeviceFill,\n supplementalDeviceCap,\n thicknessRootTestPiece,\n thicknessFillTestPiece,\n thicknessCapTestPiece,\n shieldingRootGasCommercialDesignationTestPiece,\n shieldingRootGasMixture,\n shieldingFillGasCommercialDesignationTestPiece,\n shieldingFillGasMixture,\n shieldingCapGasCommercialDesignationTestPiece,\n shieldingCapGasMixture,\n } = this.wps;\n\n return (\n !isEmpty(electrodeType) ||\n !isEmpty(electrodeTypeFill) ||\n !isEmpty(electrodeTypeCap) ||\n !isEmpty(numberOfElectrodes) ||\n !isEmpty(numberOfElectrodesFill) ||\n !isEmpty(numberOfElectrodesCap) ||\n !isEmpty(gasNozzleDiameterRoot) ||\n !isEmpty(gasNozzleDiameterFill) ||\n !isEmpty(gasNozzleDiameterCap) ||\n !isEmpty(contactTubeDistance) ||\n !isEmpty(contactTubeDistanceFill) ||\n !isEmpty(contactTubeDistanceCap) ||\n !isEmpty(weaving) ||\n !isEmpty(weavingFill) ||\n !isEmpty(weavingCap) ||\n !isEmpty(oscillationWidthRoot) ||\n !isEmpty(oscillationWidthFill) ||\n !isEmpty(oscillationWidthCap) ||\n !isEmpty(tungstenDiameterRoot) ||\n !isEmpty(tungstenDiameterFill) ||\n !isEmpty(tungstenDiameterCap) ||\n !isEmpty(oscillationFrequencyRoot) ||\n !isEmpty(oscillationFrequencyFill) ||\n !isEmpty(oscillationFrequencyCap) ||\n !isEmpty(oscillationFrequencyRoot) ||\n !isEmpty(oscillationFrequencyFill) ||\n !isEmpty(oscillationFrequencyCap) ||\n !isEmpty(oscillationDwellTimeRoot) ||\n !isEmpty(oscillationDwellTimeFill) ||\n !isEmpty(oscillationDwellTimeCap) ||\n !isEmpty(supplementalDeviceRoot) ||\n !isEmpty(supplementalDeviceFill) ||\n !isEmpty(supplementalDeviceCap) ||\n !isEmpty(thicknessRootTestPiece) ||\n !isEmpty(thicknessFillTestPiece) ||\n !isEmpty(thicknessCapTestPiece) ||\n !isEmpty(shieldingRootGasCommercialDesignationTestPiece) ||\n !isEmpty(shieldingRootGasMixture) ||\n !isEmpty(shieldingFillGasCommercialDesignationTestPiece) ||\n !isEmpty(shieldingFillGasMixture) ||\n !isEmpty(shieldingCapGasCommercialDesignationTestPiece) ||\n !isEmpty(shieldingCapGasMixture)\n );\n }\n\n // Show the Advanced Fields or not\n @computed('showAdvancedFieldsAction', 'advancedFieldHaveValue')\n get showAdvancedFields() {\n if (this.advancedFieldHaveValue) {\n return true;\n }\n\n return this.showAdvancedFieldsAction;\n }\n\n showAdvancedFieldsAction = false;\n\n @computed('showAdvancedFields')\n get fillerMaterialColumnSize() {\n if (this.showAdvancedFields) {\n return 3;\n }\n return 2;\n }\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @alias('data.weldingPositionDirectionOptions')\n weldingPositionDirectionOptions;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.weldingProcessOptions')\n weldingProcessOptionsAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionOptionsAll;\n\n @alias('data.gasCommercialDesignationOptions')\n gasCommercialDesignationOptions;\n\n @alias('data.fluxCommercialDesignationOptions')\n fluxCommercialDesignationOptions;\n\n @alias('data.postWeldTreatmentMethodOptions')\n postWeldTreatmentMethodOptions;\n\n @alias('wps.standard.code')\n currentIndustryCode;\n\n @alias('wps.standard.standard')\n standardLabel;\n\n @alias('wps.weldType')\n currentWeldType;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.preparationMethodOptions')\n preparationMethodOptions;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @processMecanizationOptions('data.processMecanizationOptions', 'wps.weldingProcessRoot')\n processMecanizationRootOptions;\n\n @processMecanizationOptions('data.processMecanizationOptions', 'wps.weldingProcessFill')\n processMecanizationFillOptions;\n\n @processMecanizationOptions('data.processMecanizationOptions', 'wps.weldingProcessCap')\n processMecanizationCapOptions;\n\n @alias('data.arcTransferModeOptions')\n arcTransferModeOptionsAll;\n\n @alias('data.typeCurrentPolarityOptions')\n typeCurrentOptions;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @alias('data.constructionStandardOptions')\n constructionStandardOptions;\n\n @alias('data.projectClientOptions')\n projectClientOptions;\n\n @alias('wps.grooveDesigns.firstObject')\n grooveDesign;\n\n @alias('wps.weldLayerConfigurations.firstObject')\n weldLayerConfiguration;\n\n @jointTypeFilteredOptions('data.jointTypeOptions', 'wps.weldType')\n jointTypeOptions;\n\n @alias('wps.isPipe')\n isPipe;\n\n @computed('isPipe')\n get baseMaterialColumnSize() {\n if (get(this, 'isPipe')) {\n return 2;\n }\n return 1;\n }\n\n @computed('userSession.account.staff.id', 'wps.verifiedBy.id')\n get canChangeVerifiedByDate() {\n let myStaff = get(this, 'userSession.account.staff.id');\n let verifiedBy = get(this, 'wps.verifiedBy.id');\n\n if (isEmpty(myStaff) || isEmpty(verifiedBy)) {\n return false;\n }\n\n if (myStaff === verifiedBy) {\n return true;\n }\n\n return false;\n }\n\n @computed('userSession.account.staff.id', 'wps.approvedBy.id')\n get canChangeApprovedByDate() {\n let myStaff = get(this, 'userSession.account.staff.id');\n let approvedBy = get(this, 'wps.approvedBy.id');\n\n if (isEmpty(myStaff) || isEmpty(approvedBy)) {\n return false;\n }\n\n if (myStaff === approvedBy) {\n return true;\n }\n\n return false;\n }\n\n @computed('wps.standard')\n get isAWSD11() {\n return isStandardAWSD11(this.wps.standard);\n }\n\n @computed('wps.{weldingProcessRoot,weldingProcessFill,weldingProcessCap}')\n get processNames() {\n let {\n weldingProcessRoot: process1,\n weldingProcessFill: process2,\n weldingProcessCap: process3,\n } = this.wps;\n return calculateProcessLabels(process1, process2, process3);\n }\n\n get unit() {\n return this.wps.unitSystem;\n }\n\n get temperatureUnit() {\n return this.unitSystem.getTemperatureUnit(this.wps.unitSystem);\n }\n\n get distanceUnit() {\n return this.unitSystem.getDistanceUnit(this.wps.unitSystem);\n }\n\n get flowUnit() {\n return this.unitSystem.getFlowUnit(this.wps.unitSystem);\n }\n\n get heatDistanceUnit() {\n return this.unitSystem.getHeatDistanceUnit(this.wps.unitSystem);\n }\n\n get travelSpeedUnit() {\n return this.unitSystem.getTravelSpeedUnit(this.wps.unitSystem);\n }\n\n get wireSpeedUnit() {\n return this.unitSystem.getWireSpeedUnit(this.wps.unitSystem);\n }\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey(\n 'weldingProcessOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id'\n )\n weldingProcessOptions;\n\n @filterFromCollectionByKey(\n 'arcTransferModeOptionsAll',\n 'industryCode.id',\n 'currentIndustryCode.id'\n )\n arcTransferModeOptions;\n\n @computed('weldingPositionOptionsAll', 'currentIndustryCode.id', 'wps.productType')\n get weldingPositionOptions() {\n let { productType } = this.wps;\n if (this.wps.isPreliminary) {\n if (this.currentIndustryCode) {\n return this.weldingPositionOptionsAll\n .filter((position) => {\n return get(position, 'industryCode.id') === get(this, 'currentIndustryCode.id');\n })\n .filter((position) => {\n if (productType === PRODUCT_TYPE.PLATE) {\n return !position.isPipeOnly;\n }\n return true;\n });\n }\n return [];\n } else {\n if (this.currentIndustryCode) {\n return this.weldingPositionOptionsAll\n .filter((position) => {\n return (\n get(position, 'industryCode.id') === get(this, 'currentIndustryCode.id') &&\n !position.isMultiple\n );\n })\n .filter((position) => {\n if (productType === PRODUCT_TYPE.PLATE) {\n return !position.isPipeOnly;\n }\n return true;\n });\n }\n return [];\n }\n }\n\n @computed\n get wpsLinkWeldCloud() {\n return htmlSafe(this.weldcloud.generateWpsLink(this.wps.guid));\n }\n\n @computed('userSession.canCreateWPS', 'wps.{isArchived,isVerified,isApproved}')\n get isEditing() {\n let { wps } = this;\n if (wps.isArchived) {\n return false;\n }\n if (!this.userSession.canCreateWPS) {\n return false;\n }\n\n if (wps.isVerified || wps.isApproved) {\n return false;\n }\n\n return true;\n }\n\n @computed('wps.{isArchived,isVerified,isApproved}', 'userSession.canCreateWPS')\n get canShowSaveButton() {\n let { wps, userSession } = this;\n if (!userSession.canCreateWPS) {\n return false;\n }\n if (wps.isArchived || wps.isVerified || wps.isApproved) {\n return false;\n }\n\n return true;\n }\n\n @or('fieldsDisabled', 'isArcTransferModeRootDisabledByRule')\n isArcTransferModeRootDisabled;\n\n @or('fieldsDisabled', 'isArcTransferModeFillDisabledByRule')\n isArcTransferModeFillDisabled;\n\n @or('fieldsDisabled', 'isArcTransferModeCapDisabledByRule')\n isArcTransferModeCapDisabled;\n\n isArcTransferModeRootDisabledByRule = false;\n\n isArcTransferModeFillDisabledByRule = false;\n\n isArcTransferModeCapDisabledByRule = false;\n\n @notEmpty('wps.mainPqr.id')\n weldTypeDisabled;\n\n @computed('wps.{isNew,wpsType}')\n get weldingProcessDisabled() {\n if (get(this, 'wps.isNew')) {\n return false;\n }\n\n if (get(this, 'wps.isPreliminary')) {\n return false;\n }\n\n return true;\n }\n\n @equal('wps.weldingProcessRoot.shortDesignation', WELDING_PROCESSES.ESW)\n isRootProcessESW;\n\n @equal('wps.weldingProcessFill.shortDesignation', WELDING_PROCESSES.ESW)\n isFillProcessESW;\n\n @equal('wps.weldingProcessCap.shortDesignation', WELDING_PROCESSES.ESW)\n isCapProcessESW;\n\n @alias('wps.verifiedBy')\n verifiedBy;\n\n @alias('wps.isVerified')\n isVerified;\n\n @alias('wps.approvedBy')\n approvedBy;\n\n @alias('wps.isApproved')\n isApproved;\n\n @or('isVerified', 'isApproved')\n isVerifiedOrApproved;\n\n @readOnly('userSession.canVerifyWps')\n canVerify;\n\n @readOnly('userSession.canApproveWps')\n canApprove;\n\n @readOnly('userSession.canRevokeWps')\n canRevoke;\n\n @tracked\n isShowingConfirmVerify = false;\n\n @tracked\n isShowingConfirmApprove = false;\n\n @tracked\n showDuplicateWindow = false;\n\n @tracked\n showConfirmRevoke = false;\n\n @computed('wps.{isNew,isPreliminary}')\n get previousRoute() {\n if (get(this, 'wps.isNew') || get(this, 'wps.isPreliminary')) {\n return 'welding-procedure-specifications-preliminary';\n } else {\n return 'welding-procedure-specifications';\n }\n }\n\n @computed('wps.{isNew,isPreliminary}')\n get previousRouteLabel() {\n if (get(this, 'wps.isNew') || get(this, 'wps.isPreliminary')) {\n return this.intl.t('generic.welding.pwps');\n } else {\n return this.intl.t('generic.welding.wps');\n }\n }\n\n get baseMaterialGroupStandard() {\n if (isStandardAWSD15(get(this, 'wps.standard'))) {\n return get(this, 'wps.standard');\n }\n return null;\n }\n\n @computed('wps.{isNew,wpsNumber,isPreliminary,isPrequalified}')\n get wpsTitle() {\n let { intl, wps } = this;\n if (wps.isNew) {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.new-pwps')\n .toString();\n } else if (wps.isPreliminary) {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.pwps-number', {\n wpsNumber: wps.wpsNumber,\n })\n .toString();\n } else if (wps.isPrequalified) {\n if (this.wpsIsOfCodeAWS) {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.prequalified', {\n wpsNumber: wps.wpsNumber,\n })\n .toString();\n } else {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.standard-wps', {\n wpsNumber: wps.wpsNumber,\n })\n .toString();\n }\n } else {\n return `${wps.wpsNumber} - v. ${wps.revision}`;\n }\n }\n\n @computed('wps.standard')\n get wpsIsOfCodeAWS() {\n let standard = get(this, 'wps.standard');\n return isStandardOfTypeAWS(standard);\n }\n\n @computed('wps.standard')\n get showStandardWpsButton() {\n let standard = get(this, 'wps.standard');\n return isStandardASME(standard) || isStandardAWSB21(standard);\n }\n\n @bool('wps.validator.validations.meta.isOverlayWeld')\n isOverlayWeldFillerMaterialFormRootDisabled;\n\n @bool('wps.validator.validations.meta.isOverlayWeld')\n isOverlayWeldFillerMaterialFormFillDisabled;\n\n @bool('wps.validator.validations.meta.isOverlayWeld')\n isOverlayWeldFillerMaterialFormCapDisabled;\n\n @computed('userSession.isAccountAdmin', 'wps.writtenBy', 'userSession.account.staff')\n get isWrittenByDisabled() {\n if (get(this, 'userSession.isAccountAdmin')) {\n return false;\n }\n\n let currentStaff = get(this, 'wps.writtenBy.id');\n if (isEmpty(currentStaff)) {\n return false;\n }\n let myStaff = get(this, 'userSession.account.staff.id');\n if (!isEmpty(currentStaff) && !isEmpty(myStaff) && currentStaff === myStaff) {\n return false;\n }\n\n return true;\n }\n\n @computed(\n 'showThicknessRoot',\n 'showThicknessFill',\n 'showThicknessCap',\n 'wps.isPipe',\n 'showAdvancedFields'\n )\n get showDimensionsPanel() {\n if (this.showThicknessRoot || this.showThicknessFill || this.showThicknessCap) {\n return true;\n }\n\n if (this.showAdvancedFields && get(this, 'wps.isPipe')) {\n return true;\n }\n\n return false;\n }\n\n @computed('wps.{isLinkedToPQR,isAdvancedWPS,isPcPlusPfPosition}')\n get canAddLinkedParameter() {\n let { wps } = this;\n return wps.isLinkedToPQR || wps.isAdvancedWPS || wps.isPcPlusPfPosition;\n }\n\n // Keeps the list of projects where this WPS is used\n projectsOfWps = null;\n\n // Keeps the list of welds in which this WPS is used\n weldsOfWps = null;\n\n @notEmpty('projectsOfWps')\n hasProjectOfWps;\n\n @notEmpty('wpsDeleteErrors')\n hasWpsDeleteErrors;\n\n @notEmpty('weldsOfWps')\n hasWeldsOfWps;\n\n @computed('wps.{weldingProcessRoot,weldType,weldingPositionsRoot,weldingDetails}')\n get isCreateQualificationDisabled() {\n let { weldingProcessRoot, weldType, weldingPositionsRoot, weldingDetails } = this.wps;\n if (isEmpty(weldingProcessRoot)) {\n return true;\n } else {\n if (isEmpty(get(weldingProcessRoot, 'id'))) {\n return true;\n }\n }\n if (isEmpty(weldType)) {\n return true;\n } else {\n if (isEmpty(get(weldType, 'id'))) {\n return true;\n }\n }\n if (isEmpty(weldingPositionsRoot)) {\n return true;\n } else {\n if (get(weldingProcessRoot, 'length') === 0) {\n return true;\n }\n }\n if (isEmpty(weldingDetails)) {\n return true;\n }\n let typeOfLayerIncorrect = true;\n if (isSingleLayer(weldingDetails) || isMultiLayer(weldingDetails)) {\n typeOfLayerIncorrect = false;\n }\n if (typeOfLayerIncorrect) {\n return true;\n }\n\n return false;\n }\n\n fetchProjects = task(\n {\n restartable: true,\n },\n async () => {\n let wps = get(this, 'wps');\n let result = await wps.fetchProjectsOfWps();\n let clientUnitSystem = this.userSession.unitSystem;\n const projectsOfClientUnit = result.filter((p) => p.unitSystem == clientUnitSystem);\n set(this, 'projectsOfWps', result);\n }\n );\n\n fetchWelds = task(\n {\n restartable: true,\n },\n async () => {\n let wps = get(this, 'wps');\n let result = await wps.fetchWeldsOfWps();\n set(this, 'weldsOfWps', result);\n }\n );\n\n saveWPS = task(\n {\n drop: true,\n },\n async (options = {}) => {\n let { wps, alertMessage: alert, intl, loading } = this;\n\n let isNew = get(wps, 'isNew');\n\n let itemsToSave = await this._collectDirtyPasses();\n\n try {\n if (options.block) {\n if (options.customLoadingMessage) {\n loading.block(options.customLoadingMessage);\n } else {\n loading.block();\n }\n }\n await wps.save();\n // Reload data because the server does not send back all required included data\n // after a save operation\n let reloadedWPS = await this.data.loadAllDataWPS(get(wps, 'id'));\n set(this, 'model', reloadedWPS);\n await this._saveDirtyPasses(itemsToSave);\n if (!options.silentSave) {\n this._showSaveSuccessMessage();\n }\n this.resetTabErrors();\n this._postSave(wps, {\n isNew,\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n alert.error(intl.t('edit-view.actions.generic-error', { name: get(wps, 'wpsNumber') }));\n }\n } finally {\n if (options.block) {\n loading.unblock();\n }\n }\n }\n );\n\n downloadExcel = task(\n {\n drop: true,\n },\n async () => {\n set(this, 'onAfterSaveWithError', null);\n set(this, 'onAfterSaveWithErrorArguments', null);\n await downloadExcel(\n `/api/welding-procedure-specifications/${this.wps.id}/downloadExcel`,\n this.session\n );\n }\n );\n\n confirmDownloadExcel = task(\n {\n drop: true,\n },\n async () => {\n let { loading, intl } = this;\n\n if (!this.isVerifiedOrApproved) {\n if (!this.validateWpsAndPasses()) {\n this.showConfirmSaveWithError = true;\n set(this, 'onAfterSaveWithError', this.downloadExcel);\n return;\n }\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-excel-download'\n )\n );\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n\n try {\n await this.downloadExcel.perform();\n } finally {\n loading.unblock();\n }\n } else {\n await this.downloadExcel.perform();\n }\n }\n );\n\n downloadPdf = task(\n {\n drop: true,\n },\n async () => {\n let { wps, taskMonitor, alertMessage: alert, intl } = this;\n let wpsId = wps.id;\n if (taskMonitor.hasTaskByContext('wps-export-pdf', wpsId)) {\n taskMonitor.removeTaskByContext('wps-export-pdf', wpsId);\n }\n try {\n let response = await wps.generateExportPdf();\n if (response.status === '200') {\n taskMonitor.monitorTask.perform(response.taskIdentifier);\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.wps-export-error'\n )\n );\n }\n } catch (reason) {\n alert.error(\n intl.t('components.model-welding-procedure-specification/edit.messages.wps-export-error')\n );\n }\n }\n );\n\n confirmDownloadPdf = task(\n {\n drop: true,\n },\n async () => {\n let { loading, intl } = this;\n\n if (!this.isVerifiedOrApproved) {\n if (!this.validateWpsAndPasses()) {\n this.showConfirmSaveWithError = true;\n this.onAfterSaveWithError = this.downloadPdf;\n return;\n }\n\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-pdf-download'\n )\n );\n\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n try {\n await this.downloadPdf.perform();\n } finally {\n loading.unblock();\n }\n } else {\n await this.downloadPdf.perform();\n }\n }\n );\n\n dissimilarThickness = false;\n\n @computed(\n 'dissimilarMaterials',\n 'wps.{baseMaterial1,baseMaterial2,baseMaterial1Diameter,baseMaterial2Diameter,baseMaterial1Thickness,baseMaterial1ThicknessMaximum,baseMaterial2Thickness,baseMaterial2ThicknessMaximum}'\n )\n get hasDissimilarMaterials() {\n if (get(this, 'dissimilarMaterials')) {\n return true;\n }\n let hasBothMaterials =\n !isEmpty(get(this, 'wps.baseMaterial1.id')) && !isEmpty(get(this, 'wps.baseMaterial2.id'));\n if (\n get(this, 'wps.baseMaterial1.id') !== get(this, 'wps.baseMaterial2.id') &&\n hasBothMaterials\n ) {\n return true;\n }\n let hasBothDiameter =\n !isEmpty(get(this, 'wps.baseMaterial1Diameter')) &&\n !isEmpty(get(this, 'wps.baseMaterial2Diameter'));\n if (\n get(this, 'wps.baseMaterial1Diameter') !== get(this, 'wps.baseMaterial2Diameter') &&\n hasBothDiameter\n ) {\n return true;\n }\n\n let hasBothThicknessMinimum =\n !isEmpty(get(this, 'wps.baseMaterial1Thickness')) &&\n !isEmpty(get(this, 'wps.baseMaterial2Thickness'));\n if (\n get(this, 'wps.baseMaterial1Thickness') !== get(this, 'wps.baseMaterial2Thickness') &&\n hasBothThicknessMinimum\n ) {\n return true;\n }\n\n let hasBothThicknessMaximum =\n !isEmpty(get(this, 'wps.baseMaterial1ThicknessMaximum')) &&\n !isEmpty(get(this, 'wps.baseMaterial2ThicknessMaximum'));\n if (\n get(this, 'wps.baseMaterial1ThicknessMaximum') !==\n get(this, 'wps.baseMaterial2ThicknessMaximum') &&\n hasBothThicknessMaximum\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed('wps.wpsType', 'wps.project')\n get showLinkToProject() {\n return get(this, 'wps.wpsType') === WPS_TYPE.PROJECT && !isEmpty(get(this, 'wps.project.id'));\n }\n\n @and('currentWeldType', 'hasDissimilarMaterials')\n isFilletWeldAndDissimilarMaterials;\n\n @computed(`wps.${WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE}`)\n get isFilletWeld() {\n return isFilletWeld(this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE));\n }\n\n @computed('currentWeldType')\n get isPartialPenetrationButtWeld() {\n return get(this, 'wps').isPartialPenetrationButtWeld();\n }\n\n @computed('wps.{mainPqr,pqrFill,pqrCap}')\n get isMultiplePqr() {\n let hasRoot = !isEmpty(get(this, 'wps.mainPqr.id'));\n let hasFill = !isEmpty(get(this, 'wps.pqrFill.id'));\n let hasMultiple = hasRoot && hasFill;\n if (!hasMultiple) {\n return false;\n } else {\n let rootPqrId = get(this, 'wps.mainPqr.id');\n let fillPqrId = get(this, 'wps.pqrFill.id');\n let capPqrId = get(this, 'wps.pqrCap.id');\n let hasCap = !isEmpty(capPqrId);\n if (hasCap) {\n return rootPqrId !== fillPqrId || fillPqrId !== capPqrId;\n } else {\n return rootPqrId !== fillPqrId;\n }\n }\n }\n\n @computed('wps.{mainPqr,pqrFill,pqrCap}')\n get isSinglePqr() {\n let hasRoot = !isEmpty(get(this, 'wps.mainPqr.id'));\n let hasFill = !isEmpty(get(this, 'wps.pqrFill.id'));\n let hasMultiple = hasRoot && hasFill;\n if (!hasMultiple) {\n return true;\n } else {\n let rootPqrId = get(this, 'wps.mainPqr.id');\n let fillPqrId = get(this, 'wps.pqrFill.id');\n let capPqrId = get(this, 'wps.pqrCap.id');\n let hasCap = !isEmpty(capPqrId);\n if (hasCap) {\n return rootPqrId === fillPqrId && fillPqrId === capPqrId;\n } else {\n return rootPqrId === fillPqrId;\n }\n }\n }\n\n @computed('data.staffOptions.[]', 'userSession.isAccountAdmin', 'userSession.account.staff')\n get staffOptions() {\n let staffOptions = get(this, 'data.staffOptions');\n if (get(this, 'userSession.isAccountAdmin')) {\n return staffOptions;\n }\n\n let staff = get(this, 'userSession.account.staff');\n if (!isEmpty(staff) && !isEmpty(get(staff, 'id'))) {\n return staffOptions.filter((item) => {\n return get(item, 'id') === get(staff, 'id');\n });\n }\n return [];\n }\n\n // Classes to be added to the heat rows to show an animation when\n // the checkbox is clicked\n preHeatClasses = '';\n\n postHeatClasses = '';\n\n pwhtClasses = '';\n\n isValidPropertyList(propertiesToCheck) {\n let { wps } = this;\n let result = propertiesToCheck.find((property) => {\n if (!isEmpty(wps.get(`errors.${property}`))) {\n return true;\n }\n return false;\n });\n return isEmpty(result);\n }\n\n @sort('wps.weldingParameters', 'weldinParameterSortCriteria')\n weldingParametersOrdered;\n\n weldinParameterSortCriteria = ['orderNum:asc'];\n\n @notEmpty('wps.weldingProcessRoot.id')\n hasRoot;\n\n @notEmpty('wps.weldingProcessFill.id')\n hasFill;\n\n @notEmpty('wps.weldingProcessCap.id')\n hasCap;\n\n @computed('wps.{weldingProcessRoot.id,weldingProcessFill.id,weldingProcessCap.id}')\n get hasOnlyRoot() {\n if (\n !isEmpty(get(this, 'wps.weldingProcessRoot.id')) &&\n isEmpty(get(this, 'wps.weldingProcessFill.id')) &&\n isEmpty(get(this, 'wps.weldingProcessCap.id'))\n ) {\n return true;\n }\n if (\n isEmpty(get(this, 'wps.weldingProcessRoot.id')) &&\n isEmpty(get(this, 'wps.weldingProcessFill.id')) &&\n isEmpty(get(this, 'wps.weldingProcessCap.id'))\n ) {\n return true;\n }\n return false;\n }\n\n @computed(\n `wps.{${WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT},${WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL},${WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP}}`\n )\n get sameWeldingProcess() {\n let root = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT);\n let fill = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL);\n let cap = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP);\n return isSameProcess(root, fill, cap);\n }\n\n @computed(\n 'currentWeldType',\n 'hasOnlyRoot',\n 'hasRoot',\n 'isFilletWeld',\n 'isPartialPenetrationButtWeld',\n 'sameWeldingProcess'\n )\n get showThicknessRoot() {\n let isFilletWeld = get(this, 'isFilletWeld');\n if (isFilletWeld) {\n return false;\n }\n\n let isPPBW = get(this, 'isPartialPenetrationButtWeld');\n let hasRoot = get(this, 'hasRoot');\n if (isPPBW && hasRoot) {\n return true;\n }\n\n let hasOnlyRoot = get(this, 'hasOnlyRoot');\n if (hasOnlyRoot) {\n return false;\n }\n\n if (hasRoot) {\n return true;\n }\n\n return false;\n }\n\n @computed(\n 'currentWeldType',\n 'hasFill',\n 'isFilletWeld',\n 'isPartialPenetrationButtWeld',\n 'sameWeldingProcess'\n )\n get showThicknessFill() {\n let isFilletWeld = get(this, 'isFilletWeld');\n if (isFilletWeld) {\n return false;\n }\n\n let isPPBW = get(this, 'isPartialPenetrationButtWeld');\n let hasFill = get(this, 'hasFill');\n if (isPPBW && hasFill) {\n return true;\n }\n\n if (hasFill) {\n return true;\n }\n\n return false;\n }\n\n @computed('taskMonitor.currentTasks.[]')\n get wpsPdfProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'wps-export-pdf') {\n if (item.contextId === this.wps.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n @computed(\n 'currentWeldType',\n 'hasCap',\n 'isFilletWeld',\n 'isPartialPenetrationButtWeld',\n 'sameWeldingProcess'\n )\n get showThicknessCap() {\n let isFilletWeld = get(this, 'isFilletWeld');\n if (isFilletWeld) {\n return false;\n }\n\n let isPPBW = get(this, 'isPartialPenetrationButtWeld');\n let hasCap = get(this, 'hasCap');\n if (isPPBW && hasCap) {\n return true;\n }\n\n if (hasCap) {\n return true;\n }\n\n return false;\n }\n\n @computed('wps.jointType', 'weldLayerConfiguration.jointType')\n get jointTypeGrooveDesign() {\n let wpsJointType = get(this, 'wps.jointType');\n let weldLayerJointType = get(this, 'weldLayerConfiguration.jointType');\n if (!isEmpty(weldLayerJointType)) {\n return weldLayerJointType;\n } else if (!isEmpty(wpsJointType)) {\n return wpsJointType;\n }\n return null;\n }\n\n @computed('wps.jointType', 'grooveDesign.jointType')\n get jointTypeWeldLayer() {\n let wpsJointType = get(this, 'wps.jointType');\n let grooveDesignJointType = get(this, 'grooveDesign.jointType');\n if (!isEmpty(grooveDesignJointType)) {\n return grooveDesignJointType;\n } else if (!isEmpty(wpsJointType)) {\n return wpsJointType;\n }\n return null;\n }\n\n getGrooveType() {\n let grooveDesignGroove = get(this, 'grooveDesign.grooveType');\n let weldLayerGroove = get(this, 'weldLayerConfiguration.grooveType');\n let grooveType = !isEmpty(grooveDesignGroove) ? grooveDesignGroove : '';\n if (isEmpty(grooveType)) {\n if (!isEmpty(weldLayerGroove)) {\n grooveType = weldLayerGroove;\n }\n }\n return grooveType;\n }\n\n hasSchematic() {\n let grooveDesign = get(this, 'grooveDesign.id');\n let weldLayer = get(this, 'weldLayerConfiguration.id');\n return !isEmpty(grooveDesign) || !isEmpty(weldLayer);\n }\n\n @computed('grooveDesign.grooveType', 'weldLayerConfiguration.grooveType')\n get showGrooveAngle() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n let grooveType = this.getGrooveType();\n if (\n grooveType === GROOVE_SHAPE_OPTIONS.J_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.DOUBLE_J_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.U_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.DOUBLE_U_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.NO_SHAPE\n ) {\n return false;\n }\n\n return true;\n }\n\n @computed('grooveDesign.grooveType', 'weldLayerConfiguration.grooveType')\n get showRootFace() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n let grooveType = this.getGrooveType();\n if (\n grooveType === GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.NO_SHAPE\n ) {\n return false;\n }\n return true;\n }\n\n @computed(\n 'grooveDesign.grooveType',\n 'isFilletWeld',\n 'isOverlayWeld',\n 'weldLayerConfiguration.grooveType',\n 'wps.weldType'\n )\n get showRootGap() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n let grooveType = this.getGrooveType();\n if (\n grooveType === GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE ||\n grooveType === GROOVE_SHAPE_OPTIONS.NO_SHAPE\n ) {\n if (get(this, 'isFilletWeld')) {\n return false;\n }\n }\n\n let isOverlayWeld = get(this, 'isOverlayWeld');\n if (isOverlayWeld) {\n return false;\n }\n\n return true;\n }\n\n @computed('grooveDesign.grooveType', 'weldLayerConfiguration.grooveType', 'isOverlayWeld')\n get showNumberOfLayers() {\n if (!this.hasSchematic()) {\n return false;\n }\n\n if (this.isOverlayWeld) {\n return true;\n }\n\n return false;\n }\n\n @computed('wps.{preheatTemperatureMinimum,preheatTemperatureMaximum}')\n get showPreHeatPresenceMessage() {\n let wps = get(this, 'wps');\n if (!isEmpty(wps.validator)) {\n let min = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MINIMUM);\n let max = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MAXIMUM);\n let valid =\n wps.validator.isPreheatMinimumPresenceValid(min) &&\n wps.validator.isPreheatMaximumPresenceValid(max);\n return !valid;\n }\n return false;\n }\n\n @computed('showPreHeatPresenceMessage')\n get preHeatPresenceErrorMessage() {\n let wps = get(this, 'wps');\n if (!isEmpty(wps.validator)) {\n let min = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MINIMUM);\n let max = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MAXIMUM);\n let minMessage = wps.validator.preheatMinimumPresenceInvalidMessage(min);\n let maxMessage = wps.validator.preheatMaximumPresenceInvalidMessage(max);\n if (!isEmpty(minMessage)) {\n return minMessage;\n }\n if (!isEmpty(maxMessage)) {\n return maxMessage;\n }\n }\n return '';\n }\n\n @computed('wps.{postHeatTemperatureMinimum,postHeatTemperatureMaximum}')\n get showPostHeatPresenceMessage() {\n let wps = get(this, 'wps');\n if (!isEmpty(wps.validator)) {\n let min = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MINIMUM);\n let max = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MAXIMUM);\n let valid =\n wps.validator.isPostHeatMinimumPresenceValid(min) &&\n wps.validator.isPostHeatMaximumPresenceValid(max);\n return !valid;\n }\n return false;\n }\n\n @computed('showPostHeatPresenceMessage')\n get postHeatPresenceErrorMessage() {\n let wps = get(this, 'wps');\n if (!isEmpty(wps.validator)) {\n let min = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MINIMUM);\n let max = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MAXIMUM);\n let minMessage = wps.validator.postHeatMinimumPresenceInvalidMessage(min);\n let maxMessage = wps.validator.postHeatMaximumPresenceInvalidMessage(max);\n if (!isEmpty(minMessage)) {\n return minMessage;\n }\n if (!isEmpty(maxMessage)) {\n return maxMessage;\n }\n }\n return '';\n }\n\n @computed('wps.{postWeldHeatTreatmentTemperatureMinimum,postWeldHeatTreatmentTemperatureMaximum}')\n get showPWHTPresenceMessage() {\n let wps = get(this, 'wps');\n if (!isEmpty(wps.validator)) {\n let min = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM\n );\n let max = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM\n );\n let valid =\n wps.validator.isPWHTMinimumPresenceValid(min) &&\n wps.validator.isPWHTMaximumPresenceValid(max);\n return !valid;\n }\n return false;\n }\n\n @computed('showPWHTPresenceMessage')\n get pwhtPresenceErrorMessage() {\n let wps = get(this, 'wps');\n if (!isEmpty(wps.validator)) {\n let min = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM\n );\n let max = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM\n );\n let minMessage = wps.validator.pWHTMinimumPresenceInvalidMessage(min);\n let maxMessage = wps.validator.pWHTMaximumPresenceInvalidMessage(max);\n if (!isEmpty(minMessage)) {\n return minMessage;\n }\n if (!isEmpty(maxMessage)) {\n return maxMessage;\n }\n }\n return '';\n }\n\n hasErrorDetailsTab = false;\n\n hasErrorBaseMaterialsTab = false;\n\n hasErrorConsumablesTab = false;\n\n hasErrorOtherTab = false;\n\n hasErrorPassesTab = false;\n\n @tracked\n isShowingDeleteRevisionModal = false;\n\n revisionIdToDelete = null;\n\n calculateErrorDetailsTab() {\n let properties = [\n WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP,\n WELDING_PROCEDURE_SPECIFICATION.PRODUCT_TYPE,\n WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_FILL,\n WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_CAP,\n WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE,\n WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE,\n WELDING_PROCEDURE_SPECIFICATION.STANDARD,\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_FILL,\n WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_CAP,\n WELDING_PROCEDURE_SPECIFICATION.HEAT_INPUT_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.HEAT_INPUT_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_HEATING_RATE,\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_COOLING_RATE,\n WELDING_PROCEDURE_SPECIFICATION.INTERPASS_TEMPERATURE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.INTERPASS_TEMPERATURE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.TORCH_ANGLE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.TORCH_ANGLE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_ROOT_DIRECTION,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_FILL_DIRECTION,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_CAP_DIRECTION,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP,\n ];\n\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorDetailsTab', true);\n } else {\n set(this, 'hasErrorDetailsTab', false);\n }\n }\n\n calculateErrorBaseMaterialsTab() {\n let properties = [\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2,\n WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_FACE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_FACE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_GAP_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_GAP_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER,\n ];\n\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorBaseMaterialsTab', true);\n } else {\n set(this, 'hasErrorBaseMaterialsTab', false);\n }\n }\n\n calculateErrorConsumablesTab() {\n let properties = [\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP,\n WELDING_PROCEDURE_SPECIFICATION.BACKING,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS,\n WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX,\n WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_DIAMETERS,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_DIAMETERS,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_DIAMETERS,\n WELDING_PROCEDURE_SPECIFICATION.THROAT_THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.THROAT_THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_FACE_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_FACE_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_GAP_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.ROOT_GAP_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_FILL,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_CAP,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_FILL,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_CAP,\n ];\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorConsumablesTab', true);\n } else {\n set(this, 'hasErrorConsumablesTab', false);\n }\n }\n\n calculateErrorPassesTab() {\n let valid = true;\n let parameters = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n parameters.forEach((parameter) => {\n if (get(parameter, 'errors.length') > 0) {\n valid = false;\n }\n });\n set(this, 'hasErrorPassesTab', !valid);\n }\n\n calculateErrorOtherTab() {\n let properties = [\n WELDING_PROCEDURE_SPECIFICATION.NOTES,\n WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_FILL,\n WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_CAP,\n WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES,\n WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_FILL,\n WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_CAP,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_FILL,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_CAP,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_FILL,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_CAP,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_FILL,\n WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_CAP,\n WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE,\n WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED,\n ];\n\n if (!this.isValidPropertyList(properties)) {\n set(this, 'hasErrorOtherTab', true);\n } else {\n set(this, 'hasErrorOtherTab', false);\n }\n }\n\n resetTabErrors() {\n set(this, 'hasErrorDetailsTab', false);\n set(this, 'hasErrorBaseMaterialsTab', false);\n set(this, 'hasErrorConsumablesTab', false);\n set(this, 'hasErrorOtherTab', false);\n set(this, 'hasErrorPassesTab', false);\n }\n\n calculateArcTransferModeRootDisabled() {\n let standard = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n let weldingProcessRoot = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT\n );\n let result = PQRRules.isArcTransferModeDisabled(standard, weldingProcessRoot);\n set(this, 'isArcTransferModeRootDisabledByRule', result);\n }\n\n calculateArcTransferModeFillDisabled() {\n let standard = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n let weldingProcessFill = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL\n );\n let result = PQRRules.isArcTransferModeDisabled(standard, weldingProcessFill);\n set(this, 'isArcTransferModeFillDisabledByRule', result);\n }\n\n calculateArcTransferModeCapDisabled() {\n let standard = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n let weldingProcessCap = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP);\n let result = PQRRules.isArcTransferModeDisabled(standard, weldingProcessCap);\n set(this, 'isArcTransferModeCapDisabledByRule', result);\n }\n\n calculateArcTransferModesDisabled() {\n this.calculateArcTransferModeRootDisabled();\n this.calculateArcTransferModeFillDisabled();\n this.calculateArcTransferModeCapDisabled();\n }\n\n @empty('model.fillerMaterialRoot.id')\n fillerMaterialRootEmpty;\n\n @empty('model.fillerMaterialFill.id')\n fillerMaterialFillEmpty;\n\n @empty('model.fillerMaterialCap.id')\n fillerMaterialCapEmpty;\n\n @empty('model.standard.id')\n fieldsDisabled;\n\n @notEmpty('wps.standard.id')\n isStandardSelected;\n\n @computed('wps.standard.code.code')\n get isNotStandardISO() {\n let standard = this.get('wps.standard');\n if (!isEmpty(standard)) {\n let isISO = isStandardISO(standard);\n return !isISO;\n }\n return true;\n }\n\n @equal('section', 'details')\n showDetailsTab;\n\n @equal('section', 'baseMaterials')\n showBaseMaterialsTab;\n\n @equal('section', 'consumables')\n showConsumablesTab;\n\n @equal('section', 'other')\n showOtherTab;\n\n @equal('section', 'passes')\n showPassesTab;\n\n @equal('section', 'status')\n showStatusTab;\n\n @not('wps.isNew')\n showRevisionsTab;\n\n @equal('section', 'revisions')\n showRevisionsTabContent;\n\n @equal('section', 'projectWps')\n showProjectWpsTabContent;\n\n @equal('section', 'printOptions')\n showPrintOptionsTab;\n\n @computed('projectWpsFromThis')\n get showProjectWpsTab() {\n return parseInt(get(this, 'projectWpsFromThis.length')) > 0;\n }\n\n get hasRevisions() {\n return !isEmpty(this.revisionsCache);\n }\n\n @equal('wps.wpsType', WPS_TYPE.PRIMARY)\n isPrimaryWps;\n\n fetchRevisionsTask = task(\n {\n drop: true,\n },\n async () => {\n if (!this.wps.isNew) {\n let revisions = await this.wps.fetchRevisions();\n\n let processedRevisions = revisions.map(function (revision) {\n revision.canBeDeleted =\n revision.active &&\n isEmpty(revision.verifiedBy) &&\n isEmpty(revision.approvedBy) &&\n revisions.length > 1;\n return revision;\n });\n\n this.revisionsCache = processedRevisions;\n }\n }\n );\n\n @alias('revisionsCache')\n revisions;\n\n fetchProjectWpsTask = task(\n {\n restartable: true,\n },\n async () => {\n await timeout(250);\n if (!get(this, 'wps.isPrimary') || get(this, 'wps.isNew')) {\n set(this, 'projectWpsCache', []);\n } else {\n let result = await this.wps.fetchProjectWps();\n set(this, 'projectWpsCache', result);\n }\n }\n );\n\n @alias('projectWpsCache')\n projectWpsFromThis;\n\n @alias('wps.isNew')\n canEditRevision;\n\n // The currently editing welding parameter\n currentEditingParameter = null;\n\n // The currently deleting welding parameter\n currentDeletingParameter = null;\n\n @empty('currentDeletingParameter')\n isNotDeletingWeldingParameter;\n\n @notEmpty('currentEditingParameter')\n isEditingWeldingParameter;\n\n @equal('wps.weldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showWeldingDetailsParts;\n\n // Whether to show the 2 base materials, overlay welds always have both equal\n @not('isOverlayWeld')\n showBothBaseMaterials;\n\n @notEmpty('wps.weldType.id')\n hasWeldType;\n\n @computed('hasWeldType')\n get showJointType() {\n let hasWeldType = get(this, 'hasWeldType');\n let isNotOverlayWeld = !get(this, 'isOverlayWeld');\n return hasWeldType && isNotOverlayWeld;\n }\n\n @computed('wps.overlayType')\n get overlayTypeLabel() {\n let type = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE);\n if (!isEmpty(type)) {\n return this.intl.t(`lov.overlay-type.${type}`);\n }\n return '';\n }\n\n preHeatActivated = false;\n\n postHeatActivated = false;\n\n pwhtActivated = false;\n\n @computed('preHeatActivated', 'wps.{preheatTemperatureMinimum,preheatTemperatureMaximum}')\n get hasPreHeat() {\n let preHeatActivated = get(this, 'preHeatActivated');\n let wps = get(this, 'wps');\n let { preheatTemperatureMinimum: min, preheatTemperatureMaximum: max } = wps;\n return preHeatActivated || !isEmpty(min) || !isEmpty(max);\n }\n\n @computed('postHeatActivated', 'wps.{postHeatTemperatureMinimum,postHeatTemperatureMaximum}')\n get hasPostHeat() {\n let postHeatActivated = get(this, 'postHeatActivated');\n let wps = get(this, 'wps');\n let { postHeatTemperatureMinimum: min, postHeatTemperatureMaximum: max } = wps;\n return postHeatActivated || !isEmpty(min) || !isEmpty(max);\n }\n\n @computed(\n 'pwhtActivated',\n 'wps.{postWeldHeatTreatmentMethod,postWeldHeatTreatmentHeatingRate,postWeldHeatTreatmentCoolingRate,postWeldHeatTreatmentTemperatureMinimum,postWeldHeatTreatmentTemperatureMaximum,postWeldHeatTreatmentTimeMinimum,postWeldHeatTreatmentTimeMaximum}'\n )\n get hasPWHT() {\n let pwhtActivated = get(this, 'pwhtActivated');\n let wps = get(this, 'wps');\n let {\n postWeldHeatTreatmentMethod,\n postWeldHeatTreatmentHeatingRate,\n postWeldHeatTreatmentCoolingRate,\n postWeldHeatTreatmentTemperatureMinimum,\n postWeldHeatTreatmentTemperatureMaximum,\n postWeldHeatTreatmentTimeMinimum,\n postWeldHeatTreatmentTimeMaximum,\n } = wps;\n return (\n pwhtActivated ||\n !isEmpty(postWeldHeatTreatmentHeatingRate) ||\n !isEmpty(postWeldHeatTreatmentCoolingRate) ||\n !isEmpty(postWeldHeatTreatmentTemperatureMinimum) ||\n !isEmpty(postWeldHeatTreatmentTemperatureMaximum) ||\n !isEmpty(postWeldHeatTreatmentTimeMinimum) ||\n !isEmpty(postWeldHeatTreatmentTimeMaximum) ||\n !isEmpty(postWeldHeatTreatmentMethod)\n );\n }\n\n @computed('wps.postWeldHeatTreatmentHeatingRate', 'pqr.postWeldHeatTreatmentHeatingRateTestPiece')\n get isHeatingRateDifferent() {\n let wpsRate = get(this, 'wps.postWeldHeatTreatmentHeatingRate');\n let pqrRate = get(this, 'pqr.postWeldHeatTreatmentHeatingRateTestPiece');\n\n if (!isEmpty(wpsRate) && !isEmpty(pqrRate)) {\n if (parseFloat(wpsRate) !== parseFloat(pqrRate)) {\n return true;\n }\n }\n return false;\n }\n\n @computed('wps.postWeldHeatTreatmentCoolingRate', 'pqr.postWeldHeatTreatmentCoolingRateTestPiece')\n get isCoolingRateDifferent() {\n let wpsRate = get(this, 'wps.postWeldHeatTreatmentCoolingRate');\n let pqrRate = get(this, 'pqr.postWeldHeatTreatmentCoolingRateTestPiece');\n\n if (!isEmpty(wpsRate) && !isEmpty(pqrRate)) {\n if (parseFloat(wpsRate) !== parseFloat(pqrRate)) {\n return true;\n }\n }\n return false;\n }\n\n @computed('currentWeldType', 'hasDissimilarMaterials')\n get showWeldedLabel() {\n if (!get(this, 'isFilletWeld') && get(this, 'hasDissimilarMaterials')) {\n return true;\n }\n return false;\n }\n\n translateDimension(weldedProperty, regularProperty) {\n let showWeldedLabel = get(this, 'showWeldedLabel');\n if (showWeldedLabel) {\n return this.intl.t(\n `components.model-welding-procedure-specification/edit.${weldedProperty}`,\n { unit: get(this, 'distanceUnit') }\n );\n } else {\n return this.intl.t(`model.welding-procedure-specification.${regularProperty}.label`, {\n unit: get(this, 'distanceUnit'),\n });\n }\n }\n\n @computed('showWeldedLabel')\n get labelThicknessMin() {\n return this.translateDimension('welded-thickness-min', 'thicknessMinimum');\n }\n\n @computed('showWeldedLabel')\n get labelThicknessMax() {\n return this.translateDimension('welded-thickness-max', 'thicknessMaximum');\n }\n\n @computed('showWeldedLabel')\n get labelDiameterMin() {\n return this.translateDimension('welded-diameter-min', 'diameterMinimum');\n }\n\n @computed('showWeldedLabel')\n get labelDiameterMax() {\n return this.translateDimension('welded-diameter-max', 'diameterMaximum');\n }\n\n @computed('wps.grooveDesigns.firstObject')\n get grooveDesignLabel() {\n let { wps } = this;\n let { grooveDesigns } = wps;\n if (isEmpty(grooveDesigns)) {\n return '';\n }\n let { firstObject: groove } = grooveDesigns;\n\n if (isEmpty(groove)) {\n return '';\n }\n\n if (get(groove, 'imageSituation') === 'TEMPLATE') {\n return get(groove, 'description');\n } else {\n return this.intl\n .t(\n 'components.model-welding-procedure-specification/edit.labels.customized-groove-design',\n {\n certificateNumber: get(wps, 'wpsNumber'),\n }\n )\n .toString();\n }\n }\n\n @computed('wps.weldLayerConfigurations.firstObject')\n get weldLayerConfigurationLabel() {\n let { wps } = this;\n let { weldLayerConfigurations } = wps;\n if (isEmpty(weldLayerConfigurations)) {\n return '';\n }\n let { firstObject: weldLayer } = weldLayerConfigurations;\n\n if (isEmpty(weldLayer)) {\n return '';\n }\n\n if (get(weldLayer, 'imageSituation') === 'TEMPLATE') {\n return get(weldLayer, 'description');\n } else {\n return this.intl\n .t('components.model-welding-procedure-specification/edit.labels.customized-weld-layer', {\n certificateNumber: get(wps, 'wpsNumber'),\n })\n .toString();\n }\n }\n\n @computed('model.fillerMaterialRoot.id')\n get isFillerMaterialRootSelected() {\n return !isEmpty(this.model?.fillerMaterialRoot?.id);\n }\n\n @computed('model.fillerMaterialFill.id')\n get isFillerMaterialFillSelected() {\n return !isEmpty(this.model?.fillerMaterialFill?.id);\n }\n\n @computed('model.fillerMaterialCap.id')\n get isFillerMaterialCapSelected() {\n return !isEmpty(this.model?.fillerMaterialCap?.id);\n }\n\n _searchPQR(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.weldnoteData.searchPQR(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n searchProject = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return get(this, 'data').findProject(term);\n }\n );\n\n beforeEditModel() {\n this.calculateArcTransferModesDisabled();\n }\n\n beforeSave() {\n // Clear the revisions cache so that when saving a new WPS\n // the list of revisions will appear\n if (get(this, 'wps.isNew')) {\n this.fetchRevisionsTask.perform();\n }\n }\n\n /**\n * `wps.validate()` on its own does not reach the welding passes — see\n * `validateWpsAndPasses` for why.\n */\n validateWpsAndPasses() {\n return validateWpsAndPasses(this.wps);\n }\n\n /**\n * The passes are separate records, saving the WPS does not save them. They have to be\n * collected *before* the WPS is saved and reloaded, and saved afterwards.\n */\n async _collectDirtyPasses() {\n let passes = await this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n let itemsToSave = [];\n passes\n .filter((pass) => get(pass, 'hasDirtyAttributes') || get(pass, 'isNew'))\n .forEach((pass) => itemsToSave.pushObject(pass));\n return itemsToSave;\n }\n\n async _saveDirtyPasses(itemsToSave) {\n for (let i = 0; i < itemsToSave.length; i++) {\n await itemsToSave[i].save();\n }\n }\n\n _postSave(model, options) {\n if (options.isNew) {\n get(this, 'instanceCreated')();\n }\n // HACK: Reset the state of the editing pass component\n // so that if a user goes and saves the WPS without confirming the component\n // the state is not inconsistent\n set(this, 'currentEditingParameter', null);\n set(this, 'currentDeletingParameter', null);\n }\n\n updateWeldingParametersProcess(oldProcess, newProcess, layer) {\n let parameters = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n parameters.forEach((parameter) => {\n let weldingProcess = get(parameter, 'weldingProcess');\n let parameterLayer = get(parameter, 'layer');\n if (layer === parameterLayer) {\n if (!isEmpty(weldingProcess)) {\n if (!isEmpty(oldProcess) && !isEmpty(newProcess)) {\n if (weldingProcess.get('id') === oldProcess.get('id')) {\n parameter.set('weldingProcess', newProcess);\n }\n } else {\n if (isEmpty(newProcess)) {\n parameter.set('weldingProcess', null);\n }\n }\n }\n }\n });\n }\n\n validateField(field) {\n return this.wps.validate({ only: [field] });\n }\n\n validateFields(fields) {\n return this.wps.validate({ only: fields });\n }\n\n fetchAllRelations(wps) {\n return RSVP.hash({\n pqrs: wps.get(WELDING_PROCEDURE_SPECIFICATION.SECONDARY_PQRS),\n positionsRoot: wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT),\n positionsFill: wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL),\n positionsCap: wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP),\n grooveDesigns: wps.get(WELDING_PROCEDURE_SPECIFICATION.GROOVE_DESIGNS),\n weldLayers: wps.get(WELDING_PROCEDURE_SPECIFICATION.WELD_LAYER_CONFIGURATIONS),\n weldingDetails: wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS),\n parameters: wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS),\n preparationMethods: wps.get(WELDING_PROCEDURE_SPECIFICATION.PREPARATION_METHODS),\n specialRequirements: wps.get(WELDING_PROCEDURE_SPECIFICATION.SPECIAL_REQUIREMENTS),\n });\n }\n\n createFillerMaterialCommercialDesignation(designationName, fillerMaterial) {\n let designation = this.store.createRecord('filler-material-commercial-designation');\n designation.set('fillerMaterial', fillerMaterial);\n designation.set('commercialDesignation', designationName);\n return designation.save();\n }\n\n showCommercialDesignationSuccess(model) {\n let name = this.intl.t(`model.${model}.model-name`);\n let successMessage = this.intl.t('edit-view.actions.saved', { name });\n this.alertMessage.success(successMessage);\n }\n\n showCommercialDesignationError(model) {\n let name = this.intl.t(`model.${model}.model-name`);\n let errorMessage = this.intl.t('edit-view.actions.error', { name });\n this.alertMessage.error(errorMessage);\n }\n\n validationFailed() {\n this.calculateErrorDetailsTab();\n this.calculateErrorBaseMaterialsTab();\n this.calculateErrorConsumablesTab();\n this.calculateErrorOtherTab();\n this.calculateErrorPassesTab();\n }\n\n updateHeatInputApprovalRange() {\n Rules.updateHeatInputApprovalRange(this.wps);\n }\n\n // Reset any state that may exist in a tab that we need to check\n resetTabState() {\n set(this, 'currentDeletingParameter', null);\n }\n\n _setWeldLayerConfigurations(value) {\n this.setModelCollectionValue(WELDING_PROCEDURE_SPECIFICATION.WELD_LAYER_CONFIGURATIONS, value);\n this.resetWeldLayerImagePreview();\n }\n\n _setGrooveDesigns(value) {\n this.setModelCollectionValue(WELDING_PROCEDURE_SPECIFICATION.GROOVE_DESIGNS, value);\n this.resetGrooveDesignImagePreview();\n }\n\n removeAllRootVariables() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_ROOT, null);\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_ROOT_DIRECTION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_ROOT, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_ROOT, null);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_DIAMETERS, []);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_ROOT, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ELECTRODE_TYPE, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WEAVING, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.CONTACT_TUBE_DISTANCE, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TUNGSTEN_DIAMETER_ROOT, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ELECTRODE_FORM_ROOT, null);\n this.setModelValue(PQR.FILLER_MATERIAL_GUIDE_ROOT, null);\n this.setModelValue(PQR.OSCILLATION_WIDTH_ROOT, null);\n this.setModelValue(PQR.OSCILLATION_FREQUENCY_ROOT, null);\n this.setModelValue(PQR.OSCILLATION_DWELL_TIME_ROOT, null);\n this.setModelValue(PQR.SUPPLEMENTAL_DEVICE_ROOT, false);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT, null);\n\n Rules.clearShieldingRoot(get(this, 'wps'));\n }\n\n removeAllFillVariables() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_FILL, null);\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_FILL_DIRECTION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_FILL, null);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_DIAMETERS, []);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ELECTRODE_TYPE_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WEAVING_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.CONTACT_TUBE_DISTANCE_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TUNGSTEN_DIAMETER_FILL, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ELECTRODE_FORM_FILL, null);\n this.setModelValue(PQR.FILLER_MATERIAL_GUIDE_FILL, null);\n this.setModelValue(PQR.OSCILLATION_WIDTH_FILL, null);\n this.setModelValue(PQR.OSCILLATION_FREQUENCY_FILL, null);\n this.setModelValue(PQR.OSCILLATION_DWELL_TIME_FILL, null);\n this.setModelValue(PQR.SUPPLEMENTAL_DEVICE_FILL, false);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL, null);\n Rules.clearShieldingFill(get(this, 'wps'));\n }\n\n removeAllCapVariables() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_CAP, null);\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_CAP_DIRECTION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_CAP, null);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_DIAMETERS, []);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ELECTRODE_TYPE_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WEAVING_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.CONTACT_TUBE_DISTANCE_CAP, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TUNGSTEN_DIAMETER_CAP, null);\n\n this.setModelValue(PQR.FILLER_MATERIAL_ELECTRODE_FORM_CAP, null);\n this.setModelValue(PQR.FILLER_MATERIAL_GUIDE_CAP, null);\n this.setModelValue(PQR.OSCILLATION_WIDTH_CAP, null);\n this.setModelValue(PQR.OSCILLATION_FREQUENCY_CAP, null);\n this.setModelValue(PQR.OSCILLATION_DWELL_TIME_CAP, null);\n this.setModelValue(PQR.SUPPLEMENTAL_DEVICE_CAP, false);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP, null);\n Rules.clearShieldingCap(get(this, 'wps'));\n }\n\n calculateDiameterFromBaseMaterials() {\n let bm1Diameter = parseFloat(\n this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER)\n );\n let bm2Diameter = parseFloat(\n this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER)\n );\n if (!isNaN(bm1Diameter) && !isNaN(bm2Diameter)) {\n let min = Math.min(bm1Diameter, bm2Diameter);\n let max = Math.max(bm1Diameter, bm2Diameter);\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MINIMUM, min);\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MAXIMUM, max);\n } else if (!isNaN(bm1Diameter)) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MINIMUM, bm1Diameter);\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MAXIMUM, bm1Diameter);\n } else if (!isNaN(bm2Diameter)) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MINIMUM, bm2Diameter);\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MAXIMUM, bm2Diameter);\n }\n }\n\n init() {\n super.init(...arguments);\n this.beforeEditModel();\n set(this, 'clientsSearched', []);\n if (!get(this, 'wps.isNew')) {\n get(this, 'fetchProjectWpsTask').perform();\n if (get(this, 'wps.isPrimary')) {\n get(this, 'fetchProjects').perform();\n }\n get(this, 'fetchWelds').perform();\n this.fetchRevisionsTask.perform();\n }\n }\n\n deleteWPS() {\n let { wps, loading, alertMessage: alert, intl } = this;\n let label = get(wps, 'wpsNumber');\n let translation = intl.t('edit-view.actions.deleted', {\n name: get(wps, 'wpsNumber'),\n });\n loading.block();\n wps.deleteRecord();\n wps\n .save()\n .then(() => {\n alert.success(translation);\n if (wps.isPreliminary) {\n get(this, 'deleteInstance')('pwps');\n } else {\n get(this, 'deleteInstance')('wps');\n }\n })\n .catch((reason) => {\n wps.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n let foreignKeyMessage = intl\n .t('edit-view.actions.foreign-key-error', { name: label })\n .toString();\n alert.error(foreignKeyMessage);\n } else {\n alert.error(intl.t('edit-view.actions.generic-delete-error', { name: label }));\n }\n })\n .finally(() => {\n loading.unblock();\n this.toggleProperty('isShowingModal');\n });\n }\n\n async canWpsBeDeleted(wpsId, singleRevision) {\n let { loading, alertMessage: alert, intl, ajax } = this;\n\n loading.block();\n return ajax\n .put(`/welding-procedure-specifications/${wpsId}/canDelete`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({ singleRevision }),\n })\n .then(() => {\n set(this, 'wpsDeleteErrors', null);\n return true;\n })\n .catch(({ payload }) => {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/edit.delete.errors.cannot-delete'\n )\n );\n set(this, 'wpsDeleteErrors', payload);\n return false;\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n confirmWeldingParameter = task(async (parameter) => {\n if (parameter.validate()) {\n await this._saveWeldingParameter(parameter);\n }\n });\n\n /**\n * Reached from the \"save anyway\" button of `save-invalid-parameter-modal`: the pass is\n * known to be invalid and is persisted as is, the same escape hatch the WPS has.\n *\n * Returns whether the pass was persisted — the modal stays open on failure, so the user\n * keeps the values they typed. Dropped so a second click while the first save is in\n * flight is ignored rather than sent again.\n */\n saveWeldingParameterWithoutValidating = task(\n {\n drop: true,\n },\n async (parameter) => {\n let saved = await this._saveWeldingParameter(parameter);\n if (saved) {\n this.alertMessage.info(\n this.intl.t(\n 'components.model-welding-procedure-specification/edit.save-with-errors.messages.parameter-saved-with-errors',\n { passNumber: get(parameter, 'passNumber') }\n )\n );\n }\n return saved;\n }\n );\n\n async _saveWeldingParameter(parameter) {\n let { alertMessage: alert, intl } = this;\n try {\n await parameter.save();\n set(this, 'currentEditingParameter', null);\n return true;\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n alert.error(intl.t('edit-view.actions.error', { name: get(this, 'titleValue') }));\n }\n return false;\n }\n }\n\n moveSectionWithSaveWithoutSave = task(\n {\n drop: true,\n },\n async (section) => {\n // Reset this\n set(this, 'onAfterSaveWithError', null);\n set(this, 'onAfterSaveWithErrorArguments', null);\n\n set(this, 'section', section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n );\n\n moveSectionWithSave = task(\n {\n drop: true,\n },\n async (section) => {\n let { scroller, intl } = this;\n if (this.isVerified || this.isApproved) {\n set(this, 'section', section);\n scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n return;\n }\n if (this.validateWpsAndPasses()) {\n await this.saveWPS.perform({\n block: true,\n customLoadingMessage: intl\n .t('components.model-welding-procedure-specification/edit.messages.loading.saving-work')\n .toString(),\n });\n set(this, 'section', section);\n scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n } else {\n this.showConfirmSaveWithError = true;\n set(this, 'onAfterSaveWithError', this.moveSectionWithSaveWithoutSave);\n set(this, 'onAfterSaveWithErrorArguments', section);\n }\n }\n );\n\n reloadWps() {\n return this.data.loadAllDataWPS(this.wps.id, { reload: true });\n }\n\n @action\n saveModel() {\n let { wps, alertMessage: alert, intl } = this;\n if (!this.validateWpsAndPasses()) {\n this.validationFailed(wps);\n this.pushValidationErrorsToAnalytics();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n this.saveWPS.perform({\n block: true,\n });\n }\n\n @action\n setWpsNumber(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WPS_NUMBER, value);\n }\n\n @action\n setCompany(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.COMPANY, value);\n }\n\n @action\n setMainPqr(pqr) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR, pqr);\n if (!isEmpty(pqr)) {\n pqr.fetchAllRelations().then((relations) => {\n this.wps.copyFromPQR(pqr, relations);\n });\n }\n }\n\n @action\n searchPQR(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchPQR, term, resolve, reject, 500);\n });\n }\n\n @action\n setStandard(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.STANDARD, value);\n this.updateHeatInputApprovalRange();\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n }\n\n @action\n setProductType(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PRODUCT_TYPE, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.PRODUCT_TYPE);\n }\n\n @action\n setWeldType(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE, value);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.JOINT_TYPE, null);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE);\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.GROOVE_DESIGNS);\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELD_LAYER_CONFIGURATIONS);\n if (get(this, 'isFilletWeld')) {\n let currentDetailsTestPiece = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS\n );\n let validDetails = filterDetailsIncompatibleWithFilletWeld(currentDetailsTestPiece);\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS, validDetails);\n }\n if (get(this, 'isOverlayWeld')) {\n let currentDetailsTestPiece = this.getModelValue(\n WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS\n );\n let validDetails = filterDetailsIncompatibleWithOverlayWeld(currentDetailsTestPiece);\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS, validDetails);\n }\n if (isPartialPenetrationButtWeld(value)) {\n let currentDetails = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS);\n let validDetails = filterDetailsIncompatibleWithPartialPenetrationButtWeld(currentDetails);\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS, validDetails);\n }\n let hasPQR = !isEmpty(get(this, 'pqr.id'));\n if (hasPQR) {\n let pqr = get(this, 'wps').getPQR();\n applyThicknessFromPQR(get(this, 'wps'), pqr);\n }\n }\n\n @action\n setWeldingProcessRoot(value) {\n let oldProcess = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT);\n this.removeAllRootVariables();\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT, value);\n\n this.updateWeldingParametersProcess(oldProcess, value, WELDING_LAYER_OPTIONS.ROOT);\n if (this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT)) {\n this.calculateArcTransferModeRootDisabled();\n Rules.updateShieldingRoot(get(this, 'wps'));\n }\n if (isEmpty(value)) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL, null);\n this.removeAllFillVariables();\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP, null);\n this.removeAllCapVariables();\n }\n }\n\n @action\n setWeldingProcessFill(value) {\n let oldProcess = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL);\n this.removeAllFillVariables();\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL, value);\n\n this.updateWeldingParametersProcess(oldProcess, value, WELDING_LAYER_OPTIONS.FILL);\n if (this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL)) {\n this.calculateArcTransferModeFillDisabled();\n Rules.updateShieldingFill(get(this, 'wps'));\n }\n if (isEmpty(value)) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP, null);\n this.removeAllCapVariables();\n }\n }\n\n @action\n setWeldingProcessCap(value) {\n let oldProcess = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP);\n this.removeAllCapVariables();\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP, value);\n\n this.updateWeldingParametersProcess(oldProcess, value, WELDING_LAYER_OPTIONS.CAP);\n if (this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP)) {\n this.calculateArcTransferModeCapDisabled();\n Rules.updateShieldingCap(get(this, 'wps'));\n }\n }\n\n @action\n setBaseMaterial1(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1, value);\n let baseMaterial2 = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2);\n if (\n isEmpty(baseMaterial2) ||\n (baseMaterial2 !== null && isEmpty(baseMaterial2.get('id'))) ||\n get(this, 'isOverlayWeld')\n ) {\n this.setBaseMaterial2(value);\n }\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1);\n }\n\n @action\n removeBaseMaterial1() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1, null);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1);\n if (!get(this, 'hasDissimilarMaterials')) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2, null);\n }\n }\n\n @action\n setBaseMaterial2(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2, value);\n let baseMaterial1 = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1);\n if (isEmpty(baseMaterial1) || (baseMaterial1 !== null && isEmpty(baseMaterial1.get('id')))) {\n this.setBaseMaterial1(value);\n }\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2);\n }\n\n @action\n removeBaseMaterial2() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2, null);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2);\n }\n\n @action\n setThicknessMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM);\n }\n\n @action\n setThicknessMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM);\n }\n\n @action\n setDiameterMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MINIMUM);\n }\n\n @action\n setDiameterMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.DIAMETER_MAXIMUM);\n }\n\n @action\n setWeldingPositionsRoot(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT);\n }\n\n @action\n setWeldingPositionsFill(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL);\n }\n\n @action\n setWeldingPositionsCap(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP);\n }\n\n @action\n setFillerMaterialRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT, value);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION,\n null\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT);\n }\n\n @action\n removeFillerMaterialRoot() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION,\n null\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT);\n }\n\n @action\n setFillerMaterialRootCommercialDesignation(value) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialRoot(fillerMaterial);\n }\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION,\n value\n );\n\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT,\n ]);\n }\n\n @action\n setFillerMaterialFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL, value);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION,\n null\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL);\n }\n\n @action\n setFillerMaterialCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP, value);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION,\n null\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP);\n }\n\n @action\n removeFillerMaterialFill() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION,\n null\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP);\n }\n\n @action\n removeFillerMaterialCap() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION,\n null\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP);\n }\n\n @action\n setFillerMaterialFillCommercialDesignation(value) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialFill(fillerMaterial);\n }\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION,\n value\n );\n this.validateFields(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL\n );\n }\n\n @action\n setFillerMaterialCapCommercialDesignation(value) {\n if (!isEmpty(value)) {\n let fillerMaterial = value.get('fillerMaterial');\n this.setFillerMaterialCap(fillerMaterial);\n }\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION,\n value\n );\n\n this.validateFields(\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP\n );\n }\n\n @action\n setShieldingRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT, value);\n Rules.clearShieldingFill(get(this, 'wps'));\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT);\n }\n\n @action\n setShieldingRootGas(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS, value);\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS);\n }\n\n @action\n removeShieldingRootGas() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS);\n }\n\n @action\n setShieldingRootGasCommercialDesignation(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION,\n value\n );\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setShieldingRootGasMixture(gasMixture);\n }\n } else {\n this.setShieldingRootGasMixture(null);\n }\n }\n\n @action\n setShieldingRootFlux(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX, value);\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX);\n }\n\n @action\n removeShieldingRootFlux() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX);\n }\n\n @action\n setShieldingRootFluxCommercialDesignation(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION);\n }\n\n @action\n setFlowRateRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_ROOT, value);\n }\n\n @action\n setFlowRateProcess1Min(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_PROCESS1_MINIMUM, value);\n }\n\n @action\n setFlowRateProcess1Max(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_PROCESS1_MAXIMUM, value);\n }\n\n @action\n setFlowRateProcess2Min(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_PROCESS2_MINIMUM, value);\n }\n\n @action\n setFlowRateProcess2Max(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_PROCESS2_MAXIMUM, value);\n }\n\n @action\n setFlowRateProcess3Min(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_PROCESS3_MINIMUM, value);\n }\n\n @action\n setFlowRateProcess3Max(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_PROCESS3_MAXIMUM, value);\n }\n\n @action\n setShieldingFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL, value);\n Rules.clearShieldingFill(get(this, 'wps'));\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL);\n }\n\n @action\n setShieldingFillGas(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS, value);\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS);\n }\n\n @action\n removeShieldingFillGas() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS);\n }\n\n @action\n setShieldingFillGasCommercialDesignation(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION,\n value\n );\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setShieldingFillGasMixture(gasMixture);\n }\n } else {\n this.setShieldingFillGasMixture(null);\n }\n }\n\n @action\n setShieldingFillFlux(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX, value);\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX);\n }\n\n @action\n removeShieldingFillFlux() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX);\n }\n\n @action\n setShieldingFillFluxCommercialDesignation(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION);\n }\n\n @action\n setFlowRateFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_FILL, value);\n }\n\n @action\n setShieldingCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP, value);\n Rules.clearShieldingCap(get(this, 'wps'));\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP);\n }\n\n @action\n setShieldingCapGas(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS, value);\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS);\n }\n\n @action\n removeShieldingCapGas() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS);\n }\n\n @action\n setShieldingCapGasCommercialDesignation(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION,\n value\n );\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setShieldingCapGasMixture(gasMixture);\n }\n } else {\n this.setShieldingCapGasMixture(null);\n }\n }\n\n @action\n setShieldingCapFlux(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX, value);\n\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX);\n }\n\n @action\n removeShieldingCapFlux() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION,\n null\n );\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX);\n }\n\n @action\n setShieldingCapFluxCommercialDesignation(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION);\n }\n\n @action\n setFlowRateCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_CAP, value);\n }\n\n @action\n setBacking(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING, value);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_COMMERCIAL_DESIGNATION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_MIXTURE, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX_COMMERCIAL_DESIGNATION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLOW_RATE_ROOT, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLOW_RATE_FILL, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLOW_RATE_CAP, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BACKING);\n }\n\n @action\n setBackingGas(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS, value);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_COMMERCIAL_DESIGNATION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS);\n }\n\n @action\n removeBackingGas() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_COMMERCIAL_DESIGNATION, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_MIXTURE, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS);\n }\n\n @action\n setBackingGasCommercialDesignation(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_COMMERCIAL_DESIGNATION, value);\n\n if (!isEmpty(value)) {\n let gasMixture = value.get('gasMixture');\n if (!isEmpty(gasMixture)) {\n this.setBackingGasMixture(gasMixture);\n }\n } else {\n this.setBackingGasMixture(null);\n }\n }\n\n @action\n setBackingFlux(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX, value);\n\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX_COMMERCIAL_DESIGNATION, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX);\n }\n\n @action\n removeBackingFlux() {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX_COMMERCIAL_DESIGNATION, null);\n\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX);\n }\n\n @action\n setBackingFluxCommercialDesignation(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX_COMMERCIAL_DESIGNATION, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLUX_COMMERCIAL_DESIGNATION);\n }\n\n @action\n setBackingFlowRateRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLOW_RATE_ROOT, value);\n }\n\n @action\n setBackingFlowRateFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLOW_RATE_FILL, value);\n }\n\n @action\n setBackingFlowRateCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_FLOW_RATE_CAP, value);\n }\n\n @action\n setRootFaceMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.ROOT_FACE_MINIMUM, value);\n }\n\n @action\n setRootFaceMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.ROOT_FACE_MAXIMUM, value);\n }\n\n @action\n setRootGapMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.ROOT_GAP_MINIMUM, value);\n }\n\n @action\n setRootGapMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.ROOT_GAP_MAXIMUM, value);\n }\n\n @action\n setElectrodeType(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ELECTRODE_TYPE, value);\n }\n\n @action\n setNumberOfElectrodes(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES);\n }\n\n @action\n setNumberOfElectrodesFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_FILL);\n }\n\n @action\n setNumberOfElectrodesCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.NUMBER_OF_ELECTRODES_CAP);\n }\n\n @action\n setPulsedWeldingDetails(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PULSED_WELDING_DETAILS, value);\n }\n\n @action\n setWeaving(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WEAVING, value);\n }\n\n @action\n setContactTubeDistance(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.CONTACT_TUBE_DISTANCE, value);\n }\n\n @action\n setBackGaugingDetails(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACK_GAUGING_DETAILS, value);\n }\n\n @action\n setPostWeldHeatTreatmentTimeMinimum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM);\n }\n\n @action\n setPostWeldHeatTreatmentTimeMaximum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM);\n }\n\n @action\n setPostWeldHeatTreatmentMethod(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_METHOD, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_METHOD);\n }\n\n @action\n setPostWeldHeatTreatmentHeatingRate(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_HEATING_RATE,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_HEATING_RATE);\n }\n\n @action\n setPostWeldHeatTreatmentCoolingRate(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_COOLING_RATE,\n value\n );\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_COOLING_RATE);\n }\n\n @action\n setRevision(value) {\n if (!isEmpty(value)) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.REVISION, value.toUpperCase());\n } else {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.REVISION, null);\n }\n }\n\n @action\n setStatus(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.STATUS, value);\n }\n\n @action\n setWeldingParameters(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS, value);\n }\n\n @action\n dummy() {}\n\n @action\n addNewParameter() {\n let parameters = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n\n let max = 0;\n parameters.forEach((p) => {\n if (p.get('orderNum') > max) {\n max = p.get('orderNum');\n }\n });\n\n let newParam = this.store.createRecord('wps-welding-parameter', {\n orderNum: max + 1,\n passNumber: max + 1,\n });\n set(newParam, 'wps', this.wps);\n parameters.pushObject(newParam);\n set(this, 'currentEditingParameter', newParam);\n later(\n this,\n function () {\n this.scroller.scrollVertical('[data-welding-pass-edit]');\n },\n 300\n );\n }\n\n @action\n addNewLinkedParameter() {\n set(this, 'showNewLinkedParameter', true);\n }\n\n @action\n async createLinkedParameter(pqrPass, layer) {\n let { alertMessage: alert, store, wps, intl } = this;\n let parameters = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n\n let max = 0;\n parameters.forEach((p) => {\n if (p.orderNum > max) {\n max = p.orderNum;\n }\n });\n\n let { key: layerName } = layer;\n\n let newLinkedPass = store.createRecord('wps-welding-parameter');\n set(newLinkedPass, 'orderNum', max + 1);\n set(newLinkedPass, 'passNumber', pqrPass.passNumber);\n set(newLinkedPass, 'sourceParameter', pqrPass);\n set(newLinkedPass, 'currentMinimum', pqrPass.currentMinimum);\n set(newLinkedPass, 'currentMaximum', pqrPass.currentMaximum);\n set(newLinkedPass, 'voltageMinimum', pqrPass.voltageMinimum);\n set(newLinkedPass, 'voltageMaximum', pqrPass.voltageMaximum);\n set(newLinkedPass, 'typeCurrent', pqrPass.typeCurrent);\n set(newLinkedPass, 'wireFeedSpeedMinimum', pqrPass.wireFeedSpeedMinimum);\n set(newLinkedPass, 'wireFeedSpeedMaximum', pqrPass.wireFeedSpeedMaximum);\n set(newLinkedPass, 'travelSpeedMinimum', pqrPass.travelSpeedMinimum);\n set(newLinkedPass, 'travelSpeedMaximum', pqrPass.travelSpeedMaximum);\n set(newLinkedPass, 'heatInputMinimum', pqrPass.heatInputMinimum);\n set(newLinkedPass, 'heatInputMaximum', pqrPass.heatInputMaximum);\n set(newLinkedPass, 'arcTransferMode', pqrPass.arcTransferMode);\n set(newLinkedPass, 'wps', wps);\n set(newLinkedPass, 'layer', layerName);\n set(newLinkedPass, 'sourceParameter', pqrPass);\n set(newLinkedPass, 'additionalData', pqrPass.additionalData);\n set(\n newLinkedPass,\n 'weldingPositions',\n isEmpty(pqrPass.weldingPositions) ? [] : pqr.weldingPositions\n );\n set(newLinkedPass, 'program', pqrPass.program);\n\n let parametersToCopy = [];\n if (layerName === WELDING_LAYER_OPTIONS.ROOT) {\n parametersToCopy = wps.fillerMaterialRootDiameters;\n } else if (layerName === WELDING_LAYER_OPTIONS.FILL) {\n parametersToCopy = wps.fillerMaterialFillDiameters;\n } else if (layerName === WELDING_LAYER_OPTIONS.CAP) {\n parametersToCopy = wps.fillerMaterialCapDiameters;\n }\n\n if (!isEmpty(parametersToCopy) && parametersToCopy.length > 3) {\n parametersToCopy = parametersToCopy.map((e) => `${e}`).slice(0, 3);\n }\n\n set(newLinkedPass, 'fillerMaterialDiameters', parametersToCopy);\n\n parameters.pushObject(newLinkedPass);\n let newPass = await newLinkedPass.save();\n let ranges = await wps.validationRange();\n let validator = null;\n if (isStandardAWSB21(wps.standard)) {\n validator = new AwsB21Validator(ranges, wps, this.intl);\n } else {\n validator = new WpsValidation(ranges, wps, this.intl);\n }\n set(wps, 'validator', validator);\n set(this, 'currentEditingParameter', newPass);\n set(this, 'showNewLinkedParameter', false);\n alert.success(\n intl\n .t('components.model-welding-procedure-specification/edit.messages.add-linked-pass-success')\n .toString()\n );\n later(\n this,\n function () {\n this.scroller.scrollVertical('[data-welding-pass-edit]');\n },\n 300\n );\n }\n\n @action\n editWeldingParameter(parameter) {\n set(this, 'currentEditingParameter', parameter);\n }\n\n @action\n stopEditingWeldingParameter(parameter) {\n parameter.rollbackAttributes();\n set(this, 'currentEditingParameter', null);\n }\n\n @action\n deleteWeldingParameter(parameter) {\n let parameters = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n let { alertMessage: alert, intl, store } = this;\n if (parameters.includes(parameter)) {\n if (!parameter.get('isNew')) {\n parameter\n .destroyRecord()\n .then(() => {\n parameters.removeObject(parameter);\n this.updateHeatInputApprovalRange();\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/edit.welding-parameter-deleted-sucess'\n )\n );\n })\n .catch(() => {\n parameter.rollbackAttributes();\n alert.error(\n intl.t('edit-view.actions.generic-delete-error', {\n name: parameter.passNumber,\n })\n );\n });\n } else {\n parameters.removeObject(parameter);\n this.updateHeatInputApprovalRange();\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/edit.welding-parameter-deleted-sucess'\n )\n );\n store.unloadRecord(parameter);\n }\n }\n set(this, 'currentDeletingParameter', null);\n }\n\n @action\n confirmDeleteWeldingParameter(parameter) {\n set(this, 'currentDeletingParameter', parameter);\n }\n\n @action\n cancelDeleteWeldingParameter() {\n set(this, 'currentDeletingParameter', null);\n }\n\n @action\n setGrooveDesigns(value) {\n this._setGrooveDesigns(value);\n let { wps } = this;\n\n if (!isEmpty(value) && !isEmpty(get(value, 'id'))) {\n let options = {};\n let filters = {};\n let weldType = get(this, 'currentWeldType.id');\n if (!isEmpty(weldType)) {\n filters.weldType = weldType;\n }\n let grooveType = get(value, 'grooveType');\n if (!isEmpty(grooveType)) {\n filters.grooveType = grooveType;\n }\n if (get(this, 'wps.weldingDetails.length') > 0) {\n filters.weldingDetails = get(this, 'wps.weldingDetails')\n .map((elem) => {\n return get(elem, 'id');\n })\n .join(',');\n }\n if (!isEmpty(get(value, 'jointType'))) {\n filters.jointType = get(value, 'jointType');\n }\n this.data.listAllWeldLayerConfigurations(options, filters).then((items) => {\n if (\n parseInt(get(items, 'length')) === 1 &&\n get(wps, 'weldLayerConfigurations.length') === 0\n ) {\n this._setWeldLayerConfigurations(get(items, 'firstObject'));\n }\n });\n }\n }\n\n @action\n setWeldLayerConfigurations(value) {\n this._setWeldLayerConfigurations(value);\n let { wps } = this;\n\n if (!isEmpty(value) && !isEmpty(get(value, 'id'))) {\n let options = {};\n let filters = {};\n let weldType = get(this, 'currentWeldType.id');\n if (!isEmpty(weldType)) {\n filters.weldType = weldType;\n }\n let grooveType = get(value, 'grooveType');\n if (!isEmpty(grooveType)) {\n filters.grooveType = grooveType;\n }\n if (get(this, 'wps.weldingDetails.length') > 0) {\n filters.weldingDetails = get(this, 'wps.weldingDetails')\n .map((elem) => get(elem, 'id'))\n .join(',');\n }\n if (!isEmpty(get(value, 'jointType'))) {\n filters.jointType = get(value, 'jointType');\n }\n this.data.listAllGrooveDesigns(options, filters).then((items) => {\n if (parseInt(get(items, 'length')) === 1 && get(wps, 'grooveDesigns.length') === 0) {\n this._setGrooveDesigns(get(items, 'firstObject'));\n }\n });\n }\n }\n\n @action\n setWeldingDetails(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS);\n }\n\n @action\n setBranchAngleMinimum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MINIMUM);\n }\n\n @action\n setBranchAngleMaximum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE_MAXIMUM);\n }\n\n @action\n setGrooveAngleMinimum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.GROOVE_ANGLE_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.GROOVE_ANGLE_MINIMUM);\n }\n\n @action\n setGrooveAngleMaximum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.GROOVE_ANGLE_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.GROOVE_ANGLE_MAXIMUM);\n }\n\n @action\n setPostWeldHeatTreatmentTemperatureMinimum(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM,\n value\n );\n this.validateField(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM\n );\n }\n\n @action\n setPostWeldHeatTreatmentTemperatureMaximum(value) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM,\n value\n );\n this.validateField(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM\n );\n }\n\n @action\n setThroatThicknessMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THROAT_THICKNESS_MINIMUM, value);\n if (\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THROAT_THICKNESS_MINIMUM) &&\n get(this, 'isFilletWeldAndDissimilarMaterials')\n ) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM, value);\n }\n }\n\n @action\n setThroatThicknessMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THROAT_THICKNESS_MAXIMUM, value);\n if (\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THROAT_THICKNESS_MAXIMUM) &&\n get(this, 'isFilletWeldAndDissimilarMaterials')\n ) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM, value);\n }\n }\n\n @action\n setPreheatTemperatureMinimum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MINIMUM);\n }\n\n @action\n setPreheatTemperatureMaximum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MAXIMUM);\n }\n\n @action\n setInterpassTemperatureMinimum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.INTERPASS_TEMPERATURE_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.INTERPASS_TEMPERATURE_MINIMUM);\n }\n\n @action\n setInterpassTemperatureMaximum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.INTERPASS_TEMPERATURE_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.INTERPASS_TEMPERATURE_MAXIMUM);\n }\n\n @action\n setPostHeatTemperatureMinimum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MINIMUM);\n }\n\n @action\n setPostHeatTemperatureMaximum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MAXIMUM);\n }\n\n @action\n setSecondaryPqrs(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.SECONDARY_PQRS, value);\n }\n\n @action\n setNotes(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.NOTES, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.NOTES);\n }\n\n @action\n setPreparationMethods(value) {\n this.setModelCollection(WELDING_PROCEDURE_SPECIFICATION.PREPARATION_METHODS, value);\n }\n\n @action\n setTorchAngleMinimum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TORCH_ANGLE_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.TORCH_ANGLE_MINIMUM);\n }\n\n @action\n setTorchAngleMaximum(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TORCH_ANGLE_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.TORCH_ANGLE_MAXIMUM);\n }\n\n @action\n setSection(type) {\n set(this, 'section', type);\n this.resetTabState();\n }\n\n @action\n setSectionScroll(section) {\n set(this, 'section', section);\n this.scroller.scrollVertical('.nav-tabs', {\n duration: 0,\n easing: 'linear',\n });\n }\n\n @action\n autoScrollToSection() {\n if (this.autoScroll) {\n this.setSectionScroll(this.section);\n }\n }\n\n @action\n newRevision() {\n set(this, 'showNewRevision', true);\n }\n\n @action\n cancelRevision() {\n set(this, 'showNewRevision', false);\n }\n\n @action\n createNewRevision(revision, revisionNotes) {\n let originalWps = get(this, 'wps');\n let { loading, intl, alertMessage } = this;\n let error = false;\n if (!isEmpty(revision)) {\n loading.block();\n originalWps\n .createRevision({\n revision,\n revisionNotes,\n })\n .then((wps) => {\n get(this, 'revisionCreated')(wps.id);\n let translation = intl\n .t(\n 'components.model-welding-procedure-specification/edit.revisions.revision-created-message',\n {\n revision,\n }\n )\n .toString();\n alertMessage.success(translation);\n })\n .catch((reason) => {\n error = true;\n if (isDuplicateError(reason)) {\n alertMessage.error(\n intl\n .t('components.model-welding-procedure-specification/edit.duplicate-wps-copy')\n .toString()\n );\n } else {\n alertMessage.error(\n intl.t('edit-view.actions.error', { name: get(this, 'titleValue') })\n );\n }\n })\n .finally(() => {\n if (!error) {\n set(this, 'showNewRevision', false);\n }\n loading.unblock();\n });\n }\n }\n\n @action\n showCopyWPSScreen() {\n set(this, 'showCopyWPS', true);\n }\n\n @action\n cancelShowCopyWPSScreen() {\n set(this, 'showCopyWPS', false);\n }\n\n @action\n createFillerMaterialRootCommercialDesignation(designationName, fillerMaterial) {\n this.loading.block();\n this.createFillerMaterialCommercialDesignation(designationName, fillerMaterial)\n .then((designation) => {\n this.setFillerMaterialRootCommercialDesignation(designation);\n this.showCommercialDesignationSuccess('filler-material-commercial-designation');\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('filler-material-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createFillerMaterialFillCommercialDesignation(designationName, fillerMaterial) {\n this.loading.block();\n this.createFillerMaterialCommercialDesignation(designationName, fillerMaterial)\n .then((designation) => {\n this.setFillerMaterialFillCommercialDesignation(designation);\n this.showCommercialDesignationSuccess('filler-material-commercial-designation');\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('filler-material-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n createFillerMaterialCapCommercialDesignation(designationName, fillerMaterial) {\n this.loading.block();\n this.createFillerMaterialCommercialDesignation(designationName, fillerMaterial)\n .then((designation) => {\n this.setFillerMaterialCapCommercialDesignation(designation);\n this.showCommercialDesignationSuccess('filler-material-commercial-designation');\n this.analytics.trackEvent('create-filler-material-commercial-designation-inline', {\n type: 'filler-material-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n })\n .catch(() => {\n this.showCommercialDesignationError('filler-material-commercial-designation');\n })\n .finally(() => {\n this.loading.unblock();\n });\n }\n\n @action\n setGasNozzleDiameterRoot(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_ROOT);\n }\n\n @action\n setGasNozzleDiameterFill(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_FILL);\n }\n\n @action\n setGasNozzleDiameterCap(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.GAS_NOZZLE_DIAMETER_CAP);\n }\n\n @action\n setProcessMecanizationRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_ROOT);\n }\n\n @action\n setProcessMecanizationFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_FILL);\n }\n\n @action\n setProcessMecanizationCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_CAP);\n }\n\n @action\n setShieldingRootGasMixture(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_MIXTURE, value);\n }\n\n @action\n setShieldingFillGasMixture(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_MIXTURE, value);\n }\n\n @action\n setShieldingCapGasMixture(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_MIXTURE, value);\n }\n\n @action\n setBackingGasMixture(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BACKING_GAS_MIXTURE, value);\n }\n\n @action\n setArcTransferModeRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_ROOT);\n }\n\n @action\n setArcTransferModeFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_FILL);\n }\n\n @action\n setArcTransferModeCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_CAP);\n }\n\n @action\n setTypeCurrentRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_ROOT);\n }\n\n @action\n setTypeCurrentFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_FILL);\n }\n\n @action\n setTypeCurrentCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_CAP);\n }\n\n @action\n setBaseMaterial1ThicknessMinimum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM,\n value\n );\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM,\n ]);\n }\n\n @action\n setBaseMaterial1ThicknessMaximum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n value\n );\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MAXIMUM,\n ]);\n }\n\n @action\n setBaseMaterial1Diameter(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER, value);\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER,\n ]);\n this.calculateDiameterFromBaseMaterials();\n }\n\n @action\n setBaseMaterial2ThicknessMinimum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM,\n value\n );\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM,\n ]);\n }\n\n @action\n setBaseMaterial2ThicknessMaximum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MAXIMUM,\n value\n );\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MAXIMUM,\n ]);\n }\n\n @action\n setBaseMaterial2Diameter(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER, value);\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER,\n ]);\n this.calculateDiameterFromBaseMaterials();\n }\n\n @action\n setOverlayType(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE, value);\n // Need to validate both because when OW is selected in the WeldType\n // the dropdown appears and this method is called which makes the validation\n // of weldtype disappear if it has an error\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE,\n WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE,\n ]);\n }\n\n @action\n setPostHeatTimeMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MINIMUM);\n }\n\n @action\n setPostHeatTimeMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MAXIMUM);\n }\n\n @action\n moveUp(parameter) {\n let orderNum = get(parameter, 'orderNum');\n let parameters = get(this, 'wps.weldingParameters');\n\n parameters.forEach((item) => {\n if (get(item, 'orderNum') === orderNum - 1) {\n item.set('orderNum', orderNum);\n parameter.set('orderNum', orderNum - 1);\n return;\n }\n });\n }\n\n @action\n moveDown(parameter) {\n let orderNum = get(parameter, 'orderNum');\n let parameters = get(this, 'wps.weldingParameters');\n\n parameters.forEach((item) => {\n if (get(item, 'orderNum') === orderNum + 1) {\n item.set('orderNum', orderNum);\n parameter.set('orderNum', orderNum + 1);\n return;\n }\n });\n }\n\n @action\n updateRevision(wpsNumber) {\n let { alertMessage, loading, intl } = this;\n loading.block();\n get(this, 'wps')\n .updateRevisionId({\n newDesignation: wpsNumber,\n })\n .then(() => {\n this.reloadWps();\n alertMessage.success(\n intl.t('components.model-welding-procedure-specification/edit.update-number-sucess', {\n wpsNumber,\n })\n );\n set(this, 'showUpdateRevision', false);\n })\n .catch((error) => {\n if (isDuplicateError(error)) {\n alertMessage.error(\n intl.t('components.model-welding-procedure-specification/edit.duplicate-wps-copy')\n );\n } else {\n alertMessage.error(\n intl.t('components.model-welding-procedure-specification/edit.error-updating-number')\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n checkPreHeat(newValue) {\n set(this, 'preHeatActivated', newValue);\n if (!newValue) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MINIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE_MAXIMUM, null);\n }\n if (newValue === true) {\n set(this, 'preHeatClasses', 'blue-fade-in');\n get(this, 'scroller').scrollVertical('[data-id=\"preheat\"]', { duration: 1000 });\n }\n }\n\n @action\n checkPostHeat(newValue) {\n set(this, 'postHeatActivated', newValue);\n if (!newValue) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MINIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TEMPERATURE_MAXIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MINIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_HEAT_TIME_MAXIMUM, null);\n }\n if (newValue === true) {\n set(this, 'postHeatClasses', 'blue-fade-in');\n get(this, 'scroller').scrollVertical('[data-id=\"postheat\"]', { duration: 1000 });\n }\n }\n\n @action\n checkPWHT(newValue) {\n set(this, 'pwhtActivated', newValue);\n if (!newValue) {\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM,\n null\n );\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM,\n null\n );\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MINIMUM,\n null\n );\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM,\n null\n );\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_METHOD, null);\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_HEATING_RATE,\n null\n );\n this.setModelValue(\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_COOLING_RATE,\n null\n );\n }\n if (newValue === true) {\n set(this, 'pwhtClasses', 'blue-fade-in');\n get(this, 'scroller').scrollVertical('[data-id=\"pwht\"]', { duration: 1000 });\n }\n }\n\n @action\n setWeldingPositionRootDirection(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_ROOT_DIRECTION, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_ROOT_DIRECTION, value);\n }\n\n @action\n setWeldingPositionFillDirection(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_FILL_DIRECTION, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_FILL_DIRECTION, value);\n }\n\n @action\n setWeldingPositionCapDirection(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_CAP_DIRECTION, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_CAP_DIRECTION, value);\n }\n\n @action\n setJointType(newValue) {\n let previousValue = this.getModelValue(WELDING_PROCEDURE_SPECIFICATION.JOINT_TYPE);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.JOINT_TYPE, newValue);\n let shouldClearSchematics = false;\n if (!isEmpty(previousValue) && !isEmpty(newValue) && previousValue !== newValue) {\n shouldClearSchematics = true;\n } else if (!isEmpty(previousValue) && isEmpty(newValue)) {\n shouldClearSchematics = true;\n }\n if (shouldClearSchematics) {\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.GROOVE_DESIGNS);\n this.clearModelCollection(WELDING_PROCEDURE_SPECIFICATION.WELD_LAYER_CONFIGURATIONS);\n }\n }\n\n @action\n setDissimilarMaterials(value) {\n set(this, 'dissimilarMaterials', value);\n if (!value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MAXIMUM, null);\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER, null);\n }\n }\n\n @action\n setThicknessRootMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT_MINIMUM);\n }\n\n @action\n setThicknessRootMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT_MAXIMUM);\n }\n\n @action\n setThicknessFillMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL_MINIMUM);\n }\n\n @action\n setThicknessFillMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL_MAXIMUM);\n }\n\n @action\n setThicknessCapMinimum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP_MINIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP_MINIMUM);\n }\n\n @action\n setThicknessCapMaximum(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP_MAXIMUM, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP_MAXIMUM);\n }\n\n @action\n setImpactTestTemperature(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE, value);\n this.updateHeatInputApprovalRange();\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE);\n }\n\n @action\n setHardnessTestRequired(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED, value);\n this.updateHeatInputApprovalRange();\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED);\n }\n\n @action\n setConstructionStandard(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.CONSTRUCTION_STANDARD, value);\n }\n\n @action\n setProject(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.PROJECT, value);\n }\n\n @action\n setFillerMaterialElectrodeFormRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_ROOT);\n }\n\n @action\n setFillerMaterialElectrodeFormFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_FILL);\n }\n\n @action\n setFillerMaterialElectrodeFormCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ELECTRODE_FORM_CAP);\n }\n\n @action\n setFillerMaterialGuideRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_ROOT);\n }\n\n @action\n setFillerMaterialGuideFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_FILL);\n }\n\n @action\n setFillerMaterialGuideCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_GUIDE_CAP);\n }\n\n @action\n setOscillationWidthRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_ROOT);\n }\n\n @action\n setOscillationWidthFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_FILL);\n }\n\n @action\n setOscillationWidthCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_WIDTH_CAP);\n }\n\n @action\n setOscillationFrequencyRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_ROOT);\n }\n\n @action\n setOscillationFrequencyFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_FILL);\n }\n\n @action\n setOscillationFrequencyCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_FREQUENCY_CAP);\n }\n\n @action\n setOscillationDwellTimeRoot(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_ROOT, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_ROOT);\n }\n\n @action\n setOscillationDwellTimeFill(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_FILL, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_FILL);\n }\n\n @action\n setOscillationDwellTimeCap(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_CAP, value);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.OSCILLATION_DWELL_TIME_CAP);\n }\n\n @action\n addWpsToProject(project) {\n let wps = get(this, 'wps');\n let { loading, alertMessage: alert, intl } = this;\n if (!isEmpty(project)) {\n loading.block();\n wps\n .addWpsToProject({\n project: get(project, 'id'),\n })\n .then(() => {\n set(this, 'showAddWpsToProject', false);\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/project-chooser.messages.added-to-project',\n { project: get(project, 'projectName') }\n )\n );\n })\n .catch((error) => {\n alert.error(error);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n }\n\n @action\n createWpsForProject(project) {\n let { loading, alertMessage: alert, intl, wps } = this;\n loading.block();\n wps\n .createForProject({\n project: get(project, 'id'),\n })\n .then((result) => {\n get(this, 'onProjectSpecificCreate')(result);\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/project-chooser.messages.create-specific-for-project',\n { project: get(project, 'projectName') }\n )\n );\n })\n .catch((error) => {\n alert.error(error);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setBaseMaterialsThicknessMinimum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM,\n value\n );\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM,\n value\n );\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MINIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MINIMUM,\n ]);\n }\n\n @action\n setBaseMaterialsThicknessMaximum(value) {\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n value\n );\n this.setModelDecimalValue(\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_THICKNESS_MAXIMUM,\n value\n );\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_THICKNESS_MAXIMUM,\n ]);\n }\n\n @action\n setBaseMaterialsDiameter(value) {\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER, value);\n this.setModelDecimalValue(WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER, value);\n this.validateFields([\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1_DIAMETER,\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2_DIAMETER,\n ]);\n }\n\n @action\n confirmArchiveWPS() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n confirmUnarchiveWPS() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n cancelUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n checkCanSave(stopEditing = false) {\n let { model: wps, alertMessage: alert, intl } = this;\n if (this.validateWpsAndPasses()) {\n this.saveModel(stopEditing);\n return;\n }\n this.showConfirmSaveWithError = true;\n this.validationFailed(wps);\n this.pushValidationErrorsToAnalytics();\n alert.error(intl.t('edit-view.actions.validation-failed'));\n }\n\n @action\n async saveWithoutValidating(onAfterSave) {\n let { wps, loading, alertMessage: alert, intl } = this;\n let modelIsNew = get(wps, 'isNew');\n this.beforeSave();\n // Same as `saveWPS`: the passes are separate records and have to be collected before the\n // WPS is saved and reloaded, otherwise pending pass edits are silently dropped\n let itemsToSave = await this._collectDirtyPasses();\n\n loading.block();\n this._markSaving();\n try {\n let savedWps = await wps.save();\n let reloadedWps = await this.data.loadAllDataWPS(get(savedWps, 'id'));\n await this._saveDirtyPasses(itemsToSave);\n this._updateTitle();\n this._postSave(reloadedWps, { isNew: modelIsNew });\n alert.info(\n intl.t(\n 'components.model-welding-procedure-specification/edit.save-with-errors.messages.saved-with-errors',\n { wpsNumber: get(wps, 'wpsNumber') }\n )\n );\n this.showConfirmSaveWithError = false;\n if (onAfterSave) {\n onAfterSave();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isDuplicateError(reason)) {\n alert.error(intl.t('edit-view.actions.unique-violation'));\n } else {\n alert.error(intl.t('edit-view.actions.error', { name: get(this, 'titleValue') }));\n }\n } finally {\n this._finishSaving();\n loading.unblock();\n }\n }\n\n @action\n async deleteModel() {\n let wpsId = this.wps.id;\n let canDelete = await this.canWpsBeDeleted(wpsId, false);\n if (canDelete) {\n this.deleteWPS();\n }\n }\n\n @action\n verifyWps() {\n let { loading, alertMessage: alert, intl, verifiedByDate } = this;\n loading.block();\n get(this, 'wps')\n .verifyWps({\n date: verifiedByDate != null ? verifiedByDate : '',\n staff: get(this, 'selectedVerifier.id'),\n })\n .then(() => {\n this.reloadWps();\n this.fetchRevisionsTask.perform();\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/edit.status.messages.wps-verified',\n { wps: get(this, 'wps.wpsNumber') }\n )\n );\n })\n .catch((error) => {\n if (isError(error, ERROR_CODES.MISSING_STAFF)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/edit.status.error-message.missing-staff',\n { error: getErrorCode(error) }\n );\n alert.error(message);\n } else {\n let message = intl.t(\n 'components.model-welding-procedure-specification/edit.status.error-message.generic-error',\n { error: getErrorCode(error) }\n );\n alert.error(message);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n approveWps() {\n let { loading, alertMessage: alert, intl, approvedByDate } = this;\n loading.block();\n get(this, 'wps')\n .approveWps({\n date: approvedByDate,\n staff: get(this, 'selectedApprover.id'),\n })\n .then(() => {\n this.reloadWps();\n this.fetchRevisionsTask.perform();\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/edit.status.messages.wps-approved',\n { wps: get(this, 'wps.wpsNumber') }\n )\n );\n })\n .catch((error) => {\n if (isError(error, ERROR_CODES.MISSING_STAFF)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/edit.status.error-message.missing-staff',\n { error: getErrorCode(error) }\n );\n alert.error(message);\n } else {\n let message = intl.t(\n 'components.model-welding-procedure-specification/edit.status.error-message.generic-error',\n { error: getErrorCode(error) }\n );\n alert.error(message);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n revokeWps() {\n let { loading, alertMessage: alert, intl } = this;\n loading.block();\n get(this, 'wps')\n .revokeWps()\n .then(() => {\n this.reloadWps();\n this.fetchRevisionsTask.perform();\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/edit.status.messages.wps-revoked',\n { wps: get(this, 'wps.wpsNumber') }\n )\n );\n })\n .catch((error) => {\n if (isError(error, ERROR_CODES.MISSING_STAFF)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/edit.status.error-message.missing-staff',\n { error: getErrorCode(error) }\n );\n alert.error(message);\n } else {\n let message = intl.t(\n 'components.model-welding-procedure-specification/edit.status.error-message.generic-error',\n { error: getErrorCode(error) }\n );\n alert.error(message);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setWrittenBy(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WRITTEN_BY, value);\n }\n\n @action\n setWrittenByDate(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.WRITTEN_BY_DATE, value);\n }\n\n @action\n setApprovedByDate(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.APPROVED_BY_DATE, value);\n }\n\n @action\n setVerifiedByDate(value) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.VERIFIED_BY_DATE, value);\n }\n\n @action\n setOverlayFillerMaterialFormRoot(newValue) {\n if (!isEmpty(newValue)) {\n this.setModelValue('additionalData.overlayFillerMaterialFormRoot', newValue);\n } else {\n this.setModelValue(\n 'additionalData.overlayFillerMaterialFormRoot',\n OVERLAY_FILLER_METAL_FORM.WIRE\n );\n }\n }\n\n @action\n setOverlayFillerMaterialFormFill(newValue) {\n if (!isEmpty(newValue)) {\n this.setModelValue('additionalData.overlayFillerMaterialFormFill', newValue);\n } else {\n this.setModelValue(\n 'additionalData.overlayFillerMaterialFormFill',\n OVERLAY_FILLER_METAL_FORM.WIRE\n );\n }\n }\n\n @action\n setOverlayFillerMaterialFormCap(newValue) {\n if (!isEmpty(newValue)) {\n this.setModelValue('additionalData.overlayFillerMaterialFormCap', newValue);\n } else {\n this.setModelValue(\n 'additionalData.overlayFillerMaterialFormCap',\n OVERLAY_FILLER_METAL_FORM.WIRE\n );\n }\n }\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n\n @action\n async setFillerMaterialRootDiameters(values) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_DIAMETERS, values);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_DIAMETERS);\n // in AWS we can't update a value in the pass, as such\n // the passes must be kept in sync\n if (this.isAWSD11 && !isEmpty(values)) {\n let parameters = await this.wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n let [firstDiameter] = values;\n parameters\n .filter((p) => p.layer === WELDING_LAYER_OPTIONS.ROOT)\n .forEach((p) => p.set('fillerMaterialDiameters', [firstDiameter]));\n }\n }\n\n @action\n async setFillerMaterialFillDiameters(values) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_DIAMETERS, values);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_DIAMETERS);\n // in AWS we can't update a value in the pass, as such\n // the passes must be kept in sync\n if (this.isAWSD11 && !isEmpty(values)) {\n let parameters = await this.wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n let [firstDiameter] = values;\n parameters\n .filter((p) => p.layer === WELDING_LAYER_OPTIONS.FILL)\n .forEach((p) => p.set('fillerMaterialDiameters', [firstDiameter]));\n }\n }\n\n @action\n async setFillerMaterialCapDiameters(values) {\n this.setModelValue(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_DIAMETERS, values);\n this.validateField(WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_DIAMETERS);\n // in AWS we can't update a value in the pass, as such\n // the passes must be kept in sync\n if (this.isAWSD11 && !isEmpty(values)) {\n let parameters = await this.wps.get(WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n let [firstDiameter] = values;\n parameters\n .filter((p) => p.layer === WELDING_LAYER_OPTIONS.CAP)\n .forEach((p) => p.set('fillerMaterialDiameters', [firstDiameter]));\n }\n }\n\n @action\n generateNewGrooveName(grooveName) {\n return `${grooveName.replace(/[^A-Z0-9]+/gi, '_')}_WPS_${get(this.wps, 'id')}_${moment().format(\n 'YYYY_MM_DD_HH_mm_SS'\n )}.png`;\n }\n\n @action\n generateNewWeldLayerName(layerName) {\n return `${layerName.replace(/[^A-Z0-9]+/gi, '_')}_WPS_${get(this.wps, 'id')}_${moment().format(\n 'YYYY_MM_DD_HH_mm_SS'\n )}.png`;\n }\n\n @action\n setPrintSection() {\n set(this, 'section', 'printOptions');\n this.scroller.scrollVertical('.nav-tabs');\n }\n\n @action\n optionalAfterSaveWithError() {\n if (this.onAfterSaveWithError) {\n if (this.onAfterSaveWithError.perform) {\n this.onAfterSaveWithError.perform(this.onAfterSaveWithErrorArguments);\n } else {\n this.onAfterSaveWithError(this.onAfterSaveWithErrorArguments);\n }\n }\n }\n\n @action\n downloadPdfFromApi(task) {\n window.location = task.result.pdf;\n }\n\n @action\n toggleShowConfirmVerify() {\n this.isShowingConfirmVerify = !this.isShowingConfirmVerify;\n if (this.isShowingConfirmVerify) {\n set(this, 'selectedVerifier', get(this.userSession.account, 'staff'));\n }\n }\n\n @action\n toggleShowConfirmApprove() {\n this.isShowingConfirmApprove = !this.isShowingConfirmApprove;\n if (this.isShowingConfirmApprove) {\n set(this, 'selectedApprover', get(this.userSession.account, 'staff'));\n }\n }\n\n @action\n toggleShowDuplicateWindow() {\n this.showDuplicateWindow = !this.showDuplicateWindow;\n }\n\n @action\n toggleShowConfirmRevoke() {\n this.showConfirmRevoke = !this.showConfirmRevoke;\n }\n\n @action\n setAdvancedFields(value) {\n set(this, 'showAdvancedFieldsAction', value);\n }\n\n @action\n showWeldCloudLicense() {\n this.isShowingWeldCloudLicense = true;\n }\n\n @action\n hideWeldCloudLicense() {\n this.isShowingWeldCloudLicense = false;\n }\n\n createPQR = task(\n {\n drop: true,\n },\n async () => {\n if (!this.isVerifiedOrApproved) {\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n }\n\n let { router, wps } = this;\n router.transitionTo('welding-procedure-specification-pwps-to-pqr', wps);\n }\n );\n\n createCertificate = task(\n {\n drop: true,\n },\n async () => {\n if (!this.isVerifiedOrApproved) {\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n }\n\n let { router, wps } = this;\n router.transitionTo('welding-procedure-specification-pwps-to-certificate', wps);\n }\n );\n\n createPreQualified = task(\n {\n drop: true,\n },\n async () => {\n if (!this.isVerifiedOrApproved) {\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n }\n\n let { router, wps } = this;\n router.transitionTo('welding-procedure-specification-pwps-to-prequalified', wps.id);\n }\n );\n\n createStandardWPS = task(\n {\n drop: true,\n },\n async () => {\n if (!this.isVerifiedOrApproved) {\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n }\n\n let { router, wps } = this;\n router.transitionTo('welding-procedure-specification-pwps-to-standard-wps', wps.id);\n }\n );\n\n archiveWPS = task(\n {\n drop: true,\n },\n async (callback) => {\n let { loading, alertMessage: alert, intl, wps } = this;\n\n loading.block();\n\n if (!this.isVerifiedOrApproved) {\n await this.saveWPS.perform({\n silentSave: true,\n block: false,\n });\n }\n\n try {\n await wps.archive();\n this.reloadWps()\n .then(() => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.archive-success',\n {\n certificate: get(wps, 'wpsNumber'),\n }\n )\n );\n })\n .finally(() => {\n loading.unblock();\n if (typeof callback === 'function') {\n callback();\n }\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.archive-error'\n )\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmArchive', false);\n }\n }\n );\n\n unarchiveWPS = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, wps } = this;\n\n loading.block();\n\n try {\n await wps.unarchive();\n this.reloadWps()\n .then(() => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.unarchive-success',\n {\n certificate: get(wps, 'wpsNumber'),\n }\n )\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.unarchive-error'\n )\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmUnarchive', false);\n }\n }\n );\n\n deleteRevision = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, revisionIdToDelete, wps } = this;\n let canDelete = await this.canWpsBeDeleted(revisionIdToDelete, true);\n if (!canDelete) {\n return;\n }\n\n loading.block();\n\n try {\n let revisionToDelete;\n let currentWpsId = parseInt(wps.id);\n\n if (currentWpsId !== revisionIdToDelete) {\n revisionToDelete = await this.store.findRecord(\n 'welding-procedure-specification',\n revisionIdToDelete\n );\n } else {\n revisionToDelete = wps;\n }\n\n let response = await revisionToDelete.deleteRevision();\n\n alert.success(\n intl.t('components.model-welding-procedure-specification/edit.revisions.delete-success', {\n revision: revisionToDelete.revision,\n })\n );\n\n // transition to active wps in case we deleted the wps we were editing\n if (currentWpsId === revisionIdToDelete && !isEmpty(response.id)) {\n let options = {\n queryParams: {\n section: 'revisions',\n autoScroll: 'y',\n },\n };\n this.router.transitionTo('welding-procedure-specification', response.id, options);\n } else {\n this.fetchRevisionsTask.perform();\n }\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('edit-view.actions.generic-delete-error', {\n name: intl.t(\n 'components.model-welding-procedure-specification/edit.revisions.table.revision-column'\n ),\n })\n );\n }\n } finally {\n loading.unblock();\n this.isShowingDeleteRevisionModal = false;\n }\n }\n );\n\n @action\n showDeleteRevisionModal(revision) {\n if (revision.canBeDeleted) {\n this.isShowingDeleteRevisionModal = true;\n this.revisionIdToDelete = parseInt(revision.id);\n }\n }\n\n @action\n hideDeleteRevisionModal() {\n this.isShowingDeleteRevisionModal = false;\n this.revisionIdToDelete = null;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n \\n \\n \\n \\n {{standard.standard}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n {{#if @showOnlyProjectWpsFilter}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"wps-list.buttons.search\\\"}}\\n \\n {{t \\\"wps-list.buttons.clear\\\"}} \\n {{t \\\"components.model-welding-procedure-specification/lookup.cancel-button\\\"}}\\n \\n \\n\\n \\n \\n \\n
\\n \\n
\\n {{t \\\"components.model-welding-procedure-specification/lookup.cancel-button\\\"}}\\n
\\n
\\n \\n
\", {\"contents\":\"
\\n \\n \\n \\n \\n \\n {{standard.standard}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n \\n \\n
\\n {{#if @showOnlyProjectWpsFilter}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"wps-list.buttons.search\\\"}}\\n \\n {{t \\\"wps-list.buttons.clear\\\"}} \\n {{t \\\"components.model-welding-procedure-specification/lookup.cancel-button\\\"}}\\n \\n \\n\\n \\n \\n \\n
\\n \\n
\\n {{t \\\"components.model-welding-procedure-specification/lookup.cancel-button\\\"}}\\n
\\n
\\n \\n
\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/lookup-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/lookup-modal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, empty, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, getProperties, get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\nimport { task, timeout } from 'ember-concurrency';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport Constants from 'weldnote/utils/constants';\nimport { toNumber, isFraction } from 'weldnote/utils/unit-system/units';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\nconst {\n HTTP: { DEBOUNCE },\n WELD_TYPES,\n UNIT_SYSTEM,\n} = Constants;\n\n@classic\nexport default class Lookup extends Component {\n @service('weldnote-data')\n data;\n\n @service('unit-system')\n units;\n\n @service\n userSession;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n loading;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @empty('selectedStandard')\n fieldsDisabled;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionsAll;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('selectedStandard.code')\n industryCode;\n\n @alias('data.examiningBodyOptions')\n examiningBodyOptions;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('selectedStandard.code')\n currentIndustryCode;\n\n get temperatureUnit() {\n if (!isEmpty(get(this, 'unitSystem'))) {\n return this.units.getTemperatureUnit(get(this, 'unitSystem'));\n }\n return this.userSession.temperatureUnit;\n }\n\n get distanceUnit() {\n if (!isEmpty(get(this, 'unitSystem'))) {\n return this.units.getDistanceUnit(get(this, 'unitSystem'));\n }\n return this.userSession.distanceUnit;\n }\n\n get flowUnit() {\n if (!isEmpty(get(this, 'unitSystem'))) {\n return this.units.getFlowUnit(get(this, 'unitSystem'));\n }\n return this.userSession.flowUnit;\n }\n\n get heatDistanceUnit() {\n if (!isEmpty(get(this, 'unitSystem'))) {\n return this.units.getHeatDistanceUnit(get(this, 'unitSystem'));\n }\n return this.userSession.heatDistanceUnit;\n }\n\n @alias('userSession.decimalSeparator')\n decimalSeparator;\n\n @tracked\n findProjectWPSsOnly = false;\n\n isEditing = true;\n\n wpsSearchType = 'primary';\n\n baseMaterial1 = null;\n\n baseMaterial2 = null;\n\n searchByBaseMaterial1Group = true;\n\n searchByBaseMaterial2Group = true;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n @filterFromCollectionByKey('weldingPositionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingPositionOptions;\n\n selectedStandard = null;\n\n totalCount = 0;\n\n currenPage = 1;\n\n pageSize = 10;\n\n unselectableWps = [];\n\n unselectableWpsIds = [];\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`wps-list.grid-columns.${label}`, options);\n }\n\n didReceiveAttrs() {\n super.didReceiveAttrs(...arguments);\n if (!isEmpty(get(this, 'searchOptions'))) {\n set(this, 'selectedStandard', get(this, 'searchOptions.standard'));\n set(this, 'selectedWeldType', get(this, 'searchOptions.weldType'));\n set(this, 'baseMaterial1', get(this, 'searchOptions.baseMaterial1'));\n set(this, 'baseMaterial2', get(this, 'searchOptions.baseMaterial2'));\n if (!isEmpty(get(this, 'searchOptions.company'))) {\n set(this, 'selectedCompany', get(this, 'searchOptions.company'));\n }\n if (!isEmpty('searchOptions.projectWps')) {\n set(this, 'selectedProject', get(this, 'searchOptions.projectWps'));\n }\n if (!isEmpty('searchOptions.wpsSearchType')) {\n set(this, 'wpsSearchType', get(this, 'searchOptions.wpsSearchType'));\n }\n }\n\n this.unselectableWpsIds = this.unselectableWps.map((wps) => {\n return wps.id;\n });\n }\n\n getAttributeLabel(label) {\n return this.intl.t(`model.welding-procedure-specification.${label}.label`);\n }\n\n @computed\n get gridColumns() {\n let certificateNumberLabel = this.getAttributeLabel('wpsNumber');\n let weldTypeLabel = this.getAttributeLabel('weldType');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let thicknessLabel = this.getGridColumnLabel('thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n let heatInputLabel = this.getGridColumnLabel('heat-input');\n let postWeldHeatTreamentLabel = this.getGridColumnLabel('post-weld-heat-treatment');\n let preHeatLabel = this.getGridColumnLabel('pre-heat');\n let companyLabel = this.getGridColumnLabel('company');\n let actionsLabel = this.intl.t('generic.buttons.actions');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'wpsNumber',\n label: certificateNumberLabel,\n cellComponent: 'model-welding-procedure-specification/lookup/select-wps-link',\n width: '180px',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n cellComponent: 'weldnote-grid/welding-processes',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/base-material-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'thickness',\n label: thicknessLabel,\n cellComponent: 'weldnote-grid/base-material-thickness-for-list',\n align: 'right',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n label: heatInputLabel,\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n label: preHeatLabel,\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreament',\n label: postWeldHeatTreamentLabel,\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n label: actionsLabel,\n width: '100px',\n sortable: false,\n cellComponent: 'model-welding-procedure-specification/lookup/select-wps',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n let { dir = 'asc', sort } = getProperties(this, 'dir', 'sort');\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n }\n\n options.page = this.currentPage;\n options.pageSize = this.pageSize;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldingProcedureSpecifications(\n options,\n this.buildFilters()\n );\n\n // We are currently processing unselectable WPSs in a more or less hardcoded way here, because\n // we don't want users to select the same WPS twice when adding extra WPSs in Welding Books\n data.list.forEach((wps) => {\n if (this.unselectableWpsIds.includes(wps.id)) {\n wps.unselectable = true;\n } else {\n wps.unselectable = false;\n }\n });\n\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildDecimalFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n let decimalValue = get(this, controllerProperty);\n decimalValue = convertDecimals(decimalValue, get(this, 'userSession.decimalSeparator'));\n filters[apiProperty] = decimalValue;\n }\n }\n\n buildPWHTFilter(filters) {\n let pwhtPresence = get(this, 'selectedPostWeldHeatTreamentPresence');\n if (!isEmpty(pwhtPresence)) {\n filters.pwhtPresence = pwhtPresence;\n } else {\n let pwhtTemp = get(this, 'selectedPostWeldHeatTreament');\n if (!isNaN(parseFloat(pwhtTemp))) {\n filters.postWeldHeatTreatmentTemperatureTestPiece = pwhtTemp;\n }\n }\n }\n\n buildFilters() {\n let filters = {};\n\n this.buildSingleFilter(\n 'selectedStandard.id',\n WELDING_PROCEDURE_SPECIFICATION.STANDARD,\n filters\n );\n this.buildSingleFilter(\n 'selectedExaminingBody.id',\n WELDING_PROCEDURE_SPECIFICATION.EXAMINING_BODY,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldType.id',\n WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessRoot.id',\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessFill.id',\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessCap.id',\n WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP,\n filters\n );\n this.buildDecimalFilter('diameter', 'diameter', filters);\n this.buildDecimalFilter('thickness', 'thickness', filters);\n this.buildDecimalFilter(\n 'thicknessFill',\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_FILL,\n filters\n );\n this.buildDecimalFilter(\n 'thicknessRoot',\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_ROOT,\n filters\n );\n this.buildDecimalFilter('thicknessCap', WELDING_PROCEDURE_SPECIFICATION.THICKNESS_CAP, filters);\n this.buildSingleFilter('branchAngle', WELDING_PROCEDURE_SPECIFICATION.BRANCH_ANGLE, filters);\n this.buildDecimalFilter('heatInput', 'heatInputTestPiece', filters);\n this.buildSingleFilter('preHeat', WELDING_PROCEDURE_SPECIFICATION.PREHEAT_TEMPERATURE, filters);\n this.buildSingleFilter(\n 'postWeldHeatTreament',\n WELDING_PROCEDURE_SPECIFICATION.POST_WELD_HEAT_TREATMENT_TEMPERATURE,\n filters\n );\n this.buildSingleFilter(\n 'impactTemperature',\n WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE,\n filters\n );\n this.buildSingleFilter(\n 'hardnessRequirements',\n WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionRoot.id',\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_ROOT,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionFill.id',\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_FILL,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionCap.id',\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITION_CAP,\n filters\n );\n this.buildSingleFilter(\n 'selectedProductType.key',\n WELDING_PROCEDURE_SPECIFICATION.PRODUCT_TYPE,\n filters\n );\n if (this.searchByBaseMaterial1Group) {\n this.buildSingleFilter(\n 'baseMaterial1.materialGroup.id',\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1,\n filters\n );\n } else {\n this.buildSingleFilter('baseMaterial1.id', 'baseMaterial1Instance', filters);\n }\n if (this.searchByBaseMaterial2Group) {\n this.buildSingleFilter(\n 'baseMaterial2.materialGroup.id',\n WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2,\n filters\n );\n } else {\n this.buildSingleFilter('baseMaterial2.id', 'baseMaterial2Instance', filters);\n }\n this.buildSingleFilter(\n 'selectedFillerMaterialRoot.id',\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT,\n filters\n );\n this.buildSingleFilter(\n 'selectedFillerMaterialFill.id',\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL,\n filters\n );\n this.buildSingleFilter(\n 'selectedFillerMaterialCap.id',\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP,\n filters\n );\n this.buildDecimalFilter('throatThickness', 'throatThickness', filters);\n this.buildSingleFilter(\n 'selectedOverlayType.key',\n WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE,\n filters\n );\n this.buildSingleFilter(\n 'certificateNumber',\n WELDING_PROCEDURE_SPECIFICATION.WPS_NUMBER,\n filters\n );\n this.buildSingleFilter('fillerMaterialGroupRootSearch', 'fillerMaterialRootGroup', filters);\n this.buildSingleFilter('fillerMaterialGroupFillSearch', 'fillerMaterialFillGroup', filters);\n this.buildSingleFilter('fillerMaterialGroupCapSearch', 'fillerMaterialCapGroup', filters);\n this.buildSingleFilter('selectedCompany', WELDING_PROCEDURE_SPECIFICATION.COMPANY, filters);\n\n if (!isEmpty(this.unitSystem)) {\n filters[WELDING_PROCEDURE_SPECIFICATION.UNIT_SYSTEM] = this.unitSystem;\n }\n\n this.buildPWHTFilter(filters);\n filters.exportType = 'wps';\n\n if (this.findProjectWPSsOnly) {\n filters.wpsSearchType = 'project';\n } else {\n filters.wpsSearchType = this.wpsSearchType;\n }\n\n if (this.wpsSearchType === 'primaryPlusProject') {\n this.buildSingleFilter('selectedProject', 'plusProjectWps', filters);\n } else {\n this.buildSingleFilter('selectedProject', 'projectWps', filters);\n }\n\n if (!isEmpty(get(this, 'selectedDetails'))) {\n let detailsSerialized = get(this, 'selectedDetails')\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS] = detailsSerialized;\n }\n\n if (!isEmpty(get(this, 'selectedSpecialRequirements'))) {\n let specialRequirementOptionsSerialized = get(this, 'selectedSpecialRequirements')\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[WELDING_PROCEDURE_SPECIFICATION.SPECIAL_REQUIREMENTS] =\n specialRequirementOptionsSerialized;\n }\n\n if (this.unitSystem) {\n filters.unitSystem = this.unitSystem;\n }\n\n return filters;\n }\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedDetails: [],\n selectedExaminingBody: null,\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedWeldingPositionRoot: null,\n selectedWeldingPositionFill: null,\n selectedWeldingPositionCap: null,\n branchAngle: null,\n preHeat: null,\n heatInput: null,\n postWeldHeatTreament: null,\n thicknessRoot: null,\n thicknessRootDisplay: null,\n thicknessFill: null,\n thicknessFillDisplay: null,\n thicknessCap: null,\n thicknessCapDisplay: null,\n impactTemperature: null,\n hardnessRequirements: null,\n baseMaterial1: null,\n baseMaterial2: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n throatThickness: null,\n throatThicknessDisplay: null,\n selectedSpecialRequirements: [],\n selectedOverlayType: null,\n certificateNumber: null,\n selectedPostWeldHeatTreament: null,\n selectedPostWeldHeatTreamentPresence: null,\n fillerMaterialGroupRootSearch: null,\n fillerMaterialGroupFillSearch: null,\n fillerMaterialGroupCapSearch: null,\n });\n this.resetPage();\n get(this, 'loadData').perform();\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchWPS(pageNumber) {\n set(this, 'currentPage', pageNumber);\n get(this, 'loadData').perform();\n }\n\n @action\n updateStandard(selectedStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n if (isEmpty(get(this, 'weldTypeOptionsAll'))) {\n this.data.getWeldTypes().then((types) => {\n set(this, 'weldTypeOptionsAll', types);\n });\n }\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n search(pageNumber = 1) {\n set(this, 'currentPage', pageNumber);\n this.searchWPS(pageNumber);\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialRoot', fillerMaterial);\n }\n\n @action\n fillerMaterialRootRemoved() {\n set(this, 'selectedFillerMaterialRoot', null);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialFill', fillerMaterial);\n }\n\n @action\n fillerMaterialFillRemoved() {\n set(this, 'selectedFillerMaterialFill', null);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialCap', fillerMaterial);\n }\n\n @action\n fillerMaterialCapRemoved() {\n set(this, 'selectedFillerMaterialCap', null);\n }\n\n @action\n setSelectedWeldType(type) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (type.get('weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n }\n\n @action\n setThickness(value) {\n set(this, 'thicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thickness', value);\n }\n } else {\n set(this, 'thickness', value);\n }\n }\n\n @action\n setThicknessRoot(value) {\n set(this, 'thicknessRootDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessRoot', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessRoot', value);\n }\n } else {\n set(this, 'thicknessRoot', value);\n }\n }\n\n @action\n setThicknessFill(value) {\n set(this, 'thicknessFillDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessFill', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessFill', value);\n }\n } else {\n set(this, 'thicknessFill', value);\n }\n }\n\n @action\n setThicknessCap(value) {\n set(this, 'thicknessCapDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessCap', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessCap', value);\n }\n } else {\n set(this, 'thicknessCap', value);\n }\n }\n\n @action\n setThroatThickness(value) {\n set(this, 'throatThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'throatThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'throatThickness', value);\n }\n } else {\n set(this, 'throatThickness', value);\n }\n }\n\n @action\n setDiameter(value) {\n set(this, 'diameterDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'diameter', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'diameter', value);\n }\n } else {\n set(this, 'diameter', value);\n }\n }\n\n @action\n chooseWPS(row) {\n let id = get(row, 'id');\n let { loading, store } = this;\n loading.block();\n store\n .findRecord('welding-procedure-specification', id)\n .then((wps) => {\n this.onSelect(wps);\n })\n .finally(() => {\n this.onClose();\n loading.unblock();\n });\n }\n\n @action\n setBaseMaterial1(material) {\n set(this, 'baseMaterial1', material);\n if (isEmpty(this.baseMaterial2)) {\n set(this, 'baseMaterial2', material);\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial2Group', false);\n }\n }\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial1Group', false);\n }\n }\n\n @action\n setBaseMaterial2(material) {\n set(this, 'baseMaterial2', material);\n if (material && material.isNA) {\n set(this, 'searchByBaseMaterial2Group', false);\n }\n }\n\n @action\n setSearchByMaterial1Group(value) {\n set(this, 'searchByBaseMaterial1Group', value);\n }\n\n @action\n setSearchByMaterial2Group(value) {\n set(this, 'searchByBaseMaterial2Group', value);\n }\n\n @action\n setFindProjectWPSsOnly(value) {\n this.findProjectWPSsOnly = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.isEditing}}\\n
\\n \\n
\\n \\n {{#if (has-value @selected.wpsNumber)}}\\n {{@selected.wpsNumber}}\\n {{else}}\\n {{t\\n \\\"components.model-welding-procedure-specification/lookup.messages.placeholder\\\"\\n }}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#if (greater-than @errors.length 0)}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{/if}}\\n
\\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if this.showLink}}\\n {{#if (has-value @selected.id)}}\\n {{@selected.wpsNumber}}\\n {{/if}}\\n {{else}}\\n {{@selected.wpsNumber}}\\n {{/if}}\\n

\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\\n{{/if}}\\n\\n{{#if this.isShowingSearch}}\\n \\n{{/if}}\", {\"contents\":\"{{#if this.isEditing}}\\n
\\n \\n
\\n \\n {{#if (has-value @selected.wpsNumber)}}\\n {{@selected.wpsNumber}}\\n {{else}}\\n {{t\\n \\\"components.model-welding-procedure-specification/lookup.messages.placeholder\\\"\\n }}\\n {{/if}}\\n \\n
\\n \\n \\n
\\n
\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#if (greater-than @errors.length 0)}}\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{/if}}\\n
\\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if this.showLink}}\\n {{#if (has-value @selected.id)}}\\n {{@selected.wpsNumber}}\\n {{/if}}\\n {{else}}\\n {{@selected.wpsNumber}}\\n {{/if}}\\n

\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n
\\n{{/if}}\\n\\n{{#if this.isShowingSearch}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/lookup.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/lookup.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class Lookup extends Component {\n @tracked\n isShowingSearch = false;\n\n get hasHelp() {\n return !isEmpty(this.args.helpText);\n }\n\n get renderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get showLink() {\n return this.args.showLink ?? false;\n }\n\n get isEditing() {\n return this.args.isEditing ?? true;\n }\n\n @action\n openSearch() {\n this.isShowingSearch = true;\n }\n\n @action\n closeSearch() {\n this.isShowingSearch = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\", {\"contents\":\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/lookup/select-wps-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/lookup/select-wps-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n\", {\"contents\":\"\\n \\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/lookup/select-wps.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/lookup/select-wps.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"routes.welding-procedure-specification/new.buttons.create\\\"}}\\n \\n \\n \\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"routes.welding-procedure-specification/new.buttons.create\\\"}}\\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/new.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/new.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { get } from '@ember/object';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\n\nexport default class New extends Component {\n @service loading;\n @service intl;\n @service alertMessage;\n @service('weldnote-data') data;\n @service('weldcloud-notes-data') notesData;\n\n get unitSystemOptions() {\n return this.notesData.unitSystemOptions;\n }\n\n @action\n async createWPS() {\n const { loading, intl, alertMessage: alert } = this;\n const wps = this.args.wps;\n const { wpsNumber } = wps;\n\n if (!wps.validate()) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n if (this.data.hasOnly1Company) {\n wps.set('company', this.data.firstCompany);\n }\n\n loading.block();\n\n try {\n const savedWps = await wps.save();\n this.args.instanceCreated(savedWps);\n alert.success(intl.t('edit-view.actions.saved', { name: wpsNumber }));\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl\n .t('edit-view.actions.unique-violation-fields', {\n fields: intl.t('model.welding-procedure-specification.wpsNumber.label'),\n })\n .toString()\n );\n } else {\n alert.error(intl.t('edit-view.actions.error', { name: wpsNumber }));\n }\n } finally {\n loading.unblock();\n }\n }\n\n @action\n cancel() {\n history.back();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.thickness\\\"\\n }}
\\n \\n {{#if this.showBothMaterials}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.showDiameter}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.welding-position\\\"\\n }}
\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.thermal\\\"\\n }}
\\n \\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.other\\\"\\n }}
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n {{#if (has-value this.errors.generic)}}\\n
\\n \\n {{#each this.errors.generic as |error|}}\\n {{error}}\\n {{/each}}\\n \\n
\\n {{/if}}\\n
\\n
\\n
\\n \\n \\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.thickness\\\"\\n }}
\\n \\n {{#if this.showBothMaterials}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.showDiameter}}\\n \\n \\n \\n {{/if}}\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.welding-position\\\"\\n }}
\\n \\n \\n {{#if this.hasOnlyRoot}}\\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasFill}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n {{#if this.hasCap}}\\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n {{/if}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.thermal\\\"\\n }}
\\n \\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n \\n
\\n \\n
\\n
\\n
\\n
{{t\\n \\\"components.model-welding-procedure-specification/pqr-from-pwps.sections.other\\\"\\n }}
\\n \\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n {{#if (has-value this.errors.generic)}}\\n
\\n \\n {{#each this.errors.generic as |error|}}\\n {{error}}\\n {{/each}}\\n \\n
\\n {{/if}}\\n
\\n
\\n
\\n \\n \\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/pqr-from-pwps.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/pqr-from-pwps.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty, not, alias, readOnly } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, set, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\n\n@classic\nexport default class PqrFromPwps extends Component {\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n get distanceUnit() {\n return this.source.distanceUnit;\n }\n\n get temperatureUnit() {\n return this.source.temperatureUnit;\n }\n\n @alias('userSession.timeUnit')\n timeUnit;\n\n @alias('source.standard.code')\n currentIndustryCode;\n\n @not('source.isOverlayWeld')\n showBothMaterials;\n\n @computed('source.{weldingProcessRoot,weldingProcessFill,weldingProcessCap}')\n get hasNoProcesses() {\n let rootId = get(this.source, 'weldingProcessRoot.id');\n let fillId = get(this.source, 'weldingProcessFill.id');\n let capId = get(this.source, 'weldingProcessCap.id');\n return isEmpty(rootId) && isEmpty(fillId) && isEmpty(capId);\n }\n\n get unitSystem() {\n return this.source.unitSystem;\n }\n\n @computed('source.weldType')\n get hasWeldType() {\n return !isEmpty(get(this.source, 'weldType.id'));\n }\n\n @computed('source.{weldingProcessRoot,hasFill,hasCap}')\n get hasOnlyRoot() {\n return (\n !isEmpty(get(this, 'source.weldingProcessRoot.id')) &&\n !get(this, 'hasFill') &&\n !get(this, 'hasCap')\n );\n }\n\n @computed('source.weldingProcessFill,hasCap')\n get hasFill() {\n return !isEmpty(get(this, 'source.weldingProcessFill.id')) && !get(this, 'hasCap');\n }\n\n @notEmpty('source.weldingProcessCap.id')\n hasCap;\n\n @readOnly('source.weldingPositionsRoot')\n weldingPositionRootOptions;\n\n @readOnly('source.weldingPositionsFill')\n weldingPositionFillOptions;\n\n @readOnly('source.weldingPositionsCap')\n weldingPositionCapOptions;\n\n source = null;\n\n errors = null;\n\n @computed('source.isPipe')\n get thicknessColumnSize() {\n if (get(this, 'source.isPipe')) {\n return 2;\n }\n return 1;\n }\n\n @alias('source.isPipe')\n showDiameter;\n\n @alias('source.weldingProcessRoot.shortDesignation')\n weldingProcessRoot;\n\n @alias('source.weldingProcessFill.shortDesignation')\n weldingProcessFill;\n\n @alias('source.weldingProcessCap.shortDesignation')\n weldingProcessCap;\n\n @computed(\n 'source.{preheatTemperatureMinimum,preheatTemperatureMaximum,thicknessMinimum,thicknessMaximum,diameterMinimum,diameterMaximum,baseMaterial1ThicknessMinimum,baseMaterial1ThicknessMaximum,baseMaterial2ThicknessMinimum,baseMaterial2ThicknessMaximum,preheatTemperatureMinimum,preheatTemperatureMaximum,interpassTemperatureMinimum,interpassTemperatureMaximum,postHeatTemperatureMinimum,postHeatTemperatureMaximum,postHeatTimeMinimum,postHeatTimeMaximum,postWeldHeatTreatmentTemperatureMinimum,postWeldHeatTreatmentTemperatureMaximum,postWeldHeatTreatmentTimeMinimum,postWeldHeatTreatmentTimeMaximum,thicknessRootMinimum,thicknessRootMaximum,thicknessFillMinimum,thicknessFillMaximum,thicknessCapMinimum,thicknessCapMaximum,branchAngleMinimum,branchAngleMaximum}'\n )\n get ranges() {\n let {\n source: {\n preheatTemperatureMinimum,\n preheatTemperatureMaximum,\n thicknessMinimum,\n thicknessMaximum,\n diameterMinimum,\n diameterMaximum,\n baseMaterial1ThicknessMinimum,\n baseMaterial1ThicknessMaximum,\n baseMaterial2ThicknessMinimum,\n baseMaterial2ThicknessMaximum,\n interpassTemperatureMinimum,\n interpassTemperatureMaximum,\n postHeatTemperatureMinimum,\n postHeatTemperatureMaximum,\n postHeatTimeMinimum,\n postHeatTimeMaximum,\n postWeldHeatTreatmentTemperatureMinimum,\n postWeldHeatTreatmentTemperatureMaximum,\n postWeldHeatTreatmentTimeMinimum,\n postWeldHeatTreatmentTimeMaximum,\n thicknessRootMinimum,\n thicknessRootMaximum,\n thicknessFillMinimum,\n thicknessFillMaximum,\n thicknessCapMinimum,\n thicknessCapMaximum,\n branchAngleMinimum,\n branchAngleMaximum,\n },\n } = this;\n return {\n preheat: {\n min: preheatTemperatureMinimum,\n max: preheatTemperatureMaximum,\n },\n\n thickness: {\n min: thicknessMinimum,\n max: thicknessMaximum,\n },\n\n diameter: {\n min: diameterMinimum,\n max: diameterMaximum,\n },\n\n baseMaterial1: {\n min: baseMaterial1ThicknessMinimum,\n max: baseMaterial1ThicknessMaximum,\n },\n\n baseMaterial2: {\n min: baseMaterial2ThicknessMinimum,\n max: baseMaterial2ThicknessMaximum,\n },\n\n interpass: {\n min: interpassTemperatureMinimum,\n max: interpassTemperatureMaximum,\n },\n\n postHeatTemperature: {\n min: postHeatTemperatureMinimum,\n max: postHeatTemperatureMaximum,\n },\n\n postHeatTime: {\n min: postHeatTimeMinimum,\n max: postHeatTimeMaximum,\n },\n\n pwhtTemperature: {\n min: postWeldHeatTreatmentTemperatureMinimum,\n max: postWeldHeatTreatmentTemperatureMaximum,\n },\n\n pwhtTime: {\n min: postWeldHeatTreatmentTimeMinimum,\n max: postWeldHeatTreatmentTimeMaximum,\n },\n\n thicknessRoot: {\n min: thicknessRootMinimum,\n max: thicknessRootMaximum,\n },\n\n thicknessFill: {\n min: thicknessFillMinimum,\n max: thicknessFillMaximum,\n },\n\n thicknessCap: {\n min: thicknessCapMinimum,\n max: thicknessCapMaximum,\n },\n\n branchAngle: {\n min: branchAngleMinimum,\n max: branchAngleMaximum,\n },\n };\n }\n\n init() {\n super.init(...arguments);\n set(this, 'errors', []);\n\n let weldingPositionsRoot = get(this, 'weldingPositionRootOptions.length');\n let weldingPositionsFill = get(this, 'weldingPositionFillOptions.length');\n let weldingPositionsCap = get(this, 'weldingPositionCapOptions.length');\n if (weldingPositionsRoot === 1) {\n set(this, 'weldingPositionRoot', get(this, 'weldingPositionRootOptions.firstObject'));\n }\n if (weldingPositionsFill === 1) {\n set(this, 'weldingPositionFill', get(this, 'weldingPositionFillOptions.firstObject'));\n }\n if (weldingPositionsCap === 1) {\n set(this, 'weldingPositionCap', get(this, 'weldingPositionCapOptions.firstObject'));\n }\n }\n\n setRequired(field) {\n let { intl } = this;\n let requiredFieldMessage = intl.t('generic.error.field-required');\n set(this, `errors.${field}`, [requiredFieldMessage]);\n }\n\n validateRequiredFields() {\n let {\n certificateNumber,\n baseMaterial1Thickness,\n baseMaterial2Thickness,\n baseMaterialThickness,\n weldedThickness,\n diameter,\n weldingPositionRoot,\n weldingPositionFill,\n weldingPositionCap,\n source: wps,\n temperatureUnit,\n preHeat,\n interpass,\n postHeatTemperature,\n postHeatTime,\n pwhtTemperature,\n pwhtTime,\n intl,\n } = this;\n\n let requiredFieldMessage = intl.t('generic.error.field-required');\n\n let { preheatTemperatureMinimum, preheatTemperatureMaximum } = wps;\n let { interpassTemperatureMinimum, interpassTemperatureMaximum } = wps;\n let { postHeatTemperatureMinimum, postHeatTemperatureMaximum } = wps;\n let { postHeatTimeMinimum, postHeatTimeMaximum } = wps;\n let { postWeldHeatTreatmentTemperatureMinimum, postWeldHeatTreatmentTemperatureMaximum } = wps;\n let { postWeldHeatTreatmentTimeMinimum, postWeldHeatTreatmentTimeMaximum } = wps;\n\n if (isEmpty(certificateNumber)) {\n this.setRequired('certificateNumber');\n }\n if (isEmpty(weldedThickness)) {\n set(this, 'errors.weldedThickness', [{ message: requiredFieldMessage }]);\n }\n\n if (get(this, 'showBothMaterials')) {\n if (isEmpty(baseMaterial1Thickness)) {\n set(this, 'errors.baseMaterial1Thickness', [{ message: requiredFieldMessage }]);\n }\n if (isEmpty(baseMaterial2Thickness)) {\n set(this, 'errors.baseMaterial2Thickness', [{ message: requiredFieldMessage }]);\n }\n } else {\n if (isEmpty(baseMaterialThickness)) {\n set(this, 'errors.baseMaterialThickness', [{ message: requiredFieldMessage }]);\n }\n }\n\n if (get(this, 'showDiameter') && isEmpty(diameter)) {\n set(this, 'errors.diameter', [{ message: requiredFieldMessage }]);\n }\n\n if (isEmpty(weldingPositionRoot)) {\n this.setRequired('weldingPositionRoot');\n }\n\n if (get(this, 'hasFill') || get(this, 'hasCap')) {\n if (isEmpty(weldingPositionFill)) {\n this.setRequired('weldingPositionFill');\n }\n }\n\n if (get(this, 'hasCap') && isEmpty(weldingPositionCap)) {\n this.setRequired('weldingPositionCap');\n }\n\n let pwpsHasPreHeat = !isEmpty(preheatTemperatureMinimum) || !isEmpty(preheatTemperatureMaximum);\n let pwpsHasInterpass =\n !isEmpty(interpassTemperatureMinimum) || !isEmpty(interpassTemperatureMaximum);\n let pwpsHasPostHeat =\n !isEmpty(postHeatTemperatureMinimum) || !isEmpty(postHeatTemperatureMaximum);\n let pwpsHasPostHeatTime = !isEmpty(postHeatTimeMinimum) || !isEmpty(postHeatTimeMaximum);\n let pwpsHasPwhtTemperature =\n !isEmpty(postWeldHeatTreatmentTemperatureMinimum) ||\n !isEmpty(postWeldHeatTreatmentTemperatureMaximum);\n let pwpsHasPwhtTime =\n !isEmpty(postWeldHeatTreatmentTimeMinimum) || !isEmpty(postWeldHeatTreatmentTimeMaximum);\n\n if (pwpsHasPreHeat && isEmpty(preHeat)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-required-inside-range',\n {\n min: preheatTemperatureMinimum,\n max: preheatTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.preHeat', [message]);\n }\n\n if (pwpsHasInterpass && isEmpty(interpass)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-required-inside-range',\n {\n min: interpassTemperatureMinimum,\n max: interpassTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.interpass', [message]);\n }\n\n if (pwpsHasPostHeat && isEmpty(postHeatTemperature)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-required-inside-range',\n {\n min: postHeatTemperatureMinimum,\n max: postHeatTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.postHeatTemperature', [message]);\n }\n\n if (pwpsHasPostHeatTime && isEmpty(postHeatTime)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-required-inside-range',\n {\n min: postHeatTimeMinimum,\n max: postHeatTimeMaximum,\n unit: 'h',\n }\n );\n set(this, 'errors.postHeatTime', [message]);\n }\n\n if (pwpsHasPwhtTemperature && isEmpty(pwhtTemperature)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-required-inside-range',\n {\n min: postWeldHeatTreatmentTemperatureMinimum,\n max: postWeldHeatTreatmentTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.pwhtTemperature', [message]);\n }\n\n if (pwpsHasPwhtTime && isEmpty(pwhtTime)) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-required-inside-range',\n {\n min: postWeldHeatTreatmentTimeMinimum,\n max: postWeldHeatTreatmentTimeMaximum,\n unit: 'h',\n }\n );\n set(this, 'errors.pwhtTime', [message]);\n }\n }\n\n validateNumericFields() {\n let {\n baseMaterial1Thickness,\n baseMaterial2Thickness,\n baseMaterialThickness,\n weldedThickness,\n diameter,\n postHeatTime,\n pwhtTime,\n preHeat,\n interpass,\n postHeatTemperature,\n pwhtTemperature,\n thicknessRoot,\n thicknessFill,\n thicknessCap,\n branchAngle,\n } = this;\n\n let { intl } = this;\n let numericNumberError = intl.t('generic.error.number-bigger-than-zero');\n\n if (isNaN(parseFloat(weldedThickness)) || parseFloat(weldedThickness) < 0) {\n set(this, 'errors.weldedThickness', [{ message: numericNumberError }]);\n }\n if (get(this, 'showBothMaterials')) {\n if (isNaN(parseFloat(baseMaterial1Thickness)) || parseFloat(baseMaterial1Thickness) < 0) {\n set(this, 'errors.baseMaterial1Thickness', [{ message: numericNumberError }]);\n }\n if (isNaN(parseFloat(baseMaterial2Thickness)) || parseFloat(baseMaterial2Thickness) < 0) {\n set(this, 'errors.baseMaterial2Thickness', [{ message: numericNumberError }]);\n }\n } else {\n if (isNaN(parseFloat(baseMaterialThickness)) || parseFloat(baseMaterialThickness) < 0) {\n set(this, 'errors.baseMaterialThickness', [{ message: numericNumberError }]);\n }\n }\n\n if (get(this, 'showDiameter') && (isNaN(parseFloat(diameter)) || parseFloat(diameter) < 0)) {\n set(this, 'errors.diameter', [{ message: numericNumberError }]);\n }\n\n if (\n !isEmpty(postHeatTime) &&\n (isNaN(parseFloat(postHeatTime)) || parseFloat(postHeatTime) < 0)\n ) {\n set(this, 'errors.postHeatTime', [numericNumberError]);\n }\n\n if (!isEmpty(pwhtTime) && (isNaN(parseFloat(pwhtTime)) || parseFloat(pwhtTime) < 0)) {\n set(this, 'errors.pwhtTime', [numericNumberError]);\n }\n\n if (\n !isEmpty(pwhtTemperature) &&\n (isNaN(parseFloat(pwhtTemperature)) || parseFloat(pwhtTemperature) < 0)\n ) {\n set(this, 'errors.pwhtTemperature', [numericNumberError]);\n }\n\n if (\n !isEmpty(postHeatTemperature) &&\n (isNaN(parseFloat(postHeatTemperature)) || parseFloat(postHeatTemperature) < 0)\n ) {\n set(this, 'errors.postHeatTemperature', [numericNumberError]);\n }\n\n if (!isEmpty(preHeat) && (isNaN(parseFloat(preHeat)) || parseFloat(preHeat) < 0)) {\n set(this, 'errors.preHeat', [numericNumberError]);\n }\n\n if (!isEmpty(interpass) && (isNaN(parseFloat(interpass)) || parseFloat(interpass) < 0)) {\n set(this, 'errors.interpass', [numericNumberError]);\n }\n\n if (\n !isEmpty(thicknessRoot) &&\n (isNaN(parseFloat(thicknessRoot)) || parseFloat(thicknessRoot) < 0)\n ) {\n set(this, 'errors.thicknessRoot', [numericNumberError]);\n }\n\n if (\n !isEmpty(thicknessFill) &&\n (isNaN(parseFloat(thicknessFill)) || parseFloat(thicknessFill) < 0)\n ) {\n set(this, 'errors.thicknessFill', [numericNumberError]);\n }\n\n if (\n !isEmpty(thicknessCap) &&\n (isNaN(parseFloat(thicknessCap)) || parseFloat(thicknessCap) < 0)\n ) {\n set(this, 'errors.thicknessCap', [numericNumberError]);\n }\n\n if (!isEmpty(branchAngle) && (isNaN(parseFloat(branchAngle)) || parseFloat(branchAngle) < 0)) {\n set(this, 'errors.branchAngle', [numericNumberError]);\n }\n }\n\n validateThicknessForLayers() {\n let { thicknessRoot, thicknessFill, thicknessCap, weldedThickness, intl } = this;\n\n let totalThickness = parseFloat(weldedThickness);\n if (!isEmpty(weldedThickness) && !isNaN(totalThickness)) {\n let sum = 0;\n if (!isEmpty(thicknessRoot) && !isNaN(parseFloat(thicknessRoot))) {\n sum += parseFloat(thicknessRoot);\n }\n if (!isEmpty(thicknessFill) && !isNaN(parseFloat(thicknessFill))) {\n sum += parseFloat(thicknessFill);\n }\n if (!isEmpty(thicknessCap) && !isNaN(parseFloat(thicknessCap))) {\n sum += parseFloat(thicknessCap);\n }\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.thickness-exceed-welded-thickness',\n {\n sum,\n welded: weldedThickness,\n }\n );\n if (sum > totalThickness * 1.1) {\n set(this, 'errors.thicknessRoot', [{ message }]);\n if (get(this, 'hasFill') || get(this, 'hasCap')) {\n if (!isEmpty(thicknessFill)) {\n set(this, 'errors.thicknessFill', [{ message }]);\n }\n }\n if (get(this, 'hasCap') && !isEmpty(thicknessCap)) {\n set(this, 'errors.thicknessCap', [{ message }]);\n }\n }\n }\n }\n\n validateRanges() {\n let {\n weldedThickness,\n diameter,\n baseMaterial1Thickness,\n baseMaterial2Thickness,\n preHeat,\n interpass,\n postHeatTemperature,\n postHeatTime,\n pwhtTemperature,\n pwhtTime,\n intl,\n source: wps,\n distanceUnit,\n temperatureUnit,\n } = this;\n\n let { thicknessMinimum, thicknessMaximum } = wps;\n let { diameterMinimum, diameterMaximum } = wps;\n let { baseMaterial1ThicknessMinimum, baseMaterial1ThicknessMaximum } = wps;\n let { baseMaterial2ThicknessMinimum, baseMaterial2ThicknessMaximum } = wps;\n let { preheatTemperatureMinimum, preheatTemperatureMaximum } = wps;\n let { interpassTemperatureMinimum, interpassTemperatureMaximum } = wps;\n let { postHeatTemperatureMinimum, postHeatTemperatureMaximum } = wps;\n let { postHeatTimeMinimum, postHeatTimeMaximum } = wps;\n let { postWeldHeatTreatmentTemperatureMinimum, postWeldHeatTreatmentTemperatureMaximum } = wps;\n let { postWeldHeatTreatmentTimeMinimum, postWeldHeatTreatmentTimeMaximum } = wps;\n\n if (!isEmpty(weldedThickness)) {\n if (\n parseFloat(weldedThickness) > parseFloat(thicknessMaximum) ||\n parseFloat(weldedThickness) < parseFloat(thicknessMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: thicknessMinimum,\n max: thicknessMaximum,\n unit: distanceUnit,\n }\n );\n set(this, 'errors.weldedThickness', [{ message }]);\n }\n }\n\n if (!isEmpty(diameter)) {\n if (\n parseFloat(diameter) > parseFloat(diameterMaximum) ||\n parseFloat(diameter) < parseFloat(diameterMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: diameterMinimum,\n max: diameterMaximum,\n unit: distanceUnit,\n }\n );\n set(this, 'errors.diameter', [{ message }]);\n }\n }\n\n if (!isEmpty(baseMaterial1Thickness)) {\n if (\n parseFloat(baseMaterial1Thickness) > parseFloat(baseMaterial1ThicknessMaximum) ||\n parseFloat(baseMaterial1Thickness) < parseFloat(baseMaterial1ThicknessMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: baseMaterial1ThicknessMinimum,\n max: baseMaterial1ThicknessMaximum,\n unit: distanceUnit,\n }\n );\n set(this, 'errors.baseMaterial1Thickness', [{ message }]);\n }\n }\n\n if (!isEmpty(baseMaterial2Thickness)) {\n if (\n parseFloat(baseMaterial2Thickness) > parseFloat(baseMaterial2ThicknessMaximum) ||\n parseFloat(baseMaterial2Thickness) < parseFloat(baseMaterial2ThicknessMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: baseMaterial2ThicknessMinimum,\n max: baseMaterial2ThicknessMaximum,\n unit: distanceUnit,\n }\n );\n set(this, 'errors.baseMaterial2Thickness', [{ message }]);\n }\n }\n\n if (!isEmpty(preHeat)) {\n if (\n parseFloat(preHeat) > parseFloat(preheatTemperatureMaximum) ||\n parseFloat(preHeat) < parseFloat(preheatTemperatureMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: preheatTemperatureMinimum,\n max: preheatTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.preHeat', [message]);\n }\n }\n\n if (!isEmpty(interpass)) {\n if (\n parseFloat(interpass) > parseFloat(interpassTemperatureMaximum) ||\n parseFloat(interpass) < parseFloat(interpassTemperatureMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: interpassTemperatureMinimum,\n max: interpassTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.interpass', [message]);\n }\n }\n\n if (!isEmpty(postHeatTemperature)) {\n if (\n parseFloat(postHeatTemperature) > parseFloat(postHeatTemperatureMaximum) ||\n parseFloat(postHeatTemperature) < parseFloat(postHeatTemperatureMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: postHeatTemperatureMinimum,\n max: postHeatTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.postHeatTemperature', [message]);\n }\n }\n\n if (!isEmpty(postHeatTime)) {\n if (\n parseFloat(postHeatTime) > parseFloat(postHeatTimeMaximum) ||\n parseFloat(postHeatTime) < parseFloat(postHeatTimeMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: postHeatTimeMinimum,\n max: postHeatTimeMaximum,\n unit: 'h',\n }\n );\n set(this, 'errors.postHeatTime', [message]);\n }\n }\n\n if (!isEmpty(pwhtTemperature)) {\n if (\n parseFloat(pwhtTemperature) > parseFloat(postWeldHeatTreatmentTemperatureMaximum) ||\n parseFloat(pwhtTemperature) < parseFloat(postWeldHeatTreatmentTemperatureMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: postWeldHeatTreatmentTemperatureMinimum,\n max: postWeldHeatTreatmentTemperatureMaximum,\n unit: temperatureUnit,\n }\n );\n set(this, 'errors.pwhtTemperature', [message]);\n }\n }\n\n if (!isEmpty(pwhtTime)) {\n if (\n parseFloat(pwhtTime) > parseFloat(postWeldHeatTreatmentTimeMaximum) ||\n parseFloat(pwhtTime) < parseFloat(postWeldHeatTreatmentTimeMinimum)\n ) {\n let message = intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.value-outside-range',\n {\n min: postWeldHeatTreatmentTimeMinimum,\n max: postWeldHeatTreatmentTimeMaximum,\n unit: 'h',\n }\n );\n set(this, 'errors.pwhtTime', [message]);\n }\n }\n }\n\n hasErrors() {\n let errors = get(this, 'errors');\n return Object.getOwnPropertyNames(errors).length > 0;\n }\n\n isValid() {\n let errors = {};\n set(this, 'errors', errors);\n\n if (this.hasNoProcesses) {\n if (!errors.generic) {\n errors.generic = [];\n }\n errors.generic.push(\n this.intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.no-welding-process',\n {\n wpsNumber: this.source.wpsNumber,\n }\n )\n );\n }\n\n if (!this.hasWeldType) {\n if (!errors.generic) {\n errors.generic = [];\n }\n errors.generic.push(\n this.intl.t(\n 'components.model-welding-procedure-specification/certificate-from-pwps.errors.no-weld-type',\n {\n wpsNumber: this.source.wpsNumber,\n }\n )\n );\n }\n\n this.validateRequiredFields();\n if (!this.hasErrors()) {\n this.validateNumericFields();\n }\n if (!this.hasErrors()) {\n this.validateThicknessForLayers();\n }\n if (!this.hasErrors()) {\n this.validateRanges();\n }\n return !this.hasErrors();\n }\n\n getValueOrEmpty(property) {\n let value = get(this, property);\n if (isEmpty(value)) {\n return '';\n }\n return value;\n }\n\n @action\n createPQR() {\n let { loading, intl, alert, certificateNumber } = this;\n if (!this.isValid()) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n } else {\n loading.block();\n let testPieceValues = {\n certificateNumber,\n examiningBody: this.getValueOrEmpty('examiningBody.id'),\n weldedThickness: this.getValueOrEmpty('weldedThickness'),\n diameter: this.getValueOrEmpty('diameter'),\n postHeatTemperature: this.getValueOrEmpty('postHeatTemperature'),\n postHeatTime: this.getValueOrEmpty('postHeatTime'),\n pwhtTemperature: this.getValueOrEmpty('pwhtTemperature'),\n pwhtTime: this.getValueOrEmpty('pwhtTime'),\n preHeat: this.getValueOrEmpty('preHeat'),\n interpass: this.getValueOrEmpty('interpass'),\n branchAngle: this.getValueOrEmpty('branchAngle'),\n thicknessRoot: this.getValueOrEmpty('thicknessRoot'),\n thicknessFill: this.getValueOrEmpty('thicknessFill'),\n thicknessCap: this.getValueOrEmpty('thicknessCap'),\n weldingPositionRoot: this.getValueOrEmpty('weldingPositionRoot.id'),\n weldingPositionFill: this.getValueOrEmpty('weldingPositionFill.id'),\n weldingPositionCap: this.getValueOrEmpty('weldingPositionCap.id'),\n };\n\n if (get(this, 'showBothMaterials')) {\n testPieceValues.baseMaterial1Thickness = this.getValueOrEmpty('baseMaterial1Thickness');\n testPieceValues.baseMaterial2Thickness = this.getValueOrEmpty('baseMaterial2Thickness');\n } else {\n testPieceValues.baseMaterial1Thickness = this.getValueOrEmpty('baseMaterialThickness');\n testPieceValues.baseMaterial2Thickness = this.getValueOrEmpty('baseMaterialThickness');\n }\n get(this, 'source')\n .createPQR({\n testPieceValues,\n })\n .then(({ id }) => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.messages.pqr-created',\n {\n certificateNumber,\n }\n )\n );\n get(this, 'onCreatePQR')(id);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.duplicate-pqr',\n {\n certificateNumber,\n }\n )\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.no-permission'\n )\n );\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/pqr-from-pwps.errors.error-creating-pqr'\n )\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/prequalified-from-pwps.buttons.create-prequalified\\\"\\n }}\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/prequalified-from-pwps.buttons.create-prequalified\\\"\\n }}\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/prequalified-wps-from-pwps.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/prequalified-wps-from-pwps.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\n\nexport default class PrequalifiedWpsFromPwps extends Component {\n @service('alert-message') alert;\n @service intl;\n @service loading;\n @service('weldnote-data') data;\n @service userSession;\n\n @tracked errors = {};\n @tracked wpsNumber = '';\n @tracked revision = 0;\n\n setRequired(field) {\n const { intl } = this;\n const requiredFieldMessage = intl.t('generic.error.field-required');\n this.errors = { ...this.errors, [field]: [requiredFieldMessage] };\n }\n\n validateRequiredFields() {\n const { wpsNumber, revision } = this;\n\n if (isEmpty(wpsNumber)) {\n this.setRequired('wpsNumber');\n }\n if (isEmpty(revision)) {\n this.setRequired('revision');\n }\n }\n\n hasErrors() {\n return Object.getOwnPropertyNames(this.errors).length > 0;\n }\n\n isValid() {\n this.errors = {};\n this.validateRequiredFields();\n return !this.hasErrors();\n }\n\n @action\n async createWps() {\n const { loading, intl, alert, wpsNumber, revision } = this;\n\n if (!this.isValid()) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n loading.block();\n\n try {\n const { id } = await this.args.source.createPrequalifiedWPS({\n wpsNumber,\n revision,\n });\n\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.messages.wps-created',\n { wpsNumber }\n )\n );\n\n this.args.onCreateWPS(id);\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.errors.duplicate-wps',\n { wpsNumber }\n )\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.errors.no-permission'\n )\n );\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.errors.error-creating-wps'\n )\n );\n }\n } finally {\n loading.unblock();\n }\n }\n\n @action\n updateWpsNumber(value) {\n this.wpsNumber = value;\n }\n\n @action\n updateRevision(value) {\n this.revision = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.retrievePrintOptions.isRunning}}\\n \\n {{t \\\"components.model-welding-procedure-specification/print-options.messages.loading\\\"}}\\n \\n{{else}}\\n \\n \\n \\n \\n

\\n {{t \\\"components.model-welding-procedure-specification/print-options.messages.help\\\"}}\\n

\\n
\\n
\\n \\n \\n \\n \\n {{#unless @wps.isPreliminary}}\\n \\n \\n \\n {{/unless}}\\n \\n {{#unless @wps.isPreliminary}}\\n {{#if @wps.mainPqrId}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/unless}}\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if this.retrievePrintOptions.isRunning}}\\n \\n {{t \\\"components.model-welding-procedure-specification/print-options.messages.loading\\\"}}\\n \\n{{else}}\\n \\n \\n \\n \\n

\\n {{t \\\"components.model-welding-procedure-specification/print-options.messages.help\\\"}}\\n

\\n
\\n
\\n \\n \\n \\n \\n {{#unless @wps.isPreliminary}}\\n \\n \\n \\n {{/unless}}\\n \\n {{#unless @wps.isPreliminary}}\\n {{#if @wps.mainPqrId}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{/unless}}\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/print-options.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/print-options.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { task } from 'ember-concurrency';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport AlertMessageService from 'weldnote/services/alert-message';\nimport LoadingService from 'weldnote/services/loading';\nimport WeldnoteDataService from 'weldnote/services/weldnote-data';\nimport DS from 'ember-data';\nimport WPSModel from 'weldnote/models/welding-procedure-specification';\nimport WeldingProcedureSpecificationMetadata from 'weldnote/models/welding-procedure-specification-metadata';\nimport IntlService from 'ember-intl/services/intl';\n\ninterface PrintOptionsArgs {\n isEditing: boolean;\n wps: WPSModel;\n}\n\nexport default class PrintOptions extends Component {\n @service\n declare store: DS.Store;\n\n @service\n declare intl: IntlService;\n\n @service\n declare weldnoteData: WeldnoteDataService;\n\n @service\n declare loading: LoadingService;\n\n @service\n declare alertMessage: AlertMessageService;\n\n get alert() {\n return this.alertMessage;\n }\n\n get data() {\n return this.weldnoteData;\n }\n\n get metadata(): WeldingProcedureSpecificationMetadata {\n return this.retrievePrintOptions.lastSuccessful?.value;\n }\n\n retrievePrintOptions = task(\n {\n restartable: true,\n },\n async () => {\n let { data, store } = this;\n let { wps } = this.args;\n let result = null;\n let metadata = await data.findWpsMetadata.perform(wps.id);\n if (metadata === null || isEmpty(metadata)) {\n result = store.createRecord('welding-procedure-specification-metadata', {\n wps,\n });\n } else {\n result = get(metadata, 'firstObject');\n }\n return result;\n }\n );\n\n setPrintBaseMaterialGroup = task(\n {\n restartable: true,\n },\n async (newValue) => {\n let { metadata, loading, alert } = this;\n metadata.printBaseMaterialGroup = newValue;\n if (newValue) {\n metadata.printPqrBaseMaterialApprovalRange = false;\n }\n try {\n loading.block();\n alert.info(\n this.intl.t(\n 'components.model-welding-procedure-specification/print-options.messages.options-updated'\n )\n );\n await metadata.save();\n } finally {\n loading.unblock();\n }\n }\n );\n\n setPrintWeldTypeApprovalRange = task(\n {\n restartable: true,\n },\n async (newValue) => {\n let { metadata, loading, alert } = this;\n metadata.printWeldTypeApprovalRange = newValue;\n try {\n loading.block();\n await metadata.save();\n alert.info(\n this.intl.t(\n 'components.model-welding-procedure-specification/print-options.messages.options-updated'\n )\n );\n } finally {\n loading.unblock();\n }\n }\n );\n\n setPrintPqrBaseMaterialApprovalRange = task(\n {\n restartable: true,\n },\n async (newValue) => {\n let { metadata, loading, alert } = this;\n metadata.printPqrBaseMaterialApprovalRange = newValue;\n if (newValue) {\n metadata.printBaseMaterialGroup = false;\n }\n try {\n loading.block();\n await metadata.save();\n alert.info(\n this.intl.t(\n 'components.model-welding-procedure-specification/print-options.messages.options-updated'\n )\n );\n } finally {\n loading.unblock();\n }\n }\n );\n\n constructor(owner: unknown, args: PrintOptionsArgs) {\n super(owner, args);\n if (isEmpty(this.metadata)) {\n this.retrievePrintOptions.perform();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{yield}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{@okLabel}}\\n
\\n
\\n
\", {\"contents\":\"\\n \\n {{yield}}\\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n {{@okLabel}}\\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/project-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/project-chooser.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class ProjectChooser extends Component {\n currentProject = null;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n {{#if this.hasErrors}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n
\\n \\n {{#if this.hasRevisions}}\\n {{t\\n \\\"components.model-welding-procedure-specification/revision.labels.existing-revisions\\\"\\n }}\\n {{#each this.existingRevisions as |revision|}}\\n {{revision.revision}}\\n {{#if (not-eq this.existingRevisions.lastObject revision)}},{{/if}}\\n {{/each}}\\n {{/if}}\\n \\n
\\n
\\n \\n
\\n \\n
\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/revision.labels.new-revision-btn\\\"\\n }}\\n
\\n
\\n\", {\"contents\":\"\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n {{#if this.hasErrors}}\\n {{this.error}}\\n {{/if}}\\n
\\n
\\n \\n
\\n \\n
\\n \\n {{#if this.hasRevisions}}\\n {{t\\n \\\"components.model-welding-procedure-specification/revision.labels.existing-revisions\\\"\\n }}\\n {{#each this.existingRevisions as |revision|}}\\n {{revision.revision}}\\n {{#if (not-eq this.existingRevisions.lastObject revision)}},{{/if}}\\n {{/each}}\\n {{/if}}\\n \\n
\\n
\\n \\n
\\n \\n
\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/revision.labels.new-revision-btn\\\"\\n }}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/revision.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/revision.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, set, action } from '@ember/object';\n\n@classic\nexport default class Revision extends Component {\n @service\n intl;\n\n newRevision = '';\n\n hasErrors = false;\n\n existingRevisions = null;\n\n @notEmpty('existingRevisions')\n hasRevisions;\n\n clearErrors() {\n set(this, 'hasErrors', false);\n set(this, 'error', '');\n }\n\n setError(message) {\n set(this, 'hasErrors', true);\n set(this, 'error', message);\n }\n\n inExistingRevisions(revision) {\n let exists = false;\n get(this, 'existingRevisions').forEach((rev) => {\n if (revision && rev) {\n if (rev.revision.toUpperCase() === revision.toUpperCase()) {\n exists = true;\n }\n }\n });\n return exists;\n }\n\n translate(key, options) {\n return this.intl\n .t(`components.model-welding-procedure-specification/revision.${key}`, options)\n .toString();\n }\n\n init() {\n super.init(...arguments);\n if (get(this, 'existingRevisions') === null) {\n set(this, 'existingRevisions', []);\n }\n }\n\n @action\n createRevision() {\n if (isEmpty(get(this, 'newRevision'))) {\n this.setError(this.translate('errors.empty-revision'));\n return;\n }\n if (this.inExistingRevisions(get(this, 'newRevision'))) {\n this.setError(\n this.translate('errors.duplicate-revision', { revision: get(this, 'newRevision') })\n );\n return;\n }\n\n this.clearErrors();\n let { newRevision, newRevisionNotes } = this;\n get(this, 'createNewRevision')(newRevision, newRevisionNotes);\n }\n\n @action\n setRevision(value) {\n let exists = false;\n if (this.inExistingRevisions(value)) {\n exists = true;\n this.setError(this.translate('errors.duplicate-revision', { revision: value }));\n }\n\n if (!exists) {\n this.clearErrors();\n }\n set(this, 'newRevision', value.toUpperCase());\n }\n\n @action\n setRevisionNotes(value) {\n set(this, 'newRevisionNotes', value);\n }\n\n @action\n cancelRevision() {\n this.clearErrors();\n get(this, 'cancel')();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n
\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.messages.part1\\\"\\n }}

\\n \\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.messages.part2\\\"\\n }}

\\n
\\n
\\n {{#if this.hasErrors}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.messages.error-summary\\\"\\n }}

\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.sortedErrors as |error|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.field\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.message\\\"\\n }}
\\n {{wps-invalid-attribute-name\\n attribute=error.attribute\\n intl=this.intl\\n wps=@wps\\n userSession=this.userSession\\n }}\\n {{error.message}}
\\n
\\n
\\n {{/if}}\\n {{#if this.hasErrorsParameters}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.messages.parameters-with-errors\\\"\\n }}

\\n {{#each @wps.weldingParameters as |parameter|}}\\n {{#if (gt parameter.errors.length 0)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.pass\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.pass-attributes-error\\\"\\n }}
{{parameter.passNumber}} - {{parameter.weldingProcess.shortDesignation}}\\n {{#each parameter.errors as |error|}}\\n {{t\\n (concat \\\"model.wps-welding-parameter.\\\" error.attribute \\\".label\\\")\\n }}\\n -\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n {{/each}}\\n
\\n
\\n {{/if}}\\n
\\n \\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.buttons.save-with-errors\\\"\\n }}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n
\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.messages.part1\\\"\\n }}

\\n \\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.messages.part2\\\"\\n }}

\\n
\\n
\\n {{#if this.hasErrors}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.messages.error-summary\\\"\\n }}

\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.sortedErrors as |error|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.field\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.message\\\"\\n }}
\\n {{wps-invalid-attribute-name\\n attribute=error.attribute\\n intl=this.intl\\n wps=@wps\\n userSession=this.userSession\\n }}\\n {{error.message}}
\\n
\\n
\\n {{/if}}\\n {{#if this.hasErrorsParameters}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.messages.parameters-with-errors\\\"\\n }}

\\n {{#each @wps.weldingParameters as |parameter|}}\\n {{#if (gt parameter.errors.length 0)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.pass\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.pass-attributes-error\\\"\\n }}
{{parameter.passNumber}} - {{parameter.weldingProcess.shortDesignation}}\\n {{#each parameter.errors as |error|}}\\n {{t\\n (concat \\\"model.wps-welding-parameter.\\\" error.attribute \\\".label\\\")\\n }}\\n -\\n {{error.message}}\\n {{/each}}\\n
\\n {{/if}}\\n {{/each}}\\n
\\n
\\n {{/if}}\\n
\\n \\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.buttons.save-with-errors\\\"\\n }}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/save-invalid-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/save-invalid-modal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { sort, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class SaveInvalidModal extends Component {\n @service\n intl;\n\n @service\n userSession;\n\n errors = null;\n\n @notEmpty('errors')\n hasErrors;\n\n @sort('errors', function (a, b) {\n return a.attribute.localeCompare(b.attribute);\n })\n sortedErrors;\n\n @computed('wps.weldingParameters.@each.errors')\n get hasErrorsParameters() {\n let { weldingParameters } = this.wps;\n let parametersWithErrors = weldingParameters.filter((parameter) => {\n return get(parameter, 'errors.length') > 0;\n });\n return !isEmpty(parametersWithErrors);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n
\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-parameter-modal.messages.part1\\\"\\n }}

\\n \\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.messages.part2\\\"\\n }}

\\n
\\n
\\n {{#if this.hasErrors}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-parameter-modal.messages.error-summary\\\"\\n }}\\n {{@parameter.passNumber}}\\n -\\n {{@parameter.weldingProcess.shortDesignation}}

\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.sortedErrors as |error|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.field\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.message\\\"\\n }}
{{t\\n (concat \\\"model.wps-welding-parameter.\\\" error.attribute \\\".label\\\")\\n }}{{error.message}}
\\n
\\n
\\n {{/if}}\\n
\\n \\n
\\n \\n \\n {{#if @saveTask.isRunning}}\\n \\n {{/if}}\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.buttons.save-with-errors\\\"\\n }}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n
\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-parameter-modal.messages.part1\\\"\\n }}

\\n \\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.messages.part2\\\"\\n }}

\\n
\\n
\\n {{#if this.hasErrors}}\\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-parameter-modal.messages.error-summary\\\"\\n }}\\n {{@parameter.passNumber}}\\n -\\n {{@parameter.weldingProcess.shortDesignation}}

\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.sortedErrors as |error|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.field\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/save-invalid-modal.table.columns.message\\\"\\n }}
{{t\\n (concat \\\"model.wps-welding-parameter.\\\" error.attribute \\\".label\\\")\\n }}{{error.message}}
\\n
\\n
\\n {{/if}}\\n
\\n \\n
\\n \\n \\n {{#if @saveTask.isRunning}}\\n \\n {{/if}}\\n {{t\\n \\\"components.model-welding-procedure-specification/edit.save-with-errors.buttons.save-with-errors\\\"\\n }}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/save-invalid-parameter-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/save-invalid-parameter-modal.hbs\"}});\nimport Component from '@glimmer/component';\nimport { get } from '@ember/object';\n\ninterface ParameterError {\n attribute: string;\n message: string;\n}\n\n/**\n * Ember Data exposes `errors` as an `ArrayProxy`, which is not spreadable.\n */\ninterface ErrorsProxy {\n toArray(): ParameterError[];\n}\n\n/**\n * A `wps-welding-parameter` record. Only the bits this modal reads are declared.\n */\ninterface WeldingParameter {\n errors?: ParameterError[] | ErrorsProxy;\n}\n\ninterface SaveInvalidParameterModalArgs {\n parameter: WeldingParameter;\n closeModal: () => void;\n save: (parameter: WeldingParameter) => unknown;\n saveTask: { isRunning: boolean };\n}\n\n/**\n * Shown when the user confirms a welding pass that fails validation. Lists the failing\n * fields of that single pass and offers to save it anyway, mirroring what\n * `save-invalid-modal` does for the WPS as a whole.\n */\nexport default class SaveInvalidParameterModalComponent extends Component {\n /**\n * Copies the errors out before sorting so the record's own collection is left alone.\n */\n get sortedErrors(): ParameterError[] {\n let errors = get(this.args.parameter, 'errors');\n if (!errors) {\n return [];\n }\n let list = Array.isArray(errors) ? errors.slice() : errors.toArray();\n return list.sort((a, b) => a.attribute.localeCompare(b.attribute));\n }\n\n get hasErrors(): boolean {\n return this.sortedErrors.length > 0;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/standard-wps-from-pwps.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/standard-wps-from-pwps.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { get, set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError, isPermissionDenied } from 'weldnote/utils/json-api-errors';\n\n@classic\nexport default class StandardWpsFromPwps extends Component {\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @service\n loading;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n source = null;\n\n errors = null;\n\n revision = 0;\n\n wpsNumber = '';\n\n init() {\n super.init(...arguments);\n set(this, 'errors', []);\n }\n\n setRequired(field) {\n let { intl } = this;\n let requiredFieldMessage = intl.t('generic.error.field-required');\n set(this, `errors.${field}`, [requiredFieldMessage]);\n }\n\n validateRequiredFields() {\n let { wpsNumber, revision } = this;\n\n if (isEmpty(wpsNumber)) {\n this.setRequired('wpsNumber');\n }\n if (isEmpty(revision)) {\n this.setRequired('revision');\n }\n }\n\n hasErrors() {\n let errors = get(this, 'errors');\n return Object.getOwnPropertyNames(errors).length > 0;\n }\n\n isValid() {\n set(this, 'errors', {});\n this.validateRequiredFields();\n return !this.hasErrors();\n }\n\n getValueOrEmpty(property) {\n let value = get(this, property);\n if (isEmpty(value)) {\n return '';\n }\n return value;\n }\n\n @action\n createWps() {\n let { loading, intl, alert, wpsNumber, revision } = this;\n if (!this.isValid()) {\n alert.error(intl.t('edit-view.actions.validation-failed'));\n } else {\n loading.block();\n get(this, 'source')\n .createPrequalifiedWPS({\n wpsNumber,\n revision,\n })\n .then(({ id }) => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.messages.wps-created',\n {\n wpsNumber,\n }\n )\n );\n get(this, 'onCreateWPS')(id);\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.errors.duplicate-wps',\n {\n wpsNumber,\n }\n )\n );\n } else if (isPermissionDenied(reason)) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.errors.no-permission'\n )\n );\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/prequalified-from-pwps.errors.error-creating-wps'\n )\n );\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n {{#if this.hasErrors}}\\n {{error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/update-revision.update-btn\\\"}}\\n
\\n
\\n\", {\"contents\":\"\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n {{#if this.hasErrors}}\\n {{error}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n \\n
\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/update-revision.update-btn\\\"}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/update-revision.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/update-revision.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class UpdateRevision extends Component {\n @service\n intl;\n\n newNumber = '';\n\n error = '';\n\n @notEmpty('error')\n hasErrors;\n\n @action\n updateNumber(newNumber) {\n if (isEmpty(newNumber)) {\n set(\n this,\n 'error',\n this.intl\n .t('components.model-welding-procedure-specification/update-revision.new-number-required')\n .toString()\n );\n } else {\n set(this, 'error', '');\n this.updateRevisions(newNumber);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.hasAll}}\\n {{#if this.bothEqual}}\\n {{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n {{! The else is formatted this way to make the spaces in the beggining and ending not appear }}\\n {{else}}\\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode-range.range\\\"\\n min=(format-decimal this.minimum convertToFraction=@convertToFraction)\\n max=(format-decimal this.maximum convertToFraction=@convertToFraction)\\n htmlSafe=true\\n }}{{/if}}{{else}}\\n {{#if this.hasMin}}\\n ≥\\n {{{format-decimal this.minimum convertToFraction=@convertToFraction}}}\\n {{else}}\\n {{#if this.hasMax}}\\n ≤\\n {{{format-decimal this.maximum convertToFraction=@convertToFraction}}}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if this.hasAll}}\\n {{#if this.bothEqual}}\\n {{format-decimal this.minimum convertToFraction=@convertToFraction}}\\n {{! The else is formatted this way to make the spaces in the beggining and ending not appear }}\\n {{else}}\\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode-range.range\\\"\\n min=(format-decimal this.minimum convertToFraction=@convertToFraction)\\n max=(format-decimal this.maximum convertToFraction=@convertToFraction)\\n htmlSafe=true\\n }}{{/if}}{{else}}\\n {{#if this.hasMin}}\\n ≥\\n {{{format-decimal this.minimum convertToFraction=@convertToFraction}}}\\n {{else}}\\n {{#if this.hasMax}}\\n ≤\\n {{{format-decimal this.maximum convertToFraction=@convertToFraction}}}\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/view-mode-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/view-mode-range.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class ViewModeRange extends Component {\n get minimum() {\n return this.args.min;\n }\n\n get maximum() {\n return this.args.max;\n }\n\n get hasMin() {\n return !isEmpty(this.args.min);\n }\n\n get hasMax() {\n return !isEmpty(this.args.max);\n }\n\n get hasAll() {\n return this.hasMin && this.hasMax;\n }\n\n get hasAny() {\n return this.hasMin || this.hasMax;\n }\n\n get convertToFraction() {\n return this.args.convertToFraction ?? false;\n }\n\n get bothEqual() {\n const { min, max } = this.args;\n return min === max;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

{{this.wpsTitle}}\\n {{#if this.userSession.hasProductivity}}\\n \\n (#{{this.wps.id}})\\n \\n {{/if}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.labels.supporting-pqrs\\\"\\n }}:\\n {{#each this.pqrs as |pqr|}}\\n {{pqr.certificateNumber}}\\n {{/each}}\\n \\n

\\n\\n \\n\\n
\\n
\\n {{#if (and this.userSession.canCreateWPS (not this.wps.isArchived))}}\\n \\n {{t \\\"toolbar.edit.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.userSession.canArchiveWPS}}\\n {{#if this.wps.isArchived}}\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n {{! Regular WPS }}\\n {{#if\\n (and\\n (not this.wps.isPreliminary)\\n (not this.wps.isArchived)\\n (not this.wps.isNew)\\n this.userSession.canCreateWPS\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n\\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if\\n (and\\n this.wps.isPrimary\\n (not this.wps.isNew)\\n this.userSession.canCreateWPS\\n (not this.wps.isArchived)\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.project\\\"}}\\n \\n\\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if\\n (and\\n (not this.wps.isPreliminary)\\n (not this.wps.isNew)\\n this.userSession.canCreateCertificate\\n (not this.wps.isArchived)\\n )\\n }}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{else}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{! Preliminary WPS }}\\n {{#if (and this.wps.isPreliminary (not this.wps.isNew) this.canCreateWPS)}}\\n {{! Preliminary WPS Actions }}\\n {{#if this.userSession.canDeleteWPS}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{! Preliminary WPS Create Qualification }}\\n {{#if (not this.wps.isArchived)}}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.toolbar.create-qualification\\\"\\n }}\\n \\n\\n \\n
    \\n {{#if (and this.userSession.canCreatePQR this.userSession.isPlanQuality)}}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{else}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateCertificate\\n (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{else}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and this.userSession.canCreateWPS this.wps.isPreliminary this.wpsIsOfCodeAWS)\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateWPS\\n this.wps.isPreliminary\\n this.showStandardWpsButton\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n
\\n
\\n {{! Export Documents }}\\n {{#if (and (not this.wps.isNew) (not this.wps.isArchived))}}\\n
\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.export-wps\\\"\\n }}\\n \\n\\n \\n \\n \\n \\n {{#if this.userSession.hasProductivity}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{else}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n
\\n\\n {{#if this.linkComesFromUrl}}\\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.link-to-project\\\"}}\\n {{this.projectFromLinkName}}\\n \\n
\\n {{else if this.showLinkToProject}}\\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.link-to-project\\\"}}\\n {{this.projectFromLinkName}}\\n \\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.link-to-project\\\"\\n }}\\n {{this.wps.project.designation}}\\n |\\n {{t \\\"model.welding-procedure-specification.masterWps.label\\\"}}:\\n {{this.wps.masterWps.wpsNumber}}\\n

\\n {{/if}}\\n\\n {{#if this.wps.isArchived}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.wps-is-archived\\\"\\n }}\\n \\n
\\n {{/if}}\\n\\n \\n
\\n {{#if task.isRunning}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-pdf-export\\\"}}\\n \\n {{else if task.isFinished}}\\n {{! Required so that the observer that triggers on finish is called }}\\n {{else if task.isError}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-export-error\\\"}}\\n \\n {{/if}}\\n
\\n \\n\\n
\\n
\\n\\n{{#if this.showDuplicateWindow}}\\n \\n{{/if}}\\n\\n{{#if this.showAddWpsToProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.add-to-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showCreateWpsForProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.create-specific-for-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showWeldCloudLicenseModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-procedure-specification/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if this.hasWpsDeleteErrors}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n{{! Blue Bar }}\\n
\\n
\\n
\\n \\n {{this.wps.standard.standard}}\\n {{t \\\"components.view-mode.sections.wps\\\"}}\\n \\n
{{t\\n \\\"components.view-mode.sections.standard\\\"\\n }}
\\n
\\n
\\n {{format-weld-type this.wps.weldType small=true}}\\n {{#if (not (is-empty-attribute this.wps.productType))}}\\n \\n -\\n {{t (concat \\\"lov.product-type.\\\" this.wps.productType)}}\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.weld-type\\\"\\n }}
\\n
\\n
\\n {{this.wps.weldingProcessRoot.shortDesignation}}
\\n {{#if (has-value this.wps.weldingProcessFill.id)}}\\n {{this.wps.weldingProcessFill.shortDesignation}}
\\n {{/if}}\\n {{#if (has-value this.wps.weldingProcessCap.id)}}\\n {{this.wps.weldingProcessCap.shortDesignation}}
\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.processes\\\"\\n }}
\\n \\n
\\n
\\n {{#if (not (is-empty-attribute this.wps.baseMaterial1))}}\\n {{this.wps.baseMaterial1.specification.specification}}\\n {{this.wps.baseMaterial1.grade.grade}}\\n {{this.wps.baseMaterial1.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n {{#if (not (is-empty-attribute this.wps.baseMaterial2))}}\\n {{this.wps.baseMaterial2.specification.specification}}\\n {{this.wps.baseMaterial2.grade.grade}}\\n {{this.wps.baseMaterial2.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
{{t\\n \\\"components.view-mode.sections.base-metals\\\"\\n }}
\\n
\\n \\n\\n\\n{{! Base Material / Dimensions }}\\n
\\n {{#if\\n (or\\n (has-value this.wps.baseMaterial1.id)\\n (has-value this.wps.baseMaterial1ThicknessMinimum)\\n (has-value this.wps.baseMaterial1ThicknessMaximum)\\n (has-value this.wps.baseMaterial2.id)\\n (has-value this.wps.baseMaterial2ThicknessMinimum)\\n (has-value this.wps.baseMaterial2ThicknessMaximum)\\n this.hasWpsThickness\\n )\\n }}\\n
\\n \\n
\\n \\n
\\n

\\n {{t \\\"components.view-mode.sections.thickness\\\"}}\\n

\\n {{#if this.showBaseMaterialThickness}}\\n {{#if this.showSingleBaseMaterialThickness}}\\n

\\n {{this.wps.baseMaterial1.specification.specification}}\\n {{this.wps.baseMaterial1.grade.grade}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n {{else}}\\n
\\n
\\n

\\n {{this.wps.baseMaterial1.specification.specification}}\\n {{this.wps.baseMaterial1.grade.grade}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n
\\n
\\n

\\n {{this.wps.baseMaterial2.specification.specification}}\\n {{this.wps.baseMaterial2.grade.grade}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if this.hasWpsThickness}}\\n {{#if this.showBaseMaterialThickness}}\\n
\\n {{/if}}\\n

\\n {{t \\\"components.view-mode.sections.deposited-thickness\\\"}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{#if this.hasWpsDiameter}}\\n
\\n \\n
\\n {{svg-jar \\\"diameter\\\"}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.diameter\\\"}}\\n

\\n
\\n \\n \\n \\n {{this.distanceUnit}}\\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if this.hasImages}}\\n \\n
\\n

{{t\\n \\\"components.view-mode.sections.groove-design\\\"\\n }}

\\n

{{this.sideType}}

\\n {{#if (has-value this.wps.grooveDesigns.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.weld-layer-configuration\\\"\\n }}

\\n

{{this.layerType}}

\\n {{#if (has-value this.wps.weldLayerConfigurations.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n \\n{{/if}}\\n\\n
\\n {{#if (has-value this.wps.weldingProcessRoot.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.wps.weldingProcessRoot.shortDesignation}}

\\n

\\n {{#if (has-value this.wps.processMecanizationRoot.name)}}\\n {{this.wps.processMecanizationRoot.name}} \\n {{/if}}\\n {{#if (gt this.wps.weldingPositionsRoot.length 0)}}\\n \\n {{#each (sort-by \\\"code\\\" this.wps.weldingPositionsRoot) as |position|}}\\n {{position.code}}\\n {{#if (not-eq this.wps.weldingPositionsRoot.lastObject position)}}\\n +\\n {{/if}}\\n {{/each}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.arcTransferModeRoot.transferMode)}}\\n {{this.wps.arcTransferModeRoot.transferMode}}\\n {{/if}}\\n {{#if (has-value this.wps.typeCurrentRoot.typeCurrent)}}\\n {{this.wps.typeCurrentRoot.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.wps.fillerMaterialRoot.id)}}\\n \\n {{this.wps.fillerMaterialRoot.specification.specification}}\\n {{this.wps.fillerMaterialRoot.classification.classification}}\\n {{this.wps.fillerMaterialRoot.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.shieldingRoot)}}\\n {{#if (eq this.wps.shieldingRoot \\\"G\\\")}}\\n \\n {{this.wps.shieldingRootGas.specification.specification}}\\n {{this.wps.shieldingRootGas.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.wps.shieldingRootGas.composition}}\\n \\n \\n {{else if (eq this.wps.shieldingRoot \\\"F\\\")}}\\n \\n \\n {{this.wps.shieldingRootFlux.specification.specification}}\\n \\n {{this.wps.shieldingRootFlux.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.wps.shieldingRoot \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.wps.weldingProcessFill.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.wps.weldingProcessFill.shortDesignation}}

\\n

\\n {{#if (has-value this.wps.processMecanizationFill.name)}}\\n {{this.wps.processMecanizationFill.name}} \\n {{/if}}\\n {{#if (gt this.wps.weldingPositionsFill.length 0)}}\\n \\n {{#each (sort-by \\\"code\\\" this.wps.weldingPositionsFill) as |position|}}\\n {{position.code}}\\n {{#if (not-eq this.wps.weldingPositionsFill.lastObject position)}}\\n +\\n {{/if}}\\n {{/each}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.arcTransferModeFill.transferMode)}}\\n {{this.wps.arcTransferModeFill.transferMode}}\\n {{/if}}\\n {{#if (has-value this.wps.typeCurrentFill.typeCurrent)}}\\n {{this.wps.typeCurrentFill.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.wps.fillerMaterialFill.id)}}\\n \\n {{this.wps.fillerMaterialFill.specification.specification}}\\n {{this.wps.fillerMaterialFill.classification.classification}}\\n {{this.wps.fillerMaterialFill.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.shieldingFill)}}\\n {{#if (eq this.wps.shieldingFill \\\"G\\\")}}\\n \\n {{this.wps.shieldingFillGas.specification.specification}}\\n {{this.wps.shieldingFillGas.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.wps.shieldingFillGas.composition}}\\n \\n \\n {{else if (eq this.wps.shieldingFill \\\"F\\\")}}\\n \\n \\n {{this.wps.shieldingFillFlux.specification.specification}}\\n \\n {{this.wps.shieldingFillFlux.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.wps.shieldingFill \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.wps.weldingProcessCap.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.wps.weldingProcessCap.shortDesignation}}

\\n

\\n {{#if (has-value this.wps.processMecanizationCap.name)}}\\n {{this.wps.processMecanizationCap.name}} \\n {{/if}}\\n {{#if (gt this.wps.weldingPositionsCap.length 0)}}\\n \\n {{#each (sort-by \\\"code\\\" this.wps.weldingPositionsCap) as |position|}}\\n {{position.code}}\\n {{#if (not-eq this.wps.weldingPositionsCap.lastObject position)}}\\n +\\n {{/if}}\\n {{/each}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.arcTransferModeCap.transferMode)}}\\n {{this.wps.arcTransferModeCap.transferMode}}\\n {{/if}}\\n {{#if (has-value this.wps.typeCurrentCap.typeCurrent)}}\\n {{this.wps.typeCurrentCap.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.wps.fillerMaterialCap.id)}}\\n \\n {{this.wps.fillerMaterialCap.specification.specification}}\\n {{this.wps.fillerMaterialCap.classification.classification}}\\n {{this.wps.fillerMaterialCap.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.shieldingCap)}}\\n {{#if (eq this.wps.shieldingCap \\\"G\\\")}}\\n \\n {{this.wps.shieldingCapGas.specification.specification}}\\n {{this.wps.shieldingCapGas.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.wps.shieldingCapGas.composition}}\\n \\n \\n {{else if (eq this.wps.shieldingCap \\\"F\\\")}}\\n \\n \\n {{this.wps.shieldingCapFlux.specification.specification}}\\n \\n {{this.wps.shieldingCapFlux.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.wps.shieldingCap \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if this.hasPreHeat}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.preheat\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n
\\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if this.hasInterpass}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.interpass\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if this.hasPostHeat}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.post-heat\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n \\n h\\n
\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if this.hasPWHT}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n \\n h\\n
\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
\\n
\\n {{svg-jar \\\"forbidden\\\"}}\\n
\\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if (gt this.wps.weldingParameters.length 0)}}\\n \\n
\\n
\\n
\\n {{svg-jar \\\"welding-machine\\\"}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.welding-passes\\\"\\n }}

\\n
\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if (not this.wps.isPreliminary)}}\\n {{#if this.hasProjectOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.projectsOfWps as |project|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-designation-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-name-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.customer-column\\\"\\n }}
{{project.projectDesignation}}{{project.projectName}}{{project.customer}}
\\n \\n {{/if}}\\n\\n {{#if this.hasWeldsOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.weldsOfWps as |weld|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.welding-book-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.weld-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.project-column\\\"\\n }}
{{weld.weldingBookDesignation}}{{weld.weldNumber}}{{weld.projectName}}
\\n \\n {{/if}}\\n{{/if}}\", {\"contents\":\"
\\n
\\n

{{this.wpsTitle}}\\n {{#if this.userSession.hasProductivity}}\\n \\n (#{{this.wps.id}})\\n \\n {{/if}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.labels.supporting-pqrs\\\"\\n }}:\\n {{#each this.pqrs as |pqr|}}\\n {{pqr.certificateNumber}}\\n {{/each}}\\n \\n

\\n\\n \\n\\n
\\n
\\n {{#if (and this.userSession.canCreateWPS (not this.wps.isArchived))}}\\n \\n {{t \\\"toolbar.edit.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if this.userSession.canArchiveWPS}}\\n {{#if this.wps.isArchived}}\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.buttons.unarchive\\\"}}\\n \\n \\n {{/if}}\\n {{/if}}\\n\\n {{! Regular WPS }}\\n {{#if\\n (and\\n (not this.wps.isPreliminary)\\n (not this.wps.isArchived)\\n (not this.wps.isNew)\\n this.userSession.canCreateWPS\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n\\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if\\n (and\\n this.wps.isPrimary\\n (not this.wps.isNew)\\n this.userSession.canCreateWPS\\n (not this.wps.isArchived)\\n )\\n }}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.project\\\"}}\\n \\n\\n \\n \\n \\n \\n {{/if}}\\n\\n {{#if\\n (and\\n (not this.wps.isPreliminary)\\n (not this.wps.isNew)\\n this.userSession.canCreateCertificate\\n (not this.wps.isArchived)\\n )\\n }}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{else}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n {{! Preliminary WPS }}\\n {{#if (and this.wps.isPreliminary (not this.wps.isNew) this.canCreateWPS)}}\\n {{! Preliminary WPS Actions }}\\n {{#if this.userSession.canDeleteWPS}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.toolbar.actions\\\"}}\\n \\n \\n \\n \\n \\n {{/if}}\\n\\n {{! Preliminary WPS Create Qualification }}\\n {{#if (not this.wps.isArchived)}}\\n {{#if (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/edit.toolbar.create-qualification\\\"\\n }}\\n \\n\\n \\n
    \\n {{#if (and this.userSession.canCreatePQR this.userSession.isPlanQuality)}}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{else}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-pqr\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateCertificate\\n (or this.userSession.isPlanQuality this.userSession.isPlanCertificate)\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{else}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-certificate\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and this.userSession.canCreateWPS this.wps.isPreliminary this.wpsIsOfCodeAWS)\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-prequalified\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n {{#if\\n (and\\n this.userSession.canCreateWPS\\n this.wps.isPreliminary\\n this.showStandardWpsButton\\n )\\n }}\\n
  • \\n {{#if this.isCreateQualificationDisabled}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{else}}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.create-standard-wps\\\"\\n }}\\n \\n \\n {{/if}}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n\\n
\\n
\\n {{! Export Documents }}\\n {{#if (and (not this.wps.isNew) (not this.wps.isArchived))}}\\n
\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.buttons.export-wps\\\"\\n }}\\n \\n\\n \\n \\n \\n \\n {{#if this.userSession.hasProductivity}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{else}}\\n \\n {{t \\\"components.weldcloud-productivity-links.wps-link\\\"}}\\n \\n {{/if}}\\n
\\n {{/if}}\\n
\\n
\\n\\n {{#if this.linkComesFromUrl}}\\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.link-to-project\\\"}}\\n {{this.projectFromLinkName}}\\n \\n
\\n {{else if this.showLinkToProject}}\\n
\\n \\n {{t \\\"components.model-welding-procedure-specification/view-mode.link-to-project\\\"}}\\n {{this.projectFromLinkName}}\\n \\n
\\n

{{t\\n \\\"components.model-welding-procedure-specification/edit.link-to-project\\\"\\n }}\\n {{this.wps.project.designation}}\\n |\\n {{t \\\"model.welding-procedure-specification.masterWps.label\\\"}}:\\n {{this.wps.masterWps.wpsNumber}}\\n

\\n {{/if}}\\n\\n {{#if this.wps.isArchived}}\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.wps-is-archived\\\"\\n }}\\n \\n
\\n {{/if}}\\n\\n \\n
\\n {{#if task.isRunning}}\\n \\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-pdf-export\\\"}}\\n \\n {{else if task.isFinished}}\\n {{! Required so that the observer that triggers on finish is called }}\\n {{else if task.isError}}\\n \\n {{t \\\"components.model-welding-procedure-specification/edit.messages.wps-export-error\\\"}}\\n \\n {{/if}}\\n
\\n \\n\\n
\\n
\\n\\n{{#if this.showDuplicateWindow}}\\n \\n{{/if}}\\n\\n{{#if this.showAddWpsToProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.add-to-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showCreateWpsForProject}}\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/project-chooser.text.create-specific-for-project\\\"\\n }}

\\n \\n{{/if}}\\n\\n{{#if this.showWeldCloudLicenseModal}}\\n \\n{{/if}}\\n\\n{{#if this.showConfirmArchive}}\\n \\n \\n \\n \\n

{{t \\\"components.model-welding-procedure-specification/view-mode.messages.archive\\\"}}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.showConfirmUnarchive}}\\n \\n \\n \\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/view-mode.messages.unarchive\\\"\\n }}

\\n
\\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingModal}}\\n \\n {{#if this.hasWpsDeleteErrors}}\\n \\n {{/if}}\\n \\n{{/if}}\\n\\n{{! Blue Bar }}\\n
\\n
\\n
\\n \\n {{this.wps.standard.standard}}\\n {{t \\\"components.view-mode.sections.wps\\\"}}\\n \\n
{{t\\n \\\"components.view-mode.sections.standard\\\"\\n }}
\\n
\\n
\\n {{format-weld-type this.wps.weldType small=true}}\\n {{#if (not (is-empty-attribute this.wps.productType))}}\\n \\n -\\n {{t (concat \\\"lov.product-type.\\\" this.wps.productType)}}\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.weld-type\\\"\\n }}
\\n
\\n
\\n {{this.wps.weldingProcessRoot.shortDesignation}}
\\n {{#if (has-value this.wps.weldingProcessFill.id)}}\\n {{this.wps.weldingProcessFill.shortDesignation}}
\\n {{/if}}\\n {{#if (has-value this.wps.weldingProcessCap.id)}}\\n {{this.wps.weldingProcessCap.shortDesignation}}
\\n {{/if}}\\n
{{t\\n \\\"components.view-mode.sections.processes\\\"\\n }}
\\n \\n
\\n
\\n {{#if (not (is-empty-attribute this.wps.baseMaterial1))}}\\n {{this.wps.baseMaterial1.specification.specification}}\\n {{this.wps.baseMaterial1.grade.grade}}\\n {{this.wps.baseMaterial1.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
\\n {{#if (not (is-empty-attribute this.wps.baseMaterial2))}}\\n {{this.wps.baseMaterial2.specification.specification}}\\n {{this.wps.baseMaterial2.grade.grade}}\\n {{this.wps.baseMaterial2.materialGroup.visualLabel}}\\n {{/if}}\\n
\\n
{{t\\n \\\"components.view-mode.sections.base-metals\\\"\\n }}
\\n
\\n \\n\\n\\n{{! Base Material / Dimensions }}\\n
\\n {{#if\\n (or\\n (has-value this.wps.baseMaterial1.id)\\n (has-value this.wps.baseMaterial1ThicknessMinimum)\\n (has-value this.wps.baseMaterial1ThicknessMaximum)\\n (has-value this.wps.baseMaterial2.id)\\n (has-value this.wps.baseMaterial2ThicknessMinimum)\\n (has-value this.wps.baseMaterial2ThicknessMaximum)\\n this.hasWpsThickness\\n )\\n }}\\n
\\n \\n
\\n \\n
\\n

\\n {{t \\\"components.view-mode.sections.thickness\\\"}}\\n

\\n {{#if this.showBaseMaterialThickness}}\\n {{#if this.showSingleBaseMaterialThickness}}\\n

\\n {{this.wps.baseMaterial1.specification.specification}}\\n {{this.wps.baseMaterial1.grade.grade}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n {{else}}\\n
\\n
\\n

\\n {{this.wps.baseMaterial1.specification.specification}}\\n {{this.wps.baseMaterial1.grade.grade}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n
\\n
\\n

\\n {{this.wps.baseMaterial2.specification.specification}}\\n {{this.wps.baseMaterial2.grade.grade}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if this.hasWpsThickness}}\\n {{#if this.showBaseMaterialThickness}}\\n
\\n {{/if}}\\n

\\n {{t \\\"components.view-mode.sections.deposited-thickness\\\"}}\\n \\n \\n {{this.distanceUnit}}\\n \\n

\\n {{/if}}\\n
\\n
\\n {{/if}}\\n {{#if this.hasWpsDiameter}}\\n
\\n \\n
\\n {{svg-jar \\\"diameter\\\"}}\\n
\\n

\\n {{t \\\"components.view-mode.sections.diameter\\\"}}\\n

\\n
\\n \\n \\n \\n {{this.distanceUnit}}\\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if this.hasImages}}\\n \\n
\\n

{{t\\n \\\"components.view-mode.sections.groove-design\\\"\\n }}

\\n

{{this.sideType}}

\\n {{#if (has-value this.wps.grooveDesigns.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.weld-layer-configuration\\\"\\n }}

\\n

{{this.layerType}}

\\n {{#if (has-value this.wps.weldLayerConfigurations.firstObject.renderedImagePath)}}\\n \\n {{/if}}\\n
\\n \\n{{/if}}\\n\\n
\\n {{#if (has-value this.wps.weldingProcessRoot.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.wps.weldingProcessRoot.shortDesignation}}

\\n

\\n {{#if (has-value this.wps.processMecanizationRoot.name)}}\\n {{this.wps.processMecanizationRoot.name}} \\n {{/if}}\\n {{#if (gt this.wps.weldingPositionsRoot.length 0)}}\\n \\n {{#each (sort-by \\\"code\\\" this.wps.weldingPositionsRoot) as |position|}}\\n {{position.code}}\\n {{#if (not-eq this.wps.weldingPositionsRoot.lastObject position)}}\\n +\\n {{/if}}\\n {{/each}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.arcTransferModeRoot.transferMode)}}\\n {{this.wps.arcTransferModeRoot.transferMode}}\\n {{/if}}\\n {{#if (has-value this.wps.typeCurrentRoot.typeCurrent)}}\\n {{this.wps.typeCurrentRoot.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.wps.fillerMaterialRoot.id)}}\\n \\n {{this.wps.fillerMaterialRoot.specification.specification}}\\n {{this.wps.fillerMaterialRoot.classification.classification}}\\n {{this.wps.fillerMaterialRoot.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.shieldingRoot)}}\\n {{#if (eq this.wps.shieldingRoot \\\"G\\\")}}\\n \\n {{this.wps.shieldingRootGas.specification.specification}}\\n {{this.wps.shieldingRootGas.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.wps.shieldingRootGas.composition}}\\n \\n \\n {{else if (eq this.wps.shieldingRoot \\\"F\\\")}}\\n \\n \\n {{this.wps.shieldingRootFlux.specification.specification}}\\n \\n {{this.wps.shieldingRootFlux.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.wps.shieldingRoot \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.wps.weldingProcessFill.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.wps.weldingProcessFill.shortDesignation}}

\\n

\\n {{#if (has-value this.wps.processMecanizationFill.name)}}\\n {{this.wps.processMecanizationFill.name}} \\n {{/if}}\\n {{#if (gt this.wps.weldingPositionsFill.length 0)}}\\n \\n {{#each (sort-by \\\"code\\\" this.wps.weldingPositionsFill) as |position|}}\\n {{position.code}}\\n {{#if (not-eq this.wps.weldingPositionsFill.lastObject position)}}\\n +\\n {{/if}}\\n {{/each}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.arcTransferModeFill.transferMode)}}\\n {{this.wps.arcTransferModeFill.transferMode}}\\n {{/if}}\\n {{#if (has-value this.wps.typeCurrentFill.typeCurrent)}}\\n {{this.wps.typeCurrentFill.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.wps.fillerMaterialFill.id)}}\\n \\n {{this.wps.fillerMaterialFill.specification.specification}}\\n {{this.wps.fillerMaterialFill.classification.classification}}\\n {{this.wps.fillerMaterialFill.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.shieldingFill)}}\\n {{#if (eq this.wps.shieldingFill \\\"G\\\")}}\\n \\n {{this.wps.shieldingFillGas.specification.specification}}\\n {{this.wps.shieldingFillGas.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.wps.shieldingFillGas.composition}}\\n \\n \\n {{else if (eq this.wps.shieldingFill \\\"F\\\")}}\\n \\n \\n {{this.wps.shieldingFillFlux.specification.specification}}\\n \\n {{this.wps.shieldingFillFlux.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.wps.shieldingFill \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n {{#if (has-value this.wps.weldingProcessCap.id)}}\\n
\\n
\\n
\\n {{svg-jar \\\"consumables\\\"}}\\n
\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.additional-variables\\\"\\n }}

\\n

{{this.wps.weldingProcessCap.shortDesignation}}

\\n

\\n {{#if (has-value this.wps.processMecanizationCap.name)}}\\n {{this.wps.processMecanizationCap.name}} \\n {{/if}}\\n {{#if (gt this.wps.weldingPositionsCap.length 0)}}\\n \\n {{#each (sort-by \\\"code\\\" this.wps.weldingPositionsCap) as |position|}}\\n {{position.code}}\\n {{#if (not-eq this.wps.weldingPositionsCap.lastObject position)}}\\n +\\n {{/if}}\\n {{/each}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.arcTransferModeCap.transferMode)}}\\n {{this.wps.arcTransferModeCap.transferMode}}\\n {{/if}}\\n {{#if (has-value this.wps.typeCurrentCap.typeCurrent)}}\\n {{this.wps.typeCurrentCap.typeCurrent}}\\n {{/if}}\\n {{#if (has-value this.wps.fillerMaterialCap.id)}}\\n \\n {{this.wps.fillerMaterialCap.specification.specification}}\\n {{this.wps.fillerMaterialCap.classification.classification}}\\n {{this.wps.fillerMaterialCap.group.visualLabel}}\\n \\n {{/if}}\\n {{#if (has-value this.wps.shieldingCap)}}\\n {{#if (eq this.wps.shieldingCap \\\"G\\\")}}\\n \\n {{this.wps.shieldingCapGas.specification.specification}}\\n {{this.wps.shieldingCapGas.symbol}}\\n {{t \\\"components.view-mode.message.gas\\\"}}\\n \\n {{this.wps.shieldingCapGas.composition}}\\n \\n \\n {{else if (eq this.wps.shieldingCap \\\"F\\\")}}\\n \\n \\n {{this.wps.shieldingCapFlux.specification.specification}}\\n \\n {{this.wps.shieldingCapFlux.flux}}\\n {{t \\\"components.view-mode.message.flux\\\"}}\\n \\n {{else if (eq this.wps.shieldingCap \\\"N\\\")}}\\n {{t \\\"components.view-mode.message.no-shielding\\\"}}\\n {{/if}}\\n {{/if}}\\n

\\n
\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if this.hasPreHeat}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.preheat\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n
\\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if this.hasInterpass}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.interpass\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if this.hasPostHeat}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.post-heat\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n \\n h\\n
\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n \\n {{/if}}\\n {{#if this.hasPWHT}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
\\n \\n {{this.temperatureUnit}}\\n
\\n
\\n \\n h\\n
\\n
\\n \\n {{else if (or this.media.isLaptop this.media.isDesktop)}}\\n
\\n \\n
\\n {{svg-jar \\\"thermometer\\\"}}\\n
\\n

{{t\\n \\\"components.view-mode.sections.pwht\\\"\\n }}

\\n
\\n
\\n {{svg-jar \\\"forbidden\\\"}}\\n
\\n
\\n
\\n \\n {{/if}}\\n\\n\\n{{#if (gt this.wps.weldingParameters.length 0)}}\\n \\n
\\n
\\n
\\n {{svg-jar \\\"welding-machine\\\"}}\\n
\\n
\\n

{{t\\n \\\"components.view-mode.sections.welding-passes\\\"\\n }}

\\n
\\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if (not this.wps.isPreliminary)}}\\n {{#if this.hasProjectOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.projectsOfWps as |project|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-designation-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.project-name-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.projects.customer-column\\\"\\n }}
{{project.projectDesignation}}{{project.projectName}}{{project.customer}}
\\n \\n {{/if}}\\n\\n {{#if this.hasWeldsOfWps}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.weldsOfWps as |weld|}}\\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.welding-book-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.weld-column\\\"\\n }}{{t\\n \\\"components.model-welding-procedure-specification/view-mode.welds.project-column\\\"\\n }}
{{weld.weldingBookDesignation}}{{weld.weldNumber}}{{weld.projectName}}
\\n \\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/view-mode.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/view-mode.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { not, readOnly, notEmpty, or, equal, alias, and, gt } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport {\n isDuplicateError,\n isPermissionDenied,\n isForeignKeyError,\n} from 'weldnote/utils/json-api-errors';\nimport { somePropertyHasValue } from 'weldnote/macros/property-check';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { task } from 'ember-concurrency';\nimport { isStandardOfTypeAWS, isStandardASME, isStandardAWSB21 } from 'weldnote/utils/standards';\nimport { downloadExcel } from 'weldnote/utils/ajax/file-download';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport { htmlSafe } from '@ember/template';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\nconst { WPS_TYPE } = Constants;\n\n@classic\nexport default class ViewMode extends Component {\n @readOnly('model')\n wps;\n\n @readOnly('wps.mainPqr')\n pqr;\n\n @service\n media;\n\n @service\n unitSystem;\n\n @service\n alertMessage;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n session;\n\n @service\n loading;\n\n @service\n analytics;\n\n @service\n userSession;\n\n @service\n taskMonitor;\n\n @service\n ajax;\n\n @service('weldnote-data')\n data;\n\n @service\n weldcloud;\n\n @service\n highlightedPassHelper;\n\n @service\n scroller;\n\n section = 'wps';\n\n currentPQR = null;\n\n wpsDeleteErrors = null;\n\n // Flag to show modal of delete\n isShowingModal = false;\n\n showWeldCloudLicenseModal = false;\n\n allowAutoScrollToWeldingParametersTable = false;\n\n @computed('wps.wpsType', 'wps.project')\n get showLinkToProject() {\n return get(this, 'wps.wpsType') === WPS_TYPE.PROJECT && !isEmpty(get(this, 'wps.project.id'));\n }\n\n @computed('project')\n get linkComesFromUrl() {\n return get(this, 'wps.wpsType') === WPS_TYPE.PRIMARY && !isEmpty(get(this, 'project'));\n }\n\n @computed('taskMonitor.currentTasks.[]')\n get wpsPdfProgressTask() {\n let tasks = this.taskMonitor.currentTasks;\n let contextTask = tasks.find((item) => {\n if (item.contextName === 'wps-export-pdf') {\n if (item.contextId === this.wps.id) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n @computed('wps.isNew')\n get previousRoute() {\n if (get(this, 'wps.isNew') || get(this, 'wps.isPreliminary')) {\n return 'welding-procedure-specifications-preliminary';\n } else {\n return 'welding-procedure-specifications';\n }\n }\n\n @computed('wps.isNew')\n get previousRouteLabel() {\n if (get(this, 'wps.isNew') || get(this, 'wps.isPreliminary')) {\n return this.intl.t('generic.welding.pwps');\n } else {\n return this.intl.t('generic.welding.wps');\n }\n }\n\n @computed('wps.{isNew,wpsNumber,isPreliminary,isPrequalified}')\n get wpsTitle() {\n let { intl, wps } = this;\n if (wps.isNew) {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.new-pwps')\n .toString();\n } else if (wps.isPreliminary) {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.pwps-number', {\n wpsNumber: wps.wpsNumber,\n })\n .toString();\n } else if (wps.isPrequalified) {\n if (this.wpsIsOfCodeAWS) {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.prequalified', {\n wpsNumber: wps.wpsNumber,\n })\n .toString();\n } else {\n return intl\n .t('components.model-welding-procedure-specification/edit.title.standard-wps', {\n wpsNumber: wps.wpsNumber,\n })\n .toString();\n }\n } else {\n return `${wps.wpsNumber} - v. ${wps.revision}`;\n }\n }\n\n @computed('wps.standard')\n get wpsIsOfCodeAWS() {\n let standard = get(this, 'wps.standard');\n return isStandardOfTypeAWS(standard);\n }\n\n @computed('wps.standard')\n get showStandardWpsButton() {\n let standard = get(this, 'wps.standard');\n return isStandardASME(standard) || isStandardAWSB21(standard);\n }\n\n @alias('wps.standard.standard')\n standardLabel;\n\n @computed('wps.weldingDetails')\n get layerType() {\n let { weldingDetails } = this.wps;\n if (!isEmpty(weldingDetails)) {\n let result = weldingDetails.filter(\n (e) => e.shortDesignation === 'sl' || e.shortDesignation === 'ml'\n );\n if (result.length > 0) {\n return result[0].completeDesignation;\n }\n }\n return '';\n }\n\n @computed('wps.weldingDetails')\n get sideType() {\n let { weldingDetails } = this.wps;\n if (!isEmpty(weldingDetails)) {\n let result = weldingDetails.filter(\n (e) =>\n e.shortDesignation === 'ss nb' ||\n e.shortDesignation === 'ss mb' ||\n e.shortDesignation === 'ss gb' ||\n e.shortDesignation === 'ss fb' ||\n e.shortDesignation === 'bs'\n );\n if (result.length > 0) {\n return result[0].completeDesignation;\n }\n }\n return '';\n }\n\n @computed('wps.{weldingProcessRoot,weldType,weldingPositionsRoot}')\n get isCreateQualificationDisabled() {\n let { weldingProcessRoot, weldType, weldingPositionsRoot } = this.wps;\n if (isEmpty(weldingProcessRoot)) {\n return true;\n } else {\n if (isEmpty(get(weldingProcessRoot, 'id'))) {\n return true;\n }\n }\n if (isEmpty(weldType)) {\n return true;\n } else {\n if (isEmpty(get(weldType, 'id'))) {\n return true;\n }\n }\n if (isEmpty(weldingPositionsRoot)) {\n return true;\n } else {\n if (get(weldingProcessRoot, 'length') === 0) {\n return true;\n }\n }\n\n return false;\n }\n\n @computed\n get wpsLinkWeldCloud() {\n return htmlSafe(this.weldcloud.generateWpsLink(this.wps.guid));\n }\n\n @computed('wps.{mainPqr,pqrFill,pqrCap}')\n get pqrs() {\n let pqrs = [];\n let { wps } = this;\n let root = get(wps, WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR);\n let fill = get(wps, WELDING_PROCEDURE_SPECIFICATION.PQR_FILL);\n let cap = get(wps, WELDING_PROCEDURE_SPECIFICATION.PQR_CAP);\n let secondary = get(wps, WELDING_PROCEDURE_SPECIFICATION.SECONDARY_PQRS);\n\n let pqrIds = [];\n\n if (!isEmpty(root) && !isEmpty(get(root, 'id'))) {\n pqrIds.push(get(root, 'id'));\n pqrs.pushObject(root);\n }\n\n if (!isEmpty(fill) && !isEmpty(get(fill, 'id'))) {\n if (pqrIds.indexOf(get(fill, 'id')) < 0) {\n pqrIds.push(get(fill, 'id'));\n pqrs.pushObject(fill);\n }\n }\n\n if (!isEmpty(cap) && !isEmpty(get(cap, 'id'))) {\n if (pqrIds.indexOf(get(cap, 'id')) < 0) {\n pqrIds.push(get(fill, 'id'));\n pqrs.pushObject(cap);\n }\n }\n\n if (!isEmpty(secondary) && get(secondary, 'length') > 0) {\n secondary.forEach((pqr) => {\n if (pqrIds.indexOf(get(pqr, 'id')) < 0) {\n pqrIds.push(get(pqr, 'id'));\n pqrs.pushObject(pqr);\n }\n });\n }\n\n return pqrs;\n }\n\n get temperatureUnit() {\n return this.unitSystem.getTemperatureUnit(this.wps.unitSystem);\n }\n\n get distanceUnit() {\n return this.unitSystem.getDistanceUnit(this.wps.unitSystem);\n }\n\n get flowUnit() {\n return this.unitSystem.getFlowUnit(this.wps.unitSystem);\n }\n\n get heatDistanceUnit() {\n return this.unitSystem.getHeatDistanceUnit(this.wps.unitSystem);\n }\n\n get travelSpeedUnit() {\n return this.unitSystem.getTravelSpeedUnit(this.wps.unitSystem);\n }\n\n get wireSpeedUnit() {\n return this.unitSystem.getWireSpeedUnit(this.wps.unitSystem);\n }\n\n get hasAttachedDocument() {\n return !isEmpty(get(this.wps, 'wpsDocument.downloadPath'));\n }\n\n get wpsDocumentPath() {\n return get(this.wps, 'wpsDocument.downloadPath');\n }\n\n @or('hasGrooveDesign', 'hasWeldLayerConfigurations')\n hasImages;\n\n @notEmpty('wps.grooveDesigns.firstObject.renderedImagePath')\n hasGrooveDesign;\n\n @notEmpty('wps.weldLayerConfigurations.firstObject.renderedImagePath')\n hasWeldLayerConfigurations;\n\n @or('hasGrooveDesign', 'hasWeldLayerConfigurations')\n hasImages;\n\n @gt('pqrs.length', 0)\n hasPQR;\n\n @notEmpty('wpsDeleteErrors')\n hasWpsDeleteErrors;\n\n @computed('hasPQR')\n get columnSize() {\n return get(this, 'hasPQR') ? 2 : 1;\n }\n\n @computed('hasPQR')\n get columnSizeTable() {\n return get(this, 'hasPQR') ? 3 : 2;\n }\n\n @alias('wps.isOverlayWeld')\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showBothBaseMaterials;\n\n @somePropertyHasValue('wps', 'postHeatTemperatureMinimum', 'postHeatTemperatureMaximum')\n hasPostHeat;\n\n @somePropertyHasValue('wps', 'preheatTemperatureMinimum', 'preheatTemperatureMaximum')\n hasPreHeat;\n\n @somePropertyHasValue(\n 'wps',\n 'postWeldHeatTreatmentTemperatureMinimum',\n 'postWeldHeatTreatmentTemperatureMaximum'\n )\n hasPWHT;\n\n @somePropertyHasValue('wps', 'interpassTemperatureMinimum', 'interpassTemperatureMaximum')\n hasInterpass;\n\n @computed('wps.weldingDetails.[]')\n get rootLabel() {\n if (get(this, 'wps').isBothSides()) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq1');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.root');\n }\n }\n\n @computed('wps.weldingDetails.[]')\n get fillLabel() {\n if (get(this, 'wps').isBothSides()) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq2');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.fill');\n }\n }\n\n @computed('wps.weldingDetails.[]')\n get capLabel() {\n if (get(this, 'wps').isBothSides()) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq3');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.cap');\n }\n }\n\n @computed('currentPQR.weldingDetailsTestPiece.[]')\n get rootPqrLabel() {\n if (!isEmpty(get(this, 'currentPQR.id'))) {\n if (get(this, 'currentPQR.isDetailBothSides')) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq1');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.root');\n }\n }\n return '';\n }\n\n @computed('currentPQR.weldingDetailsTestPiece.[]')\n get fillPqrLabel() {\n if (!isEmpty(get(this, 'currentPQR.id'))) {\n if (get(this, 'currentPQR.isDetailBothSides')) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq2');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.fill');\n }\n }\n return '';\n }\n\n @computed('currentPQR.weldingDetailsTestPiece.[]')\n get capPqrLabel() {\n if (!isEmpty(get(this, 'currentPQR.id'))) {\n if (get(this, 'currentPQR.isDetailBothSides')) {\n return this.intl.t('components.model-pqr/root-fill-cap-display.seq3');\n } else {\n return this.intl.t('components.model-pqr/root-fill-cap-display.cap');\n }\n }\n return '';\n }\n\n @alias('media.isMobile')\n isMobile;\n\n @and('isMobile', 'hasPQR')\n isMobileWPS;\n\n @equal('section', 'wps')\n showWpsPasses;\n\n @equal('section', 'pqr')\n showPqrPasses;\n\n @somePropertyHasValue(\n 'wps',\n 'baseMaterial1ThicknessMinimum',\n 'baseMaterial1ThicknessMaximum',\n 'baseMaterial2ThicknessMinimum',\n 'baseMaterial2ThicknessMaximum'\n )\n showBaseMaterialThickness;\n\n @somePropertyHasValue('wps', 'thicknessMinimum', 'thicknessMaximum')\n hasWpsThickness;\n\n @somePropertyHasValue('wps', 'diameterMinimum', 'diameterMaximum')\n hasWpsDiameter;\n\n @somePropertyHasValue('wps', 'grooveAngleMinimum', 'grooveAngleMaximum')\n hasGrooveAngle;\n\n @somePropertyHasValue('wps', 'rootFaceMinimum', 'rootFaceMaximum')\n hasRootFace;\n\n @somePropertyHasValue('wps', 'rootGapMinimum', 'rootGapMaximum')\n hasRootGap;\n\n @or('hasGrooveAngle', 'hasRootFace', 'hasRootGap')\n hasJointDetails;\n\n @somePropertyHasValue(\n 'pqr',\n 'filletWeldBaseMaterialThicknessMinimumApprovalRange',\n 'filletWeldBaseMaterialThicknessMaximumApprovalRange'\n )\n pqrHasFilletWeldApprovalRange;\n\n @computed('wps.weldType')\n get hasOverlayNumberOfLayer() {\n return (\n get(this, 'wps.isOverlayWeld') &&\n !isEmpty(get(this, 'wps.overlayNumberOfLayers')) &&\n get(this, 'hasImages')\n );\n }\n\n fetchProjects = task(\n {\n restartable: true,\n },\n async () => {\n let wps = get(this, 'wps');\n let result = await wps.fetchProjectsOfWps();\n let clientUnitSystem = this.userSession.unitSystem;\n const projectsOfClientUnit = result.filter((p) => p.unitSystem == clientUnitSystem);\n set(this, 'projectsOfWps', result);\n }\n );\n\n fetchWelds = task(\n {\n restartable: true,\n },\n async () => {\n let wps = get(this, 'wps');\n let result = await wps.fetchWeldsOfWps();\n set(this, 'weldsOfWps', result);\n }\n );\n\n @computed('projectsOfWps.[]', 'project')\n get projectFromLinkName() {\n let projectId = get(this, 'project');\n let projects = get(this, 'projectsOfWps');\n if (!isEmpty(projects)) {\n let matchingProject = projects.find((project) => {\n return `${get(project, 'projectId')}` === `${projectId}`;\n });\n if (!isEmpty(matchingProject)) {\n return get(matchingProject, 'projectDesignation');\n }\n }\n return '';\n }\n\n @notEmpty('projectsOfWps')\n hasProjectOfWps;\n\n @notEmpty('weldsOfWps')\n hasWeldsOfWps;\n\n init() {\n super.init(...arguments);\n if (get(this, 'wps.isPrimary')) {\n this.fetchProjects.perform();\n }\n this.fetchWelds.perform();\n }\n\n @computed\n get gridColumns() {\n let { intl } = this;\n let passNumberLabel = intl.t('components.model-pqr/view-mode.labels.pass-number');\n let weldingProcessLabel = intl.t('components.model-pqr/view-mode.labels.welding-process');\n let fillerMaterialLabel = intl.t('components.model-pqr/view-mode.labels.filler-material');\n let currentLabel = intl.t('components.model-pqr/view-mode.labels.current');\n let voltageLabel = intl.t('components.model-pqr/view-mode.labels.voltage');\n let travelSpeedLabel = intl.t('components.model-pqr/view-mode.labels.travel-speed', {\n unit: get(this, 'travelSpeedUnit'),\n });\n let heatInputLabel = intl.t('components.model-pqr/view-mode.labels.heat-input', {\n unit: get(this, 'heatDistanceUnit'),\n });\n let wireFeedLabel = intl.t('components.model-pqr/view-mode.labels.wire-feed-speed', {\n unit: get(this, 'wireSpeedUnit'),\n });\n let arcTransferLabel = intl.t('components.model-pqr/view-mode.labels.arc-transfer-mode');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'passNumber',\n label: passNumberLabel,\n sortable: false,\n width: '100px',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcess.shortDesignation',\n label: weldingProcessLabel,\n width: '100px',\n cellComponent: 'weldnote-grid/passes/process',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'fillerMaterialType.specification',\n label: fillerMaterialLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/pqr-view/filler-material',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'currentMinimum',\n label: currentLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/current',\n },\n {\n valuePath: 'voltageMinimum',\n label: voltageLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/voltage',\n },\n {\n valuePath: 'travelSpeedMinimum',\n label: travelSpeedLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/travel-speed',\n },\n {\n valuePath: 'wireFeedSpeed',\n label: wireFeedLabel,\n sortable: false,\n breakpoints: ['desktop'],\n cellComponent: 'weldnote-grid/numeric-range/wire-feed',\n },\n {\n valuePath: 'arcTransferMode.transferMode',\n label: arcTransferLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInputMinimum',\n label: heatInputLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/numeric-range/heat-input',\n },\n ];\n }\n\n reloadWps() {\n return this.data.loadAllDataWPS(this.wps.id, { reload: true });\n }\n\n archiveWPS = task(\n {\n drop: true,\n },\n async (callback) => {\n let { loading, alertMessage: alert, intl, wps } = this;\n\n loading.block();\n\n try {\n await wps.archive();\n this.reloadWps()\n .then(() => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.archive-success',\n {\n certificate: get(wps, 'wpsNumber'),\n }\n )\n );\n })\n .finally(() => {\n loading.unblock();\n if (typeof callback === 'function') {\n callback();\n }\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.archive-error'\n )\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmArchive', false);\n }\n }\n );\n\n unarchiveWPS = task(\n {\n drop: true,\n },\n async () => {\n let { loading, alertMessage: alert, intl, wps } = this;\n\n loading.block();\n\n try {\n await wps.unarchive();\n this.reloadWps()\n .then(() => {\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.unarchive-success',\n {\n certificate: get(wps, 'wpsNumber'),\n }\n )\n );\n })\n .finally(() => {\n loading.unblock();\n });\n } catch (reason) {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/view-mode.messages.unarchive-error'\n )\n );\n }\n loading.unblock();\n } finally {\n set(this, 'showConfirmUnarchive', false);\n }\n }\n );\n\n deleteWPS() {\n let { wps, loading, alertMessage: alert, intl } = this;\n let label = get(wps, 'wpsNumber');\n loading.block();\n wps.deleteRecord();\n wps\n .save()\n .then(() => {\n alert.success(\n intl.t('edit-view.actions.deleted', {\n name: label,\n })\n );\n if (wps.isPreliminary) {\n get(this, 'deleteInstance')('pwps');\n } else {\n get(this, 'deleteInstance')('wps');\n }\n })\n .catch((reason) => {\n wps.rollbackAttributes();\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else if (isForeignKeyError(reason)) {\n let foreignKeyMessage = intl\n .t('edit-view.actions.foreign-key-error', { name: label })\n .toString();\n alert.error(foreignKeyMessage);\n } else {\n alert.error(intl.t('edit-view.actions.generic-delete-error', { name: label }));\n }\n })\n .finally(() => {\n loading.unblock();\n this.toggleProperty('isShowingModal');\n });\n }\n\n confirmDownloadExcel = task(\n {\n drop: true,\n },\n async () => {\n let { loading, intl, session, wps } = this;\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-excel-download'\n )\n );\n try {\n await downloadExcel(\n `/api/welding-procedure-specifications/${wps.id}/downloadExcel`,\n session\n );\n } finally {\n loading.unblock();\n }\n }\n );\n\n downloadPdf = task(\n {\n drop: true,\n },\n async () => {\n let { wps, taskMonitor, alertMessage: alert, intl } = this;\n let wpsId = wps.id;\n if (taskMonitor.hasTaskByContext('wps-export-pdf', wpsId)) {\n taskMonitor.removeTaskByContext('wps-export-pdf', wpsId);\n }\n try {\n let response = await wps.generateExportPdf();\n if (response.status === '200') {\n taskMonitor.monitorTask.perform(response.taskIdentifier);\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.wps-export-error'\n )\n );\n }\n } catch (reason) {\n alert.error(\n intl.t('components.model-welding-procedure-specification/edit.messages.wps-export-error')\n );\n }\n }\n );\n\n confirmDownloadPDF = task(\n {\n drop: true,\n },\n async () => {\n await this.downloadPdf.perform();\n }\n );\n\n @action\n addWpsToProject(project) {\n let wps = get(this, 'wps');\n let { loading, alertMessage: alert, intl } = this;\n if (!isEmpty(project)) {\n loading.block();\n wps\n .addWpsToProject({\n project: get(project, 'id'),\n })\n .then(() => {\n set(this, 'showAddWpsToProject', false);\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/project-chooser.messages.added-to-project',\n { project: get(project, 'projectName') }\n )\n );\n })\n .catch((error) => {\n alert.error(error);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n }\n\n @action\n createWpsForProject(project) {\n let { loading, alertMessage: alert, intl, wps } = this;\n loading.block();\n wps\n .createForProject({\n project: get(project, 'id'),\n })\n .then((result) => {\n get(this, 'onProjectSpecificCreate')(result);\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/project-chooser.messages.create-specific-for-project',\n { project: get(project, 'projectName') }\n )\n );\n })\n .catch((error) => {\n alert.error(error);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n confirmArchiveWPS() {\n set(this, 'showConfirmArchive', true);\n }\n\n @action\n confirmUnarchiveWPS() {\n set(this, 'showConfirmUnarchive', true);\n }\n\n @action\n cancelArchive() {\n set(this, 'showConfirmArchive', false);\n }\n\n @action\n cancelUnarchive() {\n set(this, 'showConfirmUnarchive', false);\n }\n\n @action\n confirmDeleteModel() {\n this.toggleProperty('isShowingModal');\n }\n\n @action\n toggleModal() {\n this.toggleProperty('isShowingModal');\n }\n\n @action\n deleteModel() {\n let { wps, loading, alertMessage: alert, intl } = this;\n\n loading.block();\n get(this, 'ajax')\n .put(`/welding-procedure-specifications/${get(wps, 'id')}/canDelete`)\n .then(() => {\n this.deleteWPS();\n set(this, 'wpsDeleteErrors', null);\n })\n .catch(({ payload }) => {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/edit.delete.errors.cannot-delete'\n )\n );\n set(this, 'wpsDeleteErrors', payload);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n\n @action\n showWeldCloudLicense() {\n set(this, 'showWeldCloudLicenseModal', true);\n }\n\n @action\n hideWeldCloudLicense() {\n set(this, 'showWeldCloudLicenseModal', false);\n }\n\n @action\n emptySearch() {\n // do nothing on purpose\n }\n\n @action\n downloadPdfFromApi(task) {\n window.location = task.result.pdf;\n }\n\n @action\n autoScrollToParametersTable() {\n if (this.allowAutoScrollToWeldingParametersTable) {\n this.scroller.scrollVertical('#wps-welding-parameters-wrapper', { duration: 1000 });\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n {{#if (and (has-value @model.layer) (is-empty-attribute @model.fillerMaterialType))}}\\n
\\n \\n

\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.filler-material-missing\\\"\\n }}\\n \\n

\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n {{#if (and this.isOverlayWeld this.showOverlayWeldTypeMinimumHelp)}}\\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.overlay-weld-heat-input-minimum\\\"\\n value=this.parameterHeatInputMinimum\\n unit=@units.heatDistance\\n }}\\n {{/if}}\\n \\n \\n \\n {{#if (and this.isOverlayWeld this.showOverlayWeldTypeMaximumHelp)}}\\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.overlay-weld-heat-input-maximum\\\"\\n value=this.parameterHeatInputMaximum\\n unit=@units.heatDistance\\n }}\\n {{/if}}\\n \\n\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.stop-changes-btn\\\"\\n }}\\n \\n {{#if @confirmTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-procedure-specification/parameters-modal.confirm-changes-btn\\\"}}\\n \\n
\\n{{#if this.showInvalidParameterModal}}\\n \\n{{/if}}\", {\"contents\":\"
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n {{#if (and (has-value @model.layer) (is-empty-attribute @model.fillerMaterialType))}}\\n
\\n \\n

\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.filler-material-missing\\\"\\n }}\\n \\n

\\n
\\n {{else}}\\n \\n {{/if}}\\n
\\n \\n \\n \\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n \\n \\n \\n \\n\\n\\n \\n \\n {{#if (and this.isOverlayWeld this.showOverlayWeldTypeMinimumHelp)}}\\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.overlay-weld-heat-input-minimum\\\"\\n value=this.parameterHeatInputMinimum\\n unit=@units.heatDistance\\n }}\\n {{/if}}\\n \\n \\n \\n {{#if (and this.isOverlayWeld this.showOverlayWeldTypeMaximumHelp)}}\\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.overlay-weld-heat-input-maximum\\\"\\n value=this.parameterHeatInputMaximum\\n unit=@units.heatDistance\\n }}\\n {{/if}}\\n \\n\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/parameters-modal.stop-changes-btn\\\"\\n }}\\n \\n {{#if @confirmTask.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.model-welding-procedure-specification/parameters-modal.confirm-changes-btn\\\"}}\\n \\n
\\n{{#if this.showInvalidParameterModal}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/welding-parameters-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/welding-parameters-modal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { alias, equal } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { A } from '@ember/array';\nimport { get, action, computed } from '@ember/object';\nimport Base from 'weldnote/components/base-edit';\nimport Rules from 'weldnote/utils/wps-welding-parameter-rules';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\nimport ModelSetter from 'weldnote/mixins/model-setters';\nimport Constants from 'weldnote/utils/constants';\nimport { isStandardISO, isStandardASME } from 'weldnote/utils/standards';\nimport {\n fromMilimeterMinuteToMilimeterSecond,\n fromMeterMinuteToMilimeterSecond,\n} from 'weldnote/utils/unit-system/speed';\nimport { calculateLayerOptions } from 'weldnote/utils/welding/welding-process';\n\nconst { WPS_WELDING_PARAMETER } = Rules;\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\nconst { WELD_TYPES, WELDING_LAYER_OPTIONS, OVERLAY_FILLER_MATERIAL_FORM } = Constants;\n\n@classic\nexport default class WeldingParametersModal extends Base.extend(ModelSetter) {\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service\n userSession;\n\n @service\n unitSystem;\n\n @service\n intl;\n\n isEditing = true;\n parentModel = null;\n\n @tracked\n showInvalidParameterModal = false;\n\n @alias('parentModel')\n wps;\n\n @alias('model')\n parameter;\n\n get unit() {\n return get(this, 'wps.unitSystem');\n }\n\n @alias('wps.standard.code')\n currentIndustryCode;\n\n @alias('data.arcTransferModeOptions')\n arcTransferModeOptionsAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionOptionsAll;\n\n @equal('wps.weldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n get isMetricSystem() {\n return this.unitSystem.isMetricSystem(this.unit);\n }\n\n get isImperialSystem() {\n return this.unitSystem.isImperialSystem(this.unit)\n }\n\n @computed('parameter.heatInputMinimum', 'wps.standard')\n get showOverlayWeldTypeMinimumHelp() {\n let hasPQR = get(this, 'wps.isLinkedToPQR');\n if (!hasPQR) {\n return false;\n }\n return (\n !isEmpty(this.get('parameter.heatInputMinimum')) && isStandardISO(this.get('wps.standard'))\n );\n }\n\n @computed('parameter.layer')\n get weldingPositionOptions() {\n let layer = get(this, 'parameter.layer');\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n return get(this, 'wps.weldingPositionsRoot');\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n return get(this, 'wps.weldingPositionsFill');\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n return get(this, 'wps.weldingPositionsCap');\n }\n }\n\n @computed('parameter.{heatInputMaximum,weldingProcess}', 'wps.standard')\n get showOverlayWeldTypeMaximumHelp() {\n let hasPQR = get(this, 'wps.isLinkedToPQR');\n if (!hasPQR) {\n return false;\n }\n let standard = get(this, 'wps.standard');\n let heatInputMax = get(this, 'parameter.heatInputMaximum');\n\n if (isEmpty(heatInputMax)) {\n return false;\n }\n if (isStandardISO(standard)) {\n return true;\n } else if (isStandardASME(standard)) {\n let weldingProcess = get(this, 'parameter.weldingProcess');\n if (!isEmpty(weldingProcess)) {\n let processCode = get(weldingProcess, 'shortDesignation');\n if (\n processCode === 'SAW' ||\n processCode === 'GMAW' ||\n processCode === 'FCAW' ||\n processCode === 'GTAW' ||\n processCode === 'ESW'\n ) {\n return true;\n }\n }\n return false;\n }\n return false;\n }\n\n @computed('hasFill', 'hasCap')\n get weldingLayerOptions() {\n let { hasFill, hasCap } = this;\n let data = get(this, 'data.weldingLayerOptions');\n let result = calculateLayerOptions(data, hasFill, hasCap);\n return result.map((e) => {\n let layer = get(e, 'key');\n let weldingProcess = '';\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n weldingProcess = this.processes.process1;\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n weldingProcess = this.processes.process2;\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n weldingProcess = this.processes.process3;\n }\n return {\n key: get(e, 'key'),\n label: `${weldingProcess}`,\n };\n });\n }\n\n @computed('parameter.heatInputMinimum', 'wps.standard')\n get parameterHeatInputMinimum() {\n return Rules.calculateMinimumHeatInput(this.parameter);\n }\n\n @computed('parameter.heatInputMaximum', 'wps.standard')\n get parameterHeatInputMaximum() {\n return Rules.calculateMaximumHeatInput(this.parameter, get(this, 'wps.standard'));\n }\n\n hasObjectValue(attribute) {\n return !isEmpty(this.get(`wps.${attribute}.id`));\n }\n\n calculateOptions(rootProperty, fillProperty, capProperty) {\n let options = A();\n if (this.hasObjectValue(rootProperty)) {\n options.pushObject(this.get(`wps.${rootProperty}`));\n }\n if (this.hasObjectValue(fillProperty)) {\n let optionFill = this.get(`wps.${fillProperty}`);\n if (!options.findBy('id', optionFill.get('id'))) {\n options.pushObject(optionFill);\n }\n }\n if (this.hasObjectValue(capProperty)) {\n let optionCap = this.get(`wps.${capProperty}`);\n if (!options.findBy('id', optionCap.get('id'))) {\n options.pushObject(optionCap);\n }\n }\n return options;\n }\n\n getFillerMaterialOverlayFillerMaterialForm(layer) {\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n return this.wps.get('additionalData.overlayFillerMaterialFormRoot');\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n return this.wps.get('additionalData.overlayFillerMaterialFormFill');\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n return this.wps.get('additionalData.overlayFillerMaterialFormCap');\n }\n return '';\n }\n\n @computed(\n `wps.{${WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_ROOT},${WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_FILL},${WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_CAP}}`\n )\n get arcTransferModeOptions() {\n return this.calculateOptions(\n WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_FILL,\n WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_CAP\n );\n }\n\n @computed('parameter.layer')\n get currentParameterForm() {\n let { parameter } = this;\n let fillerMaterialLayer = get(parameter, 'layer');\n return this.getFillerMaterialOverlayFillerMaterialForm(fillerMaterialLayer);\n }\n\n @computed('parameter.layer')\n get currentParameterLayerForm() {\n let { parameter } = this;\n let currentLayer = get(parameter, 'layer');\n return this.getFillerMaterialOverlayFillerMaterialForm(currentLayer);\n }\n\n @computed('currentParameterLayerForm')\n get currentParameterLayerFormVisualLabel() {\n let layerForm = this.currentParameterLayerForm;\n if (layerForm === OVERLAY_FILLER_MATERIAL_FORM.WIRE) {\n return ` (${this.intl.t('components.model-pqr/edit.filler-materials.overlay-form-wire')})`;\n }\n if (layerForm === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n return ` (${this.intl.t('components.model-pqr/edit.filler-materials.overlay-form-strip')})`;\n }\n return '';\n }\n\n @computed('parameter.layer')\n get currentLayerForFillerMaterialDiameter() {\n let { parameter } = this;\n let layer = get(parameter, 'layer');\n return layer;\n }\n\n get typeCurrentPolarityOptions() {\n return this.data.typeCurrentPolarityOptions;\n }\n\n validateField(wpsParameter, field) {\n return wpsParameter.validate({ only: [field] });\n }\n\n validateParameters(parameter) {\n parameter.validate({\n only: [\n WPS_WELDING_PARAMETER.CURRENT_MINIMUM,\n WPS_WELDING_PARAMETER.CURRENT_MAXIMUM,\n WPS_WELDING_PARAMETER.TRAVEL_SPEED_MINIMUM,\n WPS_WELDING_PARAMETER.TRAVEL_SPEED_MAXIMUM,\n WPS_WELDING_PARAMETER.VOLTAGE_MINIMUM,\n WPS_WELDING_PARAMETER.VOLTAGE_MAXIMUM,\n WPS_WELDING_PARAMETER.TRAVEL_SPEED_MINIMUM,\n WPS_WELDING_PARAMETER.TRAVEL_SPEED_MAXIMUM,\n WPS_WELDING_PARAMETER.WIRE_FEED_SPEED_MINIMUM,\n WPS_WELDING_PARAMETER.WIRE_FEED_SPEED_MAXIMUM,\n WPS_WELDING_PARAMETER.HEAT_INPUT_MINIMUM,\n WPS_WELDING_PARAMETER.HEAT_INPUT_MAXIMUM,\n ],\n });\n }\n\n @action\n setOrderNum(value) {\n this.setModelValue(WPS_WELDING_PARAMETER.ORDER_NUM, value);\n }\n\n @action\n setPassNumber(value) {\n this.setModelValue(WPS_WELDING_PARAMETER.PASS_NUMBER, value);\n }\n\n @action\n setCurrentMinimum(value) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.CURRENT_MINIMUM, value);\n WPSRules.updateParameterHeatInputMinimum(this.wps, this.parameter, null, this.unit);\n }\n\n @action\n setCurrentMaximum(value) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.CURRENT_MAXIMUM, value);\n WPSRules.updateParameterHeatInputMaximum(this.wps, this.parameter, null, this.unit);\n }\n\n @action\n setVoltageMinimum(value) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.VOLTAGE_MINIMUM, value);\n WPSRules.updateParameterHeatInputMinimum(this.wps, this.parameter, null, this.unit);\n }\n\n @action\n setVoltageMaximum(value) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.VOLTAGE_MAXIMUM, value);\n WPSRules.updateParameterHeatInputMaximum(this.wps, this.parameter, null, this.unit);\n }\n\n @action\n setTypeCurrent(value) {\n this.setModelValue(WPS_WELDING_PARAMETER.TYPE_CURRENT, value);\n this.validateField(this.parameter, WPS_WELDING_PARAMETER.TYPE_CURRENT);\n }\n\n @action\n setWireFeedSpeedMinimum(value) {\n if (this.isMetricSystem) {\n this.setModelDecimalValue(\n WPS_WELDING_PARAMETER.WIRE_FEED_SPEED_MINIMUM,\n fromMeterMinuteToMilimeterSecond(value)\n );\n } else if (this.isImperialSystem) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.WIRE_FEED_SPEED_MINIMUM, value);\n }\n }\n\n @action\n setWireFeedSpeedMaximum(value) {\n if (this.isMetricSystem) {\n this.setModelDecimalValue(\n WPS_WELDING_PARAMETER.WIRE_FEED_SPEED_MAXIMUM,\n fromMeterMinuteToMilimeterSecond(value)\n );\n } else if (this.isImperialSystem) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.WIRE_FEED_SPEED_MAXIMUM, value);\n }\n }\n\n @action\n setTravelSpeedMinimum(value) {\n if (this.isMetricSystem) {\n this.setModelDecimalValue(\n WPS_WELDING_PARAMETER.TRAVEL_SPEED_MINIMUM,\n fromMilimeterMinuteToMilimeterSecond(value)\n );\n } else if (this.isImperialSystem) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.TRAVEL_SPEED_MINIMUM, value);\n }\n WPSRules.updateParameterHeatInputMaximum(this.wps, this.parameter, null, this.unit);\n }\n\n @action\n setTravelSpeedMaximum(value) {\n if (this.isMetricSystem) {\n this.setModelDecimalValue(\n WPS_WELDING_PARAMETER.TRAVEL_SPEED_MAXIMUM,\n fromMilimeterMinuteToMilimeterSecond(value)\n );\n } else if (this.isImperialSystem) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.TRAVEL_SPEED_MAXIMUM, value);\n }\n WPSRules.updateParameterHeatInputMinimum(this.wps, this.parameter, null, this.unit);\n }\n\n @action\n setProgram(value) {\n this.setModelValue(WPS_WELDING_PARAMETER.PROGRAM, value);\n }\n\n @action\n setHeatInputMinimum(value) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.HEAT_INPUT_MINIMUM, value);\n WPSRules.updateHeatInputApprovalRange(this.wps);\n }\n\n @action\n setHeatInputMaximum(value) {\n this.setModelDecimalValue(WPS_WELDING_PARAMETER.HEAT_INPUT_MAXIMUM, value);\n WPSRules.updateHeatInputApprovalRange(this.wps);\n }\n\n @action\n setArcTransferMode(value) {\n this.setModelValue(WPS_WELDING_PARAMETER.ARC_TRANSFER_MODE, value);\n this.validateField(this.parameter, WPS_WELDING_PARAMETER.ARC_TRANSFER_MODE);\n }\n\n @action\n setLayer(value) {\n let { wps, parameter } = this;\n this.setModelValue(WPS_WELDING_PARAMETER.LAYER, value);\n if (isEmpty(value)) {\n return;\n }\n\n this.validateField(parameter, WPS_WELDING_PARAMETER.LAYER);\n\n if (!isEmpty(value)) {\n if (value === WELDING_LAYER_OPTIONS.ROOT) {\n let diameters = get(wps, WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_DIAMETERS);\n if (!isEmpty(diameters) && diameters.length > 3) {\n diameters = diameters.slice(0, 3);\n }\n this.setModelValue(WPS_WELDING_PARAMETER.FILLER_MATERIAL_DIAMETER, diameters);\n this.setModelValue(\n WPS_WELDING_PARAMETER.ARC_TRANSFER_MODE,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_ROOT)\n );\n this.setModelValue(\n WPS_WELDING_PARAMETER.TYPE_CURRENT,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_ROOT)\n );\n this.clearModelCollection(WPS_WELDING_PARAMETER.WELDING_POSITIONS);\n this.setModelCollection(\n WPS_WELDING_PARAMETER.WELDING_POSITIONS,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT)\n );\n } else if (value === WELDING_LAYER_OPTIONS.FILL) {\n let diameters = get(wps, WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_DIAMETERS);\n if (!isEmpty(diameters) && diameters.length > 3) {\n diameters = diameters.slice(0, 3);\n }\n this.setModelValue(WPS_WELDING_PARAMETER.FILLER_MATERIAL_DIAMETER, diameters);\n this.setModelValue(\n WPS_WELDING_PARAMETER.ARC_TRANSFER_MODE,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_FILL)\n );\n this.setModelValue(\n WPS_WELDING_PARAMETER.TYPE_CURRENT,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_FILL)\n );\n this.clearModelCollection(WPS_WELDING_PARAMETER.WELDING_POSITIONS);\n this.setModelCollection(\n WPS_WELDING_PARAMETER.WELDING_POSITIONS,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL)\n );\n } else if (value === WELDING_LAYER_OPTIONS.CAP) {\n let diameters = get(wps, WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_DIAMETERS);\n if (!isEmpty(diameters) && diameters.length > 3) {\n diameters = diameters.slice(0, 3);\n }\n this.setModelValue(WPS_WELDING_PARAMETER.FILLER_MATERIAL_DIAMETER, diameters);\n this.setModelValue(\n WPS_WELDING_PARAMETER.ARC_TRANSFER_MODE,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.ARC_TRANSFER_MODE_CAP)\n );\n this.setModelValue(\n WPS_WELDING_PARAMETER.TYPE_CURRENT,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.TYPE_CURRENT_CAP)\n );\n this.clearModelCollection(WPS_WELDING_PARAMETER.WELDING_POSITIONS);\n this.setModelCollection(\n WPS_WELDING_PARAMETER.WELDING_POSITIONS,\n get(wps, WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP)\n );\n }\n\n WPSRules.updateParameterHeatInputMinimum(\n this.wps,\n this.parameter,\n this.validateParameters,\n this.unit\n );\n WPSRules.updateParameterHeatInputMaximum(\n this.wps,\n this.parameter,\n this.validateParameters,\n this.unit\n );\n }\n }\n\n @action\n doConfirmEditing(parameter) {\n if (parameter.validate()) {\n this.confirmEditing(parameter);\n return;\n }\n // Same treatment the WPS gets when it is invalid: list the offending fields and let\n // the user save anyway\n this.showInvalidParameterModal = true;\n this.alert.error(\n this.intl.t(\n 'components.model-welding-procedure-specification/parameters-modal.messages.error.invalid-parameter'\n )\n );\n }\n\n @action\n closeInvalidParameterModal() {\n this.showInvalidParameterModal = false;\n }\n\n @action\n async confirmSaveInvalidParameter(parameter) {\n let saved = await this.saveInvalidParameter(parameter);\n // Keep the modal open when the save fails so the user does not lose what they typed.\n // On success the parent closes the pass editor, which tears this component down.\n if (saved && !this.isDestroyed && !this.isDestroying) {\n this.showInvalidParameterModal = false;\n }\n }\n\n @action\n doStopEditing(parameter) {\n this.stopEditing(parameter);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if this.isISO}}\\n \\n {{t \\\"components.model-welding-procedure-specification/new-multiple.buttons.pcPlusPf\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isISO}}\\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.type-pqr-iso\\\"\\n }}
\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.regular-pqrs\\\"\\n }}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.pc-plus-pf\\\"\\n }}\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showMultiplePQROption}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n {{else if this.showMultiplePositionOption}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasGeneralErrors}}\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.title\\\"\\n }}\\n
    \\n {{#each-in this.generalErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n
\\n {{/if}}\\n {{#if this.hasRootErrors}}\\n \\n
    \\n {{#each-in this.rootErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n {{#if this.hasFillErrors}}\\n \\n
    \\n {{#each-in this.fillErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n {{#if this.hasCapErrors}}\\n \\n
    \\n {{#each-in this.capErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n {{#if this.hasMultiplePositionErrors}}\\n \\n
    \\n {{#each-in this.multiplePositionErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors-position.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n \\n \\n
\\n \\n {{#if this.showMultiplePQROption}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.create-wps-button\\\"\\n }}\\n {{/if}}\\n {{#if this.showMultiplePositionOption}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.create-button\\\"\\n }}\\n {{/if}}\\n
\\n
\\n
\\n {{#if this.showMultiplePositionOption}}\\n
\\n
\\n
\\n
\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.passes-help-message\\\"\\n }}

\\n
\\n
\\n
\\n
\\n
\\n {{/if}}\\n\", {\"contents\":\"\\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if this.isISO}}\\n \\n {{t \\\"components.model-welding-procedure-specification/new-multiple.buttons.pcPlusPf\\\"}}\\n \\n {{/if}}\\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isISO}}\\n \\n \\n
{{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.type-pqr-iso\\\"\\n }}
\\n
\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.regular-pqrs\\\"\\n }}\\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.pc-plus-pf\\\"\\n }}\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.showMultiplePQROption}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n {{else if this.showMultiplePositionOption}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasGeneralErrors}}\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.title\\\"\\n }}\\n
    \\n {{#each-in this.generalErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n
\\n {{/if}}\\n {{#if this.hasRootErrors}}\\n \\n
    \\n {{#each-in this.rootErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n {{#if this.hasFillErrors}}\\n \\n
    \\n {{#each-in this.fillErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n {{#if this.hasCapErrors}}\\n \\n
    \\n {{#each-in this.capErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n {{#if this.hasMultiplePositionErrors}}\\n \\n
    \\n {{#each-in this.multiplePositionErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.errors-position.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n \\n {{/if}}\\n \\n \\n
\\n \\n {{#if this.showMultiplePQROption}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.create-wps-button\\\"\\n }}\\n {{/if}}\\n {{#if this.showMultiplePositionOption}}\\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.create-button\\\"\\n }}\\n {{/if}}\\n
\\n
\\n
\\n {{#if this.showMultiplePositionOption}}\\n
\\n
\\n
\\n
\\n \\n

{{t\\n \\\"components.model-welding-procedure-specification/wps-from-multiple-pqr.multi-position.passes-help-message\\\"\\n }}

\\n
\\n
\\n
\\n
\\n
\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/wps-from-multiple-pqr.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/wps-from-multiple-pqr.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Rules from 'weldnote/utils/pqr-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { isError, getErrorDetail, isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { isStandardISO15614 } from 'weldnote/utils/standards';\nimport { get, set } from '@ember/object';\n\nconst { PQR } = Rules;\nconst { ERROR_CODES } = Constants;\n\nexport default class WpsFromMultiplePqr extends Component {\n @service('weldnote-data') data;\n @service ajax;\n @service('alert-message') alert;\n @service intl;\n @service loading;\n @service store;\n\n // Tracked properties for error states and processes\n @tracked rootPqrProcesses = [];\n @tracked fillPqrProcesses = [];\n @tracked capPqrProcesses = [];\n @tracked generalErrors = [];\n @tracked rootErrors = [];\n @tracked fillErrors = [];\n @tracked capErrors = [];\n @tracked multiplePositionErrors = [];\n\n // Tracked properties for UI state\n @tracked multiplePositionOption = false;\n @tracked multiplePQROption = false;\n @tracked isoOptionRaw = null;\n\n // Properties set via `set()` that need to be tracked\n @tracked multiplePositionPQRRoot = false;\n @tracked multiplePositionPQRFill = false;\n @tracked multiplePositionPQRCap = false;\n\n // Computed properties converted to getters\n get newWps() {\n return this.args.model;\n }\n\n get standardOptions() {\n return this.data.standardOptions;\n }\n\n get currentIndustryCode() {\n return this.newWps?.standard?.code;\n }\n\n get weldTypeOptionsAll() {\n return this.data.weldTypeOptions;\n }\n\n get weldTypeOptions() {\n if (!this.currentIndustryCode?.id) {\n return this.weldTypeOptionsAll;\n }\n return this.weldTypeOptionsAll.filter(\n (option) => option.industryCode?.id === this.currentIndustryCode.id\n );\n }\n\n get hasStandard() {\n return !isEmpty(get(this.newWps, 'standard.id'));\n }\n\n get hasRootPQR() {\n return !isEmpty(get(this.newWps, 'rootPqr.id'));\n }\n\n get hasFillPQR() {\n return !isEmpty(get(this.newWps, 'fillPqr.id'));\n }\n\n get hasCapPQR() {\n return !isEmpty(get(this.newWps, 'capPqr.id'));\n }\n\n get rootProcessDisabled() {\n return isEmpty(get(this.newWps, 'rootPqr.id'));\n }\n\n get fillProcessDisabled() {\n return isEmpty(get(this.newWps, 'fillPqr.id'));\n }\n\n get capProcessDisabled() {\n return isEmpty(get(this.newWps, 'capPqr.id'));\n }\n\n get weldTypeDisabled() {\n return isEmpty(get(this.newWps, 'standard.id'));\n }\n\n get pqrDisabled() {\n return isEmpty(get(this.newWps, 'standard.id'));\n }\n\n get hasGeneralErrors() {\n return !isEmpty(this.generalErrors);\n }\n\n get hasRootErrors() {\n return !isEmpty(this.rootErrors);\n }\n\n get hasFillErrors() {\n return !isEmpty(this.fillErrors);\n }\n\n get hasCapErrors() {\n return !isEmpty(this.capErrors);\n }\n\n get hasMultiplePositionErrors() {\n return !isEmpty(this.multiplePositionErrors);\n }\n\n get isISO() {\n return isStandardISO15614(get(this, 'newWps.standard'));\n }\n\n get isoOption() {\n return this.isoOptionRaw;\n }\n\n set isoOption(value) {\n this.isoOptionRaw = value;\n return value;\n }\n\n get isMultiplePositionOption() {\n return this.isoOption === 'multiPosition';\n }\n\n get isMultiplePQROption() {\n return this.isoOption === 'multiPQR';\n }\n\n get showMultiplePQROption() {\n if (!this.hasStandard) {\n return false;\n }\n if (!this.isISO) {\n return true;\n } else {\n return this.isMultiplePQROption;\n }\n }\n\n get showMultiplePositionOption() {\n return this.hasStandard && this.isMultiplePositionOption;\n }\n\n get validateButtonDisabled() {\n return isEmpty(get(this, 'newWps.fillPqr.id')) || isEmpty(get(this, 'newWps.standard.id'));\n }\n\n get cancel() {\n return this.args.cancel;\n }\n\n get save() {\n return this.args.save;\n }\n\n clearError(field) {\n if (this.newWps.errors) {\n set(this.newWps.errors, field, []);\n }\n }\n\n setErrorMessage(field, key) {\n if (!this.newWps.errors) {\n set(this.newWps, 'errors', {});\n }\n set(this.newWps.errors, field, [this.intl.t(key)]);\n }\n\n isValidMultiplePQR() {\n let isValid = true;\n if (isEmpty(get(this, 'newWps.certificateNumber'))) {\n isValid = false;\n this.setErrorMessage(\n 'certificateNumber',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.wps-number'\n );\n } else {\n this.clearError('certificateNumber');\n }\n\n if (isEmpty(get(this, 'newWps.revision'))) {\n isValid = false;\n this.setErrorMessage(\n 'revision',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.revision'\n );\n } else {\n this.clearError('revision');\n }\n\n if (isEmpty(get(this, 'newWps.standard.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'standard',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.standard'\n );\n } else {\n this.clearError('standard');\n }\n\n if (isEmpty(get(this, 'newWps.weldType.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'weldType',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.weld-type'\n );\n } else {\n this.clearError('weldType');\n }\n\n if (isEmpty(get(this, 'newWps.rootPqr.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'rootPqr',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.pqr-root'\n );\n } else {\n this.clearError('rootPqr');\n }\n\n if (isEmpty(get(this, 'newWps.rootProcess.id')) && !isEmpty(get(this, 'newWps.rootPqr.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'rootProcess',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.root-process'\n );\n } else {\n this.clearError('rootProcess');\n }\n\n if (isEmpty(get(this, 'newWps.fillProcess.id')) && !isEmpty(get(this, 'newWps.fillPqr.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'fillProcess',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.fill-process'\n );\n } else {\n this.clearError('fillProcess');\n }\n\n if (isEmpty(get(this, 'newWps.capProcess.id')) && !isEmpty(get(this, 'newWps.capPqr.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'capProcess',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.cap-process'\n );\n } else {\n this.clearError('capProcess');\n }\n\n if (isValid) {\n set(this, 'newWps.errors', {});\n }\n return isValid;\n }\n\n isValidMultiplePosition() {\n let isValid = true;\n if (isEmpty(get(this, 'newWps.certificateNumber'))) {\n isValid = false;\n this.setErrorMessage(\n 'certificateNumber',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.wps-number'\n );\n } else {\n this.clearError('certificateNumber');\n }\n\n if (isEmpty(get(this, 'newWps.revision'))) {\n isValid = false;\n this.setErrorMessage(\n 'revision',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.revision'\n );\n } else {\n this.clearError('revision');\n }\n\n if (isEmpty(get(this, 'newWps.standard.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'standard',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.standard'\n );\n } else {\n this.clearError('standard');\n }\n\n if (isEmpty(get(this, 'newWps.weldType.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'weldType',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.weld-type'\n );\n } else {\n this.clearError('weldType');\n }\n\n if (isEmpty(get(this, 'newWps.rootPqr.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'rootPqr',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.pqr-root'\n );\n } else {\n this.clearError('rootPqr');\n }\n if (isEmpty(get(this, 'newWps.rootPqr2.id'))) {\n isValid = false;\n this.setErrorMessage(\n 'rootPqr2',\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.pqr-root'\n );\n } else {\n this.clearError('rootPqr2');\n }\n return isValid;\n }\n\n isValid() {\n if (this.showMultiplePositionOption) {\n return this.isValidMultiplePosition();\n } else if (this.showMultiplePQROption) {\n return this.isValidMultiplePQR();\n }\n return true;\n }\n\n insertProcess(array, process, layer) {\n if (!isEmpty(process) && !isEmpty(get(process, 'id'))) {\n array.pushObject({\n id: get(process, 'id'),\n label: `${get(process, 'shortDesignation')} - (${layer})`,\n type: layer,\n });\n }\n }\n\n createFromMultiplePQR(endpoint) {\n let { intl, alert } = this;\n if (!this.isValid()) {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.required-fields'\n )\n );\n return;\n }\n\n let newWps = get(this, 'newWps');\n let data = {\n rootPqr: get(newWps, 'rootPqr.id'),\n fillPqr: get(newWps, 'fillPqr.id'),\n capPqr: get(newWps, 'capPqr.id'),\n rootPqr2: get(newWps, 'rootPqr2.id'),\n fillPqr2: get(newWps, 'fillPqr2.id'),\n capPqr2: get(newWps, 'capPqr2.id'),\n rootLayer: get(newWps, 'rootProcess.type'),\n fillLayer: get(newWps, 'fillProcess.type'),\n capLayer: get(newWps, 'capProcess.type'),\n certificateNumber: get(newWps, 'certificateNumber'),\n revision: get(newWps, 'revision'),\n weldType: get(newWps, 'weldType.id'),\n };\n this.loading.block();\n this.ajax\n .post('/welding-procedure-specifications/validatePQR', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n })\n .then((result) => {\n this.ajax\n .put(endpoint, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n })\n .then((newWps) => {\n this.save(newWps);\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.wps-created-message',\n {\n wps: result.wps,\n }\n )\n );\n })\n .catch((reason) => {\n if (isDuplicateError(reason)) {\n alert.error(\n intl\n .t('components.model-welding-procedure-specification/edit.duplicate-wps-copy')\n .toString()\n );\n } else {\n alert.error(\n intl\n .t('edit-view.actions.error', { name: get(newWps, 'certificateNumber') })\n .toString()\n );\n }\n })\n .finally(() => {\n this.loading.unblock();\n });\n })\n .catch((error) => {\n this.loading.unblock();\n if (isError(error, ERROR_CODES.INVALID_PQR_FOR_WPS)) {\n let errors = JSON.parse(getErrorDetail(error));\n if (errors.general) {\n this.generalErrors = errors.general;\n }\n if (errors.root) {\n this.rootErrors = errors.root;\n }\n if (errors.fill) {\n this.fillErrors = errors.fill;\n }\n if (errors.cap) {\n this.capErrors = errors.cap;\n }\n if (errors.multiplePosition) {\n this.multiplePositionErrors = errors.multiplePosition;\n }\n } else if (isDuplicateError(error)) {\n alert.error(\n intl\n .t('components.model-welding-procedure-specification/edit.duplicate-wps-copy')\n .toString()\n );\n } else {\n alert.error(\n intl.t(\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.errors.generic-error',\n {\n error,\n }\n )\n );\n }\n });\n }\n\n @action\n createMultiplePQR() {\n this.createFromMultiplePQR('/welding-procedure-specifications/createFromMultiplePqr');\n }\n\n @action\n createMultiplePosition() {\n this.createFromMultiplePQR('/welding-procedure-specifications/createMultiplePosition');\n }\n\n @action\n setStandard(standard) {\n set(this, 'newWps.rootPqr', null);\n set(this, 'newWps.fillPqr', null);\n set(this, 'newWps.capPqr', null);\n set(this, 'newWps.rootPqr2', null);\n set(this, 'newWps.fillPqr2', null);\n set(this, 'newWps.capPqr2', null);\n set(this, 'multiplePositionPQRRoot', false);\n set(this, 'multiplePositionPQRFill', false);\n set(this, 'multiplePositionPQRCap', false);\n set(this, 'newWps.rootProcess', null);\n set(this, 'newWps.fillProcess', null);\n set(this, 'newWps.capProcess', null);\n set(this, 'newWps.weldType', null);\n set(this, 'newWps.standard', standard);\n set(this, 'isoOptionRaw', null);\n }\n\n @action\n setRootPqr(pqrId) {\n if (pqrId) {\n let { loading, data } = this;\n loading.block();\n data\n .loadAllDataPQR(pqrId)\n .then((pqr) => {\n set(this, 'newWps.rootPqr', pqr);\n let processes = [];\n if (!isEmpty(pqr)) {\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE), 'Root');\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE), 'Fill');\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE), 'Cap');\n }\n set(this, 'rootPqrProcesses', processes);\n set(this, 'newWps.rootProcess', null);\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n set(this, 'rootPqrProcesses', []);\n set(this, 'newWps.rootProcess', null);\n set(this, 'newWps.rootPqr', null);\n }\n }\n\n @action\n setRootPqr2(pqrId) {\n if (pqrId) {\n let { loading, data } = this;\n loading.block();\n data\n .loadAllDataPQR(pqrId)\n .then((pqr) => {\n set(this, 'newWps.rootPqr2', pqr);\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n set(this, 'newWps.rootPqr2', null);\n }\n }\n\n @action\n setFillPqr(pqrId) {\n if (pqrId) {\n let { loading, data } = this;\n loading.block();\n data\n .loadAllDataPQR(pqrId)\n .then((pqr) => {\n set(this, 'newWps.fillPqr', pqr);\n let processes = [];\n if (!isEmpty(pqr)) {\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE), 'Root');\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE), 'Fill');\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE), 'Cap');\n }\n set(this, 'fillPqrProcesses', processes);\n set(this, 'newWps.fillProcess', null);\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n set(this, 'fillPqrProcesses', []);\n set(this, 'newWps.fillProcess', null);\n set(this, 'newWps.fillPqr', null);\n }\n }\n\n @action\n setCapPqr(pqrId) {\n if (pqrId) {\n let { loading, data } = this;\n loading.block();\n data\n .loadAllDataPQR(pqrId)\n .then((pqr) => {\n set(this, 'newWps.capPqr', pqr);\n let processes = [];\n if (!isEmpty(pqr)) {\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE), 'Root');\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE), 'Fill');\n this.insertProcess(processes, get(pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE), 'Cap');\n }\n set(this, 'capPqrProcesses', processes);\n set(this, 'newWps.capProcess', null);\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n set(this, 'capPqrProcesses', []);\n set(this, 'newWps.capProcess', null);\n set(this, 'newWps.capPqr', null);\n }\n }\n\n @action\n setWeldType(type) {\n set(this, 'newWps.weldType', type);\n }\n\n @action\n setMultiplePosition(value) {\n if (value) {\n this.multiplePositionOption = true;\n this.multiplePQROption = false;\n } else {\n this.multiplePositionOption = false;\n this.multiplePQROption = false;\n }\n }\n\n @action\n setMultiplePQR(value) {\n if (value) {\n this.multiplePQROption = true;\n this.multiplePositionOption = false;\n } else {\n this.multiplePositionOption = false;\n this.multiplePQROption = false;\n }\n }\n\n @action\n setIsoOption(value) {\n this.isoOptionRaw = value;\n }\n\n @action\n createPcPlusPf() {\n this.isoOptionRaw = 'multiPosition';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if this.hasWarning}}\\n \\n \\n
\\n \\n
    \\n {{#if (is-empty this.weldTypeOptions)}}\\n
  • {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.errors.weld-types\\\"\\n }}
  • \\n {{/if}}\\n {{#if (is-empty this.productTypeOptions)}}\\n
  • {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.errors.product-type\\\"\\n }}
  • \\n {{/if}}\\n {{#if (is-empty this.processOptions)}}\\n
  • {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.errors.welding-process\\\"\\n }}
  • \\n {{/if}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.go-back-to-pqr\\\"\\n }}\\n {{@model.certificateNumber}}\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.selectedPQRIsIso15614}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.buttons.create-wps\\\"\\n }}\\n \\n \\n\\n {{#if this.hasGeneralErrors}}\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.errors.title\\\"\\n }}\\n
    \\n {{#each-in this.generalErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{! template-lint-disable no-unused-block-params }}\\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n
\\n {{/if}}\\n\", {\"contents\":\"\\n {{#if this.hasWarning}}\\n \\n \\n
\\n \\n
    \\n {{#if (is-empty this.weldTypeOptions)}}\\n
  • {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.errors.weld-types\\\"\\n }}
  • \\n {{/if}}\\n {{#if (is-empty this.productTypeOptions)}}\\n
  • {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.errors.product-type\\\"\\n }}
  • \\n {{/if}}\\n {{#if (is-empty this.processOptions)}}\\n
  • {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.errors.welding-process\\\"\\n }}
  • \\n {{/if}}\\n
\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.messages.go-back-to-pqr\\\"\\n }}\\n {{@model.certificateNumber}}\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.selectedPQRIsIso15614}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n {{process.label}}\\n \\n \\n \\n \\n \\n \\n \\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.buttons.create-wps\\\"\\n }}\\n \\n \\n\\n {{#if this.hasGeneralErrors}}\\n
\\n {{t\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.errors.title\\\"\\n }}\\n
    \\n {{#each-in this.generalErrors as |attribute errors|}}\\n
  • {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/new-multiple.fields.\\\" attribute\\n )\\n }}\\n \\n {{! template-lint-disable no-unused-block-params }}\\n {{#each errors as |error|}}\\n {{t\\n (concat\\n \\\"components.model-welding-procedure-specification/wps-from-single-pqr.errors.\\\"\\n attribute\\n )\\n }}\\n {{/each}}\\n \\n
  • \\n {{/each-in}}\\n
\\n
\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/model-welding-procedure-specification/wps-from-single-pqr.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-procedure-specification/wps-from-single-pqr.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { get, set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { isDuplicateError, isError, getErrorDetail } from 'weldnote/utils/json-api-errors';\nimport { calculatePqrProductTypeApprovalRange } from 'weldnote/utils/approval-range/pqr/product-type';\nimport { tracked } from '@glimmer/tracking';\nimport { isStandardISO15614 } from 'weldnote/utils/standards';\n\nconst { PQR } = PQRRules;\n\nconst { ERROR_CODES, PRODUCT_TYPE } = Constants;\n\nexport default class WpsFromSinglePqr extends Component {\n @service\n store;\n\n @service\n intl;\n\n @service\n loading;\n\n @service\n ajax;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service('alertMessage')\n alert;\n\n @tracked\n selectedPqr = null;\n\n @tracked\n wpsNumber = '';\n\n @tracked\n wpsRevision = '0';\n\n @tracked\n weldType = null;\n\n @tracked\n productType = null;\n\n @tracked\n wpsNumberErrors = [];\n\n @tracked\n pqrErrors = [];\n\n @tracked\n weldTypeErrors = [];\n\n @tracked\n generalErrors = [];\n\n @tracked\n wpsRevisionErrors = null;\n\n @tracked\n rootPocessErrors = [];\n\n @tracked\n fillProcessErrors = [];\n\n @tracked\n capProcessErrors = [];\n\n @tracked\n productTypeErrors = [];\n\n @tracked\n newWpsRootProcess = null;\n\n @tracked\n newWpsFillProcess = null;\n\n @tracked\n newWpsCapProcess = null;\n\n /**\n * If the WPS to be created is a standard (ISO15612 WPS)\n */\n @tracked\n standardWps = false;\n\n get pqr() {\n if (!isEmpty(this.selectedPqr)) {\n return this.selectedPqr;\n }\n return this.args.model;\n }\n\n get productTypeDisabled() {\n let { weldType } = this;\n if (isEmpty(weldType)) {\n return true;\n }\n return false;\n }\n\n get weldTypeOptions() {\n if (this.hasPqr) {\n return get(this.pqr, 'weldTypeApprovalRange');\n }\n return [];\n }\n\n get hasPqr() {\n return !isEmpty(this.pqr);\n }\n\n get weldTypeDisabled() {\n let { pqr } = this;\n if (isEmpty(get(pqr, 'id'))) {\n return true;\n }\n return false;\n }\n\n get hasGeneralErrors() {\n return !isEmpty(this.generalErrors);\n }\n\n get hasErrors() {\n let {\n pqrErrors,\n wpsNumberErrors,\n weldTypeErrors,\n wpsRevisionErrors,\n rootProcessErrors,\n fillProcessErrors,\n capProcessErrors,\n productTypeErrors,\n } = this;\n return (\n !isEmpty(pqrErrors) ||\n !isEmpty(productTypeErrors) ||\n !isEmpty(wpsNumberErrors) ||\n !isEmpty(weldTypeErrors) ||\n !isEmpty(wpsRevisionErrors) ||\n !isEmpty(rootProcessErrors) ||\n !isEmpty(fillProcessErrors) ||\n !isEmpty(capProcessErrors)\n );\n }\n\n get rootProcessDisabled() {\n if (isEmpty(get(this, 'pqr.id'))) {\n return true;\n }\n if (isEmpty(get(this, 'pqr.weldingProcessRootTestPiece.id'))) {\n return true;\n }\n return false;\n }\n\n get fillProcessDisabled() {\n if (isEmpty(get(this, 'pqr.id'))) {\n return true;\n }\n if (isEmpty(get(this, 'pqr.weldingProcessFillTestPiece.id'))) {\n return true;\n }\n return false;\n }\n\n get capProcessDisabled() {\n if (isEmpty(get(this, 'pqr.id'))) {\n return true;\n }\n if (isEmpty(get(this, 'pqr.weldingProcessCapTestPiece.id'))) {\n return true;\n }\n return false;\n }\n\n get productTypeOptions() {\n let options = this.data.productTypeOptions;\n let { pqr, userSession } = this;\n if (isEmpty(pqr)) {\n return [];\n }\n let { weldTypeTestPiece, standard, productTypeTestPiece } = pqr;\n\n let [pipeOption] = options.filter((e) => {\n return e.key === PRODUCT_TYPE.PIPE;\n });\n let [plateOption] = options.filter((e) => {\n return e.key === PRODUCT_TYPE.PLATE;\n });\n\n let approvalRange = calculatePqrProductTypeApprovalRange(\n standard,\n weldTypeTestPiece,\n productTypeTestPiece,\n userSession.unitSystem\n );\n\n let result = [];\n approvalRange.productType.forEach((type) => {\n if (type === PRODUCT_TYPE.PIPE) {\n result.push(pipeOption);\n } else if (type === PRODUCT_TYPE.PLATE) {\n result.push(plateOption);\n }\n });\n\n return result;\n }\n\n get hasWarning() {\n let { pqr, weldTypeOptions, productTypeOptions, processOptions } = this;\n if (isEmpty(pqr) || isEmpty(get(pqr, 'id'))) {\n return false;\n }\n return isEmpty(this.weldTypeOptions) || isEmpty(productTypeOptions) || isEmpty(processOptions);\n }\n\n get selectedPQRIsIso15614() {\n if (!isEmpty(this.pqr)) {\n return isStandardISO15614(get(this.pqr, 'standard'));\n }\n return false;\n }\n\n clearErrors() {\n this.wpsNumberErrors = [];\n this.pqrErrors = [];\n this.weldTypeErrors = [];\n this.wpsRevisionErrors = [];\n this.rootProcessErrors = [];\n this.fillProcessErrors = [];\n this.productTypeErrors = [];\n }\n\n clearFields() {\n this.weldType = null;\n this.productType = null;\n this.wpsNumber = null;\n this.revision = '0';\n this.newWpsRootProcess = null;\n this.newWpsFillProcess = null;\n this.newWpsCapProcess = null;\n }\n\n get processOptions() {\n let processes = [];\n let processRoot = this.getSingleProcessOption(get(this.pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE), 'Root');\n if (processRoot) {\n processes.pushObject(processRoot);\n }\n let processFill = this.getSingleProcessOption(get(this.pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE), 'Fill');\n if (processFill) {\n processes.pushObject(processFill);\n }\n let processCap = this.getSingleProcessOption(get(this.pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE), 'Cap');\n if (processCap) {\n processes.pushObject(processCap);\n }\n return processes;\n }\n\n getSingleProcessOption(process, layer) {\n if (!isEmpty(process) && !isEmpty(get(process, 'id'))) {\n let newProcess = {\n id: get(process, 'id'),\n label: `${get(process, 'shortDesignation')} - (${layer})`,\n type: layer,\n };\n return newProcess;\n }\n return null;\n }\n\n populateFields(pqr) {\n if (!isEmpty(pqr) && !isEmpty(get(pqr, 'id'))) {\n if (get(pqr, 'weldTypeApprovalRange.length') === 1) {\n this.weldType = get(pqr, 'weldTypeApprovalRange.firstObject');\n }\n\n let root = this.getSingleProcessOption(get(pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE),'Root');\n if (!isEmpty(root)) {\n this.newWpsRootProcess = root;\n }\n let fill = this.getSingleProcessOption(get(pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE),'Fill');\n if (!isEmpty(fill)) {\n this.newWpsFillProcess = fill;\n }\n let cap = this.getSingleProcessOption(get(pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE), 'Cap');\n if (!isEmpty(cap)) {\n this.newWpsCapProcess = cap;\n }\n }\n }\n\n constructor() {\n super(...arguments);\n this.populateFields(this.pqr);\n }\n\n createWeldingProcedureSpecification() {\n let { intl, alert, loading, ajax, wpsNumber } = this;\n let hasFill = !isEmpty(get(this, 'newWpsFillProcess.id'));\n let hasCap = !isEmpty(get(this, 'newWpsCapProcess.id'));\n let data = {\n rootPqr: get(this, 'pqr.id'),\n fillPqr: hasFill ? get(this, 'pqr.id') : null,\n capPqr: hasCap ? get(this, 'pqr.id') : null,\n rootLayer: get(this, 'newWpsRootProcess.type'),\n fillLayer: hasFill ? get(this, 'newWpsFillProcess.type') : null,\n capLayer: hasCap ? get(this, 'newWpsCapProcess.type') : null,\n certificateNumber: wpsNumber,\n revision: get(this, 'wpsRevision'),\n weldType: get(this, 'weldType.id'),\n productType: this.productType.key,\n standardWps: this.standardWps,\n };\n loading.block();\n ajax\n .put('/welding-procedure-specifications/createFromMultiplePqr', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n })\n .then((newWps) => {\n this.args.onCreateWps(newWps);\n alert.success(\n intl.t(\n 'components.model-welding-procedure-specification/wps-from-multiple-pqr.wps-created-message',\n {\n wps: wpsNumber,\n }\n )\n );\n })\n .catch((reason) => {\n loading.unblock();\n if (isError(reason, ERROR_CODES.INVALID_PQR_FOR_WPS)) {\n let errors = JSON.parse(getErrorDetail(reason));\n if (errors.general) {\n this.generalErrors = errors.general;\n }\n } else if (isDuplicateError(reason)) {\n alert.error(\n intl\n .t('components.model-welding-procedure-specification/edit.duplicate-wps-copy')\n .toString()\n );\n } else {\n alert.error(intl.t('edit-view.actions.error', { name: wpsNumber }));\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n setPqr(pqrId) {\n if (pqrId) {\n this.clearFields();\n let { loading, data } = this;\n loading.block();\n data\n .loadAllDataPQR(pqrId)\n .then((pqr) => {\n this.selectedPqr = pqr;\n this.populateFields(pqr);\n })\n .finally(() => {\n loading.unblock();\n });\n } else {\n this.selectedPqr = null;\n this.weldType = null;\n this.productType = null;\n this.newWpsRootProcess = null;\n this.newWpsFillProcess = null;\n this.newWpsCapProcess = null;\n }\n }\n\n @action\n createWps() {\n let error = false;\n let { intl } = this;\n\n if (isEmpty(this.wpsNumber)) {\n this.wpsNumberErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.wpsNumberErrors = [];\n }\n\n if (isEmpty(get(this, 'pqr.id'))) {\n this.pqrErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.pqrErrors = [];\n }\n\n if (isEmpty(this.wpsRevision)) {\n this.wpsRevisionErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.wpsRevisionErrors = [];\n }\n\n if (isEmpty(get(this, 'weldType.id'))) {\n this.weldTypeErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.weldTypeErrors = [];\n }\n\n if (isEmpty(get(this, 'productType.key'))) {\n this.productTypeErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.productTypeErrors = [];\n }\n\n let hasRoot = !isEmpty(get(this, 'newWpsRootProcess.id'));\n let hasFill = !isEmpty(get(this, 'newWpsFillProcess.id'));\n let hasCap = !isEmpty(get(this, 'newWpsCapProcess.id'));\n\n if (!hasRoot) {\n this.rootProcessErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.rootProcessErrors = [];\n }\n\n if (hasCap && !hasFill) {\n this.fillProcessErrors = [\n intl\n .t(\n 'components.model-welding-procedure-specification/wps-from-single-pqr.errors.field-required'\n )\n .toString(),\n ];\n error = true;\n } else {\n this.fillProcessErrors = [];\n }\n\n if (!error) {\n this.wpsNumberErrors = [];\n this.pqrErrors = [];\n this.weldTypeErrors = [];\n this.wpsRevisionErrors = [];\n this.rootPocessErrors = [];\n this.fillProcessErrors = [];\n this.capProcessErrors = [];\n this.productTypeErrors = [];\n }\n\n if (this.hasErrors) {\n this.alert.error(intl.t('edit-view.actions.validation-failed'));\n return;\n }\n\n this.clearErrors();\n\n this.createWeldingProcedureSpecification();\n }\n\n @action\n cancel() {\n history.back();\n }\n\n @action\n setStandardWps(value) {\n this.standardWps = value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\", {\"contents\":\"\\n\\n \\n\\n \\n\\n\\n\\n{{#if this.isShowingModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\",\"moduleName\":\"weldnote/components/model-welding-process/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-welding-process/edit.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Base from 'weldnote/components/base-edit';\nimport SystemAttribute from 'weldnote/mixins/system-attribute';\n\n@classic\nexport default class Edit extends Base.extend(SystemAttribute) {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @alias('model')\n process;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.isGlobalAdmin)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.isGlobalAdmin)}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canonicalCodeOptions}}\\n \\n {{get option this.canonicalCodeAttribute}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{#unless @model.isNew}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/unless}}\\n\\n\", {\"contents\":\"\\n\\n \\n\\n {{#if (and this.canEdit this.userSession.isGlobalAdmin)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{/if}}\\n\\n {{#if (and this.showDeleteButton this.userSession.isGlobalAdmin)}}\\n \\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n\\n\\n\\n{{#if this.isShowingDeleteModal}}\\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.canonicalCodeOptions}}\\n \\n {{get option this.canonicalCodeAttribute}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n {{#unless @model.isNew}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/unless}}\\n\\n\",\"moduleName\":\"weldnote/components/model-wpq-learned-mapping/edit.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/model-wpq-learned-mapping/edit.hbs\"}});\nimport Base from 'weldnote/components/base-edit-glimmer';\nimport { service } from '@ember/service';\nimport { action, get } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\n\nconst ENTITY_TYPES = [\n { key: 'WeldType', label: 'Weld Type' },\n { key: 'WeldingProcess', label: 'Welding Process' },\n { key: 'WeldingPosition', label: 'Welding Position' },\n { key: 'ArcTransferMode', label: 'Arc Transfer Mode' },\n { key: 'TypeCurrentPolarity', label: 'Type Current Polarity' },\n { key: 'ProcessMecanization', label: 'Process Mecanization' },\n { key: 'WeldingDetail', label: 'Welding Detail' },\n { key: 'Gas', label: 'Gas' },\n];\n\nconst ENTITY_TYPE_CONFIG = {\n WeldType: {\n optionsGetter: 'weldTypeOptions',\n codeAttribute: 'weldType',\n industryCodePath: 'industryCode.id',\n },\n WeldingProcess: {\n optionsGetter: 'weldingProcessOptions',\n codeAttribute: 'shortDesignation',\n industryCodePath: 'industryCode.id',\n },\n WeldingPosition: {\n optionsGetter: 'weldingPositionOptions',\n codeAttribute: 'code',\n industryCodePath: 'industryCode.id',\n },\n ArcTransferMode: {\n optionsGetter: 'arcTransferModeOptions',\n codeAttribute: 'transferMode',\n industryCodePath: 'industryCode.id',\n },\n TypeCurrentPolarity: {\n optionsGetter: 'typeCurrentPolarityOptions',\n codeAttribute: 'typeCurrent',\n industryCodePath: null,\n },\n ProcessMecanization: {\n optionsGetter: 'processMecanizationOptions',\n codeAttribute: 'name',\n industryCodePath: null,\n },\n WeldingDetail: {\n optionsGetter: 'weldingDetailOptions',\n codeAttribute: 'shortDesignation',\n industryCodePath: null,\n },\n Gas: { optionsGetter: null, codeAttribute: 'symbol', industryCodePath: 'code.id' },\n};\n\nexport default class ModelWpqLearnedMappingEditComponent extends Base {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @tracked\n gasOptions = [];\n\n get entityTypeOptions() {\n return ENTITY_TYPES;\n }\n\n get currentEntityType() {\n return this.args.model?.entityType;\n }\n\n get entityTypeConfig() {\n if (!this.currentEntityType) {\n return null;\n }\n return ENTITY_TYPE_CONFIG[this.currentEntityType] || null;\n }\n\n get canonicalCodeOptions() {\n let config = this.entityTypeConfig;\n if (!config) {\n return null;\n }\n\n let options;\n\n if (this.currentEntityType === 'Gas') {\n options = this.gasOptions;\n } else if (config.optionsGetter) {\n options = this.data[config.optionsGetter] || [];\n } else {\n return null;\n }\n\n // Filter by industry code if applicable\n let selectedIndustryCodeId = this.args.model?.industryCode?.id;\n if (selectedIndustryCodeId && config.industryCodePath) {\n options = options.filter((option) => {\n return get(option, config.industryCodePath) === selectedIndustryCodeId;\n });\n }\n\n return options;\n }\n\n get canonicalCodeAttribute() {\n let config = this.entityTypeConfig;\n return config?.codeAttribute || null;\n }\n\n get selectedCanonicalOption() {\n let options = this.canonicalCodeOptions;\n let currentCode = this.args.model?.canonicalCode;\n let codeAttribute = this.canonicalCodeAttribute;\n\n if (!options || !currentCode || !codeAttribute) {\n return null;\n }\n\n return options.find((option) => get(option, codeAttribute) === currentCode) || null;\n }\n\n @action\n setCanonicalCodeFromOption(option) {\n if (!option) {\n this.args.model.canonicalCode = null;\n return;\n }\n\n let codeAttribute = this.canonicalCodeAttribute;\n if (codeAttribute) {\n this.args.model.canonicalCode = get(option, codeAttribute);\n }\n }\n\n @action\n loadGasOptions() {\n if (this.currentEntityType === 'Gas' && isEmpty(this.gasOptions)) {\n this.data.searchGas('').then((gases) => {\n this.gasOptions = gases.slice();\n });\n }\n }\n\n @action\n onEntityTypeChange(entityTypeKey) {\n // WAttributeLov passes the key string directly\n this.args.model.entityType = entityTypeKey || null;\n\n if (entityTypeKey === 'Gas') {\n this.loadGasOptions();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.newVersionChecker.isNewVersion}}\\n
\\n \\n {{t \\\"components.new-version-notifier.message\\\"}}\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if this.newVersionChecker.isNewVersion}}\\n
\\n \\n {{t \\\"components.new-version-notifier.message\\\"}}\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/new-version-notifier.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/new-version-notifier.hbs\"}});\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\n\nexport default class NewVersionNotifier extends Component {\n @service\n newVersionChecker;\n\n @action\n reload() {\n window.location.reload();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.isProcessing}}\\n \\n \\n \\n {{else if this.isApproved}}\\n {{#if this.approvedModelId}}\\n \\n \\n \\n {{/if}}\\n {{else}}\\n {{#if this.canApprove}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.canReject}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.canRetry}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.canDelete}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if this.isProcessing}}\\n \\n \\n \\n {{else if this.isApproved}}\\n {{#if this.approvedModelId}}\\n \\n \\n \\n {{/if}}\\n {{else}}\\n {{#if this.canApprove}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.canReject}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.canRetry}}\\n \\n \\n \\n {{/if}}\\n\\n {{#if this.canDelete}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/parse-queue/queue-item-actions.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/parse-queue/queue-item-actions.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport IntlService from 'ember-intl/services/intl';\nimport { QUEUE_STATUS, type QueueItem, type QueueStatus } from 'weldnote/utils/parse-queue-status';\n\ninterface QueueItemActionsArgs {\n item: QueueItem;\n isDisabled?: boolean;\n /** Route name to link to when viewing an approved record (e.g. 'pqr', 'welder-certificate') */\n approvedRoute?: string;\n /** Key on the queue item that holds the created record ID (e.g. 'pqrId', 'welderCertificateId') */\n approvedModelKey?: string;\n /** Label for the \"view approved record\" link */\n approvedLabel?: string;\n onApprove?: (item: QueueItem) => void;\n onReject?: (item: QueueItem) => void;\n onDelete?: (item: QueueItem) => void;\n onRetry?: (item: QueueItem) => void;\n}\n\nexport default class ParseQueueQueueItemActionsComponent extends Component {\n @service declare intl: IntlService;\n\n QUEUE_STATUS = QUEUE_STATUS;\n\n get status(): QueueStatus {\n return this.args.item?.status || this.QUEUE_STATUS.QUEUED;\n }\n\n get isDisabled(): boolean {\n return this.args.isDisabled || false;\n }\n\n get canApprove(): boolean {\n return this.status === this.QUEUE_STATUS.PARSED;\n }\n\n get canReject(): boolean {\n return this.status === this.QUEUE_STATUS.PARSED;\n }\n\n get canDelete(): boolean {\n return (\n this.status !== this.QUEUE_STATUS.START &&\n this.status !== this.QUEUE_STATUS.PROCESSING &&\n this.status !== this.QUEUE_STATUS.APPROVED &&\n this.status !== this.QUEUE_STATUS.PARSED\n );\n }\n\n get canRetry(): boolean {\n return this.status === this.QUEUE_STATUS.ERROR;\n }\n\n get isProcessing(): boolean {\n return this.status === this.QUEUE_STATUS.PROCESSING || this.status === this.QUEUE_STATUS.START;\n }\n\n get isApproved(): boolean {\n return this.status === this.QUEUE_STATUS.APPROVED;\n }\n\n get approvedRoute(): string {\n return this.args.approvedRoute || 'pqr';\n }\n\n get approvedModelId(): string | null {\n let key = this.args.approvedModelKey || 'pqrId';\n let value = this.args.item?.[key];\n return value ? String(value) : null;\n }\n\n get approvedLabel(): string {\n return this.args.approvedLabel || this.intl.t('components.parse-queue.actions.view-record');\n }\n\n @action\n onApprove(): void {\n if (this.args.onApprove) {\n this.args.onApprove(this.args.item);\n }\n }\n\n @action\n onReject(): void {\n if (this.args.onReject) {\n this.args.onReject(this.args.item);\n }\n }\n\n @action\n onDelete(): void {\n if (this.args.onDelete) {\n this.args.onDelete(this.args.item);\n }\n }\n\n @action\n onRetry(): void {\n if (this.args.onRetry) {\n this.args.onRetry(this.args.item);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if this.isProcessing}}\\n \\n {{this.statusLabel}}\\n {{#if this.progress}}\\n {{this.progress}}%\\n {{/if}}\\n {{else if this.isApproved}}\\n \\n {{this.statusLabel}}\\n {{else if this.isError}}\\n \\n {{this.statusLabel}}\\n {{else if this.isParsed}}\\n \\n {{this.statusLabel}}\\n {{else}}\\n {{this.statusLabel}}\\n {{/if}}\\n\\n{{#if (and this.isProcessing this.progressDescription)}}\\n
\\n {{this.progressDescription}}\\n
\\n{{/if}}\", {\"contents\":\"\\n {{#if this.isProcessing}}\\n \\n {{this.statusLabel}}\\n {{#if this.progress}}\\n {{this.progress}}%\\n {{/if}}\\n {{else if this.isApproved}}\\n \\n {{this.statusLabel}}\\n {{else if this.isError}}\\n \\n {{this.statusLabel}}\\n {{else if this.isParsed}}\\n \\n {{this.statusLabel}}\\n {{else}}\\n {{this.statusLabel}}\\n {{/if}}\\n\\n{{#if (and this.isProcessing this.progressDescription)}}\\n
\\n {{this.progressDescription}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/parse-queue/status-badge.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/parse-queue/status-badge.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport IntlService from 'ember-intl/services/intl';\nimport { QUEUE_STATUS, type QueueStatus } from 'weldnote/utils/parse-queue-status';\n\ninterface StatusBadgeArgs {\n status?: QueueStatus;\n progress?: number;\n progressDescription?: string;\n}\n\nexport default class ParseQueueStatusBadgeComponent extends Component {\n @service declare intl: IntlService;\n\n QUEUE_STATUS = QUEUE_STATUS;\n\n get status(): QueueStatus {\n return this.args.status || this.QUEUE_STATUS.QUEUED;\n }\n\n get progress(): number {\n let value = this.args.progress || 0;\n // Clamp progress to valid 0-100 range\n return Math.min(100, Math.max(0, value));\n }\n\n get isQueued(): boolean {\n return this.status === this.QUEUE_STATUS.QUEUED;\n }\n\n get isProcessing(): boolean {\n return this.status === this.QUEUE_STATUS.PROCESSING || this.status === this.QUEUE_STATUS.START;\n }\n\n get isParsed(): boolean {\n return this.status === this.QUEUE_STATUS.PARSED;\n }\n\n get isApproved(): boolean {\n return this.status === this.QUEUE_STATUS.APPROVED;\n }\n\n get isRejected(): boolean {\n return this.status === this.QUEUE_STATUS.REJECTED;\n }\n\n get isError(): boolean {\n return this.status === this.QUEUE_STATUS.ERROR;\n }\n\n get badgeClass(): string {\n switch (this.status) {\n case this.QUEUE_STATUS.QUEUED:\n return 'badge-default';\n case this.QUEUE_STATUS.START:\n return 'badge-warning';\n case this.QUEUE_STATUS.PROCESSING:\n return 'badge-warning';\n case this.QUEUE_STATUS.PARSED:\n return 'badge-info';\n case this.QUEUE_STATUS.APPROVED:\n return 'badge-success';\n case this.QUEUE_STATUS.REJECTED:\n return 'badge-default';\n case this.QUEUE_STATUS.ERROR:\n return 'badge-danger';\n default:\n return 'badge-default';\n }\n }\n\n get statusLabel(): string {\n return this.intl.t(`components.parse-queue.status.${this.status.toLowerCase()}`);\n }\n\n get progressDescription(): string | null {\n if (!this.args.progressDescription) {\n return null;\n }\n\n try {\n let parsed = JSON.parse(this.args.progressDescription);\n return parsed.step || null;\n } catch {\n return this.args.progressDescription;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/pikaday/pikaday-input.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/pikaday/pikaday-input.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport moment from 'moment';\n\nexport default class PikadayInputComponent extends Component {\n constructor(owner, args) {\n super(owner, args);\n }\n\n get moment() {\n return this.args.moment || moment;\n }\n\n get format() {\n return this.args.format || 'DD.MM.YYYY';\n }\n\n get value() {\n let { value, useUTC } = this.args;\n let moment = this.moment;\n if (useUTC && value) {\n let format = 'YYYY-MM-DD';\n value = moment(moment.utc(value).format(format), format).toDate();\n }\n return value;\n }\n\n get yearRange() {\n const yearRange = this.args.yearRange;\n if (!yearRange) {\n return 10;\n }\n if (yearRange.indexOf(',') > -1) {\n const yearArray = yearRange.split(',');\n if (yearArray[1] === 'currentYear') {\n yearArray[1] = new Date().getFullYear();\n }\n return yearArray;\n } else {\n return yearRange;\n }\n }\n\n get i18n() {\n let i18n = this.args.i18n;\n if (!i18n) {\n return undefined;\n }\n if (!i18n.t) {\n return i18n;\n }\n return {\n previousMonth: i18n.t('previousMonth').toString(),\n nextMonth: i18n.t('nextMonth').toString(),\n months: i18n.t('months').toString().split(','),\n weekdays: i18n.t('weekdays').toString().split(','),\n weekdaysShort: i18n.t('weekdaysShort').toString().split(','),\n };\n }\n\n get firstDay() {\n return this.args.firstDay == null ? 1 : parseInt(this.args.firstDay, 10);\n }\n\n @action\n onClose() {\n if (this.isDestroying) {\n return;\n }\n if (this.#heardValue === undefined) {\n // Do nothing, this is here just because there's an issue with the DatePicker\n // that cleans the value if you open and close. Because when you open and close, there's no change event\n // but since the #heardValue was not changed, it's undefined and `!this.#heardValue` is truthy\n // but when you actually remove a value, this.#heardValue is equal to '' so the same expression\n // is also truthy, so we need to check against undefined to protect against the close without\n // changing\n } else if (!this.#heardValue) {\n // This is the original code, we want to pick either '' or null\n this.onSelect(null);\n }\n this.args.onClose?.();\n }\n\n\n #heardValue;\n\n @action\n onDraw() {\n // this is here because apparently the classic behavior is to pass no\n // arguments to the onDraw callback, but Pikaday's own ownDraw has an\n // argument.\n this.args.onDraw?.();\n }\n\n @action\n didChange(event) {\n this.#heardValue = event.target.value;\n }\n\n @action\n onSelect(date) {\n if (this.args.useUTC && date) {\n date = this.moment\n .utc([date.getFullYear(), date.getMonth(), date.getDate()])\n .toDate();\n }\n this.args.onSelection?.(date);\n }\n}","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.loadPieces.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#each this.pieces as |piece|}}\\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n {{t \\\"components.piping-piece-chooser.no-pieces-found\\\"}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.piping-piece-chooser.diameter-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.diameter-inches-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.thickness-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.thickness-inches-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.schedule-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.nominal-diameter-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.add-column-title\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasSearchElements}}\\n \\n \\n \\n {{/if}}\\n
\\n \\n {{t \\\"components.piping-piece-chooser.searching-label\\\"}}\\n \\n
{{format-decimal piece.diameter}}{{format-decimal piece.diameterInches}}{{format-decimal piece.thickness}}{{format-decimal piece.thicknessInches}}{{piece.schedule}}{{piece.nominalDiameter}}\\n {{#if (in-collection collection=this.model.pipingPieces model=piece)}}\\n \\n {{else}}\\n {{#if this.canAddPieces}}\\n \\n \\n {{t \\\"components.piping-piece-chooser.add-btn\\\"}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n
\", {\"contents\":\"\\n \\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#if this.loadPieces.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#each this.pieces as |piece|}}\\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n {{t \\\"components.piping-piece-chooser.no-pieces-found\\\"}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.piping-piece-chooser.diameter-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.diameter-inches-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.thickness-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.thickness-inches-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.schedule-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.nominal-diameter-column-title\\\"\\n }}{{t\\n \\\"components.piping-piece-chooser.add-column-title\\\"\\n }}
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasSearchElements}}\\n \\n \\n \\n {{/if}}\\n
\\n \\n {{t \\\"components.piping-piece-chooser.searching-label\\\"}}\\n \\n
{{format-decimal piece.diameter}}{{format-decimal piece.diameterInches}}{{format-decimal piece.thickness}}{{format-decimal piece.thicknessInches}}{{piece.schedule}}{{piece.nominalDiameter}}\\n {{#if (in-collection collection=this.model.pipingPieces model=piece)}}\\n \\n {{else}}\\n {{#if this.canAddPieces}}\\n \\n \\n {{t \\\"components.piping-piece-chooser.add-btn\\\"}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n \\n
\",\"moduleName\":\"weldnote/components/piping-piece-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/piping-piece-chooser.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, action, computed } from '@ember/object';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class PipingPieceChooser extends Component {\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @service\n userSession;\n\n @service('unit-system')\n units;\n\n @alias('userSession.decimalSeparator')\n separator;\n\n pageSize = 10;\n\n get isMetric() {\n return this.units.isMetricSystem(this.model.unitSystem);\n }\n\n get isImperial() {\n return this.units.isImperialSystem(this.model.unitSystem);\n }\n\n loadPieces = task(async (query = {}) => {\n query['paging[limit]'] = this.pageSize;\n query.sort = 'diameter,thickness';\n await timeout(400);\n let pieces = await this.data.searchPipingPieces(query);\n set(this, 'pieces', pieces);\n set(this, 'totalCount', pieces.meta.records);\n });\n\n pieces = [];\n\n @computed(\n 'diameterInches',\n 'thickness',\n 'schedule',\n 'nominalDiameter',\n 'diameter',\n 'thicknessInches',\n )\n get hasSearchElements() {\n return (\n !isEmpty(this.diameter) ||\n !isEmpty(this.thickness) ||\n !isEmpty(this.schedule) ||\n !isEmpty(this.nominalDiameter) ||\n !isEmpty(this.diameterInches) ||\n !isEmpty(this.thicknessInches)\n );\n }\n\n get canAddPieces() {\n return this.userSession.canCreateQMatrix;\n }\n\n totalCount = -1;\n\n currentPage = 1;\n\n init() {\n super.init(...arguments);\n this.loadPieces.perform();\n }\n\n changePage(pageNumber) {\n this.search(pageNumber);\n }\n\n search(pageNumber = 1) {\n let query = {};\n\n let {\n diameter,\n separator,\n thickness,\n diameterInches,\n thicknessInches,\n analytics,\n pageSize,\n schedule,\n nominalDiameter,\n } = this;\n\n if (!isEmpty(diameter)) {\n query['filter[diameter]'] = convertDecimals(diameter, separator);\n }\n\n if (!isEmpty(thickness)) {\n query['filter[thickness]'] = convertDecimals(thickness, separator);\n }\n\n if (!isEmpty(diameterInches)) {\n query['filter[diameter-inches]'] = convertDecimals(diameterInches, separator);\n }\n\n if (!isEmpty(thicknessInches)) {\n query['filter[thickness-inches]'] = convertDecimals(thicknessInches, separator);\n }\n\n if (!isEmpty(schedule)) {\n query['filter[schedule]'] = schedule;\n }\n\n if (!isEmpty(nominalDiameter)) {\n query['filter[nominal-diameter]'] = nominalDiameter;\n }\n\n query['paging[offset]'] = pageSize * (pageNumber - 1);\n\n this.loadPieces.perform(query);\n\n analytics.trackEvent(EVENTS.SEARCH, {\n type: 'piping-piece',\n diameter,\n thickness,\n thicknessInches,\n diameterInches,\n schedule,\n nominalDiameter,\n });\n }\n\n @action\n addPiece(piece) {\n this.get(`model.${this.attribute}`).then((piecesCollection) => {\n if (!piecesCollection.findBy('id', piece.get('id'))) {\n piecesCollection.pushObject(piece);\n }\n });\n this.analytics.trackEvent(EVENTS.SELECT, {\n type: 'piping-piece',\n diameter: piece.get('diameter'),\n thickness: piece.get('thickness'),\n schedule: piece.get('schedule'),\n });\n }\n\n @action\n updateDiameter(diameter) {\n set(this, 'diameter', diameter);\n }\n\n @action\n updateThickness(thickness) {\n set(this, 'thickness', thickness);\n }\n\n @action\n updateThicknessInches(thickness) {\n set(this, 'thicknessInches', thickness);\n }\n\n @action\n updateDiameterInches(diameterInches) {\n set(this, 'diameterInches', diameterInches);\n }\n\n @action\n updateSchedule(schedule) {\n set(this, 'schedule', schedule);\n }\n\n @action\n updateDN(dn) {\n set(this, 'nominalDiameter', dn);\n }\n\n @action\n reloadData(pageNumber) {\n this.changePage(pageNumber);\n }\n\n @action\n searchPieces() {\n this.search();\n }\n\n @action\n clearSearch() {\n set(this, 'diameter', null);\n set(this, 'thickness', null);\n set(this, 'schedule', null);\n set(this, 'nominalDiameter', null);\n set(this, 'diameterInches', null);\n set(this, 'thicknessInches', null);\n this.search();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if this.loadPieces.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#each this.plates as |plate|}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{else}}\\n {{t \\\"components.plate-piece-chooser.no-pieces-found\\\"}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.plate-piece-chooser.thickness-column-title\\\"\\n }}{{t\\n \\\"components.plate-piece-chooser.thickness-inches-column-title\\\"\\n }}{{t\\n \\\"components.plate-piece-chooser.add-column-title\\\"\\n }}
\\n \\n \\n \\n \\n {{#if this.hasSearchElements}}\\n \\n {{/if}}\\n
\\n \\n {{t \\\"components.plate-piece-chooser.searching-label\\\"}}\\n \\n
{{format-decimal plate.thickness}}{{format-decimal plate.thicknessInches}}\\n {{#if (in-collection collection=this.model.platePieces model=plate)}}\\n \\n {{else}}\\n {{#if this.canAddPieces}}\\n \\n \\n {{t \\\"components.plate-piece-chooser.add-btn\\\"}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n\", {\"contents\":\"\\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{#if this.loadPieces.isRunning}}\\n \\n \\n \\n {{/if}}\\n {{#each this.plates as |plate|}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{else}}\\n {{t \\\"components.plate-piece-chooser.no-pieces-found\\\"}}\\n {{/each}}\\n \\n
{{t\\n \\\"components.plate-piece-chooser.thickness-column-title\\\"\\n }}{{t\\n \\\"components.plate-piece-chooser.thickness-inches-column-title\\\"\\n }}{{t\\n \\\"components.plate-piece-chooser.add-column-title\\\"\\n }}
\\n \\n \\n \\n \\n {{#if this.hasSearchElements}}\\n \\n {{/if}}\\n
\\n \\n {{t \\\"components.plate-piece-chooser.searching-label\\\"}}\\n \\n
{{format-decimal plate.thickness}}{{format-decimal plate.thicknessInches}}\\n {{#if (in-collection collection=this.model.platePieces model=plate)}}\\n \\n {{else}}\\n {{#if this.canAddPieces}}\\n \\n \\n {{t \\\"components.plate-piece-chooser.add-btn\\\"}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n\",\"moduleName\":\"weldnote/components/plate-piece-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/plate-piece-chooser.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, action, computed } from '@ember/object';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class PlatePieceChooser extends Component {\n @service('weldnote-data')\n data;\n\n @service\n analytics;\n\n @service\n userSession;\n\n @alias('userSession.decimalSeparator')\n separator;\n\n isSearching = false;\n\n pageSize = 10;\n\n @service('unit-system')\n units;\n\n get isMetric() {\n return this.units.isMetricSystem(this.model.unitSystem);\n }\n\n get isImperial() {\n return this.units.isImperialSystem(this.model.unitSystem);\n }\n\n loadPieces = task(async (query = {}) => {\n query['paging[limit]'] = this.pageSize;\n query['sort=thickness'];\n await timeout(400);\n let pieces = await this.data.searchPlatePieces(query);\n set(this, 'plates', pieces);\n set(this, 'totalCount', pieces.meta.records);\n });\n\n plates = [];\n\n get canAddPieces() {\n return this.userSession.canCreateQMatrix;\n }\n\n init() {\n super.init(...arguments);\n this.loadPieces.perform();\n }\n\n @computed('thickness', 'thicknessInches')\n get hasSearchElements() {\n return !isEmpty(this.thickness) || !isEmpty(this.thicknessInches);\n }\n\n totalCount = -1;\n\n currentPage = 1;\n\n changePage(pageNumber) {\n this.search(pageNumber);\n }\n\n search(pageNumber = 1) {\n let query = {};\n\n if (!isEmpty(this.thickness)) {\n query['filter[thickness]'] = convertDecimals(this.thickness, this.separator);\n }\n\n if (!isEmpty(this.thicknessInches)) {\n query['filter[thickness-inches]'] = convertDecimals(this.thicknessInches, this.separator);\n }\n\n query['paging[offset]'] = this.pageSize * (pageNumber - 1);\n\n this.loadPieces.perform(query);\n\n this.analytics.trackEvent(EVENTS.SEARCH, {\n type: 'plate-piece',\n thickness: this.thickness,\n thicknessInches: this.thicknessInches,\n });\n }\n\n @action\n addPiece(piece) {\n this.get(`model.${this.attribute}`).then((piecesCollection) => {\n if (!piecesCollection.findBy('id', piece.get('id'))) {\n piecesCollection.pushObject(piece);\n }\n });\n this.analytics.trackEvent(EVENTS.SELECT, {\n type: 'plate-piece',\n thickness: piece.get('thickness'),\n thicknessInches: piece.get('thicknessInches'),\n });\n }\n\n @action\n updateThickness(thickness) {\n set(this, 'thickness', thickness);\n }\n\n @action\n updateThicknessInches(diameter) {\n set(this, 'thicknessInches', diameter);\n }\n\n @action\n reloadData(pageNumber) {\n this.changePage(pageNumber);\n }\n\n @action\n searchPieces() {\n this.search();\n }\n\n @action\n clearSearch() {\n set(this, 'thicknessInches', null);\n set(this, 'thickness', null);\n this.search();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @searchEnabled}}\\n
\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if @searchEnabled}}\\n
\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/power-select-pre-searched-before-options.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/power-select-pre-searched-before-options.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport BeforeOptionsComponent from 'ember-power-select/components/power-select/before-options';\n\n/* The purpose of this component is\n * When the user uses the filler-material-chooser component and wants to create a new filler\n * material, a modal opens with the parts of the filler material to create, the problem\n * is that it looses what the user searched, because it's not an option in the list of options\n * This component allows to set the value of the search text\n */\nexport default class PowerSelectPreSearchedBeforeOptionsComponent extends BeforeOptionsComponent {\n hasUserEditedSearch = false;\n\n get searchText() {\n let {\n extra,\n select: { searchText },\n } = this.args;\n\n if (!this.hasUserEditedSearch) {\n this.hasUserEditedSearch = searchText !== extra;\n }\n\n if (!isEmpty(extra) && isEmpty(searchText) && !this.hasUserEditedSearch) {\n return extra;\n }\n if (isEmpty(searchText)) {\n return '';\n }\n return searchText;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (is-array this.content)}}\\n {{#if this.isSorted}}\\n {{#each this.sortedContent as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.sortedContent.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{else}}\\n {{#each this.content as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.content.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n {{else}}\\n {{#if (has-block)}}\\n {{yield this.content}}\\n {{else}}\\n {{get this.content this.attributeReference}}\\n {{/if}}\\n {{/if}}\\n

\\n
\", {\"contents\":\"
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (is-array this.content)}}\\n {{#if this.isSorted}}\\n {{#each this.sortedContent as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.sortedContent.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{else}}\\n {{#each this.content as |model|}}\\n {{get model this.attributeReference}}{{#if (not-eq this.content.lastObject model)}},\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n {{else}}\\n {{#if (has-block)}}\\n {{yield this.content}}\\n {{else}}\\n {{get this.content this.attributeReference}}\\n {{/if}}\\n {{/if}}\\n

\\n
\",\"moduleName\":\"weldnote/components/pqr-approval-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/pqr-approval-range.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport { sort, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\n\n// This component is apparently only used in filler-materials (pqr) might be worth\n// renaming to something less generic\n@classic\nexport default class PqrApprovalRange extends Component {\n renderLabel = true;\n\n sortDirection = 'ASC';\n\n @notEmpty('sortBy')\n isSorted;\n\n @sort('content', function (a, b) {\n let sortProperty = this.sortBy;\n let { sortDirection } = this;\n let aProp = a.get(sortProperty);\n let bProp = b.get(sortProperty);\n if (aProp > bProp) {\n if (sortDirection === 'ASC') {\n return 1;\n } else {\n return -1;\n }\n } else if (aProp < bProp) {\n if (sortDirection === 'ASC') {\n return -1;\n } else {\n return 1;\n }\n }\n return 0;\n })\n sortedContent;\n\n @computed('label')\n get labelReference() {\n return `model.pqr.${this.label}.label`;\n }\n\n @computed('attribute')\n get attributeReference() {\n if (isEmpty(this.attribute)) {\n return 'visualLabel';\n }\n return this.attribute;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n

\\n {{#if (has-block)}}\\n {{yield (get @model @attribute)}}\\n {{else}}\\n {{get @model @attribute}}\\n {{/if}}\\n

\\n {{#if @showEmptyHelpBlock}}\\n  \\n {{/if}}\\n
\", {\"contents\":\"
\\n \\n

\\n {{#if (has-block)}}\\n {{yield (get @model @attribute)}}\\n {{else}}\\n {{get @model @attribute}}\\n {{/if}}\\n

\\n {{#if @showEmptyHelpBlock}}\\n  \\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/pqr-model-value.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/pqr-model-value.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class PqrModelValue extends Component {\n @service\n intl;\n\n get labelReference() {\n let { intl } = this;\n let { attribute, label, labelParams } = this.args;\n if (!isEmpty(label)) {\n if (!isEmpty(labelParams)) {\n return intl.t(`model.pqr.${label}.label`, labelParams);\n } else {\n return intl.t(`model.pqr.${label}.label`);\n }\n }\n if (!isEmpty(labelParams)) {\n return intl.t(`model.pqr.${attribute}.label`, labelParams);\n } else {\n return intl.t(`model.pqr.${attribute}.label`);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{@progress}}% {{@text}}\\n \\n\", {\"contents\":\"\\n \\n {{@progress}}% {{@text}}\\n \\n\",\"moduleName\":\"weldnote/components/progress-bar.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/progress-bar.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n {{t \\\"components.pwht-search-option-with-temperature.presence-label\\\"}}\\n
\\n \\n \\n {{t \\\"pqr-list.advanced-parameters.yes\\\"}}\\n \\n \\n \\n {{t \\\"pqr-list.advanced-parameters.no\\\"}}\\n \\n
\\n
\\n
\\n \\n
\\n {{t\\n \\\"pqr-list.advanced-parameters.post-weld-heat-treatment-label\\\"\\n unit=@temperatureUnit\\n }}\\n \\n
\\n
\\n
\", {\"contents\":\"\\n \\n
\\n {{t \\\"components.pwht-search-option-with-temperature.presence-label\\\"}}\\n
\\n \\n \\n {{t \\\"pqr-list.advanced-parameters.yes\\\"}}\\n \\n \\n \\n {{t \\\"pqr-list.advanced-parameters.no\\\"}}\\n \\n
\\n
\\n
\\n \\n
\\n {{t\\n \\\"pqr-list.advanced-parameters.post-weld-heat-treatment-label\\\"\\n unit=@temperatureUnit\\n }}\\n \\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/pwht-search-option-with-temperature.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/pwht-search-option-with-temperature.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\n\nconst { PWHT_PRESENCE } = Constants;\n\nexport default class PwhtSearchOptionWithTemperature extends Component {\n @service\n userSession;\n\n get temperatureDisabled() {\n let presence = this.args.postWeldHeatTreamentPresence;\n if (isEmpty(presence) || presence === PWHT_PRESENCE.NO) {\n return true;\n }\n return false;\n }\n\n get isEditing() {\n return this.args.isEditing ?? true;\n }\n\n get pwhtChecked() {\n let pwht = this.args.postWeldHeatTreamentPresence;\n if (pwht === true || pwht === PWHT_PRESENCE.YES) {\n return true;\n }\n return false;\n }\n\n get pwhtUnchecked() {\n let pwht = this.args.postWeldHeatTreamentPresence;\n if (pwht === false || pwht === PWHT_PRESENCE.NO) {\n return true;\n }\n return false;\n }\n\n @action\n noPWHT({ target }) {\n let { checked } = target;\n if (checked) {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.NO);\n this.args.onUpdatePWHT(null);\n } else {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.ABSENT);\n }\n }\n\n @action\n yesPWHT({ target }) {\n let { checked } = target;\n if (checked) {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.YES);\n } else {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.ABSENT);\n }\n }\n\n @action\n updateText({ target }) {\n let { value } = target;\n if (this.args.onUpdatePWHT) {\n this.args.onUpdatePWHT(value);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if this.isASMEAWS}}\\n \\n
\\n \\n \\n
\\n {{else}}\\n \\n {{#if this.isEditing}}\\n \\n {{else}}\\n

{{@postWeldHeatTreament}}

\\n {{/if}}\\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if this.isASMEAWS}}\\n \\n
\\n \\n \\n
\\n {{else}}\\n \\n {{#if this.isEditing}}\\n \\n {{else}}\\n

{{@postWeldHeatTreament}}

\\n {{/if}}\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/pwht-search-option.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/pwht-search-option.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { isStandardASME, isStandardAWS } from 'weldnote/utils/standards';\nimport Constants from 'weldnote/utils/constants';\n\nconst { PWHT_PRESENCE } = Constants;\n\nexport default class PwhtSearchOption extends Component {\n @service\n userSession;\n\n get isASMEAWS() {\n let { standard } = this.args;\n return isStandardASME(standard) || isStandardAWS(standard);\n }\n\n get pwhtChecked() {\n let pwht = this.args.postWeldHeatTreamentPresence;\n if (pwht === true || pwht === PWHT_PRESENCE.YES) {\n return true;\n }\n return false;\n }\n\n get isEditing() {\n return this.args.isEditing ?? true;\n }\n\n get pwhtUnchecked() {\n let pwht = this.args.postWeldHeatTreamentPresence;\n if (pwht === false || pwht === PWHT_PRESENCE.NO) {\n return true;\n }\n return false;\n }\n\n @action\n noPWHT({ target }) {\n let { checked } = target;\n if (checked) {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.NO);\n } else {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.ABSENT);\n }\n }\n\n @action\n yesPWHT({ target }) {\n let { checked } = target;\n if (checked) {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.YES);\n } else {\n this.args.onUpdatePWHTPresence(PWHT_PRESENCE.ABSENT);\n }\n }\n\n @action\n updateText({ target }) {\n let { value } = target;\n if (this.args.onUpdatePWHT) {\n this.args.onUpdatePWHT(value);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if (has-block)}}\\n {{yield (hash noContent=(component \\\"blank-template\\\"))}}\\n {{/if}}\\n\", {\"contents\":\"\\n {{#if (has-block)}}\\n {{yield (hash noContent=(component \\\"blank-template\\\"))}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/responsive-grid.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/responsive-grid.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n\nexport default class ResponsiveGridComponent extends Component {\n @service('weldnote-data') data;\n @service intl;\n\n get noContentFoundMessageText() {\n let { noContentFoundMessage } = this.args;\n if (!isEmpty(noContentFoundMessage)) {\n return noContentFoundMessage.toString();\n }\n return this.intl.t('components.responsive-grid.messages.no-content-found');\n }\n\n get responsiveExpandedRowComponent() {\n return (\n this.args.responsiveExpandedRowComponent ?? 'weldnote-grid/simple-responsive-expanded-row'\n );\n }\n\n get showPagingWidget() {\n return this.args.showPaging ?? true;\n }\n\n get currentPageSize() {\n let { pageSize } = this.args;\n if (!isEmpty(pageSize) && !isNaN(parseInt(pageSize))) {\n return pageSize;\n }\n return this.data.pageSize;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if @isSaving}}\\n \\n \\n {{t \\\"toolbar.save.waiting\\\"}}\\n \\n {{else}}\\n \\n \\n {{yield}}\\n \\n {{/if}}\\n\", {\"contents\":\"\\n {{#if @isSaving}}\\n \\n \\n {{t \\\"toolbar.save.waiting\\\"}}\\n \\n {{else}}\\n \\n \\n {{yield}}\\n \\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/save-button.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/save-button.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isSaving}}\\n \\n{{else}}\\n \\n \\n {{yield}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isSaving}}\\n \\n{{else}}\\n \\n \\n {{yield}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/save-stop-button.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/save-stop-button.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n \\n
\\n{{yield (hash saveImage=this.saveImage)}}\", {\"contents\":\"
\\n \\n
\\n{{yield (hash saveImage=this.saveImage)}}\",\"moduleName\":\"weldnote/components/schematic-image-editor5.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/schematic-image-editor5.hbs\"}});\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport ENV from 'weldnote/config/environment';\n\nconst EDITOR_CACHE_BUSTER = Date.now();\n\ninterface SchematicImageEditor5Args {\n Args: {\n editorType: string;\n imagePath: string;\n state: string;\n language: string;\n onSave: (value: { state: any; image: string }) => void;\n onClose: () => void;\n categories: string[];\n };\n}\n\n/**\n * Valid origins for postMessage communication with the editor iframe.\n * The editor runs on the notes backend; these are the known backend origins.\n */\nconst VALID_ORIGINS = [\n 'http://localhost:9000',\n 'http://localhost:4200',\n 'https://dev.notes.apps.indusuite.com',\n 'https://test.notes.apps.indusuite.com',\n 'https://notes.apps.indusuite.com',\n];\n\nexport default class SchematicImageEditor5 extends Component {\n @tracked editorStarted = false;\n\n iframeElement: HTMLIFrameElement | null = null;\n messageHandler: ((event: MessageEvent) => void) | null = null;\n\n get editorUrl(): string {\n return `${ENV.notesBackendEndpoint}/photoeditor5/editor.html?v=${EDITOR_CACHE_BUSTER}`;\n }\n\n get targetOrigin(): string {\n const origin = window.location.origin;\n if (origin.includes('localhost')) {\n return 'http://localhost:9000';\n } else if (origin.includes('dev.apps.indusuite.com') || origin.includes('dev.notes.apps.indusuite.com')) {\n return 'https://dev.notes.apps.indusuite.com';\n } else if (origin.includes('test.apps.indusuite.com') || origin.includes('test.notes.apps.indusuite.com')) {\n return 'https://test.notes.apps.indusuite.com';\n } else if (origin.includes('apps.indusuite.com') || origin.includes('notes.apps.indusuite.com')) {\n return 'https://notes.apps.indusuite.com';\n }\n return '';\n }\n\n isValidOrigin(origin: string): boolean {\n return VALID_ORIGINS.includes(origin);\n }\n\n sendMessage(data: Record): void {\n if (this.iframeElement?.contentWindow) {\n this.iframeElement.contentWindow.postMessage(data, this.targetOrigin);\n }\n }\n\n @action\n setupIframe(element: HTMLIFrameElement): void {\n this.iframeElement = element;\n element.addEventListener('load', this.onIframeLoad);\n\n this.messageHandler = (event: MessageEvent) => this.onMessage(event);\n window.addEventListener('message', this.messageHandler, false);\n }\n\n @action\n teardownIframe(): void {\n if (this.iframeElement) {\n this.iframeElement.removeEventListener('load', this.onIframeLoad);\n }\n if (this.messageHandler) {\n window.removeEventListener('message', this.messageHandler);\n this.messageHandler = null;\n }\n this.iframeElement = null;\n this.editorStarted = false;\n }\n\n onIframeLoad = (): void => {\n this.sendMessage({\n type: 'initialImage',\n value: this.args.imagePath,\n editorType: this.args.editorType || 'grooveDesign',\n language: this.args.language || 'en',\n });\n };\n\n onMessage(event: MessageEvent): void {\n if (!this.isValidOrigin(event.origin)) {\n return;\n }\n\n const data = event.data;\n if (!data || !data.type) {\n return;\n }\n\n if (data.type === 'editorReady') {\n if (!this.editorStarted) {\n this.editorStarted = true;\n this.sendMessage({\n type: 'restoreState',\n value: {\n state: this.args.state,\n },\n });\n }\n }\n\n if (data.type === 'imageReady') {\n const state = data.state;\n const result = data.result;\n if (this.args.onSave && typeof result === 'string') {\n // Strip the data URL prefix to get raw base64\n const imageBase64 = result.split(',')[1] || result;\n this.args.onSave({\n state,\n image: imageBase64,\n });\n }\n }\n\n if (data.type === 'closeEditor') {\n this.editorStarted = false;\n if (this.args.onClose) {\n this.args.onClose();\n }\n }\n }\n\n @action\n saveImage(): void {\n this.sendMessage({ type: 'triggerSave' });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{@option.text}}\\n \\n\", {\"contents\":\"\\n \\n {{@option.text}}\\n \\n\",\"moduleName\":\"weldnote/components/select-suggested-option.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/select-suggested-option.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{!--\\n Settings menu component that provides navigation to list and create views.\\n \\n Renders two action buttons:\\n 1. List button - navigates to the record list view\\n 2. New button - navigates to the create form (conditionally shown based on permissions)\\n \\n Usage examples:\\n - \\n - \\n--}}\\n\\n
\\n
\\n \\n \\n \\n
\\n {{#if this.showNewLink}}\\n
\\n \\n \\n \\n
\\n {{/if}}\\n
\\n
\", {\"contents\":\"{{!--\\n Settings menu component that provides navigation to list and create views.\\n \\n Renders two action buttons:\\n 1. List button - navigates to the record list view\\n 2. New button - navigates to the create form (conditionally shown based on permissions)\\n \\n Usage examples:\\n - \\n - \\n--}}\\n\\n
\\n
\\n \\n \\n \\n
\\n {{#if this.showNewLink}}\\n
\\n \\n \\n \\n
\\n {{/if}}\\n
\\n
\",\"moduleName\":\"weldnote/components/settings-menu.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/settings-menu.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { pluralize } from 'ember-inflector';\n\n/**\n * Reusable component that renders a settings menu panel for CRUD operations\n * on various welding configuration entities.\n *\n * This component provides a standardized interface for accessing list and create\n * functionality for different types of welding settings data. It's used throughout\n * the settings page to maintain consistency in how users interact with different\n * configuration types (materials, gases, processes, etc.).\n *\n * Business Logic:\n * - Automatically generates route names based on model naming conventions\n * - Supports internationalized titles via the intl service\n * - Conditionally shows the \"New\" button based on user permissions\n * - Follows Ember Data pluralization rules for route generation\n *\n * Component Arguments:\n * @param {string} modelName - The model name (e.g., 'base-material', 'gas', 'flux')\n * @param {string} [title] - Optional custom title; if not provided, uses i18n lookup\n * @param {boolean} [showNewLink=true] - Whether to display the \"New\" button\n * @param {string} [listRoute] - Optional custom route for the list view\n * @param {string} [newRoute] - Optional custom route for creating new records\n *\n * @class SettingsMenu\n * @extends Component\n */\nexport default class SettingsMenu extends Component {\n @service\n intl;\n\n /**\n * Determines whether to show the \"New\" button for creating records.\n * This is typically controlled by user permissions passed from the parent template.\n *\n * @property {boolean} showNewLink\n * @default true\n */\n get showNewLink() {\n return this.args.showNewLink ?? true;\n }\n\n /**\n * Computes the panel title, either from the explicit title argument\n * or by looking up an internationalized label based on the model name.\n *\n * The i18n key follows the pattern: `model.{modelName}.model-plural`\n * Example: For 'base-material', looks up 'model.base-material.model-plural'\n *\n * @property {string} title\n */\n get title() {\n if (!isEmpty(this.args.title)) {\n return this.args.title;\n }\n let label = `model.${this.args.modelName}.model-plural`;\n return this.intl.t(label);\n }\n\n /**\n * Generates the route name for the list view.\n * Uses Ember Inflector to pluralize the model name unless a custom route is provided.\n *\n * Example: 'base-material' becomes 'base-materials'\n *\n * @property {string} pathToList\n */\n get pathToList() {\n if (isEmpty(this.args.listRoute)) {\n return pluralize(this.args.modelName);\n }\n return this.args.listRoute;\n }\n\n /**\n * Generates the route name for creating a new record.\n * Follows Ember conventions by appending '.new' to the model name.\n *\n * Example: 'base-material' becomes 'base-material.new'\n *\n * @property {string} pathToNew\n */\n get pathToNew() {\n if (isEmpty(this.args.newRoute)) {\n return `${this.args.modelName}.new`;\n }\n return this.args.newRoute;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n\\n{{#if this.isGasTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasSecondFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasThirdFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n{{/if}}\\n{{#if this.isFluxTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n\\n{{#if this.isGasTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasSecondFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasThirdFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n{{/if}}\\n{{#if this.isFluxTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/shielding-choice-approval-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/shielding-choice-approval-range.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport Constants from 'weldnote/utils/constants';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nconst { SHIELDING_OPTIONS } = Constants;\n\nexport default class ShieldingChoiceApprovalRange extends Component {\n @service('weldnote-data')\n data;\n\n get shieldingOptions() {\n return this.data.shieldingTypeOptions;\n }\n\n get hasSecondFlowRate() {\n return !isEmpty(this.args.secondFlowRateProperty);\n }\n\n get hasThirdFlowRate() {\n return !isEmpty(this.args.thirdFlowRateProperty);\n }\n\n get shieldingValue() {\n return get(this.args.model, this.args.shieldingProperty);\n }\n\n get gasValue() {\n return get(this.args.model, this.args.gasProperty);\n }\n\n get fluxValue() {\n return get(this.args.model, this.args.fluxProperty);\n }\n\n get isGasTestPieceVisible() {\n return this.shieldingValue === SHIELDING_OPTIONS.GAS;\n }\n\n get isFluxTestPieceVisible() {\n return this.shieldingValue === SHIELDING_OPTIONS.FLUX;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n\\n{{#if this.isGasTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasSecondFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasThirdFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n{{/if}}\\n{{#if this.isFluxTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n\\n{{#if this.isGasTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.hasSecondFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.hasThirdFlowRate}}\\n \\n \\n \\n \\n \\n {{/if}}\\n{{/if}}\\n{{#if this.isFluxTestPieceVisible}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/shielding-choice.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/shielding-choice.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action, get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport { tracked } from '@glimmer/tracking';\n\nconst { SHIELDING_OPTIONS } = Constants;\n\nexport default class ShieldingChoice extends Component {\n @service('weldnoteData')\n data;\n\n @service\n analytics;\n\n @service\n loading;\n\n @service\n store;\n\n @service\n intl;\n\n @service\n alertMessage;\n\n @tracked gasCommercialDesignationOptions = null;\n\n @tracked fluxCommercialDesignationOptions = null;\n\n constructor() {\n super(...arguments);\n this.fetchGasCommercialDesignationOptions();\n this.fetchFluxCommercialDesignationOptions();\n }\n\n get shieldingOptions() {\n return this.data.shieldingTypeOptions;\n }\n\n get hasSecondFlowRate() {\n let { secondFlowRateProperty } = this.args;\n if (!isEmpty(secondFlowRateProperty)) {\n return !isEmpty(this.args?.layers?.fill);\n }\n return false;\n }\n\n get hasThirdFlowRate() {\n let { thirdFlowRateProperty } = this.args;\n if (!isEmpty(thirdFlowRateProperty)) {\n return !isEmpty(this.args?.layers?.cap);\n }\n return false;\n }\n\n get isGasTestPieceVisible() {\n return this.shieldingValue === SHIELDING_OPTIONS.GAS;\n }\n\n get isFluxTestPieceVisible() {\n return this.shieldingValue === SHIELDING_OPTIONS.FLUX;\n }\n\n get hasGas() {\n let { gasValue } = this;\n if (!isEmpty(gasValue)) {\n return !isEmpty(get(gasValue, 'id'));\n }\n return false;\n }\n\n get hasFlux() {\n let { fluxValue } = this;\n if (!isEmpty(fluxValue)) {\n return !isEmpty(get(fluxValue, 'id'));\n }\n return false;\n }\n\n get isGasCommercialDesignationTestPieceDisabled() {\n if (this.args.disabled) {\n return this.args.disabled;\n }\n return !this.hasGas;\n }\n\n get isFluxCommercialDesignationTestPieceDisabled() {\n if (this.args.disabled) {\n return this.args.disabled;\n }\n return !this.hasFlux;\n }\n\n get industryCodeFilter() {\n if (this.args.model.hasStandard()) {\n return { 'code.id': get(this.args.model, 'standard.code.id') };\n }\n return {};\n }\n\n get shieldingValue() {\n return get(this.args.model, this.args.shieldingProperty);\n }\n\n get gasValue() {\n return get(this.args.model, this.args.gasProperty);\n }\n\n get fluxValue() {\n return get(this.args.model, this.args.fluxProperty);\n }\n\n createGasCommercialDesignationRecord(designationName, gas, mixture) {\n let designation = this.store.createRecord('gas-commercial-designation');\n designation.set('gas', gas);\n designation.set('commercialDesignation', designationName);\n if (!isEmpty(mixture)) {\n designation.set('gasMixture', mixture);\n }\n return designation.save();\n }\n\n createFluxCommercialDesignationRecord(designationName, flux) {\n let designation = this.store.createRecord('flux-commercial-designation');\n designation.set('flux', flux);\n designation.set('commercialDesignation', designationName);\n return designation.save();\n }\n\n showCommercialDesignationSuccess(model) {\n let name = this.intl.t(`model.${model}.model-name`);\n let successMessage = this.intl.t('edit-view.actions.saved', { name });\n this.alertMessage.success(successMessage);\n }\n\n showCommercialDesignationError(model) {\n let name = this.intl.t(`model.${model}.model-name`);\n let errorMessage = this.intl.t('edit-view.actions.error', { name });\n this.alertMessage.error(errorMessage);\n }\n\n @action\n fetchGasCommercialDesignationOptions() {\n if (this.hasGas) {\n this.data.searchGasCommercialDesignationsByGases([this.gasValue]).then((designations) => {\n this.gasCommercialDesignationOptions = designations;\n });\n }\n }\n\n @action\n fetchFluxCommercialDesignationOptions() {\n if (this.hasFlux) {\n this.data.searchFluxCommercialDesignationsByFluxes([this.fluxValue]).then((designations) => {\n this.fluxCommercialDesignationOptions = designations;\n });\n }\n }\n\n @action\n chooseGas(gas) {\n this.args.gasChosen(gas);\n this.fetchGasCommercialDesignationOptions();\n }\n\n @action\n chooseFlux(flux) {\n this.args.fluxChosen(flux);\n this.fetchFluxCommercialDesignationOptions();\n }\n\n @action\n createGasCommercialDesignation(designationName, gas, gasMixture) {\n let { loading, analytics } = this;\n loading.block();\n this.createGasCommercialDesignationRecord(designationName, gas, gasMixture)\n .then((designation) => {\n this.args.gasCommercialDesignationChosen(designation);\n this.showCommercialDesignationSuccess('gas-commercial-designation');\n analytics.trackEvent('create-gas-commercial-designation-inline', {\n type: 'gas-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n this.fetchGasCommercialDesignationOptions();\n })\n .catch(() => {\n this.showCommercialDesignationError('gas-commercial-designation');\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n createFluxCommercialDesignation(designationName, flux) {\n let { loading, analytics } = this;\n loading.block();\n this.createFluxCommercialDesignationRecord(designationName, flux)\n .then((designation) => {\n this.args.fluxCommercialDesignationChosen(designation);\n this.showCommercialDesignationSuccess('flux-commercial-designation');\n analytics.trackEvent('create-flux-commercial-designation-inline', {\n type: 'flux-commercial-designation',\n category: 'create-inline',\n name: designationName,\n });\n this.fetchFluxCommercialDesignationOptions();\n })\n .catch(() => {\n this.showCommercialDesignationError('flux-commercial-designation');\n })\n .finally(() => {\n loading.unblock();\n });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n {{#if this.isGasTestPieceVisible}}\\n \\n \\n \\n {{else}}\\n {{#if this.isFluxTestPieceVisible}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n\\n{{#if this.isGasTestPieceVisible}}\\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value @flowRateMinimumPropery)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n {{#if this.hasSecondFlowRate}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasThirdFlowRate}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n{{/if}}\\n{{#if (and this.isFluxTestPieceVisible @showAdvancedFields)}}\\n \\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"\\n \\n \\n \\n {{#if this.isGasTestPieceVisible}}\\n \\n \\n \\n {{else}}\\n {{#if this.isFluxTestPieceVisible}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n\\n{{#if this.isGasTestPieceVisible}}\\n {{#if @showAdvancedFields}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (has-value @flowRateMinimumPropery)}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n \\n {{#if this.hasSecondFlowRate}}\\n \\n \\n \\n {{/if}}\\n {{#if this.hasThirdFlowRate}}\\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n{{/if}}\\n{{#if (and this.isFluxTestPieceVisible @showAdvancedFields)}}\\n \\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/shielding-choice/horizontal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/shielding-choice/horizontal.hbs\"}});\nimport Component from 'weldnote/components/shielding-choice';\n\nexport default class Horizontal extends Component {\n get flowRateColumnSize() {\n if (this.hasThirdFlowRate) {\n return 3;\n }\n if (this.hasSecondFlowRate) {\n return 2;\n }\n return 1;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{t\\n \\\"components.show-search-message-more-results\\\"\\n }}\", {\"contents\":\"{{t\\n \\\"components.show-search-message-more-results\\\"\\n }}\",\"moduleName\":\"weldnote/components/show-search-message-more-results.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/show-search-message-more-results.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{yield}}\", {\"contents\":\"{{yield}}\",\"moduleName\":\"weldnote/components/sidebar-activator.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/sidebar-activator.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport Component from '@ember/component';\nimport $ from 'jquery';\n\n@classic\nexport default class SidebarActivator extends Component {\n domElement = null;\n\n didInsertElement() {\n super.didInsertElement(...arguments);\n $(`#${this.domElement}`).metisMenu();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{#if this.isEditing}}\\n \\n {{else}}\\n

{{@value}}

\\n {{/if}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#each this.errors as |error|}}\\n {{error}}\\n {{/each}}\\n\", {\"contents\":\"\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{#if this.isEditing}}\\n \\n {{else}}\\n

{{@value}}

\\n {{/if}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{#each this.errors as |error|}}\\n {{error}}\\n {{/each}}\\n\",\"moduleName\":\"weldnote/components/simple-attribute.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/simple-attribute.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\ninterface SimpleAttributeArgs {\n value?: string;\n label?: string;\n helpText?: string;\n onUpdateValue?: (value: string) => void;\n renderLabel?: boolean;\n isRequired?: boolean;\n disabled?: boolean;\n isEditing?: boolean;\n placeholder?: string;\n type?: string;\n id?: string;\n errors?: string[];\n}\n\nexport default class SimpleAttribute extends Component {\n get renderLabel(): boolean {\n return this.args.renderLabel ?? true;\n }\n\n get isRequired(): boolean {\n return this.args.isRequired ?? false;\n }\n\n get disabled(): boolean {\n return this.args.disabled ?? false;\n }\n\n get isEditing(): boolean {\n return this.args.isEditing ?? true;\n }\n\n get hasHelp(): boolean {\n return !isEmpty(this.args.helpText);\n }\n\n get errors(): string[] {\n return this.args.errors ?? [];\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Simple table component to replace ember-light-table }}\\n
\\n
\\n \\n \\n \\n {{#each this.visibleColumns as |column|}}\\n \\n {{/each}}\\n \\n \\n \\n {{#if @isLoading}}\\n \\n \\n \\n {{else if this.hasData}}\\n {{#each this.tableRows as |row index|}}\\n {{#if @rowComponent}}\\n {{#component @rowComponent row=row index=index as |rowConfig|}}\\n \\n {{#each this.visibleColumns as |column|}}\\n \\n {{#if column.cellComponent}}\\n {{component\\n column.cellComponent\\n value=(get row column.valuePath)\\n row=row\\n column=column\\n toggleRow=this.toggleRow\\n tableActions=@userActions\\n }}\\n {{else}}\\n {{get row column.valuePath}}\\n {{/if}}\\n \\n {{/each}}\\n \\n {{/component}}\\n {{else}}\\n \\n {{#each this.visibleColumns as |column|}}\\n \\n {{/each}}\\n \\n {{/if}}\\n\\n {{! Responsive expanded row for mobile/tablet }}\\n {{#if row.expanded}}\\n \\n \\n \\n {{/if}}\\n {{/each}}\\n {{else}}\\n \\n \\n \\n {{/if}}\\n \\n
\\n {{column.label}}\\n
\\n \\n {{t \\\"components.responsive-grid.messages.loading\\\"}}\\n \\n
\\n {{#if column.cellComponent}}\\n {{component\\n column.cellComponent\\n value=(get row column.valuePath)\\n row=row\\n column=column\\n toggleRow=this.toggleRow\\n tableActions=@userActions\\n }}\\n {{else}}\\n {{get row column.valuePath}}\\n {{/if}}\\n
\\n {{component\\n this.responsiveExpandedRowComponent\\n columns=this.hiddenColumns\\n row=row\\n }}\\n
\\n {{#if (has-block)}}\\n \\n {{yield (hash noContent=(component \\\"blank-template\\\"))}}\\n \\n {{else}}\\n {{this.noContentFoundMessageText}}\\n {{/if}}\\n
\\n
\\n\\n {{#if this.showPagingWidget}}\\n
\\n \\n
\\n {{/if}}\\n
\", {\"contents\":\"{{! Simple table component to replace ember-light-table }}\\n
\\n
\\n \\n \\n \\n {{#each this.visibleColumns as |column|}}\\n \\n {{/each}}\\n \\n \\n \\n {{#if @isLoading}}\\n \\n \\n \\n {{else if this.hasData}}\\n {{#each this.tableRows as |row index|}}\\n {{#if @rowComponent}}\\n {{#component @rowComponent row=row index=index as |rowConfig|}}\\n \\n {{#each this.visibleColumns as |column|}}\\n \\n {{#if column.cellComponent}}\\n {{component\\n column.cellComponent\\n value=(get row column.valuePath)\\n row=row\\n column=column\\n toggleRow=this.toggleRow\\n tableActions=@userActions\\n }}\\n {{else}}\\n {{get row column.valuePath}}\\n {{/if}}\\n \\n {{/each}}\\n \\n {{/component}}\\n {{else}}\\n \\n {{#each this.visibleColumns as |column|}}\\n \\n {{/each}}\\n \\n {{/if}}\\n\\n {{! Responsive expanded row for mobile/tablet }}\\n {{#if row.expanded}}\\n \\n \\n \\n {{/if}}\\n {{/each}}\\n {{else}}\\n \\n \\n \\n {{/if}}\\n \\n
\\n {{column.label}}\\n
\\n \\n {{t \\\"components.responsive-grid.messages.loading\\\"}}\\n \\n
\\n {{#if column.cellComponent}}\\n {{component\\n column.cellComponent\\n value=(get row column.valuePath)\\n row=row\\n column=column\\n toggleRow=this.toggleRow\\n tableActions=@userActions\\n }}\\n {{else}}\\n {{get row column.valuePath}}\\n {{/if}}\\n
\\n {{component\\n this.responsiveExpandedRowComponent\\n columns=this.hiddenColumns\\n row=row\\n }}\\n
\\n {{#if (has-block)}}\\n \\n {{yield (hash noContent=(component \\\"blank-template\\\"))}}\\n \\n {{else}}\\n {{this.noContentFoundMessageText}}\\n {{/if}}\\n
\\n
\\n\\n {{#if this.showPagingWidget}}\\n
\\n \\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/simple-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/simple-table.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { set } from '@ember/object';\n\nexport default class SimpleTableComponent extends Component {\n @service intl;\n @service('weldnote-data') data;\n\n @tracked expandedRows = new Set();\n\n get noContentFoundMessageText() {\n let { noContentFoundMessage } = this.args;\n if (!isEmpty(noContentFoundMessage)) {\n return noContentFoundMessage.toString();\n }\n return this.intl.t('components.responsive-grid.messages.no-content-found');\n }\n\n get currentPageSize() {\n let { pageSize } = this.args;\n if (!isEmpty(pageSize) && !isNaN(parseInt(pageSize))) {\n return pageSize;\n }\n return this.data.pageSize;\n }\n\n get showPagingWidget() {\n return this.args.showPaging ?? true;\n }\n\n get responsiveExpandedRowComponent() {\n return (\n this.args.responsiveExpandedRowComponent ?? 'weldnote-grid/simple-responsive-expanded-row'\n );\n }\n\n get visibleColumns() {\n if (!this.args.columns) return [];\n\n // For now, return all columns - breakpoint logic will be handled in CSS\n return this.args.columns;\n }\n\n get hiddenColumns() {\n if (!this.args.columns) return [];\n\n // This would be computed based on current breakpoint in a real implementation\n // For now, return columns that should be hidden on mobile/tablet\n return this.args.columns.filter((column) => {\n return (\n column.breakpoints &&\n column.breakpoints.length > 0 &&\n !column.breakpoints.includes('mobile')\n );\n });\n }\n\n get tableRows() {\n let rows = this.args.model;\n if (!rows) return [];\n\n if (rows.toArray) {\n rows = rows.slice();\n }\n\n // Add expanded property to each row for compatibility with cell components\n rows.forEach((row, index) => {\n if (!row.expanded) {\n set(row, 'expanded', this.expandedRows.has(row.id));\n }\n if (!row.id) {\n set(row, 'id', `row-${index}`); // Ensure each row has a unique ID\n }\n });\n return rows;\n }\n\n get hasData() {\n return this.tableRows && this.tableRows.length > 0;\n }\n\n @action\n toggleRow(row) {\n if (!row || !row.id) return;\n\n if (this.expandedRows.has(row.id)) {\n this.expandedRows.delete(row.id);\n } else {\n this.expandedRows.add(row.id);\n }\n // Trigger reactivity\n this.expandedRows = new Set(this.expandedRows);\n }\n\n @action\n onAfterResponsiveChange(matches) {\n if (matches.indexOf('desktop') > -1) {\n this.expandedRows.clear();\n this.expandedRows = new Set();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#each this.sortedContent as |group|}}\\n {{group.visualLabel}}{{#if (not-eq this.sortedContent.lastObject group)}}, {{/if}}\\n{{/each}}\", {\"contents\":\"{{#each this.sortedContent as |group|}}\\n {{group.visualLabel}}{{#if (not-eq this.sortedContent.lastObject group)}}, {{/if}}\\n{{/each}}\",\"moduleName\":\"weldnote/components/sorted-base-material-group.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/sorted-base-material-group.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { sort } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class SortedBaseMaterialGroup extends Component {\n @sort('content', function (a, b) {\n let sortProperty = 'groupOrder';\n let aProp = a.get(sortProperty);\n let bProp = b.get(sortProperty);\n if (aProp > bProp) {\n return -1;\n } else if (aProp < bProp) {\n return 1;\n }\n return 0;\n })\n sortedContent;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
    \\n {{#each @items as |item|}}\\n
  • \\n \\n {{#if item.complete}}\\n \\n {{/if}}\\n {{yield item}}\\n
  • \\n {{/each}}\\n
\", {\"contents\":\"
    \\n {{#each @items as |item|}}\\n
  • \\n \\n {{#if item.complete}}\\n \\n {{/if}}\\n {{yield item}}\\n
  • \\n {{/each}}\\n
\",\"moduleName\":\"weldnote/components/step-progress.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/step-progress.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{yield\\n (hash\\n isError=this.isTaskInError\\n isFinished=this.isTaskFinished\\n isRunning=this.isTaskRunning\\n taskStep=this.taskDescription\\n currentTask=this.task\\n )\\n}}\", {\"contents\":\"{{yield\\n (hash\\n isError=this.isTaskInError\\n isFinished=this.isTaskFinished\\n isRunning=this.isTaskRunning\\n taskStep=this.taskDescription\\n currentTask=this.task\\n )\\n}}\",\"moduleName\":\"weldnote/components/task-progress-provider.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/task-progress-provider.hbs\"}});\nimport { observes } from '@ember-decorators/object';\nimport Component from '@ember/component';\nimport { computed, get } from '@ember/object';\nimport { notEmpty } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport classic from 'ember-classic-decorator';\nimport Constants from 'weldnote/utils/constants';\n\nconst { TASK_STATUS } = Constants;\n\n@classic\nexport default class TaskProgressProvider extends Component {\n task = null;\n\n onFinish /* task */() {\n // Dummy empty action\n }\n\n @computed('task.state')\n get isTaskInError() {\n if (!isEmpty(this.task)) {\n return parseInt(this.task.state) === TASK_STATUS.IN_ERROR;\n }\n return false;\n }\n\n @notEmpty('task.taskIdentifier')\n hasTask;\n\n @computed('task.progressDescription')\n get taskDescription() {\n return get(this, 'task.progressDescription');\n }\n\n @computed('task.{state,progress}')\n get isTaskRunning() {\n let { hasTask, task } = this;\n if (hasTask) {\n let state = parseInt(task.state);\n let progress = parseInt(task.progress);\n return (state === TASK_STATUS.IN_PROGRESS || state === TASK_STATUS.INITIAL) && progress < 100;\n }\n return false;\n }\n\n @computed('task.{state,progress}')\n get isTaskFinished() {\n let { hasTask, task } = this;\n if (hasTask) {\n return parseInt(task.state) === TASK_STATUS.FINISHED || parseInt(task.progress) === 100;\n }\n return false;\n }\n\n @observes('isTaskFinished')\n taskFinishedObserver() {\n if (this.isTaskFinished) {\n this.onFinish(this.task);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasContextTask}}\\n
\\n {{#if this.isTaskInError}}\\n
\\n {{t \\\"components.task-progress.error-try-later\\\"}}\\n
\\n {{else}}\\n

{{#unless this.isTaskFinished}}{{/unless}}\\n {{this.contextTask.progress}}%\\n {{t (concat @translationKey \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute this.contextTaskDescription.value)}}- {{/unless}}\\n {{this.contextTaskDescription.value}}\\n

\\n \\n \\n {{this.contextTask.progress}}%\\n {{t (concat @translationKey \\\".\\\" this.contextTaskDescription.step)}}\\n {{this.contextTaskDescription.value}}\\n
\\n \\n {{#if this.isTaskFinished}}\\n {{t \\\"components.task-progress.task-finished\\\"}}\\n {{t \\\"components.task-progress.show-download-button\\\"}}\\n {{/if}}\\n {{/if}}\\n \\n{{/if}}\", {\"contents\":\"{{#if this.hasContextTask}}\\n
\\n {{#if this.isTaskInError}}\\n
\\n {{t \\\"components.task-progress.error-try-later\\\"}}\\n
\\n {{else}}\\n

{{#unless this.isTaskFinished}}{{/unless}}\\n {{this.contextTask.progress}}%\\n {{t (concat @translationKey \\\".\\\" this.contextTaskDescription.step)}}\\n {{#unless (is-empty-attribute this.contextTaskDescription.value)}}- {{/unless}}\\n {{this.contextTaskDescription.value}}\\n

\\n \\n \\n {{this.contextTask.progress}}%\\n {{t (concat @translationKey \\\".\\\" this.contextTaskDescription.step)}}\\n {{this.contextTaskDescription.value}}\\n
\\n \\n {{#if this.isTaskFinished}}\\n {{t \\\"components.task-progress.task-finished\\\"}}\\n {{t \\\"components.task-progress.show-download-button\\\"}}\\n {{/if}}\\n {{/if}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/task-progress.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/task-progress.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { alias, equal, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\n\nconst { TASK_STATUS } = Constants;\n\n@classic\n@classNames('task-progress')\nexport default class TaskProgress extends Component {\n contextType = null;\n\n @computed('instance.id')\n get hasContext() {\n return !isEmpty(get(this, 'instance.id'));\n }\n\n @notEmpty('contextTask')\n hasContextTask;\n\n @computed('tasks.[]')\n get contextTask() {\n let { tasks } = this;\n let contextTask = tasks.find((item) => {\n if (item.get('contextName') === this.contextType) {\n if (item.get('contextId') === get(this, 'instance.id')) {\n return true;\n }\n }\n return false;\n });\n\n if (!isEmpty(contextTask)) {\n return contextTask;\n }\n return null;\n }\n\n @computed('contextTask.progressDescription')\n get contextTaskDescription() {\n let description = get(this, 'contextTask.progressDescription');\n try {\n let descriptionJson = JSON.parse(description);\n return descriptionJson;\n } catch (err) {\n return {\n step: '',\n value: '',\n };\n }\n }\n\n @equal('contextTask.status', TASK_STATUS.IN_ERROR)\n isTaskInError;\n\n @alias('contextTask.taskIdentifier')\n contextTaskId;\n\n @computed('contextTask.{state,progress}')\n get isTaskRunning() {\n if (this.hasContextTask) {\n return (\n parseInt(get(this, 'contextTask.state')) === TASK_STATUS.IN_PROGRESS ||\n parseInt(get(this, 'contextTask.progress')) < 100\n );\n }\n return false;\n }\n\n @computed('contextTask.{state,progress}')\n get isTaskFinished() {\n if (this.hasContextTask) {\n return (\n parseInt(get(this, 'contextTask.state')) === TASK_STATUS.FINISHED ||\n parseInt(get(this, 'contextTask.progress')) === 100\n );\n }\n return false;\n }\n}\n","/*\nOveride the tooltip-on-element from emeber-tooltips as per\nhttps://github.com/sir-dunxalot/ember-tooltips#setting-defaults\n-*/\nimport TooltipOnElementComponent from 'ember-tooltips/components/tooltip-on-element';\n\nexport default TooltipOnElementComponent.extend({\n effect: 'fade',\n enableLazyRendering: true,\n});\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n

{{t\\n \\\"components.trial-help-screen.messages.prepared-videos\\\"\\n }}

\\n
\\n\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step1\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.pwps.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.pwps.button\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step2\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.pqr.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreatePQR}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.pqr.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step3\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.wps-single.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.wps-single.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\\n\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step4\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.wps-multiple.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.wps-multiple.button\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step5\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.wpq.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateCertificate}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.wpq.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step6\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.qmatrix.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateQMatrix}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.qmatrix.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\\n\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step7\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.welding-book.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWeldingBook}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.welding-book.button\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n\\n\\n\\n
\\n

{{t\\n \\\"components.trial-help-screen.messages.knowledge-base\\\"\\n }}

\\n {{t \\\"components.trial-help-screen.buttons\\\"}}\\n
\\n\\n\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.questions.where-add-new\\\"\\n }}

\\n
\\n \\n {{t \\\"model.miscellaneous-certificate.model-name\\\"}}\\n \\n
\\n\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.questions.schematics\\\"\\n }}

\\n
\\n \\n {{t \\\"model.groove-design.model-name\\\"}}\\n {{t \\\"model.weld-layer-configuration.model-name\\\"}}\\n \\n
\\n\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.questions.new-material\\\"\\n }}

\\n
\\n \\n {{t \\\"model.base-material.model-name\\\"}}\\n {{t \\\"model.filler-material.model-name\\\"}}\\n \\n
\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\", {\"contents\":\"\\n

{{t\\n \\\"components.trial-help-screen.messages.prepared-videos\\\"\\n }}

\\n
\\n\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step1\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.pwps.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.pwps.button\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step2\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.pqr.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreatePQR}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.pqr.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step3\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.wps-single.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.wps-single.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\\n\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step4\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.wps-multiple.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.wps-multiple.button\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step5\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.wpq.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateCertificate}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.wpq.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step6\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.qmatrix.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateQMatrix}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.qmatrix.button\\\"}}\\n {{/if}}\\n
\\n
\\n \\n\\n\\n
\\n
\\n
\\n
{{t\\n \\\"components.trial-help-screen.messages.step7\\\"\\n }}
\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.videos.welding-book.title\\\"\\n }}

\\n \\n
\\n
\\n {{#if this.userSession.canCreateWeldingBook}}\\n \\n {{t \\\"components.trial-help-screen.messages.videos.welding-book.button\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n\\n\\n\\n
\\n

{{t\\n \\\"components.trial-help-screen.messages.knowledge-base\\\"\\n }}

\\n {{t \\\"components.trial-help-screen.buttons\\\"}}\\n
\\n\\n\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.questions.where-add-new\\\"\\n }}

\\n
\\n \\n {{t \\\"model.miscellaneous-certificate.model-name\\\"}}\\n \\n
\\n\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.questions.schematics\\\"\\n }}

\\n
\\n \\n {{t \\\"model.groove-design.model-name\\\"}}\\n {{t \\\"model.weld-layer-configuration.model-name\\\"}}\\n \\n
\\n\\n \\n

{{t\\n \\\"components.trial-help-screen.messages.questions.new-material\\\"\\n }}

\\n
\\n \\n {{t \\\"model.base-material.model-name\\\"}}\\n {{t \\\"model.filler-material.model-name\\\"}}\\n \\n
\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/trial-help-screen.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/trial-help-screen.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class TrialHelpScreen extends Component {\n @service\n router;\n\n @service\n analytics;\n\n @service\n help;\n\n @service\n userSession;\n\n @tracked\n showVideo = false;\n\n @tracked\n videoId = null;\n\n @action\n routeAndTrack(link, event) {\n let { router, analytics } = this;\n analytics.trackEvent(event, {\n location: 'help-center',\n link,\n });\n router.transitionTo(link);\n }\n\n @action\n setVideo(id) {\n let { analytics, help } = this;\n this.showVideo = true;\n this.videoId = id;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(id), {\n location: 'help-center',\n });\n }\n\n @action\n hideVideo() {\n this.showVideo = false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n \\n
\\n \\n {{t \\\"components.trial-video-help.buttons.close\\\"}}\\n \\n\", {\"contents\":\"\\n
\\n \\n
\\n \\n {{t \\\"components.trial-video-help.buttons.close\\\"}}\\n \\n\",\"moduleName\":\"weldnote/components/trial-help-video.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/trial-help-video.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.showNotice}}\\n
\\n {{t \\\"components.trial-notice.trial-will-end\\\"}}\\n {{format-date date=this.trialEnd format=this.userSession.dateFormat}}\\n ({{t \\\"components.trial-notice.days-until-trial-end\\\" days=this.days}})\\n Please contact support\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if this.showNotice}}\\n
\\n {{t \\\"components.trial-notice.trial-will-end\\\"}}\\n {{format-date date=this.trialEnd format=this.userSession.dateFormat}}\\n ({{t \\\"components.trial-notice.days-until-trial-end\\\" days=this.days}})\\n Please contact support\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/trial-notice.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/trial-notice.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { service } from '@ember/service';\nimport { reads } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\n\n@classic\n@classNames('trial-notice')\nexport default class TrialNotice extends Component {\n @service\n userSession;\n\n @reads('account.accountValidUntil')\n trialEnd;\n\n @reads('account.daysUntilEndOfTrial')\n days;\n\n showNotice = true;\n\n daysForWarning = 3;\n\n @computed('days')\n get boxTypeClass() {\n let days = get(this, 'days');\n if (parseInt(days) < get(this, 'daysForWarning')) {\n return 'alert-danger';\n }\n return 'alert-info';\n }\n\n @computed('days')\n get buttonTypeClass() {\n let days = get(this, 'days');\n if (parseInt(days) < get(this, 'daysForWarning')) {\n return 'btn-danger';\n }\n return 'btn-primary';\n }\n\n @action\n closeNotice() {\n set(this, 'showNotice', false);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{yield}}\\n
\", {\"contents\":\"
\\n {{yield}}\\n
\",\"moduleName\":\"weldnote/components/ui-column.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-column.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class UiColumn extends Component {\n @tracked\n xsmall = null;\n\n @tracked\n small = null;\n\n @tracked\n medium = null;\n\n @tracked\n large = null;\n\n @tracked\n specific = null;\n\n get sizes() {\n let result = '';\n let { xsmall } = this.args;\n if (xsmall) {\n result += ` col-xs-${parseInt(12 / xsmall)}`;\n }\n let { small } = this.args;\n if (small) {\n result += ` col-sm-${parseInt(12 / small)}`;\n }\n let { medium } = this.args;\n if (medium) {\n result += ` col-md-${parseInt(12 / medium)}`;\n }\n let { large } = this.args;\n if (large) {\n result += ` col-lg-${parseInt(12 / large)}`;\n }\n let { specific } = this.args;\n if (specific) {\n result += ` col-${specific}`;\n }\n\n if (result.length === 0) {\n result = 'col-sm-6';\n }\n\n return result;\n }\n}\n","import Component from '@glimmer/component';\nimport { get, set, action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n\nexport default class BaseComponent extends Component {\n @service\n intl;\n\n get modelName() {\n return this.args.model.metadata.modelName;\n }\n\n get isRequired() {\n let { model, attribute } = this.args;\n return (\n get(model, `metadata.${attribute}.required`) ||\n get(model, `validations.${this.args.attribute}.presence`)\n );\n }\n\n get label() {\n let labelTranslationKey = `model.${this.modelName}.${this.args.attribute}.label`;\n if (!isEmpty(this.args.labelParams)) {\n return this.intl.t(labelTranslationKey, this.args.labelParams);\n } else {\n return this.intl.t(labelTranslationKey);\n }\n }\n\n get placeholder() {\n return this.intl.t(`model.${this.modelName}.${this.args.attribute}.placeholder`);\n }\n\n get help() {\n return this.intl.t(`model.${this.modelName}.${this.args.attribute}.help`);\n }\n\n get hasError() {\n let errors = get(this.args, `model.errors.${this.args.attribute}`);\n return errors && errors.length > 0;\n }\n\n get errors() {\n return get(this.args, `model.errors.${this.args.attribute}`);\n }\n\n updateValue(value) {\n set(this.args.model, this.args.attribute, value);\n }\n\n @action\n onUpdate(value) {\n if (this.args.onUpdate) {\n this.args.onUpdate(value);\n } else {\n this.updateValue(value);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n\", {\"contents\":\"\\n {{#each @errors as |error|}}\\n {{error.message}}\\n {{/each}}\\n\",\"moduleName\":\"weldnote/components/ui-form/errors.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/errors.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport Component from '@ember/component';\n\n@classic\n@tagName('')\nexport default class Errors extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{yield}}\", {\"contents\":\"{{yield}}\",\"moduleName\":\"weldnote/components/ui-form/generic-group.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/generic-group.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames, attributeBindings, classNameBindings } from '@ember-decorators/component';\nimport { notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\n@classNames('form-group')\n@classNameBindings('hasError')\n@attributeBindings('data-test-id')\nexport default class GenericGroup extends Component {\n errors = null;\n\n @notEmpty('errors')\n hasError;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=@inputComponent\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n{{else}}\\n \\n {{@inputComponent}}\\n \\n \\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=@inputComponent\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n{{else}}\\n \\n {{@inputComponent}}\\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class Group extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n labelParams=@labelParams\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n )\\n input=(component\\n \\\"ui-form/input/checkbox\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n disabled=@disabled\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n labelParams=@labelParams\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n )\\n input=(component\\n \\\"ui-form/input/checkbox\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n disabled=@disabled\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/checkbox.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/checkbox.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class Checkbox extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/date\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n data-id=@attribute\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/date\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n data-id=@attribute\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/date.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/date.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class DateComponent extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/decimal\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n attribute=@attribute\\n model=@model\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/decimal\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n attribute=@attribute\\n model=@model\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/decimal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/decimal.hbs\"}});\nimport { service } from '@ember/service';\nimport Base from 'weldnote/components/ui-form/base';\nimport { set, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport default class Decimal extends Base {\n @service\n userSession;\n\n @action\n onUpdate(value) {\n let separator = this.userSession.decimalSeparator;\n if (separator === ',') {\n if (!isEmpty(value)) {\n value = `${value}`.replace(',', '.');\n }\n }\n set(this.args.model, this.args.attribute, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/lov\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n options=@options\\n search=@search\\n searchField=@searchField\\n searchEnabled=@searchEnabled\\n noMatchesMessage=@noMatchesMessage\\n afterOptionsComponent=@afterOptionsComponent\\n onkeydown=@onkeydown\\n extra=@extra\\n data-id=@attribute\\n disabled=@disabled\\n renderInPlace=@renderInPlace\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/lov\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n options=@options\\n search=@search\\n searchField=@searchField\\n searchEnabled=@searchEnabled\\n noMatchesMessage=@noMatchesMessage\\n afterOptionsComponent=@afterOptionsComponent\\n onkeydown=@onkeydown\\n extra=@extra\\n data-id=@attribute\\n disabled=@disabled\\n renderInPlace=@renderInPlace\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/lov.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class Lov extends Base {\n search() {}\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/multi-lov\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n options=@options\\n searchField=@searchField\\n searchEnabled=@searchEnabled\\n search=@search\\n noMatchesMessage=@noMatchesMessage\\n disabled=@disabled\\n cssClass=@cssClass\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/multi-lov\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n options=@options\\n searchField=@searchField\\n searchEnabled=@searchEnabled\\n search=@search\\n noMatchesMessage=@noMatchesMessage\\n disabled=@disabled\\n cssClass=@cssClass\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/multi-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/multi-lov.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class MultiLov extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/select\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n options=@options\\n disabled=@disabled\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n {{#unless (eq @renderLabel false)}}\\n \\n {{/unless}}\\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/select\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n options=@options\\n disabled=@disabled\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n {{#unless (eq @renderLabel false)}}\\n \\n {{/unless}}\\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/select.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/select.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class Select extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/text-area\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n data-id=@attribute\\n rows=@rows\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/text-area\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n data-id=@attribute\\n rows=@rows\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/text-area.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/text-area.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class TextArea extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/text\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n hasError=this.hasError\\n data-id=@attribute\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n
\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/text\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n hasError=this.hasError\\n data-id=@attribute\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n
\\n{{else}}\\n
\\n \\n \\n \\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/text.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/text.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class Text extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-block)}}\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/upload\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n model=@model\\n attribute=@attribute\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n uploadId=@uploadId\\n maxFileSize=@maxFileSize\\n type=@type\\n icon=@icon\\n extensions=@extensions\\n data-id=@attribute\\n renderLabel=false\\n uploadName=@uploadName\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n{{else}}\\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"{{#if (has-block)}}\\n {{yield\\n (hash\\n label=(component\\n \\\"ui-form/label\\\"\\n label=this.label\\n isRequired=this.isRequired\\n tooltip=this.tooltip\\n componentId=@attribute\\n labelParams=@labelParams\\n )\\n input=(component\\n \\\"ui-form/input/upload\\\"\\n componentId=@attribute\\n onUpdate=this.onUpdate\\n isEditing=@isEditing\\n model=@model\\n attribute=@attribute\\n placeholder=this.placeholder\\n value=(get @model @attribute)\\n uploadId=@uploadId\\n maxFileSize=@maxFileSize\\n type=@type\\n icon=@icon\\n extensions=@extensions\\n data-id=@attribute\\n renderLabel=false\\n uploadName=@uploadName\\n )\\n help=(component \\\"ui-form/help-text\\\" help=this.help)\\n errors=(component \\\"ui-form/errors\\\" errors=this.errors)\\n )\\n }}\\n{{else}}\\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/group/upload.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/group/upload.hbs\"}});\nimport Base from 'weldnote/components/ui-form/base';\n\nexport default class Upload extends Base {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@help}}\", {\"contents\":\"{{@help}}\",\"moduleName\":\"weldnote/components/ui-form/help-text.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/help-text.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n
\\n \\n
\\n{{else}}\\n
\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n
\\n \\n
\\n{{else}}\\n
\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/checkbox.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/checkbox.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class Checkbox extends Component {\n get isChecked() {\n if (this.args.value === true) {\n return true;\n }\n return false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if @isEditing}}\\n \\n {{else}}\\n

{{this.displayValue}}

\\n {{/if}}\\n
\", {\"contents\":\"\\n {{#if @isEditing}}\\n \\n {{else}}\\n

{{this.displayValue}}

\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/ui-form/input/date.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/date.hbs\"}});\nimport { action, computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\n\nexport default class DateClass extends Component {\n @service\n userSession;\n\n get dateFormat() {\n return this.userSession.dateFormat;\n }\n\n yearRange = null;\n\n get displayValue() {\n let { value } = this.args;\n let { dateFormat } = this;\n if (!isEmpty(value)) {\n return moment(value).format(dateFormat);\n }\n return null;\n }\n\n @action\n formatDate(date, format) {\n // Show the date in the users timezone (as it was stored in UTC)\n let result = moment(date).format(format);\n return result;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n{{else}}\\n

{{this.decimalValue}}

\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n{{else}}\\n

{{this.decimalValue}}

\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/decimal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/decimal.hbs\"}});\nimport { service } from '@ember/service';\nimport Component from '@glimmer/component';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport default class Decimal extends Component {\n @service\n userSession;\n\n get separator() {\n return this.userSession.decimalSeparator;\n }\n\n get decimalValue() {\n let { separator } = this;\n if (separator !== '.') {\n let value = get(this.args, `model.${this.args.attribute}`);\n if (!isEmpty(value)) {\n let valueString = `${value}`;\n valueString = valueString.replace('.', separator);\n return valueString;\n }\n return value;\n } else {\n return get(this.args, `model.${this.args.attribute}`);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{else}}\\n

{{@value.visualLabel}}

\\n {{/if}}\\n
\", {\"contents\":\"\\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{else}}\\n

{{@value.visualLabel}}

\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/ui-form/input/lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/lov.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class Lov extends Component {\n get isSearchEnabled() {\n if (!isEmpty(this.args.searchEnabled)) {\n return this.args.searchEnabled;\n }\n return false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n{{else}}\\n

{{@value.visualLabel}}

\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n{{else}}\\n

{{@value.visualLabel}}

\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/multi-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/multi-lov.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class MultiLov extends Component {\n get isSearchEnabled() {\n if (!isEmpty(this.args.searchEnabled)) {\n return this.args.searchEnabled;\n }\n return false;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{option.label}}\\n \\n{{else}}\\n

{{this.displayValue}}

\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{option.label}}\\n \\n{{else}}\\n

{{this.displayValue}}

\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/select.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/select.hbs\"}});\nimport { action } from '@ember/object';\nimport Component from '@glimmer/component';\n\nexport default class Select extends Component {\n get currentValue() {\n let { value, options } = this.args;\n if (options) {\n let result = options.findBy('key', value);\n if (result) {\n return result;\n }\n }\n return null;\n }\n\n get displayValue() {\n let { value, options } = this.args;\n if (options) {\n let result = options.findBy('key', value);\n if (result) {\n return result.label;\n }\n }\n return '';\n }\n\n @action\n onChange(value) {\n if (this.args.onUpdate) {\n if (value) {\n this.args.onUpdate(value.key);\n } else {\n this.args.onUpdate(value);\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n \\n{{else}}\\n

{{@value}}

\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n \\n{{else}}\\n

{{@value}}

\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/text-area.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/text-area.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class TextArea extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n{{else}}\\n

{{@value}}

\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n{{else}}\\n

{{@value}}

\\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/text.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/text.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class Text extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#let (file-queue name=@uploadName onFileAdded=this.uploadImageToServer) as |queue|}}\\n \\n {{#if queue.files.length}}\\n {{t \\\"components.w-file-upload.uploading-file\\\"}}\\n
\\n \\n {{queue.progress}}%\\n {{t \\\"components.w-file-upload.percentage-complete\\\"}}\\n
\\n \\n {{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n {{/if}}\\n

\\n {{#if dropzone.active}}\\n {{t \\\"components.w-file-upload.drop-zone-message\\\"}}\\n {{/if}}\\n\\n \\n\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n {{#let (get @model (concat @attribute \\\".originalFilename\\\")) as |filename|}}\\n \\n \\n \\n Download\\n \\n {{#if this.shouldShowRemoveButton}}\\n \\n \\n \\n {{t \\\"components.w-file-upload.buttons.remove\\\"}}\\n \\n {{/if}}\\n {{/let}}\\n {{/if}}\\n {{#if this.hasError}}\\n

{{this.error}}

\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n {{/let}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (and this.hasIcon this.hasFile)}}\\n \\n {{/if}}\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n \\n {{t\\n \\\"components.w-file-upload.download-file-link\\\"\\n file=(get @model (concat @attribute \\\".originalFilename\\\"))\\n }}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isRemoving}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#let (file-queue name=@uploadName onFileAdded=this.uploadImageToServer) as |queue|}}\\n \\n {{#if queue.files.length}}\\n {{t \\\"components.w-file-upload.uploading-file\\\"}}\\n
\\n \\n {{queue.progress}}%\\n {{t \\\"components.w-file-upload.percentage-complete\\\"}}\\n
\\n \\n {{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n {{/if}}\\n

\\n {{#if dropzone.active}}\\n {{t \\\"components.w-file-upload.drop-zone-message\\\"}}\\n {{/if}}\\n\\n \\n\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n {{#let (get @model (concat @attribute \\\".originalFilename\\\")) as |filename|}}\\n \\n \\n \\n Download\\n \\n {{#if this.shouldShowRemoveButton}}\\n \\n \\n \\n {{t \\\"components.w-file-upload.buttons.remove\\\"}}\\n \\n {{/if}}\\n {{/let}}\\n {{/if}}\\n {{#if this.hasError}}\\n

{{this.error}}

\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n {{/let}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (and this.hasIcon this.hasFile)}}\\n \\n {{/if}}\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n \\n {{t\\n \\\"components.w-file-upload.download-file-link\\\"\\n file=(get @model (concat @attribute \\\".originalFilename\\\"))\\n }}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isRemoving}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/ui-form/input/upload.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/input/upload.hbs\"}});\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { set, get, action } from '@ember/object';\nimport { isHTMLSafe } from '@ember/template';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class WFileUpload extends Component {\n @service\n fileService;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n alertMessage;\n\n get renderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get acceptedTypes() {\n let { extensions } = this.args;\n let result = [];\n if (extensions.indexOf('pdf') > -1) {\n result.push('.pdf');\n result.push('application/pdf');\n }\n if (extensions.indexOf('png') > -1) {\n result.push('.png');\n result.push('image/png');\n }\n if (extensions.indexOf('jpeg') > -1) {\n result.push('.jpeg');\n result.push('image/jpeg');\n }\n if (extensions.indexOf('jpg') > -1) {\n result.push('.jpg');\n result.push('image/jpg');\n }\n if (extensions.indexOf('gif') > -1) {\n result.push('.gif');\n result.push('image/gif');\n }\n return result;\n }\n\n get uploadId() {\n return this.args.uploadId ?? 'file-upload';\n }\n\n @tracked\n icon = null;\n\n @tracked\n error = null;\n\n get hasIcon() {\n return !isEmpty(this.args.icon);\n }\n\n get hasError() {\n return !isEmpty(this.error);\n }\n\n name = 'file-upload';\n\n // Flag controlling the modal to remove the file\n @tracked\n isRemoving = false;\n\n get helpText() {\n return this.getTranslation('help');\n }\n\n get hasTooltip() {\n return !isEmpty(this.args.tooltipText);\n }\n\n get hasHelp() {\n let helpText = get(this.args, 'helpText');\n if (isHTMLSafe(helpText)) {\n return !isEmpty(helpText.toString());\n } else {\n return !isEmpty(helpText);\n }\n }\n\n get tooltipText() {\n if (!isEmpty(this.args.tooltip)) {\n return this.args.tooltip;\n }\n let tooltipTranslation = this.getTranslation('tooltip');\n if (!isEmpty(tooltipTranslation)) {\n return tooltipTranslation;\n }\n return '';\n }\n\n get hasFile() {\n return !isEmpty(this.fileReference);\n }\n\n onUpload(fileUpload) {\n // do nothing\n }\n\n get labelReference() {\n return `model.${get(this.args.model.metadata.modelName)}.${this.args.attribute}.label`;\n }\n\n get label() {\n if (!isEmpty(this.args.labelParams)) {\n return this.getTranslation('label', this.args.labelParams);\n } else {\n return this.getTranslation('label');\n }\n }\n\n get shouldShowRemoveButton() {\n return this.args.showRemoveButton ?? true;\n }\n\n getTranslation(property, options = {}) {\n let translation = this.intl.t(\n `model.${this.args.model.metadata.modelName}.${this.args.attribute}.${property}`,\n options\n );\n if (!isEmpty(translation)) {\n return translation.toString();\n }\n return '';\n }\n\n getFile() {\n return get(this.args, `model.${this.args.attribute}`);\n }\n\n get fileReference() {\n let downloadPath = get(this.args.model, `${get(this.args, 'attribute')}.downloadPath`);\n if (!isEmpty(downloadPath)) {\n return downloadPath;\n }\n return '';\n }\n\n @action\n async uploadImageToServer(file) {\n let { size, name: filename, type: contentType } = file;\n let { type } = this.args;\n\n let { error } = file;\n if (!isEmpty(error)) {\n let { code } = error;\n if (code === -600) {\n let message = `File to big, maximum size is Kb`;\n this.error = message;\n this.alertMessage.error(message);\n }\n if (code === -601) {\n let message = `Wrong extension, compatible extensions are: ${this.extensions}`;\n this.error = message;\n this.alertMessage.error(message);\n }\n return;\n } else {\n this.error = null;\n }\n\n try {\n let result = await this.fileService.getFileUploadRequest(filename, type, contentType, size);\n let { filename: newFilename, url, credentials, fileUploadId } = result;\n try {\n await file.upload(url, { data: { ...credentials, name: newFilename } });\n let upload = await this.store.findRecord('file-upload', fileUploadId);\n set(this.args.model, `${this.args.attribute}`, upload);\n this.onUpload(upload);\n } catch (e) {\n console.log(`Could not upload file ${newFilename} due to`);\n console.log(e);\n }\n } catch (reason) {\n this.alertMessage.error(`Error while uploading ${filename}`);\n console.log(`Could not upload file ${filename} due to`);\n console.log(reason);\n }\n }\n\n @action\n onRemove() {\n set(this.args, `model.${this.args.attribute}`, null);\n this.isRemoving = false;\n }\n\n @action\n validateFile(file) {\n if (this.acceptedTypes.length > 0) {\n if (!this.acceptedTypes.includes(file.type)) {\n this.alertMessage.error(this.intl.t('generic.error.file-upload-wrong-extension', {\n types: this.args.extensions,\n type: file.type\n }));\n return false;\n }\n }\n if (this.args.maxFileSize && this.args.maxFileSize > 0) {\n if (file.size > this.args.maxFileSize) {\n this.alertMessage.error(this.intl.t('generic.error.file-upload-max-file-size', {\n maxSize: this.formatBytes(this.args.maxFileSize),\n fileSize: this.formatBytes(file.size)\n }))\n return false;\n } \n }\n return true;\n }\n\n formatBytes(bytes) {\n if (bytes < 1024) {\n return bytes + ' B';\n } else if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(2) + ' KB';\n } else {\n return (bytes / (1024 * 1024)).toFixed(2) + ' MB';\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/ui-form/label.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/label.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\n\nexport default class Label extends Component {\n get hasTooltip() {\n return !isEmpty(this.args.tooltip);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{yield\\n (hash\\n text=(component \\\"ui-form/group/text\\\" model=@model isEditing=@isEditing)\\n checkbox=(component \\\"ui-form/group/checkbox\\\" model=@model isEditing=@isEditing)\\n lov=(component \\\"ui-form/group/lov\\\" model=@model isEditing=@isEditing)\\n multi-lov=(component \\\"ui-form/group/multi-lov\\\" model=@model isEditing=@isEditing)\\n select=(component \\\"ui-form/group/select\\\" model=@model isEditing=@isEditing)\\n date=(component \\\"ui-form/group/date\\\" model=@model isEditing=@isEditing)\\n decimal=(component \\\"ui-form/group/decimal\\\" model=@model isEditing=@isEditing)\\n text-area=(component \\\"ui-form/group/text-area\\\" model=@model isEditing=@isEditing)\\n upload=(component \\\"ui-form/group/upload\\\" model=@model isEditing=@isEditing)\\n )\\n}}\", {\"contents\":\"{{yield\\n (hash\\n text=(component \\\"ui-form/group/text\\\" model=@model isEditing=@isEditing)\\n checkbox=(component \\\"ui-form/group/checkbox\\\" model=@model isEditing=@isEditing)\\n lov=(component \\\"ui-form/group/lov\\\" model=@model isEditing=@isEditing)\\n multi-lov=(component \\\"ui-form/group/multi-lov\\\" model=@model isEditing=@isEditing)\\n select=(component \\\"ui-form/group/select\\\" model=@model isEditing=@isEditing)\\n date=(component \\\"ui-form/group/date\\\" model=@model isEditing=@isEditing)\\n decimal=(component \\\"ui-form/group/decimal\\\" model=@model isEditing=@isEditing)\\n text-area=(component \\\"ui-form/group/text-area\\\" model=@model isEditing=@isEditing)\\n upload=(component \\\"ui-form/group/upload\\\" model=@model isEditing=@isEditing)\\n )\\n}}\",\"moduleName\":\"weldnote/components/ui-form/provider.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-form/provider.hbs\"}});\nimport Component from '@glimmer/component';\nimport { set, action } from '@ember/object';\n\nexport default class Provider extends Component {\n @action\n onUpdate(attribute, value) {\n set(this.args.model, attribute, value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n
\\n
\\n {{@title}}\\n {{yield (hash title=(component \\\"blank-template\\\"))}}\\n
\\n
\\n {{yield (hash body=(component \\\"blank-template\\\"))}}\\n
\\n
\\n {{yield (hash footer=(component \\\"blank-template\\\"))}}\\n
\\n
\\n\", {\"contents\":\"\\n
\\n
\\n {{@title}}\\n {{yield (hash title=(component \\\"blank-template\\\"))}}\\n
\\n
\\n {{yield (hash body=(component \\\"blank-template\\\"))}}\\n
\\n
\\n {{yield (hash footer=(component \\\"blank-template\\\"))}}\\n
\\n
\\n\",\"moduleName\":\"weldnote/components/ui-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-modal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class UiModal extends Component {\n type = 'regular';\n\n @computed('type')\n get targetAttachment() {\n if (this.type === 'regular') {\n return 'center';\n } else if (this.type === 'full-width') {\n return 'none';\n }\n }\n\n @computed('type')\n get containerClasses() {\n if (this.type === 'full-width') {\n return 'centered-scrolling-container ';\n }\n return '';\n }\n\n @computed('type')\n get wrapperClasses() {\n if (this.type === 'full-width') {\n return 'centered-scrolling-wrapper ';\n }\n return '';\n }\n\n @computed('type')\n get overlayClasses() {\n if (this.type === 'full-width') {\n return 'centered-scrolling-overlay ';\n }\n return '';\n }\n\n bodyVariant = 'default';\n\n @computed('bodyVariant')\n get bodyVariantClasses() {\n if (isEmpty(this.bodyVariant)) {\n return 'px-5 py-6 bg-white';\n }\n if (this.bodyVariant === 'default') {\n return 'px-5 py-6 bg-white';\n }\n\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if (has-value @title)}}\\n \\n {{@title}}\\n {{#if (has-value @titleSmall)}}\\n {{@titleSmall}}\\n {{/if}}\\n {{#if this.isCollapsible}}\\n {{#if this.isOpen}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n {{else}}\\n {{yield (hash title=\\\"blank-template\\\")}}\\n {{/if}}\\n {{#if this.isOpen}}\\n \\n {{yield}}\\n \\n {{/if}}\\n\", {\"contents\":\"\\n {{#if (has-value @title)}}\\n \\n {{@title}}\\n {{#if (has-value @titleSmall)}}\\n {{@titleSmall}}\\n {{/if}}\\n {{#if this.isCollapsible}}\\n {{#if this.isOpen}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n
\\n {{/if}}\\n {{/if}}\\n \\n {{else}}\\n {{yield (hash title=\\\"blank-template\\\")}}\\n {{/if}}\\n {{#if this.isOpen}}\\n \\n {{yield}}\\n \\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/ui-panel.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-panel.hbs\"}});\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport default class UiPanel extends Component {\n get isCollapsible() {\n return this.args.collapsible ?? false;\n }\n\n @tracked\n openState = null;\n\n get isOpen() {\n if (this.openState != null) {\n return this.openState;\n } else if (!isEmpty(this.args.open)) {\n return this.args.open;\n } else {\n return true;\n }\n }\n\n get bodyVariantClasses() {\n if (this.args.bodyVariant === 'white') {\n return 'bg-white';\n }\n if (this.args.bodyVariant === 'none') {\n return '';\n }\n return 'px-5 py-6 bg-off-white';\n }\n\n get showTopBorder() {\n if (!isEmpty(this.args.showTopBorder)) {\n return this.args.showTopBorder;\n }\n return true;\n }\n\n @action\n toggle() {\n if (this.isCollapsible) {\n this.openState = !this.isOpen;\n }\n }\n\n @action\n toggleOnKey(event) {\n if (this.isCollapsible && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.toggle();\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{yield}}\\n
\", {\"contents\":\"
\\n {{yield}}\\n
\",\"moduleName\":\"weldnote/components/ui-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/ui-row.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (gt this.tracker.count 0)}}\\n
\\n \\n {{svg-jar \\\"exclamation-circle\\\" class=\\\"w-10\\\"}}\\n {{#if (gt this.tracker.count 0)}}\\n {{this.tracker.count}}\\n {{/if}}\\n \\n \\n
    \\n {{#if this.tracker.hasWeldingMap}}\\n
  • \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n {{t \\\"components.unsaved-work-list.unsaved-welding-map\\\"}}\\n
    \\n
    \\n
    \\n {{#unless this.isWeldingMapRoute}}\\n \\n \\n {{/unless}}\\n
    \\n
  • \\n {{/if}}\\n {{#if this.tracker.hasWeldingBook}}\\n
  • \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n {{t \\\"components.unsaved-work-list.unsaved-welding-book\\\"}}\\n
    \\n
    \\n
    \\n {{#unless this.isWeldingBookRoute}}\\n \\n \\n {{/unless}}\\n
    \\n
  • \\n
  • \\n {{/if}}\\n
\\n
\\n{{/if}}\", {\"contents\":\"{{#if (gt this.tracker.count 0)}}\\n
\\n \\n {{svg-jar \\\"exclamation-circle\\\" class=\\\"w-10\\\"}}\\n {{#if (gt this.tracker.count 0)}}\\n {{this.tracker.count}}\\n {{/if}}\\n \\n \\n
    \\n {{#if this.tracker.hasWeldingMap}}\\n
  • \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n {{t \\\"components.unsaved-work-list.unsaved-welding-map\\\"}}\\n
    \\n
    \\n
    \\n {{#unless this.isWeldingMapRoute}}\\n \\n \\n {{/unless}}\\n
    \\n
  • \\n {{/if}}\\n {{#if this.tracker.hasWeldingBook}}\\n
  • \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n {{t \\\"components.unsaved-work-list.unsaved-welding-book\\\"}}\\n
    \\n
    \\n
    \\n {{#unless this.isWeldingBookRoute}}\\n \\n \\n {{/unless}}\\n
    \\n
  • \\n
  • \\n {{/if}}\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/unsaved-work-list.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/unsaved-work-list.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { classNames } from '@ember-decorators/component';\nimport { service } from '@ember/service';\nimport { equal } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\n@classNames('dropdown')\nexport default class UnsavedWorkList extends Component {\n @service('instanceTracker')\n tracker;\n\n @service\n intl;\n\n @equal('currentRoute', 'welding-map.new')\n isWeldingMapRoute;\n\n @equal('currentRoute', 'welding-book.new')\n isWeldingBookRoute;\n\n @action\n trashWeldingMap() {\n this.tracker.discardWeldingMap();\n }\n\n @action\n trashWeldingBook() {\n this.tracker.discardWeldingBook();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#let (file-queue name=@uploadName onFileAdded=(perform this.uploadImageToServer)) as |queue|}}\\n \\n {{#if queue.files.length}}\\n {{t \\\"components.w-file-upload.uploading-file\\\"}}\\n
\\n \\n {{queue.progress}}%\\n {{t \\\"components.w-file-upload.percentage-complete\\\"}}\\n
\\n \\n {{else}}\\n\\n \\n
\\n \\n
\\n\\n {{/if}}\\n
\\n{{/let}}\\n\\n{{#if this.hasError}}\\n
\\n \\n {{this.error}}\\n \\n
\\n{{/if}}\", {\"contents\":\"{{#let (file-queue name=@uploadName onFileAdded=(perform this.uploadImageToServer)) as |queue|}}\\n \\n {{#if queue.files.length}}\\n {{t \\\"components.w-file-upload.uploading-file\\\"}}\\n
\\n \\n {{queue.progress}}%\\n {{t \\\"components.w-file-upload.percentage-complete\\\"}}\\n
\\n \\n {{else}}\\n\\n \\n
\\n \\n
\\n\\n {{/if}}\\n
\\n{{/let}}\\n\\n{{#if this.hasError}}\\n
\\n \\n {{this.error}}\\n \\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/upload-base-sketch.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/upload-base-sketch.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { task } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\nimport Constants from 'weldnote/utils/constants';\nimport { action } from '@ember/object';\n\nconst { FILE_CONTEXT } = Constants;\n\nexport default class UploadWithoutModelComponent extends Component {\n @service\n fileService;\n\n @service\n intl;\n\n @service\n store;\n\n @service('alert-message')\n alert;\n\n @tracked\n error = '';\n\n get hasError() {\n return !isEmpty(this.error);\n }\n\n uploadImageToServer = task(async (file) => {\n let { alert, fileService, store, intl } = this;\n let { size, name: filename, type: contentType, error } = file;\n\n if (!isEmpty(error)) {\n let { code } = error;\n if (code === -600) {\n this.error = intl.t('components.upload-base-sketch.error.image-too-large');\n alert.error(this.error);\n }\n if (code === -601) {\n let message = intl.t('components.upload-base-sketch.error.extensions');\n this.error = message;\n alert.error(message);\n }\n return;\n } else {\n this.error = null;\n }\n\n try {\n let { url, credentials, fileUploadId } = await fileService.getFileUploadRequest(\n filename,\n FILE_CONTEXT.COMPANY_LOGO,\n contentType,\n size\n );\n await file.upload(url, { data: { ...credentials, name: filename } });\n\n let fileUpload = await store.findRecord('file-upload', fileUploadId);\n let result = await fileService.getFileRetrieveRequestForUpload(fileUpload);\n this.args.onUpload(result.url, fileUpload);\n return result;\n } catch (e) {\n alert.error(`Error while uploading ${filename}`);\n console.log(`Could not upload file ${filename} due to`);\n console.log(e);\n }\n });\n\n @action\n validateFile(file) {\n let acceptedTypes = ['.png', '.jpg', '.jpeg', 'image/png', 'image/jpg', 'image/jpeg']\n if (!acceptedTypes.includes(file.type)) {\n this.alert.error(this.intl.t('generic.error.file-upload-wrong-extension', {\n types: 'png/jpg/jpeg',\n type: file.type\n }));\n return false;\n }\n return true;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n\\n
\\n
\\n \\n {{#if this.isSavingUser}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.user-profile.save-button\\\"}}\\n \\n\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n\\n
\\n {{t \\\"weldcloud.settings.links.user-profile\\\"}}\\n
\\n
\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\\"{{option.label}}\\\"\\n {{option.label}}\\n \\n \\n\\n \\n \\n {{option.label}}\\n ({{t (concat \\\"components.user-profile.\\\" option.translation)}})\\n \\n \\n \\n\\n\\n\\n\\n \\n \\n {{#if (is-empty this.account.renderedSignaturePath)}}\\n {{t \\\"components.user-profile.messages.no-signature\\\"}}\\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if (is-empty this.account.renderedSignaturePath)}}\\n \\n {{t \\\"components.user-profile.buttons.add-signature\\\"}}\\n {{else}}\\n \\n {{t \\\"components.user-profile.buttons.replace-signature\\\"}}\\n {{/if}}\\n \\n\\n {{#if (has-value this.account.renderedSignaturePath)}}\\n \\n \\n {{t \\\"components.user-profile.buttons.remove-signature\\\"}}\\n \\n {{/if}}\\n \\n \\n\\n\\n\\n \\n \\n
\\n \\n
\\n {{t\\n \\\"components.user-profile.email-notifications.help.expire-certificates-today\\\"\\n }}\\n
\\n \\n
\\n \\n
\\n {{t\\n \\\"components.user-profile.email-notifications.help.expire-certificates-30-days\\\"\\n }}\\n
\\n
\\n {{#if (gt this.allCompanies.length 1)}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n {{/if}}\\n
\\n\\n\\n\\n{{#if this.isShowingSignaturePad}}\\n \\n \\n {{t\\n \\\"components.user-profile.messages.draw-signature-instructions\\\"\\n }}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingSignatureRemovalConfirmation}}\\n \\n{{/if}}\", {\"contents\":\"\\n\\n
\\n
\\n \\n {{#if this.isSavingUser}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"components.user-profile.save-button\\\"}}\\n \\n\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n\\n
\\n {{t \\\"weldcloud.settings.links.user-profile\\\"}}\\n
\\n
\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\\"{{option.label}}\\\"\\n {{option.label}}\\n \\n \\n\\n \\n \\n {{option.label}}\\n ({{t (concat \\\"components.user-profile.\\\" option.translation)}})\\n \\n \\n \\n\\n\\n\\n\\n \\n \\n {{#if (is-empty this.account.renderedSignaturePath)}}\\n {{t \\\"components.user-profile.messages.no-signature\\\"}}\\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n {{#if (is-empty this.account.renderedSignaturePath)}}\\n \\n {{t \\\"components.user-profile.buttons.add-signature\\\"}}\\n {{else}}\\n \\n {{t \\\"components.user-profile.buttons.replace-signature\\\"}}\\n {{/if}}\\n \\n\\n {{#if (has-value this.account.renderedSignaturePath)}}\\n \\n \\n {{t \\\"components.user-profile.buttons.remove-signature\\\"}}\\n \\n {{/if}}\\n \\n \\n\\n\\n\\n \\n \\n
\\n \\n
\\n {{t\\n \\\"components.user-profile.email-notifications.help.expire-certificates-today\\\"\\n }}\\n
\\n \\n
\\n \\n
\\n {{t\\n \\\"components.user-profile.email-notifications.help.expire-certificates-30-days\\\"\\n }}\\n
\\n
\\n {{#if (gt this.allCompanies.length 1)}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n {{/if}}\\n
\\n\\n\\n\\n{{#if this.isShowingSignaturePad}}\\n \\n \\n {{t\\n \\\"components.user-profile.messages.draw-signature-instructions\\\"\\n }}\\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n{{/if}}\\n\\n{{#if this.isShowingSignatureRemovalConfirmation}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/user-profile.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/user-profile.hbs\"}});\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\nimport SignaturePad from 'signature_pad';\nimport Constants from 'weldnote/utils/constants';\n\nconst { FILE_CONTEXT } = Constants;\n\nexport default class UserProfile extends Component {\n @service\n userSession;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n alertMessage;\n\n @service\n loading;\n\n @service\n fileService;\n\n @alias('data.companyOptions')\n allCompanies;\n\n @tracked\n isSavingUser = false;\n\n @alias('userSession.account')\n account;\n\n @tracked\n decimalSeparator;\n\n @tracked\n isShowingSignaturePad = false;\n\n @tracked\n isShowingSignatureRemovalConfirmation = false;\n\n signaturePad;\n\n languageOptions = [\n {\n id: 'en-us',\n flagPath: 'en',\n label: 'English',\n },\n {\n id: 'pt-pt',\n flagPath: 'pt',\n label: 'Português - Portugal',\n },\n {\n id: 'pt-br',\n flagPath: 'br',\n label: 'Português - Brasil',\n },\n {\n id: 'es-es',\n flagPath: 'es',\n label: 'Español',\n },\n {\n id: 'de-de',\n flagPath: 'de',\n label: 'Deutsche',\n },\n {\n id: 'fr-fr',\n flagPath: 'fr',\n label: 'Français',\n },\n ];\n\n decimalSeparatorOptions = [\n {\n id: ',',\n label: ',',\n translation: 'comma',\n },\n {\n id: '.',\n label: '.',\n translation: 'dot',\n },\n ];\n\n constructor() {\n super(...arguments);\n let separator = this.userSession.decimalSeparator;\n this.decimalSeparator = this.decimalSeparatorOptions.findBy('id', separator);\n }\n\n get language() {\n let findLanguage = this.userSession.userLanguage;\n if (findLanguage === 'pt') {\n findLanguage = 'pt-pt';\n } else if (findLanguage === 'br') {\n findLanguage = 'pt-br';\n }\n let currentLanguage = this.languageOptions.findBy('id', findLanguage);\n return currentLanguage;\n }\n\n @action\n update() {\n let { intl, userSession, alertMessage, account, loading } = this;\n if (!this.decimalSeparator) {\n alertMessage.error('A decimal separator must be selected');\n return;\n }\n this.isSavingUser = true;\n this.account.decimalSeparator = this.decimalSeparator.id;\n loading.block();\n account\n .save()\n .then((savedAccount) => {\n if (!isEmpty(savedAccount.decimalSeparator)) {\n userSession.set('separatorOfDecimals', savedAccount.decimalSeparator);\n }\n alertMessage.success(intl.t('components.user-profile.settings-updated.message'));\n })\n .finally(() => {\n this.isSavingUser = false;\n loading.unblock();\n });\n }\n\n @action\n initSignaturePad() {\n let canvas = document.querySelector('canvas');\n this.signaturePad = new SignaturePad(canvas, {\n penColor: 'blue',\n });\n }\n\n @action\n closeSignaturePad() {\n this.isShowingSignaturePad = false;\n this.signaturePad = null;\n }\n\n @action\n async saveSignature() {\n let { signaturePad, loading, fileService, uploader, alertMessage, intl } = this;\n loading.block();\n\n let signatureImage = signaturePad.toDataURL('image/png');\n let signatureUploadedFile;\n\n if (isEmpty(this.account.signature)) {\n signatureUploadedFile = await fileService.uploadNewBase64Image.perform(\n this.account.name,\n signatureImage,\n FILE_CONTEXT.SIGNATURE\n );\n } else {\n signatureUploadedFile = await fileService.updateExistingBase64Image.perform(\n this.account.signature.id,\n signatureImage,\n FILE_CONTEXT.SIGNATURE\n );\n }\n\n this.account.signature = signatureUploadedFile;\n this.account = await this.account.save();\n\n this.alertMessage.success(intl.t('components.user-profile.messages.save-signature-success'));\n this.isShowingSignaturePad = false;\n loading.unblock();\n }\n\n @action\n async removeSignature() {\n let { loading, alertMessage, intl } = this;\n loading.block();\n\n this.account.signature = null;\n this.account = await this.account.save();\n\n this.alertMessage.success(intl.t('components.user-profile.messages.remove-signature-success'));\n this.isShowingSignatureRemovalConfirmation = false;\n loading.unblock();\n }\n\n @action\n dummy() {}\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#unless this.isAddingCredential}}\\n
\\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.add-credential\\\"}}\\n \\n
\\n {{/unless}}\\n\\n {{#if this.isAddingCredential}}\\n
\\n \\n \\n \\n \\n \\n \\n {{get this.levelLabelsMap option}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.savedCredentials as |credential|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.ndt-credential.testType.label\\\"}}{{t \\\"model.ndt-credential.level.label\\\"}}{{t \\\"model.ndt-credential.number.label\\\"}}{{t \\\"model.ndt-credential.validUntil.label\\\"}}{{t \\\"model.ndt-credential.certificate.label\\\"}}
{{get credential \\\"testType.visualLabel\\\"}}{{get this.levelLabelsMap (get credential \\\"level\\\")}}{{get credential \\\"number\\\"}}\\n {{format-date date=(get credential \\\"validUntil\\\")}}\\n {{#if (this.isCredentialExpired credential)}}\\n \\n \\n \\n \\n {{/if}}\\n \\n {{#let (get credential \\\"certificate.downloadPath\\\") as |downloadPath|}}\\n {{#if (has-value downloadPath)}}\\n \\n \\n {{get credential \\\"certificate.originalFilename\\\"}}\\n \\n {{/if}}\\n {{/let}}\\n \\n
\\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.edit\\\"}}\\n \\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.remove\\\"}}\\n \\n
\\n
\\n {{t \\\"components.user-profile/ndt-credentials.no-credentials\\\"}}\\n
\\n\\n {{#if this.isShowingDeleteModal}}\\n \\n {{/if}}\\n\\n {{#if this.isShowingReplaceModal}}\\n \\n \\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.duplicate-message\\\"}}\\n \\n \\n \\n \\n
\\n \\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.replace\\\"}}\\n \\n
\\n
\\n \\n {{/if}}\\n\", {\"contents\":\"\\n {{#unless this.isAddingCredential}}\\n
\\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.add-credential\\\"}}\\n \\n
\\n {{/unless}}\\n\\n {{#if this.isAddingCredential}}\\n
\\n \\n \\n \\n \\n \\n \\n {{get this.levelLabelsMap option}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n {{/if}}\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.savedCredentials as |credential|}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.ndt-credential.testType.label\\\"}}{{t \\\"model.ndt-credential.level.label\\\"}}{{t \\\"model.ndt-credential.number.label\\\"}}{{t \\\"model.ndt-credential.validUntil.label\\\"}}{{t \\\"model.ndt-credential.certificate.label\\\"}}
{{get credential \\\"testType.visualLabel\\\"}}{{get this.levelLabelsMap (get credential \\\"level\\\")}}{{get credential \\\"number\\\"}}\\n {{format-date date=(get credential \\\"validUntil\\\")}}\\n {{#if (this.isCredentialExpired credential)}}\\n \\n \\n \\n \\n {{/if}}\\n \\n {{#let (get credential \\\"certificate.downloadPath\\\") as |downloadPath|}}\\n {{#if (has-value downloadPath)}}\\n \\n \\n {{get credential \\\"certificate.originalFilename\\\"}}\\n \\n {{/if}}\\n {{/let}}\\n \\n
\\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.edit\\\"}}\\n \\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.remove\\\"}}\\n \\n
\\n
\\n {{t \\\"components.user-profile/ndt-credentials.no-credentials\\\"}}\\n
\\n\\n {{#if this.isShowingDeleteModal}}\\n \\n {{/if}}\\n\\n {{#if this.isShowingReplaceModal}}\\n \\n \\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.duplicate-message\\\"}}\\n \\n \\n \\n \\n
\\n \\n \\n \\n {{t \\\"components.user-profile/ndt-credentials.replace\\\"}}\\n \\n
\\n
\\n \\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/user-profile/ndt-credentials.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/user-profile/ndt-credentials.hbs\"}});\nimport Component from '@glimmer/component';\nimport { action } from '@ember/object';\nimport { get, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { task } from 'ember-concurrency';\nimport { helper } from '@ember/component/helper';\nimport moment from 'moment';\nimport { isEmpty } from '@ember/utils';\n\nexport default class NdtCredentials extends Component {\n @service\n store: any;\n\n @service('weldnote-data')\n data: any;\n\n @service\n alertMessage: any;\n\n @service\n intl: any;\n\n @tracked\n _credentialsVersion = 0;\n\n get savedCredentials() {\n this._credentialsVersion; // consume tracked property to invalidate\n return this.store.peekAll('ndt-credential').filter((c: any) => !get(c, 'isNew'));\n }\n\n loadCredentials = task(async () => {\n await this.store.query('ndt-credential', {\n include: 'test-type,certificate',\n sort: 'test-type.id',\n });\n this._credentialsVersion++;\n });\n\n @tracked\n isAddingCredential = false;\n\n @tracked\n newCredential: any = null;\n\n @tracked\n isShowingDeleteModal = false;\n\n @tracked\n credentialToDelete: any = null;\n\n @tracked\n isShowingReplaceModal = false;\n\n @tracked\n existingCredentialToReplace: any = null;\n\n get isEditing() {\n return this.newCredential && !get(this.newCredential, 'isNew');\n }\n\n get ndtTestTypeOptions() {\n return this.data.nonDestructiveTestOptions;\n }\n\n levelOptions = ['L1', 'L2', 'L3'];\n\n get levelLabelsMap(): Record {\n return {\n L1: this.intl.t('components.user-profile/ndt-credentials.level-1'),\n L2: this.intl.t('components.user-profile/ndt-credentials.level-2'),\n L3: this.intl.t('components.user-profile/ndt-credentials.level-3'),\n };\n }\n\n isCredentialExpired = helper(([credential]: [any]) => {\n let date = get(credential, 'validUntil');\n if (!isEmpty(date)) {\n return moment(date).isBefore(moment(), 'day');\n }\n return false;\n });\n\n @action\n addCredential() {\n let credential = this.store.createRecord('ndt-credential');\n this.newCredential = credential;\n this.isAddingCredential = true;\n }\n\n @action\n cancelAddCredential() {\n if (this.newCredential) {\n if (get(this.newCredential, 'isNew')) {\n this.newCredential.unloadRecord();\n } else {\n this.newCredential.rollbackAttributes();\n }\n }\n this.newCredential = null;\n this.isAddingCredential = false;\n }\n\n @action\n editCredential(credential: any) {\n this.newCredential = credential;\n this.isAddingCredential = true;\n }\n\n @action\n confirmDeleteCredential(credential: any) {\n this.credentialToDelete = credential;\n this.isShowingDeleteModal = true;\n }\n\n @action\n cancelDeleteCredential() {\n this.credentialToDelete = null;\n this.isShowingDeleteModal = false;\n }\n\n @action\n setTestType(value: any) {\n set(this.newCredential, 'testType', value);\n }\n\n @action\n setLevel(value: any) {\n set(this.newCredential, 'level', value);\n }\n\n @action\n setNumber(value: any) {\n set(this.newCredential, 'number', value);\n }\n\n @action\n setValidUntil(value: any) {\n set(this.newCredential, 'validUntil', value);\n }\n\n _findExistingCredentialForTestType(testType: any): any {\n if (!testType) return null;\n const testTypeId = get(testType, 'id');\n return this.savedCredentials.find((c: any) => {\n return get(c, 'testType.id') === testTypeId && c !== this.newCredential;\n });\n }\n\n saveCredential = task({ drop: true }, async () => {\n if (!this.newCredential.validate()) {\n return;\n }\n\n // Check for duplicate test type\n const existing = this._findExistingCredentialForTestType(get(this.newCredential, 'testType'));\n if (existing) {\n this.existingCredentialToReplace = existing;\n this.isShowingReplaceModal = true;\n return;\n }\n\n await this._performSave();\n });\n\n @action\n cancelReplaceCredential() {\n this.existingCredentialToReplace = null;\n this.isShowingReplaceModal = false;\n }\n\n confirmReplaceCredential = task({ drop: true }, async () => {\n this.isShowingReplaceModal = false;\n const existing = this.existingCredentialToReplace;\n this.existingCredentialToReplace = null;\n\n // Copy data from the credential being saved to the existing one\n set(existing, 'testType', get(this.newCredential, 'testType'));\n set(existing, 'level', get(this.newCredential, 'level'));\n set(existing, 'number', get(this.newCredential, 'number'));\n set(existing, 'validUntil', get(this.newCredential, 'validUntil'));\n set(existing, 'certificate', get(this.newCredential, 'certificate'));\n\n if (get(this.newCredential, 'isNew')) {\n // Adding: discard the unsaved record and unload it from the store\n this.newCredential.unloadRecord();\n } else {\n // Editing: delete the old record since we're merging into the existing one\n await this.newCredential.destroyRecord();\n this._credentialsVersion++;\n }\n this.newCredential = existing;\n\n await this._performSave();\n });\n\n async _performSave() {\n try {\n await this.newCredential.save();\n this.alertMessage.success(\n this.intl.t('components.user-profile/ndt-credentials.saved-success')\n );\n this.isAddingCredential = false;\n this.newCredential = null;\n this._credentialsVersion++;\n } catch (e) {\n this.alertMessage.error(this.intl.t('components.user-profile/ndt-credentials.save-error'));\n }\n }\n\n deleteCredential = task({ drop: true }, async () => {\n try {\n await this.credentialToDelete.destroyRecord();\n this.alertMessage.success(\n this.intl.t('components.user-profile/ndt-credentials.deleted-success')\n );\n } catch (e) {\n this.alertMessage.error(this.intl.t('components.user-profile/ndt-credentials.delete-error'));\n } finally {\n this.credentialToDelete = null;\n this.isShowingDeleteModal = false;\n this._credentialsVersion++;\n }\n });\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasAll}}\\n {{#if this.bothEqual}}\\n {{t\\n \\\"components.view-mode-qualification.single-value\\\"\\n value=(concat \\\"≤ \\\" (format-decimal this.minimum convertToFraction=@convertToFraction))\\n htmlSafe=true\\n }}\\n {{! The else is formatted this way to make the spaces in the beggining and ending not appear }}\\n {{else}}\\n {{t\\n \\\"components.view-mode-qualification.range\\\"\\n min=(format-decimal this.minimum convertToFraction=@convertToFraction)\\n max=(format-decimal this.maximum convertToFraction=@convertToFraction)\\n htmlSafe=true\\n }}{{/if}}{{else}}\\n {{#if this.hasMin}}\\n {{t\\n \\\"components.view-mode-qualification.single-value\\\"\\n value=(concat \\\"≥ \\\" (format-decimal this.minimum convertToFraction=@convertToFraction))\\n htmlSafe=true\\n }}\\n {{else}}\\n {{#if this.hasMax}}\\n {{t\\n \\\"components.view-mode-qualification.single-value\\\"\\n value=(concat \\\"≤ \\\" (format-decimal this.maximum convertToFraction=@convertToFraction))\\n htmlSafe=true\\n }}\\n {{/if}}\\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if this.hasAll}}\\n {{#if this.bothEqual}}\\n {{t\\n \\\"components.view-mode-qualification.single-value\\\"\\n value=(concat \\\"≤ \\\" (format-decimal this.minimum convertToFraction=@convertToFraction))\\n htmlSafe=true\\n }}\\n {{! The else is formatted this way to make the spaces in the beggining and ending not appear }}\\n {{else}}\\n {{t\\n \\\"components.view-mode-qualification.range\\\"\\n min=(format-decimal this.minimum convertToFraction=@convertToFraction)\\n max=(format-decimal this.maximum convertToFraction=@convertToFraction)\\n htmlSafe=true\\n }}{{/if}}{{else}}\\n {{#if this.hasMin}}\\n {{t\\n \\\"components.view-mode-qualification.single-value\\\"\\n value=(concat \\\"≥ \\\" (format-decimal this.minimum convertToFraction=@convertToFraction))\\n htmlSafe=true\\n }}\\n {{else}}\\n {{#if this.hasMax}}\\n {{t\\n \\\"components.view-mode-qualification.single-value\\\"\\n value=(concat \\\"≤ \\\" (format-decimal this.maximum convertToFraction=@convertToFraction))\\n htmlSafe=true\\n }}\\n {{/if}}\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/view-mode-qualification.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/view-mode-qualification.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { computed } from '@ember/object';\nimport { or, notEmpty, and, readOnly } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\n@classNames('display-inline')\nexport default class ViewModeQualification extends Component {\n @readOnly('min')\n minimum;\n\n @readOnly('max')\n maximum;\n\n @and('hasMin', 'hasMax')\n hasAll;\n\n @notEmpty('min')\n hasMin;\n\n @notEmpty('max')\n hasMax;\n\n @or('hasMin', 'hasMax')\n hasAny;\n\n convertToFraction = false;\n\n @computed('min', 'max')\n get bothEqual() {\n let { min, max } = this;\n return min === max;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n
\\n \\n
\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n
\\n \\n
\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n
\\n \\n
\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n
\\n \\n
\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-boolean.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-boolean.hbs\"}});\nimport Attribute from 'weldnote/components/w-attribute';\nimport { action } from '@ember/object';\n\nexport default class WAttributeBoolean extends Attribute {\n get isChecked() {\n if (this.value === true) {\n return true;\n }\n return false;\n }\n\n @action\n onUpdateCheckbox({ target }) {\n let { checked } = target;\n if (this.args.onUpdateValue) {\n this.args.onUpdateValue(checked);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n
\\n \\n \\n {{#if this.hasError}}\\n {{#each this.errorList as |error|}}\\n \\n {{error.message}}\\n \\n {{/each}}\\n {{else}}\\n {{#if this.hasHelp}}\\n \\n {{this.helpText}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n{{else}}\\n
\\n \\n

\\n {{this.staticValue}}\\n

\\n {{#if this.hasHelp}}\\n \\n {{this.helpText}}\\n \\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n
\\n \\n \\n {{#if this.hasError}}\\n {{#each this.errorList as |error|}}\\n \\n {{error.message}}\\n \\n {{/each}}\\n {{else}}\\n {{#if this.hasHelp}}\\n \\n {{this.helpText}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n{{else}}\\n
\\n \\n

\\n {{this.staticValue}}\\n

\\n {{#if this.hasHelp}}\\n \\n {{this.helpText}}\\n \\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-date.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-date.hbs\"}});\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\nimport moment from 'moment';\n\nexport default class WAttributeBoolean extends Attribute {\n @service\n userSession;\n\n get yearRange() {\n if (!isEmpty(this.args.yearRange)) {\n return this.args.yearRange;\n }\n return '20';\n }\n\n get dateFormat() {\n if (!isEmpty(this.args.dateFormat)) {\n return this.args.dateFormat;\n }\n return this.userSession.dateFormat;\n }\n\n get staticValue() {\n let { value, dateFormat } = this;\n if (!isEmpty(value)) {\n return moment(value).format(dateFormat);\n }\n return null;\n }\n\n get currentDate() {\n return this.value;\n }\n\n @action\n formatDate(date, format) {\n // Show the date in the users timezone (as it was stored in UTC)\n let result = moment(date).format(format);\n return result;\n }\n\n @action\n onSelectDate(value) {\n this.args.onUpdateValue(value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n {{this.label}}\\n {{/if}}\\n {{this.decimalValue}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n {{this.label}}\\n {{/if}}\\n {{this.decimalValue}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-decimal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-decimal.hbs\"}});\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\n\nexport default class WAttributeDecimal extends Attribute {\n @service\n userSession;\n\n get separator() {\n return this.userSession.decimalSeparator;\n }\n\n get decimalValue() {\n let { separator } = this;\n if (separator !== '.') {\n let { value } = this;\n if (!isEmpty(value)) {\n let valueString = `${value}`;\n valueString = valueString.replace('.', separator);\n return valueString;\n }\n return value;\n } else {\n return this.value;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n {{#if this.isMetricSystem}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{#if this.hasWarning}}\\n \\n
\\n
\\n
\\n
\\n
\\n {{@warningText}}\\n
\\n
\\n
\\n \\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if this.isMetricSystem}}\\n {{this.decimalValue}}\\n {{else}}\\n {{this.fractionValue}}\\n {{/if}}\\n

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n {{#if this.isMetricSystem}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{#if this.hasWarning}}\\n \\n
\\n
\\n
\\n
\\n
\\n {{@warningText}}\\n
\\n
\\n
\\n \\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if this.isMetricSystem}}\\n {{this.decimalValue}}\\n {{else}}\\n {{this.fractionValue}}\\n {{/if}}\\n

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-distance.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-distance.hbs\"}});\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { htmlSafe } from '@ember/template';\nimport Attribute from 'weldnote/components/w-attribute';\nimport Constants from 'weldnote/utils/constants';\nimport {\n toNumber,\n isKnownFractionString,\n isFraction,\n toFraction,\n} from 'weldnote/utils/unit-system/units';\nimport { action } from '@ember/object';\n\nconst { UNITS } = Constants;\n\nexport default class WAttributeDistance extends Attribute {\n @service\n userSession;\n\n @service\n unitSystem;\n\n @service\n intl;\n\n get separator() {\n return this.userSession.decimalSeparator;\n }\n\n get hasWarning() {\n return !isEmpty(this.args.warningText);\n }\n\n get isMetricSystem() {\n if (this.args.unitSystem) {\n return this.unitSystem.isMetricSystem(this.args.unitSystem);\n }\n return this.userSession.isMetricSystem;\n }\n\n get isImperialSystem() {\n if (this.args.unitSystem) {\n return this.unitSystem.isImperialSystem(this.args.unitSystem);\n }\n return this.userSession.isImperialSystem;\n }\n\n get label() {\n let unit = this.getUnitLabel();\n let unitTranslated = this.intl.t(`lov.units.${unit}`);\n let params = this.labelParams;\n if (isEmpty(params)) {\n params = {};\n }\n params = Object.assign(params, {\n unit: unitTranslated,\n });\n\n if (!isEmpty(this.args.labelParams)) {\n params = Object.assign(params, this.args.labelParams);\n }\n\n return this.getTranslation('label', params);\n }\n\n get imperialValue() {\n let { decimalValue } = this;\n if (!isEmpty(decimalValue)) {\n let fraction = toFraction(decimalValue);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return decimalValue;\n }\n\n get fractionValue() {\n if (isFraction(this.imperialValue)) {\n return htmlSafe(toFraction(this.decimalValue, 'display'));\n }\n return htmlSafe(this.imperialValue);\n }\n\n getUnitLabel() {\n if (this.isMetricSystem) {\n return UNITS.MILLIMETER;\n } else if (this.isImperialSystem) {\n return UNITS.INCH;\n }\n return UNITS.MILLIMETER;\n }\n\n get decimalValue() {\n let { separator } = this;\n if (separator !== '.') {\n let { value } = this;\n if (!isEmpty(value)) {\n let valueString = `${value}`;\n valueString = valueString.replace('.', separator);\n return valueString;\n }\n return value;\n } else {\n let { value } = this;\n return value;\n }\n }\n\n @action\n updateValue({ target: { value } }) {\n if (this.isMetricSystem) {\n let newValue = toNumber(value, this.separator);\n if (!isNaN(newValue)) {\n this.args.onUpdateValue(newValue);\n } else if (isEmpty(value)) {\n this.args.onUpdateValue(null);\n }\n }\n }\n\n @action\n onBlurUpdate({ target: { value } }) {\n if (this.isImperialSystem) {\n let newValue = toNumber(value, this.separator);\n if (!isNaN(newValue)) {\n this.args.onUpdateValue(newValue);\n } else if (isEmpty(value)) {\n this.args.onUpdateValue(null);\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{! Style is important to have a }}\\n

{{get\\n @model\\n @attribute\\n }}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{! Style is important to have a }}\\n

{{get\\n @model\\n @attribute\\n }}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-long-text.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-long-text.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\nimport { action, get } from '@ember/object';\n\nexport default class WAttributeLongText extends Attribute {\n get maxLength() {\n let max = get(this.args.model, `validations.${this.args.attribute}.length.maximum`);\n if (!isEmpty(max)) {\n if (!isNaN(parseInt(max, 10))) {\n return parseInt(max, 10);\n }\n }\n return null;\n }\n\n @action\n setValue({ target: { value } }) {\n this.args.onUpdateValue(value);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n \\n {{option.label}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

{{this.staticLabel}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n \\n {{option.label}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

{{this.staticLabel}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-lov.hbs\"}});\nimport Attribute from 'weldnote/components/w-attribute';\nimport { action, set } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class WAttributeLov extends Attribute {\n get staticLabel() {\n let selected = this.value;\n let result = this.args.options.findBy('key', selected);\n if (result) {\n return result.label;\n }\n return '';\n }\n\n get currentValue() {\n let result = this.args.options.findBy('key', this.value);\n if (result) {\n return result;\n }\n return null;\n }\n\n @action\n updateSelection(selection, component) {\n if (this.args.valueChosen) {\n if (selection) {\n this.args.valueChosen(selection.key, component);\n } else {\n this.args.valueChosen(selection, component);\n }\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n {{this.label}}\\n {{/if}}\\n {{this.decimalValue}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n {{this.label}}\\n {{/if}}\\n {{this.decimalValue}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute-speed.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute-speed.hbs\"}});\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\nimport {\n fromMilimeterSecondToMilimeterMinute,\n fromMilimeterSecondToMeterMinute,\n} from 'weldnote/utils/unit-system/speed';\n\nexport default class WAttributeSpeed extends Attribute {\n @service\n userSession; \n\n @service\n unitSystem;\n\n get separator() {\n return this.userSession.decimalSeparator;\n }\n\n get isMetricSystem() {\n return this.unitSystem.isMetricSystem(this.args.unitSystem || this.userSession.unitSystem)\n }\n\n get isImperialSystem() {\n return this.unitSystem.isImperialSystem(this.args.unitSystem || this.userSession.unitSystem)\n }\n\n type = 'travel';\n\n convertValue(value) {\n if (this.isMetricSystem) {\n if (this.args.type === 'travel') {\n return fromMilimeterSecondToMilimeterMinute(value);\n } else if (this.args.type === 'wire') {\n return fromMilimeterSecondToMeterMinute(value);\n }\n } else if (this.isImperialSystem) {\n return value;\n }\n }\n\n get decimalValue() {\n let { separator } = this;\n if (!isEmpty(separator) && separator !== '.') {\n let value = this.convertValue(this.value);\n if (!isEmpty(value)) {\n let valueString = `${value}`;\n valueString = valueString.replace('.', separator);\n return valueString;\n }\n return value;\n } else {\n let value = this.convertValue(this.value);\n return value;\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{yield}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n {{this.label}}\\n {{/if}}\\n {{this.value}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{yield}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n \\n {{#if this.renderLabel}}\\n \\n {{this.label}}\\n {{#if this.isRequired}}*{{/if}}\\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n \\n {{/if}}\\n \\n {{yield}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n \\n{{else}}\\n \\n {{#if this.renderLabel}}\\n {{this.label}}\\n {{/if}}\\n {{this.value}}

\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{yield}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-attribute.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-attribute.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\nimport { get, action } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isHTMLSafe } from '@ember/template';\n\nexport default class WAttribute extends Component {\n @service\n intl;\n\n get renderLabel() {\n if (!isEmpty(this.args.renderLabel)) {\n return this.args.renderLabel;\n }\n return true;\n }\n\n get modelName() {\n return get(this.args.model, 'metadata.modelName');\n }\n\n get hasTooltip() {\n return !isEmpty(this.args.tooltipText);\n }\n\n get isRequired() {\n return this.required;\n }\n\n // Flag that controls if help should be displayed\n // this allows to force showing help, because help is only showed\n // in editing mode\n get showHelp() {\n if (isEmpty(this.args.showHelp)) {\n return false;\n }\n return this.args.showHelp;\n }\n\n get required() {\n if (!isEmpty(this.args.required)) {\n return this.args.required;\n }\n return (\n get(this.args.model, `metadata.${this.args.attribute}.required`) ||\n get(this.args.model, `validations.${this.args.attribute}.presence`) ||\n this.isRequiredNumeric(this.args.attribute)\n );\n }\n\n isRequiredNumeric(attribute) {\n if (get(this.args.model, `validations.${this.args.attribute}.numericality`)) {\n return (\n get(this.args.model, `validations.${this.args.attribute}.numericality.allowBlank`) === false\n );\n }\n return false;\n }\n\n get tooltipText() {\n if (!isEmpty(this.args.tooltip)) {\n return this.args.tooltip;\n }\n let tooltipTranslation = this.getTranslation('tooltip');\n if (!isEmpty(tooltipTranslation)) {\n return tooltipTranslation;\n }\n return '';\n }\n\n getTranslation(property, options = {}) {\n let translation = this.intl.t(\n `model.${this.modelName}.${this.args.attribute}.${property}`,\n options\n );\n if (!isEmpty(translation)) {\n return translation.toString();\n }\n return '';\n }\n\n get helpText() {\n if (!isEmpty(this.args.helpText)) {\n return this.args.helpText;\n }\n return this.getTranslation('help');\n }\n\n get label() {\n if (!isEmpty(this.args.overrideLabel)) {\n return this.args.overrideLabel;\n }\n if (!isEmpty(this.args.label)) {\n return this.args.label;\n }\n if (!isEmpty(this.args.labelParams)) {\n return this.getTranslation('label', this.args.labelParams);\n } else {\n return this.getTranslation('label');\n }\n }\n\n get hasHelp() {\n let { helpText } = this.args;\n if (!isEmpty(helpText)) {\n if (isHTMLSafe(helpText)) {\n return !isEmpty(helpText.toString());\n } else {\n return !isEmpty(helpText);\n }\n }\n let help = this.getTranslation('help');\n return !isEmpty(help);\n }\n\n get placeholder() {\n if (!isEmpty(this.args.placeholder)) {\n return this.args.placeholder;\n }\n return this.getTranslation('placeholder');\n }\n\n get hasError() {\n let errors = get(this.args.model, `errors.${this.args.attribute}`);\n return errors && errors.length > 0;\n }\n\n get errorList() {\n return get(this.args.model, `errors.${this.args.attribute}`);\n }\n\n get value() {\n return get(this.args.model, this.args.attribute);\n }\n\n @action\n onUpdateValue({ target: { value } }) {\n if (this.args.onUpdateValue) {\n this.args.onUpdateValue(value);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.canEdit}}\\n {{#if (and @isEditing this.canSave)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#if this.showSaveAndStopButton}}\\n \\n {{t \\\"toolbar.save-stop.label\\\"}}\\n \\n \\n {{/if}}\\n {{#unless @isSaving}}\\n {{#unless @model.isNew}}\\n \\n {{t \\\"toolbar.cancel.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/unless}}\\n {{yield}}\\n {{else}}\\n {{#if (and this.canSave this.showEditButton)}}\\n \\n {{t \\\"toolbar.edit.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.showDeleteButton this.canDelete)}}\\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n {{yield}}\\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if this.canEdit}}\\n {{#if (and @isEditing this.canSave)}}\\n \\n {{t \\\"toolbar.save.label\\\"}}\\n \\n \\n {{#if this.showSaveAndStopButton}}\\n \\n {{t \\\"toolbar.save-stop.label\\\"}}\\n \\n \\n {{/if}}\\n {{#unless @isSaving}}\\n {{#unless @model.isNew}}\\n \\n {{t \\\"toolbar.cancel.label\\\"}}\\n \\n \\n {{/unless}}\\n {{/unless}}\\n {{yield}}\\n {{else}}\\n {{#if (and this.canSave this.showEditButton)}}\\n \\n {{t \\\"toolbar.edit.label\\\"}}\\n \\n \\n {{/if}}\\n {{#if (and this.showDeleteButton this.canDelete)}}\\n \\n {{t \\\"toolbar.delete.label\\\"}}\\n \\n \\n {{/if}}\\n {{yield}}\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/w-edit-toolbar.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-edit-toolbar.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class WEditToolbarComponent extends Component {\n get showDeleteButton() {\n return this.args.showDeleteButton ?? false;\n }\n\n get showEditButton() {\n return this.args.showEditButton ?? true;\n }\n\n get canEdit() {\n return this.args.canEdit ?? true;\n }\n\n get canSave() {\n return this.args.canSave ?? true;\n }\n\n get canDelete() {\n return this.args.canDelete ?? true;\n }\n\n get showSaveAndStopButton() {\n return this.args.showSaveAndStop ?? true;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @isEditing}}\\n {{#let (file-queue name=@uploadName onFileAdded=this.uploadImageToServer) as |queue|}}\\n \\n {{#if queue.files.length}}\\n {{t \\\"components.w-file-upload.uploading-file\\\"}}\\n
\\n \\n {{queue.progress}}%\\n {{t \\\"components.w-file-upload.percentage-complete\\\"}}\\n
\\n \\n {{else}}\\n {{#if dropzone.active}}\\n {{t \\\"components.w-file-upload.drop-zone-message\\\"}}\\n {{/if}}\\n\\n
\\n {{#if this.renderLabel}}\\n \\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n {{/if}}\\n

\\n\\n \\n\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n {{#let (get @model (concat @attribute \\\".originalFilename\\\")) as |filename|}}\\n \\n \\n \\n Download\\n \\n {{#if this.shouldShowRemoveButton}}\\n \\n \\n \\n {{t \\\"components.w-file-upload.buttons.remove\\\"}}\\n \\n {{/if}}\\n {{/let}}\\n {{/if}}\\n {{#if this.hasError}}\\n

{{this.error}}

\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n {{/let}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (and this.hasIcon this.hasFile)}}\\n \\n {{/if}}\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n \\n {{t\\n \\\"components.w-file-upload.download-file-link\\\"\\n file=(get @model (concat @attribute \\\".originalFilename\\\"))\\n }}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isRemoving}}\\n \\n{{/if}}\", {\"contents\":\"{{#if @isEditing}}\\n {{#let (file-queue name=@uploadName onFileAdded=this.uploadImageToServer) as |queue|}}\\n \\n {{#if queue.files.length}}\\n {{t \\\"components.w-file-upload.uploading-file\\\"}}\\n
\\n \\n {{queue.progress}}%\\n {{t \\\"components.w-file-upload.percentage-complete\\\"}}\\n
\\n \\n {{else}}\\n {{#if dropzone.active}}\\n {{t \\\"components.w-file-upload.drop-zone-message\\\"}}\\n {{/if}}\\n\\n
\\n {{#if this.renderLabel}}\\n \\n {{#if this.hasTooltip}}\\n (?)\\n {{/if}}\\n {{/if}}\\n

\\n\\n \\n\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n {{#let (get @model (concat @attribute \\\".originalFilename\\\")) as |filename|}}\\n \\n \\n \\n Download\\n \\n {{#if this.shouldShowRemoveButton}}\\n \\n \\n \\n {{t \\\"components.w-file-upload.buttons.remove\\\"}}\\n \\n {{/if}}\\n {{/let}}\\n {{/if}}\\n {{#if this.hasError}}\\n

{{this.error}}

\\n {{/if}}\\n

\\n
\\n {{/if}}\\n
\\n {{/let}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n{{else}}\\n
\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n

\\n {{#if (and this.hasIcon this.hasFile)}}\\n \\n {{/if}}\\n {{#if (and this.hasFile (not-eq this.fileReference null))}}\\n \\n {{t\\n \\\"components.w-file-upload.download-file-link\\\"\\n file=(get @model (concat @attribute \\\".originalFilename\\\"))\\n }}\\n {{/if}}\\n

\\n
\\n{{/if}}\\n\\n{{#if this.isRemoving}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-file-upload.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-file-upload.hbs\"}});\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport Component from '@glimmer/component';\nimport { set, get, action } from '@ember/object';\nimport { isHTMLSafe } from '@ember/template';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class WFileUpload extends Component {\n @service\n fileService;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n alertMessage;\n\n get renderLabel() {\n return this.args.renderLabel ?? true;\n }\n\n get acceptedTypes() {\n let { extensions } = this.args;\n let result = [];\n if (extensions.indexOf('pdf') > -1) {\n result.push('.pdf');\n result.push('application/pdf');\n }\n if (extensions.indexOf('png') > -1) {\n result.push('.png');\n result.push('image/png');\n }\n if (extensions.indexOf('jpeg') > -1) {\n result.push('.jpeg');\n result.push('image/jpeg');\n }\n if (extensions.indexOf('jpg') > -1) {\n result.push('.jpg');\n result.push('image/jpg');\n }\n if (extensions.indexOf('gif') > -1) {\n result.push('.gif');\n result.push('image/gif');\n }\n return result;\n }\n\n get uploadId() {\n return this.args.uploadId ?? 'file-upload';\n }\n\n @tracked\n icon = null;\n\n @tracked\n error = null;\n\n get hasIcon() {\n return !isEmpty(this.args.icon);\n }\n\n get hasError() {\n return !isEmpty(this.error);\n }\n\n name = 'file-upload';\n\n // Flag controlling the modal to remove the file\n @tracked\n isRemoving = false;\n\n get helpText() {\n return this.getTranslation('help');\n }\n\n get hasTooltip() {\n return !isEmpty(this.args.tooltipText);\n }\n\n get hasHelp() {\n let helpText = get(this.args, 'helpText');\n if (isHTMLSafe(helpText)) {\n return !isEmpty(helpText.toString());\n } else {\n return !isEmpty(helpText);\n }\n }\n\n get tooltipText() {\n if (!isEmpty(this.args.tooltip)) {\n return this.args.tooltip;\n }\n let tooltipTranslation = this.getTranslation('tooltip');\n if (!isEmpty(tooltipTranslation)) {\n return tooltipTranslation;\n }\n return '';\n }\n\n get hasFile() {\n return !isEmpty(this.fileReference);\n }\n\n onUpload(fileUpload) {\n // do nothing\n }\n\n get labelReference() {\n return `model.${get(this.args.model.metadata.modelName)}.${this.args.attribute}.label`;\n }\n\n get label() {\n if (!isEmpty(this.args.labelParams)) {\n return this.getTranslation('label', this.args.labelParams);\n } else {\n return this.getTranslation('label');\n }\n }\n\n get shouldShowRemoveButton() {\n return this.args.showRemoveButton ?? true;\n }\n\n getTranslation(property, options = {}) {\n let translation = this.intl.t(\n `model.${this.args.model.metadata.modelName}.${this.args.attribute}.${property}`,\n options\n );\n if (!isEmpty(translation)) {\n return translation.toString();\n }\n return '';\n }\n\n getFile() {\n return get(this.args, `model.${this.args.attribute}`);\n }\n\n get fileReference() {\n let downloadPath = get(this.args.model, `${get(this.args, 'attribute')}.downloadPath`);\n if (!isEmpty(downloadPath)) {\n return downloadPath;\n }\n return '';\n }\n\n @action\n async uploadImageToServer(file) {\n let { size, name: filename, type: contentType } = file;\n let { type } = this.args;\n\n let { error } = file;\n if (!isEmpty(error)) {\n let { code } = error;\n if (code === -600) {\n let message = `File to big, maximum size is Kb`;\n this.error = message;\n this.alertMessage.error(message);\n }\n if (code === -601) {\n let message = `Wrong extension, compatible extensions are: ${this.extensions}`;\n this.error = message;\n this.alertMessage.error(message);\n }\n return;\n } else {\n this.error = null;\n }\n\n try {\n let result = await this.fileService.getFileUploadRequest(filename, type, contentType, size);\n let { filename: newFilename, url, credentials, fileUploadId } = result;\n try {\n await file.upload(url, { data: { ...credentials, name: newFilename } });\n let upload = await this.store.findRecord('file-upload', fileUploadId);\n set(this.args.model, `${this.args.attribute}`, upload);\n this.onUpload(upload);\n } catch (e) {\n console.log(`Could not upload file ${newFilename} due to`);\n console.log(e);\n }\n } catch (reason) {\n this.alertMessage.error(`Error while uploading ${filename}`);\n console.log(`Could not upload file ${filename} due to`);\n console.log(reason);\n }\n }\n\n @action\n onRemove() {\n set(this.args, `model.${this.args.attribute}`, null);\n this.isRemoving = false;\n }\n\n @action\n validateFile(file) {\n if (this.acceptedTypes.length > 0) {\n if (!this.acceptedTypes.includes(file.type)) {\n this.alertMessage.error(this.intl.t('generic.error.file-upload-wrong-extension', {\n types: this.args.extensions,\n type: file.type\n }));\n return false;\n }\n }\n if (this.args.maxFileSize && this.args.maxFileSize > 0) {\n if (file.size > this.args.maxFileSize) {\n this.alertMessage.error(this.intl.t('generic.error.file-upload-max-file-size', {\n maxSize: this.formatBytes(this.args.maxFileSize),\n fileSize: this.formatBytes(file.size)\n }))\n return false;\n } \n }\n return true;\n }\n\n formatBytes(bytes) {\n if (bytes < 1024) {\n return bytes + ' B';\n } else if (bytes < 1024 * 1024) {\n return (bytes / 1024).toFixed(2) + ' KB';\n } else {\n return (bytes / (1024 * 1024)).toFixed(2) + ' MB';\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasImage}}\\n \\n{{else}}\\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"{{#if this.hasImage}}\\n \\n{{else}}\\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-image-preview.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-image-preview.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { alias, notEmpty } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class WImagePreview extends Component {\n @notEmpty('imageLink')\n hasImage;\n\n @alias('imageLink')\n imagePath;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{yield}}\\n\", {\"contents\":\"\\n {{yield}}\\n\",\"moduleName\":\"weldnote/components/w-model-edit-panel.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-model-edit-panel.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { t } from 'ember-intl';\n\n@classic\nexport default class WModelEditPanel extends Component {\n @service\n intl;\n\n collapsible = false;\n\n @t('edit-view.main-panel')\n title;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{else}}\\n {{#if this.shouldDisplayLink}}\\n

{{get @model this.visualAttribute}}

\\n {{else}}\\n

{{get\\n @model\\n this.visualAttribute\\n }}

\\n {{/if}}\\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if (or this.isEditing this.showHelp)}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{/if}}\\n\", {\"contents\":\"\\n \\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{else}}\\n {{#if this.shouldDisplayLink}}\\n

{{get @model this.visualAttribute}}

\\n {{else}}\\n

{{get\\n @model\\n this.visualAttribute\\n }}

\\n {{/if}}\\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if (or this.isEditing this.showHelp)}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/w-model-lov-with-create.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-model-lov-with-create.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\n\nexport default class WModelLovWithCreate extends Attribute {\n get shouldDisplayLink() {\n return !isEmpty(this.args.linkTo);\n }\n\n get visualAttribute() {\n if (!isEmpty(this.args.displayAttribute)) {\n return `${this.args.attribute}.${this.args.displayAttribute}`;\n }\n return `${this.args.attribute}.visualLabel`;\n }\n\n get staticLabel() {\n let selected = this.value;\n let result = this.args.options.findBy('key', selected);\n if (result) {\n return result.label;\n }\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n

{{@title}}\\n {{@subtitle}}\\n

\\n {{yield}}\\n
\\n
\", {\"contents\":\"
\\n
\\n

{{@title}}\\n {{@subtitle}}\\n

\\n {{yield}}\\n
\\n
\",\"moduleName\":\"weldnote/components/w-page-heading.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-page-heading.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/w-pagination.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-pagination.hbs\"}});\nimport Component from '@glimmer/component';\nimport { isEmpty } from '@ember/utils';\nimport { action } from '@ember/object';\n\nexport default class WPagination extends Component {\n get currentPage() {\n if (!isEmpty(this.args.currentPage)) {\n let current = parseInt(this.args.currentPage);\n if (!isNaN(current)) {\n return current;\n }\n }\n return 1;\n }\n\n get pageSize() {\n if (this.args.pageSize) {\n let pageSize = parseInt(this.args.pageSize);\n if (!isNaN(pageSize)) {\n return pageSize;\n }\n }\n return 20;\n }\n\n get hasPages() {\n return this.pages.length > 0;\n }\n\n get totalPages() {\n let total = parseInt(this.args.totalCount);\n if (isNaN(total)) {\n throw new Error(`Cannot parse totalCount as a number, result was ${total}`);\n }\n let { pageSize } = this;\n let numPages = Math.ceil(total / parseFloat(pageSize));\n return numPages;\n }\n\n get pages() {\n let total = this.args.totalCount;\n let { currentPage, pageSize } = this;\n let numPages = Math.ceil(total / parseFloat(pageSize));\n let pages = [];\n if (!isEmpty(total) && !isEmpty(pageSize)) {\n if (numPages < 10) {\n for (let i = 0; i < numPages; i++) {\n let current = false;\n let pageNumber = i + 1;\n if (i + 1 === currentPage) {\n current = true;\n }\n pages.pushObject({\n pageNumber,\n current,\n });\n }\n } else {\n let offset = 5;\n let pagesBefore = offset;\n let pagesAfter = offset;\n if (currentPage - offset < 1) {\n pagesBefore = currentPage - 1;\n }\n if (currentPage + offset > numPages) {\n pagesAfter = numPages - currentPage;\n }\n for (let i = pagesBefore; i > 0; i--) {\n pages.pushObject({\n pageNumber: currentPage - i,\n current: false,\n });\n }\n pages.pushObject({\n pageNumber: currentPage,\n current: true,\n });\n for (let i = 1; i <= pagesAfter; i++) {\n pages.pushObject({\n pageNumber: currentPage + i,\n current: false,\n });\n }\n }\n }\n return pages;\n }\n\n get isPreviousPageDisabled() {\n let { currentPage } = this;\n return currentPage === 1;\n }\n\n get isNextPageDisabled() {\n let pageCount = this.totalPages;\n let { currentPage } = this;\n if (currentPage < pageCount) {\n return false;\n }\n return true;\n }\n\n @action\n setPage(pageNum) {\n this.args.reloadData(pageNum);\n }\n\n @action\n nextPage() {\n let pageCount = this.totalPages;\n let { currentPage } = this;\n if (currentPage < pageCount) {\n this.args.reloadData(currentPage + 1);\n }\n }\n\n @action\n previousPage() {\n let { currentPage } = this;\n if (currentPage > 1) {\n this.args.reloadData(currentPage - 1);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{#if this.hasExtraEditingComponent}}\\n {{component @extraEditingComponent model=@model attribute=@attribute value=this.value}}\\n {{/if}}\\n {{else}}\\n {{#if this.hasStaticComponent}}\\n {{component\\n @staticContentComponent\\n model=@model\\n attribute=@attribute\\n value=this.value\\n shouldDisplayLink=this.shouldDisplayLink\\n }}\\n {{else}}\\n {{#if this.shouldDisplayLink}}\\n

{{get @model this.visualAttribute}}

\\n {{else}}\\n

{{get\\n @model\\n this.visualAttribute\\n }}

\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if (or @isEditing this.showHelp)}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{/if}}\\n\", {\"contents\":\"\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{#if this.hasExtraEditingComponent}}\\n {{component @extraEditingComponent model=@model attribute=@attribute value=this.value}}\\n {{/if}}\\n {{else}}\\n {{#if this.hasStaticComponent}}\\n {{component\\n @staticContentComponent\\n model=@model\\n attribute=@attribute\\n value=this.value\\n shouldDisplayLink=this.shouldDisplayLink\\n }}\\n {{else}}\\n {{#if this.shouldDisplayLink}}\\n

{{get @model this.visualAttribute}}

\\n {{else}}\\n

{{get\\n @model\\n this.visualAttribute\\n }}

\\n {{/if}}\\n {{/if}}\\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if (or @isEditing this.showHelp)}}\\n {{#if this.hasHelp}}\\n {{@helpText}}\\n {{/if}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/w-power-model-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-power-model-lov.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\n\nexport default class WPowerModelLov extends Attribute {\n get searchEnabled() {\n if (!isEmpty(this.args.searchEnabled)) {\n return this.args.searchEnabled;\n }\n return false;\n }\n\n get shouldDisplayLink() {\n return !isEmpty(this.args.linkTo);\n }\n\n get hasStaticComponent() {\n return !isEmpty(this.args.staticContentComponent);\n }\n\n get hasExtraEditingComponent() {\n return !isEmpty(this.args.extraEditingComponent);\n }\n\n get visualAttribute() {\n if (!isEmpty(this.args.displayAttribute)) {\n return `${this.args.attribute}.${this.args.displayAttribute}`;\n }\n return `${this.args.attribute}.visualLabel`;\n }\n\n get staticLabel() {\n let selected = this.value;\n let result = this.args.options.findBy('key', selected);\n if (result) {\n return result.label;\n }\n return '';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{else}}\\n

\\n {{#if this.hasStaticContentComponent}}\\n {{component @staticContentComponent content=this.value}}\\n {{else}}\\n {{#each this.value as |relation|}}\\n {{get relation this.visualAttribute}}{{#if (not-eq this.value.lastObject relation)}},\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n

\\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n\", {\"contents\":\"\\n {{#if this.renderLabel}}\\n \\n {{/if}}\\n {{#if @isEditing}}\\n \\n {{#if (has-block)}}\\n {{yield option}}\\n {{else}}\\n {{option.visualLabel}}\\n {{/if}}\\n \\n {{else}}\\n

\\n {{#if this.hasStaticContentComponent}}\\n {{component @staticContentComponent content=this.value}}\\n {{else}}\\n {{#each this.value as |relation|}}\\n {{get relation this.visualAttribute}}{{#if (not-eq this.value.lastObject relation)}},\\n {{/if}}\\n {{/each}}\\n {{/if}}\\n

\\n {{/if}}\\n {{#each this.errorList as |error|}}\\n {{error.message}}\\n {{/each}}\\n {{#if this.hasHelp}}\\n {{this.helpText}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/w-power-multi-lov.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-power-multi-lov.hbs\"}});\nimport { isEmpty } from '@ember/utils';\nimport Attribute from 'weldnote/components/w-attribute';\n\nexport default class WPowerMultiLov extends Attribute {\n get hasStaticContentComponent() {\n return !isEmpty(this.args.staticContentComponent);\n }\n\n get searchEnabled() {\n if (!isEmpty(this.args.searchEnabled)) {\n return this.args.searchEnabled;\n }\n return false;\n }\n\n get visualAttribute() {\n if (!isEmpty(this.args.displayAttribute)) {\n return this.args.displayAttribute;\n }\n return 'visualLabel';\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.session.isAuthenticated}}\\n \\n \\n {{svg-jar \\\"arrow-collapse\\\"}}\\n \\n{{/if}}\", {\"contents\":\"{{#if this.session.isAuthenticated}}\\n \\n \\n {{svg-jar \\\"arrow-collapse\\\"}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-sidebar.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-sidebar.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport { service } from '@ember/service';\nimport { or, alias, gte } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\n@tagName('')\nexport default class WSidebar extends Component {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n @alias('welderCertificateData')\n data;\n\n @alias('data.validateInternallyTodayCount')\n validateInternallyTodayCount;\n\n @alias('data.validateInternally30DaysCount')\n validateInternally30DaysCount;\n\n @alias('data.validateInternallyExpiredCount')\n validateInternallyExpiredCount;\n\n @alias('data.validateExternallyTodayCount')\n validateExternallyTodayCount;\n\n @alias('data.validateExternally30DaysCount')\n validateExternally30DaysCount;\n\n @alias('data.validateExternallyExpiredCount')\n validateExternallyExpiredCount;\n\n @alias('data.miscellaneous30DaysCount')\n miscellaneous30DaysCount;\n\n @alias('data.miscellaneousTodayCount')\n miscellaneousTodayCount;\n\n @alias('data.miscellaneousExpiredCount')\n miscellaneousExpiredCount;\n\n @gte('validateInternallyTodayCount', 1)\n hasInternalToday;\n\n @gte('validateInternally30DaysCount', 1)\n hasInternal30Days;\n\n @gte('validateInternallyExpiredCount', 1)\n hasInternalExpired;\n\n @gte('validateExternallyTodayCount', 1)\n hasExternalToday;\n\n @gte('validateExternally30DaysCount', 1)\n hasExternal30Days;\n\n @gte('validateExternallyExpiredCount', 1)\n hasExternalExpired;\n\n @gte('miscellaneous30DaysCount', 1)\n hasMiscellaneous30Days;\n\n @gte('miscellaneousTodayCount', 1)\n hasMiscellaneousToday;\n\n @gte('miscellaneousExpiredCount', 1)\n hasMiscellaneousExpired;\n\n @or(\n 'hasInternalToday',\n 'hasInternal30Days',\n 'hasExternalToday',\n 'hasExternal30Days',\n 'hasMiscellaneousToday',\n 'hasMiscellaneous30Days'\n )\n hasAnyCertificateExpiring;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n {{#if (has-value @label)}}\\n {{@label}}\\n {{else}}\\n {{t \\\"toolbar.new.label\\\"}}\\n {{/if}}\\n \\n\", {\"contents\":\"\\n \\n {{#if (has-value @label)}}\\n {{@label}}\\n {{else}}\\n {{t \\\"toolbar.new.label\\\"}}\\n {{/if}}\\n \\n\",\"moduleName\":\"weldnote/components/w-toolbar/new-button.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-toolbar/new-button.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class NewButton extends Component {\n route = '';\n\n @alias('route')\n newRoutePath;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (not this.isMobile)}}\\n \\n {{@text}}\\n \\n{{/if}}\", {\"contents\":\"{{#if (not this.isMobile)}}\\n \\n {{@text}}\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/w-tooltip.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/w-tooltip.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport { service } from '@ember/service';\nimport { or } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\n@tagName('')\nexport default class WTooltip extends Component {\n @service\n media;\n\n @or('media.{isMobile,isTablet}')\n isMobile;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n \\n {{step.label}}\\n {{#if (has-value step.image)}}\\n \\n {{/if}}\\n \\n
\\n {{#if (eq this.currentStep \\\"1\\\")}}\\n \\n
\\n

{{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image.subtitle\\\"\\n }}

\\n \\n

\\n {{t \\\"components.weld-sketch-designer.wizard-steps.base-image.help\\\"}}\\n

\\n
\\n
\\n
\\n \\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image.buttons.draw-image\\\"\\n }}\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image.buttons.upload-image\\\"\\n }}\\n
\\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.currentStep \\\"2\\\")}}\\n {{#if (eq this.substep \\\"draw\\\")}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image-design.buttons.next\\\"\\n }}\\n \\n \\n
\\n
\\n \\n
\\n
\\n
\\n {{else if (eq this.substep \\\"upload\\\")}}\\n \\n
\\n
\\n \\n {{#if (has-value this.baseImagePath)}}\\n \\n {{t \\\"components.weld-sketch-designer.wizard-steps.base-image.buttons.next\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if (eq this.currentStep \\\"3\\\")}}\\n \\n
\\n \\\"Base\\n
\\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.confirm-base-design.buttons.next\\\"\\n }}\\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.currentStep \\\"4\\\")}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.groove-design.buttons.next\\\"\\n }}\\n
\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.currentStep \\\"5\\\")}}\\n \\n
\\n \\\"Groove\\n
\\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.confirm-groove-design.buttons.next\\\"\\n }}\\n
\\n
\\n \\n {{/if}}\\n {{#if (eq this.currentStep \\\"6\\\")}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.weld-layer-configuration.buttons.next\\\"\\n }}\\n
\\n
\\n \\n
\\n
\\n \\n {{/if}}\\n {{#if (eq this.currentStep \\\"7\\\")}}\\n \\n
\\n \\\"Weld\\n
\\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.confirm-weld-layer-configuration.buttons.next\\\"\\n }}\\n
\\n
\\n \\n {{/if}}\\n {{#if (eq this.currentStep \\\"8\\\")}}\\n \\n
\\n
\\n
\\n
\\n

{{t\\n \\\"components.weld-sketch-designer.wizard-steps.save-sketch.groove-design.title\\\"\\n }}

\\n \\\"Groove\\n \\n
\\n
\\n

{{t\\n \\\"components.weld-sketch-designer.wizard-steps.save-sketch.weld-layer-configuration.title\\\"\\n }}

\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.isMissingDetails}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.select-layer-and-sides\\\"}}\\n \\n
\\n {{/if}}\\n \\n
\\n
\\n \\n \\n {{detail.label}}\\n \\n \\n
\\n
\\n \\n {{t \\\"components.weld-sketch-designer.wizard-steps.save-sketch.buttons.save\\\"}}\\n
\\n
\\n {{/if}}\\n
\", {\"contents\":\"
\\n
\\n \\n {{step.label}}\\n {{#if (has-value step.image)}}\\n \\n {{/if}}\\n \\n
\\n {{#if (eq this.currentStep \\\"1\\\")}}\\n \\n
\\n

{{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image.subtitle\\\"\\n }}

\\n \\n

\\n {{t \\\"components.weld-sketch-designer.wizard-steps.base-image.help\\\"}}\\n

\\n
\\n
\\n
\\n \\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image.buttons.draw-image\\\"\\n }}\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image.buttons.upload-image\\\"\\n }}\\n
\\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.currentStep \\\"2\\\")}}\\n {{#if (eq this.substep \\\"draw\\\")}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.base-image-design.buttons.next\\\"\\n }}\\n \\n \\n
\\n
\\n \\n
\\n
\\n
\\n {{else if (eq this.substep \\\"upload\\\")}}\\n \\n
\\n
\\n \\n {{#if (has-value this.baseImagePath)}}\\n \\n {{t \\\"components.weld-sketch-designer.wizard-steps.base-image.buttons.next\\\"}}\\n {{/if}}\\n
\\n
\\n
\\n {{/if}}\\n {{/if}}\\n {{#if (eq this.currentStep \\\"3\\\")}}\\n \\n
\\n \\\"Base\\n
\\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.confirm-base-design.buttons.next\\\"\\n }}\\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.currentStep \\\"4\\\")}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.groove-design.buttons.next\\\"\\n }}\\n
\\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.currentStep \\\"5\\\")}}\\n \\n
\\n \\\"Groove\\n
\\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.confirm-groove-design.buttons.next\\\"\\n }}\\n
\\n
\\n \\n {{/if}}\\n {{#if (eq this.currentStep \\\"6\\\")}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.weld-layer-configuration.buttons.next\\\"\\n }}\\n
\\n
\\n \\n
\\n
\\n \\n {{/if}}\\n {{#if (eq this.currentStep \\\"7\\\")}}\\n \\n
\\n \\\"Weld\\n
\\n
\\n
\\n \\n {{t\\n \\\"components.weld-sketch-designer.wizard-steps.confirm-weld-layer-configuration.buttons.next\\\"\\n }}\\n
\\n
\\n \\n {{/if}}\\n {{#if (eq this.currentStep \\\"8\\\")}}\\n \\n
\\n
\\n
\\n
\\n

{{t\\n \\\"components.weld-sketch-designer.wizard-steps.save-sketch.groove-design.title\\\"\\n }}

\\n \\\"Groove\\n \\n
\\n
\\n

{{t\\n \\\"components.weld-sketch-designer.wizard-steps.save-sketch.weld-layer-configuration.title\\\"\\n }}

\\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n \\n
\\n \\n \\n {{#if this.isMissingDetails}}\\n
\\n \\n {{t \\\"components.model-groove-design.messages.select-layer-and-sides\\\"}}\\n \\n
\\n {{/if}}\\n \\n
\\n
\\n \\n \\n {{detail.label}}\\n \\n \\n
\\n
\\n \\n {{t \\\"components.weld-sketch-designer.wizard-steps.save-sketch.buttons.save\\\"}}\\n
\\n
\\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/weld-sketch-designer.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weld-sketch-designer.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { set, get, action, computed } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport { assetUrl } from 'weldnote/helpers/asset-url';\nimport ENV from 'weldnote/config/environment';\nimport moment from 'moment';\n\nconst { WELD_TYPES, FILE_CONTEXT } = Constants;\n\n@classic\n@tagName('')\nexport default class WeldSketchDesigner extends Component {\n @service('weldnote-data')\n data;\n\n @service\n store;\n\n @service\n ajax;\n\n @service\n router;\n\n @service\n loading;\n\n @service('alert-message')\n alert;\n\n @service\n fileService;\n\n @service\n analytics;\n\n @service\n intl;\n\n @computed('baseImageData')\n get baseImage() {\n let { baseImageData } = this;\n if (!isEmpty(baseImageData)) {\n return baseImageData;\n }\n return `${ENV.notesBackendEndpoint}/photoeditor5/assets/white.png`;\n }\n\n @computed('uploadedImagePath')\n get baseImagePath() {\n return this.uploadedImagePath;\n }\n\n currentStep = '1';\n\n baseImageData = null;\n\n baseImageState = null;\n\n grooveDesign = null;\n\n grooveDesignState = null;\n\n weldLayerConfiguration = null;\n\n weldLayerConfigurationState = null;\n\n // Variables for Schematic Ember Data Instances\n weldTypes = null;\n\n weldingDetails = null;\n\n grooveType = null;\n\n jointType = null;\n\n imageName = null;\n\n // Variables for the instances of Ember Data (1 for Groove 1 for Weld Layer)\n pendingGrooveDesignInstance = null;\n\n pendingWeldLayerConfigurationInstance = null;\n\n // Variables for File Upload Instances\n grooveDesignBaseImageFileUpload = null;\n\n grooveDesignRenderedImageFileUpload = null;\n\n weldLayerConfigurationBaseImageFileUpload = null;\n\n weldLayerConfigurationRenderedImageFileUpload = null;\n\n // Variables for Errors\n nameErrors = null;\n\n @alias('data.schematicsWeldTypeOptions')\n weldTypeOptions;\n\n @alias('data.weldTypeOptions')\n realWeldTypeOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.grooveShapeOptions')\n grooveShapeOptions;\n\n @alias('data.jointTypeOptions')\n jointTypeOptions;\n\n init() {\n super.init(...arguments);\n set(this, 'weldTypes', []);\n set(this, 'weldingDetails', []);\n }\n\n @computed('weldingDetails.[]')\n get isMissingDetails() {\n let { weldingDetails } = this;\n if (!isEmpty(weldingDetails)) {\n let layers = weldingDetails.filter((d) => {\n let { shortDesignation } = d;\n return shortDesignation === 'sl' || shortDesignation === 'ml';\n });\n let sides = weldingDetails.filter((d) => {\n let { shortDesignation } = d;\n return (\n shortDesignation === 'ss mb' ||\n shortDesignation === 'ss gb' ||\n shortDesignation === 'ss fb' ||\n shortDesignation === 'bs' ||\n shortDesignation === 'ss nb'\n );\n });\n return isEmpty(layers) || isEmpty(sides);\n }\n return true;\n }\n\n @computed('currentStep')\n get wizardProgress() {\n let { currentStep, intl } = this;\n let currentStepValue = parseInt(currentStep);\n if (currentStepValue === NaN) {\n currentStepValue = 1;\n }\n let stateList = [];\n stateList.pushObject({\n stepNumber: 1,\n complete: currentStepValue > 1 ? true : false,\n label:\n currentStepValue > 1\n ? intl.t('components.weld-sketch-designer.wizard.name-sketch.finished')\n : intl.t('components.weld-sketch-designer.wizard.name-sketch.unfinished'),\n });\n stateList.pushObject({\n stepNumber: 2,\n complete: currentStepValue >= 4 ? true : false,\n label:\n currentStepValue >= 4\n ? intl.t('components.weld-sketch-designer.wizard.base-design.finished')\n : intl.t('components.weld-sketch-designer.wizard.base-design.unfinished'),\n\n image: this.baseImageData,\n });\n stateList.pushObject({\n stepNumber: 3,\n complete: currentStepValue >= 6 ? true : false,\n label:\n currentStepValue >= 6\n ? intl.t('components.weld-sketch-designer.wizard.groove-design.finished')\n : intl.t('components.weld-sketch-designer.wizard.groove-design.unfinished'),\n\n image: this.grooveDesign,\n });\n stateList.pushObject({\n stepNumber: 4,\n complete: currentStepValue >= 8 ? true : false,\n label:\n currentStepValue >= 8\n ? intl.t('components.weld-sketch-designer.wizard.weld-layer-configuration.finished')\n : intl.t('components.weld-sketch-designer.wizard.weld-layer-configuration.unfinished'),\n\n image: this.weldLayerConfiguration,\n });\n stateList.pushObject({\n complete: false,\n label: 'Categorize Sketches',\n });\n return stateList;\n }\n\n @computed('weldingDetails', 'weldTypes', 'grooveType', 'jointType}')\n get showMissingValuesMessage() {\n let { weldingDetails, weldTypes, grooveType, jointType } = this;\n return (\n isEmpty(grooveType) || isEmpty(jointType) || isEmpty(weldingDetails) || isEmpty(weldTypes)\n );\n }\n\n @computed('weldTypes.[]')\n get selectedWeldTypes() {\n let { weldTypes } = this;\n let result = [];\n weldTypes.forEach((type) => {\n let { weldType } = type;\n if (\n weldType === WELD_TYPES.BUTT_WELD ||\n weldType === WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD\n ) {\n if (!result.findBy('id', 'butt-weld')) {\n result.pushObject({\n id: 'butt-weld',\n label: 'Full Penetration Butt Weld',\n });\n }\n }\n if (weldType === WELD_TYPES.FILLET_WELD) {\n if (!result.findBy('id', 'fillet-weld')) {\n result.pushObject({\n id: 'fillet-weld',\n label: 'Fillet Weld',\n });\n }\n }\n if (weldType === WELD_TYPES.BRANCH_CONNECTION) {\n if (!result.findBy('id', 'branch-connection')) {\n result.pushObject({\n id: 'branch-connection',\n label: 'Branch Connection',\n });\n }\n }\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (!result.findBy('id', 'overlay-weld')) {\n result.pushObject({\n id: 'overlay-weld',\n label: 'Overlay Weld',\n });\n }\n }\n if (\n weldType === WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD ||\n weldType === WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD\n ) {\n if (!result.findBy('id', 'partial-butt-weld')) {\n result.pushObject({\n id: 'partial-butt-weld',\n label: 'Partial Penetration Butt Weld',\n });\n }\n }\n });\n return result;\n }\n\n generateNewImageName(newName, type = 'groove') {\n return `${newName.replace(/[^A-Z0-9]+/gi, '_')}_${type}_${moment().format(\n 'YYYY_MM_DD_HH_mm_SS'\n )}.png`;\n }\n\n saveBaseImage = task(async ({ image, state }) => {\n let { loading, alert, intl } = this;\n await timeout(300);\n loading.block(intl.t('components.weld-sketch-designer.wizard.loading-messages.groove-design'));\n try {\n let grooveDesignBaseUpload = null;\n if (isEmpty(this.grooveDesignBaseImageFileUpload)) {\n grooveDesignBaseUpload = await this.fileService.uploadNewBase64Image.perform(\n this.generateNewImageName(this.grooveDesignName, 'base-image'),\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n } else {\n grooveDesignBaseUpload = this.grooveDesignBaseImageFileUpload;\n await this.fileService.updateExistingBase64Image.perform(\n grooveDesignBaseUpload.id,\n image,\n 'base-image'\n );\n // Save image to update the last updated time\n await grooveDesignBaseUpload.save();\n }\n\n let weldLayerConfigurationUpload = null;\n if (isEmpty(this.weldLayerConfigurationBaseImageFileUpload)) {\n weldLayerConfigurationUpload = await this.fileService.uploadNewBase64Image.perform(\n this.generateNewImageName(this.weldLayerConfigurationName, 'base-image'),\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n } else {\n weldLayerConfigurationUpload = this.weldLayerConfigurationBaseImageFileUpload;\n await this.fileService.updateExistingBase64Image.perform(\n weldLayerConfigurationUpload.id,\n image,\n 'base-image'\n );\n // Save image to update the last updated time\n await weldLayerConfigurationUpload.save();\n }\n set(this, 'grooveDesignBaseImageFileUpload', grooveDesignBaseUpload);\n set(this, 'weldLayerConfigurationBaseImageFileUpload', weldLayerConfigurationUpload);\n set(this, 'baseImageData', `data:image/png;base64,${image}`);\n set(this, 'baseImageState', state);\n set(this, 'currentStep', '3');\n this.analytics.trackEvent('weld-sketch-move-confirm-base-image');\n } catch (e) {\n alert.error(intl.t('components.weld-sketch-designer.errors.unknown', { error: e }));\n } finally {\n loading.unblock();\n }\n });\n\n saveGrooveDesign = task(async ({ image, state }) => {\n let { loading, alert, intl } = this;\n loading.block(\n intl.t('components.weld-sketch-designer.wizard.loading-messages.preparing-image-confirmation')\n );\n try {\n let grooveDesignUpload = null;\n if (isEmpty(this.grooveDesignRenderedImageFileUpload)) {\n grooveDesignUpload = await this.fileService.uploadNewBase64Image.perform(\n this.generateNewImageName(this.grooveDesignName, 'groove'),\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n } else {\n grooveDesignUpload = this.grooveDesignRenderedImageFileUpload;\n await this.fileService.updateExistingBase64Image.perform(\n grooveDesignUpload.id,\n image,\n FILE_CONTEXT.GROOVE_DESIGN\n );\n // Save image to update the last updated time\n await grooveDesignUpload.save();\n }\n set(this, 'grooveDesignRenderedImageFileUpload', grooveDesignUpload);\n set(this, 'grooveDesignBase64', image);\n set(this, 'grooveDesign', `data:image/png;base64,${image}`);\n set(this, 'grooveDesignState', state);\n set(this, 'currentStep', '5');\n this.analytics.trackEvent('weld-sketch-move-groove-design-confirm');\n } catch (e) {\n alert.error(intl.t('components.weld-sketch-designer.errors.unknown', { error: e }));\n } finally {\n loading.unblock();\n }\n });\n\n saveWeldLayerConfiguration = task(async ({ image, state }) => {\n let { loading, alert, intl } = this;\n loading.block();\n this.generateNewImageName(this.weldLayerConfigurationName, 'weld-layer');\n try {\n let weldLayerUpload = null;\n if (isEmpty(this.weldLayerConfigurationRenderedImageFileUpload)) {\n weldLayerUpload = await this.fileService.uploadNewBase64Image.perform(\n this.generateNewImageName(this.weldLayerConfigurationName, 'weld-layer'),\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n } else {\n weldLayerUpload = this.weldLayerConfigurationRenderedImageFileUpload;\n await this.fileService.updateExistingBase64Image.perform(\n weldLayerUpload.id,\n image,\n FILE_CONTEXT.WELD_LAYER_CONFIGURATION\n );\n // Save image to update the last updated time\n await weldLayerUpload.save();\n }\n set(this, 'weldLayerConfigurationRenderedImageFileUpload', weldLayerUpload);\n set(this, 'weldLayerConfigurationBase64', image);\n set(this, 'weldLayerConfiguration', `data:image/png;base64,${image}`);\n set(this, 'weldLayerConfigurationState', state);\n set(this, 'currentStep', '7');\n this.analytics.trackEvent('weld-sketch-move-weld-layer-configuration-confirm');\n } catch (e) {\n alert.error(intl.t('components.weld-sketch-designer.errors.unknown', { error: e }));\n } finally {\n loading.unblock();\n }\n });\n\n saveGrooveDesignInstance = task(async () => {\n let { alert, intl } = this;\n if (isEmpty(this.pendingGrooveDesignInstance)) {\n let groove = this.store.createRecord('groove-design', {\n description: this.grooveDesignName,\n longDescription: this.grooveDesignName,\n weldingDetails: this.weldingDetails,\n weldTypes: this.weldTypes,\n grooveType: get(this, 'grooveShape.key'),\n jointType: get(this, 'jointType.key'),\n imageState: JSON.stringify(this.grooveDesignState),\n imageSituation: 'TEMPLATE',\n image: this.grooveDesignBaseImageFileUpload,\n renderedImage: this.grooveDesignRenderedImageFileUpload,\n });\n set(this, 'pendingGrooveDesignInstance', groove);\n }\n if (this.pendingGrooveDesignInstance.isNew) {\n try {\n await this.pendingGrooveDesignInstance.save();\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.weld-sketch-designer.errors.duplicate-groove-design', {\n name: this.grooveDesignName,\n })\n );\n } else {\n alert.error(intl.t('components.weld-sketch-designer.errors.unknown', { error: reason }));\n }\n }\n }\n });\n\n saveWeldLayerConfigurationInstance = task(async () => {\n let { alert, intl } = this;\n if (isEmpty(this.pendingWeldLayerConfigurationInstance)) {\n let groove = this.store.createRecord('weld-layer-configuration', {\n description: this.weldLayerConfigurationName,\n longDescription: this.weldLayerConfigurationName,\n weldingDetails: this.weldingDetails,\n weldTypes: this.weldTypes,\n grooveType: get(this, 'grooveShape.key'),\n jointType: get(this, 'jointType.key'),\n imageState: JSON.stringify(this.weldLayerConfigurationState),\n imageSituation: 'TEMPLATE',\n upload: this.weldLayerConfigurationBaseImageFileUpload,\n renderedImage: this.weldLayerConfigurationRenderedImageFileUpload,\n });\n set(this, 'pendingWeldLayerConfigurationInstance', groove);\n }\n if (this.pendingWeldLayerConfigurationInstance.isNew) {\n try {\n await this.pendingWeldLayerConfigurationInstance.save();\n } catch (reason) {\n if (isDuplicateError(reason)) {\n alert.error(\n intl.t('components.weld-sketch-designer.errors.duplicate-weld-layer', {\n name: this.weldLayerConfigurationName,\n })\n );\n } else {\n alert.error(intl.t('components.weld-sketch-designer.errors.unknown', { error: reason }));\n }\n }\n }\n });\n\n finalize = task(async () => {\n let { loading, router } = this;\n loading.block();\n try {\n await this.saveGrooveDesignInstance.perform();\n await this.saveWeldLayerConfigurationInstance.perform();\n this.onFinishDrawing();\n this.analytics.trackEvent('weld-sketch-finish');\n router.transitionTo('weld-sketches');\n } finally {\n loading.unblock();\n }\n });\n\n @action\n setImageName(name) {\n set(this, 'grooveDesignName', `${name} - Groove Design`);\n set(this, 'weldLayerConfigurationName', `${name} - Weld Layer Configuration`);\n }\n\n @action\n moveStep2() {\n if (isEmpty(this.grooveDesignName) || isEmpty(this.weldLayerConfigurationName)) {\n this.alert.error(\n this.intl.t('components.weld-sketch-designer.errors.base-image-name-required')\n );\n set(this, 'nameErrors', [{ message: this.intl.t('generic.error.field-required') }]);\n return;\n }\n this.analytics.trackEvent('weld-sketch-move-base-image-design');\n set(this, 'currentStep', '2');\n set(this, 'substep', 'draw');\n this.onStartDrawing();\n }\n\n @action\n moveStep2Upload() {\n if (isEmpty(this.grooveDesignName) || isEmpty(this.weldLayerConfigurationName)) {\n this.alert.error(\n this.intl.t('components.weld-sketch-designer.errors.base-image-name-required')\n );\n set(this, 'nameErrors', [{ message: this.intl.t('generic.error.field-required') }]);\n return;\n }\n set(this, 'currentStep', '2');\n set(this, 'substep', 'upload');\n }\n\n @action\n moveStep3FromUpload() {\n set(this, 'currentStep', '3');\n }\n\n @action\n returnStep2() {\n set(this, 'currentStep', '2');\n // Reset the base image state to return to this step (otherwise states will\n // stack on top of each other)\n set(this, 'baseImageData', null);\n this.analytics.trackEvent('weld-sketch-return-to-base-image-design');\n }\n\n @action\n returnStep3() {\n set(this, 'currentStep', '3');\n this.analytics.trackEvent('weld-sketch-return-to-base-image-confirmation');\n }\n\n @action\n moveStep4() {\n set(this, 'currentStep', '4');\n this.analytics.trackEvent('weld-sketch-move-groove-design');\n }\n\n @action\n returnStep4() {\n set(this, 'currentStep', '4');\n this.analytics.trackEvent('weld-sketch-return-to-groove-design');\n }\n\n @action\n moveStep5() {\n set(this, 'currentStep', '5');\n }\n\n @action\n returnStep5() {\n set(this, 'currentStep', '5');\n this.analytics.trackEvent('weld-sketch-return-to-groove-design-comfirm');\n }\n\n @action\n moveStep6() {\n set(this, 'currentStep', '6');\n this.analytics.trackEvent('weld-sketch-move-weld-layer-configuration-design');\n }\n\n @action\n returnStep6() {\n set(this, 'currentStep', '6');\n this.analytics.trackEvent('weld-sketch-return-to-weld-layer-configuration-design');\n }\n\n @action\n returnStep7() {\n set(this, 'currentStep', '7');\n this.analytics.trackEvent('weld-sketch-return-to-weld-layer-configuration-confirmation');\n }\n\n @action\n moveStep8() {\n set(this, 'currentStep', '8');\n this.analytics.trackEvent('weld-sketch-move-sketch-data-entry');\n }\n\n @action\n setWeldTypes(values) {\n let weldTypes = values;\n let { realWeldTypeOptions } = this;\n let result = [];\n set(this, 'weldTypes', []);\n\n weldTypes.forEach((type) => {\n if (type.id === 'butt-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'fillet-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.FILLET_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'branch-connection') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.BRANCH_CONNECTION)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'overlay-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.OVERLAY_WELD)\n .forEach((e) => result.pushObject(e));\n }\n if (type.id === 'partial-butt-weld') {\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n realWeldTypeOptions\n .filterBy('weldType', WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD)\n .forEach((e) => result.pushObject(e));\n }\n });\n set(this, 'weldTypes', result);\n }\n\n @action\n setBaseImageUploaded(url, fileUpload) {\n set(this, 'grooveDesignBaseImageFileUpload', fileUpload);\n set(this, 'weldLayerConfigurationBaseImageFileUpload', fileUpload);\n set(this, 'uploadedImagePath', url);\n set(this, 'baseImageData', url);\n set(this, 'baseImageState', {});\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
\\n

\\n WeldCloudProductivity\\n

\\n
\\n

\\n {{t \\\"components.weldcloud-license-required-modal.messages.license-required\\\"}}\\n

\\n

\\n \\n WeldCloud™ - Productivity\\n {{t \\\"components.weldcloud-license-required-modal.messages.main\\\"}}\\n

\\n

\\n {{t \\\"components.weldcloud-license-required-modal.messages.contact\\\"}}\\n support@indusuite.com\\n

\\n
\\n \\n
\\n \\n
\\n
\\n\", {\"contents\":\"\\n \\n
\\n

\\n WeldCloudProductivity\\n

\\n
\\n

\\n {{t \\\"components.weldcloud-license-required-modal.messages.license-required\\\"}}\\n

\\n

\\n \\n WeldCloud™ - Productivity\\n {{t \\\"components.weldcloud-license-required-modal.messages.main\\\"}}\\n

\\n

\\n {{t \\\"components.weldcloud-license-required-modal.messages.contact\\\"}}\\n support@indusuite.com\\n

\\n
\\n \\n
\\n \\n
\\n
\\n\",\"moduleName\":\"weldnote/components/weldcloud-license-required-modal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldcloud-license-required-modal.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.certificates.list as |certificate|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.emission-date\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.internal-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.external-deadline\\\"\\n }}
{{certificate.certificateNumber}}{{certificate.emissionDate}}\\n {{certificate.internalRequalificationDeadline}}\\n {{#let\\n (days-until\\n this.currentDate certificate.internalRequalificationDeadline format=@dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"}}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n \\n {{#if (has-value certificate.externalRequalificationDeadline)}}\\n {{certificate.externalRequalificationDeadline}}\\n {{days-until\\n this.currentDate\\n certificate.externalRequalificationDeadline\\n format=@dateFormat\\n }}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-external-deadline\\\"\\n }}\\n {{/if}}\\n
{{t\\n \\\"components.welder-certificate-expiration-table.no-certificates\\\"\\n }}
\", {\"contents\":\"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.certificates.list as |certificate|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.emission-date\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.internal-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.external-deadline\\\"\\n }}
{{certificate.certificateNumber}}{{certificate.emissionDate}}\\n {{certificate.internalRequalificationDeadline}}\\n {{#let\\n (days-until\\n this.currentDate certificate.internalRequalificationDeadline format=@dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"}}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n \\n {{#if (has-value certificate.externalRequalificationDeadline)}}\\n {{certificate.externalRequalificationDeadline}}\\n {{days-until\\n this.currentDate\\n certificate.externalRequalificationDeadline\\n format=@dateFormat\\n }}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-external-deadline\\\"\\n }}\\n {{/if}}\\n
{{t\\n \\\"components.welder-certificate-expiration-table.no-certificates\\\"\\n }}
\",\"moduleName\":\"weldnote/components/welder-certificate-dashboard-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welder-certificate-dashboard-table.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport Component from '@ember/component';\nimport moment from 'moment';\nimport { assert } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class WelderCertificateDashboardTable extends Component {\n init() {\n super.init(...arguments);\n assert(\n 'Date format is required for welder-certificate-dashboard-table',\n !isEmpty(this.dateFormat)\n );\n }\n\n @computed\n get currentDate() {\n return moment().format(this.dateFormat);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.filters\\\"}}\\n
\\n
\\n \\n \\n \\n {{company.name}}\\n \\n \\n {{#if @showCustomDeadline}}\\n \\n \\n {{deadline.label}}\\n \\n \\n \\n {{#if this.showCustomDeadlineField}}\\n \\n {{/if}}\\n \\n {{/if}}\\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.certificates-to-revalidate\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @loadCertificatesTask.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each @certificates as |certificate|}}\\n \\n \\n \\n {{certificate.certificateNumber}}\\n \\n {{#if (has-value certificate.standard)}}\\n ({{certificate.standard}})\\n {{#if (has-value certificate.company)}}\\n \\n -\\n {{certificate.company}}\\n {{/if}}\\n \\n {{/if}}\\n {{#if (eq certificate.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n {{else if (eq certificate.certificateType \\\"WELDER\\\")}}\\n WPQ\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n {{#if this.loadCertificate.isRunning}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n\\n {{/if}}\\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.stamp\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.emission-date\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.internal-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.external-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.validate\\\"\\n }}
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.searching-certificates\\\"\\n }}\\n \\n
\\n {{#if (has-value certificate.welderId)}}\\n \\n {{certificate.welderStamp}}\\n \\n {{certificate.welderName}}\\n {{/if}}\\n {{certificate.emissionDate}}\\n {{certificate.internalRequalificationDeadline}}\\n {{#let\\n (days-until\\n this.currentDate\\n certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"\\n }}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n \\n \\n {{#if (has-value certificate.externalRequalificationDeadline)}}\\n {{certificate.externalRequalificationDeadline}}\\n {{days-until\\n this.currentDate\\n certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-external-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.cancel-revalidate-single-button\\\"\\n }}\\n {{else}}\\n {{#if this.userSession.canRevalidateCertificate}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.revalidate-single-button\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.loading-certificate-to-revalidate\\\"\\n }}\\n \\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.select-ndt-reports\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isCurrentCertificateASME}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{#if this.revalidating}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.confirm-revalidate-single-button\\\"\\n }}\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n
{{this.noCertificatesMessage}}
\\n
\\n \\n
\\n
\\n
\\n\\n{{#if this.showInternalRevalidationSurpassesExternalDeadlineSingle}}\\n \\n \\n {{#if this.showConfirmRevalidateInternally}}\\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-confirm-message\\\"\\n }}

\\n
\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n {{t \\\"generic.buttons.go-back\\\"}}\\n
\\n
\\n
\\n {{else if this.showConfirmRevalidateExternally}}\\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-confirm-message\\\"\\n }}

\\n
\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n {{t \\\"generic.buttons.go-back\\\"}}\\n
\\n
\\n
\\n {{else}}\\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.help-message\\\"\\n dayCount=this.errorData.daysToExternalExpire\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.currentCertificateValidateInstance.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.currentCertificateValidateInstance.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n\\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n
\\n
\\n \\n{{/if}}\", {\"contents\":\"
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.filters\\\"}}\\n
\\n
\\n \\n \\n \\n {{company.name}}\\n \\n \\n {{#if @showCustomDeadline}}\\n \\n \\n {{deadline.label}}\\n \\n \\n \\n {{#if this.showCustomDeadlineField}}\\n \\n {{/if}}\\n \\n {{/if}}\\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.certificates-to-revalidate\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @loadCertificatesTask.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each @certificates as |certificate|}}\\n \\n \\n \\n {{certificate.certificateNumber}}\\n \\n {{#if (has-value certificate.standard)}}\\n ({{certificate.standard}})\\n {{#if (has-value certificate.company)}}\\n \\n -\\n {{certificate.company}}\\n {{/if}}\\n \\n {{/if}}\\n {{#if (eq certificate.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n {{else if (eq certificate.certificateType \\\"WELDER\\\")}}\\n WPQ\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n {{#if this.loadCertificate.isRunning}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n\\n {{/if}}\\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.stamp\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.emission-date\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.internal-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.external-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table-internal.columns.validate\\\"\\n }}
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.searching-certificates\\\"\\n }}\\n \\n
\\n {{#if (has-value certificate.welderId)}}\\n \\n {{certificate.welderStamp}}\\n \\n {{certificate.welderName}}\\n {{/if}}\\n {{certificate.emissionDate}}\\n {{certificate.internalRequalificationDeadline}}\\n {{#let\\n (days-until\\n this.currentDate\\n certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"\\n }}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n \\n \\n {{#if (has-value certificate.externalRequalificationDeadline)}}\\n {{certificate.externalRequalificationDeadline}}\\n {{days-until\\n this.currentDate\\n certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-external-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.cancel-revalidate-single-button\\\"\\n }}\\n {{else}}\\n {{#if this.userSession.canRevalidateCertificate}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.revalidate-single-button\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.loading-certificate-to-revalidate\\\"\\n }}\\n \\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.select-ndt-reports\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isCurrentCertificateASME}}\\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{#if this.revalidating}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.confirm-revalidate-single-button\\\"\\n }}\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n
{{this.noCertificatesMessage}}
\\n
\\n \\n
\\n
\\n
\\n\\n{{#if this.showInternalRevalidationSurpassesExternalDeadlineSingle}}\\n \\n \\n {{#if this.showConfirmRevalidateInternally}}\\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-confirm-message\\\"\\n }}

\\n
\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n {{t \\\"generic.buttons.go-back\\\"}}\\n
\\n
\\n
\\n {{else if this.showConfirmRevalidateExternally}}\\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-confirm-message\\\"\\n }}

\\n
\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n {{t \\\"generic.buttons.go-back\\\"}}\\n
\\n
\\n
\\n {{else}}\\n \\n \\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.help-message\\\"\\n dayCount=this.errorData.daysToExternalExpire\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-internal\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.internal-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.currentCertificateValidateInstance.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.buttons.revalidate-external\\\"\\n }}\\n

{{t\\n \\\"components.welder-certificate-expiration-table-internal.period-internal-single.message.external-revalidate-message\\\"\\n }}\\n {{format-date\\n date=this.currentCertificateValidateInstance.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}

\\n
\\n
\\n\\n {{/if}}\\n
\\n \\n
\\n {{t \\\"generic.buttons.go-back\\\"}}\\n
\\n
\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/welder-certificate-expiration-table-internal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welder-certificate-expiration-table-internal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty, alias, empty, equal } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport ENV from 'weldnote/config/environment';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport { getErrorCode, getErrorDetail } from 'weldnote/utils/json-api-errors';\nimport { isStandardASME } from 'weldnote/utils/standards';\nimport { task } from 'ember-concurrency';\nimport moment from 'moment';\n\nconst { ERROR_CODES, CERTIFICATE_INTERNAL_REVALIDATION_TYPE, DEFAULT_DATE_FORMAT } = Constants;\n\n@classic\nexport default class WelderCertificateExpirationTableInternal extends Component {\n // Required parameters must be passed in\n @service\n store;\n\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service('welder-certificate-data')\n certificateData;\n\n @service\n alertMessage;\n\n @service\n userSession;\n\n @service\n loading;\n\n get esabCloudLink() {\n return ENV.esabCloudLink;\n }\n\n certificates = null;\n\n page = 1;\n\n revalidating = false;\n\n currentCertificateValidate = null;\n\n selectedCompanies = null;\n\n showCustomDeadline = false;\n\n // Flag controlling the confirm of validating internally in special case (internal date > external date)\n showConfirmRevalidateInternally = false;\n\n // NDT Report 1 for a current certificate validating\n report1 = null;\n\n // NDT Report 2 for a current certificate validating\n report2 = null;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('certificateData.deadlineOptions')\n deadlineOptions;\n\n @equal('currentSelectedDeadline.key', 'custom')\n showCustomDeadlineField;\n\n @notEmpty('currentCertificateValidateInstance')\n isCertificateRevalidating;\n\n @computed('defaultDeadline', 'currentSelectedDeadline')\n get selectedDeadline() {\n if (!isEmpty(this.currentSelectedDeadline)) {\n return this.currentSelectedDeadline;\n }\n return this.defaultDeadline;\n }\n\n @computed\n get currentDay() {\n // The endOf('day') is here to work around this issue\n // If I just return new Date() it does not work, and triggers the double rendering\n // https://github.com/edgycircle/ember-pikaday/issues/141\n let today = moment(new Date()).endOf('day');\n return today.toDate();\n }\n\n @computed('userSession.dateFormat')\n get currentDate() {\n return moment().format(this.userSession.dateFormat);\n }\n\n @computed('emptyListMessage')\n get noCertificatesMessage() {\n if (!isEmpty(this.emptyListMessage)) {\n return this.emptyListMessage;\n }\n return this.translate('no-certificates');\n }\n\n @computed('currentCertificateValidateInstance')\n get isCurrentCertificateASME() {\n let { currentCertificateValidateInstance } = this;\n if (!isEmpty(currentCertificateValidateInstance)) {\n return isStandardASME(currentCertificateValidateInstance.standard);\n }\n return false;\n }\n\n init() {\n super.init(...arguments);\n if (!isEmpty(this.defaultCompanies)) {\n set(this, 'selectedCompanies', this.defaultCompanies);\n }\n }\n\n translate(message, params = {}) {\n return this.intl.t(\n `components.welder-certificate-expiration-table-internal.${message}`,\n params\n );\n }\n\n prepareOptions() {\n let options = {};\n if (!isEmpty(this.selectedCompanies)) {\n let companiesSerialized = this.selectedCompanies\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n options.company = companiesSerialized;\n }\n options.page = this.page;\n return options;\n }\n\n prepareSearchOptions() {\n let options = {};\n if (!isEmpty(this.selectedCompanies)) {\n let companiesSerialized = this.selectedCompanies\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n options.company = companiesSerialized;\n }\n options.page = this.page;\n\n if (this.showCustomDeadlineField) {\n let time = parseInt(this.customDeadline);\n if (!isNaN(time)) {\n options.deadlineTime = time;\n }\n } else if (!isEmpty(this.selectedDeadline)) {\n let time = parseInt(get(this, 'selectedDeadline.time'));\n if (!isNaN(time)) {\n options.deadlineTime = time;\n }\n }\n return options;\n }\n\n formatLastWeldingDate() {\n let { lastWeldingDate } = this;\n if (!isEmpty(lastWeldingDate)) {\n return moment(lastWeldingDate).format(DEFAULT_DATE_FORMAT);\n }\n return null;\n }\n\n searchCertificates() {\n let options = this.prepareSearchOptions();\n this.loadCertificatesTask.perform(options);\n }\n\n loadCertificate = task(\n {\n drop: true,\n },\n async (id) => {\n let { store } = this;\n let certificate = await store.findRecord('welder-certificate', id);\n set(this, 'currentCertificateValidateInstance', certificate);\n }\n );\n\n @action\n revalidate(id) {\n set(this, 'currentCertificateValidate', id);\n this.loadCertificate.perform(id);\n }\n\n @action\n cancel() {\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'report1', null);\n set(this, 'report2', null);\n }\n\n @action\n confirm() {\n let options = this.prepareOptions();\n let { alertMessage: alert, currentCertificateValidateInstance: certificate, loading } = this;\n if (!isEmpty(certificate)) {\n set(this, 'currentCertificateValidateInstance', certificate);\n set(this, 'revalidating', true);\n loading.block();\n this.validateSingle(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR,\n get(this, 'report1.id'),\n get(this, 'report2.id'),\n this.formatLastWeldingDate()\n )\n .then((data) => {\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'revalidating', false);\n this.postValidate();\n this.loadCertificatesTask.perform(options);\n let dateDisplay = data.newDate;\n alert.success(\n this.translate('single-certificates-revalidated', {\n certificateNumber: certificate.certificateNumber,\n newDate: dateDisplay,\n })\n );\n })\n .catch((reason) => {\n if (\n getErrorCode(reason) ===\n ERROR_CODES.CERTIFICATE_INTERNAL_DEADLINE_AFTER_EXTERNAL_DEADLINE\n ) {\n let errorData = JSON.parse(getErrorDetail(reason));\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', true);\n set(this, 'revalidating', false);\n set(this, 'errorData', errorData);\n } else {\n alert.error(\n this.translate('single-certificates-error', {\n certificateNumber: certificate.certificateNumber,\n reason: reason.message,\n })\n );\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'revalidating', false);\n }\n })\n .finally(() => {\n loading.unblock();\n });\n }\n }\n\n @action\n search() {\n this.searchCertificates();\n }\n\n @action\n chooseCompany(companies) {\n set(this, 'selectedCompanies', companies);\n set(this, 'page', 1);\n this.searchCertificates();\n }\n\n @action\n chooseDeadline(deadline) {\n set(this, 'currentSelectedDeadline', deadline);\n if (deadline !== 'custom') {\n set(this, 'customDeadline', null);\n }\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'page', 1);\n this.searchCertificates();\n }\n\n @action\n setCustomDeadline(deadline) {\n set(this, 'customDeadline', deadline);\n set(this, 'page', 1);\n this.searchCertificates();\n }\n\n @action\n searchPage(pageNum = 1) {\n set(this, 'page', pageNum);\n this.searchCertificates();\n }\n\n @action\n cancelInternalDeadlineOverExternal() {\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateInternally', false);\n set(this, 'showConfirmRevalidateExternally', false);\n }\n\n @action\n confirmValidateInternal() {\n set(this, 'showConfirmRevalidateInternally', true);\n }\n\n @action\n cancelValidateInternal() {\n set(this, 'showConfirmRevalidateInternally', false);\n }\n\n @action\n validateOverideInternalSingleCertificate() {\n let { currentCertificateValidateInstance: certificate, alertMessage: alert, loading } = this;\n let options = this.prepareOptions();\n loading.block();\n this.validateSingle(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.INTERNAL,\n get(this, 'report1.id'),\n get(this, 'report2.id')\n )\n .then((data) => {\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'revalidating', false);\n this.postValidate();\n this.loadCertificatesTask.perform(options);\n let dateDisplay = data.newDate;\n alert.success(\n this.translate('single-certificates-revalidated', {\n certificateNumber: certificate.certificateNumber,\n newDate: dateDisplay,\n })\n );\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateInternally', false);\n })\n .catch((reason) => {\n alert.error(\n this.translate('single-certificates-error', {\n certificateNumber: certificate.certificateNumber,\n reason: reason.message,\n })\n );\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'revalidating', false);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n\n @action\n confirmValidateExternal() {\n set(this, 'showConfirmRevalidateExternally', true);\n }\n\n @action\n cancelValidateExternal() {\n set(this, 'showConfirmRevalidateExternally', false);\n }\n\n @action\n validateOverideExternalSingleCertificate() {\n let { currentCertificateValidateInstance: certificate, alertMessage: alert, loading } = this;\n let options = this.prepareOptions();\n loading.block();\n this.validateSingle(\n certificate,\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE.EXTERNAL,\n get(this, 'report1.id'),\n get(this, 'report2.id')\n )\n .then((data) => {\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'revalidating', false);\n this.postValidate();\n this.loadCertificatesTask.perform(options);\n let dateDisplay = data.newDate;\n alert.success(\n this.translate('single-certificates-revalidated', {\n certificateNumber: certificate.certificateNumber,\n newDate: dateDisplay,\n })\n );\n set(this, 'showInternalRevalidationSurpassesExternalDeadlineSingle', false);\n set(this, 'showConfirmRevalidateExternally', false);\n })\n .catch((reason) => {\n alert.error(\n this.translate('single-certificates-error', {\n certificateNumber: certificate.certificateNumber,\n reason: reason.message,\n })\n );\n set(this, 'currentCertificateValidate', null);\n set(this, 'currentCertificateValidateInstance', null);\n set(this, 'revalidating', false);\n })\n .finally(() => {\n loading.unblock();\n });\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.filters\\\"}}\\n
\\n
\\n \\n \\n \\n {{company.name}}\\n \\n \\n {{#if @showCustomDeadline}}\\n \\n \\n {{deadline.label}}\\n \\n \\n \\n {{#if this.showCustomDeadlineField}}\\n \\n {{/if}}\\n \\n {{/if}}\\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.certificates-to-revalidate\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @loadCertificatesTask.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each @certificates as |certificate|}}\\n \\n \\n \\n {{certificate.certificateNumber}}\\n \\n {{#if (has-value certificate.standard)}}\\n ({{certificate.standard}})\\n {{#if (has-value certificate.company)}}\\n \\n -\\n {{certificate.company}}\\n {{/if}}\\n \\n {{/if}}\\n {{#if (eq certificate.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n {{else if (eq certificate.certificateType \\\"WELDER\\\")}}\\n WPQ\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n {{#if this.loadCertificate.isRunning}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.stamp\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.emission-date\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.internal-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.external-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.validate\\\"\\n }}
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.searching-certificates\\\"\\n }}\\n \\n
\\n {{#if (has-value certificate.welderId)}}\\n \\n {{certificate.welderStamp}}\\n \\n {{certificate.welderName}}\\n {{/if}}\\n {{certificate.emissionDate}}\\n {{certificate.internalRequalificationDeadline}}\\n {{#let\\n (days-until\\n this.currentDate\\n certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"\\n }}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n \\n {{certificate.externalRequalificationDeadline}}\\n \\n {{days-until\\n this.currentDate\\n certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-external-deadline\\\"\\n }}\\n \\n \\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table.cancel-revalidate-single-button\\\"\\n }}\\n {{else}}\\n {{#if this.userSession.canRevalidateCertificate}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table.revalidate-single-button\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.loading-certificate-to-revalidate\\\"\\n }}\\n \\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.select-ndt-reports\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.revalidating}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"components.welder-certificate-expiration-table.confirm-revalidate-single-button\\\"\\n }}\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n
{{this.noCertificatesMessage}}
\\n
\\n \\n
\\n
\\n
\", {\"contents\":\"
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.filters\\\"}}\\n
\\n
\\n \\n \\n \\n {{company.name}}\\n \\n \\n {{#if @showCustomDeadline}}\\n \\n \\n {{deadline.label}}\\n \\n \\n \\n {{#if this.showCustomDeadlineField}}\\n \\n {{/if}}\\n \\n {{/if}}\\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"components.welder-certificate-expiration-table-internal.title.certificates-to-revalidate\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if @loadCertificatesTask.isRunning}}\\n \\n \\n \\n {{else}}\\n {{#each @certificates as |certificate|}}\\n \\n \\n \\n {{certificate.certificateNumber}}\\n \\n {{#if (has-value certificate.standard)}}\\n ({{certificate.standard}})\\n {{#if (has-value certificate.company)}}\\n \\n -\\n {{certificate.company}}\\n {{/if}}\\n \\n {{/if}}\\n {{#if (eq certificate.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n {{else if (eq certificate.certificateType \\\"WELDER\\\")}}\\n WPQ\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n {{#if this.loadCertificate.isRunning}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/if}}\\n {{/if}}\\n {{else}}\\n \\n \\n \\n {{/each}}\\n {{/if}}\\n \\n
{{t\\n \\\"components.welder-certificate-expiration-table.columns.certificate-number\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.stamp\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.emission-date\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.internal-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.external-deadline\\\"\\n }}{{t\\n \\\"components.welder-certificate-expiration-table.columns.validate\\\"\\n }}
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.searching-certificates\\\"\\n }}\\n \\n
\\n {{#if (has-value certificate.welderId)}}\\n \\n {{certificate.welderStamp}}\\n \\n {{certificate.welderName}}\\n {{/if}}\\n {{certificate.emissionDate}}\\n {{certificate.internalRequalificationDeadline}}\\n {{#let\\n (days-until\\n this.currentDate\\n certificate.internalRequalificationDeadline\\n format=this.userSession.dateFormat\\n )\\n as |daysUntil|\\n }}\\n {{#if (has-value daysUntil)}}\\n \\n {{#if (and (gt daysUntil 0) (lte daysUntil 5))}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{else if (lt daysUntil 0)}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.certificate-is-expired-count\\\"\\n }}\\n {{absolute daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days\\\"\\n }}\\n {{else}}\\n {{daysUntil}}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-internal-deadline\\\"\\n }}\\n {{/if}}\\n \\n {{/if}}\\n {{/let}}\\n \\n {{certificate.externalRequalificationDeadline}}\\n \\n {{days-until\\n this.currentDate\\n certificate.externalRequalificationDeadline\\n format=this.userSession.dateFormat\\n }}\\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.days-until-external-deadline\\\"\\n }}\\n \\n \\n \\n {{#if (eq certificate.id this.currentCertificateValidate)}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table.cancel-revalidate-single-button\\\"\\n }}\\n {{else}}\\n {{#if this.userSession.canRevalidateCertificate}}\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table.revalidate-single-button\\\"\\n }}\\n {{/if}}\\n {{/if}}\\n
\\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.loading-certificate-to-revalidate\\\"\\n }}\\n \\n
\\n \\n \\n {{t\\n \\\"components.welder-certificate-expiration-table-internal.messages.select-ndt-reports\\\"\\n }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.revalidating}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t\\n \\\"components.welder-certificate-expiration-table.confirm-revalidate-single-button\\\"\\n }}\\n \\n \\n \\n {{t \\\"generic.buttons.go-back\\\"}}\\n \\n \\n \\n
{{this.noCertificatesMessage}}
\\n
\\n \\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/welder-certificate-expiration-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welder-certificate-expiration-table.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, empty, equal } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport moment from 'moment';\n\n@classic\nexport default class WelderCertificateExpirationTable extends Component {\n // Required parameters must be passed in\n @service\n store;\n\n @service\n intl;\n\n @service('weldnoteData')\n data;\n\n @service\n loading;\n\n @service('welder-certificate-data')\n certificateData;\n\n @service\n alertMessage;\n\n @service\n userSession;\n\n certificates = null;\n\n page = 1;\n\n revalidating = false;\n\n currentCertificateValidate = null;\n\n selectedCompanies = null;\n\n showCustomDeadline = false;\n\n report1 = null;\n\n report2 = null;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('certificateData.deadlineOptions')\n deadlineOptions;\n\n @equal('currentSelectedDeadline.key', 'custom')\n showCustomDeadlineField;\n\n @computed('defaultDeadline', 'currentSelectedDeadline')\n get selectedDeadline() {\n if (!isEmpty(get(this, 'currentSelectedDeadline'))) {\n return get(this, 'currentSelectedDeadline');\n }\n return get(this, 'defaultDeadline');\n }\n\n @computed\n get currentDate() {\n return moment().format(this.userSession.dateFormat);\n }\n\n @computed('emptyListMessage')\n get noCertificatesMessage() {\n if (!isEmpty(get(this, 'emptyListMessage'))) {\n return get(this, 'emptyListMessage');\n }\n return this.translate('no-certificates');\n }\n\n init() {\n super.init(...arguments);\n if (!isEmpty(this.defaultCompanies)) {\n set(this, 'selectedCompanies', this.defaultCompanies);\n }\n }\n\n translate(message, params = {}) {\n return this.intl.t(`components.welder-certificate-expiration-table.${message}`, params);\n }\n\n prepareOptions() {\n let options = {};\n if (!isEmpty(this.selectedCompanies)) {\n let companiesSerialized = this.selectedCompanies\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n options.company = companiesSerialized;\n }\n options.page = get(this, 'page');\n return options;\n }\n\n prepareSearchOptions() {\n let options = {};\n if (!isEmpty(this.selectedCompanies)) {\n let companiesSerialized = this.selectedCompanies\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n options.company = companiesSerialized;\n }\n options.page = get(this, 'page');\n\n if (get(this, 'showCustomDeadlineField')) {\n let time = parseInt(get(this, 'customDeadline'));\n if (!isNaN(time)) {\n options.deadlineTime = time;\n }\n } else if (!isEmpty(get(this, 'selectedDeadline'))) {\n let time = parseInt(get(this, 'selectedDeadline.time'));\n if (!isNaN(time)) {\n options.deadlineTime = time;\n }\n }\n return options;\n }\n\n searchCertificates() {\n let options = this.prepareSearchOptions();\n this.loadCertificatesTask.perform(options);\n }\n\n @action\n revalidate(id) {\n set(this, 'currentCertificateValidate', id);\n }\n\n @action\n cancel() {\n set(this, 'currentCertificateValidate', null);\n set(this, 'report1', null);\n set(this, 'report2', null);\n }\n\n @action\n confirm() {\n let { currentCertificateValidate, loading, alertMessage: alert, store } = this;\n let options = this.prepareOptions();\n if (!isEmpty(currentCertificateValidate)) {\n store.findRecord('welder-certificate', currentCertificateValidate).then((certificate) => {\n loading.block();\n set(this, 'revalidating', true);\n get(this, 'validateSingle')(certificate, get(this, 'report1.id'), get(this, 'report2.id'))\n .then((data) => {\n set(this, 'currentCertificateValidate', null);\n set(this, 'revalidating', false);\n get(this, 'postValidate')();\n this.loadCertificatesTask.perform(options);\n let dateDisplay = data.newDate;\n alert.success(\n this.translate('single-certificates-revalidated', {\n certificateNumber: certificate.get('certificateNumber'),\n newDate: dateDisplay,\n })\n );\n })\n .catch((reason) => {\n alert.error(\n this.translate('single-certificates-error', {\n certificateNumber: certificate.get('certificateNumber'),\n reason: reason.message,\n })\n );\n set(this, 'currentCertificateValidate', null);\n set(this, 'revalidating', false);\n })\n .finally(() => {\n loading.unblock();\n });\n });\n }\n }\n\n @action\n search() {\n this.searchCertificates();\n }\n\n @action\n chooseCompany(companies) {\n set(this, 'selectedCompanies', companies);\n set(this, 'page', 1);\n this.searchCertificates();\n }\n\n @action\n chooseDeadline(deadline) {\n set(this, 'currentSelectedDeadline', deadline);\n if (deadline !== 'custom') {\n set(this, 'customDeadline', null);\n }\n set(this, 'page', 1);\n this.searchCertificates();\n }\n\n @action\n setCustomDeadline(deadline) {\n set(this, 'customDeadline', deadline);\n set(this, 'page', 1);\n this.searchCertificates();\n }\n\n @action\n searchPage(pageNum = 1) {\n set(this, 'page', pageNum);\n this.searchCertificates();\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
{{t \\\"components.welding-details-chooser.layers\\\"}}
\\n\\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n{{#if @showSides}}\\n
{{t \\\"components.welding-details-chooser.sides\\\"}}
\\n \\n \\n {{#unless this.isFilletWeld}}\\n
\\n \\n
\\n {{/unless}}\\n
\\n \\n
\\n {{#unless this.isFilletWeld}}\\n
\\n \\n
\\n
\\n \\n
\\n {{/unless}}\\n
\\n \\n
\\n
\\n
\\n{{/if}}\\n{{#if @showOther}}\\n
{{t \\\"components.welding-details-chooser.other\\\"}}
\\n \\n \\n
\\n \\n
\\n
\\n
\\n{{/if}}\", {\"contents\":\"
{{t \\\"components.welding-details-chooser.layers\\\"}}
\\n\\n \\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n{{#if @showSides}}\\n
{{t \\\"components.welding-details-chooser.sides\\\"}}
\\n \\n \\n {{#unless this.isFilletWeld}}\\n
\\n \\n
\\n {{/unless}}\\n
\\n \\n
\\n {{#unless this.isFilletWeld}}\\n
\\n \\n
\\n
\\n \\n
\\n {{/unless}}\\n
\\n \\n
\\n
\\n
\\n{{/if}}\\n{{#if @showOther}}\\n
{{t \\\"components.welding-details-chooser.other\\\"}}
\\n \\n \\n
\\n \\n
\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/welding-details-approval-range.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-details-approval-range.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { not } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport { isFilletWeld } from 'weldnote/utils/rules/weld-type';\n\nconst { WELDING_DETAILS } = Constants;\n\n// Name of the identifier attribute on Welding Detail\nconst ID_ATTRIBUTE = 'shortDesignation';\n\n@classic\nexport default class WeldingDetailsApprovalRange extends Component {\n @not('isEditing')\n isDisabled;\n\n selectedDetails = null;\n\n // Flag to display the sides section, defaults to true\n showSides = true;\n\n // Flag to display the others section, defaults to true\n showOther = true;\n\n @computed('selectedDetails.[]')\n get isSingleLayer() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_LAYER));\n }\n\n @computed('selectedDetails.[]')\n get isMultiLayer() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.MULTI_LAYER));\n }\n\n @computed('selectedDetails.[]')\n get isSingleSideNoBacking() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_NO_BACKING));\n }\n\n @computed('selectedDetails.[]')\n get isSingleSideMaterialBacking() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING));\n }\n\n @computed('selectedDetails.[]')\n get isSingleSideGasBacking() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING));\n }\n\n @computed('selectedDetails.[]')\n get isSingleSideFluxBacking() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING));\n }\n\n @computed('selectedDetails.[]')\n get isBothSides() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.BOTH_SIDES));\n }\n\n @computed('selectedDetails.[]')\n get isConsumableInsert() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.CONSUMABLE_INSERT));\n }\n\n @computed('weldType')\n get isFilletWeld() {\n if (isEmpty(this.weldType)) {\n return false;\n }\n return isFilletWeld(this.weldType);\n }\n\n findSelectedDetail(designation) {\n let { selectedDetails } = this;\n if (!isEmpty(selectedDetails)) {\n return selectedDetails.findBy(ID_ATTRIBUTE, designation);\n }\n return null;\n }\n\n getDetail(designation) {\n let { allDetails } = this;\n if (!isEmpty(allDetails)) {\n return allDetails.findBy(ID_ATTRIBUTE, designation);\n }\n return null;\n }\n\n removeDetail(designation) {\n let result = [];\n let { selectedDetails } = this;\n selectedDetails.forEach((item) => {\n result.pushObject(item);\n });\n\n result = result.reject((item) => {\n return get(item, ID_ATTRIBUTE) === designation;\n });\n return result;\n }\n\n addDetail(designation) {\n let result = [];\n let { selectedDetails } = this;\n selectedDetails.forEach((item) => {\n result.pushObject(item);\n });\n\n if (!result.findBy(ID_ATTRIBUTE, designation)) {\n result.pushObject(this.getDetail(designation));\n }\n return result;\n }\n\n processDetail(addProperty, property) {\n let result = [];\n if (addProperty) {\n result = this.addDetail(property);\n } else {\n result = this.removeDetail(property);\n }\n this['on-update-details'](result);\n }\n\n @action\n setSingleLayer(value) {\n this.processDetail(value, WELDING_DETAILS.SINGLE_LAYER);\n }\n\n @action\n setMultiLayer(value) {\n this.processDetail(value, WELDING_DETAILS.MULTI_LAYER);\n }\n\n @action\n setSingleSideNoBacking(value) {\n this.processDetail(value, WELDING_DETAILS.SINGLE_SIDE_NO_BACKING);\n }\n\n @action\n setSingleSideMaterialBacking(value) {\n this.processDetail(value, WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING);\n }\n\n @action\n setSingleSideGasBacking(value) {\n this.processDetail(value, WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING);\n }\n\n @action\n setSingleSideFluxBacking(value) {\n this.processDetail(value, WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING);\n }\n\n @action\n setBothSides(value) {\n this.processDetail(value, WELDING_DETAILS.BOTH_SIDES);\n }\n\n @action\n setConsumableInsert(value) {\n this.processDetail(value, WELDING_DETAILS.CONSUMABLE_INSERT);\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
{{t \\\"components.welding-details-chooser.layers\\\"}}
\\n\\n \\n
\\n \\n Single Layer\\n \\n
\\n
\\n \\n Multi-Layer\\n \\n
\\n
\\n
\\n{{#if @showSides}}\\n
{{t \\\"components.welding-details-chooser.sides\\\"}}
\\n \\n \\n {{#unless this.isFilletWeld}}\\n
\\n \\n Single Side,\\n No Backing\\n \\n
\\n {{/unless}}\\n
\\n Single Side, Material Backing\\n
\\n {{#unless this.isFilletWeld}}\\n
\\n \\n Single Side,\\n Gas Backing\\n \\n
\\n
\\n Single Side, Flux Backing\\n
\\n {{/unless}}\\n
\\n Both Sides\\n
\\n
\\n
\\n{{/if}}\\n{{#if @showOther}}\\n
{{t \\\"components.welding-details-chooser.other\\\"}}
\\n \\n \\n
\\n \\n
\\n
\\n
\\n{{/if}}\\n{{#each @errors as |error|}}\\n {{error.message}}\\n{{/each}}\", {\"contents\":\"
{{t \\\"components.welding-details-chooser.layers\\\"}}
\\n\\n \\n
\\n \\n Single Layer\\n \\n
\\n
\\n \\n Multi-Layer\\n \\n
\\n
\\n
\\n{{#if @showSides}}\\n
{{t \\\"components.welding-details-chooser.sides\\\"}}
\\n \\n \\n {{#unless this.isFilletWeld}}\\n
\\n \\n Single Side,\\n No Backing\\n \\n
\\n {{/unless}}\\n
\\n Single Side, Material Backing\\n
\\n {{#unless this.isFilletWeld}}\\n
\\n \\n Single Side,\\n Gas Backing\\n \\n
\\n
\\n Single Side, Flux Backing\\n
\\n {{/unless}}\\n
\\n Both Sides\\n
\\n
\\n
\\n{{/if}}\\n{{#if @showOther}}\\n
{{t \\\"components.welding-details-chooser.other\\\"}}
\\n \\n \\n
\\n \\n
\\n
\\n
\\n{{/if}}\\n{{#each @errors as |error|}}\\n {{error.message}}\\n{{/each}}\",\"moduleName\":\"weldnote/components/welding-details-chooser.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-details-chooser.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport { or, equal, not } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { A } from '@ember/array';\nimport { get, set, action, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport { isFilletWeld } from 'weldnote/utils/rules/weld-type';\n\nconst { WELDING_DETAILS, WELD_TYPES } = Constants;\n\n@classic\n@classNames('welding-details-chooser')\nexport default class WeldingDetailsChooser extends Component {\n layerValue = null;\n\n sideValue = null;\n\n @not('isEditing')\n isDisabled;\n\n // Flag to display the sides section, defaults to true\n showSides = true;\n\n // Flag to display the other section, defaults to true\n showOther = true;\n\n // The Weld Type\n weldType = null;\n\n // The list of all welding details\n allDetails = null;\n\n @or('isDisabled', 'isPartialPenetrationButtWeld')\n isSingleSideGasBackingDisabled;\n\n @or('isDisabled', 'isPartialPenetrationButtWeld')\n isSingleSideNoBackingDisabled;\n\n @equal('weldType.weldType', WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD)\n isPartialPenetrationButtWeld;\n\n @computed('selectedDetails.[]', 'allDetails.[]', 'layerValue')\n get layer() {\n return get(this, 'layerValue');\n }\n\n set layer(value) {\n set(this, 'layerValue', value);\n return value;\n }\n\n @computed('selectedDetails.[]', 'allDetails.[]', 'sideValue')\n get side() {\n return get(this, 'sideValue');\n }\n\n set side(value) {\n set(this, 'sideValue', value);\n return value;\n }\n\n @computed('selectedDetails.[]')\n get hasConsumableInsert() {\n return !isEmpty(this.findSelectedDetail(WELDING_DETAILS.CONSUMABLE_INSERT));\n }\n\n @computed('weldType')\n get isFilletWeld() {\n if (isEmpty(get(this, 'weldType.id'))) {\n return false;\n }\n return isFilletWeld(get(this, 'weldType'));\n }\n\n findDetail(designation) {\n let allDetails = get(this, 'allDetails');\n if (!isEmpty(allDetails)) {\n return allDetails.findBy('shortDesignation', designation);\n }\n return null;\n }\n\n findSelectedDetail(designation) {\n let selectedDetails = get(this, 'selectedDetails');\n if (!isEmpty(selectedDetails)) {\n return selectedDetails.findBy('shortDesignation', designation);\n }\n return null;\n }\n\n findExistingLayer() {\n if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_LAYER))) {\n set(this, 'layerValue', WELDING_DETAILS.SINGLE_LAYER);\n } else if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.MULTI_LAYER))) {\n set(this, 'layerValue', WELDING_DETAILS.MULTI_LAYER);\n }\n }\n\n findExistingSide() {\n if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_NO_BACKING))) {\n set(this, 'sideValue', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING);\n } else if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING))) {\n set(this, 'sideValue', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING);\n } else if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING))) {\n set(this, 'sideValue', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING);\n } else if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING))) {\n set(this, 'sideValue', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING);\n } else if (!isEmpty(this.findSelectedDetail(WELDING_DETAILS.BOTH_SIDES))) {\n set(this, 'sideValue', WELDING_DETAILS.BOTH_SIDES);\n } else {\n set(this, 'sideValue', null);\n }\n }\n\n calculateLayer(value) {\n let detail = this.findDetail(value);\n if (!isEmpty(detail)) {\n let currentDetails = get(this, 'selectedDetails');\n let resulting = A();\n if (value === WELDING_DETAILS.SINGLE_LAYER) {\n resulting = currentDetails.reject((item) => {\n return get(item, 'shortDesignation') === WELDING_DETAILS.MULTI_LAYER;\n });\n } else {\n resulting = currentDetails.reject((item) => {\n return get(item, 'shortDesignation') === WELDING_DETAILS.SINGLE_LAYER;\n });\n }\n resulting.pushObject(detail);\n return resulting;\n }\n }\n\n calculateSides(value) {\n let detail = this.findDetail(value);\n if (!isEmpty(detail)) {\n let currentDetails = get(this, 'selectedDetails');\n let resulting = A();\n resulting = currentDetails.reject((item) => {\n return (\n get(item, 'shortDesignation') === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n get(item, 'shortDesignation') === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n get(item, 'shortDesignation') === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n get(item, 'shortDesignation') === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING ||\n get(item, 'shortDesignation') === WELDING_DETAILS.BOTH_SIDES\n );\n });\n resulting.pushObject(detail);\n return resulting;\n }\n }\n\n calculateConsumable(value) {\n if (value) {\n let detail = this.findDetail(WELDING_DETAILS.CONSUMABLE_INSERT);\n let resulting = [];\n get(this, 'selectedDetails').forEach((item) => {\n resulting.pushObject(item);\n });\n resulting.pushObject(detail);\n return resulting;\n } else {\n let currentDetails = get(this, 'selectedDetails');\n let resulting = A();\n resulting = currentDetails.reject((item) => {\n return get(item, 'shortDesignation') === WELDING_DETAILS.CONSUMABLE_INSERT;\n });\n return resulting;\n }\n }\n\n init() {\n super.init(...arguments);\n if (isEmpty(get(this, 'allDetails'))) {\n set(this, 'allDetails', []);\n }\n }\n\n didReceiveAttrs() {\n this.findExistingLayer();\n this.findExistingSide();\n }\n\n @action\n setLayer(value) {\n set(this, 'layerValue', value);\n get(this, 'on-update-details')(this.calculateLayer(value));\n }\n\n @action\n setSide(value) {\n set(this, 'sideValue', value);\n get(this, 'on-update-details')(this.calculateSides(value));\n }\n\n @action\n setConsumableInsert(value) {\n get(this, 'on-update-details')(this.calculateConsumable(value));\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n
{{t \\\"components.welding-details-chooser.layers\\\"}}
\\n
\\n \\n Single Layer\\n \\n
\\n
\\n \\n Multi-Layer\\n \\n
\\n
\\n \\n {{#if @showSides}}\\n
{{t \\\"components.welding-details-chooser.sides\\\"}}
\\n {{#unless this.isFilletWeld}}\\n {{#if this.showSingleSideNoBacking}}\\n
\\n \\n Single Side, No Backing\\n \\n
\\n {{/if}}\\n {{/unless}}\\n
\\n \\n Single Side, Material Backing\\n \\n
\\n {{#unless this.isFilletWeld}}\\n {{#if this.showSingleSideNoBacking}}\\n
\\n \\n Single Side, Gas Backing\\n \\n
\\n {{/if}}\\n
\\n \\n Single Side, Flux Backing\\n \\n
\\n {{/unless}}\\n
\\n \\n Both Sides\\n \\n
\\n {{/if}}\\n
\\n \\n {{#if @showOther}}\\n
{{t \\\"components.welding-details-chooser.other\\\"}}
\\n
\\n \\n
\\n {{/if}}\\n
\\n
\\n\\n \\n {{yield}}\\n \\n\", {\"contents\":\"\\n \\n
{{t \\\"components.welding-details-chooser.layers\\\"}}
\\n
\\n \\n Single Layer\\n \\n
\\n
\\n \\n Multi-Layer\\n \\n
\\n
\\n \\n {{#if @showSides}}\\n
{{t \\\"components.welding-details-chooser.sides\\\"}}
\\n {{#unless this.isFilletWeld}}\\n {{#if this.showSingleSideNoBacking}}\\n
\\n \\n Single Side, No Backing\\n \\n
\\n {{/if}}\\n {{/unless}}\\n
\\n \\n Single Side, Material Backing\\n \\n
\\n {{#unless this.isFilletWeld}}\\n {{#if this.showSingleSideNoBacking}}\\n
\\n \\n Single Side, Gas Backing\\n \\n
\\n {{/if}}\\n
\\n \\n Single Side, Flux Backing\\n \\n
\\n {{/unless}}\\n
\\n \\n Both Sides\\n \\n
\\n {{/if}}\\n
\\n \\n {{#if @showOther}}\\n
{{t \\\"components.welding-details-chooser.other\\\"}}
\\n
\\n \\n
\\n {{/if}}\\n
\\n
\\n\\n \\n {{yield}}\\n \\n\",\"moduleName\":\"weldnote/components/welding-details-chooser/horizontal.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-details-chooser/horizontal.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport { not } from '@ember/object/computed';\nimport Chooser from 'weldnote/components/welding-details-chooser';\n\n@classic\nexport default class Horizontal extends Chooser {\n @not('isSingleSideNoBackingDisabled')\n showSingleSideNoBacking;\n\n @not('isSingleSideGasBackingDisabled')\n showSingleSideGasBackingDisabled;\n\n @computed('showSides', 'showOther')\n get columnSize() {\n if (this.showSides && this.showOther) {\n return 3;\n }\n if (this.showSides || this.showOther) {\n return 2;\n }\n return 1;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if this.hasWeldingDetailsError}}\\n {{this.weldingDetailsInApprovalRange}}\\n
    \\n {{#each this.approvalRange as |detail|}}\\n
  • \\n \\n {{detail.label}}\\n \\n
  • \\n {{/each}}\\n
\\n{{/if}}\", {\"contents\":\"{{#if this.hasWeldingDetailsError}}\\n {{this.weldingDetailsInApprovalRange}}\\n
    \\n {{#each this.approvalRange as |detail|}}\\n
  • \\n \\n {{detail.label}}\\n \\n
  • \\n {{/each}}\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/welding-details-chooser/wps-error.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-details-chooser/wps-error.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { notEmpty, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isEmpty } from '@ember/utils';\nimport { get, computed } from '@ember/object';\nimport { notInCollectionById, serializeCollection } from 'weldnote/utils/collection-utils';\n\n@classic\nexport default class WpsError extends Component {\n @service\n intl;\n\n @notEmpty('wps.errors.weldingDetails')\n hasWeldingDetailsError;\n\n @computed('wps.errors.weldingDetails')\n get weldingDetailsInApprovalRange() {\n if (!isEmpty(get(this, 'wps.errors.weldingDetails'))) {\n if (!isEmpty(get(this, 'wps.validator'))) {\n let { wps } = this;\n let notQualified = notInCollectionById(\n get(wps, 'validator.validations.weldingDetails'),\n get(this, 'wps.weldingDetails')\n );\n let notQualifiedSerialized = serializeCollection(notQualified, 'completeDesignation', '; ');\n let message = this.intl.t('model-validations.wps.pqr-validation', {\n value: notQualifiedSerialized,\n approvalRange: '',\n });\n return message;\n }\n }\n return '';\n }\n\n @alias('wps.validator.validations.weldingDetails')\n approvalRange;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (gt this.pieces.length 0)}}\\n
\\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#each this.sortedPieces as |piece|}}\\n \\n {{#if (eq piece.diameter \\\"0\\\")}}\\n {{t \\\"components.map-table.plate-type\\\"}}\\n {{#if this.isMetric}}\\n \\n {{else}}\\n {{piece.thicknessInches}}\\n {{/if}}\\n {{else}}\\n {{#if this.isMetric}}\\n \\n {{/if}}\\n {{piece.diameterInches}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n {{piece.thicknessInches}}\\n {{/if}}\\n {{/if}}\\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.map-table.columns.diameter\\\"}}{{t \\\"components.map-table.columns.diameter-inches\\\"}}{{t \\\"components.map-table.columns.nominal-diameter\\\"}}{{t \\\"components.map-table.columns.thickness\\\"}}{{t \\\"components.map-table.columns.thickness-inches\\\"}}{{this.typeLabel}}
{{piece.thickness}}{{piece.diameter}}{{piece.dn}}{{piece.thickness}}\\n {{#each piece.data as |result|}}\\n [\\n {{#if this.linkTo}}\\n {{result.certificateNumber}}\\n {{else}}\\n {{result.certificateNumber}}\\n {{/if}}\\n {{#if (and this.showWeldingProcess (gt result.processes.length 0))}}\\n :\\n {{#each result.processes as |process|}}\\n {{#if (or (not-eq process.root \\\"\\\") (not-eq process.fill \\\"\\\"))}}\\n {{process.root}}\\n {{#if (not-eq process.fill \\\"\\\")}}\\n +\\n {{process.fill}}\\n {{/if}}\\n {{#if (not-eq process.cap \\\"\\\")}}\\n +\\n {{process.cap}}\\n {{/if}}\\n {{/if}}\\n {{#if (not-eq result.processes.lastObject process)}},{{/if}}\\n {{/each}}\\n {{/if}}\\n ]\\n {{#if this.showSchedule}}\\n {{#each piece.schedules as |schedule|}}\\n {{schedule}}\\n {{#if (not-eq piece.schedules.lastObject schedule)}};{{/if}}\\n {{/each}}\\n {{/if}}\\n
\\n {{else}}\\n {{t\\n \\\"components.map-table.no-qualifications\\\"\\n }}\\n {{/each}}\\n
\\n
\\n{{/if}}\", {\"contents\":\"{{#if (gt this.pieces.length 0)}}\\n
\\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{/if}}\\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#each this.sortedPieces as |piece|}}\\n \\n {{#if (eq piece.diameter \\\"0\\\")}}\\n {{t \\\"components.map-table.plate-type\\\"}}\\n {{#if this.isMetric}}\\n \\n {{else}}\\n {{piece.thicknessInches}}\\n {{/if}}\\n {{else}}\\n {{#if this.isMetric}}\\n \\n {{/if}}\\n {{piece.diameterInches}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n {{piece.thicknessInches}}\\n {{/if}}\\n {{/if}}\\n \\n \\n {{/each}}\\n \\n
{{t \\\"components.map-table.columns.diameter\\\"}}{{t \\\"components.map-table.columns.diameter-inches\\\"}}{{t \\\"components.map-table.columns.nominal-diameter\\\"}}{{t \\\"components.map-table.columns.thickness\\\"}}{{t \\\"components.map-table.columns.thickness-inches\\\"}}{{this.typeLabel}}
{{piece.thickness}}{{piece.diameter}}{{piece.dn}}{{piece.thickness}}\\n {{#each piece.data as |result|}}\\n [\\n {{#if this.linkTo}}\\n {{result.certificateNumber}}\\n {{else}}\\n {{result.certificateNumber}}\\n {{/if}}\\n {{#if (and this.showWeldingProcess (gt result.processes.length 0))}}\\n :\\n {{#each result.processes as |process|}}\\n {{#if (or (not-eq process.root \\\"\\\") (not-eq process.fill \\\"\\\"))}}\\n {{process.root}}\\n {{#if (not-eq process.fill \\\"\\\")}}\\n +\\n {{process.fill}}\\n {{/if}}\\n {{#if (not-eq process.cap \\\"\\\")}}\\n +\\n {{process.cap}}\\n {{/if}}\\n {{/if}}\\n {{#if (not-eq result.processes.lastObject process)}},{{/if}}\\n {{/each}}\\n {{/if}}\\n ]\\n {{#if this.showSchedule}}\\n {{#each piece.schedules as |schedule|}}\\n {{schedule}}\\n {{#if (not-eq piece.schedules.lastObject schedule)}};{{/if}}\\n {{/each}}\\n {{/if}}\\n
\\n {{else}}\\n {{t\\n \\\"components.map-table.no-qualifications\\\"\\n }}\\n {{/each}}\\n
\\n
\\n{{/if}}\",\"moduleName\":\"weldnote/components/welding-map/map-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-map/map-table.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport { sort, alias } from '@ember/object/computed';\nimport Component from '@ember/component';\n\n@classic\nexport default class MapTable extends Component {\n @service\n userSession;\n\n @service('unit-system')\n units;\n\n showSchedule = true;\n\n showWeldingProcess = true;\n\n linkTo = true;\n\n linkType = '';\n\n get isImperial() {\n return this.units.isImperialSystem(this.qmatrix.unitSystem || this.userSession.unitSystem);\n }\n\n get isMetric() {\n return this.units.isMetricSystem(this.qmatrix.unitSystem || this.userSession.unitSystem);\n }\n\n @computed('linkType')\n get linkRoute() {\n let type = this.linkType;\n if (type === 'pqr') {\n return 'pqr-view';\n } else if (type === 'certificate') {\n return 'welder-certificate';\n } else if (type === 'welder') {\n return 'welder';\n } else {\n return 'welding-procedure-specification-view';\n }\n }\n\n @sort('pieces', function (a, b) {\n let diameterA = parseFloat(a.diameter);\n let diameterB = parseFloat(b.diameter);\n\n if (diameterA === 0 && diameterB === 0) {\n let thicknessA = parseFloat(a.thickness);\n let thicknessB = parseFloat(b.thickness);\n if (thicknessA > thicknessB) {\n return 1;\n } else if (thicknessA < thicknessB) {\n return -1;\n }\n return 0;\n }\n\n if (diameterA > diameterB) {\n return 1;\n } else if (diameterA < diameterB) {\n return -1;\n }\n return 0;\n })\n sortedPieces;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{this.pass}}\\n{{yield}}\", {\"contents\":\"{{this.pass}}\\n{{yield}}\",\"moduleName\":\"weldnote/components/welding-pass-field-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-pass-field-row.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { tagName } from '@ember-decorators/component';\nimport { computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport { isBothSides } from 'weldnote/utils/rules/welding-detail';\n\n@classic\n@tagName('tr')\nexport default class WeldingPassFieldRow extends Component {\n @service\n intl;\n\n @service\n userSession;\n\n sides = null;\n\n showSequence = false;\n\n @computed('type', 'sides.[]', 'showSequence')\n get pass() {\n if (isBothSides(this.sides) || this.showSequence) {\n return this.intl.t(`components.welding-pass-field-row-alternate.${this.type}`);\n } else {\n return this.intl.t(`components.welding-pass-field-row.${this.type}`);\n }\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n {{yield\\n (hash\\n root=(component \\\"welding-pass-field-row\\\" type=\\\"root\\\" sides=@sides showSequence=@showSequence)\\n fill=(component \\\"welding-pass-field-row\\\" type=\\\"fill\\\" sides=@sides showSequence=@showSequence)\\n cap=(component \\\"welding-pass-field-row\\\" type=\\\"cap\\\" sides=@sides showSequence=@showSequence)\\n )\\n }}\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n {{yield\\n (hash\\n root=(component \\\"welding-pass-field-row\\\" type=\\\"root\\\" sides=@sides showSequence=@showSequence)\\n fill=(component \\\"welding-pass-field-row\\\" type=\\\"fill\\\" sides=@sides showSequence=@showSequence)\\n cap=(component \\\"welding-pass-field-row\\\" type=\\\"cap\\\" sides=@sides showSequence=@showSequence)\\n )\\n }}\\n
\",\"moduleName\":\"weldnote/components/welding-passes-field-table.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-passes-field-table.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n \\n \\n \\n \\n {{yield\\n (hash\\n Process1=(component \\\"welding-processes-field-row\\\" processName=@process1)\\n Process2=(component \\\"welding-processes-field-row\\\" processName=@process2)\\n Process3=(component \\\"welding-processes-field-row\\\" processName=@process3)\\n )\\n }}\\n
\", {\"contents\":\"\\n \\n \\n \\n \\n {{yield\\n (hash\\n Process1=(component \\\"welding-processes-field-row\\\" processName=@process1)\\n Process2=(component \\\"welding-processes-field-row\\\" processName=@process2)\\n Process3=(component \\\"welding-processes-field-row\\\" processName=@process3)\\n )\\n }}\\n
\",\"moduleName\":\"weldnote/components/welding-processes-field-container.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-processes-field-container.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\\n {{@processName}}\\n {{yield}}\\n\", {\"contents\":\"\\n {{@processName}}\\n {{yield}}\\n\",\"moduleName\":\"weldnote/components/welding-processes-field-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/welding-processes-field-row.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@row.baseMaterial1}}
\\n{{@row.baseMaterial2}}\", {\"contents\":\"{{@row.baseMaterial1}}
\\n{{@row.baseMaterial2}}\",\"moduleName\":\"weldnote/components/weldnote-grid/base-material-for-list.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/base-material-for-list.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/base-material-group-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/base-material-group-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/base-material-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/base-material-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (or (has-value @row.baseMaterial1Thickness) (has-value @row.baseMaterial2Thickness))}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.baseMaterial1Thickness}}\\n (mm)
\\n {{@row.baseMaterial2Thickness}}\\n (mm)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.baseMaterial1Thickness}}\\n (in)
\\n {{@row.baseMaterial2Thickness}}\\n (in)\\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if (or (has-value @row.baseMaterial1Thickness) (has-value @row.baseMaterial2Thickness))}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.baseMaterial1Thickness}}\\n (mm)
\\n {{@row.baseMaterial2Thickness}}\\n (mm)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.baseMaterial1Thickness}}\\n (in)
\\n {{@row.baseMaterial2Thickness}}\\n (in)\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/base-material-thickness-for-list.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/base-material-thickness-for-list.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.parentCompany.id)}}\\n
{{t \\\"routes.companies.sub-site\\\"}}:\\n {{@row.parentCompany.name}}
\\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.parentCompany.id)}}\\n
{{t \\\"routes.companies.sub-site\\\"}}:\\n {{@row.parentCompany.name}}
\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/company-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/company-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/component-drawing-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/component-drawing-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{format-date date=@value}}\", {\"contents\":\"{{format-date date=@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/date-cell.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/date-cell.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/examining-body-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/examining-body-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/filler-material-commercial-designation-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/filler-material-commercial-designation-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/filler-material-group-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/filler-material-group-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/filler-material-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/filler-material-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.fitterType)}}\\n \\n ({{@row.fitterType}})\\n \\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.fitterType)}}\\n \\n ({{@row.fitterType}})\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/fitter-id.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/fitter-id.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.company.name)}}\\n {{@row.company.name}}\\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.company.name)}}\\n {{@row.company.name}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/fitter-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/fitter-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/flux-commercial-designation-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/flux-commercial-designation-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/flux-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/flux-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/gas-commercial-designation-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/gas-commercial-designation-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/gas-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/gas-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/general-drawing-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/general-drawing-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/groove-design-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/groove-design-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@row.wps.baseMaterial1.specification.specification}}\\n -\\n {{@row.wps.baseMaterial1.grade.grade}}\\n{{@row.wps.baseMaterial2.specification.specification}}\\n -\\n {{@row.wps.baseMaterial2.grade.grade}}\", {\"contents\":\"{{@row.wps.baseMaterial1.specification.specification}}\\n -\\n {{@row.wps.baseMaterial1.grade.grade}}\\n{{@row.wps.baseMaterial2.specification.specification}}\\n -\\n {{@row.wps.baseMaterial2.grade.grade}}\",\"moduleName\":\"weldnote/components/weldnote-grid/ieis-base-materials.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/ieis-base-materials.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n (Rev.\\n {{@row.revision}})\\n\", {\"contents\":\"{{@value}}\\n\\n (Rev.\\n {{@row.revision}})\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/ieis-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/ieis-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value.name}}\\n{{#each @value.stages as |stage|}}\\n
\\n {{stage.name.name}}\\n
\\n {{#each stage.tests as |test|}}\\n {{test.typeOfTest.shortDesignation}}\\n {{test.percentage}}%\\n {{#if (not-eq stage.tests.lastObject test)}} | {{/if}}\\n {{/each}}\\n
\\n
\\n{{/each}}\", {\"contents\":\"{{@value.name}}\\n{{#each @value.stages as |stage|}}\\n
\\n {{stage.name.name}}\\n
\\n {{#each stage.tests as |test|}}\\n {{test.typeOfTest.shortDesignation}}\\n {{test.percentage}}%\\n {{#if (not-eq stage.tests.lastObject test)}} | {{/if}}\\n {{/each}}\\n
\\n
\\n{{/each}}\",\"moduleName\":\"weldnote/components/weldnote-grid/ieis-test-stages.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/ieis-test-stages.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value.wpsNumber}}\\n\\n ({{@value.standard.standard}})\\n {{#if (has-value @value.company.id)}}\\n - {{@value.company.name}}\\n {{/if}}\\n\", {\"contents\":\"{{@value.wpsNumber}}\\n\\n ({{@value.standard.standard}})\\n {{#if (has-value @value.company.id)}}\\n - {{@value.company.name}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/ieis-wps-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/ieis-wps-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-value @row.wps.weldingProcessRoot.id)}}\\n {{#let @row.wps.weldingProcessRoot.shortDesignation as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n {{/let}}\\n{{/if}}\\n{{#if (has-value @row.wps.weldingProcessFill.id)}}\\n {{#let @row.wps.weldingProcessFill.shortDesignation as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n {{/let}}\\n{{/if}}\\n{{#if (has-value @row.wps.weldingProcessCap.id)}}\\n {{#let @row.wps.weldingProcessCap.shortDesignation as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n {{/let}}\\n{{/if}}\", {\"contents\":\"{{#if (has-value @row.wps.weldingProcessRoot.id)}}\\n {{#let @row.wps.weldingProcessRoot.shortDesignation as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n {{/let}}\\n{{/if}}\\n{{#if (has-value @row.wps.weldingProcessFill.id)}}\\n {{#let @row.wps.weldingProcessFill.shortDesignation as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n {{/let}}\\n{{/if}}\\n{{#if (has-value @row.wps.weldingProcessCap.id)}}\\n {{#let @row.wps.weldingProcessCap.shortDesignation as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n {{/let}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/ieis-wps-process.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/ieis-wps-process.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (not (is-empty-attribute @value))}}\\n \\n{{else}}\\n \\n \\n \\n \\n{{/if}}\", {\"contents\":\"{{#if (not (is-empty-attribute @value))}}\\n \\n{{else}}\\n \\n \\n \\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/image-cell.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/image-cell.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.examiningBody.name)}}\\n {{@row.examiningBody.name}}\\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.examiningBody.name)}}\\n {{@row.examiningBody.name}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/inspector-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/inspector-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.company.id)}}\\n {{@row.company.name}}\\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.company.id)}}\\n {{@row.company.name}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/miscellaneous-certificate-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/miscellaneous-certificate-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/non-destructive-testing-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/non-destructive-testing-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.currentMinimum @row.currentMaximum)}}\\n {{format-decimal @row.currentMinimum}}\\n{{else}}\\n {{format-decimal @row.currentMinimum}}\\n -\\n {{format-decimal @row.currentMaximum}}\\n{{/if}}\", {\"contents\":\"{{#if (eq @row.currentMinimum @row.currentMaximum)}}\\n {{format-decimal @row.currentMinimum}}\\n{{else}}\\n {{format-decimal @row.currentMinimum}}\\n -\\n {{format-decimal @row.currentMaximum}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/numeric-range/current.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/numeric-range/current.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.heatInputMinimum @row.heatInputMaximum)}}\\n {{format-decimal @row.heatInputMinimum}}\\n{{else}}\\n {{format-decimal @row.heatInputMinimum}}\\n -\\n {{format-decimal @row.heatInputMaximum}}\\n{{/if}}\", {\"contents\":\"{{#if (eq @row.heatInputMinimum @row.heatInputMaximum)}}\\n {{format-decimal @row.heatInputMinimum}}\\n{{else}}\\n {{format-decimal @row.heatInputMinimum}}\\n -\\n {{format-decimal @row.heatInputMaximum}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/numeric-range/heat-input.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/numeric-range/heat-input.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.travelSpeedMinimum @row.travelSpeedMaximum)}}\\n {{format-decimal (convert-to-milimeter-minute @row.travelSpeedMinimum @row.unitSystem)}}\\n{{else}}\\n {{format-decimal (convert-to-milimeter-minute @row.travelSpeedMinimum @row.unitSystem)}}\\n -\\n {{format-decimal (convert-to-milimeter-minute @row.travelSpeedMaximum @row.unitSystem)}}\\n{{/if}}\", {\"contents\":\"{{#if (eq @row.travelSpeedMinimum @row.travelSpeedMaximum)}}\\n {{format-decimal (convert-to-milimeter-minute @row.travelSpeedMinimum @row.unitSystem)}}\\n{{else}}\\n {{format-decimal (convert-to-milimeter-minute @row.travelSpeedMinimum @row.unitSystem)}}\\n -\\n {{format-decimal (convert-to-milimeter-minute @row.travelSpeedMaximum @row.unitSystem)}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/numeric-range/travel-speed.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/numeric-range/travel-speed.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.voltageMinimum @row.voltageMaximum)}}\\n {{format-decimal @row.voltageMinimum}}\\n{{else}}\\n {{format-decimal @row.voltageMinimum}}\\n -\\n {{format-decimal @row.voltageMaximum}}\\n{{/if}}\", {\"contents\":\"{{#if (eq @row.voltageMinimum @row.voltageMaximum)}}\\n {{format-decimal @row.voltageMinimum}}\\n{{else}}\\n {{format-decimal @row.voltageMinimum}}\\n -\\n {{format-decimal @row.voltageMaximum}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/numeric-range/voltage.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/numeric-range/voltage.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.wireFeedSpeedMinimum @row.wireFeedSpeedMaximum)}}\\n {{format-decimal (convert-to-meter-minute @row.wireFeedSpeedMinimum @row.unitSystem)}}\\n{{else}}\\n {{format-decimal (convert-to-meter-minute @row.wireFeedSpeedMinimum @row.unitSystem)}}\\n -\\n {{format-decimal (convert-to-meter-minute @row.wireFeedSpeedMaximum @row.unitSystem)}}\\n{{/if}}\", {\"contents\":\"{{#if (eq @row.wireFeedSpeedMinimum @row.wireFeedSpeedMaximum)}}\\n {{format-decimal (convert-to-meter-minute @row.wireFeedSpeedMinimum @row.unitSystem)}}\\n{{else}}\\n {{format-decimal (convert-to-meter-minute @row.wireFeedSpeedMinimum @row.unitSystem)}}\\n -\\n {{format-decimal (convert-to-meter-minute @row.wireFeedSpeedMaximum @row.unitSystem)}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/numeric-range/wire-feed.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/numeric-range/wire-feed.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.typeCurrent.typeCurrent)}}\\n {{@row.typeCurrent.typeCurrent}}\\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.typeCurrent.typeCurrent)}}\\n {{@row.typeCurrent.typeCurrent}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/passes/process.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/passes/process.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-value @value)}}\\n {{format-date date=@value}}\\n \\n ({{this.age}}\\n {{t \\\"helpers.years\\\"}})\\n \\n{{/if}}\", {\"contents\":\"{{#if (has-value @value)}}\\n {{format-date date=@value}}\\n \\n ({{this.age}}\\n {{t \\\"helpers.years\\\"}})\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/person-age.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/person-age.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport { service } from '@ember/service';\nimport Component from '@ember/component';\nimport moment from 'moment';\n\n@classic\nexport default class PersonAge extends Component {\n @service\n intl;\n\n @computed('value')\n get age() {\n let momentDate = moment(this.value);\n let age = moment().diff(momentDate, 'years');\n return age;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.personType \\\"WELDER\\\")}}\\n {{@value}} \\n{{else if (eq this.row.personType \\\"FITTER\\\")}}\\n {{@value}} \\n{{else if (eq this.row.personType \\\"INSPECTOR\\\")}}\\n {{@value}} \\n{{else}}\\n {{@value}}\\n{{/if}}\\n\\n{{#if (has-value @row.personType)}}\\n \\n ({{t (concat \\\"lov.person-type.\\\" @row.personType)}})\\n \\n{{/if}}\", {\"contents\":\"{{#if (eq @row.personType \\\"WELDER\\\")}}\\n {{@value}} \\n{{else if (eq this.row.personType \\\"FITTER\\\")}}\\n {{@value}} \\n{{else if (eq this.row.personType \\\"INSPECTOR\\\")}}\\n {{@value}} \\n{{else}}\\n {{@value}}\\n{{/if}}\\n\\n{{#if (has-value @row.personType)}}\\n \\n ({{t (concat \\\"lov.person-type.\\\" @row.personType)}})\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/person-name.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/person-name.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/piping-piece-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/piping-piece-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/plate-piece-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/plate-piece-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\", {\"contents\":\"{{@value}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/pqr-learned-mapping-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/pqr-learned-mapping-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\", {\"contents\":\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/pqr-link-archive.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/pqr-link-archive.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n \\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n \\n
\\n \\n \\n \\n \\n
    \\n
  • \\n {{t\\n \\\"components.weldnote-grid/pqr-link.labels.preview\\\"\\n }}\\n
  • \\n {{#if this.userSession.canCreatePQR}}\\n
  • \\n {{t\\n \\\"components.weldnote-grid/pqr-link.labels.edit\\\"\\n }}\\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateWPS}}\\n
  • \\n {{t \\\"components.weldnote-grid/pqr-link.labels.create-wps\\\"}}\\n
  • \\n {{/if}}\\n {{#if (has-value @row.pdfAttachment)}}\\n
  • \\n {{t\\n \\\"components.weldnote-grid/pqr-link.labels.download-attachment\\\"\\n }}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n
\", {\"contents\":\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n \\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n \\n
\\n \\n \\n \\n \\n
    \\n
  • \\n {{t\\n \\\"components.weldnote-grid/pqr-link.labels.preview\\\"\\n }}\\n
  • \\n {{#if this.userSession.canCreatePQR}}\\n
  • \\n {{t\\n \\\"components.weldnote-grid/pqr-link.labels.edit\\\"\\n }}\\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateWPS}}\\n
  • \\n {{t \\\"components.weldnote-grid/pqr-link.labels.create-wps\\\"}}\\n
  • \\n {{/if}}\\n {{#if (has-value @row.pdfAttachment)}}\\n
  • \\n {{t\\n \\\"components.weldnote-grid/pqr-link.labels.download-attachment\\\"\\n }}\\n
  • \\n {{/if}}\\n
\\n
\\n
\\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/pqr-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/pqr-link.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nexport default class WeldnoteGridPqrLinkComponent extends Component {\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@row.fillerMaterialType.specification.specification}}\\n{{@row.fillerMaterialType.classification.classification}}\\n{{#unless (is-empty @row.fillerMaterialDiameters)}}\\n \\n {{array-join (map (action \\\"formatDiameter\\\") @row.fillerMaterialDiameters) separator=\\\" ; \\\"}}\\n ({{this.unit}})\\n \\n{{/unless}}\", {\"contents\":\"{{@row.fillerMaterialType.specification.specification}}\\n{{@row.fillerMaterialType.classification.classification}}\\n{{#unless (is-empty @row.fillerMaterialDiameters)}}\\n \\n {{array-join (map (action \\\"formatDiameter\\\") @row.fillerMaterialDiameters) separator=\\\" ; \\\"}}\\n ({{this.unit}})\\n \\n{{/unless}}\",\"moduleName\":\"weldnote/components/weldnote-grid/pqr-view/filler-material.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/pqr-view/filler-material.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Component from '@ember/component';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\n\n@classic\nexport default class FillerMaterial extends Component {\n @service\n userSession;\n\n @alias('userSession.distanceUnit')\n unit;\n\n @action\n formatDiameter(value) {\n if (this.userSession.isImperialSystem) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return fraction;\n }\n }\n return value;\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#each @row.pqrs as |pqr|}}\\n {{pqr.label}}\\n
\\n{{/each}}\", {\"contents\":\"{{#each @row.pqrs as |pqr|}}\\n {{pqr.label}}\\n
\\n{{/each}}\",\"moduleName\":\"weldnote/components/weldnote-grid/pqrs-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/pqrs-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/project-client-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/project-client-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/project-link-from-welding-book.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/project-link-from-welding-book.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n \\n ({{@row.standard}})\\n {{#if (has-value @row.supplier)}}\\n - {{@row.supplier}}\\n {{/if}}\\n \\n \\n
\\n
\", {\"contents\":\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n \\n ({{@row.standard}})\\n {{#if (has-value @row.supplier)}}\\n - {{@row.supplier}}\\n {{/if}}\\n \\n \\n
\\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/project-no-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/project-no-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n
\", {\"contents\":\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/pwps-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/pwps-link.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nexport default class WeldnoteGridPwpsLinkComponent extends Component {\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n \\n {{#if (has-value @row.company.name)}}\\n - {{@row.company.name}}\\n {{/if}}\\n \\n\", {\"contents\":\"{{@value}}\\n\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n \\n {{#if (has-value @row.company.name)}}\\n - {{@row.company.name}}\\n {{/if}}\\n \\n\",\"moduleName\":\"weldnote/components/weldnote-grid/qmatrix-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/qmatrix-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (eq @row.totalWelds 0)}}\\n -\\n{{else}}\\n \\n {{@row.repairedWelds}}\\n ({{percentage-formatter rate=@row.repairRate decimalPlaces=2}})\\n \\n {{#if (gt @row.repairedWelds 0)}}\\n
\\n {{#if (gt @value 10)}}\\n
\\n {{else if (gt @value 5)}}\\n
\\n {{else if (gt @value 2)}}\\n
\\n {{else}}\\n
\\n {{/if}}\\n
\\n {{/if}}\\n{{/if}}\", {\"contents\":\"{{#if (eq @row.totalWelds 0)}}\\n -\\n{{else}}\\n \\n {{@row.repairedWelds}}\\n ({{percentage-formatter rate=@row.repairRate decimalPlaces=2}})\\n \\n {{#if (gt @row.repairedWelds 0)}}\\n
\\n {{#if (gt @value 10)}}\\n
\\n {{else if (gt @value 5)}}\\n
\\n {{else if (gt @value 2)}}\\n
\\n {{else}}\\n
\\n {{/if}}\\n
\\n {{/if}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/repair-rate.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/repair-rate.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#each @table.responsiveHiddenColumns as |column|}}\\n
{{column.label}}:
\\n
{{get @row column.valuePath}}
\\n {{/each}}\\n
\", {\"contents\":\"
\\n {{#each @table.responsiveHiddenColumns as |column|}}\\n
{{column.label}}:
\\n
{{get @row column.valuePath}}
\\n {{/each}}\\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/responsive-expanded-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/responsive-expanded-row.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"\", {\"contents\":\"\",\"moduleName\":\"weldnote/components/weldnote-grid/row-toggle.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/row-toggle.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class RowToggleComponent extends Component {\n // Component logic is now handled via @toggleRow argument\n // No local actions needed\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Responsive expanded row content for mobile/tablet views }}\\n
\\n {{#each @columns as |column|}}\\n {{#if column.label}}\\n
{{column.label}}:
\\n
\\n {{#if column.cellComponent}}\\n {{component\\n column.cellComponent\\n value=(get @row column.valuePath)\\n row=@row\\n column=column\\n }}\\n {{else}}\\n {{get @row column.valuePath}}\\n {{/if}}\\n
\\n {{/if}}\\n {{/each}}\\n
\", {\"contents\":\"{{! Responsive expanded row content for mobile/tablet views }}\\n
\\n {{#each @columns as |column|}}\\n {{#if column.label}}\\n
{{column.label}}:
\\n
\\n {{#if column.cellComponent}}\\n {{component\\n column.cellComponent\\n value=(get @row column.valuePath)\\n row=@row\\n column=column\\n }}\\n {{else}}\\n {{get @row column.valuePath}}\\n {{/if}}\\n
\\n {{/if}}\\n {{/each}}\\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/simple-responsive-expanded-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/simple-responsive-expanded-row.hbs\"}});\nimport Component from '@glimmer/component';\n\nexport default class SimpleResponsiveExpandedRowComponent extends Component {\n // Component now uses the 'get' helper directly in the template\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Yields a configuration object with style and class properties }}\\n{{yield this.rowConfig}}\", {\"contents\":\"{{! Yields a configuration object with style and class properties }}\\n{{yield this.rowConfig}}\",\"moduleName\":\"weldnote/components/weldnote-grid/simple-styled-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/simple-styled-row.hbs\"}});\nimport Component from '@glimmer/component';\nimport { htmlSafe } from '@ember/template';\n\nexport default class SimpleStyledRowComponent extends Component {\n get rowConfig() {\n const { row } = this.args;\n\n // Example: Add a special style for certain conditions\n let style = '';\n let cssClass = '';\n\n // Example styling logic - you can customize this based on your needs\n if (row.isHighlighted) {\n style = 'background-color: #eff8ff; border: 2px solid #2569a9;';\n }\n\n if (row.isSelected) {\n cssClass = 'table-info';\n }\n\n if (row.hasWarning) {\n cssClass += ' table-warning';\n }\n\n return {\n style: htmlSafe(style),\n class: cssClass,\n };\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/test-inspection-class-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/test-inspection-class-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#each @value as |stage|}}\\n
\\n {{stage.name.name}}\\n
\\n {{#each stage.tests as |test|}}\\n {{test.typeOfTest.shortDesignation}}\\n {{test.percentage}}%\\n {{#if (not-eq stage.tests.lastObject test)}} | {{/if}}\\n {{/each}}\\n
\\n
\\n{{/each}}\", {\"contents\":\"{{#each @value as |stage|}}\\n
\\n {{stage.name.name}}\\n
\\n {{#each stage.tests as |test|}}\\n {{test.typeOfTest.shortDesignation}}\\n {{test.percentage}}%\\n {{#if (not-eq stage.tests.lastObject test)}} | {{/if}}\\n {{/each}}\\n
\\n
\\n{{/each}}\",\"moduleName\":\"weldnote/components/weldnote-grid/test-inspection-stages.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/test-inspection-stages.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/test-location-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/test-location-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/test-stage-name-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/test-stage-name-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if @value}}\\n \\n{{/if}}\\n\", {\"contents\":\"{{#if @value}}\\n \\n{{/if}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/verified-icon.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/verified-icon.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/weld-layer-configuration-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/weld-layer-configuration-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/weld-type-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/weld-type-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n {{#if (has-value @value.weldType)}}\\n {{#let @value.weldType as |weldType|}}\\n {{#if\\n (or (eq weldType \\\"BW\\\") (eq weldType \\\"CJP BW\\\") (eq weldType \\\"GW\\\") (eq weldType \\\"CJP GW\\\"))\\n }}\\n {{weldType}}\\n {{else if\\n (or\\n (eq weldType \\\"PP BW\\\") (eq weldType \\\"PJP BW\\\") (eq weldType \\\"PJP GW\\\") (eq weldType \\\"PP GW\\\")\\n )\\n }}\\n {{weldType}}\\n {{else if (eq weldType \\\"FW\\\")}}\\n {{weldType}}\\n {{else if (eq weldType \\\"BC\\\")}}\\n {{weldType}}\\n {{else if (eq weldType \\\"OW\\\")}}\\n {{weldType}}\\n {{else}}\\n {{weldType}}\\n {{/if}}\\n {{/let}}\\n {{/if}}\\n {{#if (has-value @row.productType.productType)}}\\n \\n ({{@row.productType.productTypeDesignation}})\\n \\n {{/if}}\\n
\", {\"contents\":\"
\\n {{#if (has-value @value.weldType)}}\\n {{#let @value.weldType as |weldType|}}\\n {{#if\\n (or (eq weldType \\\"BW\\\") (eq weldType \\\"CJP BW\\\") (eq weldType \\\"GW\\\") (eq weldType \\\"CJP GW\\\"))\\n }}\\n {{weldType}}\\n {{else if\\n (or\\n (eq weldType \\\"PP BW\\\") (eq weldType \\\"PJP BW\\\") (eq weldType \\\"PJP GW\\\") (eq weldType \\\"PP GW\\\")\\n )\\n }}\\n {{weldType}}\\n {{else if (eq weldType \\\"FW\\\")}}\\n {{weldType}}\\n {{else if (eq weldType \\\"BC\\\")}}\\n {{weldType}}\\n {{else if (eq weldType \\\"OW\\\")}}\\n {{weldType}}\\n {{else}}\\n {{weldType}}\\n {{/if}}\\n {{/let}}\\n {{/if}}\\n {{#if (has-value @row.productType.productType)}}\\n \\n ({{@row.productType.productTypeDesignation}})\\n \\n {{/if}}\\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/weld-type.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/weld-type.hbs\"}});\nimport Component from '@glimmer/component';\n\ninterface WeldTypeArgs {\n value: {\n weldType: string;\n weldTypeDesignation: string;\n };\n row: {\n productType: {\n productType: string;\n productTypeDesignation: string;\n };\n };\n}\n\nexport default class WeldType extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\", {\"contents\":\"{{@value}}\\n\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-certificate-link-archive.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-certificate-link-archive.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{@value}}\\n {{#if (eq @row.certificateState \\\"AR\\\")}}\\n [{{t\\n \\\"components.weldnote-grid/welder-certificate-link.label.archived\\\"\\n }}]\\n {{/if}}\\n {{#if (eq @row.certificateState \\\"IE\\\")}}\\n [{{t\\n \\\"components.weldnote-grid/welder-certificate-link.label.internally-expired\\\"\\n }}]\\n {{/if}}\\n {{#if (eq @row.certificateState \\\"EE\\\")}}\\n [{{t\\n \\\"components.weldnote-grid/welder-certificate-link.label.externally-expired\\\"\\n }}]\\n {{/if}}\\n\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n\\n \\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n {{#if (eq @row.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n {{else if (eq @row.certificateType \\\"WELDER\\\")}}\\n WPQ\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\", {\"contents\":\"
\\n
\\n {{@value}}\\n {{#if (eq @row.certificateState \\\"AR\\\")}}\\n [{{t\\n \\\"components.weldnote-grid/welder-certificate-link.label.archived\\\"\\n }}]\\n {{/if}}\\n {{#if (eq @row.certificateState \\\"IE\\\")}}\\n [{{t\\n \\\"components.weldnote-grid/welder-certificate-link.label.internally-expired\\\"\\n }}]\\n {{/if}}\\n {{#if (eq @row.certificateState \\\"EE\\\")}}\\n [{{t\\n \\\"components.weldnote-grid/welder-certificate-link.label.externally-expired\\\"\\n }}]\\n {{/if}}\\n\\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n\\n \\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n {{#if (eq @row.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n {{else if (eq @row.certificateType \\\"WELDER\\\")}}\\n WPQ\\n {{/if}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-certificate-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-certificate-link.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nexport default class WeldnoteGridWelderCertificateLinkComponent extends Component {\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\\n{{#if (eq @row.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n{{else if (eq @row.certificateType \\\"WELDER\\\")}}\\n WPQ\\n{{/if}}\", {\"contents\":\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\\n{{#if (eq @row.certificateType \\\"OPERATOR\\\")}}\\n WOPQ\\n{{else if (eq @row.certificateType \\\"WELDER\\\")}}\\n WPQ\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-certificate-number-standard.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-certificate-number-standard.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Yields a configuration object with style and class properties for the table row }}\\n{{yield this.rowConfig}}\", {\"contents\":\"{{! Yields a configuration object with style and class properties for the table row }}\\n{{yield this.rowConfig}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-certificate-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-certificate-row.hbs\"}});\nimport Component from '@glimmer/component';\nimport { htmlSafe } from '@ember/template';\nimport { isEmpty } from '@ember/utils';\n\nexport default class WelderCertificateRowComponent extends Component {\n get rowConfig() {\n const { row } = this.args;\n const certificateState = row?.certificateState;\n\n let style = '';\n\n if (!isEmpty(certificateState)) {\n if (certificateState === 'AR') {\n style = 'background-color: #eff8ff;';\n } else if (certificateState === 'IE' || certificateState === 'EE') {\n style = 'background-color: #fcebea;';\n }\n }\n\n return {\n style: htmlSafe(style),\n class: '',\n };\n }\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.welderIdType)}}\\n \\n ({{@row.welderIdType}})\\n \\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.welderIdType)}}\\n \\n ({{@row.welderIdType}})\\n \\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-id.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-id.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n {{@row.welderName}}\", {\"contents\":\"{{@value}}\\n {{@row.welderName}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-in-certificate.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-in-certificate.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n{{#if (has-value @row.company.name)}}\\n {{@row.company.name}}\\n{{/if}}\", {\"contents\":\"{{@value}}\\n{{#if (has-value @row.company.name)}}\\n {{@row.company.name}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welder-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welder-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#if (has-value @row.approvedBy)}}\\n \\n \\n{{/if}}\\n{{@value}}\\n{{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n{{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n{{/if}}\\n{{#if (has-value @row.status)}}\\n {{@row.status}}\\n{{/if}}\", {\"contents\":\"{{#if (has-value @row.approvedBy)}}\\n \\n \\n{{/if}}\\n{{@value}}\\n{{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n{{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n{{/if}}\\n{{#if (has-value @row.status)}}\\n {{@row.status}}\\n{{/if}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welding-book-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welding-book-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welding-position-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welding-position-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\", {\"contents\":\"{{@value}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welding-process-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welding-process-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{#each @value as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n{{/each}}\", {\"contents\":\"{{#each @value as |process|}}\\n {{#if\\n (or\\n (eq process \\\"GTAW\\\")\\n (eq process \\\"141\\\")\\n (eq process \\\"142\\\")\\n (eq process \\\"143\\\")\\n (eq process \\\"145\\\")\\n )\\n }}\\n {{process}}\\n {{else if (or\\n (eq process \\\"SAW\\\")\\n (eq process \\\"121\\\")\\n (eq process \\\"122\\\")\\n (eq process \\\"123\\\")\\n (eq process \\\"124\\\")\\n (eq process \\\"125\\\")\\n )}}\\n {{process}}\\n {{else if (or (eq process \\\"GMAW\\\") (eq process \\\"131\\\") (eq process \\\"135\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"SMAW\\\") (eq process \\\"111\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW-S\\\") (eq process \\\"114\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"FCAW\\\") (eq process \\\"136\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"MCAW\\\") (eq process \\\"138\\\"))}}\\n {{process}}\\n {{else if (or (eq process \\\"PAW\\\") (eq process \\\"15\\\"))}}\\n {{process}}\\n {{else}}\\n {{process}}\\n {{/if}}\\n{{/each}}\",\"moduleName\":\"weldnote/components/weldnote-grid/welding-processes.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/welding-processes.hbs\"}});\nimport classic from 'ember-classic-decorator';\nimport { classNames } from '@ember-decorators/component';\nimport Component from '@ember/component';\n\n@classic\n@classNames('leading-loose')\nexport default class WeldingProcesses extends Component {}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\", {\"contents\":\"{{@value}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/wpq-learned-mapping-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/wpq-learned-mapping-link.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\", {\"contents\":\"{{@value}}\\n\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n\",\"moduleName\":\"weldnote/components/weldnote-grid/wps-link-archive.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/wps-link-archive.hbs\"}});\nimport templateOnly from '@ember/component/template-only';\n\nexport default templateOnly();\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\", {\"contents\":\"
\\n
\\n {{@value}}\\n \\n {{#if (eq @row.unitSystem \\\"I\\\")}}\\n in\\n {{else if (eq @row.unitSystem \\\"M\\\")}}\\n mm\\n {{/if}}\\n ({{@row.standard}})\\n {{#if (has-value @row.company)}}\\n - {{@row.company}}\\n {{/if}}\\n \\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\",\"moduleName\":\"weldnote/components/weldnote-grid/wps-link.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/wps-link.hbs\"}});\nimport Component from '@glimmer/component';\nimport { service } from '@ember/service';\n\nexport default class WeldnoteGridWpsLinkComponent extends Component {\n @service\n userSession;\n}\n","import { hbs } from 'ember-cli-htmlbars';\nconst __COLOCATED_TEMPLATE__ = hbs(\"{{! Yields a configuration object with style and class properties for the table row }}\\n{{yield this.rowConfig}}\", {\"contents\":\"{{! Yields a configuration object with style and class properties for the table row }}\\n{{yield this.rowConfig}}\",\"moduleName\":\"weldnote/components/weldnote-grid/wps-parameter-row.hbs\",\"parseOptions\":{\"srcName\":\"weldnote/components/weldnote-grid/wps-parameter-row.hbs\"}});\nimport Component from '@glimmer/component';\nimport { htmlSafe } from '@ember/template';\nimport { service } from '@ember/service';\n\nexport default class WpsParameterRowComponent extends Component {\n @service\n highlightedPassHelper;\n\n get rowConfig() {\n const { row } = this.args;\n const guid = row?.guid;\n\n let style = '';\n\n if (guid && this.highlightedPassHelper.isHighlighted(guid)) {\n style = 'background-color: #eff8ff; border: 2px solid #2569a9;';\n }\n\n return {\n style: htmlSafe(style),\n class: '',\n };\n }\n}\n","import Inflector from 'ember-inflector';\n\nconst { inflector } = Inflector;\n\n// Fix for issue with ember-data mistaking 'ga' for 'gas'\ninflector.irregular('gas', 'gases');\ninflector.irregular('project-wps', 'project-wps');\ninflector.irregular(\n 'welding-procedure-specification-metadata',\n 'welding-procedure-specification-metadata'\n);\ninflector.irregular('ieis', 'ieis');\n\nexport default {};\n","self.deprecationWorkflow = self.deprecationWorkflow || {};\nself.deprecationWorkflow.config = {\n workflow: [\n { handler: 'silence', matchId: 'ember-views.curly-components.jquery-element' },\n { handler: 'silence', matchId: 'events.remove-all-listeners' },\n { handler: 'silence', matchId: 'object.new-constructor' },\n { handler: 'silence', matchId: 'computed-property.volatile' },\n { handler: 'silence', matchId: 'ember-data:method-calls-on-destroyed-store' },\n { handler: 'silence', matchId: 'computed-property.override' },\n { handler: 'silence', matchId: 'ember-string.add-package' },\n ],\n};\n","export default {\n COMPONENT_DRAWING: {\n TITLE: 'title',\n REFERENCE_NUMBER: 'referenceNumber',\n DRAWING_CONTENT: 'drawingContent',\n REVISION: 'revision',\n REVISION_STATUS: 'revisionStatus',\n REFERENCED_DRAWING: 'referencedDrawing',\n },\n};\n","export default {\n GENERAL_DRAWING: {\n PROJECT: 'project',\n TITLE: 'title',\n REFERENCE_NUMBER: 'referenceNumber',\n DRAWING_CONTENT: 'drawingContent',\n REVISION: 'revision',\n REVISION_STATUS: 'revisionStatus',\n },\n};\n","/**\n * Product type codes matching Constants.PRODUCT_TYPE values.\n */\nexport enum ProductType {\n PIPE = 'PI',\n PLATE = 'PL',\n PIPE_PLATE = 'PP',\n}\n\n/**\n * A product type option as returned by weldnote-data service\n * (productTypeOptions / productTypeOptionsCertificatesIso96061Options).\n */\nexport interface ProductTypeOption {\n key: ProductType;\n label: string;\n}\n","export default {\n PROJECT_DOCUMENT: {\n PROJECT: 'project',\n DOCUMENT_TITLE: 'documentTitle',\n DOCUMENT_NUMBER: 'documentNumber',\n REVISION: 'revision',\n TYPE: 'type',\n COMMENTS: 'comments',\n INCLUDE_IN_DATA_BOOK: 'includeInDataBook',\n DOCUMENT: 'document',\n REVISION_STATUS: 'revisionStatus',\n },\n};\n","export default {\n PROJECT_LINE_CLASS: {\n PROJECT: 'project',\n LINE_IDENTIFIER: 'lineIdentifier',\n NAME: 'name',\n },\n};\n","export enum WeldTypeGroup {\n ALL = 'ALL',\n FULL_PENETRATION_BUTT_WELD = 'FPBW',\n PARTIAL_PENETRATION_BUTT_WELD = 'PPBW',\n FILLET_WELD = 'FW',\n OVERLAY_WELD = 'OW',\n}\n","import { action } from '@ember/object';\nimport Controller from '@ember/controller';\nimport { service } from '@ember/service';\nimport RouterService from '@ember/routing/router-service';\n\nexport default class EditController extends Controller {\n @service\n declare router: RouterService;\n\n declare listRoute: string;\n\n @action\n deleteInstance() {\n this.router.transitionTo(this.listRoute);\n }\n}\n","import { service } from '@ember/service';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { action, computed } from '@ember/object';\nimport IntlService from 'ember-intl/services/intl';\nimport RouterService from '@ember/routing/router-service';\n\nexport default class ListController extends Controller {\n @service\n intl;\n\n @service\n router;\n\n /**\n * The name of the model associated with this controller\n * @type {String}\n */\n\n modelName = null;\n\n /**\n * @private\n * The colum definition for the grid\n * @type {[array]}\n */\n columns = null;\n\n newRoutePath;\n\n routeTitle;\n\n /**\n * @private\n * Retrieves the localized label of a given attribute of the model\n * @param {string} attribute [The attribute name]\n * @return {string} [The localized label of the attribute]\n */\n getAttributeLabel(attribute, options = {}) {\n let labelPath = `model.${this.modelName}.${attribute}.label`;\n return this.intl.t(labelPath, options);\n }\n\n getLabel(name) {\n let labelPath = `model.${this.modelName}.${name}`;\n return this.intl.t(labelPath);\n }\n\n getModelPluralLabel() {\n return this.getLabel('model-plural');\n }\n\n @computed('modelName')\n get breadcrumbs() {\n return [\n {\n label: this.getModelPluralLabel(),\n },\n ];\n }\n\n init() {\n super.init(...arguments);\n assert('Must have a model name property \"ModelName\" ', !isEmpty(this.modelName));\n this.newRoutePath = `${this.modelName}.new`;\n this.routeTitle = this.getModelPluralLabel();\n }\n\n /**\n * @public\n * Transitions to the model's edit screen\n *\n * @param {number} id [The model instance identifier]\n */\n @action\n goToModel(id) {\n if (this.modelName) {\n this.router.transitionTo(this.modelName, id);\n }\n }\n}\n","import { service } from '@ember/service';\nimport Controller from '@ember/controller';\nimport { action, computed } from '@ember/object';\nimport IntlService from 'ember-intl/services/intl';\nimport RouterService from '@ember/routing/router-service';\n\nexport default class ListController extends Controller {\n @service\n declare intl: IntlService;\n\n @service\n declare router: RouterService;\n\n /**\n * @private\n * The name of the model associated with this controller\n * @type {String}\n */\n modelName: string | null = null;\n\n /**\n * @private\n * The colum definition for the grid\n * @type {[array]}\n */\n columns: [] | null = null;\n\n /**\n * @private\n * Retrieves the localized label of a given attribute of the model\n * @param {string} attribute [The attribute name]\n * @return {string} [The localized label of the attribute]\n */\n getAttributeLabel(attribute: string, options = {}): string {\n let labelPath = `model.${this.modelName}.${attribute}.label`;\n return this.intl.t(labelPath, options);\n }\n\n getLabel(name: string): string {\n let labelPath = `model.${this.modelName}.${name}`;\n return this.intl.t(labelPath);\n }\n\n getModelPluralLabel(): string {\n return this.getLabel('model-plural');\n }\n\n @computed('modelName')\n get breadcrumbs(): any {\n return [\n {\n label: this.getModelPluralLabel(),\n },\n ];\n }\n\n get routeTitle() {\n return this.getModelPluralLabel();\n }\n\n get newRoutePath() {\n return `${this.modelName}.new`;\n }\n\n /**\n * @public\n * Transitions to the model's edit screen\n *\n * @param {number} id [The model instance identifier]\n */\n @action\n goToModel(id: string) {\n if (this.modelName) {\n this.router.transitionTo(this.modelName, id);\n }\n }\n}\n","import { action } from '@ember/object';\nimport Controller from '@ember/controller';\nimport { service } from '@ember/service';\nimport RouterService from '@ember/routing/router-service';\nimport DS from 'ember-data';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class NewController extends Controller {\n declare modelName: string;\n\n @tracked\n model: DS.Model | null = null;\n\n @service\n declare router: RouterService;\n\n @action\n instanceCreated() {\n if (this.model) {\n this.router.transitionTo(this.modelName, this.model);\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { sort } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, get, action, computed } from '@ember/object';\nimport { isPermissionDenied } from 'weldnote/utils/json-api-errors';\n\n@classic\nexport default class AccountAdminController extends Controller {\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service\n loading;\n\n @service\n userSession;\n\n @service\n intl;\n\n roleSorting = ['name'];\n\n @sort('data.roleOptions', 'roleSorting')\n sortedRoles;\n\n showConfirmModal = false;\n\n @computed('model')\n get accounts() {\n let accounts = get(this, 'model');\n return accounts\n .filter((account) => {\n return `${get(account, 'id')}` !== `${get(this, 'userSession.account.id')}`;\n })\n .sortBy('name');\n }\n\n internalClear() {\n set(this, 'currentAccount', null);\n set(this, 'newRole', null);\n set(this, 'oldRole', null);\n }\n\n @action\n confirmUpdate(account, role) {\n if (`${get(account, 'role.id')}` !== `${get(role, 'id')}`) {\n this.toggleProperty('showConfirmModal');\n set(this, 'currentAccount', account);\n set(this, 'newRole', role);\n set(this, 'oldRole', get(account, 'role'));\n }\n }\n\n @action\n updateRole() {\n let { intl, loading, data, alert, currentAccount: account, newRole: role } = this;\n loading.block();\n data\n .updateRole(get(account, 'id'), get(role, 'id'))\n .then(() => {\n set(account, 'role.id', get(role, 'id'));\n set(account, 'role.name', get(role, 'name'));\n alert.success(\n intl.t('account-admin.confirm-role-updated', {\n accountName: get(this, 'currentAccount.name'),\n role: get(this, 'newRole.name'),\n })\n );\n })\n .catch((reason) => {\n if (isPermissionDenied(reason)) {\n alert.error(intl.t('edit-view.actions.permission-denied'));\n } else {\n alert.error(\n intl.t('edit-view.actions.generic-error', { name: get(this, 'currentAccount.name') })\n );\n }\n })\n .finally(() => {\n loading.unblock();\n this.internalClear();\n });\n }\n\n @action\n clear() {\n this.internalClear();\n this.toggleProperty('showConfirmModal');\n }\n\n @action\n updateAccounts() {\n this.data.getAccounts().then((accounts) => {\n set(this, 'model', accounts);\n });\n }\n}\n","import Controller from '@ember/controller';\nimport { service } from '@ember/service';\nimport { action } from '@ember/object';\nimport { cached, tracked } from '@glimmer/tracking';\nimport { task, restartableTask, timeout } from 'ember-concurrency';\nimport moment from 'moment';\nimport { INSTANCE_TYPES, ACTION_IDS_BY_INSTANCE_TYPE } from 'weldnote/utils/action-log-filters';\n\nconst FILTER_DEBOUNCE_MS = 200;\n\nexport default class ActionLogsController extends Controller {\n @service('weldnote-data') data;\n @service userSession;\n @service store;\n @service intl;\n\n queryParams = ['page'];\n\n @tracked page = 1;\n @tracked startDate = null;\n @tracked endDate = null;\n @tracked selectedAccount = null;\n @tracked selectedInstanceTypeKey = null;\n @tracked selectedActionIdKey = null;\n @tracked accountOptions = [];\n\n get dateTimeFormat() {\n return `${this.userSession.dateFormat} HH:mm:ss`;\n }\n\n @cached\n get instanceTypeOptions() {\n return INSTANCE_TYPES.map(({ key, labelKey }) => ({\n key,\n label: this.intl.t(labelKey),\n }));\n }\n\n @cached\n get actionIdOptions() {\n if (!this.selectedInstanceTypeKey) {\n return [];\n }\n const ids = ACTION_IDS_BY_INSTANCE_TYPE[this.selectedInstanceTypeKey] ?? [];\n return ids.map((key) => ({\n key,\n label: this.intl.t(`action-log-list.action-ids.${key}`),\n }));\n }\n\n get selectedInstanceType() {\n return this.instanceTypeOptions.find((o) => o.key === this.selectedInstanceTypeKey) ?? null;\n }\n\n get selectedActionId() {\n return this.actionIdOptions.find((o) => o.key === this.selectedActionIdKey) ?? null;\n }\n\n loadAccounts = task(async () => {\n const records = await this.store.query('account', {\n 'page[size]': 200,\n 'page[number]': 1,\n });\n this.accountOptions = records.toArray();\n });\n\n applyFilters = restartableTask(async () => {\n await timeout(FILTER_DEBOUNCE_MS);\n this.page = 1;\n const data = await this.data.getActionLogs(this.page, this.buildFilters());\n this.model = data;\n });\n\n buildFilters() {\n const filters = {};\n if (this.startDate) {\n filters.startDate = moment(this.startDate).format('YYYY-MM-DD');\n }\n if (this.endDate) {\n filters.endDate = moment(this.endDate).format('YYYY-MM-DD');\n }\n if (this.selectedAccount) {\n filters.createdBy = this.selectedAccount.id;\n }\n if (this.selectedInstanceTypeKey) {\n filters.instanceType = this.selectedInstanceTypeKey;\n }\n if (this.selectedActionIdKey) {\n filters.actionId = this.selectedActionIdKey;\n }\n return filters;\n }\n\n @action\n setStartDate(value) {\n this.startDate = value;\n this.applyFilters.perform();\n }\n\n @action\n setEndDate(value) {\n this.endDate = value;\n this.applyFilters.perform();\n }\n\n @action\n setAccount(value) {\n this.selectedAccount = value;\n this.applyFilters.perform();\n }\n\n @action\n setInstanceType(value) {\n this.selectedInstanceTypeKey = value?.key ?? null;\n this.selectedActionIdKey = null;\n this.applyFilters.perform();\n }\n\n @action\n setActionId(value) {\n this.selectedActionIdKey = value?.key ?? null;\n this.applyFilters.perform();\n }\n\n @action\n clearFilters() {\n this.startDate = null;\n this.endDate = null;\n this.selectedAccount = null;\n this.selectedInstanceTypeKey = null;\n this.selectedActionIdKey = null;\n this.applyFilters.perform();\n }\n\n @action\n reloadData(page) {\n this.page = page;\n this.data.getActionLogs(page, this.buildFilters()).then((data) => {\n this.model = data;\n });\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\n\n/**\n * Page state shared between the staff console's panels: the query the identity dossier shows.\n * Any panel can open a row in the dossier through `inspect`. Deliberately not a query param, so\n * emails do not end up in the address bar or browser history.\n */\nexport default class AdminToolsController extends Controller {\n @tracked dossierQuery: string | null = null;\n\n @action\n inspect(query: string | number | null | undefined): void {\n if (query === null || query === undefined || String(query).trim() === '') {\n return;\n }\n this.dossierQuery = String(query).trim();\n }\n}\n\ndeclare module '@ember/controller' {\n interface Registry {\n 'admin-tools': AdminToolsController;\n }\n}\n","import { service } from '@ember/service';\nimport Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport ENV from 'weldnote/config/environment';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class ApplicationController extends Controller {\n @service\n session;\n\n @service('instanceTracker')\n tracker;\n\n @service\n userSession;\n\n @service\n router;\n\n @service('crisp')\n chat;\n\n @service\n intl;\n\n @service\n media;\n\n @service('new-version-checker')\n versionChecker;\n\n @tracked\n showAlertLogout = false;\n\n constructor() {\n super(...arguments);\n this.chat.setup();\n }\n\n get esabCloudLink() {\n let { hostname, origin } = window.location;\n if (hostname === 'localhost' || hostname === '127.0.0.1') {\n return origin;\n }\n return ENV.esabCloudLink;\n }\n\n get isMobile() {\n let { media } = this;\n return media.isMobile || media.isTablet || media.isLaptop;\n }\n\n get hasSession() {\n return this.session.isAuthenticated;\n }\n\n @action\n logout() {\n if (this.tracker.hasUnsavedElements) {\n this.showAlertLogout = true;\n } else {\n this.session.invalidate();\n }\n }\n\n @action\n checkForNewVersion() {\n this.versionChecker.updateVersionTask.perform();\n }\n\n @action\n confirmLogout() {\n this.tracker.discardAll();\n this.router.transitionTo('logout');\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class ArcTransferModeController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'arc-transfer-modes';\n}\n","import { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list';\nimport UserSessionService from 'weldnote/services/user-session';\n\nexport default class ArcTransferModesController extends ListController {\n @service\n declare userSession: UserSessionService;\n\n modelName = 'arc-transfer-mode';\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class BaseMaterialGroupController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'base-material-groups';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class BaseMaterialGroupsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currentPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'base-material-group';\n\n isLoading = false;\n\n @computed\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('groupName');\n let codeLabel = this.getAttributeLabel('code');\n let descriptionLabel = this.getAttributeLabel('description');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'label',\n label: nameLabel,\n cellComponent: 'weldnote-grid/base-material-group-link',\n },\n {\n valuePath: 'code.code',\n label: codeLabel,\n },\n {\n valuePath: 'description',\n label: descriptionLabel,\n sortable: false,\n width: '550px',\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = { name: this.name, code: this.code };\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllBaseMaterialGroups(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n set(this, 'name', name);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCode(code) {\n set(this, 'code', code);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n name: null,\n code: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class BaseMaterialController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport { tracked } from '@glimmer/tracking';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class BaseMaterialsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n modelName = 'base-material';\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n @tracked\n isSearchingForUnassignedGroup = false;\n\n @computed\n get gridColumns() {\n let specificationLabel = this.getAttributeLabel('specification');\n let materialGroupLabel = this.getAttributeLabel('materialGroup');\n let gradeLabel = this.getAttributeLabel('grade');\n let codeLabel = this.getAttributeLabel('industryCode');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'specification.specification',\n label: specificationLabel,\n cellComponent: 'weldnote-grid/base-material-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'grade.grade',\n label: gradeLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'materialGroup.visualLabel',\n label: materialGroupLabel,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'materialGroup.description',\n label: 'Description',\n width: '400px',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'industryCode.code',\n label: codeLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllBaseMaterials(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n buildFilters() {\n let { specification, grade, group, industryCode } = getProperties(\n this,\n 'specification',\n 'grade',\n 'group',\n 'industryCode'\n );\n let filters = {};\n if (!isEmpty(specification)) {\n filters.specification = specification;\n }\n if (!isEmpty(grade)) {\n filters.grade = grade;\n }\n if (!isEmpty(group)) {\n filters.group = group;\n }\n if (!isEmpty(industryCode)) {\n filters.industryCode = industryCode.get('id');\n }\n return filters;\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.loadData.perform();\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.isSearchingForUnassignedGroup = false;\n this.setProperties({\n specification: null,\n grade: null,\n group: null,\n industryCode: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n toggleUnassignedGroupSearch() {\n this.isSearchingForUnassignedGroup = !this.isSearchingForUnassignedGroup;\n if (this.isSearchingForUnassignedGroup) {\n set(this, 'group', 'N/A');\n } else {\n set(this, 'group', null);\n }\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSpecification(spec) {\n set(this, 'specification', spec);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setGrade(grade) {\n set(this, 'grade', grade);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setGroup(group) {\n set(this, 'group', group);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setIndustryCode(industryCode) {\n set(this, 'industryCode', industryCode);\n this.resetPage();\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class CertificationSpecialRequirementController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class CertificationSpecialRequirementsController extends ListController {\n modelName = 'certification-special-requirement';\n}\n","import { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\nimport classic from 'ember-classic-decorator';\nimport { task, timeout } from 'ember-concurrency';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class CompaniesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n loading;\n\n @service\n orgApi;\n\n @tracked\n totalCount = 0;\n\n @tracked\n name = '';\n\n @tracked\n model = null;\n\n @tracked\n currentPage = 1;\n\n get companyCount() {\n if (!isEmpty(this.result?.meta?.records)) {\n return this.result.meta.records;\n }\n return this.totalCount;\n }\n\n get pageSize() {\n return this.data.pageSize;\n }\n\n get result() {\n return this.loadData?.lastSuccessful?.value;\n }\n\n modelName = 'company';\n\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('name');\n let addressLabel = this.getAttributeLabel('address');\n\n let { intl, userSession } = this;\n\n let columns = [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'name',\n label: nameLabel,\n cellComponent: 'weldnote-grid/company-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'address',\n label: addressLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n\n if (userSession.isPlanQuality) {\n let weldsPerformedLabel = intl.t('generic.welding.welds-performed');\n let weldsRepairedLabel = intl.t('generic.welding.welds-repaired');\n columns.pushObject({\n valuePath: 'totalWelds',\n label: weldsPerformedLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n });\n columns.pushObject({\n valuePath: 'repairRate',\n label: weldsRepairedLabel,\n cellComponent: 'weldnote-grid/repair-rate',\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n });\n }\n\n return columns;\n }\n\n buildFilters() {\n let filters = { name: this.name };\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(500);\n let result = await this.data.listAllCompanies(options, this.buildFilters());\n this.model = result;\n return result;\n }\n );\n\n resetPage() {\n this.currentPage = 1;\n }\n\n @action\n search(pageNumber = 1) {\n this.currentPage = pageNumber;\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n this.name = name;\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n if (!isEmpty(this.name)) {\n this.name = null;\n this.loadData.perform();\n }\n }\n\n @action\n async syncSites() {\n let { loading, intl } = this;\n try {\n loading.block(intl.t('routes.companies.messages.syncing-companies'));\n await this.orgApi.syncSites();\n await this.userSession.reloadUser();\n loading.replaceMessage(intl.t('routes.companies.messages.reloading-companies'));\n this.search();\n } finally {\n loading.unblock();\n }\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class CompanyController extends EditController {}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class ComponentDrawingController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, getProperties, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class ComponentDrawingsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'component-drawing';\n\n @computed\n get gridColumns() {\n let titleLabel = this.getAttributeLabel('title');\n let referenceLabel = this.getAttributeLabel('referenceNumber');\n let revisionLabel = this.getAttributeLabel('revision');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'referenceNumber',\n label: referenceLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/component-drawing-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'title',\n label: titleLabel,\n sortable: false,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'revision',\n label: revisionLabel,\n sortable: false,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n return { anywhere: get(this, 'referenceNumber') };\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = get(this, 'currentPage');\n\n await timeout(DEBOUNCE);\n let data = await get(this, 'data').listAllComponentDrawings(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n title: null,\n referenceNumber: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class ConstructionStandardController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import { service } from '@ember/service';\nimport classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\nexport default class ConstructionStandardsController extends ListController {\n modelName = 'construction-standard';\n\n @service\n userSession;\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class DestructiveTestingController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'destructive-testings';\n}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class DestructiveTestingsController extends ListController {\n modelName = 'destructive-testing';\n}\n","import Controller from '@ember/controller';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\nexport default class DigitalizePqrController extends Controller {\n // Queue counts (for potential future badge display elsewhere)\n @tracked pendingCount = 0;\n @tracked readyCount = 0;\n\n @action\n updateQueueCounts(pending, ready) {\n this.pendingCount = pending;\n this.readyCount = ready;\n }\n\n @action\n resetState() {\n this.pendingCount = 0;\n this.readyCount = 0;\n }\n}\n","import Controller from '@ember/controller';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\nexport default class DigitalizeWelderCertificateController extends Controller {\n @tracked pendingCount = 0;\n @tracked readyCount = 0;\n\n @action\n updateQueueCounts(pending, ready) {\n this.pendingCount = pending;\n this.readyCount = ready;\n }\n\n @action\n resetState() {\n this.pendingCount = 0;\n this.readyCount = 0;\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class ElectrodeTypeController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'electrode-types';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class ElectrodeTypesController extends ListController {\n @service\n userSession;\n\n modelName = 'electrode-type';\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport RouterService from '@ember/routing/router-service';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class ErrorNotAllowedSite extends Controller.extend({\n // anything which *must* be merged to prototype here\n}) {\n @service\n declare router: RouterService;\n \n queryParams = ['documentType', 'documentLabel', 'siteLabel'];\n\n @tracked\n documentType = null;\n\n @tracked\n documentLabel = null;\n\n @tracked\n siteLabel = null;\n\n @action\n goBack() {\n if (window.history.length > 1) {\n window.history.back();\n } else {\n this.router.transitionTo('dashboard'); // or your default route\n }\n }\n\n get hasSiteInfo() {\n return !isEmpty(this.siteLabel) || !isEmpty(this.documentType) || !isEmpty(this.documentLabel);\n }\n\n @action\n contactSupport() {\n // Implement your support contact logic\n window.open('mailto:support@indusuite.com?subject=Site Access Issue', '_blank');\n }\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'error-not-allowed-site': ErrorNotAllowedSite;\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { get, getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class ExaminingBodiesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n sort = null;\n\n name = '';\n\n dir = 'asc';\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'examining-body';\n\n isLoading = false;\n\n @computed('totalCount', 'result.meta.records')\n get examiningBodyCount() {\n if (!isEmpty(get(this, 'result.meta.records'))) {\n return this.result.meta.records;\n }\n return this.totalCount;\n }\n\n @computed\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('name');\n let addressLabel = this.getAttributeLabel('address');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'name',\n label: nameLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/examining-body-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'address',\n label: addressLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'name');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n set(this, 'isLoading', true);\n let options = {};\n\n let { dir = 'asc', sort } = getProperties(this, 'dir', 'sort');\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n }\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let result = await this.data.listAllExaminingBodies(options, this.buildFilters());\n set(this, 'model', result);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n set(this, 'name', name);\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n if (!isEmpty(this.name)) {\n set(this, 'name', null);\n this.loadData.perform();\n }\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class ExaminingBodyController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FillerMaterialCommercialDesignationController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'filler-material-commercial-designations';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class FillerMaterialCommercialDesignationsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'filler-material-commercial-designation';\n\n commercialDesignation = '';\n\n gas = null;\n\n @computed\n get gridColumns() {\n let commercialDesignationLabel = this.getAttributeLabel('commercialDesignation');\n let specificationLabel = this.intl.t('model.filler-material.specification.label');\n let classificationLabel = this.intl.t('model.filler-material.classification.label');\n let groupLabel = this.intl.t('model.filler-material.group.label');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'commercialDesignation',\n label: commercialDesignationLabel,\n cellComponent: 'weldnote-grid/filler-material-commercial-designation-link',\n },\n {\n valuePath: 'fillerMaterial.specification.specification',\n label: specificationLabel,\n sortable: false,\n },\n {\n valuePath: 'fillerMaterial.classification.classification',\n label: classificationLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'fillerMaterial.group.groupName',\n label: groupLabel,\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n buildFilters() {\n let filters = getProperties(\n this,\n 'commercialDesignation',\n 'specification',\n 'classification',\n 'group'\n );\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllFillerMaterialCommercialDesignations(\n options,\n this.buildFilters()\n );\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCommercialDesignation(commercialDesignation) {\n set(this, 'commercialDesignation', commercialDesignation);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSpecification(specification) {\n set(this, 'specification', specification);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setClassification(classification) {\n set(this, 'classification', classification);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setGroup(group) {\n set(this, 'group', group);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n commercialDesignation: null,\n specification: null,\n classification: null,\n group: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FillerMaterialGroupController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'filler-material-groups';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class FillerMaterialGroupsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'filler-material-group';\n\n isLoading = false;\n\n @computed\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('groupName');\n let codeLabel = this.getAttributeLabel('code');\n let descriptionLabel = this.getAttributeLabel('description');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'groupName',\n label: nameLabel,\n cellComponent: 'weldnote-grid/filler-material-group-link',\n },\n {\n valuePath: 'code.code',\n label: codeLabel,\n },\n {\n valuePath: 'description',\n label: descriptionLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'name', 'code');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllFillerMaterialGroups(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n set(this, 'name', name);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCode(code) {\n set(this, 'code', code);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n name: null,\n code: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FillerMaterialController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class FillerMaterialsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n modelName = 'filler-material';\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n @computed\n get gridColumns() {\n let specificationLabel = this.getAttributeLabel('specification');\n let groupLabel = this.getAttributeLabel('group');\n let classificationLabel = this.getAttributeLabel('classification');\n let codeLabel = this.getAttributeLabel('code');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'specification.specification',\n label: specificationLabel,\n cellComponent: 'weldnote-grid/filler-material-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'classification.classification',\n label: classificationLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'group.groupName',\n label: groupLabel,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'code.code',\n label: codeLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllFillerMaterials(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n buildFilters() {\n let { specification, classification, group, code } = getProperties(\n this,\n 'specification',\n 'classification',\n 'group',\n 'code'\n );\n let filters = {};\n if (!isEmpty(specification)) {\n filters.specification = specification;\n }\n if (!isEmpty(classification)) {\n filters.classification = classification;\n }\n if (!isEmpty(group)) {\n filters.group = group;\n }\n if (!isEmpty(code)) {\n filters.code = code.get('id');\n }\n return filters;\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.loadData.perform();\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.setProperties({\n specification: null,\n classification: null,\n group: null,\n code: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSpecification(spec) {\n set(this, 'specification', spec);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setClassification(classification) {\n set(this, 'classification', classification);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setGroup(group) {\n set(this, 'group', group);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCode(code) {\n set(this, 'code', code);\n this.resetPage();\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FitterController extends EditController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { get, set, getProperties, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class FittersController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'fitter';\n\n @computed\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('fitterName');\n let stampLabel = this.getAttributeLabel('fitterStamp');\n let idLabel = this.getAttributeLabel('fitterId');\n let dateBirthLabel = this.getAttributeLabel('dateBirth');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'fitterName',\n label: nameLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/fitter-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'fitterStamp',\n label: stampLabel,\n sortable: false,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'fitterId',\n cellComponent: 'weldnote-grid/fitter-id',\n label: idLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'dateBirth',\n label: dateBirthLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/person-age',\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'name', 'stamp');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n let company = get(this, 'company.id');\n if (!isEmpty(company)) {\n finalFilters.company = company;\n }\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllFitters(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n set(this, 'name', name);\n this.resetPage();\n }\n\n @action\n setStamp(stamp) {\n set(this, 'stamp', stamp);\n this.resetPage();\n }\n\n @action\n setCompany(company) {\n set(this, 'company', company);\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n stamp: null,\n company: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FluxCommercialDesignationController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\n\nexport default class _NewController extends NewController {\n listRoute = 'flux-commercial-designations';\n}\n","import classic from 'ember-classic-decorator';\nimport { action, computed, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class FluxCommercialDesignationsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currentPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'flux-commercial-designation';\n\n commercialDesignation = '';\n\n @computed\n get gridColumns() {\n let commercialDesignationLabel = this.getAttributeLabel('commercialDesignation');\n let fluxLabel = this.intl.t('model.flux.flux.label');\n let specificationLabel = this.intl.t('model.flux.specification.label');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'commercialDesignation',\n label: commercialDesignationLabel,\n cellComponent: 'weldnote-grid/flux-commercial-designation-link',\n },\n {\n valuePath: 'flux.flux',\n label: fluxLabel,\n sortable: false,\n },\n {\n valuePath: 'flux.specification.specification',\n label: specificationLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n buildFilters() {\n let { commercialDesignation, flux } = this;\n let finalFilters = {};\n if (!isEmpty(commercialDesignation)) {\n finalFilters.commercialDesignation = commercialDesignation;\n }\n if (!isEmpty(flux)) {\n finalFilters.fluxName = flux;\n }\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllFluxCommercialDesignations(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCommercialDesignation(commercialDesignation) {\n set(this, 'commercialDesignation', commercialDesignation);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setFlux(flux) {\n set(this, 'flux', flux);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n commercialDesignation: null,\n flux: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FluxSpecificationController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'flux-specifications';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class FluxSpecificationsController extends ListController {\n @service\n userSession;\n\n modelName = 'flux-specification';\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class FluxController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\n\nexport default class _NewController extends NewController {\n listRoute = 'fluxes';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class FluxesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'flux';\n\n @computed\n get gridColumns() {\n let fluxLabel = this.getAttributeLabel('flux');\n let specificationLabel = this.getAttributeLabel('specification');\n let codeLabel = this.getAttributeLabel('code');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'flux',\n label: fluxLabel,\n cellComponent: 'weldnote-grid/flux-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'specification.specification',\n label: specificationLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'code.code',\n label: codeLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'flux', 'specification');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllFluxes(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSpecification(specification) {\n set(this, 'specification', specification);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setFlux(flux) {\n set(this, 'flux', flux);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n specification: null,\n flux: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class GasCommercialDesignationController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'gas-commercial-designations';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class GasCommercialDesignationsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'gas-commercial-designation';\n\n commercialDesignation = '';\n\n gas = null;\n\n @computed\n get gridColumns() {\n let commercialDesignationLabel = this.getAttributeLabel('commercialDesignation');\n let gasLabel = this.getAttributeLabel('gas');\n let gasMixtureLabel = this.getAttributeLabel('gasMixture');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'commercialDesignation',\n label: commercialDesignationLabel,\n cellComponent: 'weldnote-grid/gas-commercial-designation-link',\n },\n {\n valuePath: 'gas.symbol',\n label: gasLabel,\n sortable: false,\n },\n {\n valuePath: 'gasMixture',\n label: gasMixtureLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n buildFilters() {\n let filters = getProperties(this, 'commercialDesignation', 'gas');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllGasCommercialDesignations(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCommercialDesignation(commercialDesignation) {\n set(this, 'commercialDesignation', commercialDesignation);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setGas(gas) {\n set(this, 'gas', gas);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n commercialDesignation: null,\n gas: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class GasSpecificationController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'gas-specifications';\n}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class GasSpecificationsController extends ListController {\n modelName = 'gas-specification';\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class GasController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'gases';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class GasesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'gas';\n\n // Gas Symbol field\n symbol = '';\n\n // Gas Specification field\n specification = '';\n\n @computed\n get gridColumns() {\n let symbolLabel = this.getAttributeLabel('symbol');\n let specificationLabel = this.getAttributeLabel('specification');\n let compositionLabel = this.getAttributeLabel('composition');\n let codeLabel = this.getAttributeLabel('code');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'symbol',\n label: symbolLabel,\n cellComponent: 'weldnote-grid/gas-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'specification.specification',\n label: specificationLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'composition',\n label: compositionLabel,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'code.code',\n label: codeLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'symbol', 'specification');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllGases(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSpecification(specification) {\n set(this, 'specification', specification);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSymbol(symbol) {\n set(this, 'symbol', symbol);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n specification: null,\n symbol: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class GeneralDrawingController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, getProperties, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class GeneralDrawingsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'general-drawing';\n\n @computed\n get gridColumns() {\n let referenceLabel = this.getAttributeLabel('referenceNumber');\n let titleLabel = this.getAttributeLabel('title');\n let revisionLabel = this.getAttributeLabel('revision');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'referenceNumber',\n label: referenceLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/general-drawing-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'title',\n label: titleLabel,\n sortable: false,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'revision',\n label: revisionLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n return { anywhere: get(this, 'referenceNumber') };\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = get(this, 'currentPage');\n\n await timeout(DEBOUNCE);\n let data = await get(this, 'data').listAllGeneralDrawings(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n title: null,\n referenceNumber: null,\n });\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class GrooveDesignController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'groove-designs';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class GrooveDesignsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'groove-design';\n\n @computed\n get gridColumns() {\n let descriptionLabel = this.getAttributeLabel('description');\n let longDescriptionLabel = this.getAttributeLabel('longDescription');\n let imageLabel = this.intl.t('list-view.image-preview');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'description',\n label: descriptionLabel,\n cellComponent: 'weldnote-grid/groove-design-link',\n },\n {\n valuePath: 'longDescription',\n label: longDescriptionLabel,\n sortable: false,\n },\n {\n valuePath: 'renderedImagePath',\n label: imageLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/image-cell',\n },\n ];\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n buildFilters() {\n let filters = getProperties(this, 'description', 'longDescription');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE + 300);\n let data = await this.data.listAllGrooveDesigns(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDescription(description) {\n set(this, 'description', description);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setLongDescription(description) {\n set(this, 'longDescription', description);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n description: null,\n longDescription: null,\n });\n this.loadData.perform();\n }\n}\n","import { service } from '@ember/service';\nimport Controller from '@ember/controller';\nimport UserSessionService from 'weldnote/services/user-session';\n\nexport default class HelpCenterController extends Controller {\n @service\n declare userSession: UserSessionService;\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, get, computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\n\n@classic\nexport default class IeisArchivedController extends Controller {\n @service\n intl;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n queryParams = ['page'];\n\n @service('weldnote-data')\n data;\n\n @alias('model')\n ieis;\n\n @alias('model.meta.records')\n ieisCount;\n\n page = 1;\n\n currentPage = 1;\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`wps-list.grid-columns.${label}`, options);\n }\n\n @computed\n get gridColumns() {\n let wpsNumberLabel = this.intl.t('model.welding-procedure-specification.wpsNumber.label');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let weldTypeLabel = this.intl.t('model.welding-procedure-specification.weldType.label');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'ieisNumber',\n label: this.intl.t('model.ieis.ieisNumber.label'),\n width: '200px',\n cellComponent: 'weldnote-grid/ieis-link',\n sortable: false,\n },\n {\n valuePath: 'wps',\n label: wpsNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/ieis-wps-link',\n sortable: false,\n },\n {\n valuePath: 'wps.weldType',\n width: '100px',\n label: weldTypeLabel,\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n },\n {\n valuePath: 'wps.weldingProcessRoot',\n label: weldingProcessesLabel,\n width: '120px',\n sortable: false,\n cellComponent: 'weldnote-grid/ieis-wps-process',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'wps.baseMaterial1',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/ieis-base-materials',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'lineClass',\n label: this.intl.t('model.ieis.lineClass.label'),\n cellComponent: 'weldnote-grid/ieis-test-stages',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n loadData = task(async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n let results = await this.data.listAllIeis(\n { page: pageNumber },\n {\n archived: 'AR',\n }\n );\n set(this, 'model', results);\n });\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { empty, alias, equal, not } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport { downloadExport } from 'weldnote/utils/ajax/file-download';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { task, timeout, restartableTask } from 'ember-concurrency';\nimport { toNumber, isFraction } from 'weldnote/utils/unit-system/units';\n\nconst {\n WELD_TYPES,\n HTTP: { DEBOUNCE },\n UNIT_SYSTEM,\n} = Constants;\n\n@classic\nexport default class IeisController extends ListController {\n modelName = 'welding-procedure-specification';\n\n @service\n weldnoteData;\n\n @alias('weldnoteData')\n data;\n\n @service\n scroller;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n session;\n\n @service\n store;\n\n @service\n windowService;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('selectedStandard.code')\n industryCode;\n\n @alias('selectedStandard.code')\n currentIndustryCode;\n\n @alias('userSession.distanceUnit')\n distanceUnit;\n\n @alias('userSession.decimalSeparator')\n decimalSeparator;\n\n selectedStandard = null;\n\n showSearchParameters = false;\n\n showAdvancedParameters = false;\n\n dissmilarMaterials = false;\n\n baseMaterialThickness = null;\n\n selectedFillerMaterialRoot = null;\n\n selectedFillerMaterialFill = null;\n\n @empty('selectedStandard')\n fieldsDisabled;\n\n @not('fieldsDisabled')\n isStandardSelected;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n @equal('selectedWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showDissimilarMaterials;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`wps-list.grid-columns.${label}`, options);\n }\n\n @computed\n get gridColumns() {\n let wpsNumberLabel = this.getAttributeLabel('wpsNumber');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let weldTypeLabel = this.getAttributeLabel('weldType');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'ieisNumber',\n label: this.intl.t('model.ieis.ieisNumber.label'),\n width: '200px',\n cellComponent: 'weldnote-grid/ieis-link',\n sortable: false,\n },\n {\n valuePath: 'wps',\n label: wpsNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/ieis-wps-link',\n sortable: false,\n },\n {\n valuePath: 'wps.weldType',\n width: '100px',\n label: weldTypeLabel,\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n },\n {\n valuePath: 'wps.weldingProcessRoot',\n label: weldingProcessesLabel,\n width: '120px',\n sortable: false,\n cellComponent: 'weldnote-grid/ieis-wps-process',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'wps.baseMaterial1',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/ieis-base-materials',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'lineClass',\n label: this.intl.t('model.ieis.lineClass.label'),\n cellComponent: 'weldnote-grid/ieis-test-stages',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildDecimalFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n let decimalValue = get(this, controllerProperty);\n decimalValue = convertDecimals(decimalValue, this.userSession.decimalSeparator);\n filters[apiProperty] = decimalValue;\n }\n }\n\n buildPWHTFilter(filters) {\n let pwhtPresence = get(this, 'selectedPostWeldHeatTreamentPresence');\n if (!isEmpty(pwhtPresence)) {\n filters.pwhtPresence = pwhtPresence;\n } else {\n let pwhtTemp = get(this, 'selectedPostWeldHeatTreament');\n if (!isNaN(parseFloat(pwhtTemp))) {\n filters.pwhtTemperature = pwhtTemp;\n }\n }\n }\n\n buildFilters() {\n let filters = {};\n\n this.buildSingleFilter('selectedStandard.id', 'standard', filters);\n this.buildSingleFilter('selectedWeldType.id', 'weldType', filters);\n this.buildSingleFilter('selectedProcessRoot.id', 'weldingProcessRoot', filters);\n this.buildSingleFilter('selectedProcessFill.id', 'weldingProcessFill', filters);\n this.buildSingleFilter('selectedProcessCap.id', 'weldingProcessCap', filters);\n this.buildSingleFilter('selectedCompany.id', 'company', filters);\n this.buildSingleFilter('selectedInspectionClass.id', 'inspectionClass', filters);\n this.buildDecimalFilter('diameter', 'diameter', filters);\n this.buildDecimalFilter('thickness', 'thickness', filters);\n this.buildSingleFilter('selectedProductType.key', 'productType', filters);\n this.buildSingleFilter('selectedBaseMaterial1Group.id', 'baseMaterial1Group', filters);\n this.buildSingleFilter('selectedBaseMaterial2Group.id', 'baseMaterial2Group', filters);\n this.buildSingleFilter('selectedBaseMaterialGroup.id', 'baseMaterialGroup', filters);\n this.buildSingleFilter('selectedFillerMaterialRoot.id', 'fillerMaterialRoot', filters);\n this.buildSingleFilter('selectedFillerMaterialFill.id', 'fillerMaterialFill', filters);\n this.buildSingleFilter('selectedFillerMaterialCap.id', 'fillerMaterialCap', filters);\n this.buildSingleFilter('certificateNumber', 'ieisNumber', filters);\n this.buildSingleFilter('wpsNumber', 'wpsNumber', filters);\n this.buildSingleFilter('drawingNumber', 'drawingNumber', filters);\n this.buildPWHTFilter(filters);\n\n return filters;\n }\n\n loadData = restartableTask(async (otherOptions = {}) => {\n let options = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllIeis(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n });\n\n searchInspectionClasses = task(\n {\n drop: true,\n },\n async (term) => {\n return await this.data.listAllTestInspectionClasses(\n {},\n {\n name: term,\n }\n );\n }\n );\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedBaseMaterial1Group: null,\n selectedBaseMaterial2Group: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n selectedFillerMaterialCap: null,\n selectedOverlayType: null,\n certificateNumber: null,\n wpsNumber: null,\n drawingNumber: null,\n selectedCompany: null,\n selectedPostWeldHeatTreament: null,\n selectedPostWeldHeatTreamentPresence: null,\n selectedBaseMaterialGroup: null,\n baseMaterialThickness: null,\n baseMaterialThicknessDisplay: null,\n baseMaterial1Thickness: null,\n baseMaterial1ThicknessDisplay: null,\n baseMaterial2Thickness: null,\n baseMaterial2ThicknessDisplay: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n scrollToSearchResults() {\n this.scroller.scrollVertical('#ieis-search-grid');\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchWPS(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform({\n userSearch: true,\n });\n }\n\n @action\n updateStandard(selectedStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n if (isEmpty(this.weldTypeOptionsAll)) {\n this.weldnoteData.getWeldTypes().then((types) => {\n set(this, 'weldTypeOptionsAll', types);\n });\n }\n }\n\n @action\n searchBaseMaterialGroup(term) {\n return this.data.findBaseMaterialGroup(term, get(this, 'currentIndustryCode.id'));\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.searchWPS(pageNumber);\n this.scrollToSearchResults();\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n fillerMaterialRootRemoved() {\n set(this, 'selectedFillerMaterialRoot', null);\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialRoot', fillerMaterial);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialFill', fillerMaterial);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialCap', fillerMaterial);\n }\n\n @action\n fillerMaterialFillRemoved() {\n set(this, 'selectedFillerMaterialFill', null);\n }\n\n @action\n fillerMaterialCapRemoved() {\n set(this, 'selectedFillerMaterialCap', null);\n }\n\n @action\n setSelectedWeldType(type) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (type.get('weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n }\n\n @action\n setWpsNumber(number) {\n set(this, 'wpsNumber', number);\n }\n\n @action\n setThickness(value) {\n set(this, 'thicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thickness', value);\n }\n } else {\n set(this, 'thickness', value);\n }\n }\n\n @action\n setDiameter(value) {\n set(this, 'diameterDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'diameter', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'diameter', value);\n }\n } else {\n set(this, 'diameter', value);\n }\n }\n\n @action\n setBaseMaterial1Thickness(value) {\n set(this, 'baseMaterial1ThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterial1Thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterial1Thickness', value);\n }\n } else {\n set(this, 'baseMaterial1Thickness', value);\n }\n }\n\n @action\n setBaseMaterial2Thickness(value) {\n set(this, 'baseMaterial2ThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterial2Thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterial2Thickness', value);\n }\n } else {\n set(this, 'baseMaterial2Thickness', value);\n }\n }\n\n @action\n setBaseMaterialThickness(value) {\n set(this, 'baseMaterialThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterialThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterialThickness', value);\n }\n } else {\n set(this, 'baseMaterialThickness', value);\n }\n }\n\n @action\n setDissimilarMaterials(value) {\n if (value) {\n set(this, 'selectedBaseMaterialGroup', null);\n set(this, 'baseMaterialThickness', null);\n } else {\n set(this, 'selectedBaseMaterial1Group', null);\n set(this, 'selectedBaseMaterial2Group', null);\n set(this, 'baseMaterial1Thickness', null);\n set(this, 'baseMaterial2Thickness', null);\n }\n set(this, 'dissimilarMaterials', value);\n }\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'ieis';\n await downloadExport('/api/export/download', this.session, filters);\n });\n}\n","import Controller from '@ember/controller';\n\nexport default class NewController extends Controller {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { get, action, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class IndexController extends Controller {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @service\n session;\n\n @service\n router;\n\n emptyCards = null;\n\n @computed(\n 'userSession.{canCreatePQR,canCreateWPS,canCreateCertificate,canCreateWeldingBook,canCreateWelder}'\n )\n get canSeeMenuToCreate() {\n let { userSession } = this;\n let {\n canCreatePQR,\n canCreateWPS,\n canCreateCertificate,\n canCreateWeldingBook,\n canCreateWelder,\n canCreateQMatrix,\n } = userSession;\n return (\n canCreatePQR ||\n canCreateWPS ||\n canCreateCertificate ||\n canCreateWeldingBook ||\n canCreateWelder ||\n canCreateQMatrix\n );\n }\n\n init() {\n super.init(...arguments);\n // This is just to have an array of five\n this.set('emptyCards', Array(5).fill(''));\n }\n\n @service\n help;\n\n @computed('userSession.isPlanQuality')\n get columnSize() {\n if (get(this, 'userSession.isPlanQuality')) {\n return 3;\n }\n return 2;\n }\n\n @alias('model.internalCertificates.lastSuccessful.value')\n internalCertificateList;\n\n @alias('model.externalCertificates.lastSuccessful.value')\n externalCertificateList;\n\n @alias('model.miscellaneousCertificates.lastSuccessful.value')\n miscellaneousCertificateList;\n\n @alias('model.internalCertificates.isRunning')\n isLoadingInternalCertificateList;\n\n @alias('model.externalCertificates.isRunning')\n isLoadingExternalCertificateList;\n\n @alias('model.miscellaneousCertificates.isRunning')\n isLoadingMiscellaneousCertificateList;\n\n showInternalRevalidations = true;\n\n showExternalRevalidations = false;\n\n showMiscellaneousRevalidations = false;\n\n @computed('model.latestDocuments.lastSuccessful.value')\n get latestDocumentRow() {\n let lastSuccessful = this.model?.latestDocuments?.lastSuccessful;\n if (!isEmpty(lastSuccessful)) {\n let { value } = lastSuccessful;\n if (!isEmpty(value)) {\n let result = [];\n let { pqrs, certificates, wps } = value;\n let pqrsWithType = pqrs.map((pqr) => {\n pqr.type = 'pqr';\n return pqr;\n });\n let certificateWithType = certificates.map((certificate) => {\n certificate.type = 'welder-certificate';\n return certificate;\n });\n let wpsWithType = wps.map((wps) => {\n wps.type = 'wps';\n return wps;\n });\n result.push(...pqrsWithType);\n result.push(...certificateWithType);\n result.push(...wpsWithType);\n result.sort((document1, document2) => {\n if (document1.modifiedOn < document2.modifiedOn) {\n return 1;\n }\n if (document1.modifiedOn > document2.modifiedOn) {\n return -1;\n }\n return 0;\n });\n\n return result.slice(0, 5);\n }\n }\n return [];\n }\n\n @computed('userSession.account', 'model.loaded')\n get accountDataLoaded() {\n if (this.userSession.account) {\n if (this.model.loaded) {\n return true;\n } else {\n this.router.refresh();\n return true;\n }\n }\n return false;\n }\n\n @action\n setInternalRevalidations() {\n this.set('showInternalRevalidations', true);\n this.set('showExternalRevalidations', false);\n this.set('showMiscellaneousRevalidations', false);\n this.model.internalCertificates.perform();\n }\n\n @action\n setExternalRevalidations() {\n this.set('showExternalRevalidations', true);\n this.set('showInternalRevalidations', false);\n this.set('showMiscellaneousRevalidations', false);\n this.model.externalCertificates.perform();\n }\n\n @action\n setMiscellaneousRevalidations() {\n this.set('showExternalRevalidations', false);\n this.set('showInternalRevalidations', false);\n this.set('showMiscellaneousRevalidations', true);\n this.model.miscellaneousCertificates.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class InspectorController extends EditController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { get, getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class InspectorsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'inspector';\n\n @computed\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('inspectorName');\n let stampLabel = this.getAttributeLabel('inspectorStamp');\n let idLabel = this.getAttributeLabel('inspectorId');\n let dateBirthLabel = this.getAttributeLabel('dateBirth');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'inspectorName',\n label: nameLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/inspector-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'inspectorStamp',\n label: stampLabel,\n sortable: false,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'inspectorId',\n label: idLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'dateBirth',\n label: dateBirthLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/person-age',\n breakpoints: ['laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'name', 'stamp');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n let examiningBody = get(this, 'examiningBody.id');\n if (!isEmpty(examiningBody)) {\n finalFilters.examiningBody = examiningBody;\n }\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllInspectors(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n set(this, 'name', name);\n this.resetPage();\n }\n\n @action\n setStamp(stamp) {\n set(this, 'stamp', stamp);\n this.resetPage();\n }\n\n @action\n setExaminingBody(body) {\n set(this, 'examiningBody', body);\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n name: null,\n stamp: null,\n examiningBody: null,\n });\n this.loadData.perform();\n }\n}\n","import Controller from '@ember/controller';\nimport { service } from '@ember/service';\nexport default class LoadingController extends Controller {\n @service\n declare session: any;\n\n \n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class MiscellaneousCertificateTypeController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'miscellaneous-certificate-types';\n}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { service } from '@ember/service';\n\n@classic\nexport default class MiscellaneousCertificateTypesController extends ListController {\n modelName = 'miscellaneous-certificate-type';\n\n @service\n userSession;\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class MiscellaneousCertificateController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport { downloadExport } from 'weldnote/utils/ajax/file-download';\nimport Constants from 'weldnote/utils/constants';\nimport Certificate from 'weldnote/pods/miscellaneous-certificate/attributes';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\nconst { MISCELLANEOUS_CERTIFICATE } = Certificate;\n\n@classic\nexport default class MiscellaneousCertificatesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n session;\n\n @service\n windowService;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'miscellaneous-certificate';\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('data.miscellaneousCertificateTypeOptions')\n typeOptions;\n\n searchWelder = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n return this.data.findWelderByName(term);\n }\n );\n\n @computed\n get gridColumns() {\n let certificateNumberLabel = this.getAttributeLabel('certificateNumber');\n let typeLabel = this.getAttributeLabel('type');\n let expirationDateLabel = this.getAttributeLabel('expirationDate');\n let personLabel = this.getAttributeLabel('person');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n cellComponent: 'weldnote-grid/miscellaneous-certificate-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'type.type',\n label: typeLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'certificatePerson.welderName',\n label: personLabel,\n cellComponent: 'weldnote-grid/person-name',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'expirationDate',\n label: expirationDateLabel,\n cellComponent: 'weldnote-grid/date-cell',\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(this.get(controllerProperty))) {\n filters[apiProperty] = this.get(controllerProperty);\n }\n }\n\n buildFilters() {\n let finalFilters = {};\n this.buildSingleFilter('selectedCompany.id', MISCELLANEOUS_CERTIFICATE.COMPANY, finalFilters);\n this.buildSingleFilter('selectedType.id', MISCELLANEOUS_CERTIFICATE.TYPE, finalFilters);\n this.buildSingleFilter('personName', 'personName', finalFilters);\n this.buildSingleFilter(\n 'certificateNumber',\n MISCELLANEOUS_CERTIFICATE.CERTIFICATE_NUMBER,\n finalFilters\n );\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllMiscellaneousCertificates(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n this.resetPage();\n }\n\n @action\n setPerson(person) {\n set(this, 'personName', person);\n this.resetPage();\n }\n\n @action\n setCompany(company) {\n set(this, 'selectedCompany', company);\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n personName: null,\n selectedCompany: null,\n selectedType: null,\n certificateNumber: null,\n });\n this.loadData.perform();\n }\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'miscellaneous-certificate';\n await downloadExport('/api/export/download', this.session, filters);\n });\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, action } from '@ember/object';\nimport { t } from 'ember-intl';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class ThirtyDaysController extends Controller {\n @service\n intl;\n\n queryParams = ['page'];\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @t('miscellaneous-certificate-expiration.expire-30-days-title')\n certificateExpirationTitle;\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (opts = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(opts.company)) {\n options.company = opts.company;\n }\n await timeout(400);\n let results = await this.welderCertificateData.getMiscellaneousCertificatesExpire30Days(\n options\n );\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.welderCertificateData.clearMiscellaneousCache();\n }\n\n @action\n validateSingle(certificate) {\n if (!isEmpty(certificate)) {\n return certificate.revalidateCertificate();\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, get, computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\n\n@classic\nexport default class ArchivedController extends Controller {\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n queryParams = ['page'];\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @alias('model.count')\n certificateCount;\n\n page = 1;\n\n currentPage = 1;\n\n loadData = task(async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n let results = await this.welderCertificateData.getMiscellaneousCertificatesArchived({\n page: pageNumber,\n });\n set(this, 'model', results);\n });\n\n @computed\n get gridColumns() {\n let { intl } = this;\n let certificateNumberLabel = intl.t('model.miscellaneous-certificate.certificateNumber.label');\n let stampLabel = intl.t('model.miscellaneous-certificate.welder.label');\n let typeLabel = intl.t('model.miscellaneous-certificate.type.label');\n let expirationDateLabel = intl.t('model.miscellaneous-certificate.expirationDate.label');\n let personLabel = intl.t('model.miscellaneous-certificate.person.label');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n cellComponent: 'weldnote-grid/miscellaneous-certificate-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'type',\n label: typeLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'personName',\n label: personLabel,\n cellComponent: 'weldnote-grid/person-name',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'expirationDate',\n label: expirationDateLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action } from '@ember/object';\nimport { t } from 'ember-intl';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class ExpiredController extends Controller {\n @service\n intl;\n\n queryParams = ['page'];\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @t('miscellaneous-certificate-expiration.expired-title')\n certificateExpirationTitle;\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (opts = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(opts.company)) {\n options.company = opts.company;\n }\n await timeout(400);\n let results = await this.welderCertificateData.getMiscellaneousCertificatesExpired(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n get(this, 'welderCertificateData').clearMiscellaneousCache();\n }\n\n @action\n validateSingle(certificate) {\n if (!isEmpty(certificate)) {\n return certificate.revalidateCertificate();\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action } from '@ember/object';\nimport { t } from 'ember-intl';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class TodayController extends Controller {\n @service\n intl;\n\n queryParams = ['page'];\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @t('miscellaneous-certificate-expiration.expire-today-title')\n certificateExpirationTitle;\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (opts = {}) => {\n let options = {};\n options.page = get(this, 'page');\n if (!isEmpty(opts.company)) {\n options.company = opts.company;\n }\n await timeout(400);\n let results = await this.welderCertificateData.getMiscellaneousCertificatesExpireToday(\n options\n );\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n get(this, 'welderCertificateData').clearMiscellaneousCache();\n }\n\n @action\n validateSingle(certificate) {\n if (!isEmpty(certificate)) {\n return certificate.revalidateCertificate();\n }\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class NdtReportCertificateController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class NonDestructiveTestingController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'non-destructive-testings';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { set, action, computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\n\n@classic\nexport default class NonDestructiveTestingsController extends ListController {\n modelName = 'non-destructive-testing';\n\n currentPage = 1;\n\n @service('weldnote-data')\n data;\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n let result = await this.data.listAllNonDestructiveTesting(options);\n set(this, 'model', result);\n set(this, 'totalCount', result.meta.records);\n }\n );\n\n @computed\n get gridColumns() {\n let designationLabel = this.getAttributeLabel('designation');\n let shortDesignationLabel = this.getAttributeLabel('shortDesignation');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'designation',\n label: designationLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/non-destructive-testing-link',\n },\n {\n valuePath: 'shortDesignation',\n label: shortDesignationLabel,\n sortable: false,\n },\n ];\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class PipingPieceController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'piping-pieces';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class PipingPiecesController extends ListController {\n @service\n store;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n modelName = 'piping-piece';\n\n sort = null;\n\n dir = 'asc';\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n isLoading = false;\n\n @alias('userSession.isMetricSystem')\n isMetric;\n\n @alias('userSession.isImperialSystem')\n isImperial;\n\n @computed\n get gridColumns() {\n let diameterLabel = this.getAttributeLabel('diameter');\n let diameterInchesLabel = this.getAttributeLabel('diameterInches');\n let thicknessLabel = this.getAttributeLabel('thickness');\n let thicknessInchesLabel = this.getAttributeLabel('thicknessInches');\n let scheduleLabel = this.getAttributeLabel('schedule');\n let nominalDiameterLabel = this.getAttributeLabel('nominalDiameter');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/piping-piece-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'diameterInches',\n label: diameterInchesLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'schedule',\n label: scheduleLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'thickness',\n label: thicknessLabel,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'thicknessInches',\n label: thicknessInchesLabel,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'nominalDiameter',\n label: nominalDiameterLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n let { dir = 'asc', sort } = getProperties(this, 'dir', 'sort');\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n }\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllPipingPieces(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n convertDecimal(value) {\n let {\n userSession: { decimalSeparator: separator },\n } = this;\n if (separator === ',') {\n value = value.replace(',', '.');\n } else if (value.indexOf(',') > 0) {\n value = value.replace(',', '.');\n }\n return value;\n }\n\n buildFilters() {\n let { diameter, schedule, thickness, nominalDiameter, diameterInches, thicknessInches } =\n getProperties(\n this,\n 'diameter',\n 'schedule',\n 'thickness',\n 'nominalDiameter',\n 'diameterInches',\n 'thicknessInches'\n );\n let filters = {};\n if (!isEmpty(diameter)) {\n filters.diameter = this.convertDecimal(diameter);\n }\n if (!isEmpty(diameterInches)) {\n filters.diameterInches = this.convertDecimal(diameterInches);\n }\n if (!isEmpty(schedule)) {\n filters.schedule = schedule;\n }\n if (!isEmpty(thickness)) {\n filters.thickness = this.convertDecimal(thickness);\n }\n if (!isEmpty(thicknessInches)) {\n filters.thicknessInches = this.convertDecimal(thicknessInches);\n }\n if (!isEmpty(nominalDiameter)) {\n filters.nominalDiameter = nominalDiameter;\n }\n return filters;\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.loadData.perform();\n this.resetPage();\n }\n\n @action\n onColumnClick(column) {\n if (column.sorted) {\n this.setProperties({\n dir: column.ascending ? 'asc' : 'desc',\n sort: column.get('valuePath'),\n });\n this.loadData.perform();\n }\n }\n\n @action\n clearFields() {\n this.setProperties({\n diameter: null,\n thickness: null,\n schedule: null,\n nominalDiameter: null,\n diameterInches: null,\n thicknessInches: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDiameter(spec) {\n set(this, 'diameter', spec);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDiameterInches(spec) {\n set(this, 'diameterInches', spec);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThickness(thickness) {\n set(this, 'thickness', thickness);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThicknessInches(thickness) {\n set(this, 'thicknessInches', thickness);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSchedule(schedule) {\n set(this, 'schedule', schedule);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setNominalDiameter(nominalDiameter) {\n set(this, 'nominalDiameter', nominalDiameter);\n this.resetPage();\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class PlatePieceController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'plate-pieces';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class PlatePiecesController extends ListController {\n @service\n store;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n modelName = 'plate-piece';\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n @computed\n get gridColumns() {\n let thicknessLabel = this.getAttributeLabel('thickness', {\n unit: this.userSession.distanceUnit,\n });\n let thicknessInchesLabel = this.getAttributeLabel('thicknessInches', {\n unit: this.userSession.distanceUnit,\n });\n\n return [\n {\n valuePath: 'thickness',\n label: thicknessLabel,\n cellComponent: 'weldnote-grid/plate-piece-link',\n },\n {\n valuePath: 'thicknessInches',\n label: thicknessInchesLabel,\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllPlatePieces(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n convertDecimal(value) {\n let separator = this.get('userSession.decimalSeparator');\n if (separator === ',') {\n value = value.replace(',', '.');\n }\n return value;\n }\n\n buildFilters() {\n let { thickness, thicknessInches } = getProperties(this, 'thickness', 'thicknessInches');\n let filters = {};\n if (!isEmpty(thickness)) {\n filters.thickness = this.convertDecimal(thickness);\n }\n if (!isEmpty(thicknessInches)) {\n filters.thicknessInches = this.convertDecimal(thicknessInches);\n }\n return filters;\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.loadData.perform();\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.setProperties({\n thicknessInches: null,\n thickness: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThicknessInches(thickness) {\n set(this, 'thicknessInches', thickness);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThickness(thickness) {\n set(this, 'thickness', thickness);\n this.resetPage();\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class PostWeldTreatmentMethodController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\n\nexport default class _NewController extends NewController {\n listRoute = 'post-weld-treatment-methods';\n}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class PostWeldTreatmentMethodsController extends ListController {\n modelName = 'post-weld-treatment-method';\n}\n","import { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { action, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\nconst ENTITY_TYPES = [\n { key: 'WeldType', label: 'Weld Type' },\n { key: 'WeldingProcess', label: 'Welding Process' },\n { key: 'WeldingPosition', label: 'Welding Position' },\n { key: 'ArcTransferMode', label: 'Arc Transfer Mode' },\n { key: 'TypeCurrentPolarity', label: 'Type Current Polarity' },\n { key: 'ProcessMecanization', label: 'Process Mecanization' },\n { key: 'WeldingDetail', label: 'Welding Detail' },\n { key: 'Gas', label: 'Gas' },\n];\n\nconst IS_VERIFIED_OPTIONS = [\n { key: null, label: 'Any' },\n { key: true, label: 'Yes' },\n { key: false, label: 'No' },\n];\n\nexport default class PqrLearnedMappingsController extends ListController {\n modelName = 'pqr-learned-mapping';\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n currentPage = 1;\n\n // Filter properties\n entityType = null;\n parsedValue = null;\n canonicalCode = null;\n isVerified = null;\n industryCode = null;\n\n get entityTypeOptions() {\n return ENTITY_TYPES;\n }\n\n get isVerifiedOptions() {\n return IS_VERIFIED_OPTIONS;\n }\n\n get totalCount() {\n return this.model.meta?.records ?? this.model.length;\n }\n\n buildFilters() {\n let filters = {};\n\n if (!isEmpty(this.entityType)) {\n filters.entityType = this.entityType.key;\n }\n if (!isEmpty(this.parsedValue)) {\n filters.parsedValue = this.parsedValue;\n }\n if (!isEmpty(this.canonicalCode)) {\n filters.canonicalCode = this.canonicalCode;\n }\n if (!isEmpty(this.isVerified) && this.isVerified.key !== null) {\n filters.isVerified = this.isVerified.key;\n }\n if (!isEmpty(this.industryCode)) {\n filters.industryCode = this.industryCode.id;\n }\n\n return filters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (page = 1) => {\n let options = {\n page,\n };\n\n await timeout(DEBOUNCE);\n let result = await this.data.listAllPqrLearnedMappings(options, this.buildFilters());\n this.model = result;\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform(pageNumber);\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setEntityType(entityType) {\n set(this, 'entityType', entityType);\n this.resetPage();\n }\n\n @action\n setParsedValue(parsedValue) {\n set(this, 'parsedValue', parsedValue);\n this.resetPage();\n }\n\n @action\n setCanonicalCode(canonicalCode) {\n set(this, 'canonicalCode', canonicalCode);\n this.resetPage();\n }\n\n @action\n setIsVerified(isVerified) {\n set(this, 'isVerified', isVerified);\n this.resetPage();\n }\n\n @action\n setIndustryCode(industryCode) {\n set(this, 'industryCode', industryCode);\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n entityType: null,\n parsedValue: null,\n canonicalCode: null,\n isVerified: null,\n industryCode: null,\n });\n this.loadData.perform();\n }\n\n get gridColumns() {\n let entityTypeLabel = this.getAttributeLabel('entityType');\n let parsedValueLabel = this.getAttributeLabel('parsedValue');\n let canonicalCodeLabel = this.getAttributeLabel('canonicalCode');\n let industryCodeLabel = this.getAttributeLabel('industryCode');\n let usageCountLabel = this.getAttributeLabel('usageCount');\n let isVerifiedLabel = this.getAttributeLabel('isVerified');\n\n return [\n {\n valuePath: 'entityType',\n label: entityTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/pqr-learned-mapping-link',\n },\n {\n valuePath: 'parsedValue',\n label: parsedValueLabel,\n sortable: false,\n },\n {\n valuePath: 'canonicalCode',\n label: canonicalCodeLabel,\n sortable: false,\n },\n {\n valuePath: 'industryCode.code',\n label: industryCodeLabel,\n sortable: false,\n },\n {\n valuePath: 'usageCount',\n label: usageCountLabel,\n sortable: false,\n },\n {\n valuePath: 'isVerified',\n label: isVerifiedLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/verified-icon',\n },\n ];\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class PqrStandardController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class PqrStandardsController extends ListController {\n modelName = 'pqr-standard';\n}\n","import { action } from '@ember/object';\nimport Controller from '@ember/controller';\nimport { service } from '@ember/service';\nimport RouterService from '@ember/routing/router-service';\n\nexport default class PqrViewController extends Controller {\n @service\n declare router: RouterService;\n\n @action\n editPqr(pqr: string) {\n this.router.transitionTo('pqr', pqr);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport EditController from 'weldnote/controllers/_base/edit';\n\n@classic\nexport default class PqrController extends EditController {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n queryParams = ['section'];\n\n section = 'details';\n}\n","import { action } from '@ember/object';\nimport NewController from 'weldnote/controllers/_base/new';\nimport { service } from '@ember/service';\nimport RouterService from '@ember/routing/router-service';\nimport DS from 'ember-data';\n\nexport default class _NewController extends NewController {\n @service\n declare router: RouterService;\n\n model: DS.Model | null = null;\n\n @action\n instanceCreated() {\n if (this.model) {\n this.router.transitionTo('pqr', this.model, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport { task } from 'ember-concurrency';\n\nconst { ARCHIVAL_STATE } = Constants;\n\n@classic\nexport default class PqrsArchivedController extends Controller {\n @service\n intl;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @alias('model.list')\n pqrs;\n\n @alias('model.count')\n pqrCount;\n\n page = 1;\n\n currentPage = 1;\n\n loadData = task(async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n let results = await this.data.listAllPQR(\n { page: pageNumber },\n {\n archivalState: ARCHIVAL_STATE.ARCHIVED,\n }\n );\n set(this, 'model', results);\n });\n\n @computed\n get gridColumns() {\n let { intl } = this;\n\n let certificateNumberLabel = intl.t('pqr-list.grid-columns.certificate-number');\n let weldTypeLabel = intl.t('pqr-list.grid-columns.weld-type');\n let weldingProcessesLabel = intl.t('pqr-list.grid-columns.welding-processes');\n let diameterLabel = intl.t('pqr-list.grid-columns.diameter');\n let baseMaterialThicknessLabel = intl.t('pqr-list.grid-columns.base-material-thickness');\n let baseMaterialsLabel = intl.t('pqr-list.grid-columns.base-materials');\n let heatInputLabel = intl.t('pqr-list.grid-columns.heat-input', {\n unit: this.userSession.heatDistanceUnit,\n });\n let postWeldHeatTreamentLabel = intl.t('pqr-list.grid-columns.post-weld-heat-treatment');\n let preHeatLabel = intl.t('pqr-list.grid-columns.pre-heat');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/pqr-link-archive',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/weld-type',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/welding-processes',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/base-material-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterialThickness',\n label: baseMaterialThicknessLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/base-material-thickness-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n align: 'right',\n cellComponent: 'weldnote-grid/pqr-diameter',\n label: diameterLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n align: 'right',\n label: heatInputLabel,\n cellComponent: 'weldnote-grid/pqr-heat-input',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n align: 'right',\n label: preHeatLabel,\n cellComponent: 'weldnote-grid/pqr-preheat',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreament',\n align: 'right',\n label: postWeldHeatTreamentLabel,\n cellComponent: 'weldnote-grid/pqr-pwht',\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n}\n","import { action, computed, get, set } from '@ember/object';\nimport { alias, empty, equal, not } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\nimport classic from 'ember-classic-decorator';\nimport { task, timeout } from 'ember-concurrency';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport Constants from 'weldnote/utils/constants';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport { downloadExport } from 'weldnote/utils/ajax/file-download';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport { isFraction, toNumber } from 'weldnote/utils/unit-system/units';\n\nconst {\n HTTP: { DEBOUNCE },\n WELD_TYPES,\n UNIT_SYSTEM,\n} = Constants;\n\nconst { PQR } = PQRRules;\n\n@classic\nexport default class PqrsController extends ListController {\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n unitSystem;\n\n @service('instanceTracker')\n tracker;\n\n @service\n scroller;\n\n @service\n store;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n session;\n\n @service\n windowService;\n\n @service\n help;\n\n @service\n analytics;\n\n @service\n router;\n\n modelName = 'pqr';\n\n @tracked\n totalCount = 0;\n\n @alias('data.pageSize')\n pageSize;\n\n @tracked\n dissmilarMaterials = false;\n\n @tracked\n baseMaterialThickness = null;\n\n @tracked\n baseMaterial1 = null;\n\n @tracked\n baseMaterial2 = null;\n\n @tracked\n baseMaterial = null;\n\n @tracked\n searchBaseMaterialByGroup = true;\n\n @tracked\n searchBaseMaterial1ByGroup = true;\n\n @tracked\n searchBaseMaterial2ByGroup = true;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionsAll;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('selectedStandard.code')\n industryCode;\n\n @alias('data.examiningBodyOptions')\n examiningBodyOptions;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('selectedStandard.code')\n currentIndustryCode;\n\n get currentUnitSystem() {\n if (!isEmpty(this.selectedUnitSystem)) {\n return this.selectedUnitSystem.key;\n }\n return '';\n }\n\n get temperatureUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getTemperatureUnit(this.currentUnitSystem);\n }\n return this.userSession.temperatureUnit;\n }\n\n get distanceUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getDistanceUnit(this.currentUnitSystem);\n }\n return this.userSession.distanceUnit;\n }\n\n get flowUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getFlowUnit(this.currentUnitSystem);\n }\n return this.userSession.flowUnit;\n }\n\n get heatDistanceUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getHeatDistanceUnit(this.currentUnitSystem);\n }\n return this.userSession.heatDistanceUnit;\n }\n\n @alias('userSession.decimalSeparator')\n decimalSeparator;\n\n @tracked\n selectedStandard = null;\n\n @tracked\n selectedFillerMaterialRoot = null;\n\n @tracked\n selectedFillerMaterialFill = null;\n\n @tracked\n selectedFillerMaterialCap = null;\n\n @tracked\n selectedUnitSystem = null;\n\n @tracked\n selectedProcessMecanizationRoot = null;\n\n @tracked\n selectedProcessMecanizationFill = null;\n\n @tracked\n selectedProcessMecanizationCap = null;\n\n @alias('data.processMecanizationOptions')\n processMecanizationOptions;\n\n @tracked\n showAdvancedParameters = false;\n\n @tracked\n showSearchParameters = false;\n\n @empty('selectedFillerMaterialRoot.id')\n fillerMaterialRootGroupDisabled;\n\n @empty('selectedFillerMaterialFill.id')\n fillerMaterialFillGroupDisabled;\n\n @empty('selectedFillerMaterialCap.id')\n fillerMaterialCapGroupDisabled;\n\n @empty('selectedStandard')\n fieldsDisabled;\n\n @not('fieldsDisabled')\n isStandardSelected;\n\n @equal('selectedWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showDissimilarMaterials;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n @filterFromCollectionByKey('weldingPositionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingPositionOptions;\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`pqr-list.grid-columns.${label}`, options);\n }\n\n @computed\n get gridColumns() {\n let certificateNameLabel = this.getGridColumnLabel('certificate-name');\n let weldTypeLabel = this.getGridColumnLabel('weld-type');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let baseMaterialThicknessLabel = this.getGridColumnLabel('base-material-thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n let heatInputLabel = this.getGridColumnLabel('heat-input', {\n unit: this.heatDistanceUnit,\n });\n let postWeldHeatTreamentLabel = this.getGridColumnLabel('post-weld-heat-treatment');\n let preHeatLabel = this.getGridColumnLabel('pre-heat');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNameLabel,\n width: '300px',\n cellComponent: 'weldnote-grid/pqr-link',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/weld-type',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/welding-processes',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/base-material-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterialThickness',\n label: baseMaterialThicknessLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/base-material-thickness-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n align: 'right',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/pqr-diameter',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n align: 'right',\n label: heatInputLabel,\n cellComponent: 'weldnote-grid/pqr-heat-input',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n align: 'right',\n label: preHeatLabel,\n cellComponent: 'weldnote-grid/pqr-preheat',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreament',\n align: 'right',\n label: postWeldHeatTreamentLabel,\n cellComponent: 'weldnote-grid/pqr-pwht',\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (otherOptions = {}) => {\n let options = {};\n\n if (otherOptions.userSearch) {\n options.userSearch = true;\n }\n\n let { dir = 'asc', sort } = this;\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n } else {\n if (!options.sort) {\n options.sort = {};\n }\n options.sort.certificateNumber = 'asc';\n }\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllPQR(options, this.buildFilters());\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(this.get(controllerProperty))) {\n filters[apiProperty] = this.get(controllerProperty);\n }\n }\n\n buildDecimalFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(this.get(controllerProperty))) {\n let decimalValue = this.get(controllerProperty);\n decimalValue = convertDecimals(decimalValue, this.get('userSession.decimalSeparator'));\n filters[apiProperty] = decimalValue;\n }\n }\n\n buildPWHTFilter(filters) {\n let pwhtPresence = get(this, 'selectedPostWeldHeatTreamentPresence');\n if (!isEmpty(pwhtPresence)) {\n filters.pwhtPresence = pwhtPresence;\n } else {\n let pwhtTemp = get(this, 'selectedPostWeldHeatTreament');\n if (!isNaN(parseFloat(pwhtTemp))) {\n filters.postWeldHeatTreatmentTemperatureTestPiece = pwhtTemp;\n }\n }\n }\n\n get isThicknessSearchDisabled() {\n return isEmpty(this.selectedUnitSystem);\n }\n\n get disabledThicknessSearchTooltipText() {\n if (this.isThicknessSearchDisabled) {\n return this.intl.t('generic.unit-system.search-without-system').toString();\n } else {\n return '';\n }\n }\n\n buildFilters() {\n let filters = {};\n\n this.buildSingleFilter('selectedStandard.id', PQR.STANDARD, filters);\n this.buildSingleFilter('selectedConstructionStandard.id', PQR.CONSTRUCTION_STANDARD, filters);\n this.buildSingleFilter('selectedExaminingBody.id', PQR.EXAMINING_BODY, filters);\n this.buildSingleFilter('selectedWeldType.id', PQR.WELDTYPE_TESTPIECE, filters);\n this.buildSingleFilter('selectedProcessRoot.id', PQR.WELDING_PROCESS_ROOT_TESTPIECE, filters);\n this.buildSingleFilter('selectedProcessFill.id', PQR.WELDING_PROCESS_FILL_TESTPIECE, filters);\n this.buildSingleFilter('selectedProcessCap.id', PQR.WELDING_PROCESS_CAP_TEST_PIECE, filters);\n this.buildSingleFilter(\n 'selectedProcessMecanizationRoot.id',\n PQR.PROCESS_MECANIZATION_ROOT_TEST_PIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessMecanizationFill.id',\n PQR.PROCESS_MECANIZATION_FILL_TEST_PIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessMecanizationCap.id',\n PQR.PROCESS_MECANIZATION_CAP_TEST_PIECE,\n filters\n );\n this.buildSingleFilter('selectedCompany.id', PQR.COMPANY, filters);\n this.buildSingleFilter('branchAngle', PQR.BRANCH_ANGLE_TESTPIECE, filters);\n this.buildDecimalFilter('heatInput', 'heatInputTestPiece', filters);\n this.buildSingleFilter('preHeat', PQR.PREHEAT_TEMPERATURE_TESTPIECE, filters);\n this.buildSingleFilter(\n 'postWeldHeatTreament',\n PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE,\n filters\n );\n this.buildSingleFilter('impactTemperature', PQR.IMPACT_TEST_TEMPERATURE, filters);\n this.buildSingleFilter('selectedUnitSystem.key', PQR.UNIT_SYSTEM, filters);\n if (!isEmpty(this.selectedUnitSystem)) {\n // Since each document has its own unit system, we can only send these thicknesses\n // when the unit system is selected (due to welding standards calculating thickness\n // for imperial/metric differently, we can't simply convert)\n this.buildDecimalFilter('diameter', PQR.DIAMETER_TESTPIECE, filters);\n this.buildDecimalFilter('thickness', PQR.THICKNESS_TOTAL_TESTPIECE, filters);\n this.buildDecimalFilter('thicknessFill', PQR.THICKNESS_FILL_TESTPIECE, filters);\n this.buildDecimalFilter('thicknessRoot', PQR.THICKNESS_ROOT_TESTPIECE, filters);\n this.buildDecimalFilter('thicknessCap', PQR.THICKNESS_CAP_TEST_PIECE, filters);\n this.buildDecimalFilter('baseMaterialThickness', 'baseMaterialThickness', filters);\n this.buildDecimalFilter('baseMaterial1Thickness', 'baseMaterial1Thickness', filters);\n this.buildDecimalFilter('baseMaterial2Thickness', 'baseMaterial2Thickness', filters);\n this.buildDecimalFilter('throatThickness', PQR.THROAT_THICKNESS_TESTPIECE, filters);\n }\n this.buildSingleFilter('hardnessRequirements', PQR.HARDNESS_TEST_REQUIRED, filters);\n this.buildSingleFilter(\n 'selectedWeldingPositionRoot.id',\n PQR.WELDING_POSITION_ROOT_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionFill.id',\n PQR.WELDING_POSITION_FILL_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedWeldingPositionCap.id',\n PQR.WELDING_POSITION_CAP_TEST_PIECE,\n filters\n );\n this.buildSingleFilter('selectedProductType.key', PQR.PRODUCT_TYPE_TESTPIECE, filters);\n if (!isEmpty(this.baseMaterial)) {\n if (this.searchBaseMaterialByGroup) {\n this.buildSingleFilter('baseMaterial.materialGroup.id', 'baseMaterial1Group', filters);\n this.buildSingleFilter('baseMaterial.materialGroup.id', 'baseMaterial2Group', filters);\n } else {\n this.buildSingleFilter('baseMaterial.id', PQR.BASE_MATERIAL1_TESTPIECE, filters);\n this.buildSingleFilter('baseMaterial.id', PQR.BASE_MATERIAL2_TESTPIECE, filters);\n }\n } else {\n if (this.searchBaseMaterial1ByGroup) {\n this.buildSingleFilter('baseMaterial1.materialGroup.id', 'baseMaterial1Group', filters);\n } else {\n this.buildSingleFilter('baseMaterial1.id', PQR.BASE_MATERIAL1_TESTPIECE, filters);\n }\n if (this.searchBaseMaterial2ByGroup) {\n this.buildSingleFilter('baseMaterial2.materialGroup.id', 'baseMaterial2Group', filters);\n } else {\n this.buildSingleFilter('baseMaterial2.id', PQR.BASE_MATERIAL2_TESTPIECE, filters);\n }\n }\n this.buildSingleFilter(\n 'selectedFillerMaterialRoot.id',\n PQR.FILLER_MATERIAL_ROOT_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedFillerMaterialFill.id',\n PQR.FILLER_MATERIAL_FILL_TESTPIECE,\n filters\n );\n this.buildSingleFilter(\n 'selectedFillerMaterialCap.id',\n PQR.FILLER_MATERIAL_CAP_TEST_PIECE,\n filters\n );\n\n this.buildSingleFilter('selectedOverlayType.key', PQR.OVERLAY_TYPE, filters);\n this.buildSingleFilter('certificateNumber', PQR.CERTIFICATE_NUMBER, filters);\n this.buildSingleFilter('fillerMaterialGroupRootSearch', 'fillerMaterialRootGroup', filters);\n this.buildSingleFilter('fillerMaterialGroupFillSearch', 'fillerMaterialFillGroup', filters);\n this.buildSingleFilter('fillerMaterialGroupCapSearch', 'fillerMaterialCapGroup', filters);\n this.buildPWHTFilter(filters);\n filters.exportType = 'pqr';\n\n if (!isEmpty(this.selectedDetails)) {\n let detailsSerialized = this.selectedDetails\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[PQR.WELDING_DETAILS_TESTPIECE] = detailsSerialized;\n }\n\n if (!isEmpty(this.selectedSpecialRequirements)) {\n let specialRequirementOptionsSerialized = this.selectedSpecialRequirements\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[PQR.SPECIAL_REQUIREMENTS] = specialRequirementOptionsSerialized;\n }\n\n return filters;\n }\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedConstructionStandard: null,\n selectedDetails: [],\n selectedExaminingBody: null,\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n selectedProcessMecanizationRoot: null,\n selectedProcessMecanizationFill: null,\n selectedProcessMecanizationCap: null,\n selectedCompany: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedWeldingPositionRoot: null,\n selectedWeldingPositionFill: null,\n selectedWeldingPositionCap: null,\n branchAngle: null,\n preHeat: null,\n heatInput: null,\n postWeldHeatTreament: null,\n thicknessRoot: null,\n thicknessRootDisplay: null,\n thicknessFill: null,\n thicknessFillDisplay: null,\n thicknessCap: null,\n thicknessCapDisplay: null,\n impactTemperature: null,\n hardnessRequirements: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n throatThickness: null,\n throatThicknessDisplay: null,\n selectedSpecialRequirements: [],\n selectedOverlayType: null,\n certificateNumber: null,\n selectedPostWeldHeatTreament: null,\n selectedPostWeldHeatTreamentPresence: null,\n fillerMaterialGroupRootSearch: null,\n fillerMaterialGroupFillSearch: null,\n fillerMaterialGroupCapSearch: null,\n baseMaterialThickness: null,\n baseMaterialThicknessDisplay: null,\n baseMaterial1Thickness: null,\n baseMaterial1ThicknessDisplay: null,\n baseMaterial2Thickness: null,\n baseMaterial2ThicknessDisplay: null,\n selectedUnitSystem: null,\n });\n this.baseMaterial2 = null;\n this.baseMaterial1 = null;\n this.baseMaterial = null;\n this.searchBaseMaterial1ByGroup = true;\n this.searchBaseMaterial2ByGroup = true;\n this.resetPage();\n this.loadData.perform();\n }\n\n scrollToSearchResults() {\n this.scroller.scrollVertical('#pqr-search-grid');\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchPQR(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform({\n userSearch: true,\n });\n }\n\n @action\n updateStandard(selectedStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n if (isEmpty(this.weldTypeOptionsAll)) {\n this.data.getWeldTypes().then((types) => {\n set(this, 'weldTypeOptionsAll', types);\n });\n }\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.searchPQR(pageNumber);\n this.scrollToSearchResults();\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialRoot', fillerMaterial);\n }\n\n @action\n fillerMaterialRootRemoved() {\n set(this, 'selectedFillerMaterialRoot', null);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialFill', fillerMaterial);\n }\n\n @action\n fillerMaterialFillRemoved() {\n set(this, 'selectedFillerMaterialFill', null);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialCap', fillerMaterial);\n }\n\n @action\n fillerMaterialCapRemoved() {\n set(this, 'selectedFillerMaterialCap', null);\n }\n\n @action\n setSelectedWeldType(type) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (type.get('weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'pqr';\n await downloadExport('/api/export/download', this.session, filters);\n });\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThickness(value) {\n set(this, 'thicknessDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thickness', value);\n }\n } else {\n set(this, 'thickness', value);\n }\n }\n\n @action\n setThicknessRoot(value) {\n set(this, 'thicknessRootDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessRoot', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessRoot', value);\n }\n } else {\n set(this, 'thicknessRoot', value);\n }\n }\n\n @action\n setThicknessFill(value) {\n set(this, 'thicknessFillDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessFill', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessFill', value);\n }\n } else {\n set(this, 'thicknessFill', value);\n }\n }\n\n @action\n setThicknessCap(value) {\n set(this, 'thicknessCapDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thicknessCap', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thicknessCap', value);\n }\n } else {\n set(this, 'thicknessCap', value);\n }\n }\n\n @action\n setThroatThickness(value) {\n set(this, 'throatThicknessDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'throatThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'throatThickness', value);\n }\n } else {\n set(this, 'throatThickness', value);\n }\n }\n\n @action\n setDiameter(value) {\n set(this, 'diameterDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'diameter', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'diameter', value);\n }\n } else {\n set(this, 'diameter', value);\n }\n }\n\n @action\n setBaseMaterial1Thickness(value) {\n set(this, 'baseMaterial1ThicknessDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterial1Thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterial1Thickness', value);\n }\n } else {\n set(this, 'baseMaterial1Thickness', value);\n }\n }\n\n @action\n setBaseMaterial2Thickness(value) {\n set(this, 'baseMaterial2ThicknessDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterial2Thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterial2Thickness', value);\n }\n } else {\n set(this, 'baseMaterial2Thickness', value);\n }\n }\n\n @action\n setBaseMaterialThickness(value) {\n set(this, 'baseMaterialThicknessDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterialThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterialThickness', value);\n }\n } else {\n set(this, 'baseMaterialThickness', value);\n }\n }\n\n @action\n createWps(pqr) {\n this.router.transitionTo('welding-procedure-specification.new-from-pqr', {\n queryParams: { pqr: get(pqr, 'id') },\n });\n }\n\n @action\n setDissimilarMaterials(value) {\n if (value) {\n set(this, 'baseMaterialThickness', null);\n this.baseMaterial = null;\n this.searchBaseMaterialByGroup = true;\n } else {\n this.baseMaterial1 = null;\n this.baseMaterial2 = null;\n this.searchBaseMaterial1ByGroup = true;\n this.searchBaseMaterial2ByGroup = true;\n set(this, 'baseMaterial1Thickness', null);\n set(this, 'baseMaterial2Thickness', null);\n }\n set(this, 'dissimilarMaterials', value);\n }\n\n @action\n displayHelpVideo() {\n set(this, 'showVideo', true);\n let { analytics, help } = this;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(help.pqrVideo), {\n location: 'pqr-list',\n });\n }\n\n @action\n setBaseMaterial1(material) {\n this.baseMaterial1 = material;\n if (material && material.isNA) {\n this.searchBaseMaterial1ByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial1() {\n this.baseMaterial1 = null;\n this.searchBaseMaterial1ByGroup = true;\n }\n\n @action\n setBaseMaterial2(material) {\n this.baseMaterial2 = material;\n if (material && material.isNA) {\n this.searchBaseMaterial2ByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial2() {\n this.baseMaterial2 = null;\n this.searchBaseMaterial2ByGroup = true;\n }\n\n @action\n setBaseMaterial(material) {\n this.baseMaterial = material;\n if (material && material.isNA) {\n this.searchBaseMaterialByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial() {\n this.baseMaterial = null;\n this.searchBaseMaterialByGroup = false;\n }\n\n @action\n setSearchByMaterialGroup(value) {\n this.searchBaseMaterialByGroup = value;\n }\n\n @action\n setSearchByMaterial1Group(value) {\n this.searchBaseMaterial1ByGroup = value;\n }\n\n @action\n setSearchByMaterial2Group(value) {\n this.searchBaseMaterial2ByGroup = value;\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class PreparationMethodController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'preparation-methods';\n}\n","import classic from 'ember-classic-decorator';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class PreparationMethodsController extends ListController {\n modelName = 'preparation-method';\n}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'project-clients';\n}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import classic from 'ember-classic-decorator';\nimport { action, set } from '@ember/object';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\n\n/**\n * Controller for the main settings page that manages the categorization and display\n * of welding configuration options.\n *\n * This controller organizes settings into logical categories aligned with welding workflows:\n * - Materials: Base materials and filler materials with their specifications\n * - Gas: Shielding gases and their commercial designations (used in GMAW, GTAW, FCAW)\n * - Flux: Flux materials and specifications (used in SMAW, SAW)\n * - Testing: Destructive and non-destructive testing methods (NDT/DT)\n * - Pieces: Piping and plate piece configurations (joint geometries)\n * - Staff: Personnel and their positions (welders, inspectors, supervisors)\n * - Welding: Welding processes, positions, electrode types (per AWS standards)\n * - Methods: Preparation and post-weld treatment methods (PWHT)\n * - Schematics: Groove designs and weld layer configurations\n * - Welding Book: Status tracking for welding procedure books\n * - Standards: PQR, welder qualification, and construction standards (ASME, AWS, ISO)\n *\n * Business Logic:\n * - Uses query parameters to persist the selected category in the URL\n * - Implements role-based visibility for certain categories (admin-only settings)\n * - Defaults to 'user-settings' category when none is specified\n *\n * Permission Model:\n * - isAccountAdmin: Can manage account-level settings (materials, staff, testing, etc.)\n * - isAdmin: Can manage system-level settings (material groups, specifications, standards)\n *\n * @class SettingsController\n * @extends Controller\n */\n@classic\nexport default class SettingsController extends Controller {\n /**\n * Query parameter that tracks the currently active settings category.\n * Persisted in the URL to allow direct linking to specific settings sections.\n *\n * @property {Array} queryParams\n */\n queryParams = ['category'];\n\n @service\n userSession;\n\n /**\n * The currently selected settings category.\n * Determines which group of settings is displayed to the user.\n *\n * @property {string} category\n * @default 'user-settings'\n */\n category = 'user-settings';\n\n /**\n * Indicates if the current user has account administrator privileges.\n * Account admins can manage organization-specific welding configurations\n * like materials, staff, and testing methods.\n *\n * @property {boolean} isAccountAdmin\n */\n @alias('userSession.isAccountAdmin')\n isAccountAdmin;\n\n /**\n * Indicates if the current user has system administrator privileges.\n * System admins can manage global settings like material specifications,\n * welding standards, and other reference data used across all accounts.\n *\n * @property {boolean} isAdmin\n */\n @alias('userSession.isAdmin')\n isAdmin;\n\n /**\n * Action to change the active settings category.\n * Updates the query parameter which triggers a re-render of the appropriate settings panel.\n *\n * @method setType\n * @param {string} type - The category identifier to switch to\n */\n @action\n setType(type) {\n set(this, 'category', type);\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class StaffPositionController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'staff-positions';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list-js';\n\n@classic\nexport default class StaffPositionsController extends ListController {\n @service\n userSession;\n\n modelName = 'staff-position';\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class StaffController extends EditController {}\n","import { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list';\nimport UserSessionService from 'weldnote/services/user-session';\n\nexport default class StaffsController extends ListController {\n @service\n declare userSession: UserSessionService;\n\n modelName = 'staff';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, getProperties, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class TestInspectionClassesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n currentPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n @alias('model.meta.records')\n totalCount;\n\n modelName = 'test-inspection-class';\n\n @computed\n get gridColumns() {\n let columns = [\n {\n valuePath: 'name',\n label: 'Inspection Class',\n cellComponent: 'weldnote-grid/test-inspection-class-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'stages',\n label: 'Stages',\n cellComponent: 'weldnote-grid/test-inspection-stages',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n ];\n return columns;\n }\n\n buildFilters() {\n let filters = getProperties(this, 'name');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllTestInspectionClasses(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n name: null,\n });\n this.loadData.perform();\n }\n}\n","import { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task } from 'ember-concurrency';\n\nexport default class TestLocationsController extends ListController {\n modelName = 'test-location';\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @tracked\n currentPage = 1;\n\n get totalCount() {\n return this.model.meta.records;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (page = 1) => {\n this.currentPage = page;\n let options = {\n page,\n };\n\n let result = await this.data.listAllTestLocations(options);\n this.model = result;\n }\n );\n\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('name');\n\n return [\n {\n valuePath: 'name',\n label: nameLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/test-location-link',\n },\n ];\n }\n}\n","import { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task } from 'ember-concurrency';\n\nexport default class TestStageNamesController extends ListController {\n modelName = 'test-stage-name';\n\n @service('weldnote-data')\n data;\n\n @service()\n userSession;\n\n @tracked\n currentPage = 1;\n\n get totalCount() {\n return this.model.meta.records;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (page = 1) => {\n this.currentPage = page;\n let options = {\n page,\n };\n\n let result = await this.data.listAllTestStageNames(options);\n this.model = result;\n }\n );\n\n get gridColumns() {\n let nameLabel = this.getAttributeLabel('name');\n let orderLabel = this.getAttributeLabel('display-order');\n\n return [\n {\n valuePath: 'name',\n label: nameLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/test-stage-name-link',\n },\n {\n valuePath: 'displayOrder',\n label: orderLabel,\n sortable: false,\n },\n ];\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { set } from '@ember/object';\n\n@classic\nexport default class TypeCurrentPolaritiesController extends ListController {\n @service\n userSession;\n\n modelName = 'type-current-polarity';\n\n init() {\n super.init(...arguments);\n let typeCurrentLabel = this.getAttributeLabel('typeCurrent');\n set(this, 'columns', [\n {\n data: 'typeCurrent',\n title: typeCurrentLabel,\n },\n ]);\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class TypeCurrentPolarityController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'type-current-polarities';\n}\n","import { service } from '@ember/service';\nimport Controller from '@ember/controller';\nimport UserSessionService from 'weldnote/services/user-session';\n\n/**\n * Controller for the user profile settings page.\n *\n * This controller provides access to the user session service for rendering\n * user-specific profile information and preferences. Unlike the main settings\n * controller which manages welding configurations, this focuses solely on\n * individual user account settings.\n *\n * Business Logic:\n * - Delegates rendering to the UserProfile component\n * - Provides user session context for displaying current user information\n *\n * @class UserSettingsController\n * @extends Controller\n */\nexport default class UserSettingsController extends Controller {\n /**\n * Service providing access to current user session data and permissions.\n * Used by the UserProfile component to display and update user information.\n *\n * @property {UserSessionService} userSession\n */\n @service\n declare userSession: UserSessionService;\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldLayerConfigurationController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'weld-layer-configurations';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class WeldLayerConfigurationsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'weld-layer-configuration';\n\n @computed\n get gridColumns() {\n let descriptionLabel = this.getAttributeLabel('description');\n let longDescriptionLabel = this.getAttributeLabel('longDescription');\n let imageLabel = this.intl.t('list-view.image-preview');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'description',\n label: descriptionLabel,\n cellComponent: 'weldnote-grid/weld-layer-configuration-link',\n },\n {\n valuePath: 'longDescription',\n label: longDescriptionLabel,\n sortable: false,\n },\n {\n valuePath: 'renderedImagePath',\n label: imageLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/image-cell',\n },\n ];\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n buildFilters() {\n let filters = getProperties(this, 'description', 'longDescription');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE + 300);\n let data = await this.data.listAllWeldLayerConfigurations(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDescription(description) {\n set(this, 'description', description);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setLongDescription(description) {\n set(this, 'longDescription', description);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n description: null,\n longDescription: null,\n });\n this.loadData.perform();\n }\n}\n","import Controller from '@ember/controller';\nimport { action } from '@ember/object';\nimport ENV from 'weldnote/config/environment';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class WeldSketchDesignController extends Controller {\n @tracked\n finishedDrawing = true;\n\n @tracked\n showHelp = false;\n\n get helpVideoUrl() {\n return `${ENV.videoBaseUrl}/weld-sketch-designer.mp4`;\n }\n\n @action\n startDrawing() {\n this.finishedDrawing = false;\n }\n\n @action\n finishDrawing() {\n this.finishedDrawing = true;\n }\n\n @action\n doShowHelp() {\n this.showHelp = !this.showHelp;\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias, equal } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, getProperties, action, computed } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport { isEmpty } from '@ember/utils';\nimport { A } from '@ember/array';\n\n@classic\nexport default class WeldSketchesController extends Controller {\n @service\n intl;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n sketchType = 'grooveDesign';\n\n @equal('sketchType', 'grooveDesign')\n showGrooveDesignTab;\n\n @equal('sketchType', 'weldLayer')\n showWeldLayerConfigurationTab;\n\n description = null;\n\n longDescription = null;\n\n @alias('sketches.meta.records')\n totalCount;\n\n currentPage = 1;\n\n emptyCards = null;\n\n init() {\n super.init(...arguments);\n // This is just to have an array of five\n set(this, 'emptyCards', Array(5).fill(''));\n }\n\n @computed('model.grooveDesigns.lastSuccessful.value', 'sketches.[]')\n get currentSketches() {\n if (!isEmpty(this.sketches)) {\n return this.sketches;\n }\n if (this.showGrooveDesignTab) {\n let {\n model: { grooveDesigns },\n } = this;\n if (grooveDesigns) {\n let { lastSuccessful } = grooveDesigns;\n if (lastSuccessful) {\n return lastSuccessful.value;\n }\n }\n }\n return [];\n }\n\n @computed\n get grooveColumns() {\n let descriptionLabel = this.intl.t('model.groove-design.description.label');\n let longDescriptionLabel = this.intl.t('model.groove-design.longDescription.label');\n let imageLabel = this.intl.t('list-view.image-preview');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'description',\n label: descriptionLabel,\n cellComponent: 'weldnote-grid/groove-design-link',\n },\n {\n valuePath: 'longDescription',\n label: longDescriptionLabel,\n sortable: false,\n },\n {\n valuePath: 'renderedImagePath',\n label: imageLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/image-cell',\n },\n ];\n }\n\n @computed\n get weldLayerColumns() {\n let descriptionLabel = this.intl.t('model.weld-layer-configuration.description.label');\n let longDescriptionLabel = this.intl.t('model.weld-layer-configuration.longDescription.label');\n let imageLabel = this.intl.t('list-view.image-preview');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'description',\n label: descriptionLabel,\n cellComponent: 'weldnote-grid/weld-layer-configuration-link',\n },\n {\n valuePath: 'longDescription',\n label: longDescriptionLabel,\n sortable: false,\n },\n {\n valuePath: 'renderedImagePath',\n label: imageLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n cellComponent: 'weldnote-grid/image-cell',\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'description', 'longDescription');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n @computed('model.latestSketches.lastSuccessful.value')\n get latestSketches() {\n let { lastSuccessful } = this.model.latestSketches;\n if (!isEmpty(lastSuccessful)) {\n let { value } = lastSuccessful;\n if (!isEmpty(value)) {\n let { grooves, weldLayers } = value;\n let result = A();\n grooves.forEach((g) => result.pushObject(g));\n weldLayers.forEach((w) => result.pushObject(w));\n result.sort((document1, document2) => {\n if (document1.modifiedOn < document2.modifiedOn) {\n return 1;\n }\n if (document1.modifiedOn > document2.modifiedOn) {\n return -1;\n }\n return 0;\n });\n return result.slice(0, 5);\n }\n }\n return [];\n }\n\n loadGrooveDesigns = task(\n {\n drop: true,\n },\n async () => {\n let options = {};\n options.page = this.currentPage;\n await timeout(300);\n let data = await this.data.listAllGrooveDesigns(options, this.buildFilters());\n set(this, 'sketches', data);\n }\n );\n\n loadWeldLayerConfigurations = task(\n {\n drop: true,\n },\n async () => {\n let options = {};\n options.page = this.currentPage;\n await timeout(300);\n let data = await this.data.listAllWeldLayerConfigurations(options, this.buildFilters());\n set(this, 'sketches', data);\n }\n );\n\n search = task(\n {\n drop: true,\n },\n async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n if (this.showGrooveDesignTab) {\n await this.loadGrooveDesigns.perform();\n } else if (this.showWeldLayerConfigurationTab) {\n await this.loadWeldLayerConfigurations.perform();\n }\n }\n );\n\n @action\n setSection(value) {\n set(this, 'sketchType', value);\n this.search.perform();\n }\n\n @action\n clearFields() {\n set(this, 'description', null);\n set(this, 'longDescription', null);\n this.search.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldTypeController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'weld-types';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class WeldTypesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'weld-type';\n\n isLoading = false;\n\n @computed\n get gridColumns() {\n let typeLabel = this.getAttributeLabel('weldType');\n let designationLabel = this.getAttributeLabel('designation');\n let industryCodeLabel = this.getAttributeLabel('industryCode');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile'],\n },\n {\n valuePath: 'weldType',\n label: typeLabel,\n cellComponent: 'weldnote-grid/weld-type-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'designation',\n label: designationLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'industryCode.code',\n label: industryCodeLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'weldType', 'designation');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldTypes(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setWeldType(weldType) {\n set(this, 'weldType', weldType);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDesignation(designation) {\n set(this, 'designation', designation);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n weldType: null,\n designation: null,\n });\n this.loadData.perform();\n }\n}\n","import { action } from '@ember/object';\nimport Controller from '@ember/controller';\nimport { service } from '@ember/service';\nimport RouterService from '@ember/routing/router-service';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\n\nexport default class WelderCertificateViewController extends Controller {\n @service\n declare router: RouterService;\n\n @action\n editCertificate(certificate: string) {\n this.router.transitionTo('welder-certificate', certificate);\n }\n\n @action\n goToNewCertificate(result: WelderCertificate) {\n this.router.transitionTo('welder-certificate', result.id);\n }\n\n @action\n deleteInstance() {\n this.router.transitionTo('welder-certificates');\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\nimport { get, action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class WelderCertificateController extends EditController {\n @service\n router;\n\n queryParams = ['section'];\n\n @tracked\n section = 'validation';\n\n @action\n goToNewCertificate(result) {\n this.router.transitionTo('welder-certificate', result.id);\n }\n\n @action\n replaceCertificate(newCertificate) {\n this.model = newCertificate;\n }\n\n @action\n selectSection(section) {\n if (section) {\n this.section = section;\n }\n }\n}\n","import Controller from '@ember/controller';\n\nexport default class WelderCertificateNew extends Controller.extend({\n // anything which *must* be merged to prototype here\n}) {\n queryParams = [\n {\n welderType: { type: 'string' as const },\n },\n ];\n // normal class body definition here\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'welder-certificate/new': WelderCertificateNew;\n }\n}\n","import { service } from '@ember/service';\nimport { debounce } from '@ember/runloop';\nimport { isEmpty } from '@ember/utils';\nimport RSVP from 'rsvp';\nimport { set, get, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list';\nimport CertificateRules from 'weldnote/utils/welder-certificate-rules';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { task, timeout } from 'ember-concurrency';\nimport { toNumber, isFraction } from 'weldnote/utils/unit-system/units';\nimport { isWelderStandardISO96061 } from 'weldnote/utils/standards';\nimport { tracked } from '@glimmer/tracking';\nimport { downloadExport } from 'weldnote/utils/ajax/file-download';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport WeldType from 'weldnote/models/weld-type';\nimport InstanceTrackerService from 'weldnote/services/instance-tracker';\nimport AjaxService from 'weldnote/services/ajax';\nimport UserSessionService from 'weldnote/services/user-session';\nimport WeldcloudData from 'weldnote/services/weldcloud-data';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport ConstructionStandard from 'weldnote/models/construction-standard';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport ExaminingBody from 'weldnote/models/examining-body';\nimport Company from 'weldnote/models/company';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport Welder from 'weldnote/models/welder';\nimport CertificationSpecialRequirement from 'weldnote/models/certification-special-requirement';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport FillerMaterialSpecification from 'weldnote/models/filler-material-specification';\nimport FillerMaterialClassification from 'weldnote/models/filler-material-classification';\nimport BaseModel from 'weldnote/models/base-model';\nimport AnalyticsService from 'weldnote/services/analytics';\nimport HelpService from 'weldnote/services/help';\nimport WindowService from 'weldnote/services/window-service';\nimport { GridColumn } from 'gridcolumn';\nimport DS from 'ember-data';\nimport WeldcloudNotesData from 'weldnote/services/weldcloud-notes-data';\n\nconst { WELDER_CERTIFICATE } = CertificateRules;\n\nconst { WELD_TYPES, UNIT_SYSTEM } = Constants;\n\nexport default class WelderCertificatesController extends ListController {\n @service\n declare weldnoteData: any;\n\n get data() {\n return this.weldnoteData;\n }\n\n @service\n declare scroller: any;\n\n declare instanceTracker: InstanceTrackerService;\n\n get tracker() {\n return this.instanceTracker;\n }\n\n @service\n declare userSession: UserSessionService;\n\n @service\n declare session: any;\n\n @service\n declare ajax: AjaxService;\n\n @service\n declare help: HelpService;\n\n @service\n declare analytics: AnalyticsService;\n\n @service('weldcloud-notes-data')\n declare notesData: WeldcloudNotesData;\n\n @service\n declare store: DS.Store;\n\n @service('weldcloud-data')\n declare weldCloudData: WeldcloudData; // FIXME?\n\n @service\n declare windowService: WindowService;\n\n @tracked\n showAdvancedParameters = false;\n\n @tracked\n showSearchParameters = false;\n\n get standardOptions() {\n return this.data.welderStandardOptions;\n }\n\n get weldingDetailOptions() {\n return this.data.weldingDetailOptions;\n }\n\n get weldTypeOptionsAll() {\n return this.data.weldTypeOptions;\n }\n\n get weldingProcessesAll() {\n return this.data.weldingProcessOptions;\n }\n\n get weldingPositionsAll() {\n return this.data.weldingPositionOptions;\n }\n\n get examiningBodyOptions() {\n return this.data.examiningBodyOptions;\n }\n\n get companyOptions() {\n return this.data.companyOptions;\n }\n\n get specialRequirementOptions() {\n return this.data.specialRequirementOptions;\n }\n\n @computed('selectedStandard')\n get currentIndustryCode() {\n if (this.selectedStandard) {\n return get(this.selectedStandard, 'code');\n }\n return null;\n }\n\n get distanceUnit() {\n return this.userSession.distanceUnit;\n }\n\n get decimalSeparator() {\n return this.userSession.decimalSeparator;\n }\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n declare weldTypeOptions: any;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n declare weldingProcessOptions: WeldingProcess[];\n\n @filterFromCollectionByKey('weldingPositionsAll', 'industryCode.id', 'currentIndustryCode.id')\n declare weldingPositionOptions: WeldingPosition[];\n\n get fieldsDisabled() {\n return isEmpty(this.selectedStandard);\n }\n\n get isStandardSelected() {\n return this.selectedStandard && !isEmpty(this.selectedStandard);\n }\n\n @tracked\n selectedStandard: WelderStandard | null = null;\n\n @tracked\n selectedWeldType: WeldType | null = null;\n\n @tracked\n selectedConstructionStandard: ConstructionStandard | null = null;\n\n @tracked selectedDetails: WeldingDetail[] = [];\n\n @tracked\n selectedExaminingBody: ExaminingBody | null = null;\n\n @tracked\n selectedCompanies: Company[] = [];\n\n @tracked\n selectedProcessRoot: WeldingProcess | null = null;\n\n @tracked\n selectedProcessFill: WeldingProcess | null = null;\n\n @tracked\n selectedProcessCap: WeldingProcess | null = null;\n\n @tracked\n diameter: string = '';\n\n @tracked\n diameterDisplay: string = '';\n\n @tracked\n thickness: string = '';\n\n @tracked\n thicknessDisplay: string = '';\n\n @tracked\n selectedProductType: string | null = null;\n\n @tracked\n selectedWeldingPositionRoot: WeldingPosition | null = null;\n\n @tracked\n selectedWeldingPositionFill: WeldingPosition | null = null;\n\n @tracked\n selectedWeldingPositionCap: WeldingPosition | null = null;\n\n @tracked\n thicknessRoot: string = '';\n\n @tracked\n thicknessRootDisplay: string = '';\n\n @tracked\n thicknessFill: string = '';\n\n @tracked\n thicknessFillDisplay: string = '';\n\n @tracked\n thicknessCap: string = '';\n\n @tracked\n thicknessCapDisplay: string = '';\n\n @tracked\n selectedBaseMaterial1Group: BaseMaterialGroup | null = null;\n\n @tracked\n selectedBaseMaterial2Group: BaseMaterialGroup | null = null;\n\n @tracked\n selectedFillerMaterialRoot: FillerMaterial | null = null;\n\n @tracked\n selectedFillerMaterialFill: FillerMaterial | null = null;\n\n @tracked\n selectedFillerMaterialRootSpecification: FillerMaterialSpecification | null = null;\n\n @tracked\n selectedFillerMaterialRootClassification: FillerMaterialClassification | null = null;\n\n @tracked\n selectedFillerMaterialFillSpecification: FillerMaterialSpecification | null = null;\n\n @tracked\n selectedFillerMaterialFillClassification: FillerMaterialClassification | null = null;\n\n @tracked selectedWelders: Welder[] = [];\n\n @tracked\n selectedShowExpired: boolean = false;\n\n @tracked\n selectedShowArchived: boolean = false;\n\n @tracked selectedSpecialRequirements: CertificationSpecialRequirement[] = [];\n\n @tracked\n selectedOverlayType: string | null = null;\n\n @tracked\n certificateNumber: string = '';\n\n @tracked\n selectedFillerMaterialRootGroup: FillerMaterialGroup | null = null;\n\n @tracked\n selectedFillerMaterialFillGroup: FillerMaterialGroup | null = null;\n\n @tracked\n selectedFillerMaterialCapGroup: FillerMaterialGroup | null = null;\n\n @tracked\n selectedProcessMecanizationRoot: ProcessMecanization | null = null;\n\n @tracked\n selectedProcessMecanizationFill: ProcessMecanization | null = null;\n\n @tracked\n selectedProcessMecanizationCap: ProcessMecanization | null = null;\n\n @tracked\n selectedUnitSystem: string | null = null;\n\n get isISO96061() {\n let { selectedStandard } = this;\n if (selectedStandard && !isEmpty(selectedStandard)) {\n return isWelderStandardISO96061(selectedStandard);\n }\n return true;\n }\n\n get productTypeOptions() {\n if (this.selectedStandard && !isEmpty(this.selectedStandard)) {\n if (isWelderStandardISO96061(this.selectedStandard)) {\n return this.data.productTypeOptionsCertificatesIso96061Options;\n }\n }\n return this.data.productTypeOptions;\n }\n\n get isOverlayWeld() {\n return this.selectedWeldType && this.selectedWeldType.isOverlayWeld;\n }\n\n get overlayTypeOptions() {\n return this.data.overlayTypeOptions;\n }\n\n get processMecanizationOptions() {\n return this.data.processMecanizationOptions;\n }\n\n public modelName = 'welder-certificate';\n\n getGridColumnLabel(label: string, options = {}) {\n return this.intl.t(`certificate-list.grid-columns.${label}`, options);\n }\n\n get gridColumns(): GridColumn[] {\n let certificateNumberLabel = this.getGridColumnLabel('certificate-number');\n let stampLabel = this.getGridColumnLabel('stamp');\n let weldTypeLabel = this.getGridColumnLabel('weld-type');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let weldingPositionsLabel = this.getGridColumnLabel('welding-positions');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let weldingDetailsLabel = this.getGridColumnLabel('welding-details');\n let totalThicknessLabel = this.getGridColumnLabel('total-thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n width: '250px',\n cellComponent: 'weldnote-grid/welder-certificate-link',\n sortable: false,\n },\n {\n valuePath: 'welderStamp',\n label: stampLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/welder-in-certificate',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/weld-type',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n cellComponent: 'weldnote-grid/welding-processes',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingPositions',\n label: weldingPositionsLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'weldingDetails',\n label: weldingDetailsLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n align: 'right',\n width: '150px',\n cellComponent: 'weldnote-grid/pqr-diameter',\n label: diameterLabel,\n breakpoints: ['desktop'],\n sortable: false,\n },\n {\n valuePath: 'totalThickness',\n align: 'right',\n width: '200px',\n cellComponent: 'weldnote-grid/wpq-thickness',\n label: totalThicknessLabel,\n breakpoints: ['desktop'],\n sortable: false,\n },\n ];\n }\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedConstructionStandard: null,\n selectedDetails: [],\n selectedExaminingBody: null,\n selectedCompanies: null,\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedWeldingPositionRoot: null,\n selectedWeldingPositionFill: null,\n selectedWeldingPositionCap: null,\n thicknessRoot: null,\n thicknessRootDisplay: null,\n thicknessFill: null,\n thicknessFillDisplay: null,\n thicknessCap: null,\n thicknessCapDisplay: null,\n selectedBaseMaterial1Group: null,\n selectedBaseMaterial2Group: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n selectedFillerMaterialRootSpecification: null,\n selectedFillerMaterialRootClassification: null,\n selectedFillerMaterialFillSpecification: null,\n selectedFillerMaterialFillClassification: null,\n selectedWelders: [],\n selectedShowExpired: null,\n selectedShowArchived: null,\n selectedSpecialRequirements: [],\n selectedOverlayType: null,\n certificateNumber: null,\n selectedFillerMaterialRootGroup: null,\n selectedFillerMaterialFillGroup: null,\n selectedFillerMaterialCapGroup: null,\n selectedProcessMecanizationRoot: null,\n selectedProcessMecanizationFill: null,\n selectedProcessMecanizationCap: null,\n selectedUnitSystem: null\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n @tracked\n currentPage = 1;\n\n @tracked\n totalCount = 0;\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchCertificates(pageNumber: number) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform({\n userSearch: true,\n });\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (otherOptions = {}) => {\n let options: any = {};\n\n if (otherOptions.userSearch) {\n options.userSearch = true;\n }\n\n options.page = get(this, 'currentPage');\n\n await timeout(600);\n let data = await this.data.listAllWelderCertificates(options, this.buildFilters());\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n buildSingleRelationFilter(\n controllerProperty: BaseModel | null,\n apiProperty: string,\n filters: any\n ) {\n if (controllerProperty) {\n let result = get(controllerProperty, 'id');\n filters[apiProperty] = result;\n }\n }\n\n buildMultiRelationFilter(controllerProperty: BaseModel[], apiProperty: string, filters: any) {\n if (controllerProperty) {\n let result = controllerProperty.map((m) => m.get('id')).join(',');\n filters[apiProperty] = result;\n }\n }\n\n buildSingleValueFilter(controllerProperty: any | null, apiProperty: string, filters: any) {\n if (controllerProperty) {\n let result = get(this, controllerProperty);\n if (result) {\n filters[apiProperty] = result;\n }\n }\n }\n\n buildDecimalFilter(controllerProperty: any, apiProperty: string, filters: any) {\n if (!isEmpty(this.get(controllerProperty))) {\n let decimalValue = this.get(controllerProperty);\n let convertedValue = convertDecimals(decimalValue, this.userSession.decimalSeparator);\n filters[apiProperty] = convertedValue;\n }\n }\n\n buildFilters() {\n let filters: any = {};\n\n this.buildSingleRelationFilter(this.selectedStandard, WELDER_CERTIFICATE.STANDARD, filters);\n this.buildSingleRelationFilter(\n this.selectedConstructionStandard,\n WELDER_CERTIFICATE.CONSTRUCTION_STANDARD,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedExaminingBody,\n WELDER_CERTIFICATE.EXAMINING_BODY,\n filters\n );\n this.buildMultiRelationFilter(this.selectedCompanies, WELDER_CERTIFICATE.COMPANY, filters);\n this.buildSingleRelationFilter(\n this.selectedWeldType,\n WELDER_CERTIFICATE.WELD_TYPE_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedProcessRoot,\n WELDER_CERTIFICATE.WELDING_PROCESS_ROOT_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedProcessFill,\n WELDER_CERTIFICATE.WELDING_PROCESS_FILL_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedProcessCap,\n WELDER_CERTIFICATE.WELDING_PROCESS_CAP_TEST_PIECE,\n filters\n );\n\n this.buildSingleValueFilter('selectedUnitSystem.key', WELDER_CERTIFICATE.UNIT_SYSTEM, filters);\n if (!isEmpty(this.selectedUnitSystem)) {\n this.buildDecimalFilter('diameter', WELDER_CERTIFICATE.DIAMETER_TEST_PIECE, filters);\n this.buildDecimalFilter('thickness', WELDER_CERTIFICATE.THICKNESS_TOTAL_TEST_PIECE, filters);\n this.buildDecimalFilter('thicknessRoot', WELDER_CERTIFICATE.THICKNESS_ROOT_TEST_PIECE, filters);\n this.buildDecimalFilter('thicknessFill', WELDER_CERTIFICATE.THICKNESS_FILL_TEST_PIECE, filters);\n this.buildDecimalFilter('thicknessCap', WELDER_CERTIFICATE.THICKNESS_CAP_TEST_PIECE, filters);\n }\n this.buildSingleRelationFilter(\n this.selectedWeldingPositionRoot,\n WELDER_CERTIFICATE.WELDING_POSITION_ROOT_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedWeldingPositionFill,\n WELDER_CERTIFICATE.WELDING_POSITION_FILL_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedWeldingPositionCap,\n WELDER_CERTIFICATE.WELDING_POSITION_CAP_TEST_PIECE,\n filters\n );\n this.buildSingleValueFilter(\n 'selectedProductType.key',\n WELDER_CERTIFICATE.PRODUCT_TYPE_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedBaseMaterial1Group,\n WELDER_CERTIFICATE.BASE_MATERIAL1_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedBaseMaterial2Group,\n WELDER_CERTIFICATE.BASE_MATERIAL2_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedFillerMaterialRoot,\n WELDER_CERTIFICATE.FILLER_MATERIAL_ROOT_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedFillerMaterialFill,\n WELDER_CERTIFICATE.FILLER_MATERIAL_FILL_TEST_PIECE,\n filters\n );\n this.buildSingleValueFilter(\n 'selectedOverlayType.key',\n WELDER_CERTIFICATE.OVERLAY_TYPE,\n filters\n );\n this.buildSingleValueFilter(\n 'certificateNumber',\n WELDER_CERTIFICATE.CERTIFICATE_NUMBER,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedFillerMaterialRootGroup,\n WELDER_CERTIFICATE.FILLER_MATERIAL_ROOT_APPROVAL_RANGE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedFillerMaterialFillGroup,\n WELDER_CERTIFICATE.FILLER_MATERIAL_FILL_APPROVAL_RANGE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedFillerMaterialCapGroup,\n WELDER_CERTIFICATE.FILLER_MATERIAL_CAP_APPROVAL_RANGE,\n filters\n );\n\n this.buildSingleRelationFilter(\n this.selectedProcessMecanizationRoot,\n WELDER_CERTIFICATE.PROCESS_MECANIZATION_ROOT_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedProcessMecanizationFill,\n WELDER_CERTIFICATE.PROCESS_MECANIZATION_FILL_TEST_PIECE,\n filters\n );\n this.buildSingleRelationFilter(\n this.selectedProcessMecanizationCap,\n WELDER_CERTIFICATE.PROCESS_MECANIZATION_CAP_TEST_PIECE,\n filters\n );\n\n if (this.selectedShowArchived && this.selectedShowExpired) {\n filters._all = '_all';\n } else if (this.selectedShowExpired) {\n filters._activeExpired = '_activeExpired';\n } else if (this.selectedShowArchived) {\n filters._activeArchived = '_activeArchived';\n }\n\n if (!isEmpty(this.selectedDetails)) {\n let detailsSerialized = this.selectedDetails\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[WELDER_CERTIFICATE.WELDING_DETAIL_TEST_PIECE] = detailsSerialized;\n }\n\n if (!isEmpty(this.selectedCompanies)) {\n let companiesSerialized = this.selectedCompanies\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[WELDER_CERTIFICATE.COMPANY] = companiesSerialized;\n }\n\n if (!isEmpty(this.selectedWelders)) {\n let weldersSerialized = this.selectedWelders\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[WELDER_CERTIFICATE.WELDER] = weldersSerialized;\n }\n\n if (!isEmpty(this.selectedSpecialRequirements)) {\n let requirementsSerialized = this.selectedSpecialRequirements\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters[WELDER_CERTIFICATE.SPECIAL_REQUIREMENTS] = requirementsSerialized;\n }\n\n return filters;\n }\n\n _searchWelders(term: string, resolve: any, reject: any) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.weldnoteData.searchWelder(term).then(\n (data: any) => resolve(data),\n (err: any) => reject(err)\n );\n }\n\n scrollToSearchResults() {\n this.scroller.scrollVertical('#certificate-search-grid');\n }\n\n @action\n updateStandard(selectedStandard: WelderStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n }\n\n get currentIndustryCodeId() {\n if (this.currentIndustryCode) {\n return get(this.currentIndustryCode, 'id');\n }\n return null;\n }\n\n get isThicknessSearchDisabled() {\n return isEmpty(this.selectedUnitSystem);\n }\n\n get disabledThicknessSearchTooltipText() {\n if (this.isThicknessSearchDisabled) {\n return this.intl.t('generic.unit-system.search-without-system');\n } else {\n return '';\n }\n }\n\n @action\n searchBaseMaterialGroup(term: string) {\n return this.data.findBaseMaterialGroup(term, this.currentIndustryCodeId);\n }\n\n @action\n searchFillerMaterialGroup(term: string) {\n return this.data.searchFillerMaterialGroupByCode(term, this.currentIndustryCodeId);\n }\n\n @action\n searchWelders(term: string) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchWelders, term, resolve, reject, 500);\n });\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n search(pageNumber: number) {\n set(this, 'currentPage', pageNumber);\n this.searchCertificates(pageNumber);\n this.scrollToSearchResults();\n }\n\n @action\n createNew() {\n this.router.transitionTo('welder-certificate.new');\n }\n\n @action\n setSelectedWeldType(type: WeldType) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (type.get('weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'certificate';\n await downloadExport('/api/export/download', this.session, filters);\n });\n\n @action\n setCertificateNumber(number: string) {\n set(this, 'certificateNumber', number);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThickness(value: string) {\n set(this, 'thicknessDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n this.thickness = `${toNumber(value, this.decimalSeparator)}`;\n } else {\n this.thickness = value;\n }\n } else {\n this.thickness = value;\n }\n }\n\n @action\n setDiameter(value: string) {\n set(this, 'diameterDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n this.diameter = `${toNumber(value, this.decimalSeparator)}`;\n } else {\n this.diameter = value;\n }\n } else {\n this.diameter = value;\n }\n }\n\n @action\n setThicknessRoot(value: string) {\n set(this, 'thicknessRootDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n this.thicknessRoot = `${toNumber(value, this.decimalSeparator)}`;\n } else {\n this.thicknessRoot = value;\n }\n } else {\n this.thicknessRoot = value;\n }\n }\n\n @action\n setThicknessFill(value: string) {\n set(this, 'thicknessFillDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n this.thicknessFill = `${toNumber(value, this.decimalSeparator)}`;\n } else {\n this.thicknessFill = value;\n }\n } else {\n this.thicknessFill = value;\n }\n }\n\n @action\n setThicknessCap(value: string) {\n set(this, 'thicknessCapDisplay', value);\n if (this.selectedUnitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n this.thicknessCap = `${toNumber(value, this.decimalSeparator)}`;\n } else {\n this.thicknessCap = value;\n }\n } else {\n this.thicknessCap = value;\n }\n }\n\n @tracked\n showVideo = false;\n\n @action\n displayHelpVideo() {\n set(this, 'showVideo', true);\n let { analytics, help } = this;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(help.wpqVideo), {\n location: 'welder-certificate-list',\n });\n }\n\n @action\n setShowExpired(value: boolean) {\n set(this, 'selectedShowExpired', value);\n this.searchCertificates(1);\n this.scrollToSearchResults();\n }\n\n @action\n setShowArchived(value: boolean) {\n set(this, 'selectedShowArchived', value);\n this.searchCertificates(1);\n this.scrollToSearchResults();\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, get, computed } from '@ember/object';\nimport { task } from 'ember-concurrency';\n\n@classic\nexport default class ArchivedController extends Controller {\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n queryParams = ['page'];\n\n page = 1;\n\n currentPage = 1;\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @alias('model.count')\n certificateCount;\n\n loadData = task(async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n let results = await this.welderCertificateData.getWelderCertificatesArchived({\n page: pageNumber,\n });\n set(this, 'model', results);\n });\n\n @computed\n get gridColumns() {\n let { intl } = this;\n\n let certificateNumberLabel = intl.t('certificate-list.grid-columns.certificate-number');\n let stampLabel = intl.t('certificate-list.grid-columns.stamp');\n let weldTypeLabel = intl.t('certificate-list.grid-columns.weld-type');\n let weldingProcessesLabel = intl.t('certificate-list.grid-columns.welding-processes');\n let weldingPositionsLabel = intl.t('certificate-list.grid-columns.welding-positions');\n let diameterLabel = intl.t('certificate-list.grid-columns.diameter');\n let weldingDetailsLabel = intl.t('certificate-list.grid-columns.welding-details');\n let totalThicknessLabel = intl.t('certificate-list.grid-columns.total-thickness');\n let baseMaterialsLabel = intl.t('certificate-list.grid-columns.base-materials');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'certificateNumber',\n label: certificateNumberLabel,\n width: '250px',\n cellComponent: 'weldnote-grid/welder-certificate-link-archive',\n sortable: false,\n },\n {\n valuePath: 'welderStamp',\n label: stampLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/welder-in-certificate',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/weld-type',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n cellComponent: 'weldnote-grid/welding-processes',\n sortable: false,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'weldingPositions',\n label: weldingPositionsLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'weldingDetails',\n label: weldingDetailsLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'diameter',\n align: 'right',\n width: '150px',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/pqr-diameter',\n breakpoints: ['desktop'],\n sortable: false,\n },\n {\n valuePath: 'totalThickness',\n align: 'right',\n width: '200px',\n label: totalThicknessLabel,\n cellComponent: 'weldnote-grid/wpq-thickness',\n breakpoints: ['desktop'],\n sortable: false,\n },\n ];\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport { t } from 'ember-intl';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\n\nconst { WELDER_CERTIFICATE_REVALIDATION_DEADLINES } = Constants;\n\n@classic\nexport default class ThirtyDaysController extends Controller {\n queryParams = ['page'];\n\n page = 1;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @t('welder-certificate-expiration.externally-expire-30-days-title')\n certificateExpirationTitle;\n\n @computed('welderCertificateData.deadlineOptions.[]')\n get selectedDeadline() {\n let options = get(this, 'welderCertificateData.deadlineOptions');\n return options.findBy('key', WELDER_CERTIFICATE_REVALIDATION_DEADLINES.MONTH);\n }\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (searchOptions = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(searchOptions.company)) {\n options.company = searchOptions.company;\n }\n if (!isEmpty(searchOptions.deadlineTime)) {\n options.deadlineTime = searchOptions.deadlineTime;\n } else {\n options.deadlineTime = 30;\n }\n await timeout(400);\n let results =\n await this.welderCertificateData.getWelderCertificatesToExternallyValidateCustom(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.welderCertificateData.clearCacheExternal();\n }\n\n @action\n validateSingle(certificate, report1 = '', report2 = '') {\n if (!isEmpty(certificate)) {\n return certificate.validateExternally({\n report1,\n report2,\n });\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { t } from 'ember-intl';\nimport { task, timeout } from 'ember-concurrency';\nimport { set, action } from '@ember/object';\n\n@classic\nexport default class ExpiredController extends Controller {\n queryParams = ['page'];\n\n page = 1;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @t('welder-certificate-expiration.externally-expired-title')\n certificateExpirationTitle;\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (searchOptions = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(searchOptions.company)) {\n options.company = searchOptions.company;\n }\n await timeout(400);\n let results =\n await this.welderCertificateData.getWelderCertificatesToExternallyValidateExpired(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.welderCertificateData.clearCacheExternal();\n }\n\n @action\n validateSingle(certificate, report1 = '', report2 = '') {\n if (!isEmpty(certificate)) {\n return certificate.validateExternally({\n report1,\n report2,\n });\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { get, set, action, computed } from '@ember/object';\nimport { t } from 'ember-intl';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\n\nconst { WELDER_CERTIFICATE_REVALIDATION_DEADLINES } = Constants;\n\n@classic\nexport default class TodayController extends Controller {\n queryParams = ['page'];\n\n page = 1;\n\n @service\n intl;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n @alias('model.list')\n certificates;\n\n @t('welder-certificate-expiration.externally-expire-today-title')\n certificateExpirationTitle;\n\n selectedCompany = null;\n\n @computed('welderCertificateData.deadlineOptions.[]')\n get selectedDeadline() {\n let options = get(this, 'welderCertificateData.deadlineOptions');\n return options.findBy('key', WELDER_CERTIFICATE_REVALIDATION_DEADLINES.TODAY);\n }\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (searchOptions = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(searchOptions.company)) {\n options.company = searchOptions.company;\n }\n if (!isEmpty(searchOptions.deadlineTime)) {\n options.deadlineTime = searchOptions.deadlineTime;\n } else {\n options.deadlineTime = 1;\n }\n await timeout(400);\n let results =\n await this.welderCertificateData.getWelderCertificatesToExternallyValidateCustom(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.welderCertificateData.clearCacheExternal();\n }\n\n @action\n validateSingle(certificate, report1 = '', report2 = '') {\n if (!isEmpty(certificate)) {\n return certificate.validateExternally({\n report1,\n report2,\n });\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport { t } from 'ember-intl';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\n\nconst { WELDER_CERTIFICATE_REVALIDATION_DEADLINES, CERTIFICATE_INTERNAL_REVALIDATION_TYPE } =\n Constants;\n\n@classic\nexport default class ThirtyDaysController extends Controller {\n queryParams = ['page'];\n\n page = 1;\n\n @service\n intl;\n\n @service('welder-certificate-data')\n certificateData;\n\n @service\n store;\n\n @service\n userSession;\n\n @alias('model.list')\n certificates;\n\n @t('welder-certificate-expiration.internally-expire-30-days-title')\n certificateExpirationTitle;\n\n @computed('certificateData.deadlineOptions.[]')\n get selectedDeadline() {\n let options = get(this, 'certificateData.deadlineOptions');\n return options.findBy('key', WELDER_CERTIFICATE_REVALIDATION_DEADLINES.MONTH);\n }\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (searchOptions = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(searchOptions.company)) {\n options.company = searchOptions.company;\n }\n if (!isEmpty(searchOptions.deadlineTime)) {\n options.deadlineTime = searchOptions.deadlineTime;\n } else {\n options.deadlineTime = 30;\n }\n\n await timeout(100);\n\n let results =\n await this.certificateData.getWelderCertificatesToInternallyValidateCustom(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.certificateData.clearCacheAll();\n }\n\n @action\n validateSingle(\n certificate,\n type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR,\n report1 = '',\n report2 = '',\n weldingDate\n ) {\n if (!isEmpty(certificate)) {\n let validationParameters = {\n type,\n };\n if (!isEmpty(report1)) {\n validationParameters.report1 = report1;\n }\n if (!isEmpty(report2)) {\n validationParameters.report2 = report2;\n }\n if (!isEmpty(weldingDate)) {\n validationParameters.weldingDate = weldingDate;\n }\n return certificate.validateInternally(validationParameters);\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, action } from '@ember/object';\nimport { t } from 'ember-intl';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\n\nconst { CERTIFICATE_INTERNAL_REVALIDATION_TYPE } = Constants;\n\n@classic\nexport default class ExpiredController extends Controller {\n queryParams = ['page'];\n\n page = 1;\n\n @service\n intl;\n\n @service('welder-certificate-data')\n certificateData;\n\n @service\n store;\n\n @service\n userSession;\n\n @alias('model.list')\n certificates;\n\n @t('welder-certificate-expiration.internally-expired-title')\n certificateExpirationTitle;\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (searchOptions = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(searchOptions.company)) {\n options.company = searchOptions.company;\n }\n\n await timeout(100);\n\n let results =\n await this.certificateData.getWelderCertificatesToInternallyValidateExpired(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.certificateData.clearCacheAll();\n }\n\n @action\n validateSingle(\n certificate,\n type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR,\n report1 = '',\n report2 = '',\n weldingDate\n ) {\n if (!isEmpty(certificate)) {\n let validationParameters = {\n type,\n };\n if (!isEmpty(report1)) {\n validationParameters.report1 = report1;\n }\n if (!isEmpty(report2)) {\n validationParameters.report2 = report2;\n }\n if (!isEmpty(weldingDate)) {\n validationParameters.weldingDate = weldingDate;\n }\n return certificate.validateInternally(validationParameters);\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport { t } from 'ember-intl';\nimport Constants from 'weldnote/utils/constants';\nimport { task, timeout } from 'ember-concurrency';\n\nconst { WELDER_CERTIFICATE_REVALIDATION_DEADLINES, CERTIFICATE_INTERNAL_REVALIDATION_TYPE } =\n Constants;\n\n@classic\nexport default class TodayController extends Controller {\n queryParams = ['page'];\n\n page = 1;\n\n @service\n intl;\n\n @service\n store;\n\n @service\n userSession;\n\n @service('welder-certificate-data')\n certificateData;\n\n @alias('model.list')\n certificates;\n\n @t('welder-certificate-expiration.internally-expire-today-title')\n certificateExpirationTitle;\n\n @computed('certificateData.deadlineOptions.[]')\n get selectedDeadline() {\n let options = get(this, 'certificateData.deadlineOptions');\n return options.findBy('key', WELDER_CERTIFICATE_REVALIDATION_DEADLINES.TODAY);\n }\n\n reloadDataTask = task(\n {\n drop: true,\n },\n async (searchOptions = {}) => {\n let options = {};\n options.page = this.page;\n if (!isEmpty(searchOptions.company)) {\n options.company = searchOptions.company;\n }\n if (!isEmpty(searchOptions.deadlineTime)) {\n options.deadlineTime = searchOptions.deadlineTime;\n } else {\n options.deadlineTime = 1;\n }\n\n await timeout(100);\n\n let results =\n await this.certificateData.getWelderCertificatesToInternallyValidateCustom(options);\n set(this, 'model', results);\n }\n );\n\n @action\n postValidate() {\n this.certificateData.clearCacheAll();\n }\n\n @action\n validateSingle(\n certificate,\n type = CERTIFICATE_INTERNAL_REVALIDATION_TYPE.REGULAR,\n report1 = '',\n report2 = '',\n weldingDate\n ) {\n if (!isEmpty(certificate)) {\n let validationParameters = {\n type,\n };\n if (!isEmpty(report1)) {\n validationParameters.report1 = report1;\n }\n if (!isEmpty(report2)) {\n validationParameters.report2 = report2;\n }\n if (!isEmpty(weldingDate)) {\n validationParameters.weldingDate = weldingDate;\n }\n return certificate.validateInternally(validationParameters);\n }\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WelderStandardController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {}\n","import ListController from 'weldnote/controllers/_base/list';\n\nexport default class WelderStandardsController extends ListController {\n modelName = 'welder-standard';\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WelderController extends EditController {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, computed, action } from '@ember/object';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\nimport { tracked } from '@glimmer/tracking';\nimport { isEmpty } from '@ember/utils';\n\nconst {\n HTTP: { DEBOUNCE },\n ARCHIVAL_STATE,\n} = Constants;\n\nexport default class WeldersArchivedController extends Controller {\n @service\n intl;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n queryParams = ['page'];\n\n @service('weldnote-data')\n data;\n\n @tracked\n welders = [];\n\n @tracked\n welderCount = 0;\n\n @tracked\n pageNumber = 1;\n\n @tracked\n name = '';\n\n @computed\n get gridColumns() {\n let { intl, userSession } = this;\n let nameLabel = this.intl.t('model.welder.welderName.label');\n let stampLabel = this.intl.t('model.welder.welderStamp.label');\n let dateBirthLabel = this.intl.t('model.welder.dateBirth.label');\n let idLabel = this.intl.t('model.welder.welderId.label');\n let weldsPerformedLabel = intl.t('generic.welding.welds-performed');\n let weldsRepairedLabel = intl.t('generic.welding.welds-repaired');\n\n let columns = [\n {\n width: '40px',\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n sortable: false,\n },\n {\n valuePath: 'welderName',\n label: nameLabel,\n cellComponent: 'weldnote-grid/welder-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'welderStamp',\n label: stampLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'dateBirth',\n label: dateBirthLabel,\n cellComponent: 'weldnote-grid/person-age',\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n\n if (userSession.isPlanQuality) {\n columns.pushObject({\n valuePath: 'totalWelds',\n label: weldsPerformedLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n });\n columns.pushObject({\n valuePath: 'repairRate',\n label: weldsRepairedLabel,\n cellComponent: 'weldnote-grid/repair-rate',\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n });\n } else {\n columns.pushObject({\n valuePath: 'welderId',\n cellComponent: 'weldnote-grid/welder-id',\n label: idLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n });\n }\n\n return columns;\n }\n\n buildFilters() {\n let finalFilters = {};\n finalFilters.archived = ARCHIVAL_STATE.ARCHIVED;\n\n let { name } = this;\n if (!isEmpty(name)) {\n finalFilters.welderName = name;\n }\n finalFilters.personType = 'ALL';\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (pageNumber = 1) => {\n this.pageNumber = pageNumber;\n let options = {};\n options.page = pageNumber;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWelders(options, this.buildFilters());\n this.welders = data;\n this.welderCount = data.meta.records;\n }\n );\n\n resetPage() {\n this.pageNumber = 1;\n }\n\n @action\n search(pageNumber) {\n this.pageNumber = pageNumber;\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(newName) {\n this.name = newName;\n }\n\n @action\n clearFields() {\n this.name = '';\n this.search(1);\n }\n}\n","import { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { get, set, action } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list';\nimport { task, timeout } from 'ember-concurrency';\nimport { downloadExport } from 'weldnote/utils/ajax/file-download';\nimport { tracked } from '@glimmer/tracking';\nimport Constants from 'weldnote/utils/constants';\nimport type IntlService from 'ember-intl/services/intl';\nimport type UserSessionService from 'weldnote/services/user-session';\nimport type Store from '@ember-data/store';\nimport type Company from 'weldnote/models/company';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\ninterface GridColumn {\n width?: string;\n valuePath?: string;\n label?: string;\n cellComponent?: string;\n breakpoints: string[];\n sortable: boolean;\n}\n\nexport default class WeldersController extends ListController {\n @service\n declare store: Store;\n\n @service\n declare intl: IntlService;\n\n @service('weldnote-data')\n declare data: any;\n\n @service\n declare userSession: UserSessionService;\n\n @service\n declare session: any;\n\n @tracked sort: string | null = null;\n @tracked dir = 'asc';\n @tracked totalCount = 0;\n @tracked currentPage = 1;\n @tracked model: any = null;\n @tracked name: string | null = null;\n @tracked stamp: string | null = null;\n @tracked company: Company | null = null;\n\n modelName = 'welder';\n\n get pageSize(): number {\n return this.data.pageSize;\n }\n\n get gridColumns(): GridColumn[] {\n let { intl, userSession } = this;\n let nameLabel = this.getAttributeLabel('welderName');\n let stampLabel = this.getAttributeLabel('welderStamp');\n let dateBirthLabel = this.getAttributeLabel('dateBirth');\n let idLabel = this.getAttributeLabel('welderId');\n let weldsPerformedLabel = intl.t('generic.welding.welds-performed');\n let weldsRepairedLabel = intl.t('generic.welding.welds-repaired');\n\n let columns: GridColumn[] = [\n {\n width: '40px',\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n sortable: false,\n },\n {\n valuePath: 'welderName',\n label: nameLabel,\n cellComponent: 'weldnote-grid/welder-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'welderStamp',\n label: stampLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'dateBirth',\n label: dateBirthLabel,\n cellComponent: 'weldnote-grid/person-age',\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n\n if (userSession.isPlanQuality) {\n columns.push({\n valuePath: 'totalWelds',\n label: weldsPerformedLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n });\n columns.push({\n valuePath: 'repairRate',\n label: weldsRepairedLabel,\n cellComponent: 'weldnote-grid/repair-rate',\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n });\n } else {\n columns.push({\n valuePath: 'welderId',\n cellComponent: 'weldnote-grid/welder-id',\n label: idLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n });\n }\n\n return columns;\n }\n\n buildFilters(): Record {\n let filters: Record = {};\n if (!isEmpty(this.name)) {\n filters.welderName = this.name as string;\n }\n if (!isEmpty(this.stamp)) {\n filters.welderStamp = this.stamp as string;\n }\n let companyId = get(this, 'company.id') as string | undefined;\n if (!isEmpty(companyId)) {\n filters.company = companyId as string;\n }\n return filters;\n }\n\n loadData = task({ restartable: true }, async () => {\n let options: { page?: number } = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWelders(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n });\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'welder';\n await downloadExport('/api/export/download', this.session, filters);\n });\n\n resetPage() {\n this.currentPage = 1;\n }\n\n @action\n search(pageNumber: number) {\n this.currentPage = pageNumber;\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name: string) {\n this.name = name;\n this.resetPage();\n }\n\n @action\n setStamp(stamp: string) {\n this.stamp = stamp;\n this.resetPage();\n }\n\n @action\n setCompany(company: Company | null) {\n this.company = company;\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.stamp = null;\n this.company = null;\n this.loadData.perform();\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldingBookStatusController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'welding-book-statuses';\n}\n","import ListController from 'weldnote/controllers/_base/list';\n\nexport default class WeldingBookStatusesController extends ListController {\n modelName = 'welding-book-status';\n}\n","import classic from 'ember-classic-decorator';\nimport { set, action } from '@ember/object';\nimport EditController from 'weldnote/controllers/_base/edit';\nimport { service } from '@ember/service';\n\n@classic\nexport default class WeldingBookController extends EditController {\n @service\n router;\n\n queryParams = ['section', 'weld'];\n\n section = 'details';\n\n weld = null;\n\n @action\n revisionCreated(book) {\n this.router.transitionTo('welding-book', book);\n }\n\n @action\n goToRevision(book) {\n this.router.transitionTo('welding-book', book, { queryParams: { section: 'revision' } });\n }\n\n @action\n onEditWeld(weld) {\n set(this, 'weld', weld);\n }\n}\n","import { action } from '@ember/object';\nimport NewController from 'weldnote/controllers/_base/new';\nimport { service } from '@ember/service';\nimport RouterService from '@ember/routing/router-service';\nimport { tracked } from '@glimmer/tracking';\nimport DS from 'ember-data';\n\nexport default class _NewController extends NewController {\n\n @tracked\n model: DS.Model | null = null;\n\n @service\n declare router: RouterService;\n\n @action\n createdBook(id: string) {\n this.router.transitionTo('welding-book', id);\n }\n\n @action\n cancelWeldingBook() {\n this.router.transitionTo('welding-books');\n if (this.model) {\n this.model.deleteRecord();\n }\n }\n}\n","import Controller from '@ember/controller';\nimport { service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { set } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ARCHIVAL_STATE } = Constants;\n\nexport default class WeldingBooksArchivedController extends Controller {\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n page = 1;\n\n currentPage = 1;\n\n get weldingBooks() {\n return this.model.list;\n }\n\n get weldingBookCount() {\n return this.model.count;\n }\n\n get gridColumns() {\n let { intl } = this;\n let designationLabel = intl.t('model.welding-book.designation.label');\n let projectLabel = intl.t('model.welding-book.weldingProject.label');\n let customerLabel = intl.t('model.welding-book.customer.label');\n let supplierLabel = intl.t('model.welding-book.supplier.label');\n let standardLabel = intl.t('model.welding-book.standard.label');\n let componentLabel = intl.t('model.welding-book.component.label');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'designation',\n label: designationLabel,\n cellComponent: 'weldnote-grid/welding-book-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n width: '250px',\n },\n {\n valuePath: 'projectName',\n cellComponent: 'weldnote-grid/project-link-from-welding-book',\n label: projectLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'customer',\n cellComponent: 'weldnote-grid/project-client-link',\n label: customerLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'supplier',\n label: supplierLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'standard',\n label: standardLabel,\n breakpoints: ['desktop'],\n sortable: false,\n },\n {\n valuePath: 'componentName',\n label: componentLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n\n loadData = task(async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n let results = await this.data.listAllProjects(\n { page: pageNumber },\n {\n archivalState: ARCHIVAL_STATE.ARCHIVED,\n }\n );\n set(this, 'model', results);\n });\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { get, getProperties, set, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class WeldingBooksController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n analytics;\n\n @service\n help;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'welding-book';\n\n isLoading = false;\n\n @computed\n get gridColumns() {\n let designationLabel = this.getAttributeLabel('designation');\n let projectLabel = this.getAttributeLabel('weldingProject');\n let customerLabel = this.getAttributeLabel('customer');\n let supplierLabel = this.getAttributeLabel('supplier');\n let standardLabel = this.getAttributeLabel('standard');\n let componentLabel = this.getAttributeLabel('component');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet'],\n },\n {\n valuePath: 'designation',\n label: designationLabel,\n cellComponent: 'weldnote-grid/welding-book-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n width: '250px',\n },\n {\n valuePath: 'projectName',\n cellComponent: 'weldnote-grid/project-link-from-welding-book',\n label: projectLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'customer',\n cellComponent: 'weldnote-grid/project-client-link',\n label: customerLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'supplier',\n label: supplierLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'standard',\n label: standardLabel,\n breakpoints: ['desktop'],\n sortable: false,\n },\n {\n valuePath: 'componentName',\n label: componentLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'designation', 'weldingProject', 'customer', 'supplier');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n\n if (filters.supplier) {\n finalFilters.supplier = get(filters, 'supplier.id');\n }\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n let { dir = 'asc', sort } = getProperties(this, 'dir', 'sort');\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n }\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldingBooks(options, this.buildFilters());\n\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDesignation(designation) {\n set(this, 'designation', designation);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setProject(project) {\n set(this, 'weldingProject', project);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCustomer(customer) {\n set(this, 'customer', customer);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setSupplier(supplier) {\n set(this, 'supplier', supplier);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n designation: null,\n weldingProject: null,\n customer: null,\n supplier: null,\n });\n this.loadData.perform();\n }\n\n @action\n displayHelpVideo() {\n set(this, 'showVideo', true);\n let { analytics, help } = this;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(help.weldingBookVideo), {\n location: 'welding-book-list',\n });\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldingDetailController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'welding-details';\n}\n","import { service } from '@ember/service';\nimport ListController from 'weldnote/controllers/_base/list';\nimport UserSessionService from 'weldnote/services/user-session';\n\nexport default class WeldingDetailsController extends ListController {\n @service\n declare userSession: UserSessionService;\n\n modelName = 'welding-detail';\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldingMapController extends EditController {\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class CertificateMapController extends EditController {\n\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { not, sort, alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport WeldMapRules from 'weldnote/utils/welding-map-rules';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELDING_MAP } = WeldMapRules;\n\n@classic\nexport default class IndexController extends Controller {\n @service\n userSession;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service('unit-system')\n units;\n\n @service\n weldnoteData;\n\n sortPiecesBy = ['diameter', 'thickness'];\n\n sortPlatesBy = ['thickness'];\n\n @sort('model.pipingPieces', 'sortPiecesBy')\n sortedPieces;\n\n @sort('model.platePieces', 'sortPlatesBy')\n sortedPlates;\n\n @alias('weldnoteData.companyOptions')\n companyOptions;\n\n isShowingPipingPiecesTab = true;\n\n @tracked\n showPipingPiecesChooser = false;\n\n @tracked\n showPlatePiecesChooser = false;\n\n @not('isShowingPipingPiecesTab')\n isShowingPlatePiecesTab;\n\n get isMetric() {\n return this.units.isMetricSystem(this.model.unitSystem);\n }\n\n get isImperial() {\n return this.units.isImperialSystem(this.model.unitSystem);\n }\n\n @action\n setCompany(company) {\n this.set(`model.${WELDING_MAP.COMPANY}`, company);\n }\n\n @action\n removePiece(piece) {\n this.get('model.pipingPieces').then((piecesCollection) => {\n if (piecesCollection.findBy('id', piece.get('id'))) {\n piecesCollection.removeObject(piece);\n }\n });\n }\n\n @action\n removePlate(plate) {\n this.get('model.platePieces').then((piecesCollection) => {\n if (piecesCollection.findBy('id', plate.get('id'))) {\n piecesCollection.removeObject(plate);\n }\n });\n }\n\n @action\n choosePipingPieceTab() {\n this.toggleProperty('isShowingPipingPiecesTab');\n }\n\n @action\n choosePlatePieceTab() {\n this.toggleProperty('isShowingPipingPiecesTab');\n }\n}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\n\nexport default class PqrMapController extends EditController {\n\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WpsMapController extends EditController {\n\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, set, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class WeldingMapsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service('instanceTracker')\n tracker;\n\n @service\n userSession;\n\n @service\n analytics;\n\n @service\n help;\n\n @service\n router;\n\n modelName = 'welding-map';\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n getGridColumnLabel(label) {\n return this.intl.t(`welding-map-list.grid-columns.${label}`);\n }\n\n @computed\n get gridColumns() {\n let designationLabel = this.getGridColumnLabel('designation');\n let pqrStandardLabel = this.getGridColumnLabel('pqr-standard');\n let certificateStandardLabel = this.getGridColumnLabel('certificate-standard');\n let wpsStandardLabel = this.getGridColumnLabel('wps-standard');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n sortable: false,\n },\n {\n valuePath: 'designation',\n label: designationLabel,\n cellComponent: 'weldnote-grid/qmatrix-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'pqrStandard.standard',\n label: pqrStandardLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'certificateStandard.standard',\n label: certificateStandardLabel,\n breakpoints: ['laptop', 'desktop'],\n sortable: false,\n },\n {\n valuePath: 'wpsStandard.standard',\n label: wpsStandardLabel,\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllQMatrix(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n buildFilters() {\n let { designation, pqrStandard, certificateStandard, wpsStandard } = getProperties(\n this,\n 'designation',\n 'pqrStandard',\n 'certificateStandard',\n 'wpsStandard'\n );\n let filters = {};\n if (!isEmpty(designation)) {\n filters.designation = designation;\n }\n if (!isEmpty(pqrStandard)) {\n filters.pqrStandard = pqrStandard.get('id');\n }\n if (!isEmpty(certificateStandard)) {\n filters.certificateStandard = certificateStandard.get('id');\n }\n if (!isEmpty(wpsStandard)) {\n filters.wpsStandard = wpsStandard.get('id');\n }\n return filters;\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.loadData.perform();\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.setProperties({\n designation: null,\n pqrStandard: null,\n certificateStandard: null,\n wpsStandard: null,\n });\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDesignation(designation) {\n set(this, 'designation', designation);\n this.resetPage();\n }\n\n @action\n setPqrStandard(pqrStandard) {\n set(this, 'pqrStandard', pqrStandard);\n this.resetPage();\n }\n\n @action\n setCertificateStandard(certificateStandard) {\n set(this, 'certificateStandard', certificateStandard);\n this.resetPage();\n }\n\n @action\n setWpsStandard(wpsStandard) {\n set(this, 'wpsStandard', wpsStandard);\n this.resetPage();\n }\n\n @action\n createNew() {\n this.tracker.discardWeldingMap();\n this.router.transitionTo('welding-map.new');\n }\n\n @action\n displayHelpVideo(location) {\n set(this, 'showVideo', true);\n let { analytics, help } = this;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(help.qmatrixSearchVideo), {\n location,\n });\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldingPositionController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'welding-positions';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class WeldingPositionsController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'welding-position';\n\n isLoading = false;\n\n @computed\n get gridColumns() {\n let codeLabel = this.getAttributeLabel('code');\n let industryCodeLabel = this.getAttributeLabel('industryCode');\n\n return [\n {\n valuePath: 'code',\n label: codeLabel,\n cellComponent: 'weldnote-grid/welding-position-link',\n },\n {\n valuePath: 'industryCode.code',\n label: industryCodeLabel,\n sortable: false,\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'code');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n set(this, 'isLoading', true);\n let options = {};\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldingPositions(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setCode(code) {\n set(this, 'code', code);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n code: null,\n });\n this.loadData.perform();\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { get, action } from '@ember/object';\nimport { service } from '@ember/service';\n\n@classic\nexport default class WeldingProcedureSpecificationPwpsToCertificateController extends Controller {\n @alias('model')\n wps;\n\n @service\n router;\n\n @action\n cancel() {\n this.router.transitionTo('welding-procedure-specification', get(this, 'model.id'));\n }\n\n @action\n afterCreateCertificate(id) {\n this.router.transitionTo('welder-certificate', id, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { get, action } from '@ember/object';\nimport { service } from '@ember/service';\n\n@classic\nexport default class WeldingProcedureSpecificationPwpsToPqrController extends Controller {\n @alias('model')\n wps;\n\n @service\n router;\n\n @action\n cancel() {\n this.router.transitionTo('welding-procedure-specification', get(this, 'model.id'));\n }\n\n @action\n afterCreatePQR(id) {\n this.router.transitionTo('pqr', id, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n}\n","import { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { get, action } from '@ember/object';\nimport { service } from '@ember/service';\n\nexport default class WeldingProcedureSpecificationPwpsToPrequalifiedController extends Controller {\n @alias('model')\n wps;\n\n @service\n router;\n\n @action\n cancel() {\n this.router.transitionTo('welding-procedure-specification', get(this, 'model.id'));\n }\n\n @action\n afterCreateWps(id) {\n this.router.transitionTo('welding-procedure-specification', id, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { get, action } from '@ember/object';\nimport { service } from '@ember/service';\n\n@classic\nexport default class WeldingProcedureSpecificationPwpsToStandardWpsController extends Controller {\n @alias('model')\n wps;\n\n @service\n router;\n\n @action\n cancel() {\n this.router.transitionTo('welding-procedure-specification', this.wps.id);\n }\n\n @action\n afterCreateWps(id) {\n this.router.transitionTo('welding-procedure-specification', id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Controller from '@ember/controller';\n\n@classic\nexport default class WeldingProcedureSpecificationViewController extends Controller {\n queryParams = ['project'];\n\n @service\n userSession;\n\n @service\n router;\n\n project = null;\n\n @action\n editWps(wps) {\n this.router.transitionTo('welding-procedure-specification', wps, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n\n @action\n afterCreateWps(wps) {\n this.router.transitionTo('welding-procedure-specification-view', wps.id);\n }\n\n @action\n deleteInstance(type) {\n if (type === 'pwps') {\n this.router.transitionTo('welding-procedure-specifications-preliminary');\n } else if (type === 'wps') {\n this.router.transitionTo('welding-procedure-specifications');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Controller from '@ember/controller';\n\n@classic\nexport default class WeldingProcedureSpecificationViewController extends Controller {\n queryParams = ['project'];\n\n @service\n userSession;\n\n @service\n router;\n\n project = null;\n\n @action\n editWps(wps) {\n this.router.transitionTo('welding-procedure-specification', wps, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n\n @action\n afterCreateWps(wps) {\n this.router.transitionTo('welding-procedure-specification-view', wps.id);\n }\n\n @action\n deleteInstance(type) {\n if (type === 'pwps') {\n this.router.transitionTo('welding-procedure-specifications-preliminary');\n } else if (type === 'wps') {\n this.router.transitionTo('welding-procedure-specifications');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport EditController from 'weldnote/controllers/_base/edit';\nimport { service } from '@ember/service';\n\n@classic\nexport default class WeldingProcedureSpecificationController extends EditController {\n @service\n router;\n\n queryParams = ['section', 'project', 'autoScroll'];\n\n section = 'details';\n\n autoScroll = null;\n\n project = null;\n\n @action\n revisionCreated(wps) {\n this.router.transitionTo('welding-procedure-specification', wps);\n }\n\n @action\n newWPSCreated(wps) {\n this.router.transitionTo('welding-procedure-specification', wps);\n }\n\n @action\n afterCreateWps(wps) {\n this.router.transitionTo('welding-procedure-specification-view', wps.id);\n }\n\n @action\n deleteInstance(type) {\n if (type === 'wps') {\n this.router.transitionTo('welding-procedure-specifications');\n } else if (type === 'pwps') {\n this.router.transitionTo('welding-procedure-specifications-preliminary');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport Controller from '@ember/controller';\nimport { service } from '@ember/service';\n\n@classic\nexport default class NewFromPqrController extends Controller {\n queryParams = ['pqr'];\n\n pqr = null;\n\n @service\n router;\n\n @action\n saveWpsFromPQR(newWps) {\n this.router.transitionTo('welding-procedure-specification', newWps.id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport Controller from '@ember/controller';\nimport { service } from '@ember/service';\n\n@classic\nexport default class NewMultipleController extends Controller {\n @service\n router;\n\n @action\n saveWpsFromMultiplePQR(newWps) {\n this.router.transitionTo('welding-procedure-specification', newWps.id, {\n queryParams: {\n isEditing: 'true',\n },\n });\n }\n\n @action\n returnToList() {\n this.router.transitionTo('welding-procedure-specifications');\n }\n}\n","\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n @service\n router;\n queryParams = ['section'];\n\n section = 'details';\n\n @service('weldnote-data')\n data;\n\n @action\n instanceCreated(wps) {\n this.router.transitionTo('welding-procedure-specification', wps, {\n queryParams: {\n isEditing: true,\n },\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport Controller from '@ember/controller';\nimport { set, get, computed } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport { task } from 'ember-concurrency';\n\nconst { ARCHIVAL_STATE } = Constants;\n\n@classic\nexport default class WeldingProcedureSpecificationsArchivedController extends Controller {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n intl;\n\n @alias('model.list')\n wps;\n\n @alias('model.count')\n wpsCount;\n\n page = 1;\n\n currentPage = 1;\n\n loadData = task(async (pageNumber = 1) => {\n set(this, 'currentPage', pageNumber);\n let results = await this.data.listAllWeldingProcedureSpecifications(\n { page: pageNumber },\n {\n archivalState: ARCHIVAL_STATE.ARCHIVED,\n }\n );\n set(this, 'model', results);\n });\n\n @computed\n get gridColumns() {\n let { intl } = this;\n\n let wpsNumberLabel = intl.t('model.welding-procedure-specification.wpsNumber.label');\n let pqrNumberLabel = intl.t('model.pqr.model-plural');\n let weldTypeLabel = intl.t('wps-list.grid-columns.weld-type');\n let weldingProcessesLabel = intl.t('wps-list.grid-columns.welding-processes');\n let diameterLabel = intl.t('wps-list.grid-columns.diameter');\n let thicknessLabel = intl.t('wps-list.grid-columns.base-material-thickness');\n let baseMaterialsLabel = intl.t('wps-list.grid-columns.base-materials');\n let heatInputLabel = intl.t('wps-list.grid-columns.heat-input');\n let preHeatLabel = intl.t('wps-list.grid-columns.pre-heat');\n let pwhtLabel = intl.t('wps-list.grid-columns.post-weld-heat-treatment');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'wpsNumber',\n label: wpsNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/wps-link-archive',\n sortable: false,\n },\n {\n valuePath: 'pqrs',\n label: pqrNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/pqrs-link',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n width: '100px',\n label: weldTypeLabel,\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n width: '120px',\n sortable: false,\n cellComponent: 'weldnote-grid/welding-processes',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/base-material-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'thickness',\n label: thicknessLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/base-material-thickness-for-list',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/pqr-diameter',\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n label: heatInputLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/pqr-heat-input',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n label: preHeatLabel,\n align: 'right',\n sortable: false,\n cellComponent: 'weldnote-grid/pqr-preheat',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreatment',\n cellComponent: 'weldnote-grid/pqr-pwht',\n label: pwhtLabel,\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { empty, alias, equal, not } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { set, get, action, computed } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\nimport EVENTS from 'weldnote/utils/analytics-events';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport Constants from 'weldnote/utils/constants';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { task, timeout } from 'ember-concurrency';\nimport { toNumber, isFraction } from 'weldnote/utils/unit-system/units';\nimport { downloadExcel, downloadExport, downloadPdf } from 'weldnote/utils/ajax/file-download';\nimport { tracked } from '@glimmer/tracking';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\nconst WPS = WELDING_PROCEDURE_SPECIFICATION;\n\nconst {\n WELD_TYPES,\n HTTP: { DEBOUNCE },\n UNIT_SYSTEM,\n} = Constants;\n\n@classic\nexport default class WeldingProcedureSpecificationsPreliminaryController extends ListController {\n modelName = 'welding-procedure-specification';\n\n @service('weldnote-data')\n data;\n\n @service\n scroller;\n\n @service\n store;\n\n @service\n intl;\n\n @service\n analytics;\n\n @service('instanceTracker')\n tracker;\n\n @service\n unitSystem;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n windowService;\n\n @service\n help;\n\n @service\n loading;\n\n @service\n session;\n\n @service\n router;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionsAll;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('selectedStandard.code')\n industryCode;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('selectedStandard.code')\n currentIndustryCode;\n\n @alias('data.companyOptions')\n companyOptions;\n\n get currentUnitSystem() {\n if (!isEmpty(this.selectedUnitSystem)) {\n return this.selectedUnitSystem.key;\n }\n return '';\n }\n\n get temperatureUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getTemperatureUnit(this.currentUnitSystem);\n }\n return this.userSession.temperatureUnit;\n }\n\n get distanceUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getDistanceUnit(this.currentUnitSystem);\n }\n return this.userSession.distanceUnit;\n }\n\n get flowUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getFlowUnit(this.currentUnitSystem);\n }\n return this.userSession.flowUnit;\n }\n\n get heatDistanceUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getHeatDistanceUnit(this.currentUnitSystem);\n }\n return this.userSession.heatDistanceUnit;\n }\n\n @alias('userSession.decimalSeparator')\n decimalSeparator;\n\n selectedStandard = null;\n\n showSearchParameters = false;\n\n showAdvancedSearchParameters = false;\n\n dissmilarMaterials = false;\n\n baseMaterialThickness = null;\n\n selectedFillerMaterialRoot = null;\n\n selectedFillerMaterialFill = null;\n\n @tracked\n baseMaterial1 = null;\n\n @tracked\n baseMaterial2 = null;\n\n @tracked\n baseMaterial = null;\n\n @tracked\n searchBaseMaterialByGroup = true;\n\n @tracked\n searchBaseMaterial1ByGroup = true;\n\n @tracked\n searchBaseMaterial2ByGroup = true;\n\n @tracked\n selectedUnitSystem = null;\n\n @empty('selectedStandard')\n fieldsDisabled;\n\n @not('fieldsDisabled')\n isStandardSelected;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n @filterFromCollectionByKey('weldingPositionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingPositionOptions;\n\n @equal('selectedWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showDissimilarMaterials;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`wps-list.grid-columns.${label}`, options);\n }\n\n get isThicknessSearchDisabled() {\n return isEmpty(this.selectedUnitSystem);\n }\n\n get disabledThicknessSearchTooltipText() {\n if (this.isThicknessSearchDisabled) {\n return this.intl.t('generic.unit-system.search-without-system');;\n } else {\n return '';\n }\n }\n\n @computed\n get gridColumns() {\n let wpsNumberLabel = this.getAttributeLabel('wpsNumber');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let weldTypeLabel = this.getAttributeLabel('weldType');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let thicknessLabel = this.getGridColumnLabel('thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n let heatInputLabel = this.getGridColumnLabel('heat-input');\n let preHeatLabel = this.getGridColumnLabel('pre-heat');\n let pwhtLabel = this.getGridColumnLabel('post-weld-heat-treatment');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'wpsNumber',\n label: wpsNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/pwps-link',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n label: weldTypeLabel,\n width: '100px',\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n sortable: false,\n width: '120px',\n cellComponent: 'weldnote-grid/welding-processes',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/base-material-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'thickness',\n label: thicknessLabel,\n cellComponent: 'weldnote-grid/base-material-thickness-for-list',\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/pqr-diameter',\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n label: heatInputLabel,\n cellComponent: 'weldnote-grid/pqr-heat-input',\n sortable: false,\n align: 'right',\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n label: preHeatLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/pqr-preheat',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreatment',\n label: pwhtLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/pqr-pwht',\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildDecimalFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n let decimalValue = get(this, controllerProperty);\n decimalValue = convertDecimals(decimalValue, get(this, 'userSession.decimalSeparator'));\n filters[apiProperty] = decimalValue;\n }\n }\n\n buildPWHTFilter(filters) {\n let pwhtPresence = get(this, 'selectedPostWeldHeatTreamentPresence');\n if (!isEmpty(pwhtPresence)) {\n filters.pwhtPresence = pwhtPresence;\n } else {\n let pwhtTemp = get(this, 'selectedPostWeldHeatTreament');\n if (!isNaN(parseFloat(pwhtTemp))) {\n filters.postWeldHeatTreatment = pwhtTemp;\n }\n }\n }\n\n buildFilters() {\n let filters = {};\n\n this.buildSingleFilter('selectedStandard.id', WPS.STANDARD, filters);\n this.buildSingleFilter('selectedCompany.id', WPS.COMPANY, filters);\n this.buildSingleFilter('selectedConstructionStandard.id', WPS.CONSTRUCTION_STANDARD, filters);\n this.buildSingleFilter('selectedWeldType.id', WPS.WELDTYPE, filters);\n this.buildSingleFilter('selectedProcessRoot.id', WPS.WELDING_PROCESS_ROOT, filters);\n this.buildSingleFilter('selectedProcessFill.id', WPS.WELDING_PROCESS_FILL, filters);\n this.buildSingleFilter('selectedProcessCap.id', WPS.WELDING_PROCESS_CAP, filters);\n this.buildSingleFilter('selectedWeldType.id', WPS.WELD_TYPE, filters);\n this.buildSingleFilter('selectedWeldingPositionRoot.id', WPS.WELDING_POSITION_ROOT, filters);\n this.buildSingleFilter('selectedWeldingPositionFill.id', WPS.WELDING_POSITION_FILL, filters);\n this.buildSingleFilter('selectedProductType.key', WPS.PRODUCT_TYPE, filters);\n if (!isEmpty(this.baseMaterial)) {\n if (this.searchBaseMaterialByGroup) {\n this.buildSingleFilter('baseMaterial.materialGroup.id', WPS.BASE_MATERIAL1, filters);\n this.buildSingleFilter('baseMaterial.materialGroup.id', WPS.BASE_MATERIAL2, filters);\n } else {\n this.buildSingleFilter('baseMaterial.id', 'baseMaterial1Instance', filters);\n this.buildSingleFilter('baseMaterial.id', 'baseMaterial2Instance', filters);\n }\n } else {\n if (this.searchBaseMaterial1ByGroup) {\n this.buildSingleFilter('baseMaterial1.materialGroup.id', WPS.BASE_MATERIAL1, filters);\n } else {\n this.buildSingleFilter('baseMaterial1.id', 'baseMaterial1Instance', filters);\n }\n if (this.searchBaseMaterial2ByGroup) {\n this.buildSingleFilter('baseMaterial2.materialGroup.id', WPS.BASE_MATERIAL2, filters);\n } else {\n this.buildSingleFilter('baseMaterial2.id', 'baseMaterial2Instance', filters);\n }\n }\n this.buildSingleFilter('selectedFillerMaterialRoot.id', WPS.FILLER_MATERIAL_ROOT, filters);\n this.buildSingleFilter('selectedFillerMaterialFill.id', WPS.FILLER_MATERIAL_FILL, filters);\n this.buildSingleFilter('selectedFillerMaterialCap.id', WPS.FILLER_MATERIAL_CAP, filters);\n this.buildSingleFilter('branchAngle', 'branchAngle', filters);\n\n this.buildSingleFilter('selectedUnitSystem.key', WPS.UNIT_SYSTEM, filters);\n if (!isEmpty(this.selectedUnitSystem)) {\n this.buildDecimalFilter('diameter', 'diameter', filters);\n this.buildDecimalFilter('thickness', 'thickness', filters);\n this.buildDecimalFilter('heatInput', 'heatInput', filters);\n this.buildSingleFilter('preHeat', 'preHeat', filters);\n this.buildSingleFilter('postWeldHeatTreatment', 'postWeldHeatTreatment', filters);\n this.buildDecimalFilter('impactTemperature', WPS.IMPACT_TEST_TEMPERATURE, filters);\n this.buildSingleFilter('hardnessRequirements', 'hardnessRequirements', filters);\n this.buildSingleFilter('throatThickness', 'throatThickness', filters);\n this.buildDecimalFilter('baseMaterialThickness', 'baseMaterialThickness', filters);\n this.buildDecimalFilter('baseMaterial1Thickness', 'baseMaterial1Thickness', filters);\n this.buildDecimalFilter('baseMaterial2Thickness', 'baseMaterial2Thickness', filters);\n }\n this.buildSingleFilter('selectedOverlayType.key', WPS.OVERLAY_TYPE, filters);\n this.buildSingleFilter('certificateNumber', WPS.WPS_NUMBER, filters);\n this.buildPWHTFilter(filters);\n\n if (!isEmpty(get(this, 'selectedDetails'))) {\n let detailsSerialized = get(this, 'selectedDetails')\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters.weldingDetails = detailsSerialized;\n }\n\n if (!isEmpty(get(this, 'selectedSpecialRequirements'))) {\n let requirementsSerialized = get(this, 'selectedSpecialRequirements')\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters.specialRequirements = requirementsSerialized;\n }\n\n filters.wpsSearchType = 'pwps';\n\n return filters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n let options = {};\n\n if (!options.sort) {\n options.sort = {};\n }\n options.sort.wpsNumber = 'asc';\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldingProcedureSpecifications(\n options,\n this.buildFilters()\n );\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedCompany: null,\n selectedConstructionStandard: null,\n selectedDetails: [],\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedWeldingPositionRoot: null,\n selectedWeldingPositionFill: null,\n branchAngle: null,\n preHeat: null,\n heatInput: null,\n postWeldHeatTreatment: null,\n thicknessRoot: null,\n thicknessFill: null,\n impactTemperature: null,\n hardnessRequirements: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n selectedFillerMaterialCap: null,\n throatThickness: null,\n throatDisplay: null,\n selectedSpecialRequirements: [],\n selectedOverlayType: null,\n certificateNumber: null,\n selectedPostWeldHeatTreament: null,\n selectedPostWeldHeatTreamentPresence: null,\n selectedBaseMaterialGroup: null,\n baseMaterialThickness: null,\n baseMaterial1Thickness: null,\n baseMaterial2Thickness: null,\n });\n this.baseMaterial2 = null;\n this.baseMaterial1 = null;\n this.baseMaterial = null;\n this.searchBaseMaterial1ByGroup = true;\n this.searchBaseMaterial2ByGroup = true;\n this.searchBaseMaterialByGroup = true;\n this.resetPage();\n this.loadData.perform();\n }\n\n scrollToSearchResults() {\n get(this, 'scroller').scrollVertical('#wps-search-grid');\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchWPS(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n exportExcel = task(\n {\n drop: true,\n },\n async (wpsId) => {\n let { loading, intl, session } = this;\n\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-excel-download'\n )\n );\n\n try {\n await downloadExcel(\n `/api/welding-procedure-specifications/${wpsId}/downloadExcel`,\n session\n );\n } finally {\n loading.unblock();\n }\n }\n );\n\n exportPdf = task(\n {\n drop: true,\n },\n async (wpsId) => {\n let { loading, session, intl } = this;\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-pdf-download'\n )\n );\n\n try {\n await downloadPdf(`/api/welding-procedure-specifications/${wpsId}/downloadPDF`, session);\n } finally {\n loading.unblock();\n }\n }\n );\n\n @action\n updateStandard(selectedStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n if (isEmpty(get(this, 'weldTypeOptionsAll'))) {\n get(this, 'data')\n .getWeldTypes()\n .then((types) => {\n set(this, 'weldTypeOptionsAll', types);\n });\n }\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.searchWPS(pageNumber);\n this.scrollToSearchResults();\n this.analytics.trackEvent(EVENTS.SEARCH, {\n type: 'pwps',\n filters: this.buildFilters(),\n });\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n fillerMaterialRootRemoved() {\n set(this, 'selectedFillerMaterialRoot', null);\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialRoot', fillerMaterial);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialFill', fillerMaterial);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialCap', fillerMaterial);\n }\n\n @action\n fillerMaterialFillRemoved() {\n set(this, 'selectedFillerMaterialFill', null);\n }\n\n @action\n fillerMaterialCapRemoved() {\n set(this, 'selectedFillerMaterialCap', null);\n }\n\n @action\n createNew() {\n get(this, 'tracker').discardWPS();\n this.router.transitionTo('welding-procedure-specification.new');\n }\n\n @action\n setSelectedWeldType(type) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (get(type, 'weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n @action\n goToPQR(id) {\n this.router.transitionTo('pqr', id);\n }\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'wps';\n await downloadExport('/api/export/download', this.session, filters);\n });\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThickness(value) {\n set(this, 'thicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thickness', value);\n }\n } else {\n set(this, 'thickness', value);\n }\n }\n\n @action\n setDiameter(value) {\n set(this, 'diameterDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'diameter', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'diameter', value);\n }\n } else {\n set(this, 'diameter', value);\n }\n }\n\n @action\n setThroatThickness(value) {\n set(this, 'throatThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'throatThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'throatThickness', value);\n }\n } else {\n set(this, 'throatThickness', value);\n }\n }\n\n @action\n setDissimilarMaterials(value) {\n if (value) {\n set(this, 'baseMaterialThickness', null);\n this.baseMaterial = null;\n this.searchBaseMaterialByGroup = true;\n } else {\n this.baseMaterial1 = null;\n this.baseMaterial2 = null;\n this.searchBaseMaterial1ByGroup = true;\n this.searchBaseMaterial2ByGroup = true;\n set(this, 'baseMaterial1Thickness', null);\n set(this, 'baseMaterial2Thickness', null);\n }\n set(this, 'dissimilarMaterials', value);\n }\n\n @action\n displayHelpVideo() {\n set(this, 'showVideo', true);\n let { analytics, help } = this;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(help.pwpsVideo), {\n location: 'pwps-list',\n });\n }\n\n @action\n setBaseMaterial1(material) {\n this.baseMaterial1 = material;\n if (material && material.isNA) {\n this.searchBaseMaterial1ByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial1() {\n this.baseMaterial1 = null;\n this.searchBaseMaterial1ByGroup = true;\n }\n\n @action\n setBaseMaterial2(material) {\n this.baseMaterial2 = material;\n if (material && material.isNA) {\n this.searchBaseMaterial2ByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial2() {\n this.baseMaterial2 = null;\n this.searchBaseMaterial2ByGroup = true;\n }\n\n @action\n setBaseMaterial(material) {\n this.baseMaterial = material;\n if (material && material.isNA) {\n this.searchBaseMaterialByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial() {\n this.baseMaterial = null;\n this.searchBaseMaterialByGroup = false;\n }\n\n @action\n setSearchByMaterialGroup(value) {\n this.searchBaseMaterialByGroup = value;\n }\n\n @action\n setSearchByMaterial1Group(value) {\n this.searchBaseMaterial1ByGroup = value;\n }\n\n @action\n setSearchByMaterial2Group(value) {\n this.searchBaseMaterial2ByGroup = value;\n }\n}\n","import { action, computed, get, set } from '@ember/object';\nimport { alias, empty, equal, not } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\nimport classic from 'ember-classic-decorator';\nimport { task, timeout } from 'ember-concurrency';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport filterFromCollectionByKey from 'weldnote/macros/find-from-collection-by-key';\nimport { downloadExcel, downloadExport, downloadPdf } from 'weldnote/utils/ajax/file-download';\nimport Constants from 'weldnote/utils/constants';\nimport { convertDecimals } from 'weldnote/utils/decimal-utils';\nimport { isFraction, toNumber } from 'weldnote/utils/unit-system/units';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\nconst WPS = WELDING_PROCEDURE_SPECIFICATION;\n\nconst {\n WELD_TYPES,\n HTTP: { DEBOUNCE },\n UNIT_SYSTEM,\n} = Constants;\n\n@classic\nexport default class WeldingProcedureSpecificationsController extends ListController {\n modelName = 'welding-procedure-specification';\n\n @service\n weldnoteData;\n\n @alias('weldnoteData')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n scroller;\n\n @service\n store;\n\n @service\n intl;\n\n @service('instanceTracker')\n tracker;\n\n @service\n unitSystem;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n windowService;\n\n @service\n analytics;\n\n @service\n help;\n\n @service\n loading;\n\n @service\n session;\n\n @service\n router;\n\n @alias('data.productTypeOptions')\n productTypeOptions;\n\n @alias('data.standardOptions')\n standardOptions;\n\n @alias('data.weldingDetailOptions')\n weldingDetailOptions;\n\n @alias('data.weldingProcessOptions')\n weldingProcessesAll;\n\n @alias('data.weldingPositionOptions')\n weldingPositionsAll;\n\n @alias('data.weldTypeOptions')\n weldTypeOptionsAll;\n\n @alias('data.companyOptions')\n companyOptions;\n\n @alias('selectedStandard.code')\n industryCode;\n\n @alias('data.specialRequirementOptions')\n specialRequirementOptions;\n\n @alias('selectedStandard.code')\n currentIndustryCode;\n\n get currentUnitSystem() {\n if (!isEmpty(this.selectedUnitSystem)) {\n return this.selectedUnitSystem.key;\n }\n return '';\n }\n\n get temperatureUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getTemperatureUnit(this.currentUnitSystem);\n }\n return this.userSession.temperatureUnit;\n }\n\n get distanceUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getDistanceUnit(this.currentUnitSystem);\n }\n return this.userSession.distanceUnit;\n }\n\n get flowUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getFlowUnit(this.currentUnitSystem);\n }\n return this.userSession.flowUnit;\n }\n\n get heatDistanceUnit() {\n if (!isEmpty(this.currentUnitSystem)) {\n return this.unitSystem.getHeatDistanceUnit(this.currentUnitSystem);\n }\n return this.userSession.heatDistanceUnit;\n }\n\n @alias('userSession.decimalSeparator')\n decimalSeparator;\n\n selectedStandard = null;\n\n showSearchParameters = false;\n\n showAdvancedParameters = false;\n\n dissmilarMaterials = false;\n\n baseMaterialThickness = null;\n\n selectedFillerMaterialRoot = null;\n\n selectedFillerMaterialFill = null;\n\n @tracked\n baseMaterial1 = null;\n\n @tracked\n baseMaterial2 = null;\n\n @tracked\n baseMaterial = null;\n\n @tracked\n searchBaseMaterialByGroup = true;\n\n @tracked\n searchBaseMaterial1ByGroup = true;\n\n @tracked\n searchBaseMaterial2ByGroup = true;\n\n @tracked\n selectedUnitSystem = null;\n\n @tracked\n selectedProcessMecanizationRoot = null;\n\n @tracked\n selectedProcessMecanizationFill = null;\n\n @tracked\n selectedProcessMecanizationCap = null;\n\n @alias('data.processMecanizationOptions')\n processMecanizationOptions;\n\n @empty('selectedStandard')\n fieldsDisabled;\n\n @not('fieldsDisabled')\n isStandardSelected;\n\n @filterFromCollectionByKey('weldTypeOptionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldTypeOptions;\n\n @filterFromCollectionByKey('weldingProcessesAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingProcessOptions;\n\n @filterFromCollectionByKey('weldingPositionsAll', 'industryCode.id', 'currentIndustryCode.id')\n weldingPositionOptions;\n\n @equal('selectedWeldType.weldType', WELD_TYPES.OVERLAY_WELD)\n isOverlayWeld;\n\n @not('isOverlayWeld')\n showDissimilarMaterials;\n\n @alias('data.overlayTypeOptions')\n overlayTypeOptions;\n\n @tracked\n findProjectWPSs = false;\n\n getGridColumnLabel(label, options = {}) {\n return this.intl.t(`wps-list.grid-columns.${label}`, options);\n }\n\n @computed\n get gridColumns() {\n let wpsNumberLabel = this.intl.t('wps-list.grid-columns.wps-name');\n let pqrNumberLabel = this.intl.t('model.pqr.model-plural');\n let weldingProcessesLabel = this.getGridColumnLabel('welding-processes');\n let weldTypeLabel = this.getAttributeLabel('weldType');\n let diameterLabel = this.getGridColumnLabel('diameter');\n let thicknessLabel = this.getGridColumnLabel('base-material-thickness');\n let baseMaterialsLabel = this.getGridColumnLabel('base-materials');\n let heatInputLabel = this.getGridColumnLabel('heat-input');\n let preHeatLabel = this.getGridColumnLabel('pre-heat');\n let pwhtLabel = this.getGridColumnLabel('post-weld-heat-treatment');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile', 'tablet', 'laptop'],\n },\n {\n valuePath: 'wpsNumber',\n label: wpsNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/wps-link',\n sortable: false,\n },\n {\n valuePath: 'pqrs',\n label: pqrNumberLabel,\n width: '200px',\n cellComponent: 'weldnote-grid/pqrs-link',\n sortable: false,\n },\n {\n valuePath: 'weldType',\n width: '100px',\n label: weldTypeLabel,\n cellComponent: 'weldnote-grid/weld-type',\n sortable: false,\n },\n {\n valuePath: 'weldingProcesses',\n label: weldingProcessesLabel,\n width: '120px',\n sortable: false,\n cellComponent: 'weldnote-grid/welding-processes',\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'baseMaterials',\n label: baseMaterialsLabel,\n cellComponent: 'weldnote-grid/base-material-for-list',\n sortable: false,\n breakpoints: ['laptop', 'desktop'],\n },\n {\n valuePath: 'thickness',\n label: thicknessLabel,\n align: 'right',\n cellComponent: 'weldnote-grid/base-material-thickness-for-list',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'diameter',\n label: diameterLabel,\n cellComponent: 'weldnote-grid/pqr-diameter',\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'heatInput',\n label: heatInputLabel,\n cellComponent: 'weldnote-grid/pqr-heat-input',\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'preHeat',\n label: preHeatLabel,\n cellComponent: 'weldnote-grid/pqr-preheat',\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n {\n valuePath: 'postWeldHeatTreatment',\n label: pwhtLabel,\n cellComponent: 'weldnote-grid/pqr-pwht',\n align: 'right',\n sortable: false,\n breakpoints: ['desktop'],\n },\n ];\n }\n\n buildSingleFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n filters[apiProperty] = get(this, controllerProperty);\n }\n }\n\n buildDecimalFilter(controllerProperty, apiProperty, filters) {\n if (!isEmpty(get(this, controllerProperty))) {\n let decimalValue = get(this, controllerProperty);\n decimalValue = convertDecimals(decimalValue, get(this, 'userSession.decimalSeparator'));\n filters[apiProperty] = decimalValue;\n }\n }\n\n buildPWHTFilter(filters) {\n let pwhtPresence = this.selectedPostWeldHeatTreamentPresence;\n if (!isEmpty(pwhtPresence)) {\n filters.pwhtPresence = pwhtPresence;\n } else {\n let pwhtTemp = this.selectedPostWeldHeatTreament;\n if (!isNaN(parseFloat(pwhtTemp))) {\n filters.postWeldHeatTreatment = pwhtTemp;\n }\n }\n }\n\n get isThicknessSearchDisabled() {\n return isEmpty(this.selectedUnitSystem);\n }\n\n get disabledThicknessSearchTooltipText() {\n if (this.isThicknessSearchDisabled) {\n return this.intl.t('generic.unit-system.search-without-system').toString();\n } else {\n return '';\n }\n }\n\n buildFilters() {\n let filters = {};\n\n this.buildSingleFilter('selectedStandard.id', WPS.STANDARD, filters);\n this.buildSingleFilter('selectedConstructionStandard.id', WPS.CONSTRUCTION_STANDARD, filters);\n this.buildSingleFilter('selectedWeldType.id', WPS.WELD_TYPE, filters);\n this.buildSingleFilter('selectedProcessRoot.id', WPS.WELDING_PROCESS_ROOT, filters);\n this.buildSingleFilter('selectedProcessFill.id', WPS.WELDING_PROCESS_FILL, filters);\n this.buildSingleFilter('selectedProcessCap.id', WPS.WELDING_PROCESS_CAP, filters);\n this.buildSingleFilter(\n 'selectedProcessMecanizationRoot.id',\n WPS.PROCESS_MECANIZATION_ROOT,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessMecanizationFill.id',\n WPS.PROCESS_MECANIZATION_FILL,\n filters\n );\n this.buildSingleFilter(\n 'selectedProcessMecanizationCap.id',\n WPS.PROCESS_MECANIZATION_CAP,\n filters\n );\n this.buildSingleFilter('selectedPQR.id', WPS.MAIN_PQR, filters);\n this.buildSingleFilter('selectedCompany.id', WPS.COMPANY, filters);\n this.buildSingleFilter('selectedWeldingPositionRoot.id', WPS.WELDING_POSITIONS_ROOT, filters);\n this.buildSingleFilter('selectedWeldingPositionFill.id', WPS.WELDING_POSITIONS_FILL, filters);\n this.buildSingleFilter('selectedWeldingPositionCap.id', WPS.WELDING_POSITIONS_CAP, filters);\n this.buildSingleFilter('selectedProductType.key', WPS.PRODUCT_TYPE, filters);\n if (!isEmpty(this.baseMaterial)) {\n if (this.searchBaseMaterialByGroup) {\n this.buildSingleFilter('baseMaterial.materialGroup.id', WPS.BASE_MATERIAL1, filters);\n this.buildSingleFilter('baseMaterial.materialGroup.id', WPS.BASE_MATERIAL2, filters);\n } else {\n this.buildSingleFilter('baseMaterial.id', 'baseMaterial1Instance', filters);\n this.buildSingleFilter('baseMaterial.id', 'baseMaterial2Instance', filters);\n }\n } else {\n if (this.searchBaseMaterial1ByGroup) {\n this.buildSingleFilter('baseMaterial1.materialGroup.id', WPS.BASE_MATERIAL1, filters);\n } else {\n this.buildSingleFilter('baseMaterial1.id', 'baseMaterial1Instance', filters);\n }\n if (this.searchBaseMaterial2ByGroup) {\n this.buildSingleFilter('baseMaterial2.materialGroup.id', WPS.BASE_MATERIAL2, filters);\n } else {\n this.buildSingleFilter('baseMaterial2.id', 'baseMaterial2Instance', filters);\n }\n }\n this.buildSingleFilter('selectedFillerMaterialRoot.id', WPS.FILLER_MATERIAL_ROOT, filters);\n this.buildSingleFilter('selectedFillerMaterialFill.id', WPS.FILLER_MATERIAL_FILL, filters);\n this.buildSingleFilter('selectedFillerMaterialCap.id', WPS.FILLER_MATERIAL_CAP, filters);\n\n this.buildSingleFilter('selectedUnitSystem.key', WPS.UNIT_SYSTEM, filters);\n if (!isEmpty(this.selectedUnitSystem)) {\n // Since each document has its own unit system, we can only send these thicknesses\n // when the unit system is selected (due to welding standards calculating thickness\n // for imperial/metric differently, we can't simply convert)\n this.buildDecimalFilter('diameter', 'diameter', filters);\n this.buildDecimalFilter('thickness', 'thickness', filters);\n this.buildSingleFilter('preHeat', 'preHeat', filters);\n this.buildSingleFilter('postWeldHeatTreatment', 'postWeldHeatTreatment', filters);\n this.buildDecimalFilter('baseMaterialThickness', 'baseMaterialThickness', filters);\n this.buildDecimalFilter('baseMaterial1Thickness', 'baseMaterial1Thickness', filters);\n this.buildDecimalFilter('baseMaterial2Thickness', 'baseMaterial2Thickness', filters);\n this.buildDecimalFilter('impactTemperature', WPS.IMPACT_TEST_TEMPERATURE, filters);\n this.buildSingleFilter('throatThickness', 'throatThickness', filters);\n this.buildDecimalFilter('heatInput', 'heatInput', filters);\n }\n\n this.buildSingleFilter('branchAngle', 'branchAngle', filters);\n this.buildSingleFilter('hardnessRequirements', 'hardnessRequirements', filters);\n this.buildSingleFilter('selectedOverlayType.key', WPS.OVERLAY_TYPE, filters);\n this.buildSingleFilter('certificateNumber', WPS.WPS_NUMBER, filters);\n this.buildPWHTFilter(filters);\n\n if (!isEmpty(this.selectedDetails)) {\n let detailsSerialized = this.selectedDetails\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters.weldingDetails = detailsSerialized;\n }\n\n if (!isEmpty(this.selectedSpecialRequirements)) {\n let requirementsSerialized = this.selectedSpecialRequirements\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n filters.specialRequirements = requirementsSerialized;\n }\n\n if (this.findProjectWPSs) {\n filters.wpsSearchType = 'primaryPlusProject';\n }\n\n return filters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (otherOptions = {}) => {\n let options = {};\n\n if (otherOptions.userSearch) {\n options.userSearch = true;\n }\n\n if (!options.sort) {\n options.sort = {};\n }\n options.sort.wpsNumber = 'asc';\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldingProcedureSpecifications(\n options,\n this.buildFilters()\n );\n set(this, 'model', data.list);\n set(this, 'totalCount', data.count);\n }\n );\n\n searchPQR = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(DEBOUNCE);\n return await this.weldnoteData.searchPQR(term);\n }\n );\n\n clearProperties() {\n this.setProperties({\n selectedStandard: null,\n selectedConstructionStandard: null,\n selectedDetails: [],\n selectedWeldType: null,\n selectedProcessRoot: null,\n selectedProcessFill: null,\n selectedProcessCap: null,\n selectedProcessMecanizationRoot: null,\n selectedProcessMecanizationFill: null,\n selectedProcessMecanizationCap: null,\n diameter: null,\n diameterDisplay: null,\n thickness: null,\n thicknessDisplay: null,\n selectedProductType: null,\n selectedWeldingPositionRoot: null,\n selectedWeldingPositionFill: null,\n selectedWeldingPositionCap: null,\n branchAngle: null,\n preHeat: null,\n heatInput: null,\n postWeldHeatTreatment: null,\n thicknessRoot: null,\n thicknessFill: null,\n impactTemperature: null,\n hardnessRequirements: null,\n selectedFillerMaterialRoot: null,\n selectedFillerMaterialFill: null,\n selectedFillerMaterialCap: null,\n throatThickness: null,\n throatDisplay: null,\n selectedSpecialRequirements: [],\n selectedOverlayType: null,\n certificateNumber: null,\n selectedPQR: null,\n selectedCompany: null,\n selectedPostWeldHeatTreament: null,\n selectedPostWeldHeatTreamentPresence: null,\n selectedBaseMaterialGroup: null,\n baseMaterialThickness: null,\n baseMaterialThicknessDisplay: null,\n baseMaterial1Thickness: null,\n baseMaterial1ThicknessDisplay: null,\n baseMaterial2Thickness: null,\n baseMaterial2ThicknessDisplay: null,\n selectedUnitSystem: null,\n });\n this.baseMaterial2 = null;\n this.baseMaterial1 = null;\n this.baseMaterial = null;\n this.searchBaseMaterial1ByGroup = true;\n this.searchBaseMaterial2ByGroup = true;\n this.searchBaseMaterialByGroup = true;\n this.findProjectWPSs = false;\n this.resetPage();\n this.loadData.perform();\n }\n\n scrollToSearchResults() {\n this.scroller.scrollVertical('#wps-search-grid');\n }\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n searchWPS(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform({\n userSearch: true,\n });\n }\n\n exportExcel = task(\n {\n drop: true,\n },\n async (wpsId) => {\n let { loading, intl, session } = this;\n\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-excel-download'\n )\n );\n\n try {\n await downloadExcel(\n `/api/welding-procedure-specifications/${wpsId}/downloadExcel`,\n session\n );\n } finally {\n loading.unblock();\n }\n }\n );\n\n exportPdf = task(\n {\n drop: true,\n },\n async (wpsId) => {\n let { loading, session, intl } = this;\n loading.block(\n intl.t(\n 'components.model-welding-procedure-specification/edit.messages.block-wait-pdf-download'\n )\n );\n\n try {\n await downloadPdf(`/api/welding-procedure-specifications/${wpsId}/downloadPDF`, session);\n } finally {\n loading.unblock();\n }\n }\n );\n\n @action\n updateStandard(selectedStandard) {\n this.clearProperties();\n set(this, 'selectedStandard', selectedStandard);\n if (isEmpty(this.weldTypeOptionsAll)) {\n this.weldnoteData.getWeldTypes().then((types) => {\n set(this, 'weldTypeOptionsAll', types);\n });\n }\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.searchWPS(pageNumber);\n this.scrollToSearchResults();\n }\n\n @action\n clearSearch() {\n this.clearProperties();\n }\n\n @action\n fillerMaterialRootRemoved() {\n set(this, 'selectedFillerMaterialRoot', null);\n }\n\n @action\n fillerMaterialRootChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialRoot', fillerMaterial);\n }\n\n @action\n fillerMaterialFillChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialFill', fillerMaterial);\n }\n\n @action\n fillerMaterialCapChosen(fillerMaterial) {\n set(this, 'selectedFillerMaterialCap', fillerMaterial);\n }\n\n @action\n fillerMaterialFillRemoved() {\n set(this, 'selectedFillerMaterialFill', null);\n }\n\n @action\n fillerMaterialCapRemoved() {\n set(this, 'selectedFillerMaterialCap', null);\n }\n\n @action\n setSelectedWeldType(type) {\n if (isEmpty(type)) {\n set(this, 'selectedOverlayType', null);\n set(this, 'selectedWeldType', null);\n } else {\n set(this, 'selectedWeldType', type);\n if (type.get('weldType') !== WELD_TYPES.OVERLAY_WELD) {\n set(this, 'selectedOverlayType', null);\n }\n }\n }\n\n @action\n goToPQR(id) {\n this.router.transitionTo('pqr', id);\n }\n\n download = task({ drop: true }, async () => {\n let filters = this.buildFilters();\n filters.exportType = 'wps';\n await downloadExport('/api/export/download', this.session, filters);\n });\n\n @action\n setCertificateNumber(number) {\n set(this, 'certificateNumber', number);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setThickness(value) {\n set(this, 'thicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'thickness', value);\n }\n } else {\n set(this, 'thickness', value);\n }\n }\n\n @action\n setDiameter(value) {\n set(this, 'diameterDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'diameter', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'diameter', value);\n }\n } else {\n set(this, 'diameter', value);\n }\n }\n\n @action\n setThroatThickness(value) {\n set(this, 'throatThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'throatThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'throatThickness', value);\n }\n } else {\n set(this, 'throatThickness', value);\n }\n }\n\n @action\n setBaseMaterial1Thickness(value) {\n set(this, 'baseMaterial1ThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterial1Thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterial1Thickness', value);\n }\n } else {\n set(this, 'baseMaterial1Thickness', value);\n }\n }\n\n @action\n setBaseMaterial2Thickness(value) {\n set(this, 'baseMaterial2ThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterial2Thickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterial2Thickness', value);\n }\n } else {\n set(this, 'baseMaterial2Thickness', value);\n }\n }\n\n @action\n setBaseMaterialThickness(value) {\n set(this, 'baseMaterialThicknessDisplay', value);\n if (this.userSession.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (isFraction(value)) {\n set(this, 'baseMaterialThickness', toNumber(value, this.decimalSeparator));\n } else {\n set(this, 'baseMaterialThickness', value);\n }\n } else {\n set(this, 'baseMaterialThickness', value);\n }\n }\n\n @action\n setDissimilarMaterials(value) {\n if (value) {\n set(this, 'baseMaterialThickness', null);\n this.baseMaterial = null;\n this.searchBaseMaterialByGroup = true;\n } else {\n this.baseMaterial1 = null;\n this.baseMaterial2 = null;\n this.searchBaseMaterial1ByGroup = true;\n this.searchBaseMaterial2ByGroup = true;\n set(this, 'baseMaterial1Thickness', null);\n set(this, 'baseMaterial2Thickness', null);\n }\n set(this, 'dissimilarMaterials', value);\n }\n\n @action\n displayHelpVideo(videoId) {\n set(this, 'showVideo', true);\n set(this, 'videoId', videoId);\n let { analytics, help } = this;\n analytics.trackEvent(help.convertVideoIdToAnalyticsEvent(videoId), {\n location: 'wps-list',\n });\n }\n\n @action\n setBaseMaterial1(material) {\n this.baseMaterial1 = material;\n if (material && material.isNA) {\n this.searchBaseMaterial1ByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial1() {\n this.baseMaterial1 = null;\n this.searchBaseMaterial1ByGroup = true;\n }\n\n @action\n setBaseMaterial2(material) {\n this.baseMaterial2 = material;\n if (material && material.isNA) {\n this.searchBaseMaterial2ByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial2() {\n this.baseMaterial2 = null;\n this.searchBaseMaterial2ByGroup = true;\n }\n\n @action\n setBaseMaterial(material) {\n this.baseMaterial = material;\n if (material && material.isNA) {\n this.searchBaseMaterialByGroup = false;\n }\n }\n\n @action\n removeBaseMaterial() {\n this.baseMaterial = null;\n this.searchBaseMaterialByGroup = false;\n }\n\n @action\n setSearchByMaterialGroup(value) {\n this.searchBaseMaterialByGroup = value;\n }\n\n @action\n setSearchByMaterial1Group(value) {\n this.searchBaseMaterial1ByGroup = value;\n }\n\n @action\n setSearchByMaterial2Group(value) {\n this.searchBaseMaterial2ByGroup = value;\n }\n\n @action\n setFindProjectWPSs(value) {\n this.findProjectWPSs = value;\n }\n}\n","import EditController from 'weldnote/controllers/_base/edit';\n\nexport default class WeldingProcessController extends EditController {}\n","import NewController from 'weldnote/controllers/_base/new';\n\nexport default class _NewController extends NewController {\n listRoute = 'welding-processes';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { alias } from '@ember/object/computed';\nimport { isEmpty } from '@ember/utils';\nimport { getProperties, action, computed, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\n@classic\nexport default class WeldingProcessesController extends ListController {\n @service\n store;\n\n @service\n intl;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n totalCount = 0;\n\n currenPage = 1;\n\n @alias('data.pageSize')\n pageSize;\n\n modelName = 'welding-process';\n\n @computed\n get gridColumns() {\n let shortDesignationLabel = this.getAttributeLabel('shortDesignation');\n let industryCodeLabel = this.getAttributeLabel('industryCode');\n let nameLabel = this.getAttributeLabel('processName');\n\n return [\n {\n width: '40px',\n sortable: false,\n cellComponent: 'weldnote-grid/row-toggle',\n breakpoints: ['mobile'],\n },\n {\n valuePath: 'shortDesignation',\n label: shortDesignationLabel,\n cellComponent: 'weldnote-grid/welding-process-link',\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'processName',\n label: nameLabel,\n breakpoints: ['tablet', 'laptop', 'desktop'],\n },\n {\n valuePath: 'industryCode.code',\n label: industryCodeLabel,\n breakpoints: ['mobile', 'tablet', 'laptop', 'desktop'],\n },\n ];\n }\n\n buildFilters() {\n let filters = getProperties(this, 'name', 'designation');\n let finalFilters = {};\n Object.keys(filters).forEach((item) => {\n if (!isEmpty(item)) {\n finalFilters[item] = filters[item];\n }\n });\n return finalFilters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async () => {\n set(this, 'isLoading', true);\n let options = {};\n\n let { dir = 'asc', sort } = getProperties(this, 'dir', 'sort');\n if (!isEmpty(sort)) {\n options.sort = {};\n options.sort[sort] = dir;\n }\n\n options.page = this.currentPage;\n\n await timeout(DEBOUNCE);\n let data = await this.data.listAllWeldingProcesses(options, this.buildFilters());\n set(this, 'model', data);\n set(this, 'totalCount', data.meta.records);\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform();\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setName(name) {\n set(this, 'name', name);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setDesignation(designation) {\n set(this, 'designation', designation);\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n name: null,\n designation: null,\n });\n this.loadData.perform();\n }\n}\n","import { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { action, set } from '@ember/object';\nimport ListController from 'weldnote/controllers/_base/list-js';\nimport { task, timeout } from 'ember-concurrency';\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n HTTP: { DEBOUNCE },\n} = Constants;\n\nconst ENTITY_TYPES = [\n { key: 'WeldType', label: 'Weld Type' },\n { key: 'WeldingProcess', label: 'Welding Process' },\n { key: 'WeldingPosition', label: 'Welding Position' },\n { key: 'ArcTransferMode', label: 'Arc Transfer Mode' },\n { key: 'TypeCurrentPolarity', label: 'Type Current Polarity' },\n { key: 'ProcessMecanization', label: 'Process Mecanization' },\n { key: 'WeldingDetail', label: 'Welding Detail' },\n { key: 'Gas', label: 'Gas' },\n];\n\nconst IS_VERIFIED_OPTIONS = [\n { key: null, label: 'Any' },\n { key: true, label: 'Yes' },\n { key: false, label: 'No' },\n];\n\nexport default class WpqLearnedMappingsController extends ListController {\n modelName = 'wpq-learned-mapping';\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n currentPage = 1;\n\n // Filter properties\n entityType = null;\n parsedValue = null;\n canonicalCode = null;\n isVerified = null;\n industryCode = null;\n\n get entityTypeOptions() {\n return ENTITY_TYPES;\n }\n\n get isVerifiedOptions() {\n return IS_VERIFIED_OPTIONS;\n }\n\n get totalCount() {\n return this.model.meta?.records ?? this.model.length;\n }\n\n buildFilters() {\n let filters = {};\n\n if (!isEmpty(this.entityType)) {\n filters.entityType = this.entityType.key;\n }\n if (!isEmpty(this.parsedValue)) {\n filters.parsedValue = this.parsedValue;\n }\n if (!isEmpty(this.canonicalCode)) {\n filters.canonicalCode = this.canonicalCode;\n }\n if (!isEmpty(this.isVerified) && this.isVerified.key !== null) {\n filters.isVerified = this.isVerified.key;\n }\n if (!isEmpty(this.industryCode)) {\n filters.industryCode = this.industryCode.id;\n }\n\n return filters;\n }\n\n loadData = task(\n {\n restartable: true,\n },\n async (page = 1) => {\n let options = {\n page,\n };\n\n await timeout(DEBOUNCE);\n let result = await this.data.listAllWpqLearnedMappings(options, this.buildFilters());\n this.model = result;\n }\n );\n\n resetPage() {\n set(this, 'currentPage', 1);\n }\n\n @action\n search(pageNumber) {\n set(this, 'currentPage', pageNumber);\n this.loadData.perform(pageNumber);\n }\n\n @action\n searchButton() {\n this.resetPage();\n this.loadData.perform();\n }\n\n @action\n setEntityType(entityType) {\n set(this, 'entityType', entityType);\n this.resetPage();\n }\n\n @action\n setParsedValue(parsedValue) {\n set(this, 'parsedValue', parsedValue);\n this.resetPage();\n }\n\n @action\n setCanonicalCode(canonicalCode) {\n set(this, 'canonicalCode', canonicalCode);\n this.resetPage();\n }\n\n @action\n setIsVerified(isVerified) {\n set(this, 'isVerified', isVerified);\n this.resetPage();\n }\n\n @action\n setIndustryCode(industryCode) {\n set(this, 'industryCode', industryCode);\n this.resetPage();\n }\n\n @action\n clearFields() {\n this.resetPage();\n this.setProperties({\n entityType: null,\n parsedValue: null,\n canonicalCode: null,\n isVerified: null,\n industryCode: null,\n });\n this.loadData.perform();\n }\n\n get gridColumns() {\n let entityTypeLabel = this.getAttributeLabel('entityType');\n let parsedValueLabel = this.getAttributeLabel('parsedValue');\n let canonicalCodeLabel = this.getAttributeLabel('canonicalCode');\n let industryCodeLabel = this.getAttributeLabel('industryCode');\n let usageCountLabel = this.getAttributeLabel('usageCount');\n let isVerifiedLabel = this.getAttributeLabel('isVerified');\n\n return [\n {\n valuePath: 'entityType',\n label: entityTypeLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/wpq-learned-mapping-link',\n },\n {\n valuePath: 'parsedValue',\n label: parsedValueLabel,\n sortable: false,\n },\n {\n valuePath: 'canonicalCode',\n label: canonicalCodeLabel,\n sortable: false,\n },\n {\n valuePath: 'industryCode.code',\n label: industryCodeLabel,\n sortable: false,\n },\n {\n valuePath: 'usageCount',\n label: usageCountLabel,\n sortable: false,\n },\n {\n valuePath: 'isVerified',\n label: isVerifiedLabel,\n sortable: false,\n cellComponent: 'weldnote-grid/verified-icon',\n },\n ];\n }\n}\n","import ModelValidator from 'ember-model-validator/decorators/model-validator';\n\nexport default ModelValidator;\n","import ObjectValidator from 'ember-model-validator/decorators/object-validator';\n\nexport default ObjectValidator;\n","export default {\n presenceMessage: \"can't be blank !!!\",\n absenceMessage: 'must be blank',\n inclusionMessage: 'is not included in the list',\n exclusionMessage: 'is reserved',\n\n // Numericality\n numericalityMessage: 'is not a number',\n numericalityOnlyIntegerMessage: 'must be an integer',\n numericalityGreaterThanMessage: 'must be greater than {count}',\n numericalityGreaterThanOrEqualToMessage: 'must be greater than or equal to {count}',\n numericalityEqualToMessage: 'must be equal to {count}',\n numericalityLessThanMessage: 'must be less than {count}',\n numericalityLessThanOrEqualToMessage: 'must be less than or equal to {count}',\n numericalityOddMessage: 'must be odd',\n numericalityEvenMessage: 'must be even',\n\n mailMessage: 'is not a valid email',\n formatMessage: 'is invalid',\n colorMessage: 'must be a valid CSS hex color code',\n subdomainMessage: 'must be a valid subdomain',\n acceptanceMessage: 'must be accepted',\n zipCodeMessage: 'is not a valid zip code',\n URLMessage: 'must be a valid url',\n wrongLengthMessage: 'is the wrong length (should be {count} characters)',\n tooShortMessage: 'is too short (minimum is {count} characters)',\n tooLongMessage: 'is too long (maximum is {count} characters)',\n mustContainNumberMessage: 'must include a number',\n mustContainSpecialMessage: 'must include one of these special characters: {characters}',\n mustContainLowerMessage: 'must include a lower case character',\n mustContainCapitalMessage: 'must include an upper case character',\n customValidationMessage: 'is invalid',\n matchMessage: 'must match {match}',\n\n dateMessage: 'is not a valid date',\n dateBeforeMessage: 'must be before {date}',\n dateAfterMessage: 'must be after {date}',\n};\n","export default {\n time: {\n hhmmss: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n },\n\n date: {\n hhmmss: {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n },\n },\n\n number: {\n EUR: {\n style: 'currency',\n currency: 'EUR',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n\n USD: {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n },\n },\n};\n","import { helper } from '@ember/component/helper';\n\nexport function absolute(params) {\n return Math.abs(params[0]);\n}\n\nexport default helper(absolute);\n","import { helper } from '@ember/component/helper';\nimport { formatInstant } from 'weldnote/utils/admin-tools';\n\n/** `{{admin-instant iso}}`: a backend instant as `YYYY-MM-DD HH:mm UTC` (see `formatInstant`). */\nexport default helper(function adminInstant([iso]: [string | null | undefined]): string {\n return formatInstant(iso);\n});\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\nexport function arrayJoin(params, hash) {\n if (isEmpty(params[0])) {\n return '';\n } else {\n let { separator } = hash;\n if (isEmpty(separator)) {\n separator = ',';\n }\n return hash.ignoreEmpty ? params[0].filter(Boolean).join(separator) : params[0].join(separator);\n }\n}\n\nexport default helper(arrayJoin);\n","import { helper } from '@ember/component/helper';\nimport config from 'weldnote/config/environment';\n\nexport function assetUrl(params: [string]) {\n let [path] = params;\n let baseUrl = config.assetBaseUrl;\n\n // Ensure baseUrl ends with /\n if (!baseUrl.endsWith('/')) {\n baseUrl = `${baseUrl}/`;\n }\n\n // Remove leading slash from path to avoid double slashes\n if (path.startsWith('/')) {\n path = path.slice(1);\n }\n\n return `${baseUrl}${path}`;\n}\n\nexport default helper(assetUrl);\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { fromMilimeterSecondToMeterMinute } from 'weldnote/utils/unit-system/speed';\nimport Constants from 'weldnote/utils/constants';\n\nconst { UNIT_SYSTEM } = Constants;\n\nexport default class ConvertToMeterMinuteHelper extends Helper {\n @service userSession;\n\n compute(params) {\n const [value, providedUnitSystem] = params;\n\n // Use provided unit system or fall back to user session\n let unitSystem = providedUnitSystem;\n\n if (isEmpty(unitSystem)) {\n unitSystem = this.userSession.unitSystem;\n\n // Assert that we have a unit system (will only trigger in development)\n assert(\n 'A unit system must be provided to convert-to-meter-minute helper. ' +\n 'Pass it as the second parameter: {{convert-to-meter-minute value unitSystem}}',\n !isEmpty(unitSystem)\n );\n }\n\n if (isEmpty(value)) {\n return '';\n }\n\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return value;\n } else if (unitSystem === UNIT_SYSTEM.METRIC) {\n return fromMilimeterSecondToMeterMinute(value);\n }\n\n return value;\n }\n}\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { fromMilimeterSecondToMilimeterMinute } from 'weldnote/utils/unit-system/speed';\nimport Constants from 'weldnote/utils/constants';\n\nconst { UNIT_SYSTEM } = Constants;\n\nexport default class ConvertToMilimeterMinuteHelper extends Helper {\n @service userSession;\n\n compute(params) {\n const [value, providedUnitSystem] = params;\n\n // Use provided unit system or fall back to user session\n let unitSystem = providedUnitSystem;\n\n if (isEmpty(unitSystem)) {\n unitSystem = this.userSession.unitSystem;\n\n // Assert that we have a unit system (will only trigger in development)\n assert(\n 'A unit system must be provided to convert-to-milimeter-minute helper. ' +\n 'Pass it as the second parameter: {{convert-to-milimeter-minute value unitSystem}}',\n !isEmpty(unitSystem)\n );\n }\n\n if (isEmpty(value)) {\n return '';\n }\n\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return value;\n } else if (unitSystem === UNIT_SYSTEM.METRIC) {\n return fromMilimeterSecondToMilimeterMinute(value);\n }\n\n return value;\n }\n}\n","import { helper } from '@ember/component/helper';\n\nexport function csvModels(params, namedArgs) {\n let { models } = namedArgs;\n if (models && models.get('length') > 0) {\n let attributeName = 'visualLabel';\n if (namedArgs.attribute) {\n let { attribute } = namedArgs;\n attributeName = attribute;\n }\n let content = models\n .filter((item) => {\n return item.get(attributeName) !== undefined;\n })\n .map((item) => {\n return item.get(attributeName);\n });\n return content.join(', ');\n } else if (models) {\n let modelLabel = '';\n if (namedArgs.attribute) {\n modelLabel = models.get(namedArgs.attribute);\n if (modelLabel) {\n return modelLabel;\n }\n }\n modelLabel = models.get('visualLabel');\n if (modelLabel) {\n return modelLabel;\n }\n }\n return '';\n}\n\nexport default helper(csvModels);\n","import Helper from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\n\nexport function dateBirthAge(params, hash) {\n if (!isEmpty(hash.value)) {\n let momentDate = moment(hash.value);\n let age = moment().diff(momentDate, 'years');\n let dateString = momentDate.format(hash.format);\n let { intl } = hash;\n return `${dateString} - ${age} ${intl.t('helpers.years')}`;\n }\n return '';\n}\n\nexport default Helper.helper(dateBirthAge);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\n\nexport function daysUntil(params, hash) {\n let [startPoint, target] = params;\n let { format } = hash;\n if (!isEmpty(startPoint) && !isEmpty(target)) {\n if (isEmpty(format)) {\n format = 'DD/MM/YYYY';\n }\n let momentStart = moment(startPoint, format);\n let momentEnd = moment(target, format);\n return momentEnd.diff(momentStart, 'days');\n }\n return '';\n}\n\nexport default helper(daysUntil);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nfunction formatMaterial(material, options = {}) {\n let specification = get(material, 'specification.visualLabel');\n let grade = get(material, 'grade.visualLabel');\n let group = get(material, 'materialGroup.visualLabel');\n if (!isEmpty(specification) && !isEmpty(grade) && !isEmpty(group)) {\n return `${specification} - ${grade} - ${group}`;\n } else if (!isEmpty(specification) && !isEmpty(group)) {\n return `${specification} - ${group}`;\n }\n}\n\nfunction isSameMaterial(material1, material2) {\n return get(material1, 'id') === get(material2, 'id');\n}\n\nexport default helper(function formatBaseMaterial(params, hash) {\n let { material, material1, material2 } = hash;\n if (!isEmpty(material)) {\n return formatMaterial(material);\n }\n if (!isEmpty(material1) && !isEmpty(material2)) {\n if (isSameMaterial(material1, material2)) {\n return formatMaterial(material1);\n } else {\n return `${formatMaterial(material1)} - ${formatMaterial(material2)}`;\n }\n }\n if (!isEmpty(material1)) {\n return formatMaterial(material1);\n }\n if (!isEmpty(material2)) {\n return formatMaterial(material2);\n }\n return '';\n});\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport {\n isSameMaterial,\n formatMaterialWithThickness,\n} from 'weldnote/utils/base-material-formatter';\n\nexport default class FormatBaseMaterialsWithThickness extends Helper {\n @service\n userSession;\n\n compute(params, hash) {\n let { material1, material2, thickness1, thickness2 } = hash;\n let distanceUnits = this.userSession.distanceUnit;\n\n if (!isEmpty(material1) && !isEmpty(material2)) {\n if (isSameMaterial(material1, material2)) {\n return `${formatMaterialWithThickness(material1, thickness1, distanceUnits)}`;\n } else {\n let material1label = `${formatMaterialWithThickness(material1, thickness1, distanceUnits)}`;\n let material2label = `${formatMaterialWithThickness(material2, thickness2, distanceUnits)}`;\n return `${material1label}
${material2label}`;\n }\n }\n\n if (!isEmpty(material1)) {\n return `${formatMaterialWithThickness(material1, thickness1, distanceUnits)}`;\n }\n if (!isEmpty(material2)) {\n return `${formatMaterialWithThickness(material2, thickness2, distanceUnits)}`;\n }\n return '';\n }\n}\n","import Helper from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\nimport Const from 'weldnote/utils/constants';\n\nconst { DEFAULT_DATE_FORMAT } = Const;\n\nexport function formatDate(params, hash) {\n let { format, date, time } = hash;\n if (!format) {\n format = DEFAULT_DATE_FORMAT;\n }\n if (!isEmpty(date)) {\n if (time) {\n date = moment(parseFloat(date));\n }\n return moment(date).format(format);\n }\n return '';\n}\n\nexport default Helper.helper(formatDate);\n","import Helper from '@ember/component/helper';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport { isKnownFractionString, toFraction } from 'weldnote/utils/unit-system/units';\nimport Constants from 'weldnote/utils/constants';\nimport { htmlSafe } from '@ember/template';\n\nconst { UNIT_SYSTEM } = Constants;\n\nexport default Helper.extend({\n userSession: service(),\n\n compute(params, hash) {\n let { convertToFraction } = hash;\n let separator = get(this, 'userSession.decimalSeparator');\n let unitSystem = get(this, 'userSession.unitSystem');\n let [value] = params;\n if (isEmpty(value)) {\n return '';\n }\n\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (convertToFraction === true) {\n let fraction = toFraction(value);\n if (isKnownFractionString(fraction)) {\n return htmlSafe(toFraction(value, 'display'));\n }\n }\n }\n\n if (separator !== '.') {\n return `${value}`.replace('.', ',');\n }\n return value;\n },\n});\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/helpers/format-list';\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/helpers/format-message';\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/helpers/format-number';\n","import { helper } from '@ember/component/helper';\n\nexport function formatPercentage(params, { value, total }) {\n let totalNum = parseInt(total);\n let valueNum = parseInt(value);\n if (!isNaN(totalNum) && !isNaN(valueNum)) {\n if (totalNum > 0) {\n return `${((valueNum / totalNum).toFixed(2) * 100).toFixed(1)}%`;\n } else {\n return '0%';\n }\n }\n return '';\n}\n\nexport default helper(formatPercentage);\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\nexport function formatRange([min, max]) {\n const hasMin = !isEmpty(min);\n const hasMax = !isEmpty(max);\n if (hasMin && hasMax) {\n return `${min} - ${max}`;\n } else if (hasMin) {\n return `${min}`;\n } else if (hasMax) {\n return `${max}`;\n }\n return '';\n}\n\nexport default helper(formatRange);\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/helpers/format-relative';\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/helpers/format-time';\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nexport default helper(function formatWeldType([weldType], hash) {\n if (isEmpty(weldType)) {\n return '';\n }\n let { small } = hash;\n let industryCode = get(weldType, 'industryCode.code');\n if (industryCode === 'ASME' || industryCode === 'AWS') {\n let weldTypeCode = get(weldType, 'weldType');\n if (weldTypeCode === 'BW') {\n if (small) {\n return 'GW';\n } else {\n return 'GW - Groove Weld';\n }\n } else if (weldTypeCode === 'PJP BW') {\n if (small) {\n return 'PJP GW';\n } else {\n return 'PJP GW - Partial Joint Penetration Groove Weld';\n }\n } else if (weldTypeCode === 'CJP BW') {\n if (small) {\n return 'CJP GW';\n } else {\n return 'CJP GW - Complete Joint Penetration Groove Weld';\n }\n } else if (weldTypeCode === 'PP BW') {\n if (small) {\n return 'PP GW';\n } else {\n return 'PP GW - Partial Penetration Groove Weld';\n }\n }\n }\n if (small) {\n return `${get(weldType, 'weldType')}`;\n } else {\n return `${get(weldType, 'weldType')} - ${get(weldType, 'designation')}`;\n }\n});\n","import Helper from '@ember/component/helper';\n\nexport function greaterThan(params /* , hash*/) {\n if (params[0] !== undefined && params[1] !== undefined) {\n if (params[0] > params[1]) {\n return true;\n }\n }\n return false;\n}\n\nexport default Helper.helper(greaterThan);\n","import Helper from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\nexport function hasFeature(params /* , hash*/) {\n let [collection, name] = params;\n\n if (isEmpty(collection) || isEmpty(name)) {\n return false;\n }\n\n return collection.includes(name);\n}\n\nexport default Helper.helper(hasFeature);\n","import Helper from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\n// Helper to check that a certain value is not empty\nexport function hasValue(params /* , hash*/) {\n return !isEmpty(params[0]);\n}\n\nexport default Helper.helper(hasValue);\n","import Helper, { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\nexport default Helper.extend({\n intl: service(),\n\n compute(params, hash) {\n let { min, max, unit = '' } = hash;\n let { intl } = this;\n if (isEmpty(max) && !isEmpty(min)) {\n return intl\n .t('helpers.help-text-value-range.more-than', {\n value: min,\n unit,\n })\n .toString();\n } else if (!isEmpty(max) && !isEmpty(min)) {\n if (max === min) {\n return intl\n .t('helpers.help-text-value-range.exactly-equal', {\n value: min,\n unit,\n })\n .toString();\n } else {\n return intl\n .t('helpers.help-text-value-range.between', {\n min,\n max,\n unit,\n })\n .toString();\n }\n } else if (isEmpty(min) && !isEmpty(max)) {\n return intl\n .t('helpers.help-text-value-range.less-than', {\n value: max,\n unit,\n })\n .toString();\n } else {\n return '';\n }\n },\n});\n","import Helper from '@ember/component/helper';\n\nexport function idEqual(params /* , hash*/) {\n let id1 = `${params[0]}`;\n let id2 = `${params[1]}`;\n return id1 === id2;\n}\n\nexport default Helper.helper(idEqual);\n","import Helper from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nexport function inCollection(vars, params) {\n let { collection, model } = params;\n\n if (isEmpty(collection) || collection.get('length') === 0) {\n return false;\n }\n if (isEmpty(model)) {\n return false;\n }\n\n if (collection.findBy('id', get(model, 'id'))) {\n return true;\n }\n return false;\n}\n\nexport default Helper.helper(inCollection);\n","import Helper from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\n\nexport function isEmptyAttribute(params /* , hash*/) {\n return isEmpty(params[0]);\n}\n\nexport default Helper.helper(isEmptyAttribute);\n","import { helper } from '@ember/component/helper';\n\nexport function isObject([value]) {\n return value !== null && typeof value === 'object';\n}\n\nexport default helper(isObject);\n","import pageTitle from 'ember-page-title/helpers/page-title';\n\nexport default pageTitle;\n","import Helper from '@ember/component/helper';\n\nexport function percentageFormatter(params, hash) {\n let { total, count, rate, decimalPlaces = 1 } = hash;\n\n // Authoritative percentage straight from the backend (e.g. repairRate, whose\n // numerator and denominator are disjoint sets — it cannot be recomputed from\n // count/total and may legitimately exceed 100%). Never clamped.\n if (rate != null) {\n let rateNum = parseFloat(rate);\n if (!isNaN(rateNum)) {\n return `${rateNum.toFixed(decimalPlaces)}%`;\n }\n }\n\n let totalInt = parseInt(total, 10);\n let countInt = parseInt(count, 10);\n\n if (!isNaN(totalInt) && !isNaN(countInt)) {\n if (totalInt > 0) {\n return `${((countInt / totalInt) * 100).toFixed(decimalPlaces)}%`;\n }\n }\n return `${parseInt(0).toFixed(decimalPlaces)}%`;\n}\n\nexport default Helper.helper(percentageFormatter);\n","import { htmlSafe } from '@ember/template';\nimport { isEmpty } from '@ember/utils';\nimport Helper from '@ember/component/helper';\nimport Ember from 'ember';\n\nconst { Handlebars } = Ember;\n\nexport function progressWidth(params /* , hash*/) {\n let [value, minWidth] = params;\n value = Handlebars.Utils.escapeExpression(value);\n if (isEmpty(minWidth)) {\n minWidth = 10;\n }\n return htmlSafe(`width: ${value}%;min-width: ${minWidth}px`);\n}\n\nexport default Helper.helper(progressWidth);\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/helpers/t';\n","import { helper } from '@ember/component/helper';\n\nexport default helper(function tableColumnClasses([column]) {\n const classes = [];\n\n if (column.breakpoints) {\n classes.push('d-none');\n classes.push(...column.breakpoints.map((bp) => `d-${bp}-table-cell`));\n }\n\n // Add alignment class\n if (column.align) {\n classes.push(`align-${column.align}`);\n } else {\n classes.push('align-left');\n }\n\n // Add any additional custom classes from column\n if (column.cellClassNames) {\n if (Array.isArray(column.cellClassNames)) {\n classes.push(...column.cellClassNames);\n } else {\n classes.push(column.cellClassNames);\n }\n }\n\n return classes.join(' ');\n});\n","import { helper } from '@ember/component/helper';\n\nexport default helper(function tableHeaderClasses([column]) {\n const classes = [];\n\n if (column.breakpoints) {\n classes.push('d-none');\n classes.push(...column.breakpoints.map((bp) => `d-${bp}-table-cell`));\n }\n\n // Add alignment class\n if (column.align) {\n classes.push(`align-${column.align}`);\n } else {\n classes.push('align-left');\n }\n\n // Add any additional custom classes from column\n if (column.headerClasses) {\n if (Array.isArray(column.headerClasses)) {\n classes.push(...column.headerClasses);\n } else {\n classes.push(column.headerClasses);\n }\n }\n\n return classes.join(' ');\n});\n","import Helper from '@ember/component/helper';\nimport PQRRules from 'weldnote/utils/pqr-rules';\n\nexport function transfermodeDisabled(params /* , hash*/) {\n let [standard, weldingProcess] = params;\n return PQRRules.isArcTransferModeDisabled(standard, weldingProcess);\n}\n\nexport default Helper.helper(transfermodeDisabled);\n","import Helper from '@ember/component/helper';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\n\nexport default class WpsFormatFillerMaterial extends Helper {\n @service\n intl;\n\n compute(params, hash) {\n let { pass, wps } = hash;\n let { layer } = pass;\n let fillerMaterial = null;\n if (layer === 'ROOT') {\n fillerMaterial = get(wps, 'fillerMaterialRoot');\n } else if (layer === 'FILL') {\n fillerMaterial = get(wps, 'fillerMaterialFill');\n } else if (layer === 'CAP') {\n fillerMaterial = get(wps, 'fillerMaterialCap');\n }\n if (fillerMaterial) {\n let { specification, classification } = fillerMaterial;\n if (!isEmpty(specification) && !isEmpty(classification)) {\n return `${specification.specification} - ${classification.classification}`;\n } else if (!isEmpty(specification)) {\n return specification.specification;\n } else if (!isEmpty(classification)) {\n return classification.classification;\n }\n } else {\n return this.intl.t(\n 'components.model-welding-procedure-specification/add-new-linked-parameter.messages.no-filler-material'\n );\n }\n }\n}\n","import { helper } from '@ember/component/helper';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nfunction hasLayer(attribute, model) {\n let layer = get(model, `metadata.${attribute}.layer`);\n return !isEmpty(layer);\n}\n\nfunction hasUnit(attribute, model) {\n let layer = get(model, `metadata.${attribute}.unit`);\n return !isEmpty(layer);\n}\n\nfunction getLayer(attribute, model) {\n return get(model, `metadata.${attribute}.layer`);\n}\n\nfunction getUnit(attribute, model) {\n return get(model, `metadata.${attribute}.unit`);\n}\n\nexport function wpsInvalidAttributeName(params, hash) {\n let { attribute, intl, wps, userSession } = hash;\n if (isEmpty(attribute)) {\n return '';\n }\n let process = getLayer(attribute, wps);\n let unitName = getUnit(attribute, wps);\n let unit = '';\n if (unitName === 'distance') {\n unit = wps.distanceUnit;\n } else if (unitName === 'temperature') {\n unit = wps.temperatureUnit;\n } else if (unitName === 'flow') {\n unit = wps.flowUnit;\n }\n return intl\n .t(`model.welding-procedure-specification.${attribute}.label`, {\n layer: intl.t(`generic.welding.processes.${process}`),\n unit,\n })\n .toString();\n}\n\nexport default helper(wpsInvalidAttributeName);\n","import ContainerDebugAdapter from 'ember-resolver/resolvers/classic/container-debug-adapter';\n\nexport default {\n name: 'container-debug-adapter',\n\n initialize() {\n let app = arguments[1] || arguments[0];\n\n app.register('container-debug-adapter:main', ContainerDebugAdapter);\n }\n};\n","\n export default {\n name: 'ember-cli-mirage',\n initialize() {}\n };\n ","import 'ember-data';\n\nimport setupContainer from 'ember-data/setup-container';\n\n/*\n This code initializes EmberData in an Ember application.\n*/\nexport default {\n name: 'ember-data',\n initialize: setupContainer,\n};\n","import ResponsiveInitializer from 'ember-responsive/initializers/responsive';\nexport default ResponsiveInitializer;\n","import { registerWarnHandler } from '@ember/debug';\n\nconst IGNORED_WARNINGS = ['ds.store.push-link-for-sync-relationship'];\n\nexport default {\n name: 'warnings-to-ignore',\n initialize() {\n registerWarnHandler(function (message, options, next) {\n if (!ignoreWarning(options)) {\n next(...arguments);\n }\n });\n },\n};\n\nfunction ignoreWarning(options) {\n return options && options.id && IGNORED_WARNINGS.includes(options.id);\n}\n","import initialize from 'ember-modal-dialog/instance-initializers/add-modals-container';\n\nexport default {\n name: 'add-modals-container',\n initialize,\n};\n","/* exists only for things that historically used \"after\" or \"before\" */\nexport default {\n name: 'ember-data',\n initialize() {},\n};\n","import { get, computed } from '@ember/object';\nimport { A as emberArray } from '@ember/array';\nimport { isEmpty } from '@ember/utils';\n\n/**\n * @public\n * Returns all elements in the collection that match the given value\n */\nexport default function filterFromCollectionByKey(collectionKey, propName, valueKey) {\n return computed(`${collectionKey}.[]`, valueKey, {\n get() {\n return emberArray(get(this, collectionKey)).filterBy(propName, get(this, valueKey));\n },\n });\n}\n\n/**\n * @public\n * Returns all elements in the collection that are in a given range, if not, use the values that match a given key\n */\nexport function filterFromCollectionByKeyInRange(collectionKey, propName, valueKey, rangeKey) {\n return computed(`${collectionKey}.[]`, valueKey, rangeKey, {\n get() {\n let values = get(this, rangeKey);\n if (!isEmpty(values)) {\n return emberArray(get(this, collectionKey)).filter((item) => {\n let collectionId = get(item, 'id');\n return values.includes(parseInt(collectionId));\n });\n } else {\n return emberArray(get(this, collectionKey)).filterBy(propName, get(this, valueKey));\n }\n },\n });\n}\n","import { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Const from 'weldnote/utils/constants';\n\nconst { JOINT_TYPE_OPTIONS, WELD_TYPES } = Const;\n\nexport default function jointTypeFilteredOptions(allOptions, weldTypeProperty) {\n return computed(allOptions, weldTypeProperty, {\n get() {\n let selectedWeldType = get(this, weldTypeProperty);\n if (isEmpty(selectedWeldType)) {\n return get(this, allOptions);\n } else {\n let allItems = get(this, allOptions);\n let isFilletWeld = get(selectedWeldType, 'weldType') === WELD_TYPES.FILLET_WELD;\n // If we have a filler weld, don't show butt joints\n if (isFilletWeld) {\n return allItems.reject((item) => {\n return get(item, 'key') === JOINT_TYPE_OPTIONS.BUTT_JOINT;\n });\n }\n // Socket Joint Only appears in Fillet Welds\n if (!isFilletWeld) {\n return allItems.reject((item) => {\n return get(item, 'key') === JOINT_TYPE_OPTIONS.SOCKET_JOINT;\n });\n }\n return allItems;\n }\n },\n });\n}\n","import { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Const from 'weldnote/utils/constants';\nimport {\n isSMAW,\n isGMAW,\n isFCAW,\n isFCAWS,\n isSAW,\n isMCAW,\n is111,\n is131,\n is135,\n is136,\n is137,\n is138,\n is121,\n is122,\n is123,\n is124,\n is125,\n} from 'weldnote/utils/rules/welding-process';\n\nconst { PROCESS_MECANIZATION } = Const;\n\nfunction filterProcesses(allItems, toReject) {\n return allItems.reject((item) => {\n let name = get(item, 'name');\n return toReject.includes(name);\n });\n}\n\nexport default function processMecanizationOptions(allOptions, weldingProcess) {\n return computed(allOptions, weldingProcess, {\n get() {\n let process = get(this, weldingProcess);\n if (isEmpty(process)) {\n return get(this, allOptions);\n } else {\n let allItems = get(this, allOptions);\n if (isSMAW(process) || is111(process)) {\n return filterProcesses(allItems, [\n PROCESS_MECANIZATION.SEMI_AUTOMATIC,\n PROCESS_MECANIZATION.AUTOMATIC,\n PROCESS_MECANIZATION.MECHANIZED,\n ]);\n } else if (\n isGMAW(process) ||\n isMCAW(process) ||\n isFCAW(process) ||\n isFCAWS(process) ||\n is131(process) ||\n is135(process) ||\n is136(process) ||\n is137(process) ||\n is138(process)\n ) {\n return filterProcesses(allItems, [PROCESS_MECANIZATION.MANUAL]);\n } else if (\n is121(process) ||\n is122(process) ||\n is123(process) ||\n is124(process) ||\n is125(process) ||\n isSAW(process)\n ) {\n return filterProcesses(allItems, [PROCESS_MECANIZATION.MANUAL]);\n }\n return allItems;\n }\n },\n });\n}\n","import { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport function somePropertyHasValue(model, ...properties) {\n return computed(model, ...properties, {\n get() {\n let content = get(this, model);\n let someOk = false;\n for (let i = 0; i < properties.length; i++) {\n let property = get(content, properties[i]);\n if (!isEmpty(property)) {\n someOk = true;\n }\n }\n return someOk;\n },\n });\n}\n","import Mixin from '@ember/object/mixin';\nimport { isEmpty } from '@ember/utils';\nimport { service } from '@ember/service';\nimport { assert } from '@ember/debug';\n\nexport default Mixin.create({\n userSession: service(),\n\n getModelValue(attribute) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n return this.get(`model.${attribute}`);\n },\n\n setModelValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n this.set(`model.${attribute}`, value);\n },\n\n setModelDecimalValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let separator = this.get('userSession.decimalSeparator');\n if (separator === ',') {\n if (!isEmpty(value)) {\n value = `${value}`.replace(',', '.');\n }\n }\n this.set(`model.${attribute}`, value);\n },\n\n setModelCollection(attribute, values) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = this.get(`model.${attribute}`);\n collection.clear();\n if (!isEmpty(values)) {\n values.forEach((value) => {\n collection.pushObject(value);\n });\n }\n },\n\n setModelCollectionValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n this.get(`model.${attribute}`).clear();\n if (!isEmpty(value)) {\n this.get(`model.${attribute}`).pushObject(value);\n }\n },\n\n clearModelCollection(attribute) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = this.get(`model.${attribute}`);\n collection.clear();\n },\n});\n","import Mixin from '@ember/object/mixin';\nimport { isEmpty } from '@ember/utils';\nimport { computed, set } from '@ember/object';\nimport { service } from '@ember/service';\n\nexport default Mixin.create({\n fileService: service(),\n\n imagePreviewFetch(url, urlFetchFlag, collectionProperty, imageProperty) {\n if (isEmpty(this.get(url)) && !this.get(urlFetchFlag)) {\n this.set(urlFetchFlag, true);\n let imageCollection = this.get(`model.${collectionProperty}`);\n if (imageCollection && imageCollection !== null) {\n imageCollection\n .then((collection) => {\n if (!isEmpty(collection)) {\n let firstObject = collection.get('firstObject');\n firstObject\n .get(imageProperty)\n .then((file) => {\n this.fileService.getFileRetrieveRequestForUpload(file).then((result) => {\n this.set(url, result.url);\n });\n })\n .finally(() => {\n this.set(urlFetchFlag, false);\n });\n }\n })\n .catch(() => {\n this.set(urlFetchFlag, false);\n });\n }\n }\n return this.get(url);\n },\n\n grooveDesignUrl: null,\n grooveDesignUrlFetching: false,\n grooveDesignImageLink: computed('model.grooveDesigns.[]', 'grooveDesignUrl', function () {\n return this.imagePreviewFetch(\n 'grooveDesignUrl',\n 'grooveDesignUrlFetching',\n 'grooveDesigns',\n 'image'\n );\n }),\n\n resetGrooveDesignImagePreview() {\n set(this, 'grooveDesignUrl', null);\n set(this, 'grooveDesignUrlFetching', false);\n },\n\n weldLayerUrl: null,\n weldLayerUrlFetching: false,\n weldLayerImageLink: computed('model.weldLayerConfigurations.[]', 'weldLayerUrl', function () {\n return this.imagePreviewFetch(\n 'weldLayerUrl',\n 'weldLayerUrlFetching',\n 'weldLayerConfigurations',\n 'upload'\n );\n }),\n\n resetWeldLayerImagePreview() {\n set(this, 'weldLayerUrl', null);\n set(this, 'weldLayerUrlFetching', false);\n },\n});\n","import { alias } from '@ember/object/computed';\nimport Mixin from '@ember/object/mixin';\nimport { computed } from '@ember/object';\nimport { service } from '@ember/service';\n\nexport default Mixin.create({\n userSession: service(),\n showDeleteButton: alias('canEdit'),\n canEdit: computed('model.system', 'userSession.isAdmin', function () {\n return !this.get('model.system') || this.get('userSession.isAdmin');\n }),\n});\n","import Model, { attr, belongsTo, hasMany, SyncHasMany } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport Staff from './staff';\nimport Feature from './feature';\nimport Role from './role';\nimport Company from './company';\nimport { isEmpty } from '@ember/utils';\nimport FileUpload from './file-upload';\n\nexport default class Account extends Model {\n @attr('string')\n declare email?: string;\n\n @attr('string')\n declare name?: string;\n\n @attr('string')\n declare language?: string;\n\n @attr('string')\n declare client?: string;\n\n // this property is the old global admin that should be renamed\n @attr('boolean')\n declare admin?: boolean;\n\n @attr('boolean')\n declare accountAdmin?: boolean;\n\n @attr('string')\n declare decimalSeparator?: string;\n\n @hasMany('feature', { async: false, inverse: null })\n declare features: SyncHasMany;\n\n @hasMany('role', { async: false, inverse: null })\n declare roles: SyncHasMany;\n\n @belongsTo('staff', { async: false, inverse: 'account' })\n declare staff: Staff;\n\n @attr('string')\n declare unitSystem?: string;\n\n @attr('string')\n declare dateFormat?: string;\n\n @attr('boolean')\n declare accountLocked?: boolean;\n\n @attr('string')\n declare clientId?: string;\n\n @attr('string')\n declare daysUntilEndOfTrial?: string;\n\n @attr('date')\n declare accountValidUntil?: Date;\n\n @attr('string')\n declare subscriptionType?: string;\n\n @attr()\n declare subscriptionInfo?: string;\n\n @attr('boolean')\n declare emailExpiringCertificatesToday?: boolean;\n\n @attr('boolean')\n declare emailExpiringCertificates30Days?: boolean;\n\n @attr('string')\n declare subscriptionPlan?: string;\n\n @hasMany('company', { async: false, inverse: null })\n declare companiesSubscribed: SyncHasMany;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare signature: FileUpload;\n\n @attr('string')\n declare renderedSignaturePath?: string;\n\n @attr('string')\n declare notesRole?: string;\n\n @attr('string')\n declare assemblyRole?: string;\n\n @attr('string')\n declare organizationId?: string;\n\n hasPermission(permissionId: string): boolean {\n let hasPermission = false;\n this.roles.forEach((role) => {\n if (get(role, 'permissions').isAny('permissionId', permissionId)) {\n hasPermission = true;\n }\n });\n return hasPermission;\n }\n\n get hasRoles(): boolean {\n let counter = 0;\n this.roles.forEach((i) => {\n if (i) {\n counter += 1;\n }\n });\n return counter > 0;\n }\n\n get hasSubscriptionPlan(): boolean {\n return !isEmpty(this.subscriptionPlan);\n }\n\n get isTrial(): boolean {\n return this.subscriptionType === 'TRIAL';\n }\n\n get isPaying(): boolean {\n return this.subscriptionType === 'ACTIVE';\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n account: Account;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class ActionLog extends BaseModel {\n @attr('date')\n declare actionTime: Date;\n\n @attr('number')\n declare instanceId: number;\n\n @attr('string')\n declare actionId: string;\n\n @attr('string')\n declare instanceType: string;\n\n @attr('string')\n declare author: string;\n\n @attr('string')\n declare label?: string;\n\n @attr('boolean')\n declare exists?: boolean;\n\n @attr()\n declare context?: string;\n\n\n metadata = {\n modelName: 'action-log',\n actionId: { required: true },\n instanceType: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'action-log': ActionLog;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ARC_TRANSFER_MODES } = Constants;\n\n/**\n * Represents an Arc Transfer Mode in the welding domain.\n *\n * Arc Transfer Mode describes how filler metal is transferred from the electrode\n * to the weld pool in Gas Metal Arc Welding (GMAW/MIG/MAG) and Flux-Cored Arc\n * Welding (FCAW) processes. The transfer mode is determined by welding parameters\n * (current, voltage) and shielding gas composition, and significantly affects\n * weld quality, spatter levels, penetration, and positional capability.\n *\n * **Short Circuit Transfer (Short Arc / Dip Transfer):**\n * - Occurs at low voltage and wire feed speed\n * - Metal transfers when the wire touches the weld pool, creating short circuits\n * - Low heat input, suitable for thin materials and all positions\n * - Higher spatter tendency, risk of cold lap/lack of fusion\n *\n * **Globular Transfer:**\n * - Occurs at intermediate parameters between short circuit and spray\n * - Large irregular droplets transfer across the arc\n * - High spatter, limited to flat and horizontal positions\n * - Generally avoided in production welding\n *\n * **Spray Transfer:**\n * - Occurs above the transition current threshold\n * - Small droplets transfer in a fine spray pattern\n * - High deposition rate, deep penetration, low spatter\n * - Primarily limited to flat and horizontal positions due to fluid weld pool\n *\n * **Pulsed Spray Transfer:**\n * - Controlled pulsing alternates between background and peak current\n * - Achieves spray-type transfer at lower average heat input\n * - All-position capability with reduced distortion\n * - Requires more sophisticated power source\n *\n * Arc transfer mode is often an essential variable for procedure qualification,\n * as changing modes can significantly alter weld characteristics.\n *\n * @extends BaseModel\n */\nexport default class ArcTransferMode extends BaseModel {\n @attr('string')\n declare transferMode: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode: IndustryCode;\n\n @attr('boolean')\n declare system: boolean;\n\n get isShortArc(): boolean {\n return this.transferMode === ARC_TRANSFER_MODES.SHORT_ARC;\n }\n\n get isGlobular(): boolean {\n return this.transferMode === ARC_TRANSFER_MODES.GLOBULAR;\n }\n\n get isSpray(): boolean {\n return this.transferMode === ARC_TRANSFER_MODES.SPRAY;\n }\n\n get isPulsedSpray(): boolean {\n return this.transferMode === ARC_TRANSFER_MODES.PULSED_SPRAY;\n }\n\n get visualLabel(): string {\n return this.transferMode || '';\n }\n\n validations = {\n transferMode: {\n presence: {\n message(_key: string, _value: string, model: ArcTransferMode): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n industryCode: {\n presence: {\n message(_key: string, _value: string, model: ArcTransferMode): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'arc-transfer-mode',\n transferMode: {\n required: true,\n },\n\n industryCode: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'arc-transfer-mode': ArcTransferMode;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport BaseMaterial from './base-material';\nimport FileUpload from './file-upload';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport { service } from '@ember/service';\n\nexport default class BaseMaterialCertificate extends BaseModel {\n @service('unit-system')\n declare units: UnitSystemService;\n\n @belongsTo('base-material', { async: true, inverse: null })\n declare baseMaterial: AsyncBelongsTo;\n\n @attr('string')\n declare baseMaterialLabel?: string;\n\n @attr('number')\n declare thickness?: number;\n\n @attr('number')\n declare diameter?: number;\n\n @attr('string')\n declare productType?: string;\n\n @attr('string')\n declare heatNumber?: string;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare certificate: AsyncBelongsTo;\n\n @attr('string')\n declare certificatePath?: string;\n\n @attr('string')\n declare productForm?: string;\n\n @attr('string')\n declare unitSystem?: string;\n\n get visualLabel(): string {\n return this.heatNumber || '';\n }\n\n get thicknessWithUnits(): string {\n return this.thickness ? `${this.thickness} ${this.distanceUnit}` : '';\n }\n\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n\n validations = {\n thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n productType: { presence: true },\n heatNumber: { presence: true },\n baseMaterial: { presence: true },\n unitSystem: { presence: true },\n };\n\n metadata = {\n modelName: 'base-material-certificate',\n listRoute: 'base-material-certificates',\n editRoute: 'base-material-certificate',\n heatNumber: { required: true },\n baseMaterial: { required: true },\n productType: { required: true },\n unitSystem: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'base-material-certificate': BaseMaterialCertificate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class BaseMaterialGrade extends BaseModel {\n @attr('string')\n declare grade?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel(): string {\n return this.grade || '';\n }\n\n validations = {\n grade: {\n presence: {\n message(_key: string, _value: string, model: BaseMaterialGrade): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'base-material-grade',\n grade: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'base-material-grade': BaseMaterialGrade;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\nimport PqrStandard from './pqr-standard';\nimport WelderStandard from './welder-standard';\n\n/**\n * Represents a Base Material Group in the welding domain.\n *\n * Base Material Groups classify metals with similar welding characteristics into\n * categories that simplify procedure qualification. When a welding procedure is\n * qualified on one material within a group, it typically qualifies for other\n * materials in the same group (with some limitations), reducing the need for\n * separate qualifications for each specific material.\n *\n * **ISO/EN Grouping System (ISO/TR 15608):**\n * Group numbers with decimal notation (e.g., 1.1, 1.2, 8.1):\n * - Group 1: Steels with specified minimum yield strength ≤460 MPa\n * - Group 2: Thermomechanically treated and QT steels (>360 MPa)\n * - Group 3: Quenched and tempered steels (>360 MPa)\n * - Groups 4-6: Low vanadium/chromium-molybdenum alloy steels\n * - Group 7: High vanadium steels\n * - Group 8: Austenitic stainless steels\n * - Group 9: Nickel alloy steels\n * - Group 10: Duplex stainless steels\n * - Groups 21-26: Aluminum and aluminum alloys\n * - Groups 31-38: Copper alloys\n * - Groups 41-48: Nickel and nickel alloys\n * - Groups 51-54: Titanium and titanium alloys\n *\n * **ASME P-Number System:**\n * P-Numbers with Group Numbers (e.g., P1 Gr1, P8 Gr1):\n * - P1: Carbon steels\n * - P3-P5: Alloy steels (Cr-Mo)\n * - P6-P7: High chromium martensitic steels\n * - P8: Austenitic stainless steels\n * - P9: Nickel alloy steels\n * - P10: Various specialty alloys\n *\n * **AWS Base Metal Groups:**\n * Simpler grouping for structural applications (Group I, II, III, IV).\n *\n * The `visualLabel` getter formats the display based on the industry code:\n * - ISO: \"1.2\" (groupNumber.subgroupNumber)\n * - ASME: \"P1 Gr1\" (P-number and group)\n * - AWS: Direct group number\n *\n * @extends BaseModel\n */\nexport default class BaseMaterialGroup extends BaseModel {\n @attr('string')\n declare groupName: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('string')\n declare description?: string;\n\n @attr('number')\n declare groupOrder?: number;\n\n @attr('boolean')\n declare system: number;\n\n @attr('string')\n declare groupNumber?: string;\n\n @attr('string')\n declare subgroupNumber?: string;\n\n @attr('string')\n declare label?: string;\n\n @belongsTo('pqr-standard', { async: false, inverse: null })\n declare standard: PqrStandard;\n\n @belongsTo('welder-standard', { async: false, inverse: null })\n declare welderStandard: WelderStandard\n\n @computed('groupName', 'groupNumber', 'subgroupNumber', 'code')\n get visualLabel(): string {\n let { groupName, groupNumber, subgroupNumber, code: industryCode } = this;\n if (!isEmpty(groupNumber) && !isEmpty(industryCode)) {\n let code = get(industryCode, 'code');\n if (code === 'ISO') {\n if (!isEmpty(subgroupNumber)) {\n return `${groupNumber}.${subgroupNumber}`;\n }\n return groupNumber || '';\n } else if (code === 'ASME') {\n \n if (!isEmpty(subgroupNumber)) {\n return `P${groupNumber} Gr${subgroupNumber}`;\n }\n return `P${groupNumber}`;\n } else if (code === 'AWS') {\n return groupNumber || '';\n }\n } else {\n if (!isEmpty(industryCode)) {\n let code = get(industryCode, 'code');\n // We want special situation for ASME groups, where N/A without subgroup is shown as \"Unassigned\"\n if (code === 'ASME' && groupName === 'N/A' && isEmpty(subgroupNumber)) {\n return 'Unassigned';\n }\n }\n }\n return groupName || '';\n }\n\n validations = {\n groupName: {\n presence: {\n message(_key: string, _value: string, model: BaseMaterialGroup): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n code: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'base-material-group',\n groupName: {\n required: true,\n },\n\n code: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'base-material-group': BaseMaterialGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class BaseMaterialSpecification extends BaseModel {\n @attr('string')\n declare specification?: string;\n\n @attr('string')\n declare description?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel(): string {\n return this.specification || '';\n }\n\n validations = {\n specification: {\n presence: {\n message(_key: string, _value: string, model: BaseMaterialSpecification): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'base-material-specification',\n specification: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'base-material-specification': BaseMaterialSpecification;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport BaseMaterialGrade from './base-material-grade';\nimport BaseMaterialGroup from './base-material-group';\nimport BaseMaterialSpecification from './base-material-specification';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a Base Material (Parent Material) in the welding domain.\n *\n * Base Material refers to the material(s) being joined by welding. The base\n * material properties are critical for determining welding procedures, filler\n * material selection, preheat/interpass temperatures, and post-weld heat treatment\n * requirements.\n *\n * A Base Material is identified by three key components:\n *\n * **Specification:**\n * The material standard that defines the material's chemical composition and\n * mechanical properties (e.g., ASTM A106, EN 10216-2, SA-516).\n *\n * **Grade:**\n * The specific grade within the specification that defines exact composition\n * and property limits (e.g., Grade B, Grade 70, P265GH).\n *\n * **Material Group:**\n * A classification that groups materials with similar weldability characteristics.\n * This grouping enables qualification range extensions:\n * - ISO/EN: Group numbers (e.g., 1.1, 8.1, 10.1)\n * - ASME: P-Numbers and Group Numbers (e.g., P1 Gr1, P8 Gr1)\n * - AWS: Base Metal Groups (e.g., Group I, Group II)\n *\n * Proper base material identification is essential because:\n * - Chemical composition affects susceptibility to cracking\n * - Mechanical properties determine required joint strength\n * - Material group determines qualification range\n * - Dissimilar material combinations require special consideration\n *\n * The `visualLabel` getter combines specification and grade for display purposes.\n * The `isNA` getter identifies materials designated as \"N/A\" (not applicable),\n * which may be used for special cases or undefined materials.\n *\n * @extends BaseModel\n */\nexport default class BaseMaterial extends BaseModel {\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode: IndustryCode;\n\n @attr('string')\n declare baseMaterialLabel?: string;\n\n @belongsTo('base-material-specification', { async: false, inverse: null })\n declare specification: BaseMaterialSpecification;\n\n @belongsTo('base-material-grade', { async: false, inverse: null })\n declare grade: BaseMaterialGrade;\n\n @belongsTo('base-material-group', { async: false, inverse: null })\n declare materialGroup: BaseMaterialGroup;\n\n @attr('boolean')\n declare system?: boolean;\n\n @computed('specification', 'grade')\n get visualLabel(): string {\n let specification = this.specification ? get(this.specification, 'id') : '';\n let grade = this.grade ? get(this.grade, 'id') : '';\n let label = '';\n\n if (!isEmpty(specification)) {\n label += get(this.specification, 'visualLabel');\n }\n if (!isEmpty(specification) && !isEmpty(grade)) {\n label += ' ';\n }\n if (!isEmpty(grade)) {\n label += get(this.grade, 'visualLabel');\n }\n return label;\n }\n\n @computed('materialGroup.groupName')\n get isNA() {\n let group = get(this.materialGroup, 'groupName');\n if (group && !isEmpty(group)) {\n return 'N/A' === group.trim();\n }\n return false;\n }\n\n metadata = {\n modelName: 'base-material',\n industryCode: {\n required: true,\n },\n\n specification: {\n required: true,\n },\n\n materialGroup: {\n required: true,\n },\n\n grade: {\n required: true,\n },\n };\n\n validations = {\n industryCode: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n specification: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n materialGroup: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n grade: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'base-material': BaseMaterial;\n }\n}\n","import { service } from '@ember/service';\nimport Model from '@ember-data/model';\nimport IntlService from 'ember-intl/services/intl';\nimport { modelValidator } from 'ember-model-validator';\n\n@modelValidator\nexport default class BaseModel extends Model {\n @service\n declare intl: IntlService;\n\n translate(what: string, options = {}) {\n return this.intl.t(what, options);\n }\n\n declare validate: (options?: any) => boolean;\n\n metadata: any;\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents a Bend Test Line (result row) in a PQR's destructive testing section.\n *\n * Bend testing is a destructive test that evaluates the ductility and soundness\n * of a welded joint by bending the specimen to a specified angle. The test reveals\n * defects such as lack of fusion, porosity, cracks, and inclusions that may not\n * be detected by non-destructive methods.\n *\n * **Test Purpose:**\n * - Evaluate weld ductility and ability to deform without cracking\n * - Reveal internal defects (lack of fusion, inclusions, porosity)\n * - Verify fusion zone and HAZ integrity\n * - Assess root and face quality\n *\n * **Test Types (indicated by `testType`):**\n *\n * - **Face Bend:** Weld face (cap) in tension - tests face quality\n * - **Root Bend:** Weld root in tension - tests root penetration quality\n * - **Side Bend:** Weld cross-section in tension - used for thick materials\n * - **Longitudinal Bend:** Bend axis parallel to weld - for clad/dissimilar welds\n *\n * **Recorded Values:**\n *\n * - **type:** Specimen identification (e.g., \"1\", \"2\", \"FB1\", \"RB1\")\n * - **testType:** Face bend, root bend, side bend, or longitudinal\n * - **bendAngle:** Angle achieved during bending (typically 180° required)\n * - **elongation:** Percentage elongation (for tensile-bend combined specimens)\n * - **results:** Pass/fail and observation of any defects\n *\n * **Acceptance Criteria:**\n * Specimens must typically bend to the required angle (often 180°) without\n * cracks or open defects exceeding specified limits (commonly 3mm in any direction).\n * Small cracks at specimen edges are often acceptable.\n *\n * @extends BaseModel\n */\nexport default class BendTestLine extends BaseModel {\n @attr('number')\n declare orderNum?: number;\n\n @attr('string')\n declare type?: string;\n\n @attr('number')\n declare bendAngle?: number;\n\n @attr('number')\n declare elongation?: number;\n\n @attr('string')\n declare results?: string;\n\n @attr('string')\n declare testType?: string;\n\n @belongsTo('pqr')\n declare pqr: any;\n\n metadata = {\n modelName: 'bend-test-line',\n };\n\n isLineEmpty(): boolean {\n let allEmpty =\n isEmpty(this.type) &&\n isEmpty(this.bendAngle) &&\n isEmpty(this.elongation) &&\n isEmpty(this.testType) &&\n isEmpty(this.results);\n return allEmpty;\n }\n\n validations = {\n type: {\n length: {\n maximum: 30,\n },\n },\n\n bendAngle: {\n numericality: {\n onlyInteger: true,\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 360,\n },\n },\n\n elongation: {\n numericality: {\n onlyInteger: true,\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 100,\n },\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'bend-test-line': BendTestLine;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents a Certification Special Requirement in the welding domain.\n *\n * Special Requirements are additional conditions or restrictions that may\n * apply to welder certifications beyond the standard qualification variables.\n * These requirements address specific service conditions, client specifications,\n * or regulatory demands.\n *\n * **Common Types of Special Requirements:**\n *\n * **Material-Related:**\n * - Specific material group qualifications (e.g., duplex stainless steel only)\n * - Dissimilar metal welding authorization\n * - Corrosion-resistant overlay qualification\n *\n * **Process-Related:**\n * - Single-side welding without backing\n * - Root pass without purge gas\n * - Specific transfer mode requirements (e.g., pulsed spray only)\n *\n * **Application-Related:**\n * - Nuclear code compliance\n * - Sour service (H2S) qualification\n * - Cryogenic service qualification\n * - High-pressure piping authorization\n *\n * **Technique-Related:**\n * - Vertical-down progression restriction\n * - Confined space welding\n * - Restricted access welding (6GR)\n *\n * **Purpose:**\n *\n * - **Safety:** Ensures welders are qualified for critical applications\n * - **Compliance:** Meets regulatory or contractual requirements\n * - **Quality:** Addresses specific technical challenges\n * - **Traceability:** Documents additional qualifications and limitations\n *\n * Special requirements are recorded on welder certificates and must be\n * verified when assigning welders to production work.\n *\n * @extends BaseModel\n */\nexport default class CertificationSpecialRequirement extends BaseModel {\n @attr('string')\n declare name?: string;\n\n @attr('string')\n declare description?: string;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n validations = {\n name: { presence: true },\n description: { presence: true },\n };\n\n metadata = {\n modelName: 'certification-special-requirement',\n name: { required: true },\n description: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'certification-special-requirement': CertificationSpecialRequirement;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport FileUpload from './file-upload';\nimport Account from './account';\n\nexport default class Company extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('string')\n declare address?: string;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare companyLogo: AsyncBelongsTo;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare secondaryLogo: AsyncBelongsTo;\n\n @attr('string')\n declare language?: string;\n\n @attr('number')\n declare totalWelds?: number;\n\n @attr('number')\n declare goodWelds?: number;\n\n @attr('number')\n declare repairedWelds?: number;\n\n @attr('number')\n declare repairRate?: number;\n\n @belongsTo('company', { async: true, inverse: null })\n declare parentCompany: AsyncBelongsTo;\n\n @belongsTo('account', { async: true, inverse: null })\n declare accountForAutoCertificatesRenewal: AsyncBelongsTo;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n validations = {\n name: { presence: true },\n };\n\n metadata = {\n modelName: 'company',\n name: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n company: Company;\n }\n}\n","import { computed } from '@ember/object';\nimport { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport FileUpload from './file-upload';\nimport GeneralDrawing from './general-drawing';\n\nexport default class ComponentDrawing extends BaseModel {\n @attr('string')\n declare title?: string;\n\n @attr('string')\n declare referenceNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare drawingContent: FileUpload;\n\n @attr('string')\n declare drawingContentPath?: string;\n\n @attr('string', { defaultValue: '0' })\n declare revision: string;\n\n @attr('string')\n declare revisionStatus: string;\n\n @belongsTo('general-drawing', { async: false, })\n declare referencedDrawing: GeneralDrawing;\n\n @attr('number')\n declare createdOn: number;\n\n get active(): boolean {\n return this.revisionStatus === 'ACT';\n }\n\n get visualLabel(): string {\n return this.referenceNumber || '';\n }\n\n @computed('referenceNumber', 'revision')\n get visualLabelWithRev() {\n return `${this.referenceNumber} (Rev. ${this.revision})`;\n }\n\n validations = {\n title: { presence: true },\n referenceNumber: { presence: true },\n revision: { presence: true },\n };\n\n metadata = {\n modelName: 'component-drawing',\n title: { required: true },\n referenceNumber: { required: true },\n revision: { required: true },\n };\n\n updateDrawingReference = memberAction({ path: 'updateDrawingReference', type: 'PUT' });\n\n createRevision = memberAction({ path: 'createRevision', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'component-drawing': ComponentDrawing;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a Construction Standard in the welding domain.\n *\n * A Construction Standard (also known as Application Standard or Product Standard)\n * defines the specific requirements for welded construction in a particular industry\n * or application. While PQR Standards govern how procedures are qualified, Construction\n * Standards specify how those procedures must be applied in actual fabrication.\n *\n * Construction Standards typically define:\n * - Design requirements for welded joints\n * - Material selection and compatibility requirements\n * - Welding procedure requirements beyond basic qualification\n * - Inspection and testing requirements for production welds\n * - Quality control and assurance requirements\n * - Welder qualification requirements specific to the application\n *\n * Common examples include:\n * - ASME B31.3 (Process Piping)\n * - ASME B31.1 (Power Piping)\n * - EN 13480 (Metallic Industrial Piping)\n * - EN 13445 (Unfired Pressure Vessels)\n * - AWS D1.1 (Structural Welding - Steel)\n * - API 1104 (Pipeline Welding)\n *\n * The relationship between Construction Standards and PQR Standards is complementary:\n * the PQR Standard qualifies the procedure, while the Construction Standard governs\n * its application in the specific fabrication context.\n *\n * @extends BaseModel\n */\nexport default class ConstructionStandard extends BaseModel {\n @belongsTo('industry-code', { async: true, inverse: null })\n declare industryCode: AsyncBelongsTo;\n\n @attr('string')\n declare designation: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.designation || '';\n }\n\n validations = {\n industryCode: { presence: true },\n designation: { presence: true },\n };\n\n metadata = {\n modelName: 'construction-standard',\n industryCode: { required: true },\n designation: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'construction-standard': ConstructionStandard;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class DestructiveTesting extends BaseModel {\n @attr('string')\n declare designation: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.designation || '';\n }\n\n validations = {\n designation: {\n presence: {\n message(_key: string, _value: string, model: DestructiveTesting): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'destructive-testing',\n designation: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'destructive-testing': DestructiveTesting;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport FileUpload from './file-upload';\n\nexport default class Drawing extends BaseModel {\n @attr('string')\n declare title?: string;\n\n @attr('string')\n declare referenceNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare drawingContent: AsyncBelongsTo;\n\n @attr('string')\n declare drawingContentPath?: string;\n\n @attr('string')\n declare revision?: string;\n\n get visualLabel(): string {\n return this.title || '';\n }\n\n validations = {\n title: { presence: true },\n referenceNumber: { presence: true },\n revision: { presence: true },\n };\n\n metadata = {\n modelName: 'drawing',\n title: { required: true },\n referenceNumber: { required: true },\n revision: { required: true },\n revisionStatus: { required: true },\n };\n\n deleteDrawing = memberAction({ path: 'deleteDrawing', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n drawing: Drawing;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class ElectrodeType extends BaseModel {\n @attr('string')\n declare shortDesignation: string;\n\n @attr('string')\n declare longDesignation?: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.shortDesignation || '';\n }\n\n validations = {\n shortDesignation: { presence: true },\n longDesignation: { presence: true },\n };\n\n metadata = {\n modelName: 'electrode-type',\n shortDesignation: { required: true },\n longDesignation: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'electrode-type': ElectrodeType;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents an Examining Body (also known as Third Party Inspection Body or\n * Notified Body) in the welding certification domain.\n *\n * An Examining Body is an independent organization authorized to witness,\n * review, and certify welding procedure qualifications (PQR/WPQR) and welder\n * performance qualifications. These bodies ensure compliance with applicable\n * standards and provide impartial verification of welding quality.\n *\n * Key responsibilities of an Examining Body include:\n * - Witnessing welding qualification tests\n * - Reviewing and approving test documentation\n * - Verifying compliance with applicable standards\n * - Issuing or endorsing qualification certificates\n * - Performing periodic audits of welding operations\n *\n * Examining Bodies may be:\n * - Accredited third-party inspection agencies (e.g., TÜV, Lloyd's, Bureau Veritas)\n * - Notified Bodies under EU directives (e.g., PED - Pressure Equipment Directive)\n * - Authorized Inspection Agencies (AIA) under ASME\n * - National certification bodies\n *\n * The involvement of an Examining Body adds credibility and regulatory acceptance\n * to welding certifications, often required for pressure equipment, structural\n * applications, and other safety-critical welded fabrications.\n *\n * @extends BaseModel\n */\nexport default class ExaminingBody extends BaseModel {\n @attr('string')\n declare name: string;\n\n @attr('string')\n declare address?: string;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n validations = {\n name: {\n presence: {\n message(_key: string, _value: string, model: ExaminingBody): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'examining-body',\n name: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'examining-body': ExaminingBody;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\nexport default class Feature extends Model {\n @attr('string')\n declare name: string;\n\n @attr('string')\n declare description?: string;\n\n @attr('boolean')\n declare activeForAll: boolean;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n metadata = {\n modelName: 'feature',\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n feature: Feature;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents a File Upload entity for document and image attachments.\n *\n * This model tracks uploaded files associated with various welding records\n * including procedure documents, test reports, welder certificates, groove\n * design images, and weld layer configuration diagrams.\n *\n * **Common Use Cases in Welding Context:**\n *\n * - **PQR Documentation:** Test certificates, laboratory reports\n * - **Groove Designs:** Joint preparation diagrams and images\n * - **Weld Layer Configurations:** Bead sequence illustrations\n * - **Welder Reports:** Performance qualification records\n * - **Certificates:** Scanned qualification documents\n *\n * **Tracked Properties:**\n *\n * - **filePath:** Server storage path for the uploaded file\n * - **context:** The type of record this file is associated with\n * - **fileSize:** Size of the uploaded file in bytes\n * - **originalFilename:** The original name of the file before upload\n * - **downloadPath:** URL or path for retrieving/downloading the file\n *\n * **File Management:**\n *\n * The system maintains links between records and their associated files.\n * Files are typically stored in cloud storage (Azure, AWS) with paths\n * maintained in the database. The `downloadPath` provides the URL for\n * accessing the file content.\n *\n * **Quality Assurance:**\n *\n * Uploaded documents provide evidence for:\n * - Procedure qualification (test reports, witnessing documentation)\n * - Welder qualification (certificates, examination records)\n * - Production traceability (inspection reports, NDE results)\n *\n * @extends BaseModel\n */\nexport default class FileUpload extends BaseModel {\n @attr('string')\n declare filePath?: string;\n\n @attr('string')\n declare context?: string;\n\n @attr('number')\n declare fileSize?: number;\n\n @attr('string')\n declare originalFilename?: string;\n\n @attr('string')\n declare downloadPath?: string;\n\n get visualLabel(): string {\n return this.filePath || '';\n }\n\n validations = {\n filePath: { presence: true },\n };\n\n metadata = {\n modelName: 'file-upload',\n filePath: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'file-upload': FileUpload;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport FillerMaterial from './filler-material';\nimport FillerMaterialCommercialDesignation from './filler-material-commercial-designation';\nimport FileUpload from './file-upload';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport { service } from '@ember/service';\n\nexport default class FillerMaterialCertificate extends BaseModel {\n @service('unit-system')\n declare units: UnitSystemService;\n\n @belongsTo('filler-material', { async: true, inverse: null })\n declare fillerMaterial: AsyncBelongsTo;\n\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare commercialDesignation: FillerMaterialCommercialDesignation;\n\n @attr('string')\n declare batchNumber?: string;\n\n @belongsTo('file-upload', { async: true , inverse: null })\n declare certificate: AsyncBelongsTo;\n\n @attr('string')\n declare certificatePath?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameter: number;\n\n @attr('string')\n declare unitSystem?: string;\n\n get visualLabel(): string {\n return this.batchNumber || '';\n }\n\n get diameterWithUnits(): string {\n return this.diameter ? `${this.diameter} ${this.distanceUnit}` : '';\n }\n\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n\n validations = {\n fillerMaterial: { presence: true },\n batchNumber: { presence: true },\n unitSystem: { presence: true },\n };\n\n metadata = {\n modelName: 'filler-material-certificate',\n listRoute: 'filler-material-certificates',\n editRoute: 'filler-material-certificate',\n fillerMaterial: { required: true },\n batchNumber: { required: true },\n unitSystem: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filler-material-certificate': FillerMaterialCertificate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class FillerMaterialClassification extends BaseModel {\n @attr('string')\n declare classification?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel(): string {\n return this.classification || '';\n }\n\n validations = {\n classification: {\n presence: {\n message(_key: string, _value: string, model: FillerMaterialClassification): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'filler-material-classification',\n classification: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filler-material-classification': FillerMaterialClassification;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport FillerMaterial from './filler-material';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\n/**\n * Represents a Filler Material Commercial Designation (Trade Name/Brand Name).\n *\n * While filler materials are technically identified by their specification and\n * classification, they are commercially sold under manufacturer-specific trade\n * names or brand names. This model links the generic filler material classification\n * to its commercial identity.\n *\n * **Purpose of Commercial Designations:**\n *\n * - **Procurement:** Enables ordering of specific products from suppliers\n * - **Traceability:** Links production records to actual consumables used\n * - **Quality Assurance:** Enables verification against approved consumable lists\n * - **Cost Tracking:** Associates consumption with specific product costs\n *\n * **Examples of Commercial Designations:**\n * - Lincoln Electric: \"Excalibur 7018-1\", \"SuperArc L-56\"\n * - ESAB: \"OK 48.00\", \"Aristorod 12.50\"\n * - Böhler: \"FOX EV 50\", \"Union S2 Mo\"\n *\n * Each commercial designation corresponds to a specific filler material\n * classification (linked via `fillerMaterial`), but multiple commercial\n * products from different manufacturers may share the same classification.\n *\n * In welding documentation, both the classification and commercial designation\n * are typically recorded:\n * - Classification: For procedure qualification and transferability\n * - Commercial designation: For production control and traceability\n *\n * @extends BaseModel\n */\nexport default class FillerMaterialCommercialDesignation extends BaseModel {\n @attr('string')\n declare commercialDesignation?: string;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterial: FillerMaterial;\n\n get visualLabel(): string {\n return this.commercialDesignation || '';\n }\n\n validations = {\n commercialDesignation: { presence: true },\n fillerMaterial: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'filler-material-commercial-designation',\n commercialDesignation: { required: true },\n fillerMaterial: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filler-material-commercial-designation': FillerMaterialCommercialDesignation;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\n\nexport default class FillerMaterialGroup extends BaseModel {\n @attr('string')\n declare groupName?: string;\n\n @attr('string')\n declare description?: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('boolean')\n declare system?: boolean;\n\n @attr('string')\n declare groupNumber?: string;\n\n @attr('string')\n declare subgroupNumber?: string;\n\n @computed('groupName', 'groupNumber', 'subgroupNumber', 'code')\n get visualLabel(): string {\n let { groupName, groupNumber, subgroupNumber, code: industryCode } = this;\n if (!isEmpty(groupNumber)) {\n if (!isEmpty(industryCode)) {\n let code = get(industryCode, 'code');\n if (code === 'ISO') {\n if (!isEmpty(subgroupNumber)) {\n return `${groupNumber}.${subgroupNumber}`;\n }\n return groupNumber || '';\n } else if (code === 'ASME') {\n if (!isEmpty(subgroupNumber)) {\n return `F${groupNumber} A${subgroupNumber}`;\n }\n return `F${groupNumber}`;\n } else if (code === 'AWS') {\n return groupNumber || '';\n }\n }\n }\n return groupName || '';\n }\n\n validations = {\n groupName: { presence: true },\n code: {\n presence: {\n message(_key: string, _value: string, model: FillerMaterialGroup): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'filler-material-group',\n groupName: { required: true },\n code: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filler-material-group': FillerMaterialGroup;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class FillerMaterialSpecification extends BaseModel {\n @attr('string')\n declare specification?: string;\n\n @attr('string')\n declare description?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel(): string {\n return this.specification || '';\n }\n\n validations = {\n specification: {\n presence: {\n message(_key: string, _value: string, model: FillerMaterialSpecification): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'filler-material-specification',\n specification: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filler-material-specification': FillerMaterialSpecification;\n }\n}\n","import { computed, get } from '@ember/object';\nimport { AsyncHasMany, attr, belongsTo, hasMany } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport WeldingProcess from './welding-process';\nimport IndustryCode from './industry-code';\nimport FillerMaterialGroup from './filler-material-group';\nimport FillerMaterialClassification from './filler-material-classification';\nimport FillerMaterialSpecification from './filler-material-specification';\n\n/**\n * Represents a Filler Material (Welding Consumable) in the welding domain.\n *\n * Filler Material is the consumable material added during welding to fill the\n * joint and form the weld metal. Proper filler material selection is critical\n * for achieving required mechanical properties, corrosion resistance, and\n * weld quality.\n *\n * A Filler Material is identified by:\n *\n * **Specification:**\n * The standard defining requirements for the filler material type\n * (e.g., AWS A5.1, AWS A5.18, EN ISO 2560, EN ISO 14341).\n *\n * **Classification:**\n * The specific classification within the specification that defines\n * composition, mechanical properties, and usability characteristics\n * (e.g., E7018, ER70S-6, E 42 5 B 42 H5).\n *\n * **Group (F-Number / FM Group):**\n * Groupings based on similar usability characteristics:\n * - ASME F-Numbers: F1-F6 for various electrode types\n * - ISO/EN: Filler material groupings based on composition\n *\n * **Forms of Filler Materials:**\n * - Covered electrodes (SMAW): Flux-coated rods\n * - Solid wires (GMAW, GTAW): Bare wire on spools\n * - Flux-cored wires (FCAW): Tubular wires with flux core\n * - Metal-cored wires: Tubular wires with metal powder core\n * - Submerged arc wires and flux combinations\n *\n * The relationship to welding processes is tracked through `weldingProcesses`,\n * as certain filler materials are only compatible with specific processes.\n *\n * Filler material selection affects:\n * - Weld metal chemistry and mechanical properties\n * - Susceptibility to cracking (hydrogen content, strength mismatch)\n * - Corrosion resistance matching with base material\n * - Welding position capability\n * - Deposition efficiency and productivity\n *\n * @extends BaseModel\n */\nexport default class FillerMaterial extends BaseModel {\n @belongsTo('filler-material-specification', { async: false, inverse: null })\n declare specification: FillerMaterialSpecification;\n\n @belongsTo('filler-material-classification', { async: false, inverse: null })\n declare classification: FillerMaterialClassification;\n\n @belongsTo('filler-material-group', { async: false, inverse: null })\n declare group: FillerMaterialGroup;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('boolean')\n declare system?: boolean;\n\n @hasMany('welding-process', { async: true, inverse: null })\n declare weldingProcesses: AsyncHasMany;\n\n @attr('string')\n declare fillerMaterialLabel?: string;\n\n get groupName(): FillerMaterialGroup {\n return this.group;\n }\n\n @computed('specification', 'classification')\n get visualLabel(): string {\n let spec: string = '';\n if (this.specification && !isEmpty(get(this.specification, 'id'))) {\n spec = get(this.specification, 'visualLabel');\n }\n\n let classification: string = '';\n if (this.classification && !isEmpty(get(this.classification, 'id'))) {\n classification = get(this.classification, 'visualLabel');\n }\n\n return `${spec} - ${classification}`;\n }\n\n validations = {\n specification: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n classification: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n group: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n code: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'filler-material',\n specification: { required: true },\n classification: { required: true },\n group: { required: true },\n code: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'filler-material': FillerMaterial;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport FileUpload from './file-upload';\nimport Company from './company';\n\n/**\n * Represents a Fitter (Fit-Up Technician) in the welding management system.\n *\n * A Fitter is a skilled craftsperson responsible for the preparation and alignment\n * of components before welding. Proper fit-up is critical to weld quality, as poor\n * alignment or gap control can lead to weld defects and structural issues.\n *\n * **Role and Responsibilities:**\n *\n * **Joint Preparation:**\n * - Ensure proper edge preparation (bevels, root faces) per WPS requirements\n * - Verify material condition (cleanliness, freedom from contaminants)\n * - Check for proper material identification and traceability\n *\n * **Alignment and Positioning:**\n * - Align components within specified tolerances\n * - Control root gap and root face dimensions\n * - Ensure proper high-low (mismatch) is within acceptable limits\n * - Position tack welds correctly without compromising final weld quality\n *\n * **Dimensional Control:**\n * - Verify dimensions against drawings and specifications\n * - Ensure proper orientation of asymmetric joints\n * - Control distortion through proper sequence of tack welding\n *\n * **Fit-Up Tolerances (typical examples):**\n * - Root gap: ±1.5mm for groove welds\n * - High-low (misalignment): Max 1.5mm or 10% of thickness\n * - Angular misalignment: Typically ±5° or less\n * - Ovality for pipe: Per applicable code limits\n *\n * **Qualification:**\n * While not all codes require formal fitter qualification, many companies\n * and projects require fitters to demonstrate competency in:\n * - Reading and interpreting welding drawings\n * - Understanding WPS fit-up requirements\n * - Using fit-up tools (jigs, clamps, strongbacks)\n * - Tack welding techniques (often requires welder qualification)\n *\n * **Identification:**\n * - `fitterId`: Company or project-specific identifier\n * - `fitterStamp`: Unique stamp/mark for traceability\n * - `fitterName`: Full name of the fitter\n * - `fitterType`: Category or level of fitter qualification\n *\n * **Relationship to Welding Operations:**\n * In a typical workflow:\n * 1. Fitter receives materials and work order\n * 2. Fitter prepares and aligns components per WPS and drawings\n * 3. Fitter performs tack welds to hold assembly\n * 4. Quality verifies fit-up before welding\n * 5. Welder completes the production weld\n * 6. Fitter's stamp provides traceability for fit-up quality\n *\n * @extends BaseModel\n *\n * @example\n * // Creating a fitter record\n * const fitter = store.createRecord('fitter', {\n * fitterName: 'John Smith',\n * fitterStamp: 'FS-001',\n * fitterId: 'F2024-001',\n * fitterType: 'Senior Fitter',\n * company: manufacturingCompany\n * });\n */\nexport default class Fitter extends BaseModel {\n @attr('string')\n declare fitterName?: string;\n\n @attr('string')\n declare fitterStamp?: string;\n\n @attr('string')\n declare fitterId?: string;\n\n @attr('string')\n declare fitterType?: string;\n\n @attr('date')\n declare dateBirth?: Date;\n\n @belongsTo('company', { async: true, inverse: null })\n declare company: AsyncBelongsTo;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare fitterReport: AsyncBelongsTo;\n\n @attr('string')\n declare fitterReportPath?: string;\n\n get visualLabel(): string {\n return this.fitterName || '';\n }\n\n validations = {\n fitterName: { presence: true },\n fitterStamp: { presence: true },\n };\n\n metadata = {\n modelName: 'fitter',\n fitterName: { required: true },\n fitterStamp: { required: true },\n };\n\n get name() {\n return this.fitterName;\n }\n\n get stamp() {\n return this.fitterStamp;\n }\n\n createFitterReport = memberAction({ path: 'createFitterReport' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n fitter: Fitter;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Flux from './flux';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\n/**\n * Represents a Flux Commercial Designation (Trade Name/Brand Name).\n *\n * Like filler materials and gases, welding flux is marketed under\n * manufacturer-specific trade names. This model links the generic\n * flux classification to its commercial identity.\n *\n * **Purpose of Flux Commercial Designations:**\n *\n * - **Procurement:** Enables ordering specific flux products from suppliers\n * - **Consistency:** Ensures the same flux is used throughout production\n * - **Traceability:** Links production records to specific flux batches\n * - **Quality Assurance:** Verifies correct flux usage against approved lists\n *\n * **Examples of Commercial Designations:**\n * - Lincoln Electric: \"Lincoln 860\", \"P2000\"\n * - ESAB: \"OK Flux 10.61\", \"OK Flux 10.71\"\n * - Hobart: \"Hobart HS-300\"\n *\n * **Flux-Wire System Considerations:**\n * Flux commercial designations are often sold as part of recommended\n * flux-wire systems. The manufacturer specifies which wire types are\n * compatible with each flux product to achieve specific weld properties.\n *\n * The `flux` relationship links to the generic flux classification\n * (specification, classification), while `commercialDesignation` stores\n * the trade name.\n *\n * In Submerged Arc Welding documentation, both the classification and\n * commercial designation are typically recorded for proper traceability\n * and procedure compliance verification.\n *\n * @extends BaseModel\n */\nexport default class FluxCommercialDesignation extends BaseModel {\n @attr('string')\n declare commercialDesignation?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare flux: Flux;\n\n get visualLabel(): string {\n return this.commercialDesignation || '';\n }\n\n validations = {\n commercialDesignation: { presence: true },\n flux: { custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n }, },\n };\n\n metadata = {\n modelName: 'flux-commercial-designation',\n commercialDesignation: { required: true },\n flux: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'flux-commercial-designation': FluxCommercialDesignation;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport FillerMaterialClassification from './filler-material-classification';\n\nexport default class FluxSpecification extends BaseModel {\n @attr('string')\n declare specification: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.specification || '';\n }\n\n validations = {\n specification: {\n presence: {\n message(_key: string, _value: string, model: FillerMaterialClassification): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'flux-specification',\n presence: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'flux-specification': FluxSpecification;\n }\n}\n","import { get } from '@ember/object';\nimport { belongsTo, attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport FluxSpecification from './flux-specification';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a Welding Flux in the welding domain.\n *\n * Flux is a granular fusible material used in Submerged Arc Welding (SAW)\n * and certain other processes to shield the arc and weld pool, refine the\n * weld metal chemistry, and form a protective slag over the solidifying weld.\n *\n * **Functions of Welding Flux:**\n *\n * - **Arc Shielding:** The molten flux blanket protects the arc from atmosphere\n * - **Weld Pool Protection:** Prevents oxidation and nitrogen pickup\n * - **Slag Formation:** Creates protective slag that controls cooling rate\n * - **Alloying:** Can add alloying elements to the weld metal\n * - **Deoxidation:** Removes oxygen from the weld pool\n * - **Arc Stability:** Provides ionizing elements for stable arc\n *\n * **Types of Flux:**\n *\n * - **Fused Flux:** Melted and solidified - good consistency, limited alloying\n * - **Bonded Flux:** Ingredients bonded together - good alloying capability\n * - **Agglomerated Flux:** Similar to bonded, different manufacturing process\n *\n * **Flux Classification:**\n * - AWS (e.g., F7A2-EM12K): Activity, mechanical properties, wire compatibility\n * - EN ISO 14174: Basicity index and properties\n *\n * **Flux-Wire Combinations:**\n * The flux must be matched with compatible welding wire. The combination\n * determines final weld metal composition and properties. Flux classification\n * often includes reference to specific wire types.\n *\n * Flux is essential for SAW process and directly affects weld quality,\n * mechanical properties, and resistance to defects like porosity and cracking.\n *\n * @extends BaseModel\n */\nexport default class Flux extends BaseModel {\n @belongsTo('flux-specification', { async: false, inverse: null })\n declare specification: FluxSpecification;\n\n @attr('string')\n declare flux?: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel(): string {\n let specification: string = '';\n if (this.specification && !isEmpty(get(this.specification, 'id'))) {\n specification = get(this.specification, 'visualLabel');\n }\n if (isEmpty(specification)) {\n specification = '';\n }\n\n let { flux } = this;\n if (isEmpty(flux)) {\n flux = '';\n }\n\n let result = `${specification} - ${flux}`;\n return result;\n }\n\n validations = {\n code: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n }\n },\n },\n specification: { custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n }, },\n flux: { presence: true },\n };\n\n metadata = {\n modelName: 'flux',\n code: {\n required: true,\n },\n\n specification: {\n required: true,\n },\n\n flux: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n flux: Flux;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Gas from './gas';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\n/**\n * Represents a Gas Commercial Designation (Trade Name/Brand Name) for shielding gases.\n *\n * Similar to filler material commercial designations, gas suppliers market\n * their shielding gas products under proprietary trade names. This model\n * links the generic gas classification to its commercial identity.\n *\n * **Purpose of Gas Commercial Designations:**\n *\n * - **Procurement:** Enables ordering specific gas products from suppliers\n * - **Consistency:** Ensures the same gas mixture is used across production\n * - **Traceability:** Links production records to specific gas products\n * - **Quality Assurance:** Verifies correct gas usage against approved lists\n *\n * **Examples of Commercial Designations by Supplier:**\n * - Linde: \"Cronigon\", \"Corgon\"\n * - Air Liquide: \"Arcal\", \"Atal\"\n * - Air Products: \"Maxx\"\n * - Praxair: \"StarGold\"\n *\n * The `gas` relationship links to the generic gas classification (symbol,\n * composition, specification), while `commercialDesignation` stores the\n * trade name.\n *\n * The `gasMixture` field may store additional mixture details specific to\n * the commercial product that supplement the generic gas composition data.\n *\n * In practice, production records often reference commercial designations\n * for procurement and inventory purposes, while procedure documentation\n * references the generic classification for transferability.\n *\n * @extends BaseModel\n */\nexport default class GasCommercialDesignation extends BaseModel {\n @attr('string')\n declare commercialDesignation?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare gas: Gas;\n\n @attr('string')\n declare gasMixture?: string;\n\n @alias('commercialDesignation')\n get visualLabel(): string {\n return this.commercialDesignation || '';\n }\n\n validations = {\n commercialDesignation: { presence: true },\n gas: { custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n }, },\n };\n\n metadata = {\n modelName: 'gas-commercial-designation',\n commercialDesignation: { required: true },\n gas: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'gas-commercial-designation': GasCommercialDesignation;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class GasSpecification extends BaseModel {\n @attr('string')\n declare specification: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.specification || '';\n }\n\n validations = {\n specification: {\n presence: {\n message(_key: string, _value: string, model: GasSpecification): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'gas-specification',\n specification: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'gas-specification': GasSpecification;\n }\n}\n","import { computed, get } from '@ember/object';\nimport { attr, belongsTo } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport GasSpecification from './gas-specification';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a Shielding Gas in the welding domain.\n *\n * Shielding gas protects the molten weld pool and heated base material from\n * atmospheric contamination during welding. The gas composition significantly\n * affects arc characteristics, weld penetration profile, spatter levels,\n * and mechanical properties of the completed weld.\n *\n * **Categories of Shielding Gases:**\n *\n * **Inert Gases (for GTAW, MIG welding):**\n * - Argon (Ar): Most common inert gas, good arc stability, used for most metals\n * - Helium (He): Higher thermal conductivity, deeper penetration, faster travel speeds\n * - Ar/He mixtures: Combine benefits of both gases\n *\n * **Active Gases (for MAG welding):**\n * - CO2: Deep penetration, economical, more spatter\n * - Ar/CO2 mixtures: Balance of penetration and spatter control (e.g., 75/25, 82/18)\n * - Ar/O2 mixtures: Small O2 additions improve arc stability on steel\n *\n * **Multi-Component Mixtures:**\n * - Ar/CO2/O2: Optimized for specific applications\n * - Ar/He/CO2: For enhanced productivity\n *\n * **Backing/Purging Gases:**\n * - Used on the root side to prevent oxidation\n * - Typically pure argon or nitrogen (for stainless steels)\n *\n * The `specification` links to the standard governing gas requirements,\n * `symbol` contains the gas designation (e.g., \"M21\" per ISO 14175),\n * and `composition` describes the actual mixture percentages.\n *\n * Shielding gas is typically an essential variable in procedure qualification,\n * as changes can significantly affect weld properties.\n *\n * @extends BaseModel\n */\nexport default class Gas extends BaseModel {\n @attr('string')\n declare symbol?: string;\n\n @attr('string')\n declare composition?: string;\n\n @belongsTo('gas-specification', { async: false, inverse: null })\n declare specification: GasSpecification;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('boolean')\n declare system?: boolean;\n\n @computed('symbol', 'composition', 'specification')\n get visualLabel(): string {\n let specification: string = '';\n if (this.specification && !isEmpty(get(this.specification, 'id'))) {\n specification = get(this.specification, 'visualLabel');\n }\n if (isEmpty(specification)) {\n specification = '';\n }\n\n let { symbol } = this;\n if (isEmpty(symbol)) {\n symbol = '';\n }\n\n let { composition } = this;\n if (isEmpty(composition)) {\n composition = '';\n }\n\n let result = `${specification} - ${symbol} - ${composition}`;\n return result;\n }\n\n validations = {\n symbol: {\n presence: {\n message(_key: string, _value: string, model: Gas): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n specification: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n code: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n composition: {\n presence: {\n message(_key: string, _value: string, model: Gas): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'gas',\n symbol: { required: true },\n composition: { required: true },\n specification: { required: true },\n code: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n gas: Gas;\n }\n}\n","import { computed } from '@ember/object';\nimport { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport FileUpload from './file-upload';\n\nexport default class GeneralDrawing extends BaseModel {\n @attr('string')\n declare title?: string;\n\n @attr('string')\n declare referenceNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare drawingContent: AsyncBelongsTo;\n\n @attr('string')\n declare drawingContentPath?: string;\n\n @attr('string', { defaultValue: '0' })\n declare revision: string;\n\n @attr('string')\n declare revisionStatus?: string;\n\n @attr('number')\n declare createdOn: number;\n\n get active(): boolean {\n return this.revisionStatus === 'ACT';\n }\n\n get visualLabel(): string {\n return this.referenceNumber || '';\n }\n\n @computed('referenceNumber', 'revision')\n get visualLabelWithRev(): string {\n return `${this.referenceNumber} (Rev. ${this.revision})`;\n }\n\n validations = {\n title: { presence: true },\n referenceNumber: { presence: true },\n revision: { presence: true },\n };\n\n metadata = {\n modelName: 'general-drawing',\n title: { required: true },\n referenceNumber: { required: true },\n revision: { required: true },\n };\n\n updateDrawingReference = memberAction({ path: 'updateDrawingReference', type: 'PUT' });\n\n createRevision = memberAction({ path: 'createRevision', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'general-drawing': GeneralDrawing;\n }\n}\n","import Model, { belongsTo, attr } from '@ember-data/model';\nimport WeldLayerConfiguration from './weld-layer-configuration';\n\nexport default class GrooveDesignWeldLayerCopy extends Model {\n @attr('string')\n declare description?: string;\n\n @attr('string')\n declare longDescription?: string;\n\n @belongsTo('weld-layer-configuration', { async: false })\n declare weldLayerConfiguration: WeldLayerConfiguration;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'groove-design-weld-layer-copy': GrooveDesignWeldLayerCopy;\n }\n}\n","import { hasMany, belongsTo, attr, AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport FileUpload from './file-upload';\nimport WeldingDetail from './welding-detail';\nimport WeldType from './weld-type';\n\n/**\n * Represents a Groove Design (Joint Design/Weld Joint Configuration) in the welding domain.\n *\n * Groove Design defines the geometry and configuration of the joint preparation\n * before welding. The design determines how the base materials are prepared and\n * fitted together, affecting accessibility for welding, required filler material\n * volume, and the mechanical properties of the completed joint.\n *\n * **Components of Groove Design:**\n *\n * - **Joint Type:** How members are oriented (butt, T, corner, lap, edge)\n * - **Groove Type:** Shape of the prepared edge (V, U, J, bevel, square)\n * - **Groove Angle:** Included angle between prepared faces\n * - **Root Opening (Gap):** Space between members at the root\n * - **Root Face (Land):** Unprepared portion at the root\n * - **Radius:** For U and J grooves, the root radius\n *\n * **Common Groove Types:**\n *\n * - **Square groove:** No preparation, used for thin materials\n * - **Single-V groove:** One V-shaped preparation, most common\n * - **Double-V groove:** V-shaped from both sides, reduces distortion\n * - **Single-U groove:** U-shaped prep, reduces filler volume for thick sections\n * - **Single-bevel:** One member beveled, other square (T-joints)\n * - **J-groove:** J-shaped preparation for thick sections\n *\n * **Visual Representation:**\n *\n * The `image` and `renderedImage` fields store graphical representations\n * of the groove design. These diagrams are essential for:\n * - Procedure documentation (WPS/PQR)\n * - Fabrication instructions\n * - Quality inspection reference\n *\n * The `weldTypes` and `weldingDetails` relationships link the groove design\n * to applicable weld type classifications and welding details.\n *\n * @extends BaseModel\n */\nexport default class GrooveDesign extends BaseModel {\n @attr('string')\n declare description?: string;\n\n @attr('string')\n declare longDescription?: string;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare image: AsyncBelongsTo;\n\n @attr()\n declare urlImage?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n @hasMany('welding-detail', { async: true, inverse: null })\n declare weldingDetails: AsyncHasMany;\n\n @hasMany('weld-type', { async: true, inverse: null })\n declare weldTypes: AsyncHasMany;\n\n @attr('string')\n declare grooveType?: string;\n\n @attr('string')\n declare jointType?: string;\n\n @attr()\n declare imageState?: string;\n\n @attr('string')\n declare imageSituation?: string;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare renderedImage: AsyncBelongsTo;\n\n @attr('string')\n declare renderedImagePath?: string;\n\n @attr('date')\n declare modifiedOn: string;\n\n @attr('number')\n declare createdById: number;\n\n get visualLabel(): string {\n return this.description || '';\n }\n\n validations = {\n description: { presence: true },\n longDescription: { presence: true },\n image: {\n custom: {\n validation(_key: string, value: FileUpload): boolean {\n if (value) {\n if (!isEmpty(get(value, 'id'))) {\n return true;\n }\n }\n return false;\n },\n\n message(_key: string, _value: string, model: GrooveDesign): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'groove-design',\n description: { required: true },\n longDescription: { required: true },\n image: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'groove-design': GrooveDesign;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport PQRModel from './pqr';\n\n/**\n * Represents a Hardness Test Line (result row) in a PQR's destructive testing section.\n *\n * Hardness testing measures the resistance of the material to indentation and\n * is used to verify that welding has not created excessively hard or soft zones\n * that could affect service performance or indicate potential problems.\n *\n * **Test Purpose:**\n * - Verify hardness levels are within acceptable limits\n * - Detect excessively hard HAZ that could be susceptible to cracking\n * - Confirm effectiveness of PWHT in reducing hardness\n * - Identify potential for hydrogen-induced cracking (high hardness = higher risk)\n *\n * **Test Locations:**\n * Hardness traverses typically measure across the weld cross-section:\n *\n * - **Base Metal (BM):** Unaffected parent material on each side\n * - **Heat-Affected Zone (HAZ):** Material affected by welding heat\n * - **Weld Metal (Deposited Metal):** The filler material deposited\n *\n * For dissimilar material welds, both sides are measured separately (hence\n * \"baseMetal2\" and \"heatAffectedZone2\" properties for the second base material).\n *\n * **Recorded Values:**\n *\n * Each zone typically has multiple readings (Value1, Value2, Value3) and may\n * include a calculated average (HardnessNumber). Values are typically in:\n * - HV (Vickers hardness) - most common for welding\n * - HB (Brinell hardness)\n * - HRC (Rockwell C hardness)\n *\n * **Acceptance Criteria:**\n * Maximum hardness limits depend on material type, standard, and service:\n * - Carbon steels: Often max 350 HV\n * - Low-alloy steels: Often max 350-400 HV\n * - Sour service (H2S): Often max 248 HV (per NACE standards)\n *\n * Excessive HAZ hardness may require additional PWHT or procedure modification.\n *\n * @extends BaseModel\n */\nexport default class HardnessTestLine extends BaseModel {\n @attr('number')\n declare orderNum?: number;\n\n @attr('number')\n declare baseMetalHardnessNumber?: number;\n\n @attr('number')\n declare baseMetalHardnessValue1?: number;\n\n @attr('number')\n declare baseMetalHardnessValue2?: number;\n\n @attr('number')\n declare baseMetalHardnessValue3?: number;\n\n @attr('number')\n declare heatAffectedHardnessNumber?: number;\n\n @attr('number')\n declare heatAffectedHardnessValue1?: number;\n\n @attr('number')\n declare heatAffectedHardnessValue2?: number;\n\n @attr('number')\n declare heatAffectedHardnessValue3?: number;\n\n @attr('number')\n declare depositedMetalHardnessNumber?: number;\n\n @attr('number')\n declare depositedMetalHardnessValue1?: number;\n\n @attr('number')\n declare depositedMetalHardnessValue2?: number;\n\n @attr('number')\n declare depositedMetalHardnessValue3?: number;\n\n @attr('number')\n declare heatAffectedZone2HardnessNumber?: number;\n\n @attr('number')\n declare heatAffectedZone2HardnessValue1?: number;\n\n @attr('number')\n declare heatAffectedZone2HardnessValue2?: number;\n\n @attr('number')\n declare heatAffectedZone2HardnessValue3?: number;\n\n @attr('number')\n declare baseMetal2HardnessNumber?: number;\n\n @attr('number')\n declare baseMetal2HardnessValue1?: number;\n\n @attr('number')\n declare baseMetal2HardnessValue2?: number;\n\n @attr('number')\n declare baseMetal2HardnessValue3?: number;\n\n @belongsTo('pqr')\n declare pqr: PQRModel;\n\n get visualLabel() {\n return this.baseMetalHardnessNumber;\n }\n\n validations = {\n baseMetalHardnessNumber: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n baseMetalHardnessValue1: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n baseMetalHardnessValue2: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n baseMetalHardnessValue3: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n heatAffectedHardnessNumber: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n heatAffectedHardnessValue1: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n heatAffectedHardnessValue2: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n heatAffectedHardnessValue3: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n depositedMetalHardnessNumber: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n depositedMetalHardnessValue1: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n depositedMetalHardnessValue2: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n depositedMetalHardnessValue3: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n heatAffectedZone2HardnessNumber: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n heatAffectedZone2HardnessValue1: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n heatAffectedZone2HardnessValue2: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n heatAffectedZone2HardnessValue3: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n baseMetal2HardnessNumber: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n baseMetal2HardnessValue1: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n baseMetal2HardnessValue2: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n\n baseMetal2HardnessValue3: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n onlyInteger: true,\n },\n },\n };\n\n metadata = {\n modelName: 'hardness-test-line',\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'hardness-test-line': HardnessTestLine;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport ComponentDrawing from './component-drawing';\nimport GeneralDrawing from './general-drawing';\nimport TestInspectionClass from './test-inspection-class';\nimport FileUpload from './file-upload';\nimport { isEmpty } from '@ember/utils';\nimport { get, computed } from '@ember/object';\n\nconst { ARCHIVAL_STATE } = Constants;\n\nexport default class Ieis extends BaseModel {\n @attr('string')\n declare ieisNumber?: string;\n\n @attr('string', {\n defaultValue: '0',\n })\n declare revision: string;\n\n @belongsTo('welding-procedure-specification', { async: false, inverse:null })\n declare wps: any;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare pdfFile: FileUpload;\n\n @attr('string')\n declare description?: string;\n\n @attr('string')\n declare notes?: string;\n\n @attr('string')\n declare pressureClass?: string;\n\n @attr('string')\n declare specification?: string;\n\n @attr('string')\n declare product?: string;\n\n @attr('number')\n declare operatingTemperature?: number;\n\n @attr('date')\n declare emissionDate?: Date;\n\n @attr('string')\n declare equipment?: string;\n\n @belongsTo('test-inspection-class', { async: false, inverse: null })\n declare lineClass: TestInspectionClass;\n\n @belongsTo('general-drawing', { async: false, inverse: null })\n declare referenceDrawing: GeneralDrawing;\n\n @belongsTo('component-drawing', { async: false, inverse: null })\n declare componentDrawing: ComponentDrawing;\n\n @attr('string', { defaultValue: ARCHIVAL_STATE.ACTIVE })\n declare archivalState: string;\n\n @attr({\n defaultValue() {\n return {};\n },\n })\n declare additionalData: any;\n\n @computed('archivalState')\n get isArchived(): boolean {\n return this.archivalState === ARCHIVAL_STATE.ARCHIVED;\n }\n\n @computed('archivalState')\n get isActive() {\n return this.archivalState === ARCHIVAL_STATE.ACTIVE;\n }\n\n validations = {\n ieisNumber: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n revision: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n wps: {\n custom: {\n validation(_key: string, value: any, _model: Ieis) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n },\n\n operatingTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: -9999.99,\n lessThanOrEqualTo: 9999.99,\n },\n },\n };\n\n metadata = {\n modelName: 'ieis',\n ieisNumber: {\n required: true,\n },\n\n revision: {\n required: true,\n },\n\n wps: {\n required: true,\n },\n };\n\n archive = memberAction({ path: 'archive', type: 'PUT' });\n\n unarchive = memberAction({ path: 'unarchive', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n ieis: Ieis;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport PQRModel from './pqr';\n\n/**\n * Represents an Impact Test Line (result row) in a PQR's destructive testing section.\n *\n * Impact testing (typically Charpy V-notch testing) measures the toughness of\n * the weld metal, heat-affected zone (HAZ), and base material at specified\n * temperatures. This test is critical for materials that will operate at low\n * temperatures or in applications requiring fracture toughness.\n *\n * **Test Purpose:**\n * - Measure energy absorption capability (toughness) at specified temperature\n * - Verify material's resistance to brittle fracture\n * - Ensure weld properties meet minimum requirements for service conditions\n * - Evaluate HAZ toughness which may be degraded by welding thermal cycles\n *\n * **Test Procedure:**\n * A notched specimen is cooled to the test temperature and struck by a\n * pendulum hammer. The energy absorbed during fracture is measured.\n *\n * **Recorded Values:**\n *\n * - **testPieceLocation:** Where the notch was positioned (WM, HAZ, FL, BM)\n * - WM: Weld Metal\n * - HAZ: Heat-Affected Zone\n * - FL: Fusion Line\n * - BM: Base Metal\n * - **requirements:** Minimum energy required (Joules or ft-lbs)\n * - **value1Energy, value2Energy, value3Energy:** Individual specimen results\n * - **averageEnergy:** Average of the three specimens\n * - **shearPercentage:** Percentage of ductile (shear) fracture appearance\n * - **lateralExpansion:** Lateral expansion measurement (mm or mils)\n *\n * **Acceptance Criteria:**\n * Both individual values and average must meet minimum requirements.\n * One value may be below the minimum if others compensate (per standard rules).\n *\n * @extends BaseModel\n */\nexport default class ImpactTestLine extends BaseModel {\n @attr('number')\n declare orderNum?: number;\n\n @attr('string')\n declare testPieceLocation?: string;\n\n @attr('number')\n declare requirements?: number;\n\n @attr('number')\n declare value1Energy?: number;\n\n @attr('number')\n declare value2Energy?: number;\n\n @attr('number')\n declare value3Energy?: number;\n\n @attr('number')\n declare shearPercentage?: number;\n\n @attr('number')\n declare lateralExpansion?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare averageEnergy?: number;\n\n @belongsTo('pqr')\n declare pqr: PQRModel;\n\n metadata = {\n modelName: 'impact-test-line',\n };\n\n isLineEmpty(): boolean {\n let allEmpty =\n isEmpty(this.testPieceLocation) &&\n isEmpty(this.requirements) &&\n isEmpty(this.value1Energy) &&\n isEmpty(this.value2Energy) &&\n isEmpty(this.value3Energy) &&\n isEmpty(this.shearPercentage) &&\n isEmpty(this.lateralExpansion) &&\n isEmpty(this.averageEnergy);\n return allEmpty;\n }\n\n validations = {\n testPieceLocation: {\n length: [0, 30],\n },\n\n requirements: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n value1Energy: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n value2Energy: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n value3Energy: {\n numericality: {\n allowBlank: true,\n onlyInteger: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n averageEnergy: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'impact-test-line': ImpactTestLine;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents an Industry Code (Standards Organization Code) in the welding domain.\n *\n * Industry Code identifies the standards organization or regional code system\n * that governs welding requirements. Different regions and industries follow\n * different standards bodies, and this classification enables the system to\n * apply appropriate rules and terminology.\n *\n * **Major Industry Code Systems:**\n *\n * **ISO (International Organization for Standardization):**\n * - International standards, widely adopted globally\n * - Standards: ISO 15614, ISO 9606, ISO 14731\n * - Group system: Numeric (e.g., 1.1, 8.1, 10.1)\n * - Position notation: PA, PB, PC, PD, PE, PF, PG\n *\n * **ASME (American Society of Mechanical Engineers):**\n * - Primary US standard for pressure equipment\n * - Standards: ASME Section IX, B31.1, B31.3\n * - Group system: P-Numbers and Group Numbers (e.g., P1 Gr1)\n * - Position notation: 1G, 2G, 3G, 4G, 5G, 6G\n *\n * **AWS (American Welding Society):**\n * - US standard primarily for structural welding\n * - Standards: AWS D1.1, D1.2, D1.5, D1.6\n * - Terminology: Groove weld vs. butt weld\n * - Position notation: 1G, 2G, 3G, 4G, 5G, 6G\n *\n * **EN (European Standards):**\n * - European adoption of ISO standards with regional modifications\n * - Standards: EN ISO 15614, EN ISO 9606\n * - Generally follows ISO conventions\n *\n * **Properties:**\n *\n * - **code:** The code identifier (ISO, ASME, AWS, EN)\n * - **region:** Geographic region where the code is primarily applicable\n *\n * The Industry Code determines:\n * - Material grouping system used\n * - Position designation terminology\n * - Qualification range calculation rules\n * - Documentation format requirements\n *\n * @extends BaseModel\n */\nexport default class IndustryCode extends BaseModel {\n @attr('string')\n declare code: string;\n\n @attr('string')\n declare region?: string;\n\n get visualLabel(): string {\n return this.code || '';\n }\n\n validations = {\n code: {\n presence: {\n message(_key: string, _value: string, model: IndustryCode): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n\n region: {\n presence: {\n message(_key: string, _value: string, model: IndustryCode): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'industry-code',\n code: {\n required: true,\n },\n\n region: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'industry-code': IndustryCode;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport ExaminingBody from './examining-body';\nimport FileUpload from './file-upload';\n\n/**\n * Represents a Welding Inspector in the welding management system.\n *\n * A Welding Inspector is a qualified individual responsible for verifying that\n * welding activities comply with applicable codes, standards, specifications,\n * and project requirements. Inspectors play a critical role in quality assurance\n * throughout the fabrication process.\n *\n * **Levels of Inspection:**\n *\n * **Visual Welding Inspector (VWI / CSWIP 3.0 / AWS-CWI):**\n * - Performs visual examination of welds\n * - Verifies welder qualifications and WPS compliance\n * - Reviews documentation and records\n * - First-line quality verification\n *\n * **Senior Welding Inspector (SWI / CSWIP 3.1):**\n * - All VWI responsibilities\n * - Reviews and approves welding procedures\n * - Supervises inspection activities\n * - Technical guidance for quality issues\n *\n * **Welding Inspection Technician (CSWIP 3.2):**\n * - Specialized inspection roles\n * - Advanced interpretation of codes and standards\n * - Quality management responsibilities\n *\n * **Inspection Responsibilities:**\n *\n * **Before Welding:**\n * - Review WPS, PQR, and welder qualifications\n * - Verify base material certifications and identification\n * - Check filler material certifications and storage\n * - Inspect joint preparation and fit-up\n * - Verify preheat temperature (if required)\n * - Confirm welding equipment calibration\n *\n * **During Welding:**\n * - Monitor welding parameters (where accessible)\n * - Verify interpass temperature control\n * - Check for visible defects between passes\n * - Observe welder technique compliance\n * - Verify back-gouging (if required)\n *\n * **After Welding:**\n * - Visual examination of completed welds\n * - Dimensional verification\n * - Witness or review NDT results\n * - PWHT verification (if required)\n * - Documentation review and acceptance\n *\n * **Certification Bodies:**\n * - AWS (American Welding Society): CWI, SCWI\n * - TWI/CSWIP (UK): 3.0, 3.1, 3.2 certificates\n * - ASNT (American Society for Nondestructive Testing)\n * - Examining bodies per ISO 17024\n *\n * **Key Attributes:**\n * - `inspectorId`: Company or project-specific identifier\n * - `inspectorStamp`: Unique stamp for document authentication\n * - `inspectorName`: Full name of the inspector\n * - `inspectorType`: Certification level or specialization\n * - `examiningBody`: Organization that certified the inspector\n *\n * **Documentation:**\n * Inspectors typically maintain:\n * - Personal qualification records\n * - Vision test certificates (usually annual)\n * - Certification documents from examining bodies\n * - Training records for code updates\n *\n * **Relationship to Examining Body:**\n * The `examiningBody` relationship links to the organization (e.g., TWI, AWS)\n * that certified the inspector and maintains their qualification records.\n *\n * @extends BaseModel\n *\n * @example\n * // Creating an inspector record\n * const inspector = store.createRecord('inspector', {\n * inspectorName: 'Jane Doe',\n * inspectorStamp: 'JD-001',\n * inspectorId: 'INS-2024-042',\n * inspectorType: 'CSWIP 3.1',\n * examiningBody: twiCertification\n * });\n */\nexport default class Inspector extends BaseModel {\n @attr('string')\n declare inspectorName?: string;\n\n @attr('string')\n declare inspectorStamp?: string;\n\n @attr('string')\n declare inspectorId?: string;\n\n @attr('string')\n declare inspectorType?: string;\n\n @attr('date')\n declare dateBirth?: Date;\n\n @belongsTo('examining-body', { async: true, inverse: null })\n declare examiningBody: AsyncBelongsTo;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare inspectorReport: AsyncBelongsTo;\n\n @attr('string')\n declare inspectorReportPath: string;\n\n get visualLabel(): string {\n return this.inspectorName || '';\n }\n\n validations = {\n inspectorName: { presence: true },\n inspectorStamp: { presence: true },\n };\n\n metadata = {\n modelName: 'inspector',\n inspectorName: { required: true },\n inspectorStamp: { required: true },\n };\n\n get name() {\n return this.inspectorName;\n }\n\n get stamp() {\n return this.inspectorStamp;\n }\n\n createInspectorReport = memberAction({ path: 'createInspectorReport' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n inspector: Inspector;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class MiscellaneousCertificateType extends BaseModel {\n @attr('boolean')\n declare system?: boolean;\n\n @attr('string')\n declare type?: string;\n\n get visualLabel(): string {\n return this.type || '';\n }\n\n validations = {\n type: {\n presence: {\n message(_key: string, _value: string, model: MiscellaneousCertificateType): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'miscellaneous-certificate-type',\n type: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'miscellaneous-certificate-type': MiscellaneousCertificateType;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport { computed, get } from '@ember/object';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport Constants from 'weldnote/utils/constants';\nimport FileUpload from './file-upload';\nimport MiscellaneousCertificateType from './miscellaneous-certificate-type';\nimport Company from './company';\nimport Welder from './welder';\n\nconst { MISCELLANEOUS_CERTIFICATE_STATE } = Constants;\n\nexport default class MiscellaneousCertificate extends BaseModel {\n @attr('string')\n declare certificateNumber?: string;\n\n @attr('date')\n declare expirationDate?: Date;\n\n //@ts-ignore\n @attr('decimal-value')\n declare requalificationPeriod?: number;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare certificateDocument: AsyncBelongsTo;\n\n @belongsTo('miscellaneous-certificate-type', { async: true, inverse: null })\n declare type: AsyncBelongsTo;\n\n @attr('string')\n declare certificateState?: string;\n\n @attr('string')\n declare notes?: string;\n\n @belongsTo('company', { async: true, inverse: null })\n declare company: AsyncBelongsTo;\n\n @belongsTo('welder', { async: false, inverse: null })\n declare certificatePerson: Welder;\n\n get visualLabel() {\n return this.certificateNumber;\n }\n\n validations = {\n certificateNumber: { presence: true },\n type: { presence: true },\n certificatePerson: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n requalificationPeriod: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99.99,\n },\n },\n };\n\n metadata = {\n modelName: 'miscellaneous-certificate',\n certificateNumber: { required: true },\n type: { required: true },\n certificatePerson: { required: true },\n };\n\n @computed('requalificationPeriod', 'expirationDate')\n get canRevalidate() {\n let { requalificationPeriod, expirationDate } = this;\n if (\n requalificationPeriod &&\n !isEmpty(requalificationPeriod) &&\n !isNaN(requalificationPeriod) &&\n !isEmpty(expirationDate)\n ) {\n return true;\n }\n return false;\n }\n\n @computed('certificateState')\n get isArchived(): boolean {\n return this.certificateState === MISCELLANEOUS_CERTIFICATE_STATE.ARCHIVED;\n }\n\n get isExpired() {\n return this.certificateState === MISCELLANEOUS_CERTIFICATE_STATE.EXPIRED;\n }\n\n revalidateCertificate() {\n if (this.canRevalidate) {\n return this.revalidate({});\n }\n return false;\n }\n\n revalidate = memberAction({ path: 'revalidate' });\n\n archive = memberAction({ path: 'archiveCertificate' });\n\n unarchive = memberAction({ path: 'unarchiveCertificate' });\n\n duplicate = memberAction({ path: 'duplicate' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'miscellaneous-certificate': MiscellaneousCertificate;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport FileUpload from './file-upload';\nimport NonDestructiveTesting from './non-destructive-testing';\n\nexport default class NdtCredential extends BaseModel {\n @attr('string')\n declare number: string;\n\n @belongsTo('non-destructive-testing', { async: false, inverse: null })\n declare testType: NonDestructiveTesting;\n\n @attr('string')\n declare level: 'L1' | 'L2' | 'L3';\n\n @attr('date')\n declare validUntil: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare certificate: FileUpload;\n\n get visualLabel() {\n return this.number;\n }\n\n validations = {\n number: {\n presence: true,\n custom: {\n validation(_key: string, value: any, model: NdtCredential) {\n if (isEmpty(value)) return true; // presence handles empty\n const duplicates = model.store\n .peekAll('ndt-credential')\n .filter(\n (c: NdtCredential) => c !== model && !get(c, 'isNew') && get(c, 'number') === value\n );\n return duplicates.length === 0;\n },\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('model.ndt-credential.number.duplicate');\n },\n },\n },\n testType: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n level: { presence: true },\n validUntil: { presence: true },\n };\n\n metadata = {\n modelName: 'ndt-credential',\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'ndt-credential': NdtCredential;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport FileUpload from './file-upload';\nimport NonDestructiveTesting from './non-destructive-testing';\nimport Inspector from './inspector';\n\nexport default class NdtReportCertificate extends BaseModel {\n @attr('string')\n declare ndtReportNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare certificate: FileUpload;\n\n @attr('string')\n declare certificatePath?: string;\n\n @attr('date')\n declare reportDate?: string;\n\n @belongsTo('non-destructive-testing', { async: false })\n declare typeOfTest: NonDestructiveTesting;\n\n @belongsTo('inspector', { async: true, inverse: null })\n declare inspector: AsyncBelongsTo;\n\n get visualLabel() {\n return this.ndtReportNumber;\n }\n\n validations = {\n ndtReportNumber: { presence: true },\n };\n\n metadata = {\n modelName: 'ndt-report-certificate',\n listRoute: 'ndt-report-certificates',\n editRoute: 'ndt-report-certificate',\n ndtReportNumber: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'ndt-report-certificate': NdtReportCertificate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class NonDestructiveTesting extends BaseModel {\n @attr('string')\n declare designation?: string;\n\n @attr('string')\n declare shortDesignation?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n @attr('string')\n declare typeOfTest?: string;\n\n get visualLabel(): string {\n return `${this.shortDesignation} - ${this.designation}`;\n }\n\n validations = {\n designation: {\n presence: {\n message(_key: string, _value: string, model: NonDestructiveTesting): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n\n shortDesignation: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: NonDestructiveTesting): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n };\n\n metadata = {\n modelName: 'non-destructive-testing',\n designation: {\n required: true,\n },\n\n shortDesignation: {\n required: true,\n },\n\n listRoute: 'non-destructive-testings',\n editRoute: 'non-destructive-testing',\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'non-destructive-testing': NonDestructiveTesting;\n }\n}\n","import Model, { attr } from '@ember-data/model';\n\nexport default class Permission extends Model {\n @attr('string')\n declare permissionId: string;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n permission: Permission;\n }\n}\n","import { computed } from '@ember/object';\nimport { attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class PipingPiece extends BaseModel {\n //@ts-ignore\n @attr('decimal-value')\n declare diameter?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thickness?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterInches?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessInches?: number;\n\n @attr('string')\n declare schedule?: string;\n\n @attr('string')\n declare nominalDiameter?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n @computed('diameter', 'thickness', 'schedule')\n get visualLabel() {\n let label = `${this.diameter} - ${this.thickness}`;\n if (!isEmpty(this.schedule)) {\n label = `${label} - ${this.schedule}`;\n }\n return label;\n }\n\n validations = {\n diameter: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n thickness: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n diameterInches: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n },\n };\n\n metadata = {\n modelName: 'piping-piece',\n diameter: { required: true },\n thickness: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'piping-piece': PipingPiece;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class PlatePiece extends BaseModel {\n //@ts-ignore\n @attr('decimal-value')\n declare thickness?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessInches?: number;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel() {\n return this.thickness;\n }\n\n validations = {\n thickness: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessInches: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n };\n\n metadata = {\n modelName: 'plate-piece',\n thickness: { required: true },\n thicknessInches: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'plate-piece': PlatePiece;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents a Post-Weld Treatment Method in the welding domain.\n *\n * Post-Weld Treatment refers to any thermal or mechanical treatment applied\n * to a weld after completion. These treatments modify the properties of\n * the weld metal and heat-affected zone (HAZ) to meet service requirements.\n *\n * **Post-Weld Heat Treatment (PWHT):**\n *\n * The most common post-weld treatment is heat treatment, which may include:\n *\n * - **Stress Relief / Post-Weld Stress Relief:**\n * Heating to sub-critical temperature to reduce residual stresses without\n * significantly changing microstructure. Common for carbon and low-alloy steels.\n *\n * - **Tempering:**\n * Heating below transformation temperature to reduce hardness and improve\n * toughness of hardened microstructures.\n *\n * - **Normalizing:**\n * Heating above transformation temperature followed by air cooling to refine\n * grain structure and homogenize the microstructure.\n *\n * - **Solution Annealing:**\n * For austenitic stainless steels and nickel alloys to dissolve precipitates\n * and restore corrosion resistance.\n *\n * - **Hydrogen Bake-Out:**\n * Low-temperature heating to allow hydrogen diffusion and prevent hydrogen-\n * induced cracking (also called dehydrogenation heat treatment).\n *\n * **Mechanical Treatments:**\n * - Peening: Surface hammering to induce compressive stresses\n * - Grinding: Surface finishing and stress raiser removal\n *\n * PWHT is often mandatory for certain material thicknesses, material types,\n * or service conditions. When applied, the PWHT parameters (temperature,\n * holding time, heating/cooling rates) become essential variables for the\n * welding procedure qualification.\n *\n * @extends BaseModel\n */\nexport default class PostWeldTreatmentMethod extends BaseModel {\n @attr('string')\n declare designation: string;\n\n @attr('boolean', { defaultValue: false })\n declare system: boolean;\n\n get visualLabel(): string {\n return this.designation || '';\n }\n\n validations = {\n designation: {\n presence: {\n message(_key: string, _value: string, model: PostWeldTreatmentMethod): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'post-weld-treatment-method',\n designation: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'post-weld-treatment-method': PostWeldTreatmentMethod;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a PQR learned mapping in the welding domain.\n *\n * PQR learned mappings store user corrections when auto-mapping fails during\n * PQR digitalization. These mappings capture crowd-sourced improvements that\n * help future PQR processing recognize and correctly map values.\n *\n * Entity types that can be mapped:\n * - WeldType\n * - WeldingProcess\n * - WeldingPosition\n * - ArcTransferMode\n * - TypeCurrentPolarity\n * - ProcessMecanization\n * - WeldingDetail\n * - Gas\n *\n * @extends BaseModel\n */\nexport default class PqrLearnedMapping extends BaseModel {\n @attr('string')\n declare entityType: string;\n\n @attr('string')\n declare parsedValue: string;\n\n @attr('string')\n declare canonicalCode: string;\n\n @attr('number')\n declare usageCount?: number;\n\n @attr('boolean')\n declare isVerified?: boolean;\n\n @attr('date')\n declare createdOn?: Date;\n\n @attr('date')\n declare modifiedOn?: Date;\n\n @attr('date')\n declare lastUsedOn?: Date;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode?: IndustryCode;\n\n get visualLabel(): string {\n return `${this.parsedValue} → ${this.canonicalCode}`;\n }\n\n validations = {\n entityType: {\n presence: {\n message(_key: string, _value: string, model: PqrLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n parsedValue: {\n presence: {\n message(_key: string, _value: string, model: PqrLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n canonicalCode: {\n presence: {\n message(_key: string, _value: string, model: PqrLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n industryCode: {\n presence: {\n message(_key: string, _value: string, model: PqrLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'pqr-learned-mapping',\n listRoute: 'pqr-learned-mappings',\n editRoute: 'pqr-learned-mapping',\n entityType: { required: true },\n parsedValue: { required: true },\n canonicalCode: { required: true },\n industryCode: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'pqr-learned-mapping': PqrLearnedMapping;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\nimport { WeldingStandard } from '../config/types/welding-standard';\n\n/**\n * Represents a Procedure Qualification Record (PQR) Standard in the welding domain.\n *\n * A PQR Standard defines the governing standard or code used to qualify welding procedures.\n * These standards are published by recognized industry bodies (such as ISO, ASME, AWS, EN)\n * and establish the requirements for procedure qualification testing, including test methods,\n * acceptance criteria, and documentation requirements.\n *\n * In welding qualification, the PQR Standard determines:\n * - The testing requirements for qualifying a welding procedure\n * - The essential, non-essential, and supplementary essential variables\n * - The range of approval (qualification range) for the qualified procedure\n * - The mechanical testing requirements (tensile, bend, impact, hardness tests)\n *\n * Common PQR standards include:\n * - ISO 15614 (International)\n * - ASME Section IX (American)\n * - AWS D1.1 (American structural welding)\n * - EN standards (European)\n *\n * @extends BaseModel\n * @implements {WeldingStandard}\n */\nexport default class PqrStandard extends BaseModel implements WeldingStandard {\n @attr('string')\n declare standard: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel() {\n return this.standard;\n }\n\n get industryCodeId(): string {\n let code = get(this, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n validations = {\n standard: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: PqrStandard): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n\n code: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: PqrStandard): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n };\n\n metadata = {\n modelName: 'pqr-standard',\n standard: { required: true },\n code: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'pqr-standard': PqrStandard;\n }\n}\n","import { service } from '@ember/service';\nimport { attr, belongsTo } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport {\n fromMilimeterSecondToMeterMinute,\n fromMilimeterSecondToMilimeterMinute,\n} from 'weldnote/utils/unit-system/speed';\nimport TypeCurrentPolarity from './type-current-polarity';\nimport ArcTransferMode from './arc-transfer-mode';\nimport PQRModel from './pqr';\nimport UserSessionService from 'weldnote/services/user-session';\nimport UnitSystemService from 'weldnote/services/unit-system';\n\nconst { WELDING_LAYER_OPTIONS } = Constants;\n\n/**\n * Represents a PQR Welding Parameter record (a single row in the welding parameters table).\n *\n * PQR Welding Parameters document the actual welding conditions used during\n * procedure qualification testing. These parameters establish the qualified\n * ranges that must be maintained during production welding using the\n * corresponding WPS.\n *\n * **Essential Welding Parameters:**\n *\n * **Electrical Parameters:**\n * - **currentMinimum / currentMaximum:** Welding current range in amperes (A)\n * - Affects heat input, penetration, and deposition rate\n * - **voltageMinimum / voltageMaximum:** Arc voltage range in volts (V)\n * - Affects arc length, bead profile, and heat input\n * - **typeCurrent:** Type of current and polarity (DC+, DC-, AC, Pulsed)\n * - Affects penetration and heat distribution\n *\n * **Speed Parameters:**\n * - **travelSpeedMinimum / travelSpeedMaximum:** Welding travel speed\n * - Affects heat input, bead shape, and productivity\n * - Measured in mm/min (metric) or in/min (imperial)\n * - **wireFeedSpeedMinimum / wireFeedSpeedMaximum:** Wire feed rate\n * - For GMAW/FCAW/SAW processes\n * - Measured in m/min (metric) or in/min (imperial)\n *\n * **Heat Input:**\n * - **heatInputMinimum / heatInputMaximum:** Calculated heat input in kJ/mm\n * - Heat Input = (Voltage × Current × 60) / (Travel Speed × 1000)\n * - Critical for HAZ properties and distortion control\n *\n * **Other Parameters:**\n * - **passNumber:** Identifies specific pass(es) these parameters apply to\n * - **layer:** Indicates weld layer (Root, Fill, Cap)\n * - **arcTransferMode:** Metal transfer mode for GMAW (short-circuit, spray, etc.)\n * - **fillerMaterialDiameters:** Wire/electrode diameters used\n *\n * **Layer-Specific Parameters:**\n * The `layer` property (Root/Fill/Cap) links parameters to the appropriate\n * welding process and filler material defined in the parent PQR for that layer.\n *\n * @extends BaseModel\n */\nexport default class PqrWeldingParameter extends BaseModel {\n @service()\n declare userSession: UserSessionService;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @attr('number')\n declare orderNum?: number;\n\n @attr('string')\n declare passNumber?: string;\n\n @attr()\n declare fillerMaterialDiameters?: string;\n\n @attr('number')\n declare currentMinimum?: number;\n\n @attr('number')\n declare currentMaximum?: number;\n\n @attr('number')\n declare voltageMinimum?: number;\n\n @attr('number')\n declare voltageMaximum?: number;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrent: TypeCurrentPolarity;\n\n //@ts-ignore\n @attr('decimal-value')\n declare wireFeedSpeedMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare wireFeedSpeedMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare travelSpeedMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare travelSpeedMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMaximum?: number;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferMode: ArcTransferMode;\n\n @belongsTo('pqr', { async: false, inverse: 'weldingParameters' })\n declare pqr: PQRModel;\n\n @attr('string')\n declare layer?: string;\n\n @attr('string')\n declare unitSystem?: string;\n\n @attr({\n defaultValue() {\n return {};\n },\n })\n declare additionalData?: string;\n\n get travelSpeedUnit(): string {\n return this.units.getTravelSpeedUnit(this.pqr.unitSystem || '');\n }\n\n get wireSpeedUnit(): string {\n return this.units.getWireSpeedUnit(this.pqr.unitSystem || '');\n }\n\n get isMetricSystem(): boolean {\n return this.units.isMetricSystem(this.pqr.unitSystem || this.userSession.unitSystem || '');\n }\n\n get isImperialSystem(): boolean {\n return this.units.isImperialSystem(this.pqr.unitSystem || this.userSession.unitSystem || '');\n }\n\n metadata = {\n modelName: 'pqr-welding-parameter',\n passNumber: { required: true },\n currentMinimum: { required: true },\n currentMaximum: { required: true },\n voltageMinimum: { required: true },\n voltageMaximum: { required: true },\n typeCurrent: { required: true },\n layer: { required: true },\n };\n\n validations = {\n passNumber: {\n presence: {\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n length: [0, 10],\n },\n\n currentMinimum: {\n presence: {\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMinimum('currentMaximum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.getBelowMaximumMessage(get(model, 'currentMaximum'), '(A)');\n },\n },\n },\n\n currentMaximum: {\n presence: {\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMaximum('currentMinimum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.getAboveMinimumMessage(get(model, 'currentMinimum'), '(A)');\n },\n },\n },\n\n voltageMinimum: {\n presence: {\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMinimum('voltageMaximum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.getBelowMaximumMessage(get(model, 'voltageMaximum'), '(V)');\n },\n },\n },\n\n voltageMaximum: {\n presence: {\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMaximum('voltageMinimum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.getAboveMinimumMessage(get(model, 'voltageMinimum'), '(V)');\n },\n },\n },\n\n typeCurrent: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n wireFeedSpeedMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMinimum('wireFeedSpeedMaximum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getBelowMaximumMessage(\n fromMilimeterSecondToMeterMinute(get(model, 'wireFeedSpeedMaximum')),\n `(${get(model, 'wireSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getBelowMaximumMessage(\n get(model, 'wireFeedSpeedMaximum'),\n `(${get(model, 'wireSpeedUnit')})`\n );\n }\n return '';\n },\n },\n },\n\n wireFeedSpeedMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMaximum('wireFeedSpeedMinimum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getAboveMinimumMessage(\n fromMilimeterSecondToMeterMinute(get(model, 'wireFeedSpeedMinimum')),\n `(${get(model, 'wireSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getAboveMinimumMessage(\n get(model, 'wireFeedSpeedMinimum'),\n `(${get(model, 'wireSpeedUnit')})`\n );\n }\n return '';\n },\n },\n },\n\n heatInputMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMinimum('heatInputMaximum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.getBelowMaximumMessage(get(model, 'heatInputMaximum'), '(kJ/mm)');\n },\n },\n },\n\n heatInputMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMaximum('heatInputMinimum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.getAboveMinimumMessage(get(model, 'heatInputMinimum'), '(kJ/mm)');\n },\n },\n },\n\n travelSpeedMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMinimum('travelSpeedMaximum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getBelowMaximumMessage(\n fromMilimeterSecondToMilimeterMinute(get(model, 'travelSpeedMaximum')),\n `(${get(model, 'travelSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getBelowMaximumMessage(\n get(model, 'travelSpeedMaximum'),\n `(${get(model, 'travelSpeedUnit')})`\n );\n }\n return '';\n },\n },\n },\n\n travelSpeedMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: {\n if(_key: string, value: any): boolean {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PqrWeldingParameter): boolean {\n return model.validateMaximum('travelSpeedMinimum', value);\n },\n\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getAboveMinimumMessage(\n fromMilimeterSecondToMilimeterMinute(get(model, 'travelSpeedMinimum')),\n `(${get(model, 'travelSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getAboveMinimumMessage(\n get(model, 'travelSpeedMinimum'),\n `(${get(model, 'travelSpeedUnit')})`\n );\n }\n return '';\n },\n },\n },\n\n layer: {\n presence: {\n message(_key: string, _value: any, model: PqrWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n validateMinimum(propertyMaximumValue: any, value: any) {\n let maximum = parseFloat(get(this, propertyMaximumValue));\n if (!isEmpty(maximum) && !isNaN(maximum)) {\n let minimum = parseFloat(value);\n return minimum <= maximum;\n }\n return true;\n }\n\n validateMaximum(propertyMinimumValue: any, value: any) {\n let minimum = parseFloat(get(this, propertyMinimumValue));\n if (!isEmpty(minimum) && !isNaN(minimum)) {\n let maximum = parseFloat(value);\n return maximum >= minimum;\n }\n return true;\n }\n\n getBelowMaximumMessage(approvalRange: string | number | undefined, unit = '') {\n if (!approvalRange) {\n return '';\n }\n return this.translate('model-validations.pqr-parameter.must-be-below-maximum', {\n approvalRange,\n unit,\n });\n }\n\n getAboveMinimumMessage(approvalRange: string | number | undefined, unit: string) {\n if (!approvalRange) {\n return '';\n }\n return this.translate('model-validations.pqr-parameter.must-be-above-minimum', {\n approvalRange,\n unit,\n });\n }\n\n @computed(\n 'layer',\n 'pqr.{fillerMaterialRootTestPiece,fillerMaterialFillTestPiece,fillerMaterialCapTestPiece}'\n )\n get fillerMaterialType() {\n if (this.layer === WELDING_LAYER_OPTIONS.ROOT) {\n return this.pqr.fillerMaterialRootTestPiece;\n } else if (this.layer === WELDING_LAYER_OPTIONS.FILL) {\n return this.pqr.fillerMaterialFillTestPiece;\n } else if (this.layer === WELDING_LAYER_OPTIONS.CAP) {\n return this.pqr.fillerMaterialCapTestPiece;\n }\n return null;\n }\n\n @computed(\n 'layer',\n 'pqr.{weldingProcessRootTestPiece,weldingProcessFillTestPiece,weldingProcessCapTestPiece}'\n )\n get weldingProcess() {\n if (this.pqr == null) {\n // This should not really happen here? what gives\n return null;\n }\n if (this.layer === WELDING_LAYER_OPTIONS.ROOT) {\n return get(this.pqr, 'weldingProcessRootTestPiece');\n } else if (this.layer === WELDING_LAYER_OPTIONS.FILL) {\n return get(this.pqr, 'weldingProcessFillTestPiece');\n } else if (this.layer === WELDING_LAYER_OPTIONS.CAP) {\n return get(this.pqr, 'weldingProcessCapTestPiece');\n }\n return null;\n }\n}\n","import { service } from '@ember/service';\nimport { attr, belongsTo, hasMany, SyncHasMany } from '@ember-data/model';\nimport { assert } from '@ember/debug';\nimport { get, computed, set } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport moment from 'moment';\nimport { hash } from 'rsvp';\nimport BaseModel from 'weldnote/models/base-model';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport {\n isCompleteJointPenetrationButtWeld,\n isFilletWeld,\n isPartialPenetrationButtWeldASME,\n} from 'weldnote/utils/rules/weld-type';\nimport { isBothSides, isMultiLayer, isSingleLayer } from 'weldnote/utils/rules/welding-detail';\nimport { isESW } from 'weldnote/utils/rules/welding-process';\nimport { isStandardAWS, isStandardAWSD15 } from 'weldnote/utils/standards';\nimport { validateFillerMaterialAWS } from 'weldnote/utils/validation/filler-material';\nimport { thicknessValidation } from 'weldnote/utils/validation/thickness';\nimport { weldingDetailValidation } from 'weldnote/utils/validation/welding-details';\nimport PqrStandard from './pqr-standard';\nimport ConstructionStandard from './construction-standard';\nimport ExaminingBody from './examining-body';\nimport WeldType from './weld-type';\nimport WeldingProcess from './welding-process';\nimport WeldingDetail from './welding-detail';\nimport WeldingPosition from './welding-position';\nimport ArcTransferMode from './arc-transfer-mode';\nimport TypeCurrentPolarity from './type-current-polarity';\nimport BaseMaterial from './base-material';\nimport BaseMaterialGroup from './base-material-group';\nimport PreparationMethod from './preparation-method';\nimport FillerMaterial from './filler-material';\nimport FillerMaterialCommercialDesignation from './filler-material-commercial-designation';\nimport Gas from './gas';\nimport GasCommercialDesignation from './gas-commercial-designation';\nimport Flux from './flux';\nimport FluxCommercialDesignation from './flux-commercial-designation';\nimport PostWeldTreatmentMethod from './post-weld-treatment-method';\nimport TensileTestLine from './tensile-test-line';\nimport BendTestLine from './bend-test-line';\nimport ImpactTestLine from './impact-test-line';\nimport HardnessTestLine from './hardness-test-line';\nimport FileUpload from './file-upload';\nimport GrooveDesign from './groove-design';\nimport WeldLayerConfiguration from './weld-layer-configuration';\nimport ProcessMecanization from './process-mecanization';\nimport CertificationSpecialRequirement from './certification-special-requirement';\nimport Welder from './welder';\nimport Staff from './staff';\nimport PqrWeldingParameter from './pqr-welding-parameter';\nimport IndustryCode from './industry-code';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport UserSessionService from 'weldnote/services/user-session';\nimport Company from './company';\n\nconst { PQR } = PQRRules;\n\nconst { LAYER_OPTIONS, UNIT_SYSTEM, UNITS, PRODUCT_TYPE, OVERLAY_TYPE_OPTIONS, ARCHIVAL_STATE } =\n Constants;\n\n/**\n * Represents a Procedure Qualification Record (PQR) in the welding management system.\n *\n * A PQR is the official record of the welding variables used during the actual welding\n * of a test coupon (test piece) and the results of the tests conducted on that coupon.\n * It serves as the foundational document that proves a welding procedure can produce\n * acceptable welds under specific conditions.\n *\n * **Industry Standards Compliance:**\n * PQRs are required by major welding codes and standards including:\n * - ASME Section IX (Boiler and Pressure Vessel Code)\n * - AWS D1.1 (Structural Welding Code - Steel)\n * - ISO 15614 (Specification and qualification of welding procedures for metallic materials)\n * - EN ISO 15614-1 (European Standard)\n *\n * **Key Concepts:**\n *\n * **Test Piece vs Approval Range:**\n * - `*TestPiece` attributes: Record the actual values used during qualification welding\n * - `*ApprovalRange` attributes: Define the range of values acceptable for production welding\n *\n * **Weld Layers (Root, Fill, Cap):**\n * - **Root Layer:** The first weld pass that fuses the base metals together at the root of the joint\n * - **Fill Layers:** Intermediate passes that fill the joint after the root pass\n * - **Cap Layer:** The final pass(es) that complete the weld and provide the surface finish\n *\n * **Essential Variables:**\n * Variables that, if changed beyond their qualified range, require re-qualification:\n * - Base materials and their thickness/diameter ranges\n * - Welding processes (GTAW, GMAW, SMAW, SAW, FCAW, etc.)\n * - Filler materials and classifications\n * - Welding positions\n * - Thermal parameters (preheat, interpass, PWHT)\n * - Shielding gases and flow rates\n * - Joint design and backing\n *\n * **Mechanical Testing:**\n * PQRs include results from destructive tests performed on the test coupon:\n * - Tensile tests (ultimate tensile strength, yield strength)\n * - Bend tests (face, root, side bends)\n * - Impact tests (Charpy V-notch toughness)\n * - Hardness tests (HAZ, weld metal, base metal)\n *\n * **Non-Destructive Testing (NDT):**\n * Visual and volumetric examination results:\n * - Visual Testing (VT)\n * - Penetrant Testing (PT)\n * - Magnetic Particle Testing (MT)\n * - Ultrasonic Testing (UT)\n * - Radiographic Testing (RT)\n *\n * **Relationship to WPS:**\n * The PQR supports one or more Welding Procedure Specifications (WPS).\n * The WPS draws its qualified ranges from the PQR's test results.\n *\n * @extends BaseModel\n *\n * @example\n * // A PQR for a GTAW root / SMAW fill procedure on carbon steel pipe\n * const pqr = store.createRecord('pqr', {\n * certificateNumber: 'PQR-2024-001',\n * standard: iso15614Standard,\n * weldingProcessRootTestPiece: gtawProcess,\n * weldingProcessFillTestPiece: smawProcess,\n * baseMaterial1TestPiece: carbonSteelMaterial,\n * thicknessTotalTestPiece: 12.7,\n * productTypeTestPiece: 'PIPE',\n * diameterTestPiece: 168.3\n * });\n */\nclass PQRModel extends BaseModel {\n @service\n declare userSession: UserSessionService;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @attr('string')\n declare certificateNumber?: string;\n\n @belongsTo('company', { async: false, inverse: null })\n declare company: Company;\n\n @attr('string')\n declare address?: string;\n\n @belongsTo('pqr-standard', { async: false, inverse: null })\n declare standard: PqrStandard;\n\n @belongsTo('construction-standard', { async: false, inverse: null })\n declare constructionStandard: ConstructionStandard;\n\n @belongsTo('examining-body', { async: false, inverse: null })\n declare examiningBody: ExaminingBody;\n\n @attr('date')\n declare emissionDate?: string;\n\n // Weld Type\n @belongsTo('weld-type', { async: false, inverse: null })\n declare weldTypeTestPiece?: WeldType | null;\n\n @hasMany('weld-type', { async: false, inverse: null })\n declare weldTypeApprovalRange: SyncHasMany;\n\n // Welding Process\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessRootTestPiece: WeldingProcess;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessFillTestPiece: WeldingProcess;\n\n @hasMany('welding-process', { async: false, inverse: null })\n declare weldingProcessRootApprovalRange: SyncHasMany;\n\n @hasMany('welding-process', { async: false, inverse: null })\n declare weldingProcessFillApprovalRange: SyncHasMany;\n\n // Welding Details\n @hasMany('welding-detail', { async: false, inverse: null })\n declare weldingDetailsTestPiece: SyncHasMany;\n\n @hasMany('welding-detail', { async: false, inverse: null })\n declare weldingDetailsApprovalRange: SyncHasMany;\n\n // Welding Position\n @belongsTo('welding-position', { async: false, inverse: null })\n declare weldingPositionRootTestPiece: WeldingPosition;\n\n @belongsTo('welding-position', { async: false, inverse: null })\n declare weldingPositionFillTestPiece: WeldingPosition;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionRootApprovalRange: SyncHasMany;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionFillApprovalRange: SyncHasMany;\n\n // Arc Transfer Mode\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeRootTestPiece: ArcTransferMode;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeFillTestPiece: ArcTransferMode;\n\n @hasMany('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeRootApprovalRange: SyncHasMany;\n\n @hasMany('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeFillApprovalRange: SyncHasMany;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentRootTestPiece: TypeCurrentPolarity;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentFillTestPiece: TypeCurrentPolarity;\n\n @hasMany('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentRootApprovalRange: SyncHasMany;\n\n @hasMany('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentFillApprovalRange: SyncHasMany;\n\n // Base Material\n @belongsTo('base-material', { async: false, inverse: null })\n declare baseMaterial1TestPiece: BaseMaterial;\n\n @belongsTo('base-material', { async: false, inverse: null })\n declare baseMaterial2TestPiece: BaseMaterial;\n\n @hasMany('base-material-group', { async: false, inverse: null })\n declare baseMaterial1ApprovalRange: SyncHasMany;\n\n @hasMany('base-material-group', { async: false, inverse: null })\n declare baseMaterial2ApprovalRange: SyncHasMany;\n\n // Product Type\n @attr('string')\n declare productTypeTestPiece?: string;\n\n // Welding Thickness\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootTestPiece?: number;\n\n @attr('string')\n declare thicknessRootLayerTestPiece?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillTestPiece?: number;\n\n @attr('string')\n declare thicknessFillLayerTestPiece?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessTotalTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessTotalMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessTotalMaximumApprovalRange?: number;\n\n // Throat Thickness\n //@ts-ignore\n @attr('decimal-value')\n declare throatThicknessTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare throatThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare throatThicknessMaximumApprovalRange?: number;\n\n // Fillet Weld Base Material Thickness\n //@ts-ignore\n @attr('decimal-value')\n declare filletWeldBaseMaterial1ThicknessTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare filletWeldBaseMaterial1ThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare filletWeldBaseMaterial1ThicknessMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare filletWeldBaseMaterial2ThicknessTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare filletWeldBaseMaterial2ThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare filletWeldBaseMaterial2ThicknessMaximumApprovalRange?: number;\n\n // PJP Butt Weld Base Material Thickness\n //@ts-ignore\n @attr('decimal-value')\n declare pjpButtWeldBaseMaterial1ThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare pjpButtWeldBaseMaterial1ThicknessMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare pjpButtWeldBaseMaterial2ThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare pjpButtWeldBaseMaterial2ThicknessMaximumApprovalRange?: number;\n\n // Diameter\n //@ts-ignore\n @attr('decimal-value')\n declare diameterTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterMaximumApprovalRange?: number;\n\n // Branch Angle\n @attr('number')\n declare branchAngleTestPiece?: number;\n\n @attr('number')\n declare branchAngleMinimumApprovalRange?: number;\n\n @attr('number')\n declare branchAngleMaximumApprovalRange?: number;\n\n // Preparation Methods\n @hasMany('preparation-method', { async: false, inverse: null })\n declare preparationMethodsTestPiece?: SyncHasMany;\n\n // Filler Materials\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialRootTestPiece: FillerMaterial;\n\n // Root is currently modeled as a syncronous relations, if this changes look for references\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialRootCommercialDesignationTestPiece: FillerMaterialCommercialDesignation;\n\n @hasMany('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialRootCommercialDesignationApprovalRange: FillerMaterialCommercialDesignation;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialFillTestPiece: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialFillCommercialDesignationTestPiece: FillerMaterialCommercialDesignation;\n\n @hasMany('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialFillCommercialDesignationApprovalRange: SyncHasMany;\n\n @attr()\n declare fillerMaterialRootDiameters?: string;\n\n @attr()\n declare fillerMaterialFillDiameters?: string;\n\n @attr()\n declare fillerMaterialCapDiameters?: string;\n\n @attr({\n defaultValue() {\n return {};\n },\n })\n declare additionalData?: string;\n\n @attr('string')\n declare shieldingRoot?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingRootGasTestPiece: Gas;\n\n @hasMany('gas', { async: false, inverse: null })\n declare shieldingRootGasApprovalRange: SyncHasMany;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingRootGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingRootGasMixture?: string;\n\n @hasMany('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingRootGasCommercialDesignationApprovalRange: SyncHasMany;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingRootFluxTestPiece: Flux;\n\n @hasMany('flux', { async: false, inverse: null })\n declare shieldingRootFluxApprovalRange: SyncHasMany;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingRootFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @hasMany('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingRootFluxCommercialDesignationApprovalRange: SyncHasMany;\n\n @attr('string')\n declare shieldingFill?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingFillGasTestPiece: Gas;\n\n @hasMany('gas', { async: false, inverse: null })\n declare shieldingFillGasApprovalRange: SyncHasMany;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingFillGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingFillGasMixture?: string;\n\n @hasMany('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingFillGasCommercialDesignationApprovalRange: SyncHasMany;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingFillFluxTestPiece: Flux;\n\n @hasMany('flux', { async: false, inverse: null })\n declare shieldingFillFluxApprovalRange: SyncHasMany;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingFillFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @hasMany('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingFillFluxCommercialDesignationApprovalRange: SyncHasMany;\n\n @attr('string')\n declare backingTestPiece?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare backingGasTestPiece: Gas;\n\n @hasMany('gas', { async: false, inverse: null })\n declare backingGasApprovalRange: SyncHasMany;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare backingGasCommercialDesignationTestPiece: SyncHasMany;\n\n @attr('string')\n declare backingGasMixture?: string;\n\n @hasMany('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare backingGasCommercialDesignationApprovalRange: SyncHasMany;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare backingFluxTestPiece: Flux;\n\n @hasMany('flux', { async: false, inverse: null })\n declare backingFluxApprovalRange: SyncHasMany;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare backingFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @hasMany('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare backingFluxCommercialDesignationApprovalRange: SyncHasMany;\n\n @attr('string')\n declare backingFlowRateRoot?: string;\n\n @attr('string')\n declare backingFlowRateFill?: string;\n\n @attr('string')\n declare flowRateRoot?: string;\n\n @attr('string')\n declare flowRateFill?: string;\n\n // Additional Details\n @attr('string')\n declare electrodeType?: string;\n\n @attr('number')\n declare numberOfElectrodes?: number;\n\n @attr('string')\n declare pulsedWeldingDetails?: string;\n\n @attr('string')\n declare weaving?: string;\n\n @attr('string')\n declare contactTubeDistance?: string;\n\n @attr('string')\n declare backGaugingDetails?: string;\n\n // Thermal Parameters\n @attr('number')\n declare preheatTemperatureTestPiece?: number;\n\n @attr('number')\n declare interpassTemperatureTestPiece?: number;\n\n @attr('number')\n declare postHeatTemperatureTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare postWeldHeatTreatmentTimeTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare postWeldHeatTreatmentTimeMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare postWeldHeatTreatmentTimeMaximumApprovalRange?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentTemperatureTestPiece?: number;\n\n @belongsTo('post-weld-treatment-method', { async: false, inverse: null })\n declare postWeldHeatTreatmentMethodTestPiece: PostWeldTreatmentMethod;\n\n @attr('number')\n declare postWeldHeatTreatmentHeatingRateTestPiece?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentCoolingRateTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMaximumApprovalRange?: number;\n\n @attr('number')\n declare preheatTemperatureMinimumApprovalRange?: number;\n\n @attr('number')\n declare preheatTemperatureMaximumApprovalRange?: number;\n\n @attr('number')\n declare interpassTemperatureMinimumApprovalRange?: number;\n\n @attr('number')\n declare interpassTemperatureMaximumApprovalRange?: number;\n\n @attr('number')\n declare postHeatTemperatureMinimumApprovalRange?: number;\n\n @attr('number')\n declare postHeatTemperatureMaximumApprovalRange?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentTemperatureMinimumApprovalRange?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentTemperatureMaximumApprovalRange?: number;\n\n @hasMany('pqr-welding-parameter', { async: false, inverse: 'pqr' })\n declare weldingParameters: SyncHasMany;\n\n get visualLabel() {\n return this.certificateNumber;\n }\n\n @attr('string')\n declare tensileTestName?: string;\n\n @attr('number')\n declare tensileTestTemperature?: number;\n\n @hasMany('tensile-test-line', { async: false, inverse: 'pqr' })\n declare tensileTestLines: SyncHasMany;\n\n @attr('string')\n declare bendTestReport?: string;\n\n @attr('number')\n declare bendTestMandrillDiameter?: number;\n\n @hasMany('bend-test-line', { async: false, inverse: 'pqr' })\n declare bendTestLines: SyncHasMany;\n\n @attr('string')\n declare macroscopicExaminationTestReport?: string;\n\n @attr('string')\n declare macroscopicExaminationObservations?: string;\n\n @attr('string')\n declare impactTestReport?: string;\n\n @attr('boolean')\n declare impactTestRequired?: boolean;\n\n @attr('string')\n declare impactTestType?: string;\n\n @attr('string')\n declare impactTestDimensions?: string;\n\n @attr('number')\n declare impactTestTemperature?: number;\n\n @hasMany('impact-test-line', { async: false, inverse: 'pqr' })\n declare impactTestLines: SyncHasMany;\n\n @attr('string')\n declare hardnessTestReport?: string;\n\n @attr('boolean')\n declare hardnessTestRequired?: boolean;\n\n @attr('string')\n declare hardnessTestType?: string;\n\n @hasMany('hardness-test-line', { async: false, inverse: 'pqr' })\n declare hardnessTestLines: SyncHasMany;\n\n @attr('string')\n declare nonDestructiveVisualTesting?: string;\n\n @attr('string')\n declare nonDestructiveVisualTestingResult?: string;\n\n @attr('string')\n declare nonDestructivePenetrantTesting?: string;\n\n @attr('string')\n declare nonDestructivePenetrantTestingResult?: string;\n\n @attr('string')\n declare nonDestructiveMagneticTesting?: string;\n\n @attr('string')\n declare nonDestructiveMagneticTestingResult?: string;\n\n @attr('string')\n declare nonDestructiveUltrasonicTesting?: string;\n\n @attr('string')\n declare nonDestructiveUltrasonicTestingResult?: string;\n\n @attr('string')\n declare nonDestructiveRadiographicTesting?: string;\n\n @attr('string')\n declare nonDestructiveRadiographicTestingResult?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare grooveAngleMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare grooveAngleMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootFaceMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootFaceMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootGapMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootGapMaximum?: number;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare pqrDocument: FileUpload;\n\n @hasMany('groove-design', { async: false, inverse: null })\n declare grooveDesigns: SyncHasMany;\n\n @hasMany('weld-layer-configuration', { async: false, inverse: null })\n declare weldLayerConfigurations: SyncHasMany;\n\n @attr('number')\n declare torchAngleMinimum?: number;\n\n @attr('number')\n declare torchAngleMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare gasNozzleDiameterRoot?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare gasNozzleDiameterFill?: number;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationRootTestPiece: ProcessMecanization;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationFillTestPiece: ProcessMecanization;\n\n @hasMany('process-mecanization', { async: false, inverse: null })\n declare processMecanizationRootApprovalRange: SyncHasMany;\n\n @hasMany('process-mecanization', { async: false, inverse: null })\n declare processMecanizationFillApprovalRange: SyncHasMany;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessCapTestPiece: WeldingProcess;\n\n @hasMany('welding-process', { async: false, inverse: null })\n declare weldingProcessCapApprovalRange: SyncHasMany;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeCapTestPiece: ArcTransferMode;\n\n @hasMany('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeCapApprovalRange: SyncHasMany;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationCapTestPiece: ProcessMecanization;\n\n @hasMany('process-mecanization', { async: false, inverse: null })\n declare processMecanizationCapApprovalRange: SyncHasMany;\n\n @attr('number')\n declare gasNozzleDiameterCap?: number;\n\n @belongsTo('welding-position', { async: false, inverse: null })\n declare weldingPositionCapTestPiece: WeldingPosition;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionCapApprovalRange: SyncHasMany;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentCapTestPiece: TypeCurrentPolarity;\n\n @hasMany('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentCapApprovalRange: SyncHasMany;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessCapTestPiece?: number;\n\n @attr('string')\n declare thicknessCapLayerTestPiece?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessCapMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessCapMaximumApprovalRange?: number;\n\n @attr('string')\n declare shieldingCap?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingCapGasTestPiece: Gas;\n\n @hasMany('gas', { async: false, inverse: null })\n declare shieldingCapGasApprovalRange: SyncHasMany;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingCapGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @hasMany('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingCapGasCommercialDesignationApprovalRange: SyncHasMany;\n\n @attr('string')\n declare shieldingCapGasMixture?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingCapFluxTestPiece: Flux;\n\n @hasMany('flux', { async: false, inverse: null })\n declare shieldingCapFluxApprovalRange: SyncHasMany;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingCapFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @hasMany('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingCapFluxCommercialDesignationApprovalRange: SyncHasMany;\n\n @attr('string')\n declare flowRateCap?: string;\n\n @attr('string')\n declare backingFlowRateCap?: string;\n\n @attr('number')\n declare numberOfElectrodesFill?: number;\n\n @attr('number')\n declare numberOfElectrodesCap?: number;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialCapTestPiece: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialCapCommercialDesignationTestPiece: FillerMaterialCommercialDesignation;\n\n @hasMany('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialCapCommercialDesignationApprovalRange: SyncHasMany;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial1Thickness?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial1ThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial1ThicknessMaximumApprovalRange?: number;\n\n @attr('number')\n declare baseMaterial1Diameter?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial2Thickness?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial2ThicknessMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial2ThicknessMaximumApprovalRange?: number;\n\n @attr('number')\n declare baseMaterial2Diameter?: number;\n\n @attr('string')\n declare weldingPositionRootDirection?: string;\n\n @attr('string')\n declare weldingPositionFillDirection?: string;\n\n @attr('string')\n declare weldingPositionCapDirection?: string;\n\n @hasMany('certification-special-requirement', { async: false, inverse: null })\n declare specialRequirements: SyncHasMany;\n\n @attr('string')\n declare overlayType?: string;\n\n @attr('number')\n declare postHeatTimeTestPiece?: number;\n\n @attr('number')\n declare postHeatTimeMinimumApprovalRange?: number;\n\n @attr('number')\n declare postHeatTimeMaximumApprovalRange?: number;\n\n @attr('string')\n declare pqrDocumentPath?: string;\n\n @attr('string')\n declare jointType?: string;\n\n @attr('string')\n declare electrodeTypeFill?: string;\n\n @attr('string')\n declare electrodeTypeCap?: string;\n\n @attr('string')\n declare contactTubeDistanceFill?: string;\n\n @attr('string')\n declare contactTubeDistanceCap?: string;\n\n @attr('string')\n declare weavingFill?: string;\n\n @attr('string')\n declare weavingCap?: string;\n\n @attr('string')\n declare tungstenDiameterRoot?: string;\n\n @attr('string')\n declare tungstenDiameterFill?: string;\n\n @attr('string')\n declare tungstenDiameterCap?: string;\n\n @attr('string')\n declare chemicalReportName?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalCarbonContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalManganeseContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalSiliconContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalChromiumContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalNickelContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalMolybdenumContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalCopperContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalPhosphorusContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalSulphurContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalAluminumContent?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare chemicalTitaniumContent?: number;\n\n @attr('number')\n declare overlayNumberOfLayers?: number;\n\n @attr('string')\n declare fillerMaterialElectrodeFormRoot?: string;\n\n @attr('string')\n declare fillerMaterialElectrodeFormFill?: string;\n\n @attr('string')\n declare fillerMaterialElectrodeFormCap?: string;\n\n @attr('string')\n declare fillerMaterialGuideRoot?: string;\n\n @attr('string')\n declare fillerMaterialGuideFill?: string;\n\n @attr('string')\n declare fillerMaterialGuideCap?: string;\n\n @attr('string')\n declare oscillationWidthRoot?: string;\n\n @attr('string')\n declare oscillationWidthFill?: string;\n\n @attr('string')\n declare oscillationWidthCap?: string;\n\n @attr('string')\n declare oscillationFrequencyRoot?: string;\n\n @attr('string')\n declare oscillationFrequencyFill?: string;\n\n @attr('string')\n declare oscillationFrequencyCap?: string;\n\n @attr('string')\n declare oscillationDwellTimeRoot?: string;\n\n @attr('string')\n declare oscillationDwellTimeFill?: string;\n\n @attr('string')\n declare oscillationDwellTimeCap?: string;\n\n @attr('boolean')\n declare supplementalDeviceRoot?: boolean;\n\n @attr('boolean')\n declare supplementalDeviceFill?: boolean;\n\n @attr('boolean')\n declare supplementalDeviceCap?: boolean;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare baseMaterial1TestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare baseMaterial2TestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare fillerMaterialRootTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare fillerMaterialFillTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare fillerMaterialCapTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare visualTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare penetrantTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare magneticTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare ultrasonicTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare radiographicTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare tensileTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare bendTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare macroscopicTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare impactTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare hardnessTestDocument: FileUpload;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare chemicalAnalysisTestDocument: FileUpload;\n\n @attr('string')\n declare baseMaterial1TestDocumentPath?: string;\n\n @attr('string')\n declare baseMaterial2TestDocumentPath?: string;\n\n @attr('string')\n declare fillerMaterialRootTestDocumentPath?: string;\n\n @attr('string')\n declare fillerMaterialFillTestDocumentPath?: string;\n\n @attr('string')\n declare fillerMaterialCapTestDocumentPath?: string;\n\n @attr('string')\n declare visualTestDocumentPath?: string;\n\n @attr('string')\n declare penetrantTestDocumentPath?: string;\n\n @attr('string')\n declare magneticTestDocumentPath?: string;\n\n @attr('string')\n declare ultrasonicTestDocumentPath?: string;\n\n @attr('string')\n declare radiographicTestDocumentPath?: string;\n\n @attr('string')\n declare tensileTestDocumentPath?: string;\n\n @attr('string')\n declare bendTestDocumentPath?: string;\n\n @attr('string')\n declare macroscopicTestDocumentPath?: string;\n\n @attr('string')\n declare impactTestDocumentPath?: string;\n\n @attr('string')\n declare hardnessTestDocumentPath?: string;\n\n @attr('string')\n declare chemicalAnalysisTestDocumentPath?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare pqrReportDocument: FileUpload;\n\n @attr('string')\n declare pqrReportDocumentPath?: string;\n\n @attr('boolean')\n declare pqrReportOutdated?: boolean;\n\n @attr('string')\n declare notes?: string;\n\n @attr('string')\n declare testNotes?: string;\n\n @attr('string')\n declare archivalState?: string;\n\n @hasMany('welder', { async: false, inverse: null })\n declare welders: SyncHasMany;\n\n @attr('string')\n declare testConductedBy?: string;\n\n @belongsTo('welding-procedure-specification', { inverse: null, async: false })\n declare wps: any;\n\n @belongsTo('staff', { async: false, inverse: null })\n declare writtenBy: Staff;\n\n @attr('number')\n declare flowRateProcess1Minimum?: number;\n\n @attr('number')\n declare flowRateProcess1Maximum?: number;\n\n @attr('number')\n declare flowRateProcess2Minimum?: number;\n\n @attr('number')\n declare flowRateProcess2Maximum?: number;\n\n @attr('number')\n declare flowRateProcess3Minimum?: number;\n\n @attr('number')\n declare flowRateProcess3Maximum?: number;\n\n @attr('string')\n declare unitSystem?: string;\n\n hasStandard() {\n return !isEmpty(this.standardId);\n }\n\n clearStandardDependentFields() {\n set(this, 'weldTypeTestPiece', null);\n }\n\n get hasAttachement() {\n return !isEmpty(this.pqrDocumentPath);\n }\n\n get standardId() {\n let { standard } = this;\n if (standard) {\n return get(standard, 'id');\n }\n return '';\n }\n\n validations = {\n certificateNumber: {\n presence: {\n message(_key: string, _value: any, model: PQRModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n standard: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n emissionDate: {\n custom: {\n validation(_key: string, value: any) {\n if (value) {\n return moment().isAfter(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.emission-date-future');\n },\n },\n },\n\n thicknessRootTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (\n !isEmpty(value) &&\n model.get('thicknessRootLayerTestPiece') === LAYER_OPTIONS.SINGLE_LAYER\n ) {\n return value <= 100;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model\n .translate('model-validations.pqr.single-layer-thickness-above-treshold')\n .toString();\n },\n },\n thicknessValidation(\n PQR.THICKNESS_ROOT_TESTPIECE,\n PQR.THICKNESS_FILL_TESTPIECE,\n PQR.THICKNESS_CAP_TEST_PIECE,\n PQR.THICKNESS_TOTAL_TESTPIECE\n ),\n ],\n },\n\n thicknessFillTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (\n !isEmpty(value) &&\n model.get('thicknessFillLayerTestPiece') === LAYER_OPTIONS.SINGLE_LAYER\n ) {\n return value <= 100;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model\n .translate('model-validations.pqr.single-layer-thickness-above-treshold')\n .toString();\n },\n },\n thicknessValidation(\n PQR.THICKNESS_ROOT_TESTPIECE,\n PQR.THICKNESS_FILL_TESTPIECE,\n PQR.THICKNESS_CAP_TEST_PIECE,\n PQR.THICKNESS_TOTAL_TESTPIECE\n ),\n ],\n },\n\n thicknessCapTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (\n !isEmpty(value) &&\n model.get('thicknessCapLayerTestPiece') === LAYER_OPTIONS.SINGLE_LAYER\n ) {\n return value <= 100;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model\n .translate('model-validations.pqr.single-layer-thickness-above-treshold')\n .toString();\n },\n },\n thicknessValidation(\n PQR.THICKNESS_ROOT_TESTPIECE,\n PQR.THICKNESS_FILL_TESTPIECE,\n PQR.THICKNESS_CAP_TEST_PIECE,\n PQR.THICKNESS_TOTAL_TESTPIECE\n ),\n ],\n },\n\n thicknessTotalTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n return model.isSingleLayer() || isStandardAWS(get(model, 'standard'));\n },\n\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n let standard = get(model, 'standard');\n if (isStandardAWS(standard)) {\n let unitSystem = model.unitSystem || get(model.userSession, 'unitSystem');\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n return value >= 3 || isEmpty(value);\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return value >= 0.125 || isEmpty(value);\n }\n return true;\n } else {\n return value <= 100;\n }\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n let standard = get(model, 'standard');\n if (!isStandardAWS(standard)) {\n return model\n .translate('model-validations.pqr.single-layer-thickness-above-treshold')\n .toString();\n } else {\n let unitSystem = model.unitSystem || get(model.userSession, 'unitSystem');\n let options: any = {};\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n options.value = 3;\n options.unit = model.translate(`lov.units.${UNITS.MILLIMETER}`);\n } else {\n options.value = 0.125;\n options.unit = model.translate(`lov.units.${UNITS.INCH}`);\n }\n return model.translate('model-validations.pqr.aws-thickness', options);\n }\n },\n },\n },\n\n diameterTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n fillerMaterialRootDiameters: {\n custom: {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any /* , model */) {\n for (let i = 0; i < 5; i++) {\n if (!isEmpty(value[i]) && isNaN(parseFloat(value[i]))) {\n return false;\n }\n }\n return true;\n },\n\n message(_key: string, value: any /* , model */) {\n let invalidResults: string[] = [];\n for (let i = 0; i < 5; i++) {\n if (!isEmpty(value[i]) && isNaN(parseFloat(value[i]))) {\n invalidResults.pushObject(value[i]);\n }\n }\n return `Filler Material Diameter is invalid, values \"${invalidResults.join(\n ','\n )}\" must be fixed`;\n },\n },\n },\n\n fillerMaterialFillDiameters: {\n custom: {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any /* , model */) {\n for (let i = 0; i < 5; i++) {\n if (!isEmpty(value[i]) && isNaN(parseFloat(value[i]))) {\n return false;\n }\n }\n return true;\n },\n\n message(_key: string, value: any /* , model */) {\n let invalidResults: string[] = [];\n for (let i = 0; i < 5; i++) {\n if (!isEmpty(value[i]) && isNaN(parseFloat(value[i]))) {\n invalidResults.pushObject(value[i]);\n }\n }\n return `Filler Material Diameter is invalid, values \"${invalidResults.join(\n ','\n )}\" must be fixed`;\n },\n },\n },\n\n fillerMaterialCapDiameters: {\n custom: {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any /* , model */) {\n for (let i = 0; i < 5; i++) {\n if (!isEmpty(value[i]) && isNaN(parseFloat(value[i]))) {\n return false;\n }\n }\n return true;\n },\n\n message(_key: string, value: any /* , model */) {\n let invalidResults: string[] = [];\n for (let i = 0; i < 5; i++) {\n if (!isEmpty(value[i]) && isNaN(parseFloat(value[i]))) {\n invalidResults.pushObject(value[i]);\n }\n }\n return `Filler Material Diameter is invalid, values \"${invalidResults.join(\n ','\n )}\" must be fixed`;\n },\n },\n },\n\n shieldingRoot: {\n custom: {\n if(/* key, value*/) {\n return false;\n // return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PQRModel) {\n let weldingProcessRoot = get(model, 'weldingProcessRootTestPiece');\n let weldingProcessCode = get(weldingProcessRoot, 'shortDesignation');\n let correctShielding = calculateShielding(weldingProcessCode);\n if (!isEmpty(correctShielding)) {\n return correctShielding === value;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n let weldingProcessRoot = get(model, 'weldingProcessRootTestPiece');\n let process = get(weldingProcessRoot, 'shortDesignation');\n let correctShielding = calculateShielding(process);\n let shielding = model.translate(`lov.shielding.${correctShielding}`);\n return model\n .translate('model-validations.shielding.root', {\n process,\n shielding,\n })\n .toString();\n },\n },\n },\n\n shieldingFill: {\n custom: {\n if(/* key, value, model*/) {\n return false;\n // return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PQRModel) {\n let weldingProcessFill = get(model, 'weldingProcessFillTestPiece');\n let weldingProcessCode = get(weldingProcessFill, 'shortDesignation');\n let correctShielding = calculateShielding(weldingProcessCode);\n if (!isEmpty(correctShielding)) {\n return correctShielding === value;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n let weldingProcessFill = get(model, 'weldingProcessFillTestPiece');\n let process = get(weldingProcessFill, 'shortDesignation');\n let correctShielding = calculateShielding(process);\n let shielding = model.translate(`lov.shielding.${correctShielding}`);\n return model\n .translate('model-validations.shielding.fill', {\n process,\n shielding,\n })\n .toString();\n },\n },\n },\n\n shieldingCap: {\n custom: {\n if(/* key, value, model*/) {\n return false;\n // return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: PQRModel) {\n let weldingProcessCap = get(model, 'weldingProcessCapTestPiece');\n let weldingProcessCode = get(weldingProcessCap, 'shortDesignation');\n let correctShielding = calculateShielding(weldingProcessCode);\n if (!isEmpty(correctShielding)) {\n return correctShielding === value;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n let weldingProcessCap = get(model, 'weldingProcessCapTestPiece');\n let process = get(weldingProcessCap, 'shortDesignation');\n let correctShielding = calculateShielding(process);\n let shielding = model.translate(`lov.shielding.${correctShielding}`);\n return model\n .translate('model-validations.shielding.cap', {\n process,\n shielding,\n })\n .toString();\n },\n },\n },\n\n numberOfElectrodes: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n },\n\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n return isESW(get(model, 'weldingProcessRootTestPiece'));\n },\n\n validation(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.esw-number-electrodes-required');\n },\n },\n },\n\n preheatTemperatureTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n interpassTemperatureTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postHeatTemperatureTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postWeldHeatTreatmentTimeTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n },\n\n postWeldHeatTreatmentTimeMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n },\n\n postWeldHeatTreatmentTimeMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n },\n\n postWeldHeatTreatmentTemperatureTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postWeldHeatTreatmentHeatingRateTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n\n custom: {\n validation(_key: string, value: any, model: PQRModel) {\n let pwhtTemperature = get(model, 'postWeldHeatTreatmentTemperatureTestPiece');\n if (!isEmpty(pwhtTemperature) && isEmpty(value)) {\n return false;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.heating-rate-required');\n },\n },\n },\n\n postWeldHeatTreatmentCoolingRateTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n\n custom: {\n validation(_key: string, value: any, model: PQRModel) {\n let pwhtTemperature = get(model, 'postWeldHeatTreatmentTemperatureTestPiece');\n if (!isEmpty(pwhtTemperature) && isEmpty(value)) {\n return false;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.cooling-rate-required');\n },\n },\n },\n\n heatInputMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n heatInputMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n preheatTemperatureMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n preheatTemperatureMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n interpassTemperatureMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n lessThanOrEqualTo: 9999,\n },\n },\n\n interpassTemperatureMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postHeatTemperatureMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postHeatTemperatureMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postWeldHeatTreatmentTemperatureMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n postWeldHeatTreatmentTemperatureMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n tensileTestTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: -273,\n lessThanOrEqualTo: 9999,\n onlyInteger: true,\n },\n },\n\n grooveAngleMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n grooveAngleMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 360,\n },\n },\n\n rootFaceMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n rootFaceMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n rootGapMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n rootGapMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n branchAngleTestPiece: {\n numericality: {\n onlyInteger: true,\n allowBlank: true,\n greaterThan: 0,\n lessThanOrEqualTo: 90,\n },\n },\n\n torchAngleMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 180,\n onlyInteger: true,\n },\n },\n\n torchAngleMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 180,\n onlyInteger: true,\n },\n },\n\n gasNozzleDiameterRoot: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n gasNozzleDiameterFill: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n gasNozzleDiameterCap: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n thicknessCapMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n thicknessCapMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n numberOfElectrodesFill: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n return isESW(get(model, 'weldingProcessFillTestPiece'));\n },\n\n validation(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.esw-number-electrodes-required');\n },\n },\n },\n\n numberOfElectrodesCap: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n return isESW(get(model, 'weldingProcessCapTestPiece'));\n },\n\n validation(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.esw-number-electrodes-required');\n },\n },\n },\n\n baseMaterial1Thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n return isStandardAWSD15(get(model, 'standard'));\n },\n\n validation(_key: string, value: any, model: PQRModel) {\n if (isStandardAWSD15(get(model, 'standard'))) {\n if (!isEmpty(value)) {\n if (model.isMetric) {\n return value >= 3;\n } else if (model.isImperial) {\n return value >= 0.125;\n }\n }\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n if (model.isMetric) {\n return model.translate(\n 'components.model-pqr/edit.awsd15.base-material-minimum-thickness-metric'\n );\n } else if (model.isImperial) {\n return model.translate(\n 'components.model-pqr/edit.awsd15.base-material-minimum-thickness-imperial'\n );\n }\n return '';\n },\n },\n },\n\n baseMaterial1Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n baseMaterial2Thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n return isStandardAWSD15(get(model, 'standard'));\n },\n\n validation(_key: string, value: any, model: PQRModel) {\n if (isStandardAWSD15(get(model, 'standard'))) {\n if (!isEmpty(value)) {\n if (model.isMetric) {\n return value >= 3;\n } else if (model.isImperial) {\n return value >= 0.125;\n }\n }\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n if (model.isMetric) {\n return model.translate(\n 'components.model-pqr/edit.awsd15.base-material-minimum-thickness-metric'\n );\n } else if (model.isImperial) {\n return model.translate(\n 'components.model-pqr/edit.awsd15.base-material-minimum-thickness-imperial'\n );\n }\n return '';\n },\n },\n },\n\n baseMaterial2Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n postHeatTimeTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n postHeatTimeMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n postHeatTimeMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n weldingDetailsTestPiece: {\n custom: weldingDetailValidation,\n },\n\n fillerMaterialRootTestPiece: {\n custom: validateFillerMaterialAWS(PQR.WELDING_PROCESS_ROOT_TESTPIECE),\n },\n\n fillerMaterialRootCommercialDesignationTestPiece: {\n custom: validateFillerMaterialAWS(PQR.WELDING_PROCESS_ROOT_TESTPIECE),\n },\n\n fillerMaterialFillTestPiece: {\n custom: validateFillerMaterialAWS(PQR.WELDING_PROCESS_FILL_TESTPIECE),\n },\n\n fillerMaterialFillCommercialDesignationTestPiece: {\n custom: validateFillerMaterialAWS(PQR.WELDING_PROCESS_FILL_TESTPIECE),\n },\n\n fillerMaterialCapTestPiece: {\n custom: validateFillerMaterialAWS(PQR.WELDING_PROCESS_CAP_TEST_PIECE),\n },\n\n fillerMaterialCapCommercialDesignationTestPiece: {\n custom: validateFillerMaterialAWS(PQR.WELDING_PROCESS_CAP_TEST_PIECE),\n },\n\n grooveDesigns: {\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n let weldLayers = get(model, 'weldLayerConfigurations');\n let grooveDesigns = get(model, 'grooveDesigns');\n return weldLayers.get('length') > 0 && grooveDesigns.get('length') > 0;\n },\n\n validation(_key: string, _value: any, model: PQRModel) {\n let weldLayer = get(model, 'weldLayerConfigurations').firstObject;\n let grooveDesign = get(model, 'grooveDesigns').firstObject;\n if (weldLayer && !isEmpty(weldLayer) && grooveDesign && !isEmpty(grooveDesign)) {\n let grooveType = get(grooveDesign, 'grooveType');\n let weldLayerGrooveType = get(weldLayer, 'grooveType');\n return grooveType === weldLayerGrooveType;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.groove-design-groove-type');\n },\n },\n },\n\n weldLayerConfigurations: {\n custom: {\n if(_key: string, _value: any, model: PQRModel) {\n let weldLayers: SyncHasMany = get(\n model,\n 'weldLayerConfigurations'\n );\n let grooveDesigns = get(model, 'grooveDesigns');\n return weldLayers.get('length') > 0 && grooveDesigns.get('length') > 0;\n },\n\n validation(_key: string, _value: any, model: PQRModel) {\n let weldLayer = get(model, 'weldLayerConfigurations').firstObject;\n let grooveDesign = get(model, 'grooveDesigns').firstObject;\n if (weldLayer && !isEmpty(weldLayer) && grooveDesign && !isEmpty(grooveDesign)) {\n let grooveType = get(grooveDesign, 'grooveType');\n let weldLayerGrooveType = get(weldLayer, 'grooveType');\n return grooveType === weldLayerGrooveType;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('model-validations.pqr.weld-layer-configuration-groove-type');\n },\n },\n },\n\n chemicalCarbonContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalManganeseContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalSiliconContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalChromiumContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalNickelContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalMolybdenumContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalCopperContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalPhosphorusContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalSulphurContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalAluminumContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n chemicalTitaniumContent: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99.9999,\n },\n },\n\n overlayNumberOfLayers: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n onlyInteger: true,\n },\n },\n\n impactTestType: {\n length: {\n maximum: 40,\n },\n },\n\n impactTestDimensions: {\n length: {\n maximum: 30,\n },\n },\n\n shieldingCapGasMixture: {\n length: {\n maximum: 100,\n },\n },\n\n chemicalReportName: {\n length: {\n maximum: 300,\n },\n },\n\n flowRateProcess1Minimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMinimum('flowRateProcess1Maximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getBelowMaximumMessage(\n get(model, 'flowRateProcess1Maximum'),\n model.flowUnit\n );\n },\n },\n ],\n },\n flowRateProcess1Maximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMaximum('flowRateProcess1Minimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getAboveMinimumMessage(\n get(model, 'flowRateProcess1Minimum'),\n model.flowUnit\n );\n },\n },\n ],\n },\n flowRateProcess2Minimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMinimum('flowRateProcess2Maximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getBelowMaximumMessage(\n get(model, 'flowRateProcess2Maximum'),\n model.flowUnit\n );\n },\n },\n ],\n },\n flowRateProcess2Maximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMaximum('flowRateProcess2Minimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getAboveMinimumMessage(\n get(model, 'flowRateProcess2Minimum'),\n model.flowUnit\n );\n },\n },\n ],\n },\n flowRateProcess3Minimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMinimum('flowRateProcess3Maximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getBelowMaximumMessage(\n get(model, 'flowRateProcess3Maximum'),\n model.flowUnit\n );\n },\n },\n ],\n },\n flowRateProcess3Maximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMaximum('flowRateProcess3Minimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getAboveMinimumMessage(\n get(model, 'flowRateProcess3Minimum'),\n model.flowUnit\n );\n },\n },\n ],\n },\n unitSystem: {\n custom: [\n {\n validation(_key: string, value: any, _model: PQRModel) {\n if (isEmpty(value)) {\n return false;\n }\n\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.translate('generic.error.field-required');\n },\n },\n ],\n },\n };\n\n get industryCode(): IndustryCode {\n return get(this.standard, 'code');\n }\n\n // @ts-expect-error\n validate(): boolean {\n let result: any = super.validate();\n let tensilelineInvalid = false;\n let bendLineInvalid = false;\n let impactTestLineInvalid = false;\n let tensileLines = this.tensileTestLines;\n if (tensileLines) {\n tensileLines.forEach((line) => {\n if (!line.validate()) {\n tensilelineInvalid = true;\n }\n });\n }\n let { bendTestLines } = this;\n if (bendTestLines) {\n bendTestLines.forEach((line) => {\n if (!line.validate()) {\n bendLineInvalid = true;\n }\n });\n }\n let { impactTestLines } = this;\n if (impactTestLines) {\n impactTestLines.forEach((line) => {\n if (!line.validate()) {\n impactTestLineInvalid = true;\n }\n });\n }\n\n let passesInvalid = false;\n let passes = this.weldingParameters;\n if (passes) {\n passes.forEach((line) => {\n if (!line.validate()) {\n passesInvalid = true;\n }\n });\n }\n return (\n result && !tensilelineInvalid && !bendLineInvalid && !impactTestLineInvalid && !passesInvalid\n );\n }\n\n metadata = {\n modelName: 'pqr',\n certificateNumber: {\n required: true,\n },\n\n standard: {\n required: true,\n },\n };\n\n fetchAllRelations() {\n return hash({\n weldingPositionsRoot: this.get('weldingPositionRootApprovalRange'),\n weldingPositionsFill: this.get('weldingPositionFillApprovalRange'),\n weldingPositionsCap: this.get('weldingPositionCapApprovalRange'),\n weldingParameters: this.get('weldingParameters'),\n weldingDetails: this.get('weldingDetailsTestPiece'),\n grooveDesigns: this.get('grooveDesigns'),\n weldLayerConfigurations: this.get('weldLayerConfigurations'),\n specialRequirements: this.get('specialRequirements'),\n preparationMethods: this.get('preparationMethodsTestPiece'),\n });\n }\n\n fetchAllRelationsForWPSValidation() {\n return hash({\n weldingProcessRoot: this.get('weldingProcessRootApprovalRange'),\n weldingProcessFill: this.get('weldingProcessFillApprovalRange'),\n weldingProcessCap: this.get('weldingProcessCapApprovalRange'),\n weldingParameters: this.get('weldingParameters'),\n weldingDetails: this.get('weldingDetailsApprovalRange'),\n weldType: this.get('weldTypeApprovalRange'),\n processMecanizationRootApprovalRange: this.get('processMecanizationRootApprovalRange'),\n processMecanizationFillApprovalRange: this.get('processMecanizationFillApprovalRange'),\n processMecanizationCapApprovalRange: this.get('processMecanizationCapApprovalRange'),\n typeCurrentRootApprovalRange: this.get('typeCurrentRootApprovalRange'),\n typeCurrentFillApprovalRange: this.get('typeCurrentFillApprovalRange'),\n typeCurrentCapApprovalRange: this.get('typeCurrentCapApprovalRange'),\n baseMaterial1: this.get('baseMaterial1ApprovalRange'),\n baseMaterial2: this.get('baseMaterial2ApprovalRange'),\n fillerMaterialRootCommercialDesignationApprovalRange: this.get(\n 'fillerMaterialRootCommercialDesignationApprovalRange'\n ),\n\n fillerMaterialFillCommercialDesignationApprovalRange: this.get(\n 'fillerMaterialFillCommercialDesignationApprovalRange'\n ),\n\n fillerMaterialCapCommercialDesignationApprovalRange: this.get(\n 'fillerMaterialCapCommercialDesignationApprovalRange'\n ),\n\n shieldingRootGasApprovalRange: this.get('shieldingRootGasApprovalRange'),\n shieldingRootGasCommercialDesignationApprovalRange: this.get(\n 'shieldingRootGasCommercialDesignationApprovalRange'\n ),\n\n shieldingRootFluxApprovalRange: this.get('shieldingRootFluxApprovalRange'),\n shieldingRootFluxCommercialDesignationApprovalRange: this.get(\n 'shieldingRootFluxCommercialDesignationApprovalRange'\n ),\n\n shieldingFillGasApprovalRange: this.get('shieldingFillGasApprovalRange'),\n shieldingFillGasCommercialDesignationApprovalRange: this.get(\n 'shieldingFillGasCommercialDesignationApprovalRange'\n ),\n\n shieldingFillFluxApprovalRange: this.get('shieldingFillFluxApprovalRange'),\n shieldingFillFluxCommercialDesignationApprovalRange: this.get(\n 'shieldingFillFluxCommercialDesignationApprovalRange'\n ),\n\n shieldingCapGasApprovalRange: this.get('shieldingCapGasApprovalRange'),\n shieldingCapGasCommercialDesignationApprovalRange: this.get(\n 'shieldingCapGasCommercialDesignationApprovalRange'\n ),\n\n shieldingCapFluxApprovalRange: this.get('shieldingCapFluxApprovalRange'),\n shieldingCapFluxCommercialDesignationApprovalRange: this.get(\n 'shieldingCapFluxCommercialDesignationApprovalRange'\n ),\n\n backingGasApprovalRange: this.get('backingGasApprovalRange'),\n backingGasCommercialDesignationApprovalRange: this.get(\n 'backingGasCommercialDesignationApprovalRange'\n ),\n\n backingFluxApprovalRange: this.get('backingFluxApprovalRange'),\n backingFluxCommercialDesignationApprovalRange: this.get(\n 'backingFluxCommercialDesignationApprovalRange'\n ),\n });\n }\n\n clearCollection(collection: any) {\n assert(`Must pass a valid collection name - ${collection}`, !isEmpty(collection));\n get(this, collection).clear();\n }\n\n isButtWeld() {\n let weldType = this.weldTypeTestPiece;\n if (weldType && !isEmpty(weldType)) {\n return weldType.isButtWeld;\n }\n return false;\n }\n\n get weldType() {\n return get(this, 'weldTypeTestPiece');\n }\n\n isFilletWeld() {\n return isFilletWeld(this.weldType);\n }\n\n isCompletePenetrationButtWeld() {\n return isCompleteJointPenetrationButtWeld(this.weldType);\n }\n\n isPartialPenetrationButtWeld() {\n return isPartialPenetrationButtWeldASME(this.weldType);\n }\n\n hasImpactRequirements() {\n let temperature = this.impactTestTemperature;\n let required = this.impactTestRequired;\n return (!isEmpty(temperature) && !isNaN(parseFloat(`${temperature}`))) || required;\n }\n\n isOverlayWeldHardFacing() {\n let { overlayType } = this;\n if (!isEmpty(overlayType) && overlayType === OVERLAY_TYPE_OPTIONS.HARD_FACING) {\n return true;\n }\n return false;\n }\n\n get weldingDetails() {\n return get(this, 'weldingDetailsTestPiece');\n }\n\n isSingleLayer() {\n return isSingleLayer(this.weldingDetails);\n }\n\n isMultiLayer() {\n return isMultiLayer(this.weldingDetails);\n }\n\n getLayerType() {\n if (this.isSingleLayer()) {\n return LAYER_OPTIONS.SINGLE_LAYER;\n } else if (this.isMultiLayer()) {\n return LAYER_OPTIONS.MULTI_LAYER;\n }\n return null;\n }\n\n validateMinimum(propertyMaximumValue: any, value: string) {\n let maximum = parseFloat(get(this, propertyMaximumValue));\n if (!isEmpty(maximum) && !isNaN(maximum)) {\n let minimum = parseFloat(value);\n return minimum <= maximum;\n }\n return true;\n }\n\n validateMaximum(propertyMinimumValue: any, value: string) {\n let minimum = parseFloat(get(this, propertyMinimumValue));\n if (!isEmpty(minimum) && !isNaN(minimum)) {\n let maximum = parseFloat(value);\n return maximum >= minimum;\n }\n return true;\n }\n\n getBelowMaximumMessage(approvalRange: string | number | undefined, unit = '') {\n return this.translate('model-validations.wps-parameter.must-be-below-maximum', {\n approvalRange,\n unit,\n });\n }\n\n getAboveMinimumMessage(approvalRange: string | number | undefined, unit: string) {\n return this.translate('model-validations.wps-parameter.must-be-above-minimum', {\n approvalRange,\n unit,\n });\n }\n\n @computed('weldingDetailsTestPiece.[]')\n get isDetailBothSides() {\n return isBothSides(this.weldingDetails);\n }\n\n get isOverlayWeld() {\n let weldType = get(this, 'weldTypeTestPiece');\n if (weldType && !isEmpty(weldType)) {\n return weldType.isOverlayWeld;\n }\n return false;\n }\n\n get isPipe() {\n return this.productTypeTestPiece === PRODUCT_TYPE.PIPE;\n }\n\n get isPlate() {\n return this.productTypeTestPiece === PRODUCT_TYPE.PLATE;\n }\n\n @computed('archivalState')\n get isArchived() {\n return this.archivalState === ARCHIVAL_STATE.ARCHIVED;\n }\n\n @computed('archivalState')\n get isActive() {\n return this.archivalState === ARCHIVAL_STATE.ACTIVE;\n }\n\n createReport = memberAction({ path: 'createReport', type: 'PUT' });\n\n archive = memberAction({ path: 'archivePQR', type: 'PUT' });\n\n unarchive = memberAction({ path: 'unarchivePQR', type: 'PUT' });\n\n duplicate = memberAction({ path: 'duplicatePQR', type: 'PUT' });\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || '');\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || '');\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || '');\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || '');\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || '');\n }\n get pressureUnit() {\n return this.units.getPressureUnit(this.unitSystem || '');\n }\n get forceUnit() {\n return this.units.getForceUnit(this.unitSystem || '');\n }\n get areaUnit() {\n return this.units.getAreaUnit(this.unitSystem || '');\n }\n get energyUnit() {\n return this.units.getEnergyUnit(this.unitSystem || '');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n}\n\nexport default PQRModel;\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents a Preparation Method for welding joint preparation.\n *\n * Joint preparation is the process of preparing the edges of base materials\n * before welding. The preparation method affects the quality of the resulting\n * weld and can be an essential variable in some welding standards.\n *\n * **Common Preparation Methods:**\n *\n * **Thermal Cutting:**\n * - Oxy-fuel cutting (OFC): Uses oxygen and fuel gas flame\n * - Plasma cutting: Uses ionized gas arc\n * - Laser cutting: Uses focused laser beam\n *\n * Note: Thermal cutting may introduce a heat-affected zone and surface\n * contamination that requires removal before welding.\n *\n * **Mechanical Methods:**\n * - Machining: Precision cutting using lathes or mills\n * - Grinding: Abrasive removal of material\n * - Sawing: Mechanical saw cutting\n * - Shearing: Cutting by opposing blades\n *\n * **Surface Preparation:**\n * - Cleaning: Removal of oils, oxides, and contaminants\n * - Deburring: Removal of rough edges\n * - Fit-up: Assembly of joint components\n *\n * The preparation method can influence:\n * - Surface cleanliness and oxide formation\n * - Dimensional accuracy and fit-up quality\n * - Residual stresses from cutting\n * - Need for additional pre-weld cleaning\n *\n * Some standards require documentation of preparation methods, particularly\n * for critical applications where thermal cutting effects must be removed\n * or specific surface conditions must be achieved.\n *\n * @extends BaseModel\n */\nexport default class PreparationMethod extends BaseModel {\n @attr('string')\n declare method: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.method || '';\n }\n\n validations = {\n method: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: PreparationMethod): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n };\n\n metadata = {\n modelName: 'preparation-method',\n method: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'preparation-method': PreparationMethod;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents the Degree of Mechanization for a welding operation.\n *\n * Process Mechanization describes how the welding operation is controlled\n * and executed, ranging from fully manual operation to fully automated\n * systems. This classification affects welder qualification requirements,\n * productivity expectations, and quality considerations.\n *\n * **Mechanization Levels:**\n *\n * - **Manual:**\n * The welder controls all aspects of the welding operation including\n * torch/electrode manipulation, travel speed, and arc control.\n * - Requires highest welder skill\n * - Most flexible for complex geometries\n * - Lower consistency between passes\n * - Examples: Manual GTAW, SMAW\n *\n * - **Semi-automatic:**\n * The wire feed is mechanized, but the welder controls torch positioning\n * and travel speed manually.\n * - Reduced welder fatigue\n * - More consistent wire feed\n * - Welder still controls quality-critical parameters\n * - Examples: GMAW, FCAW with hand-held gun\n *\n * - **Mechanized:**\n * Both wire feed and torch travel are mechanized, but the operator\n * monitors and adjusts parameters during welding.\n * - Higher consistency and productivity\n * - Operator can intervene as needed\n * - Examples: Orbital GTAW, mechanized SAW\n *\n * - **Automatic:**\n * The welding operation proceeds without operator intervention during\n * the weld. Parameters are preset and maintained automatically.\n * - Highest consistency and productivity\n * - Requires careful setup and programming\n * - Limited ability to adapt during welding\n * - Examples: Automated SAW, robotic welding\n *\n * Mechanization level is often an essential variable in procedure qualification\n * and determines welder qualification requirements.\n *\n * @extends BaseModel\n */\nexport default class ProcessMecanization extends BaseModel {\n @attr('string')\n declare name: string;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n get isManual() {\n return this.name === ProcessMecanizationType.MANUAL;\n }\n\n get isAutomatic() {\n return this.name === ProcessMecanizationType.AUTOMATIC;\n }\n\n get isMechanized() {\n return this.name === ProcessMecanizationType.MECHANIZED;\n }\n\n validations = {\n name: {\n presence: {\n message(_key: string, _value: string, model: ProcessMecanization): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'process-mecanization',\n name: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'process-mecanization': ProcessMecanization;\n }\n}\n\nexport enum ProcessMecanizationType {\n MANUAL = 'Manual',\n SEMI_AUTOMATIC = 'Semi-automatic',\n AUTOMATIC = 'Automatic',\n MECHANIZED = 'Mechanized',\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport BaseMaterialCertificate from './base-material-certificate';\nimport Project from './project';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectBaseMaterialCertificate extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('base-material-certificate')\n declare certificate: AsyncBelongsTo;\n\n @attr('string')\n declare heatNumber?: string;\n\n @attr('string')\n declare baseMaterialLabel?: string;\n\n @attr('string')\n declare pdfPath?: string;\n\n @attr('string')\n declare referenceType?: string;\n\n get visualLabel() {\n return this.heatNumber;\n }\n\n validations = {\n project: { presence: true },\n certificate: { presence: true },\n };\n\n metadata = {\n modelName: 'project-base-material-certificate',\n project: { required: true },\n certificate: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-base-material-certificate': ProjectBaseMaterialCertificate;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class ProjectClient extends BaseModel {\n @attr('string')\n declare name?: string;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n validations = {\n name: {\n presence: {\n message(_key: string, _value: string, model: ProjectClient): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'project-client',\n name: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-client': ProjectClient;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport Project from './project';\nimport ComponentDrawing from './component-drawing';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectComponentDrawing extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('component-drawing')\n declare drawing: AsyncBelongsTo;\n\n @attr('string')\n declare referenceNumber?: string;\n\n @attr('string')\n declare title?: string;\n\n @attr('string')\n declare revision?: string;\n\n @attr('string')\n declare revisionStatus?: string;\n\n @attr('string')\n declare referencedDrawing?: string;\n\n @attr('string')\n declare referencedDrawingId?: string;\n\n @attr('string')\n declare referencedDrawingPdf?: string;\n\n @attr('string')\n declare drawingPdf?: string;\n\n @attr('string')\n declare referenceType?: string;\n\n get visualLabel(): string {\n return this.referenceNumber || '';\n }\n\n validations = {\n project: { presence: true },\n drawing: { presence: true },\n };\n\n metadata = {\n modelName: 'project-component-drawing',\n project: { required: true },\n drawing: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-component-drawing': ProjectComponentDrawing;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport { getProperties, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport Constants from 'weldnote/utils/constants';\nimport GeneralDrawing from './general-drawing';\nimport ComponentDrawing from './component-drawing';\nimport ProjectLineClass from './project-line-class';\nimport Project from './project';\nimport TestInspectionClass from './test-inspection-class';\n\nconst { COMPONENT_SITUATION } = Constants;\n\nexport default class ProjectComponent extends BaseModel {\n @attr('string')\n declare componentNumber?: string;\n\n @attr('string')\n declare componentName?: string;\n\n @belongsTo('general-drawing', { async: false })\n declare originalDrawing: GeneralDrawing;\n\n @belongsTo('component-drawing', { async: false })\n declare componentDrawing: ComponentDrawing;\n\n @belongsTo('project-line-class')\n declare lineClass: AsyncBelongsTo;\n\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @attr('date')\n declare completedDate?: Date;\n\n @attr('date')\n declare testedDate?: Date;\n\n @attr('date')\n declare processedDate?: Date;\n\n @attr('date')\n declare shippedDate?: Date;\n\n @attr('date')\n declare lastRefresh?: Date;\n\n @attr('date')\n declare lastWeldUpdate?: Date;\n\n @attr('number')\n declare progressState?: number;\n\n @attr()\n declare statistics?: any;\n\n @attr('boolean')\n declare outdated?: boolean;\n\n @attr('string')\n declare situation?: string;\n\n @belongsTo('test-inspection-class')\n declare testInspectionClass: TestInspectionClass;\n\n @computed('componentNumber', 'componentName')\n get visualLabel() {\n let { componentName, componentNumber } = getProperties(\n this,\n 'componentName',\n 'componentNumber'\n );\n if (!isEmpty(this.componentName)) {\n return `${componentNumber} - ${componentName}`;\n }\n return componentNumber;\n }\n\n metadata = {\n modelName: 'project-component',\n listRoute: 'project-components',\n editRoute: 'project-component',\n };\n\n get isComponentDeleted(): boolean {\n return this.situation === COMPONENT_SITUATION.DELETED;\n }\n\n updateStatistics = memberAction({ path: 'updateStatistics', type: 'PUT' });\n\n restoreComponent = memberAction({ path: 'restoreComponent', type: 'PUT' });\n\n duplicateComponent = memberAction({ path: 'duplicateComponent', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-component': ProjectComponent;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Project from './project';\nimport ProjectDocument from './project-document';\n\nexport default class ProjectDocumentLink extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('project-document')\n declare document: AsyncBelongsTo;\n\n @attr('string')\n declare documentTitle?: string;\n\n @attr('string')\n declare documentNumber?: string;\n\n @attr('string')\n declare pdfPath?: string;\n\n get visualLabel() {\n return this.documentTitle;\n }\n\n validations = {\n project: { presence: true },\n document: { presence: true },\n };\n\n metadata = {\n modelName: 'project-document-link',\n project: { required: true },\n document: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-document-link': ProjectDocumentLink;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport FileUpload from './file-upload';\n\nexport default class ProjectDocument extends BaseModel {\n @attr('string')\n declare documentTitle?: string;\n\n @attr('string')\n declare documentNumber?: string;\n\n @attr('string', { defaultValue: '0' })\n declare revision: string;\n\n @attr('string')\n declare type?: string;\n\n @attr('string')\n declare comments?: string;\n\n @attr('boolean', { defaultValue: true })\n declare includeInDataBook: boolean;\n\n @belongsTo('file-upload')\n declare document: AsyncBelongsTo;\n\n @attr('string')\n declare revisionStatus?: string;\n\n @attr('number')\n declare createdOn: number;\n\n get active(): boolean {\n return this.revisionStatus === 'ACT';\n }\n\n get visualLabel(): string {\n return this.documentTitle || '';\n }\n\n validations = {\n documentTitle: { presence: true },\n documentNumber: { presence: true },\n revision: { presence: true },\n };\n\n metadata = {\n modelName: 'project-document',\n listRoute: 'project-documents',\n editRoute: 'project-document',\n documentTitle: { required: true },\n documentNumber: { required: true },\n revision: { required: true },\n };\n\n updateDocumentRevisions = memberAction({ path: 'updateDocumentRevisions', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-document': ProjectDocument;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport Project from './project';\nimport FillerMaterialCertificate from './filler-material-certificate';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectFillerMaterialCertificate extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('filler-material-certificate')\n declare certificate: AsyncBelongsTo;\n\n @attr('string')\n declare batchNumber?: string;\n\n @attr('string')\n declare fillerMaterialLabel?: string;\n\n @attr('string')\n declare fillerMaterialCommercialDesignationLabel?: string;\n\n @attr('string')\n declare pdfPath?: string;\n\n @attr('string')\n declare referenceType?: string;\n\n get visualLabel(): string {\n return this.batchNumber || '';\n }\n\n validations = {\n project: { presence: true },\n certificate: { presence: true },\n };\n\n metadata = {\n modelName: 'project-filler-material-certificate',\n project: { required: true },\n certificate: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-filler-material-certificate': ProjectFillerMaterialCertificate;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport Project from './project';\nimport GeneralDrawing from './general-drawing';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectGeneralDrawing extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('general-drawing')\n declare drawing: AsyncBelongsTo;\n\n @attr('string')\n declare referenceNumber?: string;\n\n @attr('string')\n declare title?: string;\n\n @attr('string')\n declare revision?: string;\n\n @attr('string')\n declare revisionStatus?: string;\n\n @attr('string')\n declare contentPath?: string;\n\n @attr('string')\n declare referenceType?: string;\n\n get visualLabel(): string {\n return this.referenceNumber || '';\n }\n\n validations = {\n project: { presence: true },\n drawing: { presence: true },\n };\n\n metadata = {\n modelName: 'project-general-drawing',\n project: { required: true },\n drawing: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-general-drawing': ProjectGeneralDrawing;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Project from './project';\n\nexport default class ProjectLineClass extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @attr('string')\n declare lineIdentifier?: string;\n\n @attr('string')\n declare name?: string;\n\n get visualLabel(): string {\n return this.lineIdentifier || '';\n }\n\n validations = {\n lineIdentifier: { presence: true },\n };\n\n metadata = {\n modelName: 'project-line-class',\n lineIdentifier: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-line-class': ProjectLineClass;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport Project from './project';\nimport NdtReportCertificate from './ndt-report-certificate';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectNdtReportCertificate extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('ndt-report-certificate')\n declare report: AsyncBelongsTo;\n\n @attr('string')\n declare reportNumber?: string;\n\n @attr('string')\n declare pdfPath?: string;\n\n @attr('string')\n declare referenceType?: string;\n\n get visualLabel() {\n return this.reportNumber;\n }\n\n validations = {\n project: { presence: true },\n report: { presence: true },\n };\n\n metadata = {\n modelName: 'project-ndt-report-certificate',\n project: { required: true },\n report: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-ndt-report-certificate': ProjectNdtReportCertificate;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport Project from './project';\nimport PwhtReportCertificate from './pwht-report-certificate';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectPwhtReportCertificate extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('pwht-report-certificate')\n declare report: AsyncBelongsTo;\n\n @attr('string')\n declare reportNumber?: string;\n\n @attr('string')\n declare pdfPath?: string;\n\n @attr('string')\n declare referenceType?: string;\n\n get visualLabel() {\n return this.reportNumber;\n }\n\n validations = {\n project: { presence: true },\n report: { presence: true },\n };\n\n metadata = {\n modelName: 'project-pwht-report-certificate',\n project: { required: true },\n report: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-pwht-report-certificate': ProjectPwhtReportCertificate;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport NonDestructiveTesting from './non-destructive-testing';\nimport NdtReportCertificate from './ndt-report-certificate';\nimport TestStageName from './test-stage-name';\nimport TestLocation from './test-location';\nimport ProjectWeld from './project-weld';\n\nexport default class ProjectWeldInspection extends BaseModel {\n @belongsTo('project-weld', { async: false })\n declare weld: ProjectWeld;\n\n @belongsTo('non-destructive-testing', { async: false })\n declare test: NonDestructiveTesting;\n\n @attr('number')\n declare percentage?: number;\n\n @belongsTo('ndt-report-certificate', { async: false })\n declare report: NdtReportCertificate;\n\n @attr('string')\n declare inspectionResult?: string;\n\n @attr('date')\n declare reportDate?: Date;\n\n @belongsTo('test-stage-name', { async: false })\n declare testStageName: TestStageName;\n\n @belongsTo('test-location', { async: false })\n declare testLocation: TestLocation;\n\n visualLabel(): string {\n return this.weld.weldId || '';\n }\n\n validations = {\n weld: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n test: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n percentage: {\n numericality: {\n allowBlank: false,\n lessThanOrEqualTo: 100,\n greaterThanOrEqualTo: 0,\n onlyInteger: true,\n },\n },\n\n report: {\n custom: {\n if(_key: string, value: any, model: any) {\n let test = get(model, 'test');\n return (\n !isEmpty(test) &&\n !isEmpty(get(test, 'id')) &&\n !isEmpty(value) &&\n !isEmpty(get(value, 'id'))\n );\n },\n\n validation(_key: string, value: any, model: any) {\n let test = get(model, 'test');\n if (!isEmpty(value)) {\n let testOfReport = get(value, 'typeOfTest');\n if (!isEmpty(testOfReport)) {\n return get(test, 'id') === get(testOfReport, 'id');\n }\n }\n return true;\n },\n\n message(_key: string, value: any, model: any) {\n let test = get(model, 'test');\n let testOfReport = get(value, 'typeOfTest');\n return model\n .translate('model-validations.weld-inspection.report-type-invalid', {\n testInspection: get(test, 'shortDesignation'),\n testReport: get(testOfReport, 'shortDesignation'),\n })\n .toString();\n },\n },\n },\n };\n\n metadata = {\n modelName: 'project-weld-inspection',\n weld: { required: true },\n test: { required: true },\n percentage: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-weld-inspection': ProjectWeldInspection;\n }\n}\n","import { computed, get } from '@ember/object';\nimport { hasMany, belongsTo, attr, AsyncBelongsTo, SyncHasMany } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport Constants from 'weldnote/utils/constants';\nimport { calculateCurrentState } from 'weldnote/utils/project-weld-state-parser';\nimport Project from './project';\nimport ProjectComponent from './project-component';\nimport WeldType from './weld-type';\nimport BaseMaterialCertificate from './base-material-certificate';\nimport BaseMaterial from './base-material';\nimport FillerMaterialCertificate from './filler-material-certificate';\nimport FillerMaterial from './filler-material';\nimport PwhtReportCertificate from './pwht-report-certificate';\nimport Fitter from './fitter';\nimport Welder from './welder';\nimport ProjectWeldInspection from './project-weld-inspection';\nimport { isEmpty } from '@ember/utils';\n\nconst { WELD_CONDITION, WELD_SITUATION } = Constants;\n\nexport default class ProjectWeld extends BaseModel {\n @attr('string')\n declare weldId?: string;\n\n @attr('number')\n declare weldNumber?: number;\n\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('project-component', { async: false })\n declare component: ProjectComponent;\n\n @attr('string')\n declare weldComponentNumber?: string;\n\n @belongsTo('weld-type', { async: false })\n declare weldType: WeldType;\n\n @belongsTo('base-material-certificate', { async: false })\n declare baseMaterial1: BaseMaterialCertificate;\n\n @belongsTo('base-material-certificate', { async: false })\n declare baseMaterial2: BaseMaterialCertificate;\n\n @belongsTo('base-material', { async: false })\n declare specificBaseMaterial1: BaseMaterial;\n\n @belongsTo('base-material', { async: false })\n declare specificBaseMaterial2: BaseMaterial;\n\n @belongsTo('welding-procedure-specification', { async: false })\n declare wps: any;\n\n @belongsTo('filler-material-certificate', { async: false })\n declare fillerMaterialRoot: FillerMaterialCertificate;\n\n @belongsTo('filler-material-certificate', { async: false })\n declare fillerMaterialFill: FillerMaterialCertificate;\n\n @belongsTo('filler-material-certificate', { async: false })\n declare fillerMaterialCap: FillerMaterialCertificate;\n\n @belongsTo('filler-material', { async: false })\n declare specificFillerMaterialProcess1: FillerMaterial;\n\n @belongsTo('filler-material', { async: false })\n declare specificFillerMaterialProcess2: FillerMaterial;\n\n @belongsTo('filler-material', { async: false })\n declare specificFillerMaterialProcess3: FillerMaterial;\n\n @belongsTo('pwht-report-certificate', { async: false })\n declare pwhtReport: PwhtReportCertificate;\n\n @belongsTo('fitter', { async: false })\n declare fitter: Fitter;\n\n @belongsTo('welder', { async: false })\n declare tackWelder: Welder;\n\n @hasMany('welder', { async: false })\n declare weldersRootLayer: SyncHasMany;\n\n @hasMany('welder', { async: false })\n declare weldersFillLayer: SyncHasMany;\n\n @hasMany('welder', { async: false })\n declare weldersCapLayer: SyncHasMany;\n\n @attr('date')\n declare fitDate?: Date;\n\n @attr('date')\n declare weldDate?: Date;\n\n @attr('date')\n declare rootWeldDate?: Date;\n\n @attr('date')\n declare fillWeldDate?: Date;\n\n @attr('date')\n declare capWeldDate?: Date;\n\n @attr('date')\n declare pwhtDateCompleted?: Date;\n\n @attr('date')\n declare testDate?: Date;\n\n @attr('date')\n declare processedDate?: Date;\n\n @attr('date')\n declare shippedDate?: Date;\n\n @attr('string')\n declare status?: string;\n\n @attr('number')\n declare state?: number;\n\n @attr('string')\n declare type?: string;\n\n @hasMany('project-weld-inspection', { async: false })\n declare inspections: SyncHasMany;\n\n @attr('number')\n declare repairCountFromCleanState: number;\n\n @attr('boolean')\n declare requiresPwht?: boolean;\n\n @attr('date')\n declare completedDate?: Date;\n\n @attr('string')\n declare completedStatus?: string;\n\n @attr('string')\n declare situation?: string;\n\n @attr('boolean')\n declare componentDeleted?: boolean;\n\n @attr('string')\n declare projectLabel: string;\n\n get visualLabel() {\n return this.weldNumber;\n }\n\n validations = {\n component: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'project-weld',\n\n component: {\n required: true,\n },\n };\n\n @computed('status', 'situation')\n get isActiveWeld() {\n let { status, situation } = this;\n if (status === WELD_CONDITION.GOOD && situation === WELD_SITUATION.ACTIVE) {\n return true;\n }\n return false;\n }\n\n @computed(\n 'state',\n 'fitDate',\n 'weldDate',\n 'pwhtDateCompleted',\n 'testDate',\n 'processedDate',\n 'shippedDate'\n )\n get currentStatus() {\n return calculateCurrentState(this);\n }\n\n @computed('weldersRootLayer', 'weldersFillLayer', 'weldersCapLayer')\n get uniqueLayerWelders() {\n let { weldersRootLayer, weldersFillLayer, weldersCapLayer } = this;\n return [\n ...new Set( // we use the Set to exclude duplicates\n weldersRootLayer.toArray().concat(weldersFillLayer.toArray(), weldersCapLayer.toArray())\n ),\n ];\n }\n\n get isWeldDeleted(): boolean {\n return this.situation === WELD_SITUATION.DELETED;\n }\n\n repairWeld = memberAction({ path: 'repairWeld', type: 'PUT' });\n\n cutWeld = memberAction({ path: 'cutWeld', type: 'PUT' });\n\n renameWeld = memberAction({ path: 'renameWeld', type: 'PUT' });\n\n updateComponentNumber = memberAction({ path: 'updateComponentNumber', type: 'PUT' });\n\n duplicateWeld = memberAction({ path: 'duplicateWeld', type: 'PUT' });\n\n restoreWeld = memberAction({ path: 'restoreWeld', type: 'PUT' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-weld': ProjectWeld;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Project from './project';\nimport WelderCertificate from './welder-certificate';\n\nexport default class ProjectWelderCertificate extends BaseModel {\n @belongsTo('project')\n declare project: AsyncBelongsTo;\n\n @belongsTo('welder-certificate')\n declare certificate: AsyncBelongsTo;\n\n @attr('string')\n declare certificateNumber?: string;\n\n @attr('number')\n declare certificateId?: number;\n\n @attr('string')\n declare welder?: string;\n\n @attr('number')\n declare welderId?: number;\n\n @attr('string')\n declare referenceType?: string;\n\n async visualLabel() {\n let { certificate } = this;\n if (certificate) {\n let result = await certificate;\n return result.certificateNumber;\n }\n return '';\n }\n\n validations = {\n project: { presence: true },\n certificate: { presence: true },\n };\n\n metadata = {\n modelName: 'project-welder-certificate',\n project: { required: true },\n certificate: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-welder-certificate': ProjectWelderCertificate;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Project from './project';\nimport Welder from './welder';\n\nexport default class ProjectWelder extends BaseModel {\n @belongsTo('project', { async: true, inverse: null })\n declare project: AsyncBelongsTo;\n\n @belongsTo('welder', { async: true, inverse: null })\n declare welder: AsyncBelongsTo;\n\n @attr('string')\n declare welderName?: string;\n\n @attr('string')\n declare welderStamp?: string;\n\n @attr('number')\n declare welderId?: number;\n\n @attr('number')\n declare totalWelds?: number;\n\n @attr('number')\n declare repairedWelds?: number;\n\n @attr('number')\n declare goodWelds?: number;\n\n @attr('number')\n declare repairRate?: number;\n\n @attr('string')\n declare projectName?: number;\n\n async visualLabel() {\n let { welder } = this;\n if (welder) {\n let result = await welder;\n return result.welderName;\n }\n return '';\n }\n\n validations = {\n project: { presence: true },\n welder: { presence: true },\n };\n\n metadata = {\n modelName: 'project-welder',\n project: { required: true },\n welder: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-welder': ProjectWelder;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport Project from './project';\nimport WeldingProcedureSpecification from './welding-procedure-specification';\n\nconst { PROJECT_REFERENCE_TYPE } = Constants;\n\nexport default class ProjectWps extends BaseModel {\n @belongsTo('project', { async: true, inverse: null })\n declare project: AsyncBelongsTo;\n\n @belongsTo('welding-procedure-specification', { async: true, inverse: null })\n declare wps: AsyncBelongsTo;\n\n @attr('string')\n declare referenceType?: string;\n\n @attr('string')\n declare wpsNumber?: string;\n\n @attr('string')\n declare wpsType?: string;\n\n @attr('string')\n declare wpsId?: string;\n\n @attr('string')\n declare standard?: string;\n\n @attr('string')\n declare weldingProcess?: string;\n\n @attr('string')\n declare baseMaterials?: string;\n\n @attr('string')\n declare thickness?: string;\n\n @attr('string')\n declare projectDesignation?: string;\n\n @attr('number')\n declare totalWelds?: number;\n\n @attr('number')\n declare repairedWelds?: number;\n\n @attr('number')\n declare repairRate?: number;\n\n @attr('string')\n declare revision?: string;\n\n get visualLabel(): string {\n return this.wpsNumber || '';\n }\n\n validations = {\n project: { presence: true },\n wps: { presence: true },\n };\n\n metadata = {\n modelName: 'project-wps',\n project: { required: true },\n wps: { required: true },\n };\n\n get isManualReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.MANUAL;\n }\n\n get isAutomaticReference(): boolean {\n return this.referenceType === PROJECT_REFERENCE_TYPE.REFERENCE;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'project-wps': ProjectWps;\n }\n}\n","import { AsyncBelongsTo, AsyncHasMany, attr, belongsTo, hasMany } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport { isSamePQRAndWelderStandard } from 'weldnote/utils/standards';\nimport Company from './company';\nimport ConstructionStandard from './construction-standard';\nimport PqrStandard from './pqr-standard';\nimport WelderStandard from './welder-standard';\nimport FileUpload from './file-upload';\nimport ProjectClient from './project-client';\nimport { isEmpty } from '@ember/utils';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport { service } from '@ember/service';\nimport PQRModel from './pqr';\n\nconst { ARCHIVAL_STATE, WPS_INCLUSION } = Constants;\n\nexport default class Project extends BaseModel {\n @service('unit-system')\n declare units: UnitSystemService;\n\n @attr('string')\n declare designation?: string;\n\n @attr('string')\n declare projectName?: string;\n\n @belongsTo('company', { async: true, inverse: null })\n declare supplier: AsyncBelongsTo;\n\n @belongsTo('construction-standard', { async: true, inverse: null })\n declare constructionStandard: AsyncBelongsTo;\n\n @belongsTo('pqr-standard', { async: true, inverse: null })\n declare standard: AsyncBelongsTo;\n\n @belongsTo('welder-standard', { async: true, inverse: null })\n declare welderStandard: AsyncBelongsTo;\n\n @attr('string', { defaultValue: 'PENDING' })\n declare projectStatus: string;\n\n @attr('date')\n declare startDate?: Date;\n\n @attr('date')\n declare endDate?: Date;\n\n @hasMany('pqr', { async: true, inverse: null })\n declare pqrs: AsyncHasMany;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare projectReport: AsyncBelongsTo;\n\n @attr('string')\n declare projectReportPath?: string;\n\n @attr('number', { defaultValue: 2 })\n declare maximumRepairsPerWeld: number;\n\n @attr('boolean')\n declare selectWeldersFromCompanyOnly?: boolean;\n\n @attr('boolean')\n declare selectWpsFromCompanyOnly?: boolean;\n\n @attr('boolean')\n declare selectWpsFromProjectLibraryOnly?: boolean;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare coverPicture: AsyncBelongsTo;\n\n @belongsTo('project-client', { async: true, inverse: null })\n declare projectClient: AsyncBelongsTo;\n\n @attr('string', { defaultValue: ARCHIVAL_STATE.ACTIVE })\n declare archivalState: string;\n\n @attr('string', { defaultValue: WPS_INCLUSION.GENERATE_PDF })\n declare typeOfWpsInclusion: string;\n\n @attr('number')\n declare totalWelds?: number;\n\n @attr('number')\n declare goodWelds?: number;\n\n @attr('number')\n declare repairedWelds?: number;\n\n @attr('number')\n declare repairRate?: number;\n\n @attr('string')\n declare unitSystem?: string;\n\n @attr('string', { defaultValue: 'PARTIAL_INSPECTIONS' })\n declare inspectionClassesMode: string;\n\n get visualLabel() {\n if (!isEmpty(this.projectName)) {\n return this.projectName;\n } else {\n return this.designation;\n }\n }\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || '');\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || '');\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || '');\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || '');\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || '');\n }\n get pressureUnit() {\n return this.units.getPressureUnit(this.unitSystem || '');\n }\n get forceUnit() {\n return this.units.getForceUnit(this.unitSystem || '');\n }\n get areaUnit() {\n return this.units.getAreaUnit(this.unitSystem || '');\n }\n get energyUnit() {\n return this.units.getEnergyUnit(this.unitSystem || '');\n }\n\n validations = {\n designation: { presence: true },\n unitSystem: { presence: true },\n standard: {\n custom: [\n {\n validation(_key: string, value: any, model: any): boolean {\n let pqrStandard = value;\n let welderStandard = get(model, 'welderStandard');\n return isSamePQRAndWelderStandard(pqrStandard, welderStandard);\n },\n\n message(_key: string, _value: any, model: any): string {\n return model.translate('model-validations.welding-book.standard');\n },\n },\n {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n ],\n },\n\n welderStandard: {\n custom: [\n {\n validation(_key: string, value: any, model: any): boolean {\n let welderStandard = value;\n let pqrStandard = get(model, 'standard');\n return isSamePQRAndWelderStandard(pqrStandard, welderStandard);\n },\n\n message(_key: string, _value: any, model: any): string {\n return model.translate('model-validations.welding-book.welder-standard');\n },\n },\n {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n ],\n },\n\n projectClient: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n supplier: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'project',\n listRoute: 'projects',\n editRoute: 'project',\n designation: { required: true },\n standard: { required: true },\n welderStandard: { required: true },\n projectClient: { required: true },\n supplier: { required: true },\n unitSystem: { required: true },\n };\n\n @computed('archivalState')\n get isArchived() {\n return this.archivalState === ARCHIVAL_STATE.ARCHIVED;\n }\n\n @computed('archivalState')\n get isActive() {\n return this.archivalState === ARCHIVAL_STATE.ACTIVE;\n }\n\n createProjectReport = memberAction({ path: 'createProjectReport' });\n\n archive = memberAction({ path: 'archiveProject', type: 'PUT' });\n\n unarchive = memberAction({ path: 'unarchiveProject', type: 'PUT' });\n\n duplicate = memberAction({ path: 'duplicateProject', type: 'PUT' });\n\n exportWelds = memberAction({ path: 'exportWelds', type: 'POST' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n project: Project;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport PostWeldTreatmentMethod from './post-weld-treatment-method';\nimport FileUpload from './file-upload';\n\nexport default class PwhtReportCertificate extends BaseModel {\n @attr('string')\n declare reportNumber?: string;\n\n @attr('number')\n declare treatmentTime?: number;\n\n @attr('number')\n declare treatmentTemperature?: number;\n\n @attr('number')\n declare heatingRate?: number;\n\n @attr('number')\n declare coolingRate?: number;\n\n @belongsTo('post-weld-treatment-method', { async: true, inverse: null })\n declare method: AsyncBelongsTo;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare certificate: AsyncBelongsTo;\n\n @attr('date')\n declare reportDate?: Date;\n\n get visualLabel(): string {\n return this.reportNumber || '';\n }\n\n validations = {\n reportNumber: { presence: true },\n treatmentTime: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n },\n\n treatmentTemperature: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n },\n\n heatingRate: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n coolingRate: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n reportDate: { presence: true },\n };\n\n metadata = {\n modelName: 'pwht-report-certificate',\n listRoute: 'pwht-report-certificates',\n editRoute: 'pwht-report-certificate',\n reportNumber: { required: true },\n treatmentTime: { required: true },\n treatmentTemperature: { required: true },\n reportDate: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'pwht-report-certificate': PwhtReportCertificate;\n }\n}\n","import Model, { hasMany, attr, AsyncHasMany } from '@ember-data/model';\nimport Permission from './permission';\n\nexport default class Role extends Model {\n @attr('string')\n declare name?: string;\n\n @hasMany('permission', { async: true, inverse: null })\n declare permissions: AsyncHasMany;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n role: Role;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class StaffPosition extends BaseModel {\n @attr('string')\n declare designation?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n get visualLabel(): string {\n return this.designation || '';\n }\n\n validations = {\n designation: {\n presence: {\n message(_key: string, _value: string, model: StaffPosition): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'staff-position',\n designation: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'staff-position': StaffPosition;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport Account from './account';\nimport Company from './company';\nimport StaffPosition from './staff-position';\n\n/**\n * Represents a Staff Member in the welding management domain.\n *\n * Staff members are personnel involved in welding operations who are not\n * necessarily welders themselves. This includes supervisors, inspectors,\n * engineers, quality personnel, and other roles essential to welding\n * operations and quality management.\n *\n * **Common Staff Roles in Welding Operations:**\n *\n * **Supervision:**\n * - Welding Supervisor: Oversees welding operations and welder performance\n * - Welding Foreman: Direct supervision of welding crew\n * - Production Manager: Overall production responsibility\n *\n * **Engineering:**\n * - Welding Engineer: Develops procedures, resolves technical issues\n * - Welding Coordinator (IWS/IWE/IWT): As per ISO 14731 requirements\n * - Design Engineer: Joint design and material selection\n *\n * **Quality Control:**\n * - QC Inspector: Performs visual and dimensional inspection\n * - QA Manager: Manages quality system\n * - NDE Technician: Performs non-destructive examination\n *\n * **Documentation:**\n * - Document Controller: Manages welding procedures and records\n * - Administrator: General administrative support\n *\n * **Properties:**\n *\n * - **name:** Staff member's full name\n * - **position:** Job title/role (linked to StaffPosition)\n * - **company:** Associated company\n * - **account:** User account for system access\n *\n * Staff records are used for:\n * - Assigning responsibilities on welding documentation\n * - Tracking who performed inspections or approvals\n * - Managing access permissions based on role\n * - Meeting organizational requirements (e.g., Responsible Welding Coordinator)\n *\n * @extends BaseModel\n */\nexport default class Staff extends BaseModel {\n @attr('string')\n declare name: string;\n\n @belongsTo('staff-position', { async: true, inverse: null })\n declare position: AsyncBelongsTo;\n\n @belongsTo('company', { async: true, inverse: null })\n declare company: AsyncBelongsTo;\n\n @belongsTo('account', { async: false, inverse: 'staff' })\n declare account: Account;\n\n get visualLabel(): string {\n return this.name || '';\n }\n\n validations = {\n name: { presence: true },\n position: { presence: true },\n email: {\n email: {\n email: true,\n allowBlank: true,\n },\n },\n };\n\n metadata = {\n modelName: 'staff',\n listRoute: 'staffs',\n editRoute: 'staff',\n name: { required: true },\n position: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n staff: Staff;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport PQRModel from './pqr';\n\n/**\n * Represents a Tensile Test Line (result row) in a PQR's destructive testing section.\n *\n * Tensile testing is a fundamental destructive test performed on welded test pieces\n * to verify that the weld joint meets the required strength criteria. The test\n * measures the weld's ability to withstand pulling (tensile) forces.\n *\n * **Test Purpose:**\n * - Verify that weld metal and HAZ strength meet minimum requirements\n * - Confirm that the joint is not weaker than the base material (for matching welds)\n * - Identify the location of failure (weld metal, HAZ, or base metal)\n *\n * **Test Specimen Types:**\n * - Transverse tensile: Specimen cut perpendicular to weld axis\n * - All-weld-metal tensile: Specimen taken entirely from weld metal\n * - Reduced section: Standard specimen with reduced cross-section\n *\n * **Recorded Values:**\n *\n * - **tensileStrength:** Ultimate tensile strength (UTS) achieved, typically in MPa or psi\n * - **ruptureLocation:** Where the specimen failed (weld metal, HAZ, base metal, fusion line)\n * - **width / thickness / areaSurface:** Specimen dimensions used to calculate stress\n * - **ultimateTotalLoad:** Maximum load applied before failure\n * - **type:** Specimen type or identification\n * - **observation:** Notes on test execution or results\n *\n * **Acceptance Criteria:**\n * Results must meet minimum tensile strength specified by the applicable code.\n * Failure in the base metal (away from weld) at or above minimum strength typically\n * indicates acceptable weld quality, as the weld itself did not fail.\n *\n * @extends BaseModel\n */\nexport default class TensileTestLine extends BaseModel {\n @attr('number')\n declare orderNum?: number;\n\n @attr('string')\n declare type?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare tensileStrength?: number;\n\n @attr('string') \n declare ruptureLocation?: string;\n\n @attr('string')\n declare observation?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare width?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thickness?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare areaSurface?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare ultimateTotalLoad?: number;\n\n @belongsTo('pqr')\n declare pqr: PQRModel;\n\n metadata = {\n modelName: 'tensile-test-line',\n };\n\n isLineEmpty(): boolean {\n let allEmpty =\n isEmpty(this.type) &&\n isEmpty(this.width) &&\n isEmpty(this.tensileStrength) &&\n isEmpty(this.areaSurface) &&\n isEmpty(this.ruptureLocation) &&\n isEmpty(this.observation) &&\n isEmpty(this.thickness && isEmpty(this.ultimateTotalLoad));\n return allEmpty;\n }\n\n validations = {\n type: {\n length: {\n maximum: 30,\n },\n },\n\n tensileStrength: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999999.999,\n },\n },\n\n width: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n areaSurface: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n ultimateTotalLoad: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n },\n },\n\n ruptureLocation: {\n length: {\n maximum: 100,\n },\n },\n\n observation: {\n length: {\n maximum: 50,\n },\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'tensile-test-line': TensileTestLine;\n }\n}\n","import { attr, hasMany, SyncHasMany } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport TestStage from './test-stage';\n\nexport default class TestInspectionClass extends BaseModel {\n @attr('string')\n declare name?: string;\n\n @attr('string')\n declare description?: string;\n\n @hasMany('test-stage', { async: false, inverse: 'inspectionClass' })\n declare stages: SyncHasMany;\n\n get visualLabel() {\n return this.name;\n }\n\n validations = {\n name: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'test-inspection-class',\n name: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'test-inspection-class': TestInspectionClass;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class TestLocation extends BaseModel {\n metadata = {\n modelName: 'test-location',\n listRoute: 'test-locations',\n editRoute: 'test-location',\n };\n\n validations = {\n name: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: TestLocation): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n };\n\n @attr('string')\n declare name?: string;\n\n get visualLabel() {\n return this.name;\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'test-location': TestLocation;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class TestStageName extends BaseModel {\n @attr('string')\n declare name?: string;\n\n @attr('number')\n declare displayOrder?: string;\n\n get visualLabel() {\n return this.name;\n }\n\n validations = {\n name: {\n presence: {\n message(_key: string, _value: string, model: TestStageName): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'test-stage-name',\n listRoute: 'test-stage-names',\n editRoute: 'test-stage-name',\n\n name: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'test-stage-name': TestStageName;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport NonDestructiveTesting from './non-destructive-testing';\nimport { WeldTypeGroup } from '../config/types/weld-type-group';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nexport default class TestStageTest extends BaseModel {\n @attr('number')\n declare percentage?: number;\n\n @belongsTo('non-destructive-testing', { async: false })\n declare typeOfTest: NonDestructiveTesting;\n\n @belongsTo('test-stage', { async: false })\n declare testStage: TestStageTest;\n\n @attr('string', { defaultValue: WeldTypeGroup.ALL })\n declare weldTypeGroup: WeldTypeGroup;\n\n get visualLabel() {\n return `${this.typeOfTest.shortDesignation} - ${this.percentage}`;\n }\n\n validations = {\n percentage: {\n presence: {\n message(_key: string, _value: any, model: any): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 100,\n },\n },\n\n typeOfTest: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'test-stage-test',\n percentage: {\n required: true,\n },\n\n typeOfTest: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'test-stage-test': TestStageTest;\n }\n}\n","import { belongsTo, hasMany, SyncHasMany } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport TestStageName from './test-stage-name';\nimport TestStateTest from './test-stage-test';\nimport TestInspectionClass from './test-inspection-class';\nimport TestLocation from './test-location';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport default class TestStage extends BaseModel {\n @belongsTo('test-stage-name', { async: false, inverse: null })\n declare name: TestStageName;\n\n @hasMany('test-stage-test', { async: false })\n declare tests: SyncHasMany;\n\n @belongsTo('test-inspection-class', { async: false, inverse: 'stages' })\n declare inspectionClass: TestInspectionClass;\n\n @belongsTo('test-location', { async: false })\n declare location: TestLocation;\n\n get visualLabel() {\n let name = get(this, 'name');\n if (name) {\n return name.name;\n }\n return '';\n }\n\n validations = {\n name: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'test-stage',\n name: {\n required: true,\n },\n };\n}\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'test-stage': TestStage;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents the Type of Current and Polarity used in welding.\n *\n * The electrical characteristics of the welding arc are fundamental to the\n * welding process and affect heat distribution between the electrode and\n * workpiece, penetration profile, deposition rate, and arc stability.\n *\n * **Direct Current (DC):**\n *\n * - **DC+ (DCEP - Direct Current Electrode Positive / Reverse Polarity):**\n * - Electrons flow from workpiece to electrode\n * - Approximately 70% of heat at the electrode, 30% at workpiece\n * - Deeper penetration, commonly used for GMAW and SMAW\n * - Provides arc cleaning action (removes oxides) in GTAW on aluminum\n *\n * - **DC- (DCEN - Direct Current Electrode Negative / Straight Polarity):**\n * - Electrons flow from electrode to workpiece\n * - Approximately 30% of heat at electrode, 70% at workpiece\n * - Shallower penetration, higher deposition rate\n * - Common for GTAW on steel, SAW with certain flux-wire combinations\n *\n * **Alternating Current (AC):**\n * - Current alternates between positive and negative\n * - Balanced heat distribution and cleaning action\n * - Essential for GTAW welding of aluminum (balance of penetration and oxide removal)\n * - Common for SAW and some SMAW applications\n *\n * **Pulsed Current:**\n * - Current alternates between high (peak) and low (background) values\n * - Provides better heat control, reduced distortion\n * - Enables spray transfer at lower average heat input\n *\n * Current type and polarity is typically an essential variable, requiring\n * requalification if changed beyond the qualified parameters.\n *\n * @extends BaseModel\n */\nexport default class TypeCurrentPolarity extends BaseModel {\n @attr('string')\n declare typeCurrent: string;\n\n @attr('boolean')\n declare system: boolean;\n\n @alias('typeCurrent')\n get visualLabel(): string {\n return this.typeCurrent || '';\n }\n\n validations = {\n typeCurrent: {\n presence: {\n message(_key: string, _value: string, model: TypeCurrentPolarity): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'type-current-polarity',\n typeCurrent: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'type-current-polarity': TypeCurrentPolarity;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { hasMany, belongsTo, attr, AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport FileUpload from './file-upload';\nimport WeldType from './weld-type';\nimport WeldingDetail from './welding-detail';\n\n/**\n * Represents a Weld Layer Configuration (Bead Sequence/Pass Sequence) in the welding domain.\n *\n * Weld Layer Configuration defines the sequence and arrangement of individual\n * weld beads or passes that make up a complete weld joint. This information\n * is particularly important for multi-pass welds where the order, placement,\n * and technique for each pass affects the final weld quality.\n *\n * **Purpose of Layer Configuration:**\n *\n * - **Heat Management:** Controls heat buildup and interpass temperature\n * - **Distortion Control:** Balanced sequences minimize warping\n * - **Mechanical Properties:** Pass sequence affects grain structure and properties\n * - **Defect Prevention:** Proper sequencing prevents lack of fusion, porosity\n * - **Welder Guidance:** Provides clear instructions for production welding\n *\n * **Configuration Components:**\n *\n * - **Root Pass:** First pass establishing the root of the weld\n * - **Hot Pass:** Second pass, often with higher heat to refine root\n * - **Fill Passes:** Intermediate passes building up the joint\n * - **Cap Pass:** Final pass providing the weld face finish\n *\n * **Visual Representation:**\n *\n * The `upload` and `renderedImage` fields store graphical diagrams showing\n * bead placement and sequence. These typically include:\n * - Numbered passes indicating welding order\n * - Bead shape and overlap representation\n * - Stringer vs. weave pattern indication\n *\n * **Related Information:**\n *\n * Layer configurations are linked to applicable `weldTypes` and `weldingDetails`\n * to ensure appropriate configurations are selected for specific joint types.\n * The `grooveType` and `jointType` fields further classify the configuration.\n *\n * @extends BaseModel\n */\nexport default class WeldLayerConfiguration extends BaseModel {\n @attr('string')\n declare description?: string;\n\n @attr('string')\n declare longDescription?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare upload: AsyncBelongsTo;\n\n @attr()\n declare urlImage?: string;\n\n @attr('boolean')\n declare system?: boolean;\n\n @hasMany('weld-type', { async: true, inverse: null })\n declare weldTypes: AsyncHasMany;\n\n @hasMany('welding-detail', { async: true, inverse: null })\n declare weldingDetails: AsyncHasMany;\n\n @attr('string')\n declare grooveType?: string;\n\n @attr('string')\n declare jointType?: string;\n\n @attr()\n declare imageState?: string;\n\n @attr('string')\n declare imageSituation?: string;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare renderedImage: AsyncBelongsTo;\n\n @attr('string')\n declare renderedImagePath?: string;\n\n @attr('date')\n declare modifiedOn: Date;\n\n @alias('description')\n get visualLabel(): string {\n return this.description || '';\n }\n\n @attr('number')\n declare createdById: number;\n\n validations = {\n description: { presence: true },\n longDescription: { presence: true },\n upload: {\n custom: {\n validation(_key: string, value: FileUpload): boolean {\n if (value) {\n if (!isEmpty(get(value, 'id'))) {\n return true;\n }\n }\n return false;\n },\n\n message(_key: string, _value: string, model: WeldLayerConfiguration): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'weld-layer-configuration',\n description: { required: true },\n longDescription: { required: true },\n upload: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'weld-layer-configuration': WeldLayerConfiguration;\n }\n}\n","import Model, { belongsTo, attr } from '@ember-data/model';\nimport GrooveDesign from './groove-design';\n\nexport default class WeldLayerGrooveCopy extends Model {\n @attr('string')\n declare description?: string;\n\n @attr('string')\n declare longDescription?: string;\n\n @belongsTo('groove-design', { async: false, inverse: null })\n declare grooveDesign: GrooveDesign;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'weld-layer-groove-copy': WeldLayerGrooveCopy;\n }\n}\n","import { belongsTo, attr } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\nimport Constants from 'weldnote/utils/constants';\n\nconst { WELD_TYPES } = Constants;\n\n/**\n * Represents a Weld Type (Joint Type) classification in the welding domain.\n *\n * Weld Type defines the fundamental configuration of how two or more workpieces\n * are joined together by welding. The classification is essential for:\n * - Determining appropriate welding procedures\n * - Specifying qualification requirements\n * - Defining inspection and testing criteria\n * - Establishing acceptance standards\n *\n * Common weld types include:\n *\n * **Butt Welds (BW / Groove Welds):**\n * - CJP BW (Complete Joint Penetration Butt Weld / CJP GW): Full penetration through the joint thickness\n * - PJP BW (Partial Joint Penetration Butt Weld / PJP GW): Partial penetration as designed\n * - PP BW (Partial Penetration Butt Weld): Similar to PJP, terminology varies by standard\n *\n * **Fillet Welds (FW):**\n * - Triangular cross-section welds joining two surfaces at approximately right angles\n *\n * **Overlay Welds:**\n * - Weld metal deposited on a base material surface to restore dimensions or provide\n * corrosion/wear resistance (cladding, hard-facing, buttering)\n *\n * Note: Terminology varies between standards. ASME/AWS use \"Groove Weld\" (GW) while\n * ISO/EN use \"Butt Weld\" (BW). The `visualLabel` getter handles this translation\n * based on the associated industry code.\n *\n * @extends BaseModel\n */\nexport default class WeldType extends BaseModel {\n @attr('string')\n declare weldType: string;\n\n @attr('string')\n declare designation: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode: IndustryCode;\n\n @attr('boolean')\n declare system: boolean;\n\n get isOverlayWeld() {\n return this.weldType === WELD_TYPES.OVERLAY_WELD;\n }\n\n get isButtWeld() {\n return this.weldType === WELD_TYPES.BUTT_WELD;\n }\n\n get visualLabel(): string {\n let type = this.weldType;\n if (isEmpty(type)) {\n type = '';\n }\n\n let industryCode = get(this.industryCode, 'code');\n if (industryCode === 'ASME' || industryCode === 'AWS') {\n if (type === 'BW') {\n return 'GW - Groove Weld';\n } else if (type === 'PJP BW') {\n return 'PJP GW - Partial Joint Penetration Groove Weld';\n } else if (type === 'CJP BW') {\n return 'CJP GW - Complete Joint Penetration Groove Weld';\n } else if (type === 'PP BW') {\n return 'PP GW - Partial Penetration Groove Weld';\n }\n }\n return `${this.weldType} - ${this.designation}`;\n }\n\n validations = {\n weldType: { presence: true },\n industryCode: { presence: true },\n };\n\n metadata = {\n modelName: 'weld-type',\n weldType: {\n required: true,\n },\n\n industryCode: {\n required: true,\n },\n };\n}\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'weld-type': WeldType;\n }\n}\n","import { belongsTo, attr, hasMany, SyncHasMany } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport NdtReportCertificate from './ndt-report-certificate';\nimport WelderCertificate from './welder-certificate';\nimport ProjectWeld from './project-weld';\n\nexport default class WelderCertificateRevalidation extends BaseModel {\n @attr('date')\n declare previousDate?: Date;\n\n @attr('date')\n declare nextDate?: Date;\n\n @attr('date')\n declare dateOfRevalidation?: Date;\n\n @attr('string')\n declare revalidator?: string;\n\n @belongsTo('welder-certificate', {\n async: false,\n inverse: 'revalidations',\n })\n declare certificate: WelderCertificate;\n\n @attr('number')\n declare timePeriodMonths?: number;\n\n @attr('string')\n declare type?: string;\n\n @belongsTo('ndt-report-certificate', {\n async: false,\n inverse: null,\n })\n declare revalidationEvidenceReport1: NdtReportCertificate | null;\n\n @belongsTo('ndt-report-certificate', {\n async: false,\n inverse: null,\n })\n declare revalidationEvidenceReport2: NdtReportCertificate | null;\n\n @attr('string')\n declare report1Path?: string;\n\n @attr('string')\n declare report2Path?: string;\n\n @hasMany('project-weld', { async: false, inverse: null })\n declare supportingWelds: SyncHasMany;\n\n get visualLabel() {\n return this.dateOfRevalidation;\n }\n\n validations = {\n previousDate: { presence: true },\n nextDate: { presence: true },\n dateOfRevalidation: { presence: true },\n certificate: { presence: true },\n type: { presence: true },\n };\n\n metadata = {\n modelName: 'welder-certificate-revalidation',\n previousDate: { required: true },\n nextDate: { required: true },\n dateOfRevalidation: { required: true },\n certificate: { required: true },\n type: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welder-certificate-revalidation': WelderCertificateRevalidation;\n }\n}\n","import { service } from '@ember/service';\nimport { attr, belongsTo, hasMany, SyncHasMany } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport BaseModel from 'weldnote/models/base-model';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { isPartialPenetrationButtWeldASME } from 'weldnote/utils/rules/weld-type';\nimport { isBothSides } from 'weldnote/utils/rules/welding-detail';\nimport {\n isStandardASME,\n isStandardAWSD11,\n isWelderStandardISO96061,\n} from 'weldnote/utils/standards';\nimport { thicknessValidation } from 'weldnote/utils/validation/thickness';\nimport { weldingDetailValidation } from 'weldnote/utils/validation/welding-details';\nimport WelderCertificateRules from 'weldnote/utils/welder-certificate-rules';\nimport ExaminingBody from './examining-body';\nimport Welder from './welder';\nimport Company from './company';\nimport WelderStandard from './welder-standard';\nimport ConstructionStandard from './construction-standard';\nimport WeldingProcess from './welding-process';\nimport WeldType from './weld-type';\nimport ArcTransferMode from './arc-transfer-mode';\nimport WeldingDetail from './welding-detail';\nimport WeldingPosition from './welding-position';\nimport TypeCurrentPolarity from './type-current-polarity';\nimport BaseMaterial from './base-material';\nimport FillerMaterial from './filler-material';\nimport FillerMaterialCommercialDesignation from './filler-material-commercial-designation';\nimport ElectrodeType from './electrode-type';\nimport Gas from './gas';\nimport GasCommercialDesignation from './gas-commercial-designation';\nimport Flux from './flux';\nimport FluxCommercialDesignation from './flux-commercial-designation';\nimport BaseMaterialGroup from './base-material-group';\nimport FillerMaterialGroup from './filler-material-group';\nimport FileUpload from './file-upload';\nimport CertificationSpecialRequirement from './certification-special-requirement';\nimport WelderCertificateRevalidation from './welder-certificate-revalidation';\nimport ProcessMecanization from './process-mecanization';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport UserSessionService from 'weldnote/services/user-session';\nimport WPSModel from './welding-procedure-specification';\nimport ProjectWeld from './project-weld';\n\nconst { CERTIFICATE_STATE, CERTIFICATE_TYPE, PRODUCT_TYPE } = Constants;\n\nconst { WELDER_CERTIFICATE } = WelderCertificateRules;\n\n/**\n * Represents a Welder or Welding Operator Performance Qualification Certificate.\n *\n * A Welder Certificate (also known as Welder Qualification or Welder Performance Qualification)\n * documents that a welder or welding operator has demonstrated the skill and ability to produce\n * welds meeting specified quality standards under specific conditions.\n *\n * **Difference from PQR/WPS:**\n * - **PQR/WPS:** Qualifies the *welding procedure* - proves the procedure can produce acceptable welds\n * - **Welder Certificate:** Qualifies the *person* - proves the welder can execute the procedure\n *\n * **Types of Qualifications:**\n *\n * **Welder Qualification (`certificateType: 'WELDER'`):**\n * - For manual and semi-automatic welding processes\n * - Welder controls torch manipulation, arc length, travel speed\n * - Processes: SMAW, GTAW manual, GMAW semi-automatic, FCAW\n *\n * **Welding Operator Qualification (`certificateType: 'OPERATOR'`):**\n * - For mechanized and automatic welding systems\n * - Operator controls equipment setup and monitoring\n * - Processes: SAW, orbital GTAW, robotic welding\n * - Additional variables: arc length control, joint tracking, visual control\n *\n * **Industry Standards Compliance:**\n * - ISO 9606-1 (Qualification testing of welders - Fusion welding - Steel)\n * - ASME Section IX (Welder Performance Qualifications)\n * - AWS D1.1 (Welder Qualification)\n * - AWS D1.5 (Bridge Welding Code)\n *\n * **Test Piece vs Approval Range:**\n * Similar to PQR, the certificate records:\n * - `*TestPiece`: Actual conditions used during the qualification test\n * - `*ApprovalRange`: Range of conditions the welder is qualified to weld\n *\n * **Essential Variables for Qualification:**\n *\n * **Welding Process:**\n * Qualification is process-specific. A welder qualified in SMAW is not\n * automatically qualified for GTAW.\n * - `weldingProcessRootTestPiece`, `weldingProcessFillTestPiece`, `weldingProcessCapTestPiece`\n *\n * **Base Material:**\n * Qualification covers material groups, not specific materials:\n * - `baseMaterial1ApprovalRange`, `baseMaterial2ApprovalRange`: Material groups qualified\n *\n * **Filler Material:**\n * - `fillerMaterialRootApprovalRange`, `fillerMaterialFillApprovalRange`: Filler groups qualified\n * - Typically based on electrode coating type or flux designation\n *\n * **Welding Position:**\n * Position qualification follows a hierarchy (higher position qualifies lower):\n * - Plate: 1G < 2G < 3G < 4G\n * - Pipe: 1G < 2G < 5G < 6G\n * - `weldingPositionRootApprovalRange`, `weldingPositionFillApprovalRange`: Qualified positions\n *\n * **Thickness Range:**\n * Qualification covers a range based on test piece thickness:\n * - `thicknessRootMinimumApprovalRange`, `thicknessRootMaximumApprovalRange`\n * - Thicker test pieces qualify for wider ranges\n *\n * **Diameter (Pipe only):**\n * Larger diameter test pieces qualify for smaller diameters:\n * - `diameterMinimumApprovalRange`: Minimum qualified diameter\n *\n * **Weld Type:**\n * - Butt weld qualification may or may not qualify for fillet welds (standard-dependent)\n * - `supplementaryFilletWeldTest`: Additional test if butt weld doesn't qualify for fillet\n *\n * **Certificate Lifecycle:**\n *\n * **Validity Periods:**\n * - `requalificationPeriod`: Years between external requalifications (typically 2-3 years)\n * - `previousExternalRequalificationDate`: Last full requalification date\n * - `externalRequalificationDeadline`: When external requalification is due\n * - `internalRequalificationDate`: Last 6-month validation\n * - `internalRequalificationDeadline`: Next 6-month validation due\n *\n * **Certificate States (`certificateState`):**\n * - Active: Valid and current\n * - Internally Expired: 6-month validation overdue\n * - Externally Expired: Full requalification period expired\n * - Archived: No longer in use\n *\n * **Revalidation Process:**\n * Per ISO 9606-1, certificates require:\n * - Every 6 months: Confirmation welder is working within qualification scope\n * - Every 2-3 years: Full requalification test or prolongation by responsible body\n *\n * **Testing Requirements:**\n *\n * **Non-Destructive Testing (NDT):**\n * - Visual Testing (VT): Always required\n * - Radiographic (RT) or Ultrasonic (UT): For butt welds\n * - Penetrant (PT) or Magnetic Particle (MT): Surface crack detection\n *\n * **Destructive Testing:**\n * - Bend tests (face, root, side): Ductility verification\n * - Macro examination: Weld profile and fusion verification\n * - Fracture tests: Internal soundness verification\n *\n * @extends BaseModel\n *\n * @example\n * // Creating a welder certificate for SMAW on carbon steel\n * const certificate = store.createRecord('welder-certificate', {\n * certificateNumber: 'WQ-2024-001',\n * certificateType: 'WELDER',\n * welder: johnSmith,\n * standard: iso96061Standard,\n * weldingProcessRootTestPiece: smawProcess,\n * weldingProcessFillTestPiece: smawProcess,\n * weldTypeTestPiece: buttWeld,\n * weldingPositionRootTestPiece: position6G,\n * thicknessTotalTestPiece: 12,\n * diameterTestPiece: 168.3,\n * productTypeTestPiece: 'PIPE',\n * requalificationPeriod: 2\n * });\n */\nexport class WelderCertificate extends BaseModel {\n @service\n declare userSession: UserSessionService;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @attr('string')\n declare certificateNumber?: string;\n\n @belongsTo('examining-body', { async: false, inverse: null })\n declare examiningBody: ExaminingBody;\n\n @attr('string')\n declare designation?: string;\n\n @belongsTo('welder', { async: false, inverse: null })\n declare welder: Welder;\n\n @belongsTo('company', { async: false, inverse: null })\n declare company: Company;\n\n @belongsTo('welder-standard', { async: false, inverse: null })\n declare standard: WelderStandard;\n\n @belongsTo('construction-standard', { async: false, inverse: null })\n declare constructionStandard: ConstructionStandard;\n\n @attr('string')\n declare jobKnowledge?: string;\n\n @attr('date')\n declare emissionDate?: Date;\n\n @attr('date')\n declare previousExternalRequalificationDate?: Date;\n\n @attr('date')\n declare internalRequalificationDate?: Date;\n\n @attr('date')\n declare internalRequalificationDeadline?: Date;\n\n @attr('date')\n declare externalRequalificationDeadline?: Date;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessRootTestPiece: WeldingProcess;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessFillTestPiece: WeldingProcess;\n\n @belongsTo('weld-type', { async: false, inverse: null })\n declare weldTypeTestPiece: WeldType;\n\n @belongsTo('welder-certificate', { inverse: 'supplementaryFilletWeldTest', async: false })\n declare supplementaryFilletWeldTest: WelderCertificate;\n\n @attr('boolean')\n declare supplementaryFilletWeldTestRequired?: boolean;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeRootTestPiece: ArcTransferMode;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeFillTestPiece: ArcTransferMode;\n\n @hasMany('welding-detail', { async: false, inverse: null })\n declare weldingDetailTestPiece: SyncHasMany;\n\n @belongsTo('welding-position', { async: false, inverse: null })\n declare weldingPositionRootTestPiece: WeldingPosition;\n\n @belongsTo('welding-position', { async: false, inverse: null })\n declare weldingPositionFillTestPiece: WeldingPosition;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentRootTestPiece: TypeCurrentPolarity;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentFillTestPiece: TypeCurrentPolarity;\n\n @belongsTo('base-material', { async: false, inverse: null })\n declare baseMaterial1TestPiece: BaseMaterial;\n\n @belongsTo('base-material', { async: false, inverse: null })\n declare baseMaterial2TestPiece: BaseMaterial;\n\n @attr('string')\n declare productTypeTestPiece?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootTestPiece?: number;\n\n @attr('string')\n declare thicknessRootLayerTestPiece?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillTestPiece?: number;\n\n @attr('string')\n declare thicknessFillLayerTestPiece?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessTotalTestPiece?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterTestPiece?: number;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialRootTestPiece: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialRootCommercialDesignationTestPiece: FillerMaterialCommercialDesignation;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialFillTestPiece: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialFillCommercialDesignationTestPiece: FillerMaterialCommercialDesignation;\n\n @belongsTo('electrode-type', { async: false, inverse: null })\n declare electrodeTypeRootTestPiece: ElectrodeType;\n\n @belongsTo('electrode-type', { async: false, inverse: null })\n declare electrodeTypeFillTestPiece: ElectrodeType;\n\n @attr('string')\n declare shieldingRoot?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingRootGasTestPiece: Gas;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingRootGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingRootGasMixture?: string;\n\n @belongsTo('flux', { async: false })\n declare shieldingRootFluxTestPiece: Flux;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingRootFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @attr('string')\n declare flowRateRoot?: string;\n\n @attr('string')\n declare shieldingFill?: string;\n\n @belongsTo('gas', { async: false })\n declare shieldingFillGasTestPiece: Gas;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingFillGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingFillGasMixture?: string;\n\n @belongsTo('flux', { async: false })\n declare shieldingFillFluxTestPiece: Flux;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingFillFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @attr('string')\n declare flowRateFill?: string;\n\n @attr('string')\n declare backingTestPiece?: string;\n\n @belongsTo('gas', { async: false })\n declare backingGasTestPiece: Gas;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare backingGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @attr('string')\n declare backingGasMixture?: string;\n\n @belongsTo('flux', { async: false })\n declare backingFluxTestPiece: Flux;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare backingFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @attr('string')\n declare backingFlowRateRoot?: string;\n\n @attr('string')\n declare backingFlowRateFill?: string;\n\n @hasMany('welding-process', { async: false, inverse: null })\n declare weldingProcessRootApprovalRange: SyncHasMany;\n\n @hasMany('welding-process', { async: false, inverse: null })\n declare weldingProcessFillApprovalRange: SyncHasMany;\n\n @hasMany('weld-type', { async: false, inverse: null })\n declare weldTypeApprovalRange: SyncHasMany;\n\n @hasMany('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeRootApprovalRange: SyncHasMany;\n\n @hasMany('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeFillApprovalRange: SyncHasMany;\n\n @hasMany('welding-detail', { async: false, inverse: null })\n declare weldingDetailsApprovalRange: SyncHasMany;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionRootApprovalRange: SyncHasMany;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionFillApprovalRange: SyncHasMany;\n\n @hasMany('base-material-group', { async: false, inverse: null })\n declare baseMaterial1ApprovalRange: SyncHasMany;\n\n @hasMany('base-material-group', { async: false, inverse: null })\n declare baseMaterial2ApprovalRange: SyncHasMany;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessTotalMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessTotalMaximumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterMinimumApprovalRange?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterMaximumApprovalRange?: number;\n\n @hasMany('filler-material-group', { async: false, inverse: null })\n declare fillerMaterialRootApprovalRange: SyncHasMany;\n\n @hasMany('filler-material-group', { async: false, inverse: null })\n declare fillerMaterialFillApprovalRange: SyncHasMany;\n\n @hasMany('filler-material-group', { async: false, inverse: null })\n declare fillerMaterialCapApprovalRange: SyncHasMany;\n\n @hasMany('electrode-type', { async: false, inverse: null })\n declare electrodeTypeRootApprovalRange: SyncHasMany;\n\n @hasMany('electrode-type', { async: false, inverse: null })\n declare electrodeTypeFillApprovalRange: SyncHasMany;\n\n @attr('number')\n declare requalificationPeriod?: number;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare certificateDocument: FileUpload;\n\n @attr('string')\n declare certificateDocumentPath?: string;\n\n @attr('string')\n declare certificateState?: string;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessCapTestPiece: WeldingProcess;\n\n @hasMany('welding-process', { async: false, inverse: null })\n declare weldingProcessCapApprovalRange: SyncHasMany;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeCapTestPiece: ArcTransferMode;\n\n @hasMany('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeCapApprovalRange: SyncHasMany;\n\n @belongsTo('welding-position', { async: false, inverse: null })\n declare weldingPositionCapTestPiece: WeldingPosition;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionCapApprovalRange: SyncHasMany;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentCapTestPiece: TypeCurrentPolarity;\n\n @attr('number')\n declare thicknessCapTestPiece?: number;\n\n @attr('string')\n declare thicknessCapLayerTestPiece?: string;\n\n @attr('number')\n declare thicknessCapMinimumApprovalRange?: number;\n\n @attr('number')\n declare thicknessCapMaximumApprovalRange?: number;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialCapTestPiece: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', { async: false, inverse: null })\n declare fillerMaterialCapCommercialDesignationTestPiece: FillerMaterialCommercialDesignation;\n\n @belongsTo('electrode-type', { async: false, inverse: null })\n declare electrodeTypeCapTestPiece: ElectrodeType;\n\n @hasMany('electrode-type', { async: false, inverse: null })\n declare electrodeTypeCapApprovalRange: SyncHasMany;\n\n @attr('string')\n declare shieldingCap?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingCapGasTestPiece: Gas;\n\n @belongsTo('gas-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingCapGasCommercialDesignationTestPiece: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingCapGasMixture?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingCapFluxTestPiece: Flux;\n\n @belongsTo('flux-commercial-designation', {\n async: false,\n inverse: null,\n })\n declare shieldingCapFluxCommercialDesignationTestPiece: FluxCommercialDesignation;\n\n @attr('string')\n declare flowRateCap?: string;\n\n @attr('string')\n declare backingFlowRateCap?: string;\n\n @attr('number')\n declare baseMaterial1Thickness?: number;\n\n @attr('number')\n declare baseMaterial1Diameter?: number;\n\n @attr('number')\n declare baseMaterial2Thickness?: number;\n\n @attr('number')\n declare baseMaterial2Diameter?: number;\n\n @attr('string')\n declare weldingPositionRootDirection?: string;\n\n @attr('string')\n declare weldingPositionFillDirection?: string;\n\n @attr('string')\n declare weldingPositionCapDirection?: string;\n\n @hasMany('certification-special-requirement', { async: false, inverse: null })\n declare specialRequirements: SyncHasMany;\n\n @attr('string')\n declare overlayType?: string;\n\n @attr('string')\n declare jointType?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare certificateReportDocument: FileUpload;\n\n @attr('string')\n declare certificateReportDocumentPath?: string;\n\n @attr('boolean')\n declare certificateReportOutdated?: boolean;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare penetrantTestDocument: FileUpload;\n\n @attr('string')\n declare penetrantTestDocumentPath?: string;\n\n @attr('string')\n declare penetrantTestResult?: string;\n\n @attr('string')\n declare penetrantTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare magneticTestDocument: FileUpload;\n\n @attr('string')\n declare magneticTestDocumentPath?: string;\n\n @attr('string')\n declare magneticTestResult?: string;\n\n @attr('string')\n declare magneticTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare ultrasonicTestDocument: FileUpload;\n\n @attr('string')\n declare ultrasonicTestDocumentPath?: string;\n\n @attr('string')\n declare ultrasonicTestResult?: string;\n\n @attr('string')\n declare ultrasonicTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare radiographicTestDocument: FileUpload;\n\n @attr('string')\n declare radiographicTestDocumentPath?: string;\n\n @attr('string')\n declare radiographicTestResult?: string;\n\n @attr('string')\n declare radiographicTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare visualTestDocument: FileUpload;\n\n @attr('string')\n declare visualTestDocumentPath?: string;\n\n @attr('string')\n declare visualTestResult?: string;\n\n @attr('string')\n declare visualTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare tensileTestDocument: FileUpload;\n\n @attr('string')\n declare tensileTestDocumentPath?: string;\n\n @attr('string')\n declare tensileTestResult?: string;\n\n @attr('string')\n declare tensileTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare bendTestDocument: FileUpload;\n\n @attr('string')\n declare bendTestDocumentPath?: string;\n\n @attr('string')\n declare bendTestResult?: string;\n\n @attr('string')\n declare bendTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare macrographicTestDocument: FileUpload;\n\n @attr('string')\n declare macrographicTestDocumentPath?: string;\n\n @attr('string')\n declare macrographicTestResult?: string;\n\n @attr('string')\n declare macrographicTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare impactTestDocument: FileUpload;\n\n @attr('string')\n declare impactTestDocumentPath?: string;\n\n @attr('string')\n declare impactTestResult?: string;\n\n @attr('string')\n declare impactTestNumber?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare fractureTestDocument: FileUpload;\n\n @attr('string')\n declare fractureTestDocumentPath?: string;\n\n @attr('string')\n declare fractureTestResult?: string;\n\n @attr('string')\n declare fractureTestNumber?: string;\n\n @hasMany('welder-certificate-revalidation', { async: false, inverse: 'certificate' })\n declare revalidations: SyncHasMany;\n\n @attr('string')\n declare testConductedBy?: string;\n\n @belongsTo('welding-procedure-specification', { async: false, inverse: null })\n declare wps: WPSModel;\n\n @attr('string')\n declare notes?: string;\n\n @attr('string')\n declare certificateType?: string;\n\n @attr('string')\n declare arcLengthControlProcess1TestPiece?: string | null;\n\n @attr('string')\n declare visualControlProcess1TestPiece?: string | null;\n\n @attr('string')\n declare jointTrackingProcess1TestPiece?: string | null;\n\n @attr('string')\n declare arcLengthControlProcess2TestPiece?: string | null;\n\n @attr('string')\n declare visualControlProcess2TestPiece?: string | null;\n\n @attr('string')\n declare jointTrackingProcess2TestPiece?: string | null;\n\n @attr('string')\n declare arcLengthControlProcess3TestPiece?: string | null;\n\n @attr('string')\n declare visualControlProcess3TestPiece?: string | null;\n\n @attr('string')\n declare jointTrackingProcess3TestPiece?: string | null;\n\n @attr('string')\n declare remoteWeldingUnitId?: string | null;\n\n @attr('string')\n declare remoteWeldingUnitDisplayName?: string | null;\n\n @attr('string')\n declare weldingOperatorWeldingDetailsProcess1TestPiece?: string | null;\n\n @attr('string')\n declare weldingOperatorWeldingDetailsProcess2TestPiece?: string | null;\n\n @attr('string')\n declare weldingOperatorWeldingDetailsProcess3TestPiece?: string | null;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationRootTestPiece: ProcessMecanization | null;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationFillTestPiece: ProcessMecanization | null;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationCapTestPiece: ProcessMecanization | null;\n\n @hasMany('process-mecanization', { async: false, inverse: null })\n declare processMecanizationRootApprovalRange: SyncHasMany;\n\n @hasMany('process-mecanization', { async: false, inverse: null })\n declare processMecanizationFillApprovalRange: SyncHasMany;\n\n @hasMany('process-mecanization', { async: false, inverse: null })\n declare processMecanizationCapApprovalRange: SyncHasMany;\n\n @attr('string')\n declare unitSystem?: string | null;\n\n @attr('boolean')\n declare automaticRenewal?: boolean;\n\n @hasMany('project-weld', { async: false, inverse: null })\n declare internalAutoRenewSupportingWelds: SyncHasMany;\n\n @hasMany('project-weld', { async: false, inverse: null })\n declare externalAutoRenewSupportingWelds: SyncHasMany;\n\n get visualLabel() {\n return this.certificateNumber;\n }\n\n validations = {\n certificateNumber: {\n presence: {\n message(_key: string, _value: string, model: WelderCertificate): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n unitSystem: {\n presence: {\n message(_key: string, _value: string, model: WelderCertificate): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n standard: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n thicknessRootTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: thicknessValidation(\n WELDER_CERTIFICATE.THICKNESS_ROOT_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_FILL_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_CAP_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_TOTAL_TEST_PIECE\n ),\n },\n\n thicknessFillTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: thicknessValidation(\n WELDER_CERTIFICATE.THICKNESS_ROOT_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_FILL_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_CAP_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_TOTAL_TEST_PIECE\n ),\n },\n\n thicknessTotalTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n diameterTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessRootMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessRootMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessFillMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessFillMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessTotalMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessTotalMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n diameterMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n diameterMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n requalificationPeriod: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n onlyInteger: true,\n },\n\n custom: {\n validation(_key: string, value: any, model: WelderCertificate) {\n let { standard } = model;\n if (isStandardASME(standard) || isStandardAWSD11(standard)) {\n return true;\n }\n if (\n !isEmpty(get(model, 'previousExternalRequalificationDate')) ||\n !isEmpty(get(model, 'externalRequalificationDeadline'))\n ) {\n return !isEmpty(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n return model.translate(\n 'model-validations.welder-certificate.requalificationPeriod.required-by-date'\n );\n },\n },\n },\n\n previousExternalRequalificationDate: {\n custom: {\n validation(_key: string, value: any, model: WelderCertificate) {\n if (!isEmpty(model.get('externalRequalificationDeadline'))) {\n return !isEmpty(value);\n }\n if (!isEmpty(model.get('requalificationPeriod'))) {\n return !isEmpty(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n if (!isEmpty(model.get('externalRequalificationDeadline'))) {\n return model.translate(\n 'model-validations.welder-certificate.previousExternalRequalificationDate.required-by-deadline'\n );\n }\n if (!isEmpty(model.get('requalificationPeriod'))) {\n return model.translate(\n 'model-validations.welder-certificate.previousExternalRequalificationDate.required-by-period'\n );\n }\n return '';\n },\n },\n },\n\n internalRequalificationDate: {\n custom: {\n validation(_key: string, value: any, model: WelderCertificate) {\n if (!isEmpty(model.get('internalRequalificationDeadline'))) {\n return !isEmpty(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n return model.translate(\n 'model-validations.welder-certificate.internalRequalificationDate.required-by-deadline'\n );\n },\n },\n },\n\n internalRequalificationDeadline: {\n custom: {\n validation(_key: string, value: any, model: WelderCertificate) {\n if (!isEmpty(model.get('internalRequalificationDate'))) {\n return !isEmpty(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n return model.translate(\n 'model-validations.welder-certificate.internalRequalificationDeadline.required-by-date'\n );\n },\n },\n },\n\n externalRequalificationDeadline: {\n custom: {\n validation(_key: string, value: any, model: WelderCertificate) {\n if (isWelderStandardISO96061(model.standard)) {\n return true;\n }\n if (!isEmpty(model.get('requalificationPeriod'))) {\n return !isEmpty(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n return model.translate(\n 'model-validations.welder-certificate.externalRequalificationDeadline.required-by-period'\n );\n },\n },\n },\n\n thicknessCapTestPiece: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: thicknessValidation(\n WELDER_CERTIFICATE.THICKNESS_ROOT_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_FILL_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_CAP_TEST_PIECE,\n WELDER_CERTIFICATE.THICKNESS_TOTAL_TEST_PIECE\n ),\n },\n\n thicknessCapMinimumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n thicknessCapMaximumApprovalRange: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n baseMaterial1Thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n baseMaterial1Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n baseMaterial2Thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n baseMaterial2Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n shieldingRoot: {\n custom: {\n if() {\n // Disable the validation because of errors for customers\n // this needs to be either removed, or enabled correctly\n return false;\n },\n\n validation(_key: string, value: any, model: WelderCertificate) {\n let { weldingProcessRootTestPiece: weldingProcessRoot } = model;\n if (!isEmpty(weldingProcessRoot)) {\n let weldingProcessCode = get(weldingProcessRoot, 'shortDesignation');\n let correctShielding = calculateShielding(weldingProcessCode);\n if (!isEmpty(correctShielding)) {\n return correctShielding === value;\n }\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n let { weldingProcessRootTestPiece: weldingProcessRoot } = model;\n let process = get(weldingProcessRoot, 'shortDesignation');\n let correctShielding = calculateShielding(process);\n let shielding = model.translate(`lov.shielding.${correctShielding}`);\n return model\n .translate('model-validations.shielding.root', {\n process,\n shielding,\n })\n .toString();\n },\n },\n },\n\n shieldingFill: {\n custom: {\n if() {\n // Disable the validation because of errors for customers\n // this needs to be either removed, or enabled correctly\n return false;\n // return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: WelderCertificate) {\n let { weldingProcessFillTestPiece: weldingProcessFill } = model;\n if (!isEmpty(weldingProcessFill)) {\n let weldingProcessCode = get(weldingProcessFill, 'shortDesignation');\n let correctShielding = calculateShielding(weldingProcessCode);\n if (!isEmpty(correctShielding)) {\n return correctShielding === value;\n }\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n let { weldingProcessFillTestPiece: weldingProcessFill } = model;\n let process = get(weldingProcessFill, 'shortDesignation');\n let correctShielding = calculateShielding(process);\n let shielding = model.translate(`lov.shielding.${correctShielding}`);\n return model\n .translate('model-validations.shielding.fill', {\n process,\n shielding,\n })\n .toString();\n },\n },\n },\n\n shieldingCap: {\n custom: {\n if() {\n // Disable the validation because of errors for customers\n // this needs to be either removed, or enabled correctly\n return false;\n // return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: WelderCertificate) {\n let { weldingProcessCapTestPiece: weldingProcessCap } = model;\n if (!isEmpty(weldingProcessCap)) {\n let weldingProcessCode = get(weldingProcessCap, 'shortDesignation');\n let correctShielding = calculateShielding(weldingProcessCode);\n if (!isEmpty(correctShielding)) {\n return correctShielding === value;\n }\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WelderCertificate) {\n let { weldingProcessCapTestPiece: weldingProcessCap } = model;\n let process = get(weldingProcessCap, 'shortDesignation');\n let correctShielding = calculateShielding(process);\n let shielding = model.translate(`lov.shielding.${correctShielding}`);\n return model\n .translate('model-validations.shielding.cap', {\n process,\n shielding,\n })\n .toString();\n },\n },\n },\n\n weldingDetailTestPiece: {\n custom: weldingDetailValidation,\n },\n };\n\n metadata = {\n modelName: 'welder-certificate',\n listRoute: 'welder-certificates',\n editRoute: 'welder-certificate',\n certificateNumber: { required: true },\n standard: { required: true },\n unitSystem: { required: true },\n };\n\n @computed('certificateState')\n get isArchived() {\n return this.certificateState === CERTIFICATE_STATE.ARCHIVED;\n }\n\n get isInternallyExpired(): boolean {\n return this.certificateState === CERTIFICATE_STATE.INTERNALLY_EXPIRED;\n }\n\n get isExternallyExpired(): boolean {\n return this.certificateState === CERTIFICATE_STATE.EXTERNALLY_EXPIRED;\n }\n\n get isWelderCertificate(): boolean {\n return this.certificateType === CERTIFICATE_TYPE.WELDER;\n }\n\n get isWelderOperatorCertificate(): boolean {\n return this.certificateType === CERTIFICATE_TYPE.OPERATOR;\n }\n\n get hasAttachement(): boolean {\n return !isEmpty(this.certificateDocumentPath);\n }\n\n getIndustryCode() {\n let { standard } = this;\n if (!isEmpty(standard)) {\n let code = get(standard, 'code');\n if (!isEmpty(code)) {\n let codeId = get(code, 'id');\n return codeId;\n }\n }\n return null;\n }\n\n isBothSides(): boolean {\n if (this.weldingDetailTestPiece) {\n return isBothSides(this.weldingDetailTestPiece.toArray());\n }\n return false;\n }\n\n isPartialPenetrationButtWeld() {\n return isPartialPenetrationButtWeldASME(this.weldTypeTestPiece);\n }\n\n get isPlate() {\n return this.productTypeTestPiece === PRODUCT_TYPE.PLATE;\n }\n\n get isPipe() {\n return this.productTypeTestPiece === PRODUCT_TYPE.PIPE;\n }\n\n get isOverlayWeld() {\n let weldType = get(this, 'weldTypeTestPiece');\n if (weldType) {\n return weldType.isOverlayWeld;\n }\n return false;\n }\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || '');\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || '');\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || '');\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || '');\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || '');\n }\n get pressureUnit() {\n return this.units.getPressureUnit(this.unitSystem || '');\n }\n get forceUnit() {\n return this.units.getForceUnit(this.unitSystem || '');\n }\n get areaUnit() {\n return this.units.getAreaUnit(this.unitSystem || '');\n }\n get energyUnit() {\n return this.units.getEnergyUnit(this.unitSystem || '');\n }\n\n validateInternally = memberAction({ path: 'validateInternally' });\n\n validateExternally = memberAction({ path: 'validateExternally' });\n\n archive = memberAction({ path: 'archiveCertificate' });\n\n unarchive = memberAction({ path: 'unarchiveCertificate' });\n\n duplicateCertificate = memberAction({ path: 'duplicateCertificate' });\n\n createReport = memberAction({ path: 'createReport', type: 'PUT' });\n\n refreshSupportingWelds = memberAction({ path: 'refreshSupportingWelds' });\n}\n\nexport default WelderCertificate;\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welder-certificate': WelderCertificate;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\nimport { WeldingStandard } from '../config/types/welding-standard';\n\nexport default class WelderStandard extends BaseModel implements WeldingStandard {\n @attr('string')\n declare standard: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare code: IndustryCode;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel() {\n return this.standard;\n }\n\n get industryCodeId(): string {\n let code = get(this, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n validations = {\n standard: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: WelderStandard): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n\n code: {\n presence: {\n presence: {\n message(_key: string, _value: string, model: WelderStandard): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n },\n };\n\n metadata = {\n modelName: 'welder-standard',\n standard: { required: true },\n code: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welder-standard': WelderStandard;\n }\n}\n","import { belongsTo, attr, AsyncBelongsTo } from '@ember-data/model';\nimport { computed } from '@ember/object';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport Constants from 'weldnote/utils/constants';\nimport FileUpload from './file-upload';\nimport Company from './company';\n\nconst { ARCHIVAL_STATE } = Constants;\n\n/**\n * Represents a Welder (Welding Operator) in the welding management domain.\n *\n * A Welder is an individual qualified to perform welding operations. This model\n * tracks welder identification, qualifications, and performance metrics for\n * quality control and resource management purposes.\n *\n * **Identification Properties:**\n *\n * - **welderName:** Full name of the welder\n * - **welderStamp:** Unique identification stamp/mark used to identify welds\n * performed by this welder (critical for traceability)\n * - **welderId:** Official identification number (employee ID, certification number)\n * - **welderIdType:** Type of ID (passport, national ID, company ID)\n * - **dateBirth:** Date of birth (for certification records)\n *\n * **Welder Stamp Importance:**\n *\n * The welder stamp is a unique identifier that the welder applies adjacent to\n * completed welds. This stamp enables:\n * - Traceability of welds to the individual who made them\n * - Quality performance tracking per welder\n * - Investigation of defects or failures\n * - Verification that qualified welders performed the work\n *\n * **Performance Metrics:**\n *\n * - **totalWelds:** Total number of welds produced\n * - **goodWelds:** Welds passing inspection on first attempt\n * - **repairedWelds:** Welds requiring repair\n * - **repairRate:** Percentage of welds requiring repair (quality indicator)\n *\n * **Lifecycle Management:**\n *\n * - **archivalState:** Active or archived status (inactive welders can be archived)\n * - **company:** The company the welder is associated with\n * - **welderReport:** Document containing welder's qualification summary\n *\n * Welder records are linked to their qualification certificates, which\n * document the processes, materials, and positions they are qualified to weld.\n *\n * @extends BaseModel\n */\nexport default class Welder extends BaseModel {\n @attr('string')\n declare welderName?: string;\n\n @attr('string')\n declare welderStamp?: string;\n\n @attr('string')\n declare welderId?: string;\n\n @attr('string')\n declare welderIdType?: string;\n\n @attr('date')\n declare dateBirth?: Date;\n\n @belongsTo('file-upload', { async: true, inverse: null })\n declare welderReport: AsyncBelongsTo;\n\n @attr('string')\n declare welderReportPath?: string;\n\n @belongsTo('company', { async: true, inverse: null })\n declare company: AsyncBelongsTo;\n\n @attr('number')\n declare totalWelds?: number;\n\n @attr('number')\n declare goodWelds?: number;\n\n @attr('number')\n declare repairedWelds?: number;\n\n @attr('number')\n declare repairRate?: number;\n\n @attr('string')\n declare archivalState?: string;\n\n get visualLabel(): string {\n return this.welderName || '';\n }\n\n validations = {\n welderName: { presence: true },\n welderStamp: { presence: true },\n };\n\n metadata = {\n modelName: 'welder',\n welderName: { required: true },\n welderStamp: { required: true },\n listRoute: 'welders',\n editRoute: 'welder',\n };\n\n get name() {\n return this.welderName;\n }\n\n get stamp(): string {\n return this.welderStamp || '';\n }\n\n @computed('archivalState')\n get isArchived() {\n return this.archivalState === ARCHIVAL_STATE.ARCHIVED;\n }\n\n @computed('archivalState')\n get isActive() {\n return this.archivalState === ARCHIVAL_STATE.ACTIVE;\n }\n\n createWelderReport = memberAction({ path: 'createWelderReport' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n welder: Welder;\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class WeldingBookStatus extends BaseModel {\n @attr('string')\n declare designation?: string;\n\n @attr('string')\n declare abbreviation?: string;\n\n get visualLabel(): string {\n return `${this.designation} - ${this.abbreviation}`;\n }\n\n validations = {\n designation: {\n presence: {\n message(_key: string, _value: string, model: WeldingBookStatus): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n\n abbreviation: {\n presence: {\n message(_key: string, _value: string, model: WeldingBookStatus): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'welding-book-status',\n designation: { required: true },\n abbreviation: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welding-book-status': WeldingBookStatus;\n }\n}\n","import { alias } from '@ember/object/computed';\nimport { belongsTo, attr } from '@ember-data/model';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class WeldingBookWeldInspection extends BaseModel {\n @belongsTo('welding-book-weld', { async: false, inverse: 'inspections' })\n weld;\n\n @belongsTo('non-destructive-testing', { async: false, inverse: null })\n test;\n\n @attr('number')\n percentage;\n\n @belongsTo('test-stage-name', { async: false, inverse: null })\n testStageName;\n\n @belongsTo('test-location', { async: false, inverse: null })\n testLocation;\n\n @alias('weld')\n visualLabel;\n\n validations = {\n weld: {\n custom: {\n validation(_key, value) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key, _value, model) {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n test: {\n custom: {\n validation(_key, value) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key, _value, model) {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n percentage: {\n numericality: {\n allowBlank: false,\n lessThanOrEqualTo: 100,\n greaterThanOrEqualTo: 0,\n onlyInteger: true,\n },\n },\n };\n\n metadata = {\n modelName: 'welding-book-weld-inspection',\n };\n}\n","import { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { attr, belongsTo, hasMany } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\n\nexport default class WeldingBookWeld extends BaseModel {\n @attr('string')\n weldNumber;\n\n @attr('number')\n baseMaterial1Thickness;\n\n @attr('number')\n baseMaterial1Diameter;\n\n @attr('number')\n baseMaterial2Thickness;\n\n @attr('number')\n baseMaterial2Diameter;\n\n @belongsTo('welding-procedure-specification', { async: true, inverse: null })\n wps;\n\n @belongsTo('welding-book', { async: true, inverse: 'welds' })\n weldingBook;\n\n @attr('number')\n orderNum;\n\n @attr()\n visualData;\n\n @hasMany('welding-book-weld-inspection', { async: false, inverse: 'weld' })\n inspections;\n\n @alias('weldNumber')\n visualLabel;\n\n validations = {\n weldNumber: { presence: true },\n baseMaterial1Thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n baseMaterial1Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n baseMaterial2Thickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n baseMaterial2Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n weldingBook: {\n // Ideally, we wanted to validate the presence of a weld. But it is giving an unexpected\n // \"weld id is null\" error in some cases. Making the relationship async will make it work,\n // but it's not what we want here. In official documentation it is only mentioned that it\n // works on async relationships: https://github.com/esbanarango/ember-model-validator#presence\n // presence: {\n // message() {\n // return this.translate('generic.error.input-value');\n // },\n // },\n },\n\n orderNum: {\n numericality: {\n allowBlank: false,\n onlyInteger: true,\n },\n },\n };\n\n metadata = {\n modelName: 'welding-book-weld',\n weldNumber: { required: true },\n weldingBook: { required: true },\n orderNum: { required: true },\n };\n\n @computed(\n 'weldNumber',\n 'baseMaterial1Thickness',\n 'baseMaterial2Thickness',\n 'baseMaterial1Diameter',\n 'baseMaterial2Diameter',\n 'wps',\n 'inspections'\n )\n get isEmpty() {\n let allEmpty =\n !isEmpty(this.weldNumber) &&\n isEmpty(this.baseMaterial1Thickness) &&\n isEmpty(this.baseMaterial2Thickness) &&\n isEmpty(this.baseMaterial1Diameter) &&\n isEmpty(this.baseMaterial2Diameter) &&\n isEmpty(this.get('wps.id')) &&\n isEmpty(this.inspections);\n return allEmpty;\n }\n\n @computed('visualData')\n get hasAssociatedPqr() {\n return (\n this.visualData?.pqrRootId ||\n this.visualData?.pqrFillId ||\n this.visualData?.pqrCapId ||\n this.visualData?.pqrPcId\n );\n }\n\n @computed('visualData')\n get hasRootPqr() {\n return this.visualData?.pqrRootId;\n }\n\n @computed('visualData')\n get hasUniqueFillPqr() {\n return this.visualData?.pqrFillId && this.visualData?.pqrRootId !== this.visualData?.pqrFillId;\n }\n\n @computed('visualData')\n get hasUniqueCapPqr() {\n return (\n this.visualData?.pqrCapId &&\n this.visualData?.pqrRootId !== this.visualData?.pqrCapId &&\n this.visualData?.pqrFillId !== this.visualData?.pqrCapId\n );\n }\n}\n","import { notEmpty, equal, alias } from '@ember/object/computed';\nimport { hasMany, belongsTo, attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport Rules from 'weldnote/utils/welding-book-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { service } from '@ember/service';\n\nconst { WELDING_BOOK } = Rules;\nconst { WPS_INCLUSION, ARCHIVAL_STATE } = Constants;\n\nexport default class WeldingBook extends BaseModel {\n @service('unit-system')\n units;\n\n @attr('string')\n designation;\n\n @attr('string', { defaultValue: '0' })\n revision;\n\n @attr('string')\n revisionStatus;\n\n @attr('string')\n customer;\n\n @belongsTo('company')\n supplier;\n\n @belongsTo('pqr-standard')\n standard;\n\n @belongsTo('welder-standard')\n welderStandard;\n\n @attr('date')\n revisionDate;\n\n @belongsTo('staff')\n writtenBy;\n\n @attr('date')\n writtenByDate;\n\n @belongsTo('staff')\n verifiedBy;\n\n @attr('date')\n verifiedByDate;\n\n @belongsTo('staff')\n approvedBy;\n\n @attr('date')\n approvedByDate;\n\n @belongsTo('welding-book-status')\n status;\n\n @attr('string')\n notes;\n\n @attr('boolean')\n includePqrs;\n\n @hasMany('welding-procedure-specification')\n wps;\n\n @hasMany('pqr')\n pqrs;\n\n @hasMany('welder')\n welders;\n\n @belongsTo('file-upload')\n weldingBookDocument;\n\n @attr('string')\n weldingBookDocumentPath;\n\n @hasMany('component-drawing', { async: false })\n componentDrawings;\n\n @hasMany('welding-book-weld')\n welds;\n\n @belongsTo('file-upload')\n coverImage;\n\n @attr('string')\n coverImagePath;\n\n @belongsTo('project')\n weldingProject;\n\n @belongsTo('project-component')\n component;\n\n @attr('string')\n archivalState;\n\n @attr('string', { defaultValue: WPS_INCLUSION.GENERATE_PDF })\n typeOfWpsInclusion;\n\n @alias('designation')\n visualLabel;\n\n @attr('string')\n unitSystem;\n\n validations = {\n designation: { presence: true },\n revision: { presence: true },\n weldingProject: { presence: true },\n revisionDate: { presence: true },\n supplier: { presence: true },\n unitSystem: { presence: true },\n standard: {\n custom: {\n if(/* key, value, model */) {\n return false;\n // let welderStandard = get(model, WELDING_BOOK.WELDER_STANDARD);\n // let standardId = get(value, 'id');\n // let welderStandardId = get(welderStandard, 'id');\n // return !isEmpty(standardId) && !isEmpty(welderStandardId);\n },\n\n validation(/* key, value, model*/) {\n return true;\n // let currentStandard = value;\n // let certificateStandard = get(model, WELDING_BOOK.WELDER_STANDARD);\n // return isSameStandard(currentStandard, certificateStandard);\n },\n\n message(key, value, model) {\n return model.translate('model-validations.welding-book.standard');\n },\n },\n },\n\n welderStandard: {\n custom: {\n if(/* key, value, model */) {\n return false;\n // let standard = get(model, WELDING_BOOK.STANDARD);\n // return !isEmpty(get(value, 'id') && !isEmpty(get(standard, 'id')));\n },\n\n validation(/* key, value, model*/) {\n return true;\n // let welderStandard = value;\n // let standard = get(model, WELDING_BOOK.STANDARD);\n // return isSameStandard(welderStandard, standard);\n },\n\n message(key, value, model) {\n return model.translate('model-validations.welding-book.welder-standard');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'welding-book',\n designation: { required: true },\n revision: { required: true },\n revisionDate: { required: true },\n weldingProject: { required: true },\n supplier: { required: true },\n unitSystem: { required: true },\n };\n\n // Since we're saving the parameters as a JSON raw string, the \"old parameters\" are not saved\n // and become duplicated, this removes them\n clearNonSavedWelds() {\n let parametersCollection = this.get(WELDING_BOOK.WELDS);\n let toRemove = [];\n parametersCollection.forEach((parameter) => {\n if (isEmpty(parameter.get('id'))) {\n toRemove.pushObject(parameter);\n }\n });\n if (!isEmpty(toRemove)) {\n toRemove.forEach((param) => {\n parametersCollection.removeObject(param);\n });\n }\n }\n\n @notEmpty('approvedBy.id')\n isApproved;\n\n @notEmpty('verifiedBy.id')\n isVerified;\n\n @equal('revisionStatus', 'ACT')\n isActiveRevision;\n\n @equal('archivalState', ARCHIVAL_STATE.ARCHIVED)\n isArchived;\n\n createBook = memberAction({ path: 'createBook' });\n\n fetchRevisions = memberAction({ path: 'fetchRevisions', type: 'GET' });\n\n updateRevisionId = memberAction({ path: 'updateRevisionId', type: 'PUT' });\n\n verifyBook = memberAction({ path: 'verifyBook', type: 'PUT' });\n\n approveBook = memberAction({ path: 'approveBook', type: 'PUT' });\n\n revokeApproval = memberAction({ path: 'revokeApproval', type: 'PUT' });\n\n createRevision = memberAction({ path: 'createRevision', type: 'PUT' });\n\n archive = memberAction({ path: 'archive', type: 'PUT' });\n\n unarchive = memberAction({ path: 'unarchive', type: 'PUT' });\n\n deleteRevision = memberAction({ path: 'deleteRevision', type: 'PUT' });\n\n duplicate = memberAction({ path: 'duplicate', type: 'PUT' });\n\n copyWeldsToProject = memberAction({ path: 'copyWeldsToProject', type: 'PUT' });\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || '');\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || '');\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || '');\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || '');\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || '');\n }\n get pressureUnit() {\n return this.units.getPressureUnit(this.unitSystem || '');\n }\n get forceUnit() {\n return this.units.getForceUnit(this.unitSystem || '');\n }\n get areaUnit() {\n return this.units.getAreaUnit(this.unitSystem || '');\n }\n get energyUnit() {\n return this.units.getEnergyUnit(this.unitSystem || '');\n }\n}\n","import { attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\n\n/**\n * Represents a Welding Detail in the welding domain.\n *\n * A Welding Detail describes specific technical characteristics of how a weld\n * is executed, particularly regarding the number of weld passes, sides welded,\n * and backing conditions. These details are essential variables in welding\n * procedure qualification and affect the mechanical properties of the joint.\n *\n * Common welding details include:\n *\n * **By Number of Passes/Layers:**\n * - Single-layer (sl): Weld completed in one pass\n * - Multi-layer (ml): Weld completed in multiple passes/layers\n *\n * **By Sides Welded:**\n * - Single-side (ss): Welding performed from one side only\n * - Both-sides (bs): Welding performed from both sides of the joint\n *\n * **By Backing Conditions:**\n * - With backing (wb): Permanent or temporary backing used\n * - Without backing (nb): No backing material used (open root)\n * - Backing gas (bg): Inert gas protection on the root side\n *\n * Examples of complete welding detail designations:\n * - \"ss nb\" - Single side, no backing\n * - \"bs\" - Both sides\n * - \"ss mb\" - Single side with backing material\n * - \"ss gb\" - Single side with gas backing\n *\n * The `shortDesignation` contains the abbreviated code, while `completeDesignation`\n * provides the full descriptive text.\n *\n * Welding details are significant essential variables because they affect:\n * - Root penetration quality\n * - Risk of lack of fusion defects\n * - Residual stress distribution\n * - Distortion control\n *\n * @extends BaseModel\n */\nexport default class WeldingDetail extends BaseModel {\n @attr('string')\n declare shortDesignation: string;\n\n @attr('string')\n declare completeDesignation?: string;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.completeDesignation || '';\n }\n\n validations = {\n shortDesignation: {\n presence: {\n message(_key: string, _value: string, model: WeldingDetail): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n\n completeDesignation: {\n presence: {\n message(_key: string, _value: string, model: WeldingDetail): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'welding-detail',\n shortDesignation: {\n required: true,\n },\n\n completeDesignation: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welding-detail': WeldingDetail;\n }\n}\n","import { computed, get } from '@ember/object';\nimport { hasMany, belongsTo, attr, AsyncBelongsTo, AsyncHasMany } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport RSVP from 'rsvp';\nimport BaseModel from 'weldnote/models/base-model';\nimport { collectionAction } from 'weldnote/utils/api-actions';\nimport Company from './company';\nimport PipingPiece from './piping-piece';\nimport PlatePiece from './plate-piece';\nimport PqrStandard from './pqr-standard';\nimport ExaminingBody from './examining-body';\nimport WeldType from './weld-type';\nimport WeldingProcess from './welding-process';\nimport WeldingDetail from './welding-detail';\nimport BaseMaterialGroup from './base-material-group';\nimport FillerMaterial from './filler-material';\nimport FillerMaterialGroup from './filler-material-group';\nimport WelderStandard from './welder-standard';\nimport WeldingPosition from './welding-position';\nimport Welder from './welder';\nimport CertificationSpecialRequirement from './certification-special-requirement';\nimport { service } from '@ember/service';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport WPSModel from './welding-procedure-specification';\n\nconst STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\nconst STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\n\nexport default class WeldingMap extends BaseModel {\n\n @service('unit-system')\n declare units: UnitSystemService;\n \n @attr('string')\n declare designation?: string;\n\n @belongsTo('company')\n declare company: AsyncBelongsTo;\n\n @attr('string')\n declare unitSystem?: string;\n\n @attr('date')\n declare mapDate?: Date;\n\n @hasMany('piping-piece', { async: true, inverse: null})\n declare pipingPieces: AsyncHasMany;\n\n @hasMany('plate-piece', { async: true, inverse: null})\n declare platePieces: AsyncHasMany;\n\n @belongsTo('pqr-standard')\n declare pqrStandard: AsyncBelongsTo;\n\n @belongsTo('examining-body')\n declare pqrExaminingBody: AsyncBelongsTo;\n\n @belongsTo('weld-type')\n declare pqrWeldType: AsyncBelongsTo;\n\n @belongsTo('welding-process')\n declare pqrWeldingProcessRoot: AsyncBelongsTo;\n\n @belongsTo('welding-process')\n declare pqrWeldingProcessFill: AsyncBelongsTo;\n\n @hasMany('welding-detail', { async: true, inverse: null})\n declare pqrWeldingDetails: AsyncBelongsTo;\n\n @belongsTo('base-material-group')\n declare pqrBaseMaterial1Group: AsyncBelongsTo;\n\n @belongsTo('base-material-group')\n declare pqrBaseMaterial2Group: AsyncBelongsTo;\n\n @belongsTo('filler-material')\n declare pqrFillerMaterialRoot: AsyncBelongsTo;\n\n @belongsTo('filler-material')\n declare pqrFillerMaterialFill: AsyncBelongsTo;\n\n @belongsTo('filler-material-group')\n declare pqrFillerMaterialGroupRoot: AsyncBelongsTo;\n\n @belongsTo('filler-material-group')\n declare pqrFillerMaterialGroupFill: AsyncBelongsTo;\n\n //@ts-ignore\n @attr('decimal-value')\n declare pqrHeatInput?: number;\n\n @attr('number')\n declare pqrPreheatTemperature?: number;\n\n @attr('number')\n declare pqrPostWeldHeatTreatmentTemperature?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare pqrImpactTestTemperature?: number;\n\n @attr('boolean')\n declare pqrHardnessTestRequired?: boolean;\n\n @belongsTo('welder-standard', { async: true, inverse: null })\n declare certificateStandard: AsyncBelongsTo;\n\n @belongsTo('examining-body', { async: true, inverse: null })\n declare certificateExaminingBody: AsyncBelongsTo;\n\n @belongsTo('weld-type', { async: true, inverse: null })\n declare certificateWeldType: AsyncBelongsTo;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare certificateWeldingProcessRoot: AsyncBelongsTo;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare certificateWeldingProcessFill: AsyncBelongsTo;\n\n @hasMany('welding-detail', { async: true, inverse: null})\n declare certificateWeldingDetails: AsyncBelongsTo;\n\n @belongsTo('base-material-group', { async: true, inverse: null })\n declare certificateBaseMaterial1Group: AsyncBelongsTo;\n\n @belongsTo('base-material-group', { async: true, inverse: null })\n declare certificateBaseMaterial2Group: AsyncBelongsTo;\n\n @belongsTo('filler-material-group', { async: true, inverse: null })\n declare certificateFillerMaterialGroupRoot: AsyncBelongsTo;\n\n @belongsTo('filler-material-group', { async: true, inverse: null })\n declare certificateFillerMaterialGroupFill: AsyncBelongsTo;\n\n @belongsTo('filler-material-group', { async: true, inverse: null })\n declare certificateFillerMaterialGroupCap: AsyncBelongsTo;\n\n @belongsTo('welding-position', { async: true, inverse: null })\n declare certificateWeldingPositionRoot: AsyncBelongsTo;\n\n @belongsTo('welding-position', { async: true, inverse: null })\n declare certificateWeldingPositionFill: AsyncBelongsTo;\n\n @hasMany('welder', { async: true, inverse: null})\n declare certificateWelders: AsyncHasMany;\n\n @belongsTo('pqr-standard', { async: true, inverse: null })\n declare wpsStandard: AsyncBelongsTo;\n\n @belongsTo('weld-type', { async: true, inverse: null })\n declare wpsWeldType: AsyncBelongsTo;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare wpsWeldingProcessRoot: AsyncBelongsTo;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare wpsWeldingProcessFill: AsyncBelongsTo;\n\n @hasMany('welding-detail', { async: true, inverse: null})\n declare wpsWeldingDetails: AsyncBelongsTo;\n\n @belongsTo('base-material-group', { async: true, inverse: null })\n declare wpsBaseMaterial1Group: AsyncBelongsTo;\n\n @belongsTo('base-material-group', { async: true, inverse: null })\n declare wpsBaseMaterial2Group: AsyncBelongsTo;\n\n @belongsTo('filler-material', { async: true, inverse: null })\n declare wpsFillerMaterialRoot: AsyncBelongsTo;\n\n @belongsTo('filler-material', { async: true, inverse: null })\n declare wpsFillerMaterialFill: AsyncBelongsTo;\n\n @belongsTo('filler-material-group', { async: true, inverse: null })\n declare wpsFillerMaterialGroupRoot: AsyncBelongsTo;\n\n @belongsTo('filler-material-group', { async: true, inverse: null })\n declare wpsFillerMaterialGroupFill: AsyncBelongsTo;\n\n //@ts-ignore\n @attr('decimal-value')\n declare wpsHeatInput?: number;\n\n @attr('number')\n declare wpsPreheatTemperature?: number;\n\n @attr('number')\n declare wpsPostWeldHeatTreatmentTemperature?: number;\n\n @hasMany('welding-procedure-specification', { async: true, inverse: null})\n declare wpsWeldingProcedureSpecifications: AsyncHasMany;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare pqrWeldingProcessCap: AsyncBelongsTo;\n\n @belongsTo('filler-material', { async: true, inverse: null })\n declare pqrFillerMaterialCap: AsyncBelongsTo;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare certificateWeldingProcessCap: AsyncBelongsTo;\n\n @belongsTo('welding-position', { async: true, inverse: null })\n declare certificateWeldingPositionCap: AsyncBelongsTo;\n\n @belongsTo('welding-process', { async: true, inverse: null })\n declare wpsWeldingProcessCap: AsyncBelongsTo;\n\n @belongsTo('filler-material', { async: true, inverse: null })\n declare wpsFillerMaterialCap: AsyncBelongsTo;\n\n @attr('boolean')\n declare pqrSearchFillerMaterialRootGroup?: boolean;\n\n @attr('boolean')\n declare pqrSearchFillerMaterialFillGroup?: boolean;\n\n @attr('boolean')\n declare pqrSearchFillerMaterialCapGroup?: boolean;\n\n @attr('boolean')\n declare wpsSearchFillerMaterialRootGroup?: boolean;\n\n @attr('boolean')\n declare wpsSearchFillerMaterialFillGroup?: boolean;\n\n @attr('boolean')\n declare wpsSearchFillerMaterialCapGroup?: boolean;\n\n @attr('number')\n declare pqrThroatThickness?: number;\n\n @attr('number')\n declare wpsThroatThickness?: number;\n\n @hasMany('certification-special-requirement', { async: true, inverse: null})\n declare pqrSpecialRequirements: AsyncHasMany;\n\n @hasMany('certification-special-requirement', { async: true, inverse: null})\n declare wpsSpecialRequirements: AsyncHasMany;\n\n @hasMany('certification-special-requirement', { async: true, inverse: null})\n declare certificateSpecialRequirements: AsyncHasMany;\n\n @attr('string')\n declare pqrOverlayType?: string;\n\n @attr('string')\n declare certificateOverlayType?: string;\n\n @attr('string')\n declare wpsOverlayType?: string;\n\n @attr('boolean')\n declare certificateSearchExpired?: boolean;\n\n @belongsTo('welding-position', { async: true, inverse: null })\n declare pqrWeldingPositionRoot: AsyncBelongsTo;\n\n @belongsTo('welding-position', { async: true, inverse: null })\n declare pqrWeldingPositionFill: AsyncBelongsTo;\n\n @belongsTo('welding-position', { async: true, inverse: null })\n declare pqrWeldingPositionCap: AsyncBelongsTo;\n\n @attr('string')\n declare pqrPostWeldHeatTreatmentPresence?: string;\n\n @attr('string')\n declare wpsPostWeldHeatTreatmentPresence?: string;\n\n @attr('boolean')\n declare pqrSearchByWeldedThickness?: boolean;\n\n @attr('boolean')\n declare wpsSearchByWeldedThickness?: boolean;\n\n get visualLabel() {\n return this.designation;\n }\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || '');\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || '');\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || '');\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || '');\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || '');\n }\n get pressureUnit() {\n return this.units.getPressureUnit(this.unitSystem || '');\n }\n get forceUnit() {\n return this.units.getForceUnit(this.unitSystem || '');\n }\n get areaUnit() {\n return this.units.getAreaUnit(this.unitSystem || '');\n }\n get energyUnit() {\n return this.units.getEnergyUnit(this.unitSystem || '');\n }\n\n validations = {\n designation: {\n presence: {\n message(_key: string, _value: any, model: any) {\n return model.translate('welding-map-new.errors.designation.blank');\n },\n },\n },\n\n unitSystem: {\n presence: {\n message(_key: string, _value: any, model: any) {\n return model.translate('generic.error.field-required');\n },\n },\n },\n\n pqrHeatInput: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n pqrPreheatTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n onlyInteger: true,\n },\n },\n\n pqrPostWeldHeatTreatmentTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n onlyInteger: true,\n },\n },\n\n pqrImpactTestTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: -273.0,\n lessThanOrEqualTo: 9999.9,\n },\n },\n\n wpsHeatInput: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n wpsPreheatTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n onlyInteger: true,\n },\n },\n\n wpsPostWeldHeatTreatmentTemperature: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n onlyInteger: true,\n },\n },\n\n pqrThroatThickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n wpsThroatThickness: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n };\n\n retrieveAllRelations() {\n return RSVP.hash({\n pieces: this.pipingPieces,\n plates: this.platePieces,\n wps: this.wpsWeldingProcedureSpecifications,\n welders: this.certificateWelders,\n pqrDetails: this.pqrWeldingDetails,\n certificateDetails: this.certificateWeldingDetails,\n wpsDetails: this.wpsWeldingDetails,\n });\n }\n\n _convertToJSON(relations: any) {\n let weldingMapJson: any = this.serialize();\n let json: any = weldingMapJson?.data.attributes;\n if (!isEmpty(relations.pieces)) {\n let piecesArray = relations.pieces.map((piece: PipingPiece) => {\n let result: any = piece.serialize();\n return result?.data?.attributes;\n });\n json.pipingPieces = piecesArray;\n }\n if (!isEmpty(relations.plates)) {\n let platesArray = relations.plates.map((plate: PlatePiece) => {\n let result: any = plate.serialize();\n return result?.data?.attributes;\n });\n json.platePieces = platesArray;\n }\n return json;\n }\n\n camelize(key: string) {\n return key\n .replace(STRING_CAMELIZE_REGEXP_1, (_match, _separator, chr) =>\n chr ? chr.toUpperCase() : ''\n )\n .replace(STRING_CAMELIZE_REGEXP_2, (match /*, separator, chr */) =>\n match.toLowerCase()\n )\n }\n\n\n convertToJSON(): any {\n const json: any = {};\n WeldingMap.eachAttribute((key: keyof this) => {\n const camelCaseKey = this.camelize(key.toString());\n json[camelCaseKey] = get(this, key);\n });\n \n // This complicated pieces basically does the following.\n WeldingMap.eachRelationship((key: keyof this, meta) => {\n //const camelCaseKey = this.camelize(key.toString());\n let keyName: string = key.toString();\n if (keyName === 'pipingPieces') {\n let resultPiece: any = this.get('pipingPieces');\n let pipingPieces: any[] = [];\n if (resultPiece && resultPiece.length > 0) {\n resultPiece.forEach((currentPiece: PipingPiece) => {\n let pieceJson: any = {};\n PipingPiece.eachAttribute((keyPiece: keyof PipingPiece) => {\n // const pipeKeyCamel: string = this.camelize(keyPiece.toString());\n pieceJson[keyPiece.toString()] = get(currentPiece, keyPiece);\n })\n pipingPieces.push(pieceJson);\n });\n }\n json['pipingPieces'] = pipingPieces;\n } else if (keyName === 'platePieces') {\n let resultPlate: any = this.get('platePieces');\n if (resultPlate && resultPlate.length > 0) {\n let resultPlates: any = this.get('platePieces');\n let platePieces: any[] = [];\n if (resultPlates && resultPlates.length > 0) {\n resultPlates.forEach((currentPiece: PlatePiece) => {\n let plateJson: any = {};\n PlatePiece.eachAttribute((keyPiece: keyof PlatePiece) => {\n //const plateKeyCamel: string = this.camelize(keyPiece.toString());\n plateJson[keyPiece.toString()] = get(currentPiece, keyPiece);\n })\n platePieces.push(plateJson);\n });\n }\n json['platePieces'] = platePieces;\n } \n } else if (meta.kind === 'belongsTo') {\n let value: any = this.get(key);\n if (value && get(value, 'id')) {\n json[key] = get(value, 'id');\n }\n } else if (meta.kind === 'hasMany') {\n let result: any = this.get(key);\n if (result && result.length) {\n json[key] = result.mapBy('id');\n } else {\n json[key] = [];\n }\n }\n \n });\n return json;\n}\n\n @computed('pipingPieces.[]', 'platePieces.[]')\n get noPieces() {\n return this.get('pipingPieces').length === 0 && this.get('platePieces').length === 0;\n }\n\n metadata = {\n modelName: 'welding-map',\n designation: { required: true },\n unitSystem: { required : true }\n };\n\n generatePQRMap = collectionAction({ path: 'generatePQRMap' });\n\n generateWPSMap = collectionAction({ path: 'generateWPSMap' });\n\n generateCertificateMap = collectionAction({ path: 'generateCertificateMap' });\n\n generateWelderMap = collectionAction({ path: 'generateWelderMap' });\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welding-map': WeldingMap;\n }\n}\n","import { computed, get } from '@ember/object';\nimport { belongsTo, attr } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a Welding Position in the welding domain.\n *\n * Welding Position describes the orientation of the weld joint relative to\n * gravity during welding. Position is an essential variable in procedure\n * and welder qualification because it significantly affects weld pool control,\n * penetration, and the skill required by the welder.\n *\n * **ISO/EN Position Designations:**\n * - PA: Flat (downhand) position\n * - PB: Horizontal-vertical fillet\n * - PC: Horizontal position (butt weld)\n * - PD: Horizontal overhead fillet\n * - PE: Overhead position\n * - PF: Vertical up\n * - PG: Vertical down\n * - PH: Pipe - uphill progression (similar to 5G)\n * - PJ: Pipe - downhill progression\n * - H-L045: Pipe inclined at 45° - uphill\n * - J-L045: Pipe inclined at 45° - downhill\n *\n * **AWS/ASME Position Designations:**\n * - 1G/1F: Flat position (groove/fillet)\n * - 2G/2F: Horizontal position\n * - 3G/3F: Vertical position\n * - 4G/4F: Overhead position\n * - 5G: Pipe - horizontal fixed (axis horizontal, welded around circumference)\n * - 6G: Pipe - inclined 45° fixed (most versatile qualification)\n * - 6GR: 6G with restriction ring (for restricted access qualification)\n *\n * Position qualification typically provides approval for equal or easier positions.\n * For example, 6G qualification often qualifies the welder for all positions on pipe\n * and plate. The `isPipeOnly` getter identifies positions specific to pipe welding.\n *\n * The `isMultiple` getter detects combined position designations (e.g., \"5G+2G\")\n * used when a test piece covers multiple positions.\n *\n * @extends BaseModel\n */\nexport default class WeldingPosition extends BaseModel {\n @attr('string')\n declare code: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode?: IndustryCode;\n\n @attr('boolean')\n declare system: boolean;\n\n get visualLabel(): string {\n return this.code ?? '';\n }\n\n get industryCodeId() {\n let code = get(this, 'industryCode');\n if (code) {\n return code.id;\n }\n return '';\n }\n\n validations = {\n code: { presence: true },\n industryCode: { presence: true },\n };\n\n metadata = {\n modelName: 'welding-position',\n code: {\n required: true,\n },\n\n industryCode: {\n required: true,\n },\n };\n\n // Represents a Welding Position that has several positions\n // joined by a plus (e.g. 5G+2G), since we don't have multiple welding positions\n // in the Test Piece, this is the workaround\n @computed('code')\n get isMultiple(): boolean {\n if (this.code) {\n this.code.indexOf('+') >= 0;\n }\n return false;\n }\n\n @computed('code')\n get isPipeOnly(): boolean {\n let pipeOnly = ['5G', '6G', '6GR', 'PH', 'PJ', 'H-L045', 'J-L045', '5G+2G'];\n return pipeOnly.includes(this.code ?? '');\n }\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welding-position': WeldingPosition;\n }\n}\n","import Model, { belongsTo, attr } from '@ember-data/model';\nimport WPSModel from './welding-procedure-specification';\n\nexport default class WeldingProcedureSpecificationMetadata extends Model {\n @attr('boolean')\n declare printBaseMaterialGroup?: boolean;\n\n @attr('boolean')\n declare printWeldTypeApprovalRange?: boolean;\n\n @attr('boolean')\n declare printPqrBaseMaterialApprovalRange?: boolean;\n\n @belongsTo('welding-procedure-specification', { async: false, inverse: null })\n declare wps: WPSModel;\n\n metadata = {\n modelName: 'welding-procedure-specification-metadata',\n };\n}\n","import { service } from '@ember/service';\nimport { attr, belongsTo, hasMany, SyncHasMany } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { memberAction } from 'weldnote/utils/api-actions';\nimport { hash } from 'rsvp';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport { isFilletWeld, isPartialJointPenetrationButtWeld } from 'weldnote/utils/rules/weld-type';\nimport { isBothSides } from 'weldnote/utils/rules/welding-detail';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\nimport WeldType from './weld-type';\nimport WeldingProcess from './welding-process';\nimport PqrStandard from './pqr-standard';\nimport PQRModel from './pqr';\nimport Company from './company';\nimport BaseMaterial from './base-material';\nimport WeldingPosition from './welding-position';\nimport FillerMaterial from './filler-material';\nimport FillerMaterialCommercialDesignation from './filler-material-commercial-designation';\nimport Gas from './gas';\nimport GasCommercialDesignation from './gas-commercial-designation';\nimport Flux from './flux';\nimport FluxCommercialDesignation from './flux-commercial-designation';\nimport PostWeldTreatmentMethod from './post-weld-treatment-method';\nimport Staff from './staff';\nimport FileUpload from './file-upload';\nimport GrooveDesign from './groove-design';\nimport WeldLayerConfiguration from './weld-layer-configuration';\nimport WeldingDetail from './welding-detail';\nimport PreparationMethod from './preparation-method';\nimport ProcessMecanization from './process-mecanization';\nimport ArcTransferMode from './arc-transfer-mode';\nimport TypeCurrentPolarity from './type-current-polarity';\nimport CertificationSpecialRequirement from './certification-special-requirement';\nimport ConstructionStandard from './construction-standard';\nimport ProjectClient from './project-client';\nimport Project from './project';\nimport NullWpsValidation from 'weldnote/src-weldnote/types/wps/null-wps-validation';\nimport WpsWeldingParameter from './wps-welding-parameter';\nimport WpsValidationType from 'weldnote/src-weldnote/types/wps/wps-validation';\nimport UnitSystemService from 'weldnote/services/unit-system';\nimport { ValidationsConfig } from 'ember-model-validator';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\nconst WPS = WELDING_PROCEDURE_SPECIFICATION;\n\nconst { PRODUCT_TYPE, WELD_TYPES, WPS_TYPE, ARCHIVAL_STATE } = Constants;\n\n/**\n * Represents a Welding Procedure Specification (WPS) in the welding management system.\n *\n * A WPS is a formal written document that provides direction to the welder or welding\n * operator for making production welds in accordance with code requirements. It is the\n * primary document used on the shop floor or construction site to ensure consistent,\n * qualified welding operations.\n *\n * **Purpose and Usage:**\n * The WPS serves as the \"recipe\" for welders, specifying all the essential, supplementary,\n * and non-essential variables needed to produce a sound weld. Every production weld must\n * be made in accordance with a qualified WPS.\n *\n * **Industry Standards Compliance:**\n * WPS documents are required by all major welding codes:\n * - ASME Section IX (Boiler and Pressure Vessel Code)\n * - AWS D1.1 (Structural Welding Code - Steel)\n * - ISO 15609 (Specification and qualification of welding procedures)\n * - EN ISO 15609-1 (European Standard for arc welding)\n *\n * **WPS Types:**\n * - **Primary WPS:** Standard WPS linked to one or more PQRs\n * - **Project WPS:** WPS customized for a specific project with project-specific requirements\n * - **Preliminary WPS (pWPS):** Draft WPS awaiting PQR qualification\n * - **Prequalified WPS:** WPS based on prequalified procedures (e.g., AWS D1.1 prequalified joints)\n *\n * **Relationship to PQR:**\n * - A WPS must be supported by one or more Procedure Qualification Records (PQRs)\n * - The qualified ranges in the WPS must fall within the approval ranges established by the PQR(s)\n * - `mainPqr`: The primary PQR supporting this WPS\n * - `pqrFill`, `pqrCap`: Additional PQRs for multi-process welds\n * - `secondaryPqrs`: Additional PQRs extending the qualified range\n *\n * **Key Variable Categories:**\n *\n * **Base Materials:**\n * - Material specifications and grades\n * - Thickness and diameter ranges\n * - Material groupings per applicable code\n *\n * **Welding Processes (by layer):**\n * - Root layer: Initial fusion pass (e.g., GTAW for critical applications)\n * - Fill layers: Bulk deposition passes (e.g., SMAW, GMAW, FCAW)\n * - Cap layer: Final surface pass (may differ for appearance or properties)\n *\n * **Filler Materials:**\n * - Electrode/wire classifications (e.g., E7018, ER70S-6)\n * - Commercial designations and manufacturers\n * - Electrode diameters by layer\n *\n * **Electrical Parameters:**\n * - Current type and polarity (DC+, DC-, AC)\n * - Amperage and voltage ranges\n * - Arc transfer modes (for GMAW: short-circuit transfer, globular transfer, spray transfer, pulsed transfer)\n *\n * **Shielding and Backing:**\n * - Shielding gas type and mixture (e.g., 100% Ar, 75% Ar/25% CO2)\n * - Flow rates for shielding and backing gases\n * - Flux type for SAW processes\n *\n * **Thermal Parameters:**\n * - Preheat temperature (minimum/maximum)\n * - Interpass temperature (minimum/maximum)\n * - Post-heat treatment (if required)\n * - Post-Weld Heat Treatment (PWHT) parameters\n *\n * **Joint Design:**\n * - Weld type (butt, fillet, overlay, etc.)\n * - Groove design and angles\n * - Root gap and root face dimensions\n * - Welding details (single-sided, double-sided, backing type)\n *\n * **Welding Technique:**\n * - Welding positions (1G, 2G, 3G, 5G, 6G, etc.)\n * - Travel direction (uphill, downhill)\n * - Stringer vs. weave beads\n * - Contact tube to work distance (CTWD)\n *\n * **Revision Control:**\n * WPS documents are revision-controlled to track changes:\n * - `revision`: Current revision number\n * - `revisionStatus`: ACT (Active) or superseded\n * - `revisionNotes`: Description of changes\n *\n * **Approval Workflow:**\n * - `writtenBy`: Engineer who authored the WPS\n * - `verifiedBy`: Engineer who reviewed for code compliance\n * - `approvedBy`: Authorized person who approved for use\n *\n * @extends BaseModel\n *\n * @example\n * // Creating a WPS for GTAW root / SMAW fill on carbon steel\n * const wps = store.createRecord('welding-procedure-specification', {\n * wpsNumber: 'WPS-2024-001',\n * revision: '0',\n * standard: iso15609Standard,\n * mainPqr: qualifiedPqr,\n * weldingProcessRoot: gtawProcess,\n * weldingProcessFill: smawProcess,\n * weldType: buttWeldType,\n * productType: 'PIPE',\n * thicknessMinimum: 3.0,\n * thicknessMaximum: 25.0,\n * preheatTemperatureMinimum: 50\n * });\n */\nclass WPSModel extends BaseModel {\n @service\n declare userSession: any;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @attr('string')\n declare wpsNumber?: string;\n\n @attr('string')\n declare guid?: string;\n\n @belongsTo('company', { async: false, inverse: null })\n declare company: Company;\n\n @belongsTo('pqr', { async: false, inverse: null })\n declare mainPqr: PQRModel;\n\n @belongsTo('pqr-standard', { async: false, inverse: null })\n declare standard: PqrStandard;\n\n @attr('string')\n declare productType?: string;\n\n @belongsTo('weld-type', { async: false, inverse: null })\n declare weldType: WeldType;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessRoot: WeldingProcess;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessFill: WeldingProcess;\n\n @belongsTo('base-material', { async: false, inverse: null })\n declare baseMaterial1: BaseMaterial;\n\n @belongsTo('base-material', { async: false, inverse: null })\n declare baseMaterial2: BaseMaterial;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare diameterMaximum?: number;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionsRoot: SyncHasMany;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionsFill: SyncHasMany;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialRoot: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', {\n async: false, inverse: null,\n })\n declare fillerMaterialRootCommercialDesignation: FillerMaterialCommercialDesignation;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialFill: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', {\n async: false, inverse: null,\n })\n declare fillerMaterialFillCommercialDesignation: FillerMaterialCommercialDesignation;\n\n @attr('string')\n declare shieldingRoot?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingRootGas: Gas;\n\n @belongsTo('gas-commercial-designation', { async: false, inverse: null })\n declare shieldingRootGasCommercialDesignation: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingRootGasMixture?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingRootFlux: Flux;\n\n @belongsTo('flux-commercial-designation', {\n async: false, inverse: null\n })\n declare shieldingRootFluxCommercialDesignation: FluxCommercialDesignation;\n\n @attr('string')\n declare flowRateRoot?: string;\n\n @attr('string')\n declare shieldingFill?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingFillGas: Gas;\n\n @belongsTo('gas-commercial-designation', { async: false, inverse: null })\n declare shieldingFillGasCommercialDesignation: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingFillGasMixture?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingFillFlux: Flux;\n\n @belongsTo('flux-commercial-designation', {\n async: false, inverse: null,\n })\n declare shieldingFillFluxCommercialDesignation: FluxCommercialDesignation;\n\n @attr('string')\n declare flowRateFill?: string;\n\n @attr('string')\n declare backing?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare backingGas: Gas;\n\n @belongsTo('gas-commercial-designation', { async: false, inverse: null })\n declare backingGasCommercialDesignation: GasCommercialDesignation;\n\n @attr('string')\n declare backingGasMixture?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare backingFlux: Flux;\n\n @belongsTo('flux-commercial-designation', { async: false, inverse: null })\n declare backingFluxCommercialDesignation: FluxCommercialDesignation;\n\n @attr('string')\n declare backingFlowRateRoot?: string;\n\n @attr('string')\n declare backingFlowRateFill?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootFaceMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootFaceMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootGapMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare rootGapMaximum?: number;\n\n @attr('string')\n declare electrodeType?: string;\n\n @attr('number')\n declare numberOfElectrodes?: number;\n\n @attr('string')\n declare pulsedWeldingDetails?: string;\n\n @attr('string')\n declare weaving?: string;\n\n @attr('string')\n declare contactTubeDistance?: string;\n\n @attr('string')\n declare backGaugingDetails?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare postWeldHeatTreatmentTimeMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare postWeldHeatTreatmentTimeMaximum?: number;\n\n @belongsTo('post-weld-treatment-method', { async: false, inverse: null })\n declare postWeldHeatTreatmentMethod: PostWeldTreatmentMethod;\n\n @attr('number')\n declare postWeldHeatTreatmentHeatingRate?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentCoolingRate?: number;\n\n @attr('string', { defaultValue: '0' })\n declare revision: string;\n\n @belongsTo('staff', { async: false, inverse: null })\n declare writtenBy: Staff;\n\n @attr('date')\n declare writtenByDate?: Date;\n\n @belongsTo('staff', { async: false, inverse: null })\n declare verifiedBy: Staff;\n\n @attr('date')\n declare verifiedByDate?: Date;\n\n @belongsTo('staff', { async: false, inverse: null })\n declare approvedBy: Staff;\n\n @attr('date')\n declare approvedByDate?: Date;\n\n @attr('string')\n declare status?: string;\n\n @hasMany('wps-welding-parameter', { async: false, inverse: 'wps' })\n declare weldingParameters: SyncHasMany;\n\n @attr()\n declare weldingParametersRaw?: string;\n\n @belongsTo('file-upload', { async: false, inverse: null })\n declare wpsDocument: FileUpload;\n\n @hasMany('groove-design', { async: false, inverse: null })\n declare grooveDesigns: SyncHasMany;\n\n @hasMany('weld-layer-configuration', { async: false, inverse: null })\n declare weldLayerConfigurations: SyncHasMany;\n\n @hasMany('welding-detail', { async: false, inverse: null })\n declare weldingDetails: SyncHasMany;\n\n @attr('number')\n declare branchAngleMinimum?: number;\n\n @attr('number')\n declare branchAngleMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare grooveAngleMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare grooveAngleMaximum?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentTemperatureMinimum?: number;\n\n @attr('number')\n declare postWeldHeatTreatmentTemperatureMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare throatThicknessMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare throatThicknessMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare impactTestTemperature?: number;\n\n @attr('boolean')\n declare hardnessTestRequired?: boolean;\n\n @attr('number')\n declare preheatTemperatureMinimum?: number;\n\n @attr('number')\n declare preheatTemperatureMaximum?: number;\n\n @attr('number')\n declare interpassTemperatureMinimum?: number;\n\n @attr('number')\n declare interpassTemperatureMaximum?: number;\n\n @attr('number')\n declare postHeatTemperatureMinimum?: number;\n\n @attr('number')\n declare postHeatTemperatureMaximum?: number;\n\n @hasMany('pqr', { async: false, inverse: null })\n declare secondaryPqrs: SyncHasMany;\n\n @attr('string')\n declare notes?: string;\n\n @hasMany('preparation-method', { async: false, inverse: null })\n declare preparationMethods: SyncHasMany;\n\n @attr('number')\n declare torchAngleMinimum?: number;\n\n @attr('number')\n declare torchAngleMaximum?: number;\n\n @attr('string')\n declare revisionStatus?: string;\n\n // The inverse null relationship is very important. Without it, when loading a WPS\n // in the edit screen if that WPS (A) has a master WPS (B) which in turn does not have\n // a master WPS, loading A, correctly loads B, but when loading B (with null as master wps)\n // the reference to the B WPS on A is removed\n @belongsTo('welding-procedure-specification', { inverse: null, async: false })\n declare masterWps: WPSModel;\n\n //@ts-ignore\n @attr('decimal-value')\n declare gasNozzleDiameterRoot?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare gasNozzleDiameterFill?: number;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationRoot: ProcessMecanization;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationFill: ProcessMecanization;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeRoot: ArcTransferMode;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeFill: ArcTransferMode;\n\n @belongsTo('arc-transfer-mode', { async: false, inverse: null })\n declare arcTransferModeCap: ArcTransferMode;\n\n @belongsTo('welding-process', { async: false, inverse: null })\n declare weldingProcessCap: WeldingProcess;\n\n @attr('number')\n declare gasNozzleDiameterCap?: number;\n\n @belongsTo('process-mecanization', { async: false, inverse: null })\n declare processMecanizationCap: ProcessMecanization;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentRoot: TypeCurrentPolarity;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentFill: TypeCurrentPolarity;\n\n @belongsTo('type-current-polarity', { async: false, inverse: null })\n declare typeCurrentCap: TypeCurrentPolarity;\n\n @attr('number')\n declare numberOfElectrodesFill?: number;\n\n @attr('number')\n declare numberOfElectrodesCap?: number;\n\n @hasMany('welding-position', { async: false, inverse: null })\n declare weldingPositionsCap: SyncHasMany;\n\n @attr('string')\n declare shieldingCap?: string;\n\n @belongsTo('gas', { async: false, inverse: null })\n declare shieldingCapGas: Gas;\n\n @belongsTo('gas-commercial-designation', { async: false, inverse: null })\n declare shieldingCapGasCommercialDesignation: GasCommercialDesignation;\n\n @attr('string')\n declare shieldingCapGasMixture?: string;\n\n @belongsTo('flux', { async: false, inverse: null })\n declare shieldingCapFlux: Flux;\n\n @belongsTo('flux-commercial-designation', { async: false, inverse: null })\n declare shieldingCapFluxCommercialDesignation: FluxCommercialDesignation;\n\n @attr('string')\n declare flowRateCap?: string;\n\n @attr('string')\n declare backingFlowRateCap?: string;\n\n @belongsTo('filler-material', { async: false, inverse: null })\n declare fillerMaterialCap: FillerMaterial;\n\n @belongsTo('filler-material-commercial-designation', {\n async: false, inverse: null,\n })\n declare fillerMaterialCapCommercialDesignation: FillerMaterialCommercialDesignation;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial1ThicknessMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial1ThicknessMaximum?: number;\n\n @attr('number')\n declare baseMaterial1Diameter?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial2ThicknessMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare baseMaterial2ThicknessMaximum?: number;\n\n @attr('number')\n declare baseMaterial2Diameter?: number;\n\n @attr('string')\n declare weldingPositionRootDirection?: string;\n\n @attr('string')\n declare weldingPositionFillDirection?: string;\n\n @attr('string')\n declare weldingPositionCapDirection?: string;\n\n @hasMany('certification-special-requirement', { async: false, inverse: null })\n declare specialRequirements: SyncHasMany;\n\n @attr('string')\n declare overlayType?: string;\n\n @attr('number')\n declare postHeatTimeMinimum?: number;\n\n @attr('number')\n declare postHeatTimeMaximum?: number;\n\n @attr('string')\n declare jointType?: string;\n\n @attr('string')\n declare electrodeTypeFill?: string;\n\n @attr('string')\n declare electrodeTypeCap?: string;\n\n @attr('string')\n declare contactTubeDistanceFill?: string;\n\n @attr('string')\n declare contactTubeDistanceCap?: string;\n\n @attr('string')\n declare weavingFill?: string;\n\n @attr('string')\n declare weavingCap?: string;\n\n @attr('string')\n declare tungstenDiameterRoot?: string;\n\n @attr('string')\n declare tungstenDiameterFill?: string;\n\n @attr('string')\n declare tungstenDiameterCap?: string;\n\n @belongsTo('pqr', { async: false, inverse: null })\n declare pqrFill: PQRModel;\n\n @belongsTo('pqr', { async: false, inverse: null })\n declare pqrCap: PQRModel;\n\n @attr('string')\n declare pqrRootLayer?: string;\n\n @attr('string')\n declare pqrFillLayer?: string;\n\n @attr('string')\n declare pqrCapLayer?: string;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessRootMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessFillMaximum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessCapMinimum?: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare thicknessCapMaximum?: number;\n\n @belongsTo('construction-standard', { async: false, inverse: null })\n declare constructionStandard: ConstructionStandard;\n\n @belongsTo('project-client', { async: false, inverse: null })\n declare projectClient: ProjectClient;\n\n // Seems to be the same issue with the MasterWPS, if I don't have the inverse set\n // to null, EmberData is removing the WPS from the screen\n @belongsTo('project', { inverse: null, async: false })\n declare project: Project;\n\n @attr('number')\n declare overlayNumberOfLayers?: number;\n\n @attr('string')\n declare revisionNotes?: string;\n\n @attr('string')\n declare wpsType?: string;\n\n @attr('string')\n declare fillerMaterialElectrodeFormRoot?: string;\n\n @attr('string')\n declare fillerMaterialElectrodeFormFill?: string;\n\n @attr('string')\n declare fillerMaterialElectrodeFormCap?: string;\n\n @attr('string')\n declare fillerMaterialGuideRoot?: string;\n\n @attr('string')\n declare fillerMaterialGuideFill?: string;\n\n @attr('string')\n declare fillerMaterialGuideCap?: string;\n\n @attr('string')\n declare oscillationWidthRoot?: string;\n\n @attr('string')\n declare oscillationWidthFill?: string;\n\n @attr('string')\n declare oscillationWidthCap?: string;\n\n @attr('string')\n declare oscillationFrequencyRoot?: string;\n\n @attr('string')\n declare oscillationFrequencyFill?: string;\n\n @attr('string')\n declare oscillationFrequencyCap?: string;\n\n @attr('string')\n declare oscillationDwellTimeRoot?: string;\n\n @attr('string')\n declare oscillationDwellTimeFill?: string;\n\n @attr('string')\n declare oscillationDwellTimeCap?: string;\n\n @attr('boolean')\n declare supplementalDeviceRoot?: boolean;\n\n @attr('boolean')\n declare supplementalDeviceFill?: boolean;\n\n @attr('boolean')\n declare supplementalDeviceCap?: boolean;\n\n @belongsTo('pqr', { async: false, inverse: null })\n declare multiplePositionPqrRoot: PQRModel;\n\n @belongsTo('pqr', { async: false, inverse: null })\n declare multiplePositionPqrFill: PQRModel;\n\n @belongsTo('pqr', { async: false, inverse: null })\n declare multiplePositionPqrCap: PQRModel;\n\n @attr('string')\n declare archivalState?: string;\n\n @attr()\n declare fillerMaterialRootDiameters: string;\n\n @attr()\n declare fillerMaterialFillDiameters: string;\n\n @attr()\n declare fillerMaterialCapDiameters: string;\n\n @attr('number')\n declare totalWelds?: number;\n\n @attr('number')\n declare goodWelds?: number;\n\n @attr('number')\n declare repairedWelds?: number;\n\n @attr('number')\n declare repairRate?: number;\n\n @attr('number')\n declare flowRateProcess1Minimum?: number;\n\n @attr('number')\n declare flowRateProcess1Maximum?: number;\n\n @attr('number')\n declare flowRateProcess2Minimum?: number;\n\n @attr('number')\n declare flowRateProcess2Maximum?: number;\n\n @attr('number')\n declare flowRateProcess3Minimum?: number;\n\n @attr('number')\n declare flowRateProcess3Maximum?: number;\n\n @attr('string')\n declare unitSystem?: string;\n\n @attr({\n defaultValue() {\n return {};\n },\n })\n declare additionalData: string;\n\n // Validator must be created before validations occur\n validator: WpsValidationType = new NullWpsValidation();\n\n @computed('wpsNumber', 'revision')\n get visualLabel() {\n return `${this.wpsNumber} - ${this.revision}`;\n }\n\n validations: ValidationsConfig = {\n wpsNumber: { presence: true },\n unitSystem: { presence: true },\n revisionNotes: {\n length: {\n maximum: 700\n }\n },\n standard: {\n custom: {\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: BaseModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n thicknessMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value) && model.validateDimensions();\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessTotalMinimumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessTotalMinimumInvalidMessage;\n },\n },\n },\n\n thicknessMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value) && model.validateDimensions();\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessTotalMaximumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessTotalMaximumInvalidMessage;\n },\n },\n },\n\n diameterMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (get(model, 'isPlate')) {\n return true;\n }\n if (\n model.shouldValidateSingleValue(value) &&\n model.validateDimensions() &&\n get(model, 'isPipe')\n ) {\n return model.validator.isDiameterValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.diameterInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (get(model, 'isPlate')) {\n return true;\n }\n if (model.shouldValidateSingleValue(value) && model.validateDimensions()) {\n return model.validator.isDiameterValidForPipe(value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.diameterForPipeInvalidMessage;\n },\n },\n ],\n },\n\n diameterMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n if (get(model, 'isPlate')) {\n return false;\n }\n return (\n model.shouldValidateSingleValue(value) &&\n model.validateDimensions() &&\n get(model, 'isPipe')\n );\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n return model.validator.isDiameterValid(value);\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.diameterInvalidMessage(value);\n },\n },\n },\n\n fillerMaterialRootDiameters: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialDiameterRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialDiameterRootInvalidMessage;\n },\n },\n },\n\n fillerMaterialFillDiameters: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialDiameterFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialDiameterFillInvalidMessage;\n },\n },\n },\n\n fillerMaterialCapDiameters: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialDiameterCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialDiameterCapInvalidMessage;\n },\n },\n },\n\n rootFaceMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n rootFaceMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n rootGapMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n rootGapMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n },\n\n numberOfElectrodes: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isNumberElectrodesRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.numberOfElectrodesRootInvalidMessage;\n },\n },\n },\n\n heatInputMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n heatInputMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 99999.99,\n },\n },\n\n postWeldHeatTreatmentTimeMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPwhtTimeValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pwthTimeInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPWHTTimeMinimumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pWHTTimeMinimumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n postWeldHeatTreatmentTimeMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPwhtTimeValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pwthTimeInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPWHTTimeMaximumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pWHTTimeMaximumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n postWeldHeatTreatmentHeatingRate: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n postWeldHeatTreatmentCoolingRate: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 999,\n },\n },\n\n branchAngleMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 90,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n return model.validator.isBranchAngleValid(value);\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.branchAngleInvalidMessage(value);\n },\n },\n },\n\n branchAngleMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 90,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n return model.validator.isBranchAngleValid(value);\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.branchAngleInvalidMessage(value);\n },\n },\n },\n\n grooveAngleMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 360,\n },\n },\n\n grooveAngleMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 360,\n },\n },\n\n postWeldHeatTreatmentTemperatureMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPwhtTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pwthTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPWHTMinimumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pWHTMinimumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n postWeldHeatTreatmentTemperatureMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPwhtTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pwthTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPWHTMaximumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.pWHTMaximumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n throatThicknessMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n throatThicknessMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n },\n\n preheatTemperatureMinimum: {\n numericality: {\n allowBlank: true,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPreheatTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.preheatTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPreheatMinimumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.preheatMinimumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n preheatTemperatureMaximum: {\n numericality: {\n allowBlank: true,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPreheatTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.preheatTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPreheatMaximumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.preheatMaximumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n interpassTemperatureMinimum: {\n numericality: {\n allowBlank: true,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isInterpassTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.interpassTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isInterpassTemperatureMinimumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.interpassTemperatureMinimumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n interpassTemperatureMaximum: {\n numericality: {\n allowBlank: true,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isInterpassTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.interpassTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isInterpassTemperatureMaximumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.interpassTemperatureMaximumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n postHeatTemperatureMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPostHeatTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPostHeatMinimumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatMinimumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n postHeatTemperatureMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPostHeatTemperatureValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatTemperatureInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPostHeatMaximumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatMaximumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n notes: {\n length: {\n maximum: 5000,\n },\n },\n\n torchAngleMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 180,\n onlyInteger: true,\n },\n },\n\n torchAngleMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 180,\n onlyInteger: true,\n },\n },\n\n revision: {\n presence: {\n message(_key: string, _value: any, model: WPSModel): string {\n return model.translate('generic.error.input-value');\n },\n },\n },\n\n gasNozzleDiameterRoot: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isGasNozzleDiameterRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.gasNozzleDiameterRootInvalidMessage;\n },\n },\n },\n\n gasNozzleDiameterFill: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isGasNozzleDiameterFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.gasNozzleDiameterFillInvalidMessage;\n },\n },\n },\n\n gasNozzleDiameterCap: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isGasNozzleDiameterCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.gasNozzleDiameterCapInvalidMessage;\n },\n },\n },\n\n numberOfElectrodesFill: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isNumberElectrodesFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.numberOfElectrodesFillInvalidMessage;\n },\n },\n },\n\n numberOfElectrodesCap: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 20,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isNumberElectrodesCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.numberOfElectrodesCapInvalidMessage;\n },\n },\n },\n\n baseMaterial1ThicknessMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n let bm1 = parseFloat(value);\n if (!isNaN(bm1)) {\n return model.validator.isBaseMaterial1ThicknessValid(bm1);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.baseMaterial1ThicknessInvalidMessage(value);\n },\n },\n },\n\n baseMaterial1ThicknessMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n let bm1 = parseFloat(value);\n if (!isNaN(bm1)) {\n return model.validator.isBaseMaterial1ThicknessValid(bm1);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.baseMaterial1ThicknessInvalidMessage(value);\n },\n },\n },\n\n baseMaterial1Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n if (get(model, 'isPlate')) {\n return false;\n }\n if (model.shouldValidateSingleValue(value)) {\n let bm1 = parseFloat(value);\n let bm2 = parseFloat(`${model.baseMaterial2Diameter}`);\n if (!isNaN(bm1) && !isNaN(bm2)) {\n return bm1 <= bm2;\n }\n }\n return false;\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n let bm1 = parseFloat(value);\n if (!isNaN(bm1)) {\n return model.validator.isDiameterValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.diameterInvalidMessage(value);\n },\n },\n },\n\n baseMaterial2ThicknessMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n let bm2 = parseFloat(value);\n if (!isNaN(bm2)) {\n return model.validator.isBaseMaterial2ThicknessValid(bm2);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.baseMaterial2ThicknessInvalidMessage(value);\n },\n },\n },\n\n baseMaterial2ThicknessMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n let bm2 = parseFloat(value);\n if (!isNaN(bm2)) {\n return model.validator.isBaseMaterial2ThicknessValid(bm2);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.baseMaterial2ThicknessInvalidMessage(value);\n },\n },\n },\n\n baseMaterial2Diameter: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n if (model.isPlate) {\n return false;\n }\n if (model.shouldValidateSingleValue(value)) {\n let bm2 = parseFloat(value);\n let bm1 = parseFloat(`${model.baseMaterial1Diameter}`);\n if (!isNaN(bm1) && !isNaN(bm2)) {\n return bm2 <= bm1;\n }\n }\n return false;\n },\n\n validation(_key: string, value: any, model: WPSModel) {\n let bm1 = parseFloat(value);\n if (!isNaN(bm1)) {\n return model.validator.isDiameterValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.diameterInvalidMessage(value);\n },\n },\n },\n\n postHeatTimeMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPostHeatTimeValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatTimeInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPostHeatTimeMinimumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatTimeMinimumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n postHeatTimeMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isPostHeatTimeValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatTimeInvalidMessage(value);\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(model.validator)) {\n return model.validator.isPostHeatTimeMaximumPresenceValid(value);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WPSModel): string {\n return model.validator.postHeatTimeMaximumPresenceInvalidMessage(value);\n },\n },\n ],\n },\n\n weldingProcessRoot: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingProcessRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingProcessRootInvalidMessage;\n },\n },\n },\n\n weldingProcessFill: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingProcessFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingProcessFillInvalidMessage;\n },\n },\n },\n\n weldingProcessCap: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingProcessCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingProcessCapInvalidMessage;\n },\n },\n },\n\n weldingDetails: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateCollectionValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingDetailsValid;\n },\n\n message(_key: string, _value: any, model: WPSModel) {\n return model.validator.weldingDetailsInvalidMessage;\n },\n },\n },\n\n processMecanizationRoot: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isProcessMecanizationRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.processMecanizationRootInvalidMessage;\n },\n },\n },\n\n processMecanizationFill: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isProcessMecanizationFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.processMecanizationFillInvalidMessage;\n },\n },\n },\n\n processMecanizationCap: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isProcessMecanizationCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.processMecanizationCapInvalidMessage;\n },\n },\n },\n\n typeCurrentRoot: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isTypeCurrentRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.typeCurrentRootInvalidMessage;\n },\n },\n },\n\n typeCurrentFill: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isTypeCurrentFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.typeCurrentFillInvalidMessage;\n },\n },\n },\n\n typeCurrentCap: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isTypeCurrentCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.typeCurrentCapInvalidMessage;\n },\n },\n },\n\n arcTransferModeRoot: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isArcTransferModeRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.arcTransferModeRootInvalidMessage;\n },\n },\n },\n\n arcTransferModeFill: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isArcTransferModeFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.arcTransferModeFillInvalidMessage;\n },\n },\n },\n\n arcTransferModeCap: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isArcTransferModeCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.arcTransferModeCapInvalidMessage;\n },\n },\n },\n\n weldType: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldTypeValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldTypeInvalidMessage;\n },\n },\n },\n\n baseMaterial1: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isBaseMaterial1Valid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.baseMaterial1InvalidMessage;\n },\n },\n },\n\n baseMaterial2: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isBaseMaterial2Valid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.baseMaterial2InvalidMessage;\n },\n },\n },\n\n overlayType: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isOverlayTypeValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.overlayTypeInvalidMessage;\n },\n },\n },\n\n productType: {\n custom: {\n validation(_key: string, wpsProductType: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(wpsProductType)) {\n return model.validator.isProductTypeValid;\n }\n return true;\n },\n\n message(_key: string, _wpsProductType: any, model: WPSModel) {\n return model.validator.productTypeInvalidMessage;\n },\n },\n },\n\n fillerMaterialRoot: {\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateRelationValue(value)) {\n return model.validator.isFillerMaterialRootValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialRootInvalidMessage;\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateRelationValue(value)) {\n return model.validator.isFillerMaterialRootAWSValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialRootAWSInvalidMessage;\n },\n },\n ],\n },\n\n fillerMaterialFill: {\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateRelationValue(value)) {\n return model.validator.isFillerMaterialFillValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialFillInvalidMessage;\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateRelationValue(value)) {\n return model.validator.isFillerMaterialFillAWSValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialFillAWSInvalidMessage;\n },\n },\n ],\n },\n\n fillerMaterialCap: {\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateRelationValue(value)) {\n return model.validator.isFillerMaterialCapValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialCapInvalidMessage;\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateRelationValue(value)) {\n return model.validator.isFillerMaterialCapAWSValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialCapAWSInvalidMessage;\n },\n },\n ],\n },\n\n fillerMaterialRootCommercialDesignation: {\n custom: {\n if(_key: string, value: any, wps: WPSModel) {\n return wps.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, wps: WPSModel) {\n return wps.validator.isFillerMaterialRootCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, wps: WPSModel) {\n return wps.validator.fillerMaterialRootCommercialDesignationInvalidMessage;\n },\n },\n },\n\n fillerMaterialFillCommercialDesignation: {\n custom: {\n if(_key: string, value: any, wps: WPSModel) {\n return wps.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialFillCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, wps: WPSModel) {\n return wps.validator.fillerMaterialFillCommercialDesignationInvalidMessage;\n },\n },\n },\n\n fillerMaterialCapCommercialDesignation: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialCapCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, wps: WPSModel) {\n return wps.validator.fillerMaterialCapCommercialDesignationInvalidMessage;\n },\n },\n },\n\n shieldingRoot: {\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isShieldingRootValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingRootInvalidMessage;\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isShieldingRootValidForProcess;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingRootInvalidMessageForProcess;\n },\n },\n ],\n },\n\n shieldingFill: {\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isShieldingFillValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingFillInvalidMessage;\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isShieldingFillValidForProcess;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingFillInvalidMessageForProcess;\n },\n },\n ],\n },\n\n shieldingCap: {\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isShieldingCapValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingCapInvalidMessage;\n },\n },\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateSingleValue(value)) {\n return model.validator.isShieldingCapValidForProcess;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingCapInvalidMessageForProcess;\n },\n },\n ],\n },\n\n backing: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isBackingValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.backingInvalidMessage;\n },\n },\n },\n\n shieldingRootGas: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingRootGasValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingRootGasInvalidMessage;\n },\n },\n },\n\n shieldingFillGas: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingFillGasValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingFillGasInvalidMessage;\n },\n },\n },\n\n shieldingCapGas: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingCapGasValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingCapGasInvalidMessage;\n },\n },\n },\n\n backingGas: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isBackingGasValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.backingGasInvalidMessage;\n },\n },\n },\n\n shieldingRootFlux: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingRootFluxValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingRootFluxInvalidMessage;\n },\n },\n },\n\n shieldingFillFlux: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingFillFluxValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingFillFluxInvalidMessage;\n },\n },\n },\n\n shieldingCapFlux: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingCapFluxValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingCapFluxInvalidMessage;\n },\n },\n },\n\n backingFlux: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isBackingFluxValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.backingFluxInvalidMessage;\n },\n },\n },\n\n shieldingRootFluxCommercialDesignation: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingRootFluxCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingRootFluxCommercialDesignationInvalidMessage;\n },\n },\n },\n\n shieldingFillFluxCommercialDesignation: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingFillFluxCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingFillFluxCommercialDesignationInvalidMessage;\n },\n },\n },\n\n shieldingCapFluxCommercialDesignation: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isShieldingCapFluxCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.shieldingCapFluxCommercialDesignationInvalidMessage;\n },\n },\n },\n\n backingFluxCommercialDesignation: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateRelationValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isBackingFluxCommercialDesignationValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.backingFluxCommercialDesignationInvalidMessage;\n },\n },\n },\n\n weldingParameters: {\n relations: ['hasMany'],\n },\n\n weldingPositionRootDirection: {\n custom: {\n if(_key: string, _value: any, model: WPSModel) {\n return get(model, 'isLinkedToPQR') || get(model, 'isPrequalified');\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingPositionRootDirectionValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingPositionRootDirectionInvalidMessage;\n },\n },\n },\n\n weldingPositionFillDirection: {\n custom: {\n if(_key: string, _value: any, model: WPSModel) {\n return get(model, 'isLinkedToPQR') || get(model, 'isPrequalified');\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingPositionFillDirectionValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingPositionFillDirectionInvalidMessage;\n },\n },\n },\n\n weldingPositionCapDirection: {\n custom: {\n if(_key: string, _value: any, model: WPSModel) {\n return get(model, 'isLinkedToPQR') || get(model, 'isPrequalified');\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isWeldingPositionCapDirectionValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingPositionCapDirectionInvalidMessage;\n },\n },\n },\n\n weldingPositionsRoot: {\n custom: {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateCollectionValue(value)) {\n return model.validator.isWeldingPositionRootValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingPositionRootInvalidMessage;\n },\n },\n },\n\n weldingPositionsFill: {\n custom: {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateCollectionValue(value)) {\n return model.validator.isWeldingPositionFillValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingPositionFillInvalidMessage;\n },\n },\n },\n\n weldingPositionsCap: {\n custom: {\n validation(_key: string, value: any, model: WPSModel) {\n if (model.shouldValidateCollectionValue(value)) {\n return model.validator.isWeldingPositionCapValid;\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.weldingPositionCapInvalidMessage;\n },\n },\n },\n\n thicknessRootMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessRootMinimumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessRootMinimumInvalidMessage;\n },\n },\n },\n\n thicknessRootMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessRootMaximumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessRootMaximumInvalidMessage;\n },\n },\n },\n\n thicknessFillMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessFillMinimumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessFillMinimumInvalidMessage;\n },\n },\n },\n\n thicknessFillMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessFillMaximumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessFillMaximumInvalidMessage;\n },\n },\n },\n\n thicknessCapMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessCapMinimumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessCapMinimumInvalidMessage;\n },\n },\n },\n\n thicknessCapMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n lessThanOrEqualTo: 9999.99,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isThicknessCapMaximumValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.thicknessCapMaximumInvalidMessage;\n },\n },\n },\n\n hardnessTestRequired: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isHardnessRequirementsValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.hardnessRequirementsInvalidMessage;\n },\n },\n },\n\n impactTestTemperature: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isImpactTestTemperatureValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.impactTestTemperatureInvalidMessage;\n },\n },\n },\n\n overlayNumberOfLayers: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n onlyInteger: true,\n },\n\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isOverlayNumberOfLayerValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.overlayNumberOfLayerInvalidMessage;\n },\n },\n },\n\n fillerMaterialElectrodeFormRoot: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialElectrodeFormRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialElectrodeFormRootInvalidMessage;\n },\n },\n },\n\n fillerMaterialElectrodeFormFill: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialElectrodeFormFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialElectrodeFormFillInvalidMessage;\n },\n },\n },\n\n fillerMaterialElectrodeFormCap: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialElectrodeFormCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialElectrodeFormCapInvalidMessage;\n },\n },\n },\n\n fillerMaterialGuideRoot: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialGuideRootValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialGuideRootInvalidMessage;\n },\n },\n },\n\n fillerMaterialGuideFill: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialGuideFillValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialGuideFillInvalidMessage;\n },\n },\n },\n\n fillerMaterialGuideCap: {\n custom: {\n if(_key: string, value: any, model: WPSModel) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, _value: any, model: WPSModel) {\n return model.validator.isFillerMaterialGuideCapValid;\n },\n\n message(_key: string, _value: any, model: WPSModel): string {\n return model.validator.fillerMaterialGuideCapInvalidMessage;\n },\n },\n },\n\n flowRateProcess1Minimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMinimum('flowRateProcess1Maximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getBelowMaximumMessage(get(model, 'flowRateProcess1Maximum'), model.flowUnit);\n },\n },\n ]\n },\n flowRateProcess1Maximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: PQRModel) {\n if (!isEmpty(value)) {\n return model.validateMaximum('flowRateProcess1Minimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: PQRModel) {\n return model.getAboveMinimumMessage(get(model, 'flowRateProcess1Minimum'), model.flowUnit);\n },\n },\n ]\n },\n flowRateProcess2Minimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(value)) {\n return model.validateMinimum('flowRateProcess2Maximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel) {\n return model.getBelowMaximumMessage(get(model, 'flowRateProcess2Maximum'), model.flowUnit);\n },\n },\n ]\n },\n flowRateProcess2Maximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(value)) {\n return model.validateMaximum('flowRateProcess2Minimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel) {\n return model.getAboveMinimumMessage(get(model, 'flowRateProcess2Minimum'), model.flowUnit);\n },\n },\n ]\n },\n flowRateProcess3Minimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(value)) {\n return model.validateMinimum('flowRateProcess3Maximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel) {\n return model.getBelowMaximumMessage(get(model, 'flowRateProcess3Maximum'), model.flowUnit);\n },\n },\n ]\n },\n flowRateProcess3Maximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0.0,\n },\n custom: [\n {\n validation(_key: string, value: any, model: WPSModel) {\n if (!isEmpty(value)) {\n return model.validateMaximum('flowRateProcess3Minimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WPSModel) {\n return model.getAboveMinimumMessage(get(model, 'flowRateProcess3Minimum'), model.flowUnit);\n },\n },\n ]\n }\n };\n\n validateMinimum(propertyMaximumValue: any, value: string) {\n let maximum = parseFloat(get(this, propertyMaximumValue));\n if (!isEmpty(maximum) && !isNaN(maximum)) {\n let minimum = parseFloat(value);\n return minimum <= maximum;\n }\n return true;\n }\n\n validateMaximum(propertyMinimumValue: any, value: string) {\n let minimum = parseFloat(get(this, propertyMinimumValue));\n if (!isEmpty(minimum) && !isNaN(minimum)) {\n let maximum = parseFloat(value);\n return maximum >= minimum;\n }\n return true;\n }\n\n getBelowMaximumMessage(approvalRange: string | number | undefined, unit = '') {\n return this.translate('model-validations.wps-parameter.must-be-below-maximum', {\n approvalRange,\n unit,\n });\n }\n\n getAboveMinimumMessage(approvalRange: string | number | undefined, unit: string) {\n return this.translate('model-validations.wps-parameter.must-be-above-minimum', {\n approvalRange,\n unit,\n });\n }\n\n // Whether the WPS is locked to the PQR values (currently is always locked, in the future will be a property)\n isLocked = false;\n\n // Whether a value from the WPS should be validated againts the PQR\n shouldValidateRelationValue(value: BaseModel) {\n return (\n !isEmpty(value) &&\n !isEmpty(get(value, 'id')) &&\n (this.isLinkedToPQR || this.isPrequalified) &&\n !isEmpty(this.validator)\n );\n }\n\n shouldValidateCollectionValue(value: []) {\n return (\n !isEmpty(value) &&\n get(value, 'length') > 0 &&\n (this.isLinkedToPQR || this.isPrequalified) &&\n !isEmpty(this.validator)\n );\n }\n\n shouldValidateSingleValue(value: any) {\n return (\n !isEmpty(value) && (this.isLinkedToPQR || this.isPrequalified) && !isEmpty(this.validator)\n );\n }\n\n @computed(`${WPS.MAIN_PQR}.id`, `${WPS.PQR_FILL}.id`, `${WPS.PQR_CAP}.id`)\n get isLinkedToPQR() {\n return !isEmpty(this.mainPqrId) || !isEmpty(this.pqrFillId) || !isEmpty(this.pqrCapId);\n }\n\n getPQR() {\n // Assumes the PQR was previouly loaded, otherwise need to resolve the promise\n return this.store.peekRecord('pqr', this.mainPqrId);\n }\n\n fetchAllRelations() {\n return hash({\n pqrs: get(this, 'secondaryPqrs'),\n positionsRoot: get(this, 'weldingPositionsRoot'),\n positionsFill: get(this, 'weldingPositionsFill'),\n positionsCap: get(this, 'weldingPositionsCap'),\n grooveDesigns: get(this, 'grooveDesigns'),\n weldLayers: get(this, 'weldLayerConfigurations'),\n weldingDetails: get(this, 'weldingDetails'),\n parameters: get(this, 'weldingParameters'),\n preparationMethods: get(this, 'preparationMethods'),\n specialRequirements: get(this, 'specialRequirements'),\n });\n }\n\n get isActiveRevision() {\n return this.revisionStatus === 'ACT';\n }\n\n getIdOfRelation(relation: BaseModel): string {\n if (relation) {\n return get(relation, 'id');\n }\n return '';\n }\n\n getBelongsToId(relationName: keyof WPSModel): string {\n if (relationName) {\n let belongsTo = get(this, relationName);\n if (belongsTo && belongsTo instanceof BaseModel) {\n return get(belongsTo, 'id');\n }\n }\n return '';\n }\n\n get baseMaterial1Id() {\n return this.getIdOfRelation(this.baseMaterial1);\n }\n\n get baseMaterial2Id() {\n return this.getIdOfRelation(this.baseMaterial2);\n }\n\n get mainPqrId() {\n return this.getIdOfRelation(this.mainPqr);\n }\n\n get pqrFillId() {\n return this.getIdOfRelation(this.pqrFill);\n }\n\n get pqrCapId() {\n return this.getIdOfRelation(this.pqrCap);\n }\n\n @computed('pqrFill', 'pqrCap')\n get isAdvancedWPS() {\n let hasFill = !isEmpty(this.pqrFillId);\n let hasCap = !isEmpty(this.pqrCapId);\n return hasFill || hasCap;\n }\n\n @computed('mainPqr', 'multiplePositionPqrRoot')\n get isPcPlusPfPosition(): boolean {\n return !isEmpty(this.mainPqrId) && !isEmpty(this.getBelongsToId('multiplePositionPqrRoot'));\n }\n\n isFilletWeld() {\n return isFilletWeld(get(this, 'weldType'));\n }\n\n isPartialPenetrationButtWeld() {\n return isPartialJointPenetrationButtWeld(this.weldType);\n }\n\n validateDimensions() {\n let isFilletWeld = this.isFilletWeld();\n let isDifferentMaterials = false;\n\n let hasBothMaterials = !isEmpty(this.baseMaterial1Id) && !isEmpty(this.baseMaterial2Id);\n if (this.baseMaterial1Id !== this.baseMaterial2Id && hasBothMaterials) {\n isDifferentMaterials = true;\n }\n let hasBothDiameter =\n !isEmpty(this.baseMaterial1Diameter) && !isEmpty(this.baseMaterial2Diameter);\n if (this.baseMaterial1Diameter !== this.baseMaterial2Diameter && hasBothDiameter) {\n isDifferentMaterials = true;\n }\n\n let hasBothThickness =\n !isEmpty(this.baseMaterial1ThicknessMinimum) && !isEmpty(this.baseMaterial2ThicknessMinimum);\n if (\n this.baseMaterial1ThicknessMinimum !== this.baseMaterial2ThicknessMinimum &&\n hasBothThickness\n ) {\n isDifferentMaterials = true;\n }\n\n if (isFilletWeld && isDifferentMaterials) {\n return false;\n }\n\n return true;\n }\n\n hasImpactRequirements() {\n return !isEmpty(get(this, 'impactTestTemperature'));\n }\n\n isBothSides() {\n return isBothSides(this.weldingDetails);\n }\n\n get isPipe() {\n return this.productType === PRODUCT_TYPE.PIPE;\n }\n\n get isPlate() {\n return this.productType === PRODUCT_TYPE.PLATE;\n }\n\n get isMultiPQR(): boolean {\n let length: any = get(this.secondaryPqrs, 'length');\n return length > 0;\n }\n\n get isOverlayWeld() {\n let weldType = get(this, 'weldType');\n if (weldType) {\n let weldTypeType = get(weldType, 'weldType');\n return weldTypeType === WELD_TYPES.OVERLAY_WELD;\n }\n return false;\n }\n\n get isPrimary(): boolean {\n return this.wpsType === WPS_TYPE.PRIMARY;\n }\n\n get isProject() {\n return this.wpsType === WPS_TYPE.PROJECT;\n }\n\n get isPreliminary(): boolean {\n return this.wpsType === WPS_TYPE.PRELIMINARY;\n }\n\n get isPrequalified(): boolean {\n return this.wpsType === WPS_TYPE.PREQUALIFIED;\n }\n\n @computed('archivalState')\n get isArchived(): boolean {\n return this.archivalState === ARCHIVAL_STATE.ARCHIVED;\n }\n\n @computed('archivalState')\n get isActive(): boolean {\n return this.archivalState === ARCHIVAL_STATE.ACTIVE;\n }\n\n // The multiple position WPS is a PC+PF WPS supported by two PQRs, the PC PQR is stored in the MainPqr field\n // and the PF PQR is stored in the multiplePositionPqrRoot field\n @computed('multiplePositionPqrRoot.id', 'mainPqr.id')\n get isMultiplePositionWps() {\n return !isEmpty(this.getBelongsToId('multiplePositionPqrRoot')) && !isEmpty(this.mainPqrId);\n }\n\n @computed('verifiedBy')\n get isVerified(): boolean {\n let verifiedBy = get(this, 'verifiedBy');\n if (verifiedBy && !isEmpty(get(verifiedBy, 'id'))) {\n return true;\n }\n return false;\n }\n\n @computed('approvedBy')\n get isApproved() {\n let approvedBy = get(this, 'approvedBy');\n if (approvedBy && !isEmpty(get(approvedBy, 'id'))) {\n return true;\n }\n return false;\n }\n\n metadata = {\n modelName: 'welding-procedure-specification',\n wpsNumber: { required: true },\n unitSystem: { required: true },\n standard: { required: true },\n revision: { required: true },\n weldingProcessRoot: { layer: 'process1' },\n weldingProcessFill: { layer: 'process2' },\n weldingProcessCap: { layer: 'process3' },\n weldingPositionsRoot: { layer: 'process1' },\n weldingPositionsFill: { layer: 'process2' },\n weldingPositionsCap: { layer: 'process3' },\n fillerMaterialRoot: { layer: 'process1' },\n baseMaterial1ThicknessMinimum: { unit: 'distance' },\n baseMaterial1ThicknessMaximum: { unit: 'distance' },\n baseMaterial2ThicknessMinimum: { unit: 'distance' },\n baseMaterial2ThicknessMaximum: { unit: 'distance' },\n thicknessRootMinimum: { unit: 'distance' },\n thicknessRootMaximum: { unit: 'distance' },\n thicknessFillMinimum: { unit: 'distance' },\n thicknessFillMaximum: { unit: 'distance' },\n thicknessCapMinimum: { unit: 'distance' },\n thicknessCapMaximum: { unit: 'distance' },\n thicknessMinimum: { unit: 'distance' },\n thicknessMaximum: { unit: 'distance' },\n diameterMinimum: { unit: 'distance' },\n diameterMaximum: { unit: 'distance' },\n rootFaceMinimum: { unit: 'distance' },\n rootFaceMaximum: { unit: 'distance' },\n rootGapMinimum: { unit: 'distance' },\n preheatTemperatureMinimum: { unit: 'temperature' },\n preheatTemperatureMaximum: { unit: 'temperature' },\n postHeatTemperatureMinimum: { unit: 'temperature' },\n postHeatTemperatureMaximum: { unit: 'temperature' },\n postWeldHeatTreatmentTemperatureMinimum: { unit: 'temperature' },\n postWeldHeatTreatmentTemperatureMaximum: { unit: 'temperature' },\n interpassTemperatureMinimum: { unit: 'temperature' },\n interpassTemperatureMaximum: { unit: 'temperature' },\n fillerMaterialRootCommercialDesignation: { layer: 'process1' },\n fillerMaterialFill: { layer: 'process2' },\n fillerMaterialFillCommercialDesignation: { layer: 'process2' },\n fillerMaterialCap: { layer: 'process3' },\n fillerMaterialCapCommercialDesignation: { layer: 'process3' },\n shieldingRoot: { layer: 'process1' },\n shieldingRootGas: { layer: 'process1' },\n shieldingRootGasCommercialDesignation: { layer: 'process1' },\n shieldingRootGasMixture: { layer: 'process1' },\n shieldingRootFlux: { layer: 'process1' },\n shieldingRootFluxCommercialDesignation: { layer: 'process1' },\n flowRateRoot: { layer: 'process1' },\n backingFlowRateRoot: { layer: 'process1' },\n shieldingFill: { layer: 'process2' },\n shieldingFillGas: { layer: 'process2' },\n shieldingFillGasCommercialDesignation: { layer: 'process2' },\n shieldingFillGasMixture: { layer: 'process2' },\n shieldingFillFlux: { layer: 'process2' },\n shieldingFillFluxCommercialDesignation: { layer: 'process2' },\n flowRateFill: { layer: 'process2' },\n backingFlowRateFill: { layer: 'process2' },\n shieldingCap: { layer: 'process3' },\n shieldingCapGas: { layer: 'process3' },\n shieldingCapGasCommercialDesignation: { layer: 'process3' },\n shieldingCapGasMixture: { layer: 'process3' },\n shieldingCapFlux: { layer: 'process3' },\n shieldingCapFluxCommercialDesignation: { layer: 'process3' },\n flowRateCap: { layer: 'process3' },\n backingFlowRateCap: { layer: 'process3' },\n electrodeType: { layer: 'process1' },\n electrodeTypeFill: { layer: 'process2' },\n electrodeTypeCap: { layer: 'process3' },\n numberOfElectrodes: { layer: 'process1' },\n numberOfElectrodesFill: { layer: 'process2' },\n numberOfElectrodesCap: { layer: 'process3' },\n oscillation: { layer: 'process1' },\n weaving: { layer: 'process1' },\n weavingFill: { layer: 'process2' },\n weavingCap: { layer: 'process3' },\n contactTubeDistance: { layer: 'process1' },\n contactTubeDistanceFill: { layer: 'process2' },\n contactTubeDistanceCap: { layer: 'process3' },\n gasNozzleDiameterRoot: { layer: 'process1' },\n gasNozzleDiameterFill: { layer: 'process2' },\n gasNozzleDiameterCap: { layer: 'process3' },\n processMecanizationRoot: { layer: 'process1' },\n processMecanizationFill: { layer: 'process2' },\n processMecanizationCap: { layer: 'process3' },\n arcTransferModeRoot: { layer: 'process1' },\n arcTransferModeFill: { layer: 'process2' },\n arcTransferModeCap: { layer: 'process1' },\n typeCurrentRoot: { layer: 'process1' },\n typeCurrentFill: { layer: 'process2' },\n typeCurrentCap: { layer: 'process3' },\n weldingPositionRootDirection: { layer: 'process1' },\n weldingPositionFillDirection: { layer: 'process2' },\n weldingPositionCapDirection: { layer: 'process3' },\n tungstenDiameterRoot: { layer: 'process1' },\n tungstenDiameterFill: { layer: 'process2' },\n tungstenDiameterCap: { layer: 'process3' },\n fillerMaterialElectrodeFormRoot: { layer: 'process1' },\n fillerMaterialElectrodeFormFill: { layer: 'process2' },\n fillerMaterialElectrodeFormCap: { layer: 'process3' },\n fillerMaterialGuideRoot: { layer: 'process1' },\n fillerMaterialGuideFill: { layer: 'process2' },\n fillerMaterialGuideCap: { layer: 'process3' },\n oscillationWidthRoot: { layer: 'process1' },\n oscillationWidthFill: { layer: 'process2' },\n oscillationWidthCap: { layer: 'process3' },\n oscillationFrequencyRoot: { layer: 'process1' },\n oscillationFrequencyFill: { layer: 'process2' },\n oscillationFrequencyCap: { layer: 'process3' },\n oscillationDwellTimeRoot: { layer: 'process1' },\n oscillationDwellTimeFill: { layer: 'process2' },\n oscillationDwellTimeCap: { layer: 'process3' },\n supplementalDeviceRoot: { layer: 'process1' },\n supplementalDeviceFill: { layer: 'process2' },\n supplementalDeviceCap: { layer: 'process3' },\n fillerMaterialRootDiameters: { layer: 'process1', unit: 'distance' },\n fillerMaterialFillDiameters: { layer: 'process2', unit: 'distance' },\n fillerMaterialCapDiameters: { layer: 'process3', unit: 'distance' },\n flowRateProcess1Minimum: { layer: 'process1', unit: 'flow' },\n flowRateProcess1Maximum: { layer: 'process1', unit: 'flow' },\n flowRateProcess2Minimum: { layer: 'process2', unit: 'flow' },\n flowRateProcess2Maximum: { layer: 'process2', unit: 'flow' },\n flowRateProcess3Minimum: { layer: 'process3', unit: 'flow' },\n flowRateProcess3Maximum: { layer: 'process3', unit: 'flow' },\n };\n\n get temperatureUnit() {\n return this.units.getTemperatureUnit(this.unitSystem || '');\n }\n get distanceUnit() {\n return this.units.getDistanceUnit(this.unitSystem || '');\n }\n get flowUnit() {\n return this.units.getFlowUnit(this.unitSystem || '');\n }\n get heatDistanceUnit() {\n return this.units.getHeatDistanceUnit(this.unitSystem || '');\n }\n get travelSpeedUnit() {\n return this.units.getTravelSpeedUnit(this.unitSystem || '');\n }\n get wireSpeedUnit() {\n return this.units.getWireSpeedUnit(this.unitSystem || '');\n }\n get pressureUnit() {\n return this.units.getPressureUnit(this.unitSystem || '');\n }\n get forceUnit() {\n return this.units.getForceUnit(this.unitSystem || '');\n }\n get areaUnit() {\n return this.units.getAreaUnit(this.unitSystem || '');\n }\n get energyUnit() {\n return this.units.getEnergyUnit(this.unitSystem || '');\n }\n\n fetchRevisions = memberAction({ path: 'fetchRevisions', type: 'GET' });\n\n fetchProjectWps = memberAction({ path: 'fetchProjectWps', type: 'GET' });\n\n fetchProjectsOfWps = memberAction({ path: 'fetchProjectsOfWps', type: 'GET' });\n\n fetchWeldsOfWps = memberAction({ path: 'fetchWeldsOfWps', type: 'GET' });\n\n updateRevisionId = memberAction({ path: 'updateRevisionId', type: 'PUT' });\n\n validationRange = memberAction({ path: 'validationRange', type: 'GET' });\n\n generateExportPdf = memberAction({ path: 'exportPDF', type: 'POST' });\n\n createRevision = memberAction({ path: 'createRevision', type: 'PUT' });\n\n createForProject = memberAction({ path: 'createForProject', type: 'PUT' });\n\n addWpsToProject = memberAction({ path: 'addSpecificationToProject', type: 'PUT' });\n\n archive = memberAction({ path: 'archiveWPS', type: 'PUT' });\n\n unarchive = memberAction({ path: 'unarchiveWPS', type: 'PUT' });\n\n createPQR = memberAction({ path: 'createPQR', type: 'PUT' });\n\n createCertificate = memberAction({ path: 'createCertificate', type: 'PUT' });\n\n createPrequalifiedWPS = memberAction({ path: 'createPrequalifiedWPS', type: 'PUT' });\n\n verifyWps = memberAction({ path: 'verify', type: 'PUT' });\n\n approveWps = memberAction({ path: 'approve', type: 'PUT' });\n\n revokeWps = memberAction({ path: 'revoke', type: 'PUT' });\n\n duplicateWps = memberAction({ path: 'duplicate', type: 'PUT' });\n\n deleteRevision = memberAction({ path: 'deleteRevision', type: 'PUT' });\n}\n\nexport default WPSModel;\n","import { computed } from '@ember/object';\nimport { belongsTo, attr } from '@ember-data/model';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\nimport PqrStandard from './pqr-standard';\nimport WelderStandard from './welder-standard';\n\n/**\n * Represents a Welding Process in the welding domain.\n *\n * A Welding Process defines the specific method by which metals are joined through\n * the application of heat, pressure, or both, with or without filler material.\n * The process selection is a critical variable in welding procedure qualification\n * and affects mechanical properties, productivity, and quality of the weld.\n *\n * Welding processes are categorized by their heat source and protection method.\n * Common arc welding processes include:\n *\n * **Gas-Shielded Processes:**\n * - GTAW/TIG (141): Gas Tungsten Arc Welding - uses non-consumable tungsten electrode\n * - GMAW/MIG/MAG (131/135): Gas Metal Arc Welding - uses consumable wire electrode\n * - FCAW (136/138): Flux-Cored Arc Welding - uses flux-filled tubular wire\n *\n * **Flux-Protected Processes:**\n * - SMAW (111): Shielded Metal Arc Welding (stick welding) - uses coated electrodes\n * - SAW (121): Submerged Arc Welding - arc submerged under granular flux\n *\n * **Other Processes:**\n * - ESW (72): Electroslag Welding - for thick sections in single pass\n * - PAW (15): Plasma Arc Welding - constricted arc for precision welding\n *\n * The `shortDesignation` typically contains the process abbreviation (e.g., \"GTAW\", \"141\")\n * while `processName` contains the full descriptive name.\n *\n * Process selection impacts:\n * - Heat input and cooling rates\n * - Deposition rate and productivity\n * - Required welder skill level\n * - Joint accessibility requirements\n * - Shielding gas and filler material compatibility\n *\n * @extends BaseModel\n */\nexport default class WeldingProcess extends BaseModel {\n @attr('string')\n declare processName: string;\n\n @attr('string')\n declare shortDesignation: string;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode: IndustryCode;\n\n @attr('boolean')\n declare system: boolean;\n\n @belongsTo('pqr-standard', { async: false, inverse: null })\n declare standard: PqrStandard;\n\n @belongsTo('welder-standard', { async: false, inverse: null })\n declare welderStandard: WelderStandard;\n\n @computed('shortDesignation', 'processName')\n get visualLabel(): string {\n let { shortDesignation } = this;\n if (isEmpty(shortDesignation)) {\n shortDesignation = '';\n }\n return shortDesignation || '';\n }\n\n validations = {\n shortDesignation: { presence: true },\n industryCode: { presence: true },\n };\n\n metadata = {\n modelName: 'welding-process',\n shortDesignation: {\n required: true,\n },\n\n industryCode: {\n required: true,\n },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welding-process': WeldingProcess;\n }\n}\n","import Model, { hasMany, SyncHasMany } from '@ember-data/model';\nimport ArcTransferMode from './arc-transfer-mode';\nimport BaseMaterialGroup from './base-material-group';\nimport ElectrodeType from './electrode-type';\nimport FillerMaterialGroup from './filler-material-group';\nimport FluxSpecification from './flux-specification';\nimport GasSpecification from './gas-specification';\nimport PostWeldTreatmentMethod from './post-weld-treatment-method';\nimport PreparationMethod from './preparation-method';\nimport ProcessMecanization from './process-mecanization';\nimport TypeCurrentPolarity from './type-current-polarity';\nimport WeldType from './weld-type';\nimport WeldingDetail from './welding-detail';\nimport WeldingPosition from './welding-position';\nimport WeldingProcess from './welding-process';\n\nexport default class WeldingResource extends Model {\n @hasMany('weld-type', { async: false, inverse:null })\n declare weldTypes: SyncHasMany;\n\n @hasMany('arc-transfer-mode', { async: false, inverse:null })\n declare arcTransferModes: SyncHasMany;\n\n @hasMany('welding-detail', { async: false, inverse:null })\n declare weldingDetails: SyncHasMany;\n\n @hasMany('welding-position', { async: false, inverse:null })\n declare weldingPositions: SyncHasMany;\n\n @hasMany('base-material-group', { async: false, inverse:null })\n declare baseMaterialGroups: SyncHasMany;\n\n @hasMany('filler-material-group', { async: false, inverse:null })\n declare fillerMaterialGroups: SyncHasMany;\n\n @hasMany('electrode-type', { async: false, inverse:null })\n declare electrodeTypes: SyncHasMany;\n\n @hasMany('type-current-polarity', { async: false, inverse:null })\n declare typeCurrentPolarities: SyncHasMany;\n\n @hasMany('welding-process', { async: false, inverse:null })\n declare weldingProcesses: SyncHasMany;\n\n @hasMany('process-mecanization', { async: false, inverse:null })\n declare processMecanizations: SyncHasMany;\n\n @hasMany('preparation-method', { async: false, inverse:null })\n declare preparationMethods: SyncHasMany;\n\n @hasMany('gas-specification', { async: false, inverse:null })\n declare gasSpecifications: SyncHasMany;\n\n @hasMany('flux-specification', { async: false, inverse:null })\n declare fluxSpecifications: SyncHasMany;\n\n @hasMany('post-weld-treatment-method', { async: false, inverse:null })\n declare postWeldHeatTreatmentMethods: SyncHasMany;\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'welding-data': WeldingResource;\n }\n}\n","import { attr, belongsTo } from '@ember-data/model';\nimport BaseModel from 'weldnote/models/base-model';\nimport IndustryCode from './industry-code';\n\n/**\n * Represents a WPQ learned mapping in the welding domain.\n *\n * WPQ learned mappings store user corrections when auto-mapping fails during\n * WPQ digitalization. These mappings capture crowd-sourced improvements that\n * help future WPQ processing recognize and correctly map values.\n *\n * Entity types that can be mapped:\n * - WeldType\n * - WeldingProcess\n * - WeldingPosition\n * - ArcTransferMode\n * - TypeCurrentPolarity\n * - ProcessMecanization\n * - WeldingDetail\n * - Gas\n *\n * @extends BaseModel\n */\nexport default class WpqLearnedMapping extends BaseModel {\n @attr('string')\n declare entityType: string;\n\n @attr('string')\n declare parsedValue: string;\n\n @attr('string')\n declare canonicalCode: string;\n\n @attr('number')\n declare usageCount?: number;\n\n @attr('boolean')\n declare isVerified?: boolean;\n\n @attr('date')\n declare createdOn?: Date;\n\n @attr('date')\n declare modifiedOn?: Date;\n\n @attr('date')\n declare lastUsedOn?: Date;\n\n @belongsTo('industry-code', { async: false, inverse: null })\n declare industryCode?: IndustryCode;\n\n get visualLabel(): string {\n return `${this.parsedValue} → ${this.canonicalCode}`;\n }\n\n validations = {\n entityType: {\n presence: {\n message(_key: string, _value: string, model: WpqLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n parsedValue: {\n presence: {\n message(_key: string, _value: string, model: WpqLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n canonicalCode: {\n presence: {\n message(_key: string, _value: string, model: WpqLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n industryCode: {\n presence: {\n message(_key: string, _value: string, model: WpqLearnedMapping): string {\n return model.intl.t('generic.error.input-value');\n },\n },\n },\n };\n\n metadata = {\n modelName: 'wpq-learned-mapping',\n listRoute: 'wpq-learned-mappings',\n editRoute: 'wpq-learned-mapping',\n entityType: { required: true },\n parsedValue: { required: true },\n canonicalCode: { required: true },\n industryCode: { required: true },\n };\n}\n\ndeclare module 'ember-data/types/registries/model' {\n export default interface ModelRegistry {\n 'wpq-learned-mapping': WpqLearnedMapping;\n }\n}\n","import { service } from '@ember/service';\nimport { attr, belongsTo, hasMany, SyncHasMany } from '@ember-data/model';\nimport { get, computed } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseModel from 'weldnote/models/base-model';\nimport Constants from 'weldnote/utils/constants';\nimport {\n fromMilimeterSecondToMeterMinute,\n fromMilimeterSecondToMilimeterMinute,\n} from 'weldnote/utils/unit-system/speed';\nimport TypeCurrentPolarity from './type-current-polarity';\nimport ArcTransferMode from './arc-transfer-mode';\nimport WPSModel from './welding-procedure-specification';\nimport WeldingPosition from './welding-position';\nimport UserSessionService from 'weldnote/services/user-session';\nimport UnitSystemService from 'weldnote/services/unit-system';\n\nconst { WELDING_LAYER_OPTIONS } = Constants;\n\n/**\n * Represents a WPS Welding Parameter record (a single row in the welding parameters table).\n *\n * WPS Welding Parameters specify the acceptable ranges for electrical and speed parameters\n * that welders must follow during production welding. These parameters are derived from\n * the qualified ranges established in the supporting PQR(s).\n *\n * **Relationship to PQR Parameters:**\n * WPS parameters must fall within the approval ranges of the supporting PQR:\n * - Each WPS parameter may be linked to a source PQR parameter via `sourceParameter`\n * - The WPS validator ensures parameter values don't exceed PQR-qualified ranges\n *\n * **Essential Electrical Parameters:**\n *\n * **Current (Amperage):**\n * - `currentMinimum / currentMaximum`: Welding current range in amperes (A)\n * - Higher current = deeper penetration, higher deposition rate\n * - Lower current = less heat input, reduced distortion\n * - Typical ranges: 80-180A (GTAW), 100-350A (SMAW/GMAW), 300-1000A (SAW)\n *\n * **Voltage:**\n * - `voltageMinimum / voltageMaximum`: Arc voltage range in volts (V)\n * - Affects arc length and bead profile\n * - Higher voltage = wider, flatter bead\n * - Lower voltage = narrower, more convex bead\n * - Typical ranges: 10-16V (GTAW), 18-30V (SMAW), 20-35V (GMAW)\n *\n * **Current Type and Polarity (`typeCurrent`):**\n * - DC+ (DCEP): Electrode positive - deeper penetration\n * - DC- (DCEN): Electrode negative - less penetration, higher deposition\n * - AC: Alternating current - balanced heat, used for aluminum\n * - Pulsed: Controlled heat input for thin materials\n *\n * **Speed Parameters:**\n *\n * **Travel Speed:**\n * - `travelSpeedMinimum / travelSpeedMaximum`: Welding travel speed\n * - Measured in mm/min (metric) or in/min (imperial)\n * - Affects heat input, bead shape, and productivity\n * - Higher speed = lower heat input, narrower bead\n *\n * **Wire Feed Speed:**\n * - `wireFeedSpeedMinimum / wireFeedSpeedMaximum`: Wire/electrode feed rate\n * - Applicable to GMAW, FCAW, SAW, and GTAW (with cold wire)\n * - Measured in m/min (metric) or in/min (imperial)\n * - Determines deposition rate and current (in CV systems)\n *\n * **Heat Input:**\n * - `heatInputMinimum / heatInputMaximum`: Calculated heat input in kJ/mm or kJ/in\n * - For metric: Heat Input (kJ/mm) = (Voltage [V] × Current [A] × 60) / (Travel Speed [mm/min] × 1000)\n * - For imperial: Heat Input (kJ/in) = (Voltage [V] × Current [A] × 60) / (Travel Speed [in/min] × 1000)\n * - Critical for controlling HAZ properties, grain growth, and distortion\n * - Many codes specify maximum heat input for certain materials\n *\n * **Layer Assignment:**\n * The `layer` property (Root, Fill, Cap) links the parameter to:\n * - The welding process for that layer\n * - The filler material specification for that layer\n * - Different parameters may be required for different layers\n *\n * **Arc Transfer Mode (`arcTransferMode`):**\n * For GMAW processes, specifies the metal transfer mechanism:\n * - Short-circuit: Low heat, positional welding\n * - Globular: Higher deposition, flat/horizontal only\n * - Spray: High heat, high deposition, flat/horizontal\n * - Pulsed: Controlled heat, all-position capability\n *\n * **Welding Positions:**\n * The `weldingPositions` relationship allows specifying which welding positions\n * these parameters are qualified for (1G/1F, 2G/2F, 3G/3F, 4G/4F, 5G, 6G, etc.)\n *\n * @extends BaseModel\n *\n * @example\n * // Creating welding parameters for a fill pass\n * const fillParameter = store.createRecord('wps-welding-parameter', {\n * passNumber: 'Fill 1-3',\n * layer: 'FILL',\n * currentMinimum: 150,\n * currentMaximum: 180,\n * voltageMinimum: 22,\n * voltageMaximum: 26,\n * typeCurrent: dcepPolarity,\n * travelSpeedMinimum: 150,\n * travelSpeedMaximum: 250,\n * wps: parentWps\n * });\n */\nexport default class WpsWeldingParameter extends BaseModel {\n @service()\n declare userSession: UserSessionService;\n\n @service('unit-system')\n declare units: UnitSystemService;\n\n @attr('string')\n declare guid?: string;\n\n @attr('number')\n declare orderNum?: number;\n\n @attr('string')\n declare passNumber?: string;\n\n @attr()\n declare fillerMaterialDiameters?: string;\n\n @attr('number')\n declare currentMinimum?: number;\n\n @attr('number')\n declare currentMaximum?: number;\n\n @attr('number')\n declare voltageMinimum?: number;\n\n @attr('number')\n declare voltageMaximum?: number;\n\n @belongsTo('type-current-polarity', { async: false })\n declare typeCurrent: TypeCurrentPolarity;\n\n //@ts-ignore\n @attr('decimal-value')\n declare wireFeedSpeedMinimum: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare wireFeedSpeedMaximum: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare travelSpeedMinimum: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare travelSpeedMaximum: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMinimum: number;\n\n //@ts-ignore\n @attr('decimal-value')\n declare heatInputMaximum: number;\n\n @belongsTo('arc-transfer-mode', { async: false })\n declare arcTransferMode: ArcTransferMode;\n\n @belongsTo('welding-procedure-specification', { async: false })\n declare wps: WPSModel;\n\n @attr('string')\n declare layer?: string;\n\n @belongsTo('pqr-welding-parameter', { async: false })\n declare sourceParameter: any;\n\n @hasMany('welding-position', { async: false })\n declare weldingPositions: SyncHasMany;\n\n @attr('string')\n declare program?: string;\n\n @attr('string')\n declare unitSystem?: string;\n\n @attr({\n defaultValue() {\n return {};\n },\n })\n declare additionalData?: string;\n\n get travelSpeedUnit(): string {\n return this.units.getTravelSpeedUnit(this.wps.unitSystem || '');\n }\n\n get wireSpeedUnit(): string {\n return this.units.getWireSpeedUnit(this.wps.unitSystem || '');\n }\n\n get isMetricSystem(): boolean {\n return this.units.isMetricSystem(this.wps.unitSystem || this.userSession.unitSystem || '');\n }\n\n get isImperialSystem(): boolean {\n return this.units.isImperialSystem(this.wps.unitSystem || this.userSession.unitSystem || '');\n }\n\n metadata = {\n modelName: 'wps-welding-parameter',\n passNumber: { required: true },\n currentMinimum: { required: true },\n currentMaximum: { required: true },\n voltageMinimum: { required: true },\n voltageMaximum: { required: true },\n typeCurrent: { required: true },\n layer: { required: true },\n };\n\n isEmptyParameter() {\n let allEmpty =\n isEmpty(this.passNumber) &&\n isEmpty(this.currentMinimum) &&\n isEmpty(this.currentMaximum) &&\n isEmpty(this.voltageMinimum) &&\n isEmpty(this.voltageMaximum) &&\n isEmpty(this.typeCurrent) &&\n isEmpty(this.layer);\n return allEmpty;\n }\n\n validations = {\n passNumber: {\n presence: {\n message(_key: string, _value: string, model: WpsWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n length: [0, 10],\n },\n\n currentMinimum: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!isEmpty(value)) {\n return model.validateMinimum('currentMaximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n return model.getBelowMaximumMessage(get(model, 'currentMaximum'), '(A)');\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterCurrentMinimumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model.getWps().validator.parameterCurrentMinimumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n currentMaximum: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!isEmpty(value)) {\n return model.validateMaximum('currentMinimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n return model.getAboveMinimumMessage(get(model, 'currentMinimum'), '(A)');\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterCurrentMaximumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model.getWps().validator.parameterCurrentMaximumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n voltageMinimum: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!isEmpty(value)) {\n return model.validateMinimum('voltageMaximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n return model.getBelowMaximumMessage(get(model, 'voltageMaximum'), '(V)');\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterVoltageMinimumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model.getWps().validator.parameterVoltageMinimumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n voltageMaximum: {\n numericality: {\n allowBlank: false,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 9999,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!isEmpty(value)) {\n return model.validateMaximum('voltageMinimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n return model.getAboveMinimumMessage(get(model, 'voltageMinimum'), '(V)');\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterVoltageMaximumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model.getWps().validator.parameterVoltageMaximumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n typeCurrent: {\n custom: {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps()) {\n if (!isEmpty(value)) {\n return model.getWps().validator.isParameterTypeCurrentValid(value, model);\n } else {\n return false;\n }\n }\n return !isEmpty(value);\n },\n\n message(_key: string, value: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps()) {\n if (!isEmpty(value)) {\n return model.getWps().validator.parameterTypeCurrentInvalidMessage(value, model);\n } else {\n return model.intl\n .t('model-validations.wps-parameter.type-current-required')\n .toString();\n }\n }\n return '';\n },\n },\n },\n\n wireFeedSpeedMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: [\n {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n return model.validateMinimum('wireFeedSpeedMaximum', value);\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getBelowMaximumMessage(\n fromMilimeterSecondToMeterMinute(get(model, 'wireFeedSpeedMaximum')),\n `(${get(model, 'wireSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getBelowMaximumMessage(\n get(model, 'wireFeedSpeedMaximum'),\n `(${get(model, 'wireSpeedUnit')})`\n );\n }\n return '';\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterWireFeedSpeedMinimumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model\n .getWps()\n .validator.parameterWireFeedSpeedMinimumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n wireFeedSpeedMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: [\n {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n return model.validateMaximum('wireFeedSpeedMinimum', value);\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n if (get(model, 'isMetricSystem')) {\n return model.getAboveMinimumMessage(\n fromMilimeterSecondToMeterMinute(get(model, 'wireFeedSpeedMinimum')),\n `(${get(model, 'wireSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getAboveMinimumMessage(\n get(model, 'wireFeedSpeedMinimum'),\n `(${get(model, 'wireSpeedUnit')})`\n );\n }\n return '';\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterWireFeedSpeedMaximumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model\n .getWps()\n .validator.parameterWireFeedSpeedMaximumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n heatInputMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WpsWeldingParameter): boolean {\n if (!model.isPreliminaryWps() && !isEmpty(value)) {\n return model.getWps().validator.isHeatInputValid(value, get(model, 'layer'));\n }\n return true;\n },\n\n message(_key: string, value: any, model: WpsWeldingParameter): string {\n return model.getWps().validator.heatInputInvalidMessage(value, get(model, 'layer'));\n },\n },\n {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!isEmpty(value)) {\n return model.validateMinimum('heatInputMaximum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n return model.getBelowMaximumMessage(get(model, 'heatInputMaximum'), '(kJ/mm)');\n },\n },\n ],\n },\n\n heatInputMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: [\n {\n validation(_key: string, value: any, model: WpsWeldingParameter): boolean {\n if (!model.isPreliminaryWps() && !isEmpty(value)) {\n return model.getWps().validator.isHeatInputValid(value, get(model, 'layer'));\n }\n return true;\n },\n\n message(_key: string, value: any, model: WpsWeldingParameter): string {\n return model.getWps().validator.heatInputInvalidMessage(value, get(model, 'layer'));\n },\n },\n {\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!isEmpty(value)) {\n return model.validateMaximum('heatInputMinimum', value);\n }\n return true;\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter) {\n return model.getAboveMinimumMessage(get(model, 'heatInputMinimum'), '(kJ/mm)');\n },\n },\n ],\n },\n\n travelSpeedMinimum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: [\n {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n return model.validateMinimum('travelSpeedMaximum', value);\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getBelowMaximumMessage(\n fromMilimeterSecondToMilimeterMinute(get(model, 'travelSpeedMaximum')),\n `(${get(model, 'travelSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getBelowMaximumMessage(\n get(model, 'travelSpeedMaximum'),\n `(${get(model, 'travelSpeedUnit')})`\n );\n }\n return '';\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterTravelSpeedMinimumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model\n .getWps()\n .validator.parameterTravelSpeedMinimumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n travelSpeedMaximum: {\n numericality: {\n allowBlank: true,\n greaterThanOrEqualTo: 0,\n lessThanOrEqualTo: 99999.99,\n },\n\n custom: [\n {\n if(_key: string, value: any) {\n return !isEmpty(value);\n },\n\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n return model.validateMaximum('travelSpeedMinimum', value);\n },\n\n message(_key: string, _value: any, model: WpsWeldingParameter): string {\n if (get(model, 'isMetricSystem')) {\n return model.getAboveMinimumMessage(\n fromMilimeterSecondToMilimeterMinute(get(model, 'travelSpeedMinimum')),\n `(${get(model, 'travelSpeedUnit')})`\n );\n } else if (get(model, 'isImperialSystem')) {\n return model.getAboveMinimumMessage(\n get(model, 'travelSpeedMinimum'),\n `(${get(model, 'travelSpeedUnit')})`\n );\n }\n return '';\n },\n },\n {\n validation(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps() && !isEmpty(valueRaw)) {\n return model.getWps().validator.isParameterTravelSpeedMaximumValid(valueRaw, model);\n }\n return true;\n },\n\n message(_key: string, valueRaw: any, model: WpsWeldingParameter) {\n return model\n .getWps()\n .validator.parameterTravelSpeedMaximumInvalidMessage(valueRaw, model);\n },\n },\n ],\n },\n\n layer: {\n presence: {\n message(_key: string, _value: any, model: WpsWeldingParameter): string {\n return model.translate('generic.error.input-value');\n },\n },\n\n custom: {\n if(_key: string, value: any, model: WpsWeldingParameter) {\n return model.shouldValidateSingleValue(value);\n },\n\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n if (!model.isPreliminaryWps()) {\n return model.getWps().validator.isParameterLayerValid(value, model);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WpsWeldingParameter) {\n return model.getWps().validator.parameterLayerInvalidMessage(value, model);\n },\n },\n },\n\n arcTransferMode: {\n custom: {\n if(/* key, value, model*/) {\n // False purpose, since we have flag to display (or not) the\n // arc transfer mode, we don't want users that cannot see the transfer\n // mode to have an error they can't fix\n return false;\n },\n\n validation(_key: string, value: any, model: WpsWeldingParameter) {\n // This is not used because of the return false previously\n if (!model.isPreliminaryWps()) {\n return model.getWps().validator.isParameterArcTransferModeValid(value, model);\n }\n return true;\n },\n\n message(_key: string, value: any, model: WpsWeldingParameter) {\n return model.getWps().validator.parameterArcTransferModeInvalidMessage(value, model);\n },\n },\n },\n };\n\n getPqrPass() {\n return get(this, 'sourceParameter');\n }\n\n getPqr() {\n return get(get(this, 'wps'), 'mainPqr');\n }\n\n getWpsStandard() {\n return get(get(this, 'wps'), 'standard');\n }\n\n shouldValidateRelationValue(value: BaseModel) {\n return !isEmpty(value) && !isEmpty(get(value, 'id')) && this.isLinkedToPass;\n }\n\n getWps() {\n return this.store.peekRecord('welding-procedure-specification', this.wpsId);\n }\n\n shouldValidateSingleValue(value: any) {\n return !isEmpty(value) && this.isLinkedToPass;\n }\n\n getSourceInputMinimum() {\n return this.getWps().validator.heatInputMinimumSource(this);\n }\n\n getSourceInputMaximum() {\n return this.getWps().validator.heatInputMaximumSource(this);\n }\n\n getSourcePQRInputMinimum() {\n return this.getWps().validator.heatInputMinimumSourcePQR(this);\n }\n\n getSourcePQRInputMaximum() {\n return this.getWps().validator.heatInputMaximumSourcePQR(this);\n }\n\n isPreliminaryWps() {\n return isEmpty(this.wpsId) || isEmpty(this.getWps().validator);\n }\n\n get wpsId(): string {\n let wps = get(this, 'wps');\n if (wps && !isEmpty(wps)) {\n return get(wps, 'id');\n }\n return '';\n }\n\n @computed('sourceParameter')\n get isLinkedToPass() {\n let source = this.sourceParameter;\n return !isEmpty(source);\n }\n\n validateMinimum(propertyMaximumValue: any, value: string) {\n let maximum = parseFloat(get(this, propertyMaximumValue));\n if (!isEmpty(maximum) && !isNaN(maximum)) {\n let minimum = parseFloat(value);\n return minimum <= maximum;\n }\n return true;\n }\n\n validateMaximum(propertyMinimumValue: any, value: string) {\n let minimum = parseFloat(get(this, propertyMinimumValue));\n if (!isEmpty(minimum) && !isNaN(minimum)) {\n let maximum = parseFloat(value);\n return maximum >= minimum;\n }\n return true;\n }\n\n getBelowMaximumMessage(approvalRange: string | number | undefined, unit = '') {\n return this.translate('model-validations.wps-parameter.must-be-below-maximum', {\n approvalRange,\n unit,\n });\n }\n\n getAboveMinimumMessage(approvalRange: string | number | undefined, unit: string) {\n return this.translate('model-validations.wps-parameter.must-be-above-minimum', {\n approvalRange,\n unit,\n });\n }\n\n @computed('layer', 'wps.{fillerMaterialRoot,fillerMaterialFill,fillerMaterialCap}')\n get fillerMaterialType() {\n if (this.layer === WELDING_LAYER_OPTIONS.ROOT) {\n return this.wps.fillerMaterialRoot;\n } else if (this.layer === WELDING_LAYER_OPTIONS.FILL) {\n return this.wps.fillerMaterialFill;\n } else if (this.layer === WELDING_LAYER_OPTIONS.CAP) {\n return this.wps.fillerMaterialCap;\n }\n return null;\n }\n\n @computed('layer', 'wps.{weldingProcessRoot,weldingProcessFill,weldingProcessCap}')\n get weldingProcess() {\n if (this.layer === WELDING_LAYER_OPTIONS.ROOT) {\n return get(this.wps, 'weldingProcessRoot');\n } else if (this.layer === WELDING_LAYER_OPTIONS.FILL) {\n return get(this.wps, 'weldingProcessFill');\n } else if (this.layer === WELDING_LAYER_OPTIONS.CAP) {\n return get(this.wps, 'weldingProcessCap');\n }\n return null;\n }\n}\n","import { modifier } from 'ember-modifier';\n\nexport default modifier(function addBodyClass(element, params, { className }) {\n document.body.classList.add(className);\n return () => {\n document.body.classList.remove(className);\n };\n});\n","import { modifier } from 'ember-modifier';\nimport { isEmpty } from '@ember/utils';\n\nexport default modifier(function autofocus(element /* , params, hash*/) {\n if (!isEmpty(element)) {\n element.focus();\n }\n});\n","import { modifier } from 'ember-modifier';\n\nexport default modifier(function loadRemover(element) {\n let indicator = document.querySelector('.ember-load-indicator');\n if (indicator) {\n indicator.remove();\n }\n});\n","import { registerDestructor } from '@ember/destroyable';\nimport Modifier from 'ember-modifier';\nimport makePikaday from 'weldnote/src-weldnote/pikaday/pikaday';\nimport moment from 'moment';\nconst Pikaday = makePikaday(moment);\n\nexport default class PikadayModifier extends Modifier {\n #pikaday;\n #observer;\n\n constructor(owner, args) {\n super(owner, args);\n\n registerDestructor(this, () => {\n this.#pikaday.destroy();\n this.#observer.disconnect();\n });\n }\n\n getPikadayOptions(element, positional, named) {\n let opts = {\n // Our element is Pikaday's field\n field: element,\n\n // All other named arguments go through to Pikaday\n ...named,\n\n // We also optionally accept a bag of arguments as the first positional\n // argument, because it's hard to do argument splatting in hbs. These are\n // taking precedence over the named arguments.\n ...positional[0],\n };\n\n if (!opts.i18n) {\n // Pikaday doesn't like it if you pass an empty value for i18n, whereas\n // it's hard in HBS to conditionally include a named argument, so we\n // drop it here.\n delete opts.i18n;\n }\n return opts;\n }\n\n modify(element, positional, named) {\n const pikadayOptions = this.getPikadayOptions(element, positional, named);\n\n if (!this.#pikaday) {\n this.#pikaday = new Pikaday(pikadayOptions);\n let { value, register } = named;\n if (value) {\n this.#pikaday.setDate(value, true);\n }\n this.syncDisabled(element);\n this.#observer = new MutationObserver(() => this.syncDisabled(element));\n this.#observer.observe(element, { attributes: true });\n register?.(this.#pikaday);\n } else {\n let { value } = named;\n\n this.#pikaday.setDate(value, true);\n this.#pikaday.config(pikadayOptions);\n }\n }\n\n syncDisabled(element) {\n if (element.hasAttribute('disabled')) {\n this.#pikaday.hide();\n }\n }\n}","export default {\n CONSTRUCTION_STANDARD: {\n INDUSTRY_CODE: 'industryCode',\n DESIGNATION: 'designation',\n SYSTEM: 'system',\n },\n};\n","export default {\n FITTER: {\n FITTER_NAME: 'fitterName',\n FITTER_STAMP: 'fitterStamp',\n FITTER_ID: 'fitterId',\n FITTER_TYPE: 'fitterType',\n DATE_BIRTH: 'dateBirth',\n COMPANY: 'company',\n },\n};\n","import JSONAPISerializer from '@ember-data/serializer/json-api';\n\nexport default JSONAPISerializer.extend({\n // This is because of this issue\n // https://github.com/emberjs/data/issues/3881\n modelNameFromPayloadKey(key) {\n if (key === 'gases') {\n return 'gas';\n }\n return this._super(...arguments);\n },\n});\n","import JSONAPISerializer from '@ember-data/serializer/json-api';\n\nexport default JSONAPISerializer.extend({\n // This is because of this issue\n // https://github.com/emberjs/data/issues/3881\n modelNameFromPayloadKey(key) {\n if (key === 'gases') {\n return 'gas';\n }\n return this._super(...arguments);\n },\n\n serialize(/* snapshot, options*/) {\n let json = this._super(...arguments);\n json.data.type = 'gases';\n return json;\n },\n});\n","export default {\n INSPECTOR: {\n INSPECTOR_NAME: 'inspectorName',\n INSPECTOR_STAMP: 'inspectorStamp',\n INSPECTOR_ID: 'inspectorId',\n INSPECTOR_TYPE: 'inspectorType',\n DATE_BIRTH: 'dateBirth',\n EXAMINING_BODY: 'examiningBody',\n },\n};\n","export default {\n MISCELLANEOUS_CERTIFICATE_TYPE: {\n SYSTEM: 'system',\n TYPE: 'type',\n },\n};\n","export default {\n MISCELLANEOUS_CERTIFICATE: {\n CERTIFICATE_NUMBER: 'certificateNumber',\n EXPIRATION_DATE: 'expirationDate',\n REQUALIFICATION_PERIOD: 'requalificationPeriod',\n CERTIFICATE_DOCUMENT: 'certificateDocument',\n TYPE: 'type',\n CERTIFICATE_STATE: 'certificateState',\n COMPANY: 'company',\n PERSON: 'person',\n },\n};\n","export default {\n PROJECT: {\n DESIGNATION: 'designation',\n PROJECT_NAME: 'projectName',\n CUSTOMER: 'customer',\n SUPPLIER: 'supplier',\n CONSTRUCTION_STANDARD: 'constructionStandard',\n STANDARD: 'standard',\n WELDER_STANDARD: 'welderStandard',\n PROJECT_STATUS: 'projectStatus',\n START_DATE: 'startDate',\n END_DATE: 'endDate',\n DRAWINGS: 'drawings',\n WELDING_PROCEDURE_SPECIFICATIONS: 'weldingProcedureSpecifications',\n PQRS: 'pqrs',\n MAXIMUM_REPAIRS_PER_WELD: 'maximumRepairsPerWeld',\n SELECT_WELDERS_FROM_COMPANY_ONLY: 'selectWeldersFromCompanyOnly',\n SELECT_WPS_FROM_COMPANY_ONLY: 'selectWpsFromCompanyOnly',\n SELECT_WPS_FROM_PROJECT_LIBRARY_ONLY: 'selectWpsFromProjectLibraryOnly',\n COVER_PICTURE: 'coverPicture',\n ARCHIVAL_STATE: 'archivalState',\n TYPE_OF_WPS_INCLUSION: 'typeOfWpsInclusion',\n },\n};\n","import JSONAPISerializer from '@ember-data/serializer/json-api';\n\nexport default JSONAPISerializer.extend({\n // This is because of this issue\n // https://github.com/emberjs/data/issues/3881\n modelNameFromPayloadKey(key) {\n if (key === 'gases') {\n return 'gas';\n }\n return this._super(...arguments);\n },\n});\n","import EmberRouter from '@ember/routing/router';\nimport config from 'weldnote/config/environment';\n\nconst WeldnoteRouter = EmberRouter.extend({\n location: config.locationType,\n rootURL: config.rootURL,\n});\n\nWeldnoteRouter.map(function () {\n this.route('login');\n this.route('loading');\n\n this.route('examining-bodies');\n this.route('examining-body', { path: '/examining-bodies/:id' });\n this.route('examining-body.new', { path: '/examining-bodies/new' });\n\n this.route('base-materials');\n this.route('base-material', { path: '/base-materials/:id' });\n this.route('base-material.new', { path: '/base-materials/new' });\n\n this.route('welders');\n this.route('welder', { path: '/welders/:id' });\n this.route('welders-archived');\n\n this.route('fitters');\n this.route('fitter', { path: '/fitters/:id' });\n\n this.route('inspectors');\n this.route('inspector', { path: '/inspectors/:id' });\n\n this.route('companies');\n this.route('company', { path: '/companies/:id' });\n\n this.route('filler-materials');\n this.route('filler-material', { path: '/filler-materials/:id' });\n this.route('filler-material.new', { path: '/filler-materials/new' });\n\n //\n // Beginning of settings\n //\n\n this.route('settings');\n\n // Base Materials\n this.route('base-material-groups', { path: '/settings/base-material-groups' });\n this.route('base-material-group', { path: '/settings/base-material-groups/:id' });\n this.route('base-material-group.new', { path: '/settings/base-material-groups/new' });\n\n // Filler Materials\n this.route('filler-material-groups', { path: '/settings/filler-material-groups' });\n this.route('filler-material-group', { path: '/settings/filler-material-groups/:id' });\n this.route('filler-material-group.new', { path: '/settings/filler-material-groups/new' });\n\n this.route('filler-material-commercial-designations', {\n path: '/settings/filler-material-commercial-designations',\n });\n this.route('filler-material-commercial-designation', {\n path: '/settings/filler-material-commercial-designations/:id',\n });\n this.route('filler-material-commercial-designation.new', {\n path: '/settings/filler-material-commercial-designations/new',\n });\n\n // Gas\n this.route('gases', { path: '/settings/gases' });\n this.route('gas', { path: '/settings/gases/:id' });\n this.route('gas.new', { path: '/settings/gases/new' });\n\n this.route('gas-specifications', { path: '/settings/gas-specifications' });\n this.route('gas-specification', { path: '/settings/gas-specifications/:id' });\n this.route('gas-specification.new', { path: '/settings/gas-specifications/new' });\n\n this.route('gas-commercial-designations', { path: '/settings/gas-commercial-designations' });\n this.route('gas-commercial-designation', { path: '/settings/gas-commercial-designations/:id' });\n this.route('gas-commercial-designation.new', {\n path: '/settings/gas-commercial-designations/new',\n });\n\n // Flux\n this.route('fluxes', { path: '/settings/fluxes' });\n this.route('flux', { path: '/settings/fluxes/:id' });\n this.route('flux.new', { path: '/settings/fluxes/new' });\n\n this.route('flux-specifications', { path: '/settings/flux-specifications' });\n this.route('flux-specification', { path: '/settings/flux-specifications/:id' });\n this.route('flux-specification.new', { path: '/settings/flux-specifications/new' });\n\n this.route('flux-commercial-designations', { path: '/settings/flux-commercial-designations' });\n this.route('flux-commercial-designation', { path: '/settings/flux-commercial-designations/:id' });\n this.route('flux-commercial-designation.new', {\n path: '/settings/flux-commercial-designations/new',\n });\n\n // Testing\n this.route('destructive-testings', { path: '/settings/destructive-testings' });\n this.route('destructive-testing', { path: '/settings/destructive-testings/:id' });\n this.route('destructive-testing.new', { path: '/settings/destructive-testings/new' });\n\n this.route('non-destructive-testings', { path: '/settings/non-destructive-testings' });\n this.route('non-destructive-testing', { path: '/settings/non-destructive-testings/:id' });\n this.route('non-destructive-testing.new', { path: '/settings/non-destructive-testings/new' });\n\n this.route('test-stage-names', { path: '/settings/test-stage-names' });\n this.route('test-stage-name', { path: '/settings/test-stage-names/:id' });\n this.route('test-stage-name.new', { path: '/settings/test-stage-names/new' });\n\n this.route('test-locations', { path: '/settings/test-locations' });\n this.route('test-location', { path: '/settings/test-locations/:id' });\n this.route('test-location.new', { path: '/settings/test-locations/new' });\n\n // Pieces\n this.route('piping-pieces', { path: '/settings/piping-pieces' });\n this.route('piping-piece', { path: '/settings/piping-pieces/:id' });\n this.route('piping-piece.new', { path: '/settings/piping-pieces/new' });\n\n this.route('plate-pieces', { path: '/settings/plate-pieces' });\n this.route('plate-piece', { path: '/settings/plate-pieces/:id' });\n this.route('plate-piece.new', { path: '/settings/plate-pieces/new' });\n\n // Staff\n this.route('staffs', { path: '/settings/staff' });\n this.route('staff', { path: '/settings/staff/:id' });\n\n this.route('staff-positions', { path: '/settings/staff-positions' });\n this.route('staff-position', { path: '/settings/staff-positions/:id' });\n this.route('staff-position.new', { path: '/settings/staff-positions/new' });\n\n // Welding Elements\n this.route('welding-processes', { path: '/settings/welding-processes' });\n this.route('welding-process', { path: '/settings/welding-processes/:id' });\n this.route('welding-process.new', { path: '/settings/welding-processes/new' });\n\n this.route('welding-positions', { path: '/settings/welding-positions' });\n this.route('welding-position', { path: '/settings/welding-positions/:id' });\n this.route('welding-position.new', { path: '/settings/welding-positions/new' });\n\n this.route('welding-details', { path: '/settings/welding-details' });\n this.route('welding-detail', { path: '/settings/welding-details/:id' });\n this.route('welding-detail.new', { path: '/settings/welding-details/new' });\n\n this.route('weld-types', { path: '/settings/weld-types' });\n this.route('weld-type', { path: '/settings/weld-types/:id' });\n this.route('weld-type.new', { path: '/settings/weld-types/new' });\n\n this.route('electrode-types', { path: '/settings/electrode-types' });\n this.route('electrode-type', { path: '/settings/electrode-types/:id' });\n this.route('electrode-type.new', { path: '/settings/electrode-types/new' });\n\n this.route('type-current-polarities', { path: '/settings/type-current-polarities' });\n this.route('type-current-polarity', { path: '/settings/type-current-polarities/:id' });\n this.route('type-current-polarity.new', { path: '/settings/type-current-polarities/new' });\n\n this.route('arc-transfer-modes', { path: '/settings/arc-transfer-modes' });\n this.route('arc-transfer-mode', { path: '/settings/arc-transfer-modes/:id' });\n this.route('arc-transfer-mode.new', { path: '/settings/arc-transfer-modes/new' });\n\n // Methods\n this.route('preparation-methods', { path: '/settings/preparation-methods' });\n this.route('preparation-method', { path: '/settings/preparation-methods/:id' });\n this.route('preparation-method.new', { path: '/settings/preparation-methods/new' });\n\n this.route('post-weld-treatment-methods', { path: '/settings/post-weld-treatment-methods' });\n this.route('post-weld-treatment-method', { path: '/settings/post-weld-treatment-methods/:id' });\n this.route('post-weld-treatment-method.new', {\n path: '/settings/post-weld-treatment-methods/new',\n });\n\n // Schematics\n this.route('groove-designs');\n this.route('groove-design', { path: '/groove-designs/:id' });\n this.route('groove-design.new', { path: '/groove-designs/new' });\n\n this.route('weld-layer-configurations');\n this.route('weld-layer-configuration', { path: '/weld-layer-configurations/:id' });\n this.route('weld-layer-configuration.new', { path: '/weld-layer-configurations/new' });\n\n // Welding Book\n this.route('welding-book-statuses', { path: '/settings/welding-book-status' });\n this.route('welding-book-status', { path: '/settings/welding-book-status/:id' });\n this.route('welding-book-status.new', { path: '/settings/welding-book-status/new' });\n\n // Standards\n this.route('pqr-standards', { path: '/settings/pqr-standards' });\n this.route('pqr-standard', { path: '/settings/pqr-standards/:id' });\n this.route('pqr-standard.new', { path: '/settings/pqr-standards/new' });\n\n // PQR Learned Mappings\n this.route('pqr-learned-mappings', { path: '/settings/pqr-learned-mappings' });\n this.route('pqr-learned-mapping', { path: '/settings/pqr-learned-mappings/:id' });\n this.route('pqr-learned-mapping.new', { path: '/settings/pqr-learned-mappings/new' });\n\n // WPQ Learned Mappings\n this.route('wpq-learned-mappings', { path: '/settings/wpq-learned-mappings' });\n this.route('wpq-learned-mapping', { path: '/settings/wpq-learned-mappings/:id' });\n this.route('wpq-learned-mapping.new', { path: '/settings/wpq-learned-mappings/new' });\n\n this.route('construction-standards', { path: '/settings/construction-standards' });\n this.route('construction-standard', { path: '/settings/construction-standards/:id' });\n this.route('construction-standard.new', { path: '/settings/construction-standards/new' });\n\n this.route('welder-standards', { path: '/settings/welder-standards' });\n this.route('welder-standard', { path: '/settings/welder-standards/:id' });\n this.route('welder-standard.new', { path: '/settings/welder-standards/new' });\n\n this.route('certification-special-requirements', {\n path: '/settings/certification-special-requirements',\n });\n this.route('certification-special-requirement', {\n path: '/settings/certification-special-requirements/:id',\n });\n this.route('certification-special-requirement.new', {\n path: '/settings/certification-special-requirements/new',\n });\n\n this.route('miscellaneous-certificate-types', {\n path: '/settings/miscellaneous-certificate-types',\n });\n this.route('miscellaneous-certificate-type', {\n path: '/settings/miscellaneous-certificate-types/:id',\n });\n this.route('miscellaneous-certificate-type.new', {\n path: '/settings/miscellaneous-certificate-types/new',\n });\n\n //\n // End of Settings\n //\n\n this.route('pqrs');\n this.route('pqrs-archived');\n this.route('pqr', { path: '/pqrs/:id' });\n this.route('pqr.new', { path: '/pqrs/new' });\n this.route('pqr-view', { path: 'pqrs/view/:id' });\n\n this.route('welder-certificates');\n this.route('digitalize-welder-certificate');\n\n this.route('welder-certificate', { path: '/welder-certificates/:id' });\n this.route('welder-certificate.new', { path: '/welder-certificates/new' });\n this.route('welder-certificate-view', { path: 'welder-certificates/view/:id' });\n\n this.route('welder-certificates/internal/today');\n this.route('welder-certificates/internal/30days');\n this.route('welder-certificates/internal/expired');\n this.route('welder-certificates/external/today');\n this.route('welder-certificates/external/30days');\n this.route('welder-certificates/external/expired');\n this.route('welder-certificates/archived');\n\n this.route('miscellaneous-certificates');\n this.route('miscellaneous-certificate', { path: '/miscellaneous-certificates/:id' });\n this.route('miscellaneous-certificate-duplicate', {\n path: '/miscellaneous-certificates/:id/duplicate',\n });\n this.route('miscellaneous-certificate.new', { path: '/miscellaneous-certificates/new' });\n\n this.route('miscellaneous-certificates/30days');\n this.route('miscellaneous-certificates/today');\n this.route('miscellaneous-certificates/expired');\n this.route('miscellaneous-certificates/archived');\n\n this.route('welding-procedure-specifications');\n this.route('welding-procedure-specification', { path: '/welding-procedure-specifications/:id' });\n this.route('welding-procedure-specification.new', {\n path: '/welding-procedure-specifications/new',\n });\n this.route('welding-procedure-specification-view', {\n path: '/welding-procedure-specifications/view/:id',\n });\n this.route('welding-procedure-specification-view-pass', {\n path: '/welding-procedure-specifications/view/:id/passes/:pass_id',\n });\n this.route('welding-procedure-specification.new-multiple', {\n path: '/welding-procedure-specifications/new-multiple',\n });\n this.route('welding-procedure-specification.new-from-pqr', {\n path: '/welding-procedure-specifications/new-from-pqr',\n });\n this.route('welding-procedure-specifications-archived');\n this.route('welding-procedure-specification-pwps-to-pqr', {\n path: '/welding-procedure-specifications/pqr/:id',\n });\n this.route('welding-procedure-specification-pwps-to-certificate', {\n path: '/welding-procedure-specifications/certificate/:id',\n });\n this.route('welding-procedure-specification-pwps-to-prequalified', {\n path: '/welding-procedure-specifications/pwps-to-prequalified/:id',\n });\n\n this.route('welding-procedure-specification-pwps-to-standard-wps', {\n path: '/welding-procedure-specifications/pwps-to-standard-wps/:id',\n });\n\n this.route('welding-books');\n this.route('welding-book', { path: '/welding-books/:id' });\n this.route('welding-book.new', { path: '/welding-books/new' });\n\n this.route('welding-maps');\n this.route('welding-map', { path: '/welding-maps/:id' }, function () {\n this.route('pqrMap');\n this.route('certificateMap');\n this.route('wpsMap');\n });\n this.route('welding-map.new', { path: '/welding-maps/new' });\n this.route('welding-map.pqr-map');\n\n this.route('user-settings');\n this.route('action-logs');\n this.route('logout');\n this.route('account-admin');\n // Staff-only console for /api/admin/*. Deliberately absent from every menu: reach it by URL.\n this.route('admin-tools', { path: '/admin' });\n\n // Libraries\n this.route('general-drawings');\n this.route('general-drawing.new', { path: '/general-drawings/new' });\n this.route('general-drawing', { path: '/general-drawings/:id' });\n\n this.route('component-drawings');\n this.route('component-drawing.new', { path: '/component-drawings/new' });\n this.route('component-drawing', { path: '/component-drawings/:id' });\n\n this.route('test-inspection-classes');\n this.route('test-inspection-class.new', { path: '/test-inspection-classes/new' });\n this.route('test-inspection-class', { path: '/test-inspection-classes/:id' });\n\n this.route('welding-procedure-specifications-preliminary');\n this.route('verify-account', { path: 'verify-account/:token' });\n this.route('setup-account', { path: 'setup-account/:token' });\n this.route('help-center');\n this.route('ieis');\n this.route('ieis.new', { path: '/ieis/new' });\n this.route('ieis-edit', { path: '/ieis/:id' });\n this.route('ieis-archived');\n this.route('weld-sketch-design');\n this.route('weld-sketches');\n this.route('digitalize-pqr');\n this.route('welding-books-archived');\n this.route('error-not-allowed-site');\n this.route('not-found-resource');\n\n //\n // Redirects to Assembly (features that moved from Notes to Assembly)\n //\n this.route('base-material-certificates');\n this.route('base-material-certificate', { path: '/base-material-certificates/:id' });\n this.route('base-material-certificate.new', { path: '/base-material-certificates/new' });\n\n this.route('filler-material-certificates');\n this.route('filler-material-certificate', { path: '/filler-material-certificates/:id' });\n this.route('filler-material-certificate.new', { path: '/filler-material-certificates/new' });\n\n this.route('ndt-report-certificates');\n this.route('ndt-report-certificate', { path: '/ndt-report-certificates/:id' });\n this.route('ndt-report-certificate.new', { path: '/ndt-report-certificates/new' });\n\n this.route('pwht-report-certificates');\n this.route('pwht-report-certificate', { path: '/pwht-report-certificates/:id' });\n this.route('pwht-report-certificate.new', { path: '/pwht-report-certificates/new' });\n\n this.route('project-documents');\n this.route('project-document', { path: '/project-documents/:id' });\n this.route('project-document.new', { path: '/project-documents/new' });\n\n this.route('projects');\n this.route('project', { path: '/projects/:id' });\n this.route('project.new', { path: '/projects/new' });\n this.route('project-subpath', { path: '/projects/:id/*path' });\n\n // Catch-all for invalid URLs. Keep this as the very last route.\n this.route('bad-url', { path: '/*path' });\n});\n\nexport default WeldnoteRouter;\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { isEmpty } from '@ember/utils';\nimport { assert, warn } from '@ember/debug';\nimport { get } from '@ember/object';\n\nexport default class EditRoute extends Route {\n @service\n userSession;\n\n @service session;\n\n @service\n store;\n\n @service\n router;\n\n /* Name of the model type used in this edit route, e.g. 'welding-process' */\n modelName = '';\n\n /* Path to the list route of the model type used in this route, e.g. 'weld-types' */\n listRoute = '';\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (this.userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n model({ id }) {\n return this.store.findRecord(this.modelName, id);\n }\n\n init() {\n super.init(...arguments);\n assert('Route must have a modelName declared', !isEmpty(this.modelName));\n warn(\n `Route has a 'listRoute' field, you should convert it to base-edit-glimmer and remove this field (if it is already using base-edit-glimmer, you can safely remove this field). Instructions for the migration: https://bitbucket.org/weldnote/weldnote-wiki/wiki/Upgrade%20a%20base-edit%20component%20to%20be%20a%20glimmer%20component`,\n isEmpty(this.listRoute),\n {\n id: 'ember-debug.base-edit-without-list-route',\n }\n );\n }\n\n setupController(controller, model) {\n super.setupController(controller, model);\n controller.set('modelName', model.metadata.modelName);\n controller.set('listRoute', this.listRoute);\n }\n}\n","import { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\n/**\n * @public\n * The default route for a list view. Only prevents unauthorized access\n */\nexport default class ListRoute extends Route {\n @service\n userSession;\n\n @service session;\n\n @service\n router;\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (this.userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { set, get } from '@ember/object';\n\nexport default class NewRoute extends Route {\n @service\n userSession;\n\n @service session;\n\n @service\n store;\n\n @service\n router;\n\n modelName = '';\n\n init() {\n super.init(...arguments);\n assert('Route must have a model name', !isEmpty(get(this, 'modelName')));\n }\n\n beforeModel(transition) {}\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (this.userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.store.createRecord(get(this, 'modelName'));\n }\n\n setupController(controller, model) {\n super.setupController(controller, model);\n set(this, 'currentModel', model);\n set(controller, 'modelName', get(this, 'modelName'));\n }\n\n /**\n * @public\n * When we're leaving the route with an unsaved instance, destroy the instance.\n */\n deactivate() {\n super.deactivate(...arguments);\n let model = this.currentModel;\n if (model && model.isNew && !model.isSaving && !model.isDeleted) {\n // Here was a store.unloadRecord() but Ember 4.4 says \n // that store was destroyed when it reaches here... so :(\n set(this, 'currentModel', null);\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport Transition from '@ember/routing/transition';\nimport ENV from 'weldnote/config/environment';\n\n/**\n * Base route that redirects to an equivalent page in WeldCloud Assembly.\n *\n * Subclasses set `assemblyPath` to the target path (e.g. '/assembly/base-material-heat-nos').\n * If the incoming URL contains an `:id` segment, it is appended automatically.\n */\nexport default class RedirectToAssemblyRoute extends Route {\n assemblyPath = '';\n\n beforeModel(transition: Transition) {\n const id = transition.to?.params?.['id'];\n const path = id ? `${this.assemblyPath}/${id}` : this.assemblyPath;\n window.location.replace(`${ENV.esabCloudLink}${path}`);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { get } from '@ember/object';\n\nexport default class AccountAdminRoute extends Route {\n @service\n session;\n\n @service\n userSession;\n\n @service\n router;\n\n @service('weldnote-data')\n data;\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n let session = this.userSession;\n if (!get(session, 'isAccountAdmin')) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.data.getAccounts();\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\n@classic\nexport default class ActionLogsRoute extends Route {\n @service('weldnote-data')\n data;\n\n model(params) {\n let page = 1;\n if (params.page) {\n page = parseInt(params.page);\n if (isNaN(page) || page < 0) {\n page = 1;\n }\n }\n return this.data.getActionLogs(page);\n }\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\nimport type RouterService from '@ember/routing/router-service';\nimport type Transition from '@ember/routing/transition';\nimport type UserSessionService from 'weldnote/services/user-session';\n\n/**\n * Staff console for the backend's `/api/admin/*` endpoints, reachable only by URL (`/notes/admin`).\n * The global-admin check here is a courtesy redirect; the backend is the actual gate\n * (`GlobalAdminSecuredRequest` answers 403 to anyone but the staff account).\n */\nexport default class AdminToolsRoute extends Route {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @service declare session: any;\n @service declare userSession: UserSessionService;\n @service declare router: RouterService;\n\n beforeModel(transition: Transition) {\n if (!this.session.requireAuthentication(transition, 'login')) {\n return;\n }\n if (!this.userSession.isGlobalAdmin) {\n this.router.transitionTo('index');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { action } from '@ember/object';\nimport { UnauthorizedError } from '@ember-data/adapter/error';\nimport * as Sentry from '@sentry/browser';\nimport { didCancel } from 'ember-concurrency';\n\nconst VISITED_PAGES_PREFIX = '/notes';\n\n@classic\nexport default class ApplicationRoute extends Route {\n @service\n session;\n\n @service\n userSession;\n\n @service\n loading;\n\n @service\n ajax;\n\n @service\n intl;\n\n @service\n orgApi;\n\n @service\n router;\n\n @service\n analytics;\n\n sentErrors = [];\n\n constructor() {\n super(...arguments);\n\n let { router, analytics } = this;\n router.on('routeDidChange', () => {\n let page = `${VISITED_PAGES_PREFIX}${router.currentURL}`;\n let title = router.currentRouteName || 'unknown';\n\n analytics.trackPage({ page, title });\n });\n }\n\n async beforeModel() {\n super.beforeModel(...arguments);\n await this.session.setup();\n this.intl.setLocale('en-us');\n let { session, userSession } = this;\n if (session.isAuthenticated) {\n // Due to the fact that logout needs to go to the azure logout page and also invalidate the session\n // we might find ourselves here, but in the middle of the logout process...\n // if that's the case, we don't want to proceed and load the user\n // The conceptual correct approach is to check the router for the logout route\n // but testing reveals that probably the router is not yet activated here, so the first condition basically\n // always fails. As such, we check the url where we are and if it's the logout one.. we abort any further content\n // loading\n if (this.router.isActive('logout') || window?.location?.pathname?.includes('/logout')) {\n return;\n }\n try {\n await userSession.loadUser.perform();\n } catch (e) {\n if (!didCancel(e)) {\n // re-throw the non-cancelation error\n throw e;\n }\n }\n }\n }\n\n @action\n async error(error, transition) {\n if (\n error instanceof UnauthorizedError ||\n (error && error.message === 'Unauthenticated') ||\n (error && error.status === 401)\n ) {\n window.alert(\n `We're sorry, an unexpected error occured and your login is invalid.\\n\\nYou will have to login again.\\n\\nPlease contact support if this error persists.`\n );\n\n let tokenData = this.session.data?.authenticated;\n Sentry.withScope(function (scope) {\n scope.setTag('msal-accessToken', tokenData?.accessToken);\n scope.setTag('msal-refreshToken', tokenData?.refresh);\n scope.setTag('msal-expiresOn', tokenData?.expiresOn);\n\n Sentry.captureMessage('Received 401 from backend, user was forcefully logged out', 'info');\n });\n\n await this.session.invalidate();\n } else {\n let stringifiedError = error.toString();\n if (!this.sentErrors.includes(stringifiedError)) {\n Sentry.captureException(new Error(error));\n this.sentErrors.push(stringifiedError);\n }\n throw error;\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class ArcTransferModeRoute extends EditRoute {\n modelName = 'arc-transfer-mode';\n\n listRoute = 'arc-transfer-modes';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'arc-transfer-mode';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('arc-transfer-modes');\n }\n }\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class ArcTransferModesRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('arc-transfer-mode');\n }\n}\n","import Route from '@ember/routing/route';\n\nexport default class BadUrlRoute extends Route {}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class BaseMaterialCertificateRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/base-material-heat-nos';\n}\n","import RedirectToAssemblyRoute from '../_base/redirect-to-assembly';\n\nexport default class BaseMaterialCertificateNewRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/base-material-heat-nos';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class BaseMaterialCertificatesRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/base-material-heat-nos';\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class BaseMaterialGroupRoute extends EditRoute {\n modelName = 'base-material-group';\n\n listRoute = 'base-material-groups';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'base-material-group';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('base-material-groups');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class BaseMaterialGroupsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllBaseMaterialGroups();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class BaseMaterialRoute extends EditRoute {\n modelName = 'base-material';\n\n listRoute = 'base-materials';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n\n @service\n router;\n\n modelName = 'base-material';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'canCreateBaseMaterial')) {\n this.router.transitionTo('base-materials');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class BaseMaterialsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllBaseMaterials();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class CertificationSpecialRequirementRoute extends EditRoute {\n modelName = 'certification-special-requirement';\n\n listRoute = 'certification-special-requirements';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'certification-special-requirement';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class CertificationSpecialRequirementsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('certification-special-requirement');\n }\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class CompaniesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllCompanies();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class CompanyRoute extends EditRoute {\n modelName = 'company';\n\n listRoute = 'companies';\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\nimport { service } from '@ember/service';\n\n@classic\nexport default class ComponentDrawingRoute extends EditRoute {\n @service('weldnote-data')\n data;\n\n modelName = 'component-drawing';\n\n listRoute = 'component-drawings';\n\n model({ id }) {\n return this.data.loadAllDataComponentDrawing(id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'component-drawing';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'canCreateComponentDrawing')) {\n this.router.transitionTo('component-drawings');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { set, get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class ComponentDrawingsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return get(this, 'data').listAllComponentDrawings();\n }\n\n setupController(controller, model) {\n set(controller, 'model', model);\n set(controller, 'totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class ConstructionStandardRoute extends EditRoute {\n modelName = 'construction-standard';\n\n listRoute = 'construction-standards';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'construction-standard';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class ConstructionStandardsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('construction-standard');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class DestructiveTestingRoute extends EditRoute {\n modelName = 'destructive-testing';\n\n listRoute = 'destructive-testings';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'destructive-testing';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class DestructiveTestingsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('destructive-testing');\n }\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\n\nexport default class DigitalizePqrRoute extends Route {\n @service session;\n @service weldnoteData;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\n\nexport default class DigitalizeWelderCertificateRoute extends Route {\n @service session;\n @service weldnoteData;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class ElectrodeTypeRoute extends EditRoute {\n modelName = 'electrode-type';\n\n listRoute = 'electrode-types';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'electrode-type';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('electrode-types');\n }\n }\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class ElectrodeTypesRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('electrode-type');\n }\n}\n","import Route from '@ember/routing/route';\n\nexport default class ErrorNotAllowedSiteRoute extends Route {\n\n model(params: any) {\n return {\n documentType: params.documentType || 'Document',\n documentLabel: params.documentLabel || 'Unknown',\n siteLabel: params.siteLabel || 'Unknown Site'\n };\n }\n}\n","import Route from '@ember/routing/route';\n\nexport default class ErrorRoute extends Route {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class ExaminingBodiesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllExaminingBodies();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class ExaminingBodyRoute extends EditRoute {\n modelName = 'examining-body';\n\n listRoute = 'examining-bodies';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'examining-body';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAccountAdmin')) {\n this.router.transitionTo('examining-bodies');\n }\n }\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class FillerMaterialCertificateRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/filler-metal-lots';\n}\n","import RedirectToAssemblyRoute from '../_base/redirect-to-assembly';\n\nexport default class FillerMaterialCertificateNewRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/filler-metal-lots';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class FillerMaterialCertificatesRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/filler-metal-lots';\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class FillerMaterialCommercialDesignationRoute extends EditRoute {\n modelName = 'filler-material-commercial-designation';\n\n listRoute = 'filler-material-commercial-designations';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'filler-material-commercial-designation';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class FillerMaterialCommercialDesignationsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllFillerMaterialCommercialDesignations();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class FillerMaterialGroupRoute extends EditRoute {\n modelName = 'filler-material-group';\n\n listRoute = 'filler-material-groups';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'filler-material-group';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('filler-material-groups');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class FillerMaterialGroupsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllFillerMaterialGroups();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class FillerMaterialRoute extends EditRoute {\n modelName = 'filler-material';\n\n listRoute = 'filler-materials';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'filler-material';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'canCreateFillerMaterial')) {\n this.router.transitionTo('filler-materials');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class FillerMaterialsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllFillerMaterials();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class FitterRoute extends EditRoute {\n @service\n store;\n\n modelName = 'fitter';\n\n listRoute = 'fitters';\n\n model({ id }) {\n return this.store.findRecord('fitter', id, {\n include: 'company,fitter-report,person',\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class FittersRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllFitters();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class FluxCommercialDesignationRoute extends EditRoute {\n modelName = 'flux-commercial-designation';\n\n listRoute = 'flux-commercial-designations';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'flux-commercial-designation';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class FluxCommercialDesignationsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllFluxCommercialDesignations();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class FluxSpecificationRoute extends EditRoute {\n modelName = 'flux-specification';\n\n listRoute = 'flux-specifications';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'flux-specification';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class FluxSpecificationsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('flux-specification');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class FluxRoute extends EditRoute {\n modelName = 'flux';\n\n listRoute = 'fluxes';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'flux';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class FluxesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllFluxes();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class GasCommercialDesignationRoute extends EditRoute {\n modelName = 'gas-commercial-designation';\n\n listRoute = 'gas-commercial-designations';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'gas-commercial-designation';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class GasCommercialDesignationsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllGasCommercialDesignations();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class GasSpecificationRoute extends EditRoute {\n modelName = 'gas-specification';\n\n listRoute = 'gas-specifications';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'gas-specification';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class GasSpecificationsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('gas-specification');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class GasRoute extends EditRoute {\n modelName = 'gas';\n\n listRoute = 'gases';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'gas';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class GasesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllGases();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class GeneralDrawingRoute extends EditRoute {\n modelName = 'general-drawing';\n\n listRoute = 'general-drawings';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'general-drawing';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'canCreateGeneralDrawing')) {\n this.router.transitionTo('general-drawings');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { set, get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class GeneralDrawingsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return get(this, 'data').listAllGeneralDrawings();\n }\n\n setupController(controller, model) {\n set(controller, 'model', model);\n set(controller, 'totalCount', model.meta.records);\n }\n}\n","import { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class GrooveDesignRoute extends EditRoute {\n @service\n store;\n\n modelName = 'groove-design';\n\n listRoute = 'groove-designs';\n\n model({ id }) {\n return this.store.findRecord('groove-design', id, {\n include: 'welding-details,weld-types,rendered-image,image',\n });\n }\n}\n","import { service } from '@ember/service';\nimport NewRoute from 'weldnote/routes/_base/new';\n\nexport default class _NewRoute extends NewRoute {\n @service\n store;\n\n modelName = 'groove-design';\n\n model() {\n return this.store.createRecord('groove-design', {\n imageSituation: 'TEMPLATE',\n image: this.store.createRecord('file-upload'),\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class GrooveDesignsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllGrooveDesigns();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Route from '@ember/routing/route';\nimport { service } from '@ember/service';\n\nexport default class HelpCenterRoute extends Route {\n @service\n session;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class IeisArchivedRoute extends ListRoute {\n @service\n session;\n\n @service('weldnote-data')\n data;\n\n model(params) {\n return this.data.listAllIeis(\n {\n page: params.page,\n },\n {\n archived: 'AR',\n }\n );\n }\n}\n","import { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class IeisEditRoute extends Route {\n @service\n userSession;\n\n @service\n store;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n let { userSession: session } = this;\n if (!session.hasFeature('iies')) {\n this.router.transitionTo('index');\n }\n }\n\n model({ id }) {\n return this.store.findRecord('ieis', id, {\n include: 'wps,lineClass,referenceDrawing,componentDrawing,pdfFile',\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class IeisRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n let { userSession: session } = this;\n if (!session.hasFeature('iies')) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.data.listAllIeis();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class NewRoute extends Route {\n @service\n store;\n\n @service\n userSession;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n let { userSession: session } = this;\n if (!session.hasFeature('iies')) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.store.createRecord('ieis');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { task, timeout } from 'ember-concurrency';\n\n@classic\nexport default class IndexRoute extends Route {\n @service\n session;\n\n @service\n welderCertificateData;\n\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n fileService;\n\n @service\n store;\n\n @service\n router;\n\n async beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (this.userSession.isTrial) {\n this.router.transitionTo('help-center');\n }\n }\n\n loadPQR = task(\n {\n drop: true,\n },\n async () => {\n return await this.data.listAllPQR(\n {\n pageSize: 5,\n },\n {\n latest: true,\n }\n );\n }\n );\n\n loadCertificates = task(\n {\n drop: true,\n },\n async () => {\n return await this.data.listAllWelderCertificates(\n {\n pageSize: 5,\n },\n {\n latest: true,\n }\n );\n }\n );\n\n loadWPS = task(\n {\n drop: true,\n },\n async () => {\n return await this.data.listAllWeldingProcedureSpecifications(\n {\n pageSize: 5,\n },\n {\n latest: true,\n }\n );\n }\n );\n\n loadLatestDocuments = task(\n {\n drop: true,\n },\n async () => {\n let pqrs = { list: [] };\n if (this.userSession.isPlanQuality) {\n pqrs = await this.loadPQR.perform();\n }\n let certificates = await this.loadCertificates.perform();\n let wps = await this.loadWPS.perform();\n return {\n pqrs: pqrs.list,\n certificates: certificates.list,\n wps: wps.list,\n };\n }\n );\n\n loadActionLog = task(\n {\n drop: true,\n },\n async () => {\n await timeout(2000);\n return await this.store.query('action-log', { 'paging[limit]': 5 });\n }\n );\n\n loadInternalCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(200);\n return await this.welderCertificateData.getWelderCertificatesToInternallyValidate30Days();\n }\n );\n\n loadExternalCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(200);\n return await this.welderCertificateData.getWelderCertificatesToExternallyValidate30Days();\n }\n );\n\n loadMiscellaneousCertificates = task(\n {\n drop: true,\n },\n async () => {\n await timeout(200);\n return await this.welderCertificateData.getMiscellaneousCertificatesExpire30Days();\n }\n );\n\n loadUsageData = task(\n {\n drop: true,\n },\n async () => {\n await timeout(1500);\n return await this.data.getUsageLimits();\n }\n );\n\n model() {\n if (this.userSession.account) {\n this.loadLatestDocuments.perform();\n this.loadActionLog.perform();\n this.loadInternalCertificates.perform();\n this.loadExternalCertificates.perform();\n this.loadMiscellaneousCertificates.perform();\n this.loadUsageData.perform();\n\n return {\n actionLog: this.loadActionLog,\n internalCertificates: this.loadInternalCertificates,\n externalCertificates: this.loadExternalCertificates,\n miscellaneousCertificates: this.loadMiscellaneousCertificates,\n usageData: this.loadUsageData,\n latestDocuments: this.loadLatestDocuments,\n loaded: true,\n };\n }\n return {\n loaded: false,\n routeInstance: this,\n };\n }\n\n @action\n transitionToLoginRoute() {\n this.router.transitionTo('login');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class InspectorRoute extends EditRoute {\n modelName = 'inspector';\n\n listRoute = 'inspectors';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class InspectorsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllInspectors();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Route from '@ember/routing/route';\n\n@classic\nexport default class LoadingRoute extends Route {}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { set } from '@ember/object';\n\n@classic\nexport default class LoginRoute extends Route {\n @service\n session;\n\n @service\n router;\n\n displayLoginFallbackPage = false;\n\n model() {\n return {};\n }\n\n async beforeModel() {\n if (!this.session.isAuthenticated) {\n try {\n const authenticator = 'authenticator:indusuite-sso';\n await this.session.authenticate(authenticator);\n } catch (e) {\n // No valid SSO token found — show the login form\n this.displayLoginFallbackPage = true;\n }\n } else {\n this.router.transitionTo('/');\n }\n }\n\n setupController(controller, model) {\n super.setupController(controller, model);\n set(controller, 'displayLoginFallbackPage', this.displayLoginFallbackPage);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport ENV from 'weldnote/config/environment';\n\n@classic\nexport default class LogoutRoute extends Route {\n @service\n session;\n\n activate() {\n this.session.invalidate();\n }\n}\n","import { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class MiscellaneousCertificateDuplicateRoute extends Route {\n @service\n store;\n\n model({ id }) {\n return this.store.findRecord('miscellaneous-certificate', id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class MiscellaneousCertificateTypeRoute extends EditRoute {\n modelName = 'miscellaneous-certificate-type';\n\n listRoute = 'miscellaneous-certificate-types';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n modelName = 'miscellaneous-certificate-type';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class MiscellaneousCertificateTypesRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('miscellaneous-certificate-type');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class MiscellaneousCertificateRoute extends EditRoute {\n modelName = 'miscellaneous-certificate';\n\n listRoute = 'miscellaneous-certificates';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n modelName = 'miscellaneous-certificate';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get, set } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class MiscellaneousCertificatesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('helpdesk-widget')\n helpdesk;\n\n model() {\n return this.data.listAllMiscellaneousCertificates();\n }\n\n setupController(controller, model) {\n set(controller, 'model', model);\n set(controller, 'totalCount', model.meta.records);\n }\n\n activate() {\n this.helpdesk.setSearchItems('Miscellaneous');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class ThirtyDaysRoute extends ListRoute {\n @service\n session;\n\n @service\n welderCertificateData;\n\n model(params) {\n let options = { page: params.page };\n return this.welderCertificateData.getMiscellaneousCertificatesExpire30Days(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class ArchivedRoute extends ListRoute {\n @service\n session;\n\n @service\n welderCertificateData;\n\n model(params) {\n return this.welderCertificateData.getMiscellaneousCertificatesArchived({\n page: params.page,\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class ExpiredRoute extends ListRoute {\n @service\n session;\n\n @service\n welderCertificateData;\n\n model(params) {\n let options = { page: params.page };\n return this.welderCertificateData.getMiscellaneousCertificatesExpired(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class TodayRoute extends ListRoute {\n @service\n session;\n\n @service\n welderCertificateData;\n\n model(params) {\n let options = { page: params.page };\n return this.welderCertificateData.getMiscellaneousCertificatesExpireToday(options);\n }\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class NdtReportCertificateRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/non-destructive-tests';\n}\n","import RedirectToAssemblyRoute from '../_base/redirect-to-assembly';\n\nexport default class NdtReportCertificateNewRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/non-destructive-tests';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class NdtReportCertificatesRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/non-destructive-tests';\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class NonDestructiveTestingRoute extends EditRoute {\n modelName = 'non-destructive-testing';\n\n listRoute = 'non-destructive-testings';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'non-destructive-testing';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class NonDestructiveTestingsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.query('non-destructive-testing', {});\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import Route from '@ember/routing/route';\n\nexport default class NotFoundResource extends Route.extend({\n // anything which *must* be merged to prototype here\n}) {\n // normal class body definition here\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class PipingPieceRoute extends EditRoute {\n modelName = 'piping-piece';\n\n listRoute = 'piping-pieces';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'piping-piece';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class PipingPiecesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllPipingPieces();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class PlatePieceRoute extends EditRoute {\n modelName = 'plate-piece';\n\n listRoute = 'plate-pieces';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'plate-piece';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class PlatePiecesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllPlatePieces();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class PostWeldTreatmentMethodRoute extends EditRoute {\n modelName = 'post-weld-treatment-method';\n\n listRoute = 'post-weld-treatment-methods';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'post-weld-treatment-method';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class PostWeldTreatmentMethodsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('post-weld-treatment-method');\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class PqrLearnedMappingRoute extends EditRoute {\n modelName = 'pqr-learned-mapping';\n}\n","import NewRoute from 'weldnote/routes/_base/new';\nimport { service } from '@ember/service';\n\nexport default class PqrLearnedMappingNewRoute extends NewRoute {\n modelName = 'pqr-learned-mapping';\n\n @service\n userSession;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n if (!this.userSession.isGlobalAdmin) {\n this.router.transitionTo('index');\n }\n }\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class PqrLearnedMappingsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n if (!this.userSession.isGlobalAdmin) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.data.listAllPqrLearnedMappings();\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class PqrStandardRoute extends EditRoute {\n modelName = 'pqr-standard';\n\n listRoute = 'pqr-standards';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'pqr-standard';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('pqr-standards');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class PqrStandardsRoute extends ListRoute {\n @service\n userSession;\n\n @service\n store;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('settings');\n }\n }\n\n model() {\n return this.store.findAll('pqr-standard');\n }\n}\n","import { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class PqrViewRoute extends EditRoute {\n @service('weldnote-data')\n data;\n\n modelName = 'pqr';\n\n listRoute = 'pqrs';\n\n async model({ id }) {\n return await this.data.loadAllDataPQR(id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class PqrRoute extends EditRoute {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @service\n weldcloudNotesData;\n\n @service\n router;\n\n modelName = 'pqr';\n\n listRoute = 'pqrs';\n\n async beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n await this.weldcloudNotesData.fetchAllData.perform();\n if (!session.canCreatePQR) {\n this.router.transitionTo('pqrs');\n }\n }\n\n model({ id }) {\n return this.data.loadAllDataPQR(id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { set, get } from '@ember/object';\n\nexport default class NewRoute extends Route {\n @service\n store;\n\n @service\n userSession;\n\n @service\n router;\n\n @service session;\n\n modelName = 'pqr';\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n let { userSession } = this;\n if (!userSession.canCreatePQR) {\n this.router.transitionTo('pqrs');\n }\n if (userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.store.createRecord('pqr', {\n unitSystem: this.userSession.unitSystem,\n });\n }\n\n setupController(controller, model) {\n super.setupController(controller, model);\n set(this, 'currentModel', model);\n controller.set('modelName', get(this, 'modelName'));\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ARCHIVAL_STATE } = Constants;\n\n@classic\nexport default class PqrsArchivedRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllPQR(\n {},\n {\n archivalState: ARCHIVAL_STATE.ARCHIVED,\n }\n );\n }\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { set } from '@ember/object';\n\nexport default class PqrsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n model() {\n let sortOptions = {\n certificateNumber: 'asc',\n };\n return this.data.listAllPQR({ sort: sortOptions }, {});\n }\n\n setupController(controller, model) {\n set(controller, 'model', model.list);\n set(controller, 'totalCount', model.count);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class PreparationMethodRoute extends EditRoute {\n modelName = 'preparation-method';\n\n listRoute = 'preparation-methods';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'preparation-method';\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class PreparationMethodsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('preparation-method');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'project-client';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class ProjectDocumentRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/generic-documents';\n}\n","import RedirectToAssemblyRoute from '../_base/redirect-to-assembly';\n\nexport default class ProjectDocumentNewRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/generic-documents';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class ProjectDocumentsRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/generic-documents';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class ProjectSubpathRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/assemblies';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class ProjectRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/assemblies';\n}\n","import RedirectToAssemblyRoute from '../_base/redirect-to-assembly';\n\nexport default class ProjectNewRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/assemblies';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class ProjectsRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/assemblies';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class PwhtReportCertificateRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/pwht-reports';\n}\n","import RedirectToAssemblyRoute from '../_base/redirect-to-assembly';\n\nexport default class PwhtReportCertificateNewRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/pwht-reports';\n}\n","import RedirectToAssemblyRoute from './_base/redirect-to-assembly';\n\nexport default class PwhtReportCertificatesRoute extends RedirectToAssemblyRoute {\n assemblyPath = '/assembly/pwht-reports';\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\n\n/**\n * Main settings route that serves as the entry point for all welding configuration management.\n *\n * This route manages access to various welding-related settings including materials (base and filler),\n * gases, flux, testing methods, pieces, staff, welding processes, preparation methods, schematics,\n * welding books, and standards. The settings are organized into categories that align with welding\n * industry standards and workflows.\n *\n * Business Logic:\n * - Enforces authentication before allowing access to any settings\n * - Configures helpdesk widget context to show settings-specific help\n * - Acts as a parent route for all settings-related sub-routes\n *\n * @class SettingsRoute\n * @extends Route\n */\nexport default class SettingsRoute extends Route {\n @service('helpdesk-widget')\n helpdesk;\n\n @service session;\n\n /**\n * Lifecycle hook called when the route becomes active.\n * Configures the helpdesk widget to show context-specific help for settings.\n *\n * @method activate\n */\n activate() {\n this.helpdesk.setSearchItems('Settings');\n }\n\n /**\n * Lifecycle hook called before the route's model is loaded.\n * Ensures the user is authenticated before accessing any settings functionality.\n *\n * @method beforeModel\n * @param {Transition} transition - The transition object representing the route change\n */\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class StaffPositionRoute extends EditRoute {\n modelName = 'staff-position';\n\n listRoute = 'staff-positions';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'staff-position';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAccountAdmin')) {\n this.router.transitionTo('staff-positions');\n }\n }\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class StaffPositionsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('staff-position');\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\nimport { service } from '@ember/service';\n\nexport default class StaffRoute extends EditRoute {\n @service\n store;\n\n modelName = 'staff';\n\n listRoute = 'staffs';\n\n model({ id }) {\n return this.store.findRecord('staff', id, {\n include: 'company,position',\n });\n }\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class StaffsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('staff', { include: 'account' });\n }\n}\n","import { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class TestInspectionClassRoute extends Route {\n @service session;\n\n @service\n userSession;\n\n @service\n store;\n\n @service\n router;\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n let { userSession } = this;\n this.session.requireAuthentication(transition, 'login');\n if (userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n model({ id }) {\n return this.store.findRecord('test-inspection-class', id, {\n include: 'stages,stages.tests,stages.name,stages.tests.typeOfTest,stages.location',\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Route from '@ember/routing/route';\nimport { service } from '@ember/service';\n\nexport default class NewRoute extends Route {\n @service session;\n\n @service\n store;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model() {\n return this.store.createRecord('test-inspection-class');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class TestInspectionClassesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllTestInspectionClasses();\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class TestLocationRoute extends EditRoute {\n modelName = 'test-location';\n}\n","import NewRoute from 'weldnote/routes/_base/new';\n\nexport default class TestLocationNewRoute extends NewRoute {\n modelName = 'test-location';\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class TestLocationsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllTestLocations();\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class TestStageNameRoute extends EditRoute {\n modelName = 'test-stage-name';\n}\n","import NewRoute from 'weldnote/routes/_base/new';\n\nexport default class TestStageNameNewRoute extends NewRoute {\n modelName = 'test-stage-name';\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class TestStageNamesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllTestStageNames();\n }\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class TypeCurrentPolaritiesRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('type-current-polarity');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class TypeCurrentPolarityRoute extends EditRoute {\n modelName = 'type-current-polarity';\n\n listRoute = 'type-current-polarities';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'type-current-polarity';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('type-current-polarities');\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\n\n/**\n * Route for user-specific settings and profile management.\n *\n * This route provides access to individual user profile settings, which are separate\n * from the organization-wide welding configuration settings. It handles personal\n * preferences, user information, and account-level settings that don't affect\n * welding procedures or technical configurations.\n *\n * Business Logic:\n * - Requires user authentication before accessing profile settings\n * - Delegates actual content rendering to the UserProfile component\n *\n * @class UserSettingsRoute\n * @extends Route\n */\nexport default class UserSettingsRoute extends Route {\n @service session;\n\n /**\n * Lifecycle hook called before the route's model is loaded.\n * Ensures the user is authenticated before accessing profile settings.\n *\n * @method beforeModel\n * @param {Transition} transition - The transition object representing the route change\n */\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\nimport { service } from '@ember/service';\n\nexport default class WeldLayerConfigurationRoute extends EditRoute {\n @service\n store;\n\n modelName = 'weld-layer-configuration';\n\n listRoute = 'weld-layer-configurations';\n\n model({ id }) {\n return this.store.findRecord('weld-layer-configuration', id, {\n include: 'welding-details,weld-types,rendered-image,upload',\n });\n }\n}\n","import NewRoute from 'weldnote/routes/_base/new';\nimport { service } from '@ember/service';\n\nexport default class _NewRoute extends NewRoute {\n @service\n store;\n\n modelName = 'weld-layer-configuration';\n\n model() {\n return this.store.createRecord('weld-layer-configuration', {\n imageSituation: 'TEMPLATE',\n upload: this.store.createRecord('file-upload'),\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldLayerConfigurationsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllWeldLayerConfigurations();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { action } from '@ember/object';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class WeldSketchDesignRoute extends Route {\n @service\n intl;\n\n @service session;\n\n setupController(controller, model) {\n super.setupController(controller, model);\n controller.set('finishedDrawing', true);\n }\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n @action\n willTransition(transition) {\n if (\n !this.controller.finishedDrawing &&\n !confirm(this.intl.t('routes.weld-sketch-design.messages.abort-progress'))\n ) {\n transition.abort();\n } else {\n // Bubble the `willTransition` action so that\n // parent routes can decide whether or not to abort.\n return true;\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { task } from 'ember-concurrency';\n\n@classic\nexport default class WeldSketchesRoute extends Route {\n @service('weldnote-data')\n data;\n\n @service session;\n\n searchGrooveDesign = task(async () => {\n return await this.data.listAllGrooveDesigns();\n });\n\n searchLatestSketches = task(\n {\n drop: true,\n },\n async () => {\n let grooves = await this.data.listAllGrooveDesigns({}, { latest: 5, system: false });\n let weldLayers = await this.data.listAllWeldLayerConfigurations(\n {},\n { latest: 5, system: false }\n );\n return {\n grooves,\n weldLayers,\n };\n }\n );\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model() {\n let { controller } = this;\n if (controller) {\n this.controller.search.perform();\n this.searchLatestSketches.perform();\n } else {\n this.searchGrooveDesign.perform();\n this.searchLatestSketches.perform();\n return {\n grooveDesigns: this.searchGrooveDesign,\n latestSketches: this.searchLatestSketches,\n };\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WeldTypeRoute extends EditRoute {\n modelName = 'weld-type';\n\n listRoute = 'weld-types';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'weld-type';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('weld-types');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldTypesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllWeldTypes();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WelderCertificateViewRoute extends EditRoute {\n @service('weldnote-data')\n data;\n\n modelName = 'welder-certificate';\n\n listRoute = 'welder-certificates';\n\n model({ id }) {\n return this.data.loadAllDataWPQ(id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WelderCertificateRoute extends EditRoute {\n @service('weldnote-data')\n data;\n\n @service\n weldcloudNotesData;\n\n modelName = 'welder-certificate';\n\n listRoute = 'welder-certificates';\n\n async beforeModel() {\n super.beforeModel(...arguments);\n await this.weldcloudNotesData.fetchAllData.perform();\n }\n\n model({ id }) {\n return this.data.loadAllDataWPQ(id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { set, get } from '@ember/object';\nimport constants from 'weldnote/utils/constants';\n\nconst { CERTIFICATE_TYPE } = constants;\n\nexport default class NewRoute extends Route {\n @service\n store;\n\n @service\n userSession;\n\n @service\n router;\n\n @service session;\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n let { userSession } = this;\n if (!userSession.canCreateCertificate) {\n this.router.transitionTo('welder-certificates');\n }\n if (userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n model({ welderType }) {\n let finalWelderType = CERTIFICATE_TYPE.WELDER;\n if (welderType && 'operator' === welderType.toLowerCase()) {\n finalWelderType = CERTIFICATE_TYPE.OPERATOR;\n }\n return this.store.createRecord('welder-certificate', {\n certificateType: finalWelderType,\n unitSystem: this.userSession.unitSystem,\n automaticRenewal: true,\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { set } from '@ember/object';\n\n@classic\nexport default class WelderCertificatesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('helpdesk-widget')\n helpdesk;\n\n @service\n weldcloudNotesData;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n model() {\n return this.data.listAllWelderCertificates({}, {});\n }\n\n setupController(controller, model) {\n controller.set('model', model.list);\n controller.set('totalCount', model.count);\n }\n\n activate() {\n this.helpdesk.setSearchItems('WPQ');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class ArchivedRoute extends ListRoute {\n @service\n welderCertificateData;\n\n model(params) {\n return this.welderCertificateData.getWelderCertificatesArchived({\n page: params.page,\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class ThirtyDaysRoute extends ListRoute {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n model({ page }) {\n let options = { page };\n let { userSession } = this;\n let { subscribedCompanyIds } = userSession;\n if (!isEmpty(subscribedCompanyIds)) {\n options.company = subscribedCompanyIds;\n }\n return this.welderCertificateData.getWelderCertificatesToExternallyValidate30Days(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class ExpiredRoute extends ListRoute {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n model({ page }) {\n let options = { page };\n let { userSession } = this;\n let { subscribedCompanyIds } = userSession;\n if (!isEmpty(subscribedCompanyIds)) {\n options.company = subscribedCompanyIds;\n }\n return this.welderCertificateData.getWelderCertificatesToExternallyValidateExpired(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class TodayRoute extends ListRoute {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n model({ page }) {\n let options = { page };\n let { userSession } = this;\n let { subscribedCompanyIds } = userSession;\n if (!isEmpty(subscribedCompanyIds)) {\n options.company = subscribedCompanyIds;\n }\n return this.welderCertificateData.getWelderCertificatesToExternallyValidateToday(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class ThirtyDaysRoute extends ListRoute {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n model({ page }) {\n let options = { page };\n let { userSession } = this;\n let { subscribedCompanyIds } = userSession;\n if (!isEmpty(subscribedCompanyIds)) {\n options.company = subscribedCompanyIds;\n }\n return this.welderCertificateData.getWelderCertificatesToInternallyValidate30Days(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class ExpiredRoute extends ListRoute {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n model({ page }) {\n let options = { page };\n let { userSession } = this;\n let { subscribedCompanyIds } = userSession;\n if (!isEmpty(subscribedCompanyIds)) {\n options.company = subscribedCompanyIds;\n }\n return this.welderCertificateData.getWelderCertificatesToInternallyValidateExpired(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class TodayRoute extends ListRoute {\n @service\n session;\n\n @service\n userSession;\n\n @service\n welderCertificateData;\n\n model({ page }) {\n let options = { page };\n let { userSession } = this;\n let { subscribedCompanyIds } = userSession;\n if (!isEmpty(subscribedCompanyIds)) {\n options.company = subscribedCompanyIds;\n }\n return this.welderCertificateData.getWelderCertificatesToInternallyValidateToday(options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WelderStandardRoute extends EditRoute {\n modelName = 'welder-standard';\n\n listRoute = 'welder-standards';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'welder-standard';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('welder-standards');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WelderStandardsRoute extends ListRoute {\n @service\n userSession;\n\n @service\n store;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('settings');\n }\n }\n\n model() {\n return this.store.findAll('welder-standard');\n }\n}\n","import { service } from '@ember/service';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class WelderRoute extends EditRoute {\n @service\n store;\n\n modelName = 'welder';\n\n model({ id }) {\n return this.store.findRecord('welder', id, {\n include: 'company,welder-report',\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get, set } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\n\nexport default class WeldersArchivedRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model(params) {\n return this.data.listAllWelders(\n {\n page: params.page,\n },\n {\n archived: 'AR',\n personType: 'ALL',\n }\n );\n }\n\n setupController(controller, model) {\n set(controller, 'welders', model);\n set(controller, 'welderCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldersRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('helpdesk-widget')\n helpdesk;\n\n model() {\n return this.data.listAllWelders();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n\n activate() {\n this.helpdesk.setSearchItems('Welders');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WeldingBookStatusRoute extends EditRoute {\n modelName = 'welding-book-status';\n\n listRoute = 'welding-book-statuses';\n}\n","import classic from 'ember-classic-decorator';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n modelName = 'welding-book-status';\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class WeldingBookStatusesRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('welding-book-status');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { set, get } from '@ember/object';\nimport EditRoute from 'weldnote/routes/_base/edit';\nimport WeldingBook from 'weldnote/utils/welding-book-rules';\n\nconst { WELDING_BOOK } = WeldingBook;\n\n@classic\nexport default class WeldingBookRoute extends EditRoute {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n modelName = 'welding-book';\n\n listRoute = 'welding-books';\n\n model({ id }) {\n return this.data.loadAllDataWeldingBook(id);\n }\n\n afterModel(weldingBook) {\n let staff = get(this, 'userSession.account.staff');\n if (!isEmpty(staff) && !isEmpty(get(staff, 'id')) && get(weldingBook, 'isNew')) {\n set(weldingBook, WELDING_BOOK.WRITTEN_BY, staff);\n set(weldingBook, WELDING_BOOK.WRITTEN_BY_DATE, new Date());\n }\n }\n}\n","import { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { set, get } from '@ember/object';\nimport InstanceTrackerService from 'weldnote/services/instance-tracker';\nimport DS from 'ember-data';\nimport UserSessionService from 'weldnote/services/user-session';\nimport RouterService from '@ember/routing/router-service';\nimport Transition from '@ember/routing/transition';\nimport { tracked } from '@glimmer/tracking';\nimport NewController from 'weldnote/controllers/_base/new';\n\nexport default class NewRoute extends Route {\n @service('instanceTracker')\n declare tracker: InstanceTrackerService;\n\n @service\n declare store: DS.Store\n\n @service\n declare userSession: UserSessionService;\n\n @service\n declare router: RouterService;\n\n @service session: any;\n\n modelName = 'welding-book';\n\n @tracked\n currentModel: DS.Model | null = null;\n\n beforeModel(transition: Transition) {\n super.beforeModel(transition);\n this.session.requireAuthentication(transition, 'login');\n if (!this.userSession.canCreateWeldingBook) {\n this.router.transitionTo('welding-books');\n }\n }\n\n model() {\n return this.store.createRecord('welding-book', {\n unitSystem: this.userSession.unitSystem\n });\n }\n\n setupController(controller: NewController, model: DS.Model, transition: Transition) {\n super.setupController(controller, model, transition);\n this.currentModel = model;\n controller.modelName = this.modelName;\n }\n\n /**\n * @public\n * When we're leaving the route with an unsaved instance, destroy the instance.\n */\n deactivate(transition: Transition) {\n super.deactivate(transition);\n let model = this.currentModel;\n \n if (model && get(model, 'isNew') && !model.isSaving) {\n this.store.unloadRecord(model);\n set(this, 'currentModel', null);\n }\n }\n}\n","import Route from '@ember/routing/route';\nimport { service } from '@ember/service';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ARCHIVAL_STATE } = Constants;\n\nexport default class WeldingBooksArchivedRoute extends Route {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllWeldingBooks(\n {},\n {\n archivalState: ARCHIVAL_STATE.ARCHIVED,\n }\n );\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldingBooksRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('helpdesk-widget')\n helpdesk;\n\n model() {\n return this.data.listAllWeldingBooks();\n }\n\n setupController(controller, model) {\n controller.set('model', model.list);\n controller.set('totalCount', model.count);\n }\n\n activate() {\n this.helpdesk.setSearchItems('Welding Books');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WeldingDetailRoute extends EditRoute {\n modelName = 'welding-detail';\n\n listRoute = 'welding-details';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'welding-detail';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('welding-details');\n }\n }\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class WeldingDetailsRoute extends ListRoute {\n @service\n store;\n\n model() {\n return this.store.findAll('welding-detail');\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\nimport { service } from '@ember/service';\n\nexport default class WeldingMapRoute extends EditRoute {\n @service\n store;\n\n modelName = 'welding-map';\n\n listRoute = 'welding-maps';\n\n model({ id }) {\n return this.store.findRecord('welding-map', id, {\n include:\n 'piping-pieces,plate-pieces,company,pqr-standard,pqr-examining-body,pqr-weld-type,pqr-welding-process-root,pqr-welding-process-fill,pqr-welding-details,pqr-base-material1-group,pqr-base-material2-group,pqr-filler-material-root,pqr-filler-material-fill,pqr-filler-material-group-root,pqr-filler-material-group-fill,certificate-standard,certificate-examining-body,certificate-weld-type,certificate-welding-process-root,certificate-welding-process-fill,certificate-welding-details,certificate-base-material1-group,certificate-base-material2-group,certificate-filler-material-group-root,certificate-filler-material-group-fill,certificate-filler-material-group-cap,certificate-welding-position-root,certificate-welding-position-fill,certificate-welders,wps-standard,wps-weld-type,wps-welding-process-root,wps-welding-process-fill,wps-welding-details,wps-base-material1-group,wps-base-material2-group,wps-filler-material-root,wps-filler-material-fill,wps-filler-material-group-root,wps-filler-material-group-fill,wps-welding-procedure-specifications,pqr-welding-process-cap,pqr-filler-material-cap,certificate-welding-process-cap,certificate-welding-position-cap,wps-welding-process-cap,wps-filler-material-cap,pqr-special-requirements,wps-special-requirements,certificate-special-requirements,pqr-welding-position-root,pqr-welding-position-fill,pqr-welding-position-cap',\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Route from '@ember/routing/route';\n\n@classic\nexport default class CertificateMapRoute extends Route {\n model() {\n return this.modelFor('welding-map');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { set } from '@ember/object';\n\nexport default class NewRoute extends Route {\n @service('instanceTracker')\n tracker;\n\n @service\n store;\n\n @service session;\n\n modelName = 'welding-map';\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model() {\n if (this.get('tracker.hasWeldingMap')) {\n return this.get('tracker.currentWeldingMap');\n }\n return this.tracker.getWeldingMap();\n }\n\n setupController(controller, model) {\n super.setupController(controller, model);\n set(this, 'currentModel', model);\n controller.set('modelName', this.modelName);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Route from '@ember/routing/route';\n\n@classic\nexport default class PqrMapRoute extends Route {\n model() {\n return this.modelFor('welding-map');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Route from '@ember/routing/route';\n\n@classic\nexport default class WpsMapRoute extends Route {\n model() {\n return this.modelFor('welding-map');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldingMapsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('helpdesk-widget')\n helpdesk;\n\n model() {\n return this.data.listAllQMatrix();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n\n activate() {\n this.helpdesk.setSearchItems('QMatrix');\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WeldingPositionRoute extends EditRoute {\n modelName = 'welding-position';\n\n listRoute = 'welding-positions';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'welding-position';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('welding-positions');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldingPositionsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllWeldingPositions();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class WeldingProcedureSpecificationPwpsToCertificateRoute extends Route {\n @service('weldnote-data')\n data;\n\n @service session;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model({ id }) {\n return this.data.loadAllDataWPS(id);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { get } from '@ember/object';\n\nexport default class WeldingProcedureSpecificationPwpsToPqrRoute extends Route {\n @service('weldnote-data')\n data;\n\n @service session;\n\n @service\n router;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model({ id }) {\n return this.data.loadAllDataWPS(id);\n }\n\n afterModel(model) {\n if (!get(model, 'isPreliminary')) {\n this.router.transitionTo('welding-procedure-specifications');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { get } from '@ember/object';\n\nexport default class WeldingProcedureSpecificationPwpsToPrequalifiedRoute extends Route {\n @service('weldnote-data')\n data;\n\n @service session;\n\n @service\n router;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model({ id }) {\n return this.data.loadAllDataWPS(id);\n }\n\n afterModel(model) {\n if (!get(model, 'isPreliminary')) {\n this.router.transitionTo('welding-procedure-specifications');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\n\nexport default class WeldingProcedureSpecificationPwpsToStandardWpsRoute extends Route {\n @service('weldnote-data')\n data;\n\n @service session;\n\n @service\n router;\n\n beforeModel(transition) {\n this.session.requireAuthentication(transition, 'login');\n }\n\n model({ id }) {\n return this.data.loadAllDataWPS(id);\n }\n\n afterModel(model) {\n if (!model.isPreliminary) {\n this.router.transitionTo('welding-procedure-specifications');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { inject } from '@ember/service';\nimport { get,set } from '@ember/object';\nimport { hash } from 'rsvp';\nimport EditRoute from 'weldnote/routes/_base/edit';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\n@classic\nexport default class WeldingProcedureSpecificationViewRoute extends EditRoute {\n @inject('weldnote-data')\n data;\n\n @inject\n highlightedPassHelper;\n\n modelName = 'welding-procedure-specification';\n listRoute = 'welding-procedure-specifications';\n\n model({ id, pass_id }) {\n this.highlightedPassHelper.highlightedPassId = pass_id;\n return this.data.loadAllDataWPS(id);\n }\n\n afterModel(wps) {\n return hash({\n root: get(wps, WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR),\n fill: get(wps, WELDING_PROCEDURE_SPECIFICATION.PQR_FILL),\n cap: get(wps, WELDING_PROCEDURE_SPECIFICATION.PQR_CAP),\n secondary: get(wps, WELDING_PROCEDURE_SPECIFICATION.SECONDARY_PQRS),\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { inject } from '@ember/service';\nimport { get } from '@ember/object';\nimport { hash } from 'rsvp';\nimport EditRoute from 'weldnote/routes/_base/edit';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\n@classic\nexport default class WeldingProcedureSpecificationViewRoute extends EditRoute {\n @inject('weldnote-data')\n data;\n\n modelName = 'welding-procedure-specification';\n\n listRoute = 'welding-procedure-specifications';\n\n model({ id }) {\n return this.data.loadAllDataWPS(id);\n }\n\n afterModel(wps) {\n return hash({\n root: get(wps, WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR),\n fill: get(wps, WELDING_PROCEDURE_SPECIFICATION.PQR_FILL),\n cap: get(wps, WELDING_PROCEDURE_SPECIFICATION.PQR_CAP),\n secondary: get(wps, WELDING_PROCEDURE_SPECIFICATION.SECONDARY_PQRS),\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { hash } from 'rsvp';\nimport { get, set } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport EditRoute from 'weldnote/routes/_base/edit';\nimport Rules from 'weldnote/utils/welding-procedure-specification-rules';\nimport WpsValidation from 'weldnote/utils/validation/wps-from-pqr';\nimport AwsB21Validator from 'weldnote/src-weldnote/wps/validation/aws-b2-1';\nimport { isStandardAWSB21 } from 'weldnote/utils/standards';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = Rules;\n\n@classic\nexport default class WeldingProcedureSpecificationRoute extends EditRoute {\n @service\n intl;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @service\n weldcloudNotesData;\n\n modelName = 'welding-procedure-specification';\n\n listRoute = 'welding-procedure-specifications';\n\n async beforeModel() {\n super.beforeModel(...arguments);\n await this.weldcloudNotesData.fetchAllData.perform();\n }\n\n model({ id }) {\n return this.data.loadAllDataWPS(id);\n }\n\n afterModel(model) {\n return hash({\n pqr: get(model, WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR),\n ranges: model.validationRange(),\n }).then(({ pqr, ranges }) => {\n let validator = null;\n if (isStandardAWSB21(model.standard)) {\n validator = new AwsB21Validator(ranges, model, this.intl);\n } else {\n validator = new WpsValidation(ranges, model, this.intl);\n }\n set(model, 'validator', validator);\n if (!isEmpty(pqr)) {\n pqr.fetchAllRelationsForWPSValidation();\n }\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\n@classic\nexport default class NewFromPqrRoute extends Route {\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @service session;\n\n @service\n router;\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (this.userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n // If a pqr id is sent from the url use that\n model(params) {\n let { pqr: pqrId } = params;\n if (!isEmpty(pqrId)) {\n return this.data.loadAllDataPQR(pqrId);\n } else {\n return {};\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { get } from '@ember/object';\n\nexport default class NewMultipleRoute extends Route {\n @service\n userSession;\n\n @service session;\n\n @service\n router;\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (this.userSession.isAccountLocked) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return {\n revision: '0',\n errors: {},\n };\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport Route from '@ember/routing/route';\nimport { set, get } from '@ember/object';\n\nexport default class NewRoute extends Route {\n @service\n store;\n\n @service\n userSession;\n\n @service session;\n\n @service\n router;\n\n modelName = 'welding-procedure-specification';\n\n beforeModel(transition) {\n super.beforeModel(...arguments);\n this.session.requireAuthentication(transition, 'login');\n if (!this.userSession.canCreateWPS) {\n this.router.transitionTo('welding-procedure-specifications');\n }\n }\n\n model() {\n return this.store.createRecord('welding-procedure-specification', {\n unitSystem: this.userSession.unitSystem,\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport Constants from 'weldnote/utils/constants';\n\nconst { ARCHIVAL_STATE } = Constants;\n\n@classic\nexport default class WeldingProcedureSpecificationsArchivedRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllWeldingProcedureSpecifications(\n {},\n {\n archivalState: ARCHIVAL_STATE.ARCHIVED,\n }\n );\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { set } from '@ember/object';\n\n@classic\nexport default class WeldingProcedureSpecificationsPreliminaryRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service('helpdesk-widget')\n helpdesk;\n\n model() {\n let sortOptions = {\n wpsNumber: 'asc',\n };\n return this.data.listAllWeldingProcedureSpecifications(\n { sort: sortOptions },\n { wpsSearchType: 'pwps' }\n );\n }\n\n setupController(controller, model) {\n controller.set('model', model.list);\n controller.set('totalCount', model.count);\n }\n\n activate() {\n this.helpdesk.setSearchItems('WPS');\n }\n}\n","import { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\nimport { set } from '@ember/object';\n\nexport default class WeldingProcedureSpecificationsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service('weldcloud-notes-data')\n notesData;\n\n @service\n userSession;\n\n model() {\n let sortOptions = {\n wpsNumber: 'asc',\n };\n return this.data.listAllWeldingProcedureSpecifications({ sort: sortOptions }, {});\n }\n\n setupController(controller, model) {\n set(controller, 'model', model.list);\n set(controller, 'totalCount', model.count);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport EditRoute from 'weldnote/routes/_base/edit';\n\n@classic\nexport default class WeldingProcessRoute extends EditRoute {\n modelName = 'welding-process';\n\n listRoute = 'welding-processes';\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport { get } from '@ember/object';\nimport NewRoute from 'weldnote/routes/_base/new';\n\n@classic\nexport default class _NewRoute extends NewRoute {\n @service\n userSession;\n\n @service\n router;\n\n modelName = 'welding-process';\n\n beforeModel() {\n super.beforeModel(...arguments);\n let session = this.userSession;\n if (!get(session, 'isAdmin')) {\n this.router.transitionTo('welding-processes');\n }\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { service } from '@ember/service';\nimport ListRoute from 'weldnote/routes/_base/list';\n\n@classic\nexport default class WeldingProcessesRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n model() {\n return this.data.listAllWeldingProcesses();\n }\n\n setupController(controller, model) {\n controller.set('model', model);\n controller.set('totalCount', model.meta.records);\n }\n}\n","import EditRoute from 'weldnote/routes/_base/edit';\n\nexport default class WpqLearnedMappingRoute extends EditRoute {\n modelName = 'wpq-learned-mapping';\n}\n","import NewRoute from 'weldnote/routes/_base/new';\nimport { service } from '@ember/service';\n\nexport default class WpqLearnedMappingNewRoute extends NewRoute {\n modelName = 'wpq-learned-mapping';\n\n @service\n userSession;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n if (!this.userSession.isGlobalAdmin) {\n this.router.transitionTo('index');\n }\n }\n}\n","import ListRoute from 'weldnote/routes/_base/list';\nimport { service } from '@ember/service';\n\nexport default class WpqLearnedMappingsRoute extends ListRoute {\n @service('weldnote-data')\n data;\n\n @service\n userSession;\n\n @service\n router;\n\n beforeModel() {\n super.beforeModel(...arguments);\n if (!this.userSession.isGlobalAdmin) {\n this.router.transitionTo('index');\n }\n }\n\n model() {\n return this.data.listAllWpqLearnedMappings();\n }\n}\n","import * as Sentry from '@sentry/browser';\nimport { Ember } from '@sentry/integrations/esm/ember';\n\nimport config from './config/environment';\n\nexport function startSentry() {\n Sentry.init({\n ...config.sentry,\n integrations: [new Ember()],\n\n beforeSend(event, hint) {\n // https://simplabs.com/blog/2019/07/15/sentry-and-ember/\n let error = hint.originalException;\n\n // ignore aborted route transitions from the Ember.js router\n if (error && error.name === 'TransitionAborted') {\n return null;\n }\n\n return event;\n },\n });\n}\n","import JSONAPISerializer from '@ember-data/serializer/json-api';\n\nexport default class ApplicationSerializer extends JSONAPISerializer {}\n","import Service, { service } from '@ember/service';\nimport { AjaxServiceClass } from 'ember-ajax/services/ajax';\n\n/**\n * Normalised outcome of an admin call. The backend answers most refusals (404/409/422) with a JSON\n * body carrying a `message`, and the staff gate answers 403 with no body at all, so callers get the\n * status and body either way instead of having to unpick an AjaxError.\n */\nexport interface AdminCallResult {\n ok: boolean;\n status: number;\n body: T | null;\n message: string | null;\n}\n\nexport type OrgApiSyncCommand =\n | 'USER'\n | 'USER-EMAIL'\n | 'CLIENT'\n | 'PERSON'\n | 'COMPANY'\n | 'USER-CLIENT'\n | 'PERSON-CLIENT'\n | 'COMPANY-CLIENT'\n | 'USER-LIST'\n | 'CLIENT-LIST'\n | 'PERSON-LIST'\n | 'COMPANY-LIST';\n\nexport interface OrgApiSyncRequest {\n command: OrgApiSyncCommand;\n id?: number;\n email?: string;\n ids?: number[];\n}\n\nexport interface ClientSummary {\n id: number;\n name: string | null;\n organizationId: string | null;\n orphaned: boolean;\n upstreamDeletedOn: string | null;\n}\n\nexport interface AccountSummary {\n id: number;\n email: string | null;\n name: string | null;\n retired: boolean;\n deletedOn: string | null;\n client: ClientSummary | null;\n}\n\nexport interface PersonSummary {\n id: number;\n name: string | null;\n stamp: string | null;\n operatorId: string | null;\n remoteId: string | null;\n deleted: boolean;\n deletedOn: string | null;\n client: ClientSummary | null;\n}\n\nexport interface IdentityConflict {\n id: number;\n entityType: string | null;\n reason: string | null;\n state: string | null;\n remoteId: string | null;\n email: string | null;\n organizationId: string | null;\n clientId: number | null;\n existingAccountId: number | null;\n existingPersonId: number | null;\n matchedBy?: string | null;\n detectedOn: string | null;\n resolvedOn?: string | null;\n resolvedBy?: number | null;\n /** Present on the queue listing: the rows the conflict names, loaded for display. */\n account?: AccountSummary | null;\n client?: ClientSummary | null;\n person?: PersonSummary | null;\n}\n\nexport interface MovePreview {\n outcome: 'MOVED' | 'REFUSED_AUTHORED_DOCUMENTS' | 'UNKNOWN_ACCOUNT' | 'UNKNOWN_CLIENT';\n accountId: number | null;\n targetClientId: number | null;\n targetClientName: string | null;\n authoredDocuments: { wps: number; pqrs: number; weldingBooks: number } | null;\n rolesCleared: number;\n companiesAllowedCleared: number;\n companiesSubscribedCleared: number;\n}\n\n/** What applying a conflict would do now (`GET /admin/identity-conflicts/:id/preview`). */\nexport interface IdentityConflictPreview {\n conflictId: number;\n reason: string | null;\n resolution: string;\n wouldApply: boolean;\n move: MovePreview | null;\n welder: PersonSummary | null;\n}\n\nexport interface LedgerRow {\n id: number;\n clientId: number | null;\n remoteId: string | null;\n organizationId: string | null;\n validFrom: string | null;\n validTo: string | null;\n current: boolean;\n reason: string | null;\n matchedBy: string | null;\n}\n\nexport interface RetirementRow {\n id: number;\n retiredAccountId: number;\n successorAccountId: number | null;\n originalEmail: string | null;\n reason: string | null;\n retiredBy: number | null;\n upstream: boolean;\n retiredOn: string | null;\n}\n\nexport interface SyncTaskRow {\n id: number;\n state: string | null;\n discriminator: string | null;\n progress: number;\n startTime: string | null;\n finishTime: string | null;\n result: string | null;\n}\n\nexport interface DossierAccount extends AccountSummary {\n azureId: string | null;\n orgApiUserId: string | null;\n lastSync: string | null;\n createdOn: string | null;\n deletedBy: number | null;\n crossTenantCompanies: number;\n ledger: LedgerRow[];\n retirements: RetirementRow[];\n recentSyncTasks: SyncTaskRow[];\n}\n\nexport type DossierSeverity = 'PROBLEM' | 'WARNING' | 'INFO';\n\nexport interface DossierFlag {\n code: string;\n severity: DossierSeverity;\n accountId: number | null;\n message: string;\n}\n\nexport interface IdentityDossier {\n query: string;\n kind: 'ACCOUNT_ID' | 'EMAIL' | 'REMOTE_ID';\n truncated: boolean;\n maxAccounts: number;\n accounts: DossierAccount[];\n conflicts: IdentityConflict[];\n remote: {\n status: 'FOUND' | 'NOT_FOUND' | 'ERROR' | 'SKIPPED';\n matchedBy: string | null;\n userId: string | null;\n b2cId: string | null;\n email: string | null;\n displayName: string | null;\n ownerId: string | null;\n deleted: boolean | null;\n ownerClient: ClientSummary | null;\n error: string | null;\n };\n nextSync: {\n decision: string;\n accountId: number | null;\n matchedBy: string | null;\n organizationId: string | null;\n targetClient: ClientSummary | null;\n reason: string | null;\n } | null;\n flags: DossierFlag[];\n}\n\nexport type DriftAuditScope = 'FULL' | 'LOCAL';\n\nexport interface DriftAuditRun {\n id: number;\n state: 'RUNNING' | 'COMPLETED' | 'FAILED';\n scope: DriftAuditScope;\n trigger: 'STAFF' | 'SCHEDULED';\n startedBy: number | null;\n startedOn: string | null;\n finishedOn: string | null;\n findingCount: number | null;\n error: string | null;\n}\n\nexport interface DriftAuditLatest extends DriftAuditRun {\n counts: Record;\n previousRunId: number | null;\n previousCounts: Record | null;\n}\n\nexport interface DriftAuditSummary {\n running: DriftAuditRun | null;\n latest: Record;\n recentRuns: DriftAuditRun[];\n driftTypes: string[];\n}\n\nexport interface DriftFinding {\n id: number;\n type: string;\n entity: string;\n entityId: number | null;\n relatedIds: number[];\n detail: string | null;\n}\n\nexport interface DriftFindingsPage {\n runId: number;\n type: string | null;\n total: number;\n offset: number;\n findings: DriftFinding[];\n}\n\nexport interface IdentityDriftAccount {\n accountId: number | null;\n accountEmail: string | null;\n storedB2cId: string | null;\n retired: boolean;\n clientId: number | null;\n clientName: string | null;\n localOrganizationId: string | null;\n status: string;\n matchedBy: string | null;\n orgApiUserId: string | null;\n orgApiB2cId: string | null;\n orgApiEmail: string | null;\n orgApiOwnerId: string | null;\n sameOrganization: boolean | null;\n errorType: string | null;\n}\n\nexport interface IdentityDriftReport {\n accountCount: number;\n accounts: IdentityDriftAccount[];\n}\n\n/** Server-side cap in `IdentityDriftReportController`. */\nexport const MAX_DRIFT_REPORT_ACCOUNT_IDS = 50;\n\nconst STATUS_MESSAGES: Record = {\n 0: 'Network error: the backend could not be reached.',\n 401: 'Unauthorized: the session has no valid token. Log in again.',\n 403: 'Forbidden: this endpoint only accepts the global staff account (sysuser).',\n};\n\n/**\n * Staff-only client for the backend's `/api/admin/*` endpoints. It backs the hidden `admin-tools`\n * page and nothing else. Every method resolves (never rejects) with an {@link AdminCallResult}.\n */\nexport default class AdminApiService extends Service {\n @service declare ajax: AjaxServiceClass;\n\n cleanupZombieFiles(dryRun: boolean): Promise {\n // A real run deletes files and rows, so the backend also wants confirm=true; the page has\n // already asked the user. A dry run changes nothing and needs no confirmation.\n const confirm = dryRun ? '' : '&confirm=true';\n return this.call('POST', `/admin/cleanup-zombie-files?dryRun=${dryRun}${confirm}`);\n }\n\n syncAccount(email: string): Promise {\n return this.call('POST', '/admin/sync-account', { email });\n }\n\n orgApiSync(request: OrgApiSyncRequest): Promise {\n return this.call('POST', '/admin/sync', request);\n }\n\n retireAccount(email: string, reason: string): Promise {\n // Destructive: the backend refuses it without confirm=true; the page has already asked.\n return this.call('POST', '/admin/retire-account?confirm=true', { email, reason });\n }\n\n moveAccount(email: string, newOrganizationId: string): Promise {\n // Destructive: the backend refuses it without confirm=true; the page has already asked.\n return this.call('POST', '/admin/move-account?confirm=true', { email, newOrganizationId });\n }\n\n listIdentityConflicts(): Promise> {\n return this.call('GET', '/admin/identity-conflicts');\n }\n\n applyIdentityConflict(id: number): Promise {\n return this.call('POST', `/admin/identity-conflicts/${id}/apply?confirm=true`);\n }\n\n dismissIdentityConflict(id: number): Promise {\n // The backend refuses a dismissal without confirm=true, like an apply; the page has already\n // asked the user.\n return this.call('POST', `/admin/identity-conflicts/${id}/dismiss?confirm=true`);\n }\n\n previewIdentityConflict(id: number): Promise> {\n return this.call('GET', `/admin/identity-conflicts/${id}/preview`);\n }\n\n /** A POST so the query, usually an email, travels in the body rather than the URL. */\n identityDossier(query: string): Promise> {\n return this.call('POST', '/admin/identity-dossier', { query });\n }\n\n driftAuditSummary(): Promise> {\n return this.call('GET', '/admin/identity-drift-audit');\n }\n\n startDriftAudit(\n scope: DriftAuditScope\n ): Promise> {\n return this.call('POST', '/admin/identity-drift-audit', { scope });\n }\n\n driftAuditFindings(\n runId: number,\n type: string | null,\n offset: number,\n limit: number\n ): Promise> {\n const params = new URLSearchParams({ offset: String(offset), limit: String(limit) });\n if (type) {\n params.set('type', type);\n }\n return this.call('GET', `/admin/identity-drift-audit/${runId}/findings?${params.toString()}`);\n }\n\n identityDriftReport(accountIds: number[]): Promise> {\n return this.call('POST', '/admin/identity-drift-report', { accountIds });\n }\n\n private async call(\n method: 'GET' | 'POST',\n url: string,\n data?: object\n ): Promise> {\n const options: Record = { method, dataType: 'json' };\n if (data !== undefined) {\n options.contentType = 'application/json';\n options.data = JSON.stringify(data);\n }\n try {\n const { response: body, jqXHR } = await this.ajax.raw(url, options);\n return { ok: true, status: jqXHR.status, body, message: messageOf(body) };\n } catch (error) {\n const rawError = (error ?? {}) as {\n response?: {\n status?: number;\n payload?: unknown;\n };\n jqXHR?: {\n status?: number;\n };\n status?: number;\n payload?: unknown;\n };\n const responseError = rawError.response ?? rawError;\n const status = responseError.status ?? rawError.jqXHR?.status ?? 0;\n const payload = responseError.payload ?? rawError.payload ?? null;\n const body = payload && typeof payload === 'object' ? (payload as T) : null;\n return {\n ok: false,\n status,\n body,\n message:\n messageOf(body) ??\n STATUS_MESSAGES[status] ??\n (typeof payload === 'string' && payload\n ? payload\n : `Request failed (HTTP ${status})`),\n };\n }\n }\n}\n\nfunction messageOf(body: unknown): string | null {\n if (body && typeof body === 'object' && 'message' in body) {\n const message = (body as { message: unknown }).message;\n return typeof message === 'string' ? message : null;\n }\n return null;\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'admin-api': AdminApiService;\n }\n}\n","import { get } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport AjaxService from 'ember-ajax/services/ajax';\nimport Env from 'weldnote/config/environment';\n\nexport default class _AjaxService extends AjaxService {\n namespace = '/api';\n\n // Host can be overridden by setting notesBackendEndpoint in environment config\n get host() {\n return !isEmpty(Env.notesBackendEndpoint) ? Env.notesBackendEndpoint : undefined;\n }\n\n @service\n session;\n\n @service\n store;\n\n get headers() {\n let headers = {\n 'Client-Application': 'weldcloud-notes',\n };\n let authToken = get(this, 'session.session.authenticated.accessToken');\n if (authToken) {\n headers.Authorization = `Bearer ${authToken}`;\n }\n return headers;\n }\n\n // Builds a url given the host and protocol and appends a part given by the consumer\n buildServerUrl(url) {\n let namespace = this.store.adapterFor('application').namespace;\n let host = `${location.protocol}//${location.hostname}/${namespace}`;\n // Use notesBackendEndpoint if available (for Azure deployments)\n // Fall back to apiHost for backward compatibility\n if (!isEmpty(Env.notesBackendEndpoint)) {\n host = `${Env.notesBackendEndpoint}/${namespace}`;\n } else if (!isEmpty(Env.apiHost)) {\n host = Env.apiHost;\n }\n return `${host}/${url}`;\n }\n}\n","import Service, { service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\n\nexport default class AlertMessageService extends Service {\n @service\n declare toast: any;\n\n /**\n * Displays a success (green) message popup\n *\n * @param message - The text message to display\n * @param title - The title of the message\n * @param options - Options to pass to the underlying toast service\n */\n success(message: string, title = '', options = {}) {\n this.toast.success(htmlSafe(message), title, options);\n }\n\n /**\n * Displays an info (blue) message popup\n *\n * @param message - The text message to display\n * @param title - The title of the message\n * @param options - Options to pass to the underlying toast service\n */\n info(message: string, title = '', options = {}) {\n this.toast.info(htmlSafe(message), title, options);\n }\n\n /**\n * Displays an error (red) message popup\n *\n * @param message - The text message to display\n * @param title - The title of the message\n * @param options - Options to pass to the underlying toast service\n */\n error(message: string, title = '', options = {}) {\n this.toast.error(htmlSafe(message), title, options);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport ENV from 'weldnote/config/environment';\nimport EVENTS from 'weldnote/utils/analytics-events';\n\nconst GOOGLE_ANALYTICS = 'GoogleAnalytics';\nconst MIX_PANEL = 'Mixpanel';\n\n@classic\nexport default class AnalyticsService extends Service {\n @service\n metrics;\n\n init() {\n super.init(...arguments);\n if (ENV.environment === 'test' || ENV.environment === 'development') {\n this.metrics.set('enabled', false);\n }\n }\n\n trackPage(options) {\n let { metrics } = this;\n if (!isEmpty(metrics)) {\n // We only send pages navigation to Google Analytics\n metrics.trackPage(GOOGLE_ANALYTICS, options);\n }\n }\n\n trackEvent(name, options = {}) {\n assert('Must pass a valid event name', !isEmpty(name));\n let { metrics } = this;\n if (!isEmpty(metrics)) {\n Object.assign(options, { event: name });\n if (metrics.enabled) {\n // We only send events to Mixpanel\n metrics.trackEvent(MIX_PANEL, options);\n } else {\n console.log(`Tracking Event ${name} with options ${JSON.stringify(options)}`);\n }\n }\n }\n\n identify(id, options) {\n let { metrics } = this;\n if (!isEmpty(metrics)) {\n if (options.email) {\n metrics.set('context.$email', options.email);\n }\n if (options.name) {\n metrics.set('context.$name', options.name);\n }\n if (options.plan) {\n metrics.set('context.plan', options.plan);\n }\n if (options.typeOfPlan) {\n metrics.set('context.typeOfPlan', options.typeOfPlan);\n }\n if (options.client) {\n metrics.set('context.client', options.client);\n }\n let newOptions = {};\n Object.assign(newOptions, options, { distinctId: id });\n metrics.identify(newOptions);\n }\n }\n\n alias(options) {\n let { metrics } = this;\n if (!isEmpty(metrics)) {\n this.metrics.alias(options);\n }\n }\n\n // Specific Events\n trackSaveNew(model, options = {}) {\n let context = {\n type: model,\n new: true,\n };\n Object.assign(context, options);\n this.trackEvent(EVENTS.SAVE, context);\n }\n\n trackDelete(model, options = {}) {\n let context = {\n type: model,\n };\n Object.assign(context, options);\n this.trackEvent(EVENTS.DELETE, context);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Service from '@ember/service';\nimport ENV from 'weldnote/config/environment';\nimport $ from 'jquery';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class CrispService extends Service {\n setup() {\n if (!isEmpty(ENV.chatKey)) {\n window.$crisp = [];\n window.CRISP_WEBSITE_ID = ENV.chatKey;\n $.getScript('https://client.crisp.chat/l.js');\n }\n }\n\n hasCrisp() {\n return !!window.$crisp;\n }\n\n _callDo() {\n if (this.hasCrisp()) {\n return window.$crisp.do(...arguments);\n }\n }\n\n _callIs() {\n if (this.hasCrisp()) {\n return window.$crisp.is(...arguments);\n }\n }\n\n _callSet() {\n if (this.hasCrisp()) {\n return window.$crisp.set(...arguments);\n }\n }\n\n _callGet() {\n if (this.hasCrisp()) {\n return window.$crisp.get(...arguments);\n }\n }\n\n sendMessage(type, content) {\n this._callDo('message:send', [type, content]);\n }\n\n getIdentifier() {\n return this._callGet('session:identifier');\n }\n\n getData(key) {\n return this._callGet('session:data', key);\n }\n\n setData(key, value) {\n return this._callSet('session:data', [key, value]);\n }\n\n identifyUser(username, email) {\n if (this.hasCrisp()) {\n if (isEmpty(email)) {\n email = 'unknown@unknown.com';\n } else if (email.indexOf('@') < 0) {\n email = `${email}@unknown.com`;\n }\n if (isEmpty(username)) {\n username = 'unknown';\n }\n window.$crisp.push(['set', 'user:nickname', username]);\n window.$crisp.push(['set', 'user:email', email]);\n }\n }\n}\n","import Service, { service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { get } from '@ember/object';\n\nexport default class FileServiceService extends Service {\n @service\n ajax;\n\n @service\n store;\n\n getContent(url, params = {}) {\n return this.ajax.request(url, {\n method: 'GET',\n data: params,\n });\n }\n\n generateSignedUploadLink = task(\n {\n drop: true,\n },\n async (filename, context, filesize) => {\n return await this.ajax.post('/files/generate-signed-upload-link', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({\n filename,\n context,\n filesize,\n }),\n });\n }\n );\n\n generateSignedUploadLinkForReplace = task(\n {\n drop: true,\n },\n async (uploadId, context, filesize) => {\n return await this.ajax.post(`/files/${uploadId}/generate-signed-upload-link-replace`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({\n uploadId,\n context,\n filesize,\n }),\n });\n }\n );\n\n getFileRetrieveRequest(file, contextValue, idValue, originalFilename) {\n return this.getContent('/files/download', {\n filename: file,\n context: contextValue,\n id: idValue,\n original: originalFilename,\n });\n }\n\n getFileRetrieveRequestForUpload(upload) {\n return this.getFileRetrieveRequest(\n get(upload, 'filePath'),\n get(upload, 'context'),\n get(upload, 'id'),\n get(upload, 'originalFilename')\n );\n }\n\n getFileUploadRequest(filenameValue, contextValue, contentTypeValue, size) {\n return this.getContent('/files/upload', {\n filename: filenameValue,\n context: contextValue,\n contentType: contentTypeValue,\n size,\n });\n }\n\n getFileUploadSignupRequest(token, filenameValue, contextValue, contentTypeValue, size) {\n return this.getContent('/files/upload-signup', {\n token,\n filename: filenameValue,\n context: contextValue,\n contentType: contentTypeValue,\n size,\n });\n }\n\n getFileDownloadSignupRequest(token, file, originalFilename) {\n return this.getContent('/files/download-signup', {\n token,\n filename: file,\n original: originalFilename,\n });\n }\n\n uploadNewBase64Image = task({ drop: true }, async (imageName, base64Image, fileType) => {\n let { ajax, store } = this;\n let binaryData = this.dataURItoBlob(base64Image);\n let { url, uploadId } = await this.generateSignedUploadLink.perform(\n imageName,\n fileType,\n binaryData.size\n );\n\n await ajax.put(url, {\n dataType: 'text',\n processData: false,\n contentType: 'image/png',\n data: binaryData,\n });\n\n let upload = await store.findRecord('file-upload', uploadId);\n return upload;\n });\n\n updateExistingBase64Image = task({ drop: true }, async (fileUploadId, base64Image, fileType) => {\n let { fileService, ajax, store } = this;\n let binaryData = this.dataURItoBlob(base64Image);\n let { url } = await this.generateSignedUploadLinkForReplace.perform(\n fileUploadId,\n fileType,\n binaryData.size\n );\n\n await ajax.put(url, {\n dataType: 'text',\n processData: false,\n contentType: 'image/png',\n data: binaryData,\n });\n\n return await store.findRecord('file-upload', fileUploadId);\n });\n\n dataURItoBlob(base64Image) {\n // remove data prefixes, eg:data:image/png;base64,xxxx\n if (base64Image.includes('')) {\n base64Image = base64Image.substr(base64Image.indexOf(',') + 1);\n }\n\n let binary = atob(base64Image);\n let array = [];\n for (let i = 0; i < binary.length; i++) {\n array.push(binary.charCodeAt(i));\n }\n return new Blob([new Uint8Array(array)], {\n type: 'image/png',\n });\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { alias } from '@ember/object/computed';\nimport Service, { service } from '@ember/service';\nimport ENV from 'weldnote/config/environment';\n\nconst VIDEO_BASE = ENV.videoBaseUrl;\n\n@classic\nexport default class HelpService extends Service {\n @service\n userSession;\n\n @alias('userSession.isTrial')\n isHelpActive;\n\n pwpsVideo = `${VIDEO_BASE}/pqws.mp4`;\n\n pqrVideo = `${VIDEO_BASE}/pqr.mp4`;\n\n wpsSinglePqrVideo = `${VIDEO_BASE}/wps-from-pqr.mp4`;\n\n wpsMultiplePqrVideo = `${VIDEO_BASE}/wps.mp4`;\n\n wpqVideo = `${VIDEO_BASE}/wpq.mp4`;\n\n qmatrixSearchVideo = `${VIDEO_BASE}/qmatrix.mp4`;\n\n weldingBookVideo = `${VIDEO_BASE}/welding-book.mp4`;\n\n projectVideo = `${VIDEO_BASE}/projects.mp4`;\n\n convertVideoIdToAnalyticsEvent(videoId) {\n if (videoId === this.pqrVideo) {\n return 'video-pqr-create';\n } else if (videoId === this.wpsSinglePqrVideo) {\n return 'video-wps-from-single-pqr-create';\n } else if (videoId === this.wpsMultiplePqrVideo) {\n return 'video-wps-from-multi-pqr-create';\n } else if (videoId === this.qmatrixSearchVideo) {\n return 'video-qmatrix-search';\n } else if (videoId === this.wpqVideo) {\n return 'video-wpq-create';\n } else if (videoId === this.weldingBookVideo) {\n return 'video-welding-book-create';\n } else if (videoId === this.pwpsVideo) {\n return 'video-pwps-create';\n } else if (videoId === this.projectVideo) {\n return 'video-project-manage';\n }\n throw new Error(`Unknown Video ID ${videoId}`);\n }\n}\n","import classic from 'ember-classic-decorator';\nimport Service from '@ember/service';\n\n@classic\nexport default class HelpdeskWidgetService extends Service {\n setSearchItems(term) {\n if (window.zE) {\n zE(function () {\n zE.setHelpCenterSuggestions({ search: term });\n });\n }\n }\n}\n","\nimport Service from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class HighlightedPassHelperService extends Service {\n @tracked\n highlightedPassId = '';\n\n isHighlighted(guid) {\n return guid === this.highlightedPassId;\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { gt, notEmpty, alias } from '@ember/object/computed';\nimport Service, { service } from '@ember/service';\nimport { set, computed } from '@ember/object';\nimport EVENTS from 'weldnote/utils/analytics-events';\n\n@classic\nexport default class InstanceTrackerService extends Service {\n @service\n store;\n\n @service\n analytics;\n\n @service\n userSession;\n\n weldingMap = null;\n\n weldingBook = null;\n\n @alias('weldingMap')\n currentWeldingMap;\n\n @alias('weldingBook')\n currentWeldingBook;\n\n getWeldingMap() {\n if (this.hasWeldingMap) {\n return this.weldingMap;\n }\n let weldingMap = this.store.createRecord('welding-map', {\n unitSystem: this.userSession.unitSystem,\n });\n set(this, 'weldingMap', weldingMap);\n return weldingMap;\n }\n\n getWeldingBook() {\n if (this.hasWeldingBook) {\n return this.weldingBook;\n }\n let weldingBook = this.store.createRecord('welding-book', {\n unitSystem: this.userSession.unitSystem,\n });\n set(this, 'weldingBook', weldingBook);\n return weldingBook;\n }\n\n @notEmpty('weldingMap')\n hasWeldingMap;\n\n @notEmpty('weldingBook')\n hasWeldingBook;\n\n @gt('count', 0)\n hasUnsavedElements;\n\n @computed('hasWeldingMap', 'hasWeldingBook')\n get count() {\n let count = 0;\n if (this.hasCertificate) {\n count++;\n }\n if (this.hasWeldingMap) {\n count++;\n }\n if (this.hasWeldingBook) {\n count++;\n }\n return count;\n }\n\n savedWeldingMap() {\n set(this, 'weldingMap', null);\n }\n\n savedWeldingBook() {\n set(this, 'weldingBook', null);\n }\n\n discardAll() {\n set(this, 'weldingMap', null);\n set(this, 'weldingBook', null);\n }\n\n discardWeldingMap() {\n let { weldingMap } = this;\n this.store.unloadRecord(weldingMap);\n set(this, 'weldingMap', null);\n this.analytics.trackEvent(EVENTS.DISCARD, {\n type: 'welding-map',\n });\n }\n\n discardWeldingBook() {\n let { weldingBook } = this;\n this.store.unloadRecord(weldingBook);\n set(this, 'weldingBook', null);\n this.analytics.trackEvent(EVENTS.DISCARD, {\n type: 'weldingBook',\n });\n }\n}\n","/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\n\nexport { default } from 'ember-intl/services/intl';\n","import classic from 'ember-classic-decorator';\nimport $ from 'jquery';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n\n@classic\nexport default class LoadingService extends Service {\n @service\n intl;\n\n init() {\n super.init(...arguments);\n $.blockUI.defaults.baseZ = 10000;\n $.blockUI.defaults.overlayCSS = { backgroundColor: '#ddd', opacity: 0.4 };\n let message = this.intl.t('services.loading.message');\n $.blockUI.defaults.message = `

${message}

`;\n\n $.blockUI.defaults.css.padding = '15px';\n $.blockUI.defaults.css.border = 'none';\n $.blockUI.defaults.css.backgroundColor = '#000';\n $.blockUI.defaults.css.opacity = 0.6;\n $.blockUI.defaults.css.borderRadius = '10px';\n $.blockUI.defaults.css.color = '#fff';\n }\n\n block(message = '') {\n if (!isEmpty(message)) {\n $.blockUI({\n message: `

${message}

`,\n });\n } else {\n $.blockUI();\n }\n }\n\n unblock() {\n $.unblockUI();\n }\n\n replaceMessage(newMessage = '') {\n let uiMessage = document.querySelector('[data-id=\"block-ui-message\"]');\n // Check here is to make sure the block wasn't removed by someone else (transition for instance)\n if (uiMessage && uiMessage.innerHTML) {\n uiMessage.innerHTML = newMessage;\n }\n }\n}\n","import Media from 'ember-responsive/services/media';\nexport default Media;\n","import { computed } from '@ember/object';\nimport Service from '@ember/service';\nimport ENV from '../config/environment';\nimport { getDestinationElementIdFromConfig } from 'ember-modal-dialog/utils/config-utils';\n\nfunction computedFromConfig(prop) {\n return computed(function () {\n return ENV['ember-modal-dialog'] && ENV['ember-modal-dialog'][prop];\n });\n}\n\nexport default Service.extend({\n hasEmberTether: computedFromConfig('hasEmberTether'),\n hasLiquidWormhole: computedFromConfig('hasLiquidWormhole'),\n hasLiquidTether: computedFromConfig('hasLiquidTether'),\n destinationElementId: computed(function () {\n return getDestinationElementIdFromConfig(ENV);\n }),\n});\n","import { isEmpty } from '@ember/utils';\nimport Service, { service } from '@ember/service';\nimport ENV from 'weldnote/config/environment';\nimport fetch from 'fetch';\nimport { task, timeout } from 'ember-concurrency';\nimport { tracked } from '@glimmer/tracking';\n\nexport default class NewVersionCheckerService extends Service {\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @tracked\n currentVersion = '';\n\n @tracked\n newVersion = false;\n\n @tracked\n isRunning = true;\n\n get isNewVersion() {\n return this.newVersion;\n }\n\n get updateInterval() {\n return ENV.versionCheckInterval || 5 * 60000; // Default to 5 minutes\n }\n\n isElementInViewport(el) {\n if (el) {\n let rect = el.getBoundingClientRect();\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n }\n }\n\n /**\n * Fetch the current version hash from the appropriate source.\n * @returns {Promise} The version hash or null if request failed\n */\n async fetchVersionHash() {\n try {\n if (ENV.environment === 'development') {\n return null;\n }\n // For Azure Static Web App deployments, fetch from version.json\n const base = ENV.rootURL.replace(/\\/+$/, '');\n const response = await fetch(`${base}/version.json`, {\n cache: 'no-store', // Ensure we always get the latest version\n });\n if (!response.ok) {\n return null;\n }\n try {\n const versionInfo = await response.json();\n return versionInfo.hash;\n } catch (e) {\n console.log(e);\n return null;\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn('[new-version-checker] Failed to fetch version:', error);\n return null;\n }\n }\n\n updateVersionTask = task(\n {\n drop: true,\n },\n async () => {\n if (ENV.environment === 'test') {\n return;\n }\n while (this.isRunning) {\n const newVersion = await this.fetchVersionHash();\n if (newVersion === null) {\n await timeout(this.updateInterval);\n } else {\n if (!isEmpty(this.currentVersion) && this.currentVersion !== newVersion) {\n this.newVersion = true;\n this.currentVersion = newVersion;\n if (!this.isElementInViewport(document.getElementById('new-version-notifier'))) {\n let message = this.intl.t('components.new-version-notifier.message').toString();\n let title = this.intl.t('components.new-version-notifier.update-title').toString();\n this.alert.info(message, title, { timeOut: 15000, extendedTimeOut: 25000 });\n }\n }\n this.currentVersion = newVersion;\n await timeout(this.updateInterval);\n }\n }\n }\n );\n}\n","import Service, { service } from '@ember/service';\nimport ENV from 'weldnote/config/environment';\nimport fetch from 'fetch';\nimport { get } from '@ember/object';\n\nexport interface CreatePersonnelRequest {\n firstName: string;\n secondName: string;\n displayName: string;\n stamp: string;\n ownerId: string;\n siteIds?: string[];\n operatorId?: string;\n roles?: string[];\n activeUntil?: string | null;\n nfcId?: string;\n unitOfMeasurement?: string;\n language?: string;\n operatorUsername?: string;\n password?: string;\n}\n\nexport interface CreatePersonnelResponse {\n id: string;\n firstName: string;\n secondName: string;\n displayName: string;\n stamp: string;\n operatorId: string;\n isActive: boolean;\n roles: string[];\n ownerId: string;\n createdDate: string;\n modifiedDate: string;\n}\n\nexport interface OrgApiError {\n status: number;\n message: string;\n}\n\nexport default class OrgApiPersonnelService extends Service {\n @service\n declare session: any;\n\n get headers(): Record {\n return {\n Authorization: `Bearer ${get(this.session, 'session.authenticated.accessToken')}`,\n 'Ocp-Apim-Subscription-Key': ENV.azureSubscriptionManagementId,\n 'Content-Type': 'application/json',\n };\n }\n\n async createPersonnel(\n request: CreatePersonnelRequest\n ): Promise {\n debugger;\n const body = {\n firstName: request.firstName,\n secondName: request.secondName,\n displayName: request.displayName,\n siteIds: request.siteIds ?? [],\n operatorId: request.operatorId ?? '',\n roles: request.roles ?? ['Welder'],\n activeUntil: request.activeUntil ?? null,\n stamp: request.stamp,\n nfcId: request.nfcId ?? '',\n unitOfMeasurement: request.unitOfMeasurement ?? 'metric',\n language: request.language ?? 'en-GB',\n operatorUsername: request.operatorUsername ?? '',\n password: request.password ?? '',\n ownerId: request.ownerId,\n };\n\n const response = await fetch(`${ENV.orgApiUrl}/org/odata/personnel`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const error: OrgApiError = {\n status: response.status,\n message: await response.text(),\n };\n throw error;\n }\n\n return await response.json();\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'org-api-personnel': OrgApiPersonnelService;\n }\n}\n","import Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport * as Sentry from '@sentry/browser';\nimport { task, didCancel } from 'ember-concurrency';\nimport ENV from 'weldnote/config/environment';\n\nconst delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport default class OrgApiService extends Service {\n @service\n ajax;\n\n @service\n loading;\n\n @service\n userSession;\n\n @service('weldnote-data')\n data;\n\n @service('alert-message')\n alert;\n\n @service\n intl;\n\n @tracked\n currentTaskId = null;\n\n @tracked\n currentSiteTaskId = null;\n\n async getTaskProgress(taskId) {\n let value = await this.ajax.request(`/api/sync-task-progress/${taskId}`);\n return value;\n }\n\n async startSyncProcess() {\n let task = await this.ajax.post('/accounts/sync-account', {\n dataType: 'json',\n contentType: 'application/json',\n data: {},\n });\n return task;\n }\n\n async startSiteSyncProcess() {\n let task = await this.ajax.post('/accounts/sync-sites', {\n dataType: 'json',\n contentType: 'application/json',\n data: {},\n });\n return task;\n }\n\n async syncSites() {\n if (ENV.environment === 'test') {\n return;\n }\n if (this.currentSiteTaskId !== null) {\n console.log('Attempt to sync, while sync was already in progress');\n return;\n }\n let task = await this.startSiteSyncProcess();\n this.currentSiteTaskId = task.taskIdentifier;\n if (task.contextInfo && task.contextInfo.syncType === 'sites') {\n try {\n while (this.isTaskRunning(task)) {\n await delay(1000);\n task = await this.getTaskProgress(task.taskIdentifier);\n }\n if (task.progress === 100) {\n // When syncing finishes... bust company cache\n this.data.bustCompanyCache();\n }\n } catch (reason) {\n Sentry.captureException(new Error(reason));\n console.log(`A problem happened while syncing sites ${reason}`);\n } finally {\n this.currentSiteTaskId = null;\n }\n } else {\n this.alert.error(this.intl.t('services.org-api.errors.sync-sites-failed'));\n console.warn('Task doesnt have a contextInfo, or type is not sites');\n }\n }\n\n isTaskRunning(task) {\n let { progress, state, status } = task;\n if (progress === 100 || progress === '100') {\n return false;\n }\n // Abort\n if (status === '500' || status === 500) {\n return false;\n }\n // Finished\n if (state === '250' || state === 250) {\n return false;\n }\n // State = Abort\n if (state === '500' || state === 500) {\n return false;\n }\n return true;\n }\n\n async syncForNewAccount(task) {\n let currentTaskProgress = task;\n let { loading } = this;\n loading.block('Setting up your account');\n // We're dealing with a new user... we must block usage until the end\n try {\n while (this.isTaskRunning(currentTaskProgress)) {\n await delay(1000);\n loading.replaceMessage(`Setting account - ${currentTaskProgress.progress}% done`);\n currentTaskProgress = await this.getTaskProgress(task.taskIdentifier);\n }\n await this.userSession.reloadUser();\n this.data.bustCompanyCache();\n } finally {\n this.currentTaskId = null;\n loading.unblock();\n }\n }\n}\n","import Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout } from 'ember-concurrency';\nimport { QUEUE_STATUS } from 'weldnote/services/pqr-parse-queue';\n\n/**\n * Global service for monitoring PQR parsing queue status.\n * Polls the queue when there are tracked items and sends notifications\n * when items complete processing (PARSED or ERROR).\n *\n * This service works globally across the app, not just on the digitalize-pqr page.\n */\nexport default class PqrParseMonitorService extends Service {\n @service pqrParseQueue;\n @service alertMessage;\n @service intl;\n @service router;\n\n POLL_INTERVAL = 10000; // 10 seconds (longer than queue-list's 5s to reduce load)\n NOTIFICATION_TIMEOUT = 10000; // 10 seconds auto-dismiss\n\n // Track items we've already notified about to avoid duplicates\n @tracked _notifiedItemIds = new Set();\n\n // Track items currently being processed: Map\n @tracked _processingItems = new Map();\n\n // Whether monitoring is active\n @tracked isMonitoring = false;\n\n /**\n * Start tracking an item being processed.\n * Called when a file is queued for parsing.\n * @param {string} itemId - Queue item ID\n * @param {string} fileName - Original file name for display\n */\n trackItem(itemId, fileName) {\n this._processingItems.set(itemId, {\n fileName,\n status: QUEUE_STATUS.QUEUED,\n });\n\n // Force reactivity update\n this._processingItems = new Map(this._processingItems);\n\n // Start polling if not already running\n if (!this.pollTask.isRunning) {\n this.pollTask.perform();\n }\n }\n\n /**\n * Stop tracking an item (e.g., when deleted or approved from queue-list)\n * @param {string} itemId - Queue item ID\n */\n untrackItem(itemId) {\n this._processingItems.delete(itemId);\n this._notifiedItemIds.delete(itemId);\n this._processingItems = new Map(this._processingItems);\n }\n\n /**\n * Clear all tracking (e.g., on logout)\n */\n clearAll() {\n this._processingItems.clear();\n this._notifiedItemIds.clear();\n this._processingItems = new Map(this._processingItems);\n this.pollTask.cancelAll();\n this.isMonitoring = false;\n }\n\n /**\n * Check if any items need tracking\n */\n get hasItemsToTrack() {\n return this._processingItems.size > 0;\n }\n\n @task({ restartable: true })\n *pollTask() {\n this.isMonitoring = true;\n\n while (this.hasItemsToTrack) {\n yield timeout(this.POLL_INTERVAL);\n\n try {\n const items = yield this.pqrParseQueue.listQueueItems();\n this._processCompletions(items);\n } catch {\n // Silently fail on polling errors to avoid spam\n }\n }\n\n this.isMonitoring = false;\n }\n\n /**\n * Process queue items and send notifications for completed ones\n * @param {Array} items - Queue items from API\n */\n _processCompletions(items) {\n const itemsById = new Map(items.map((item) => [item.id, item]));\n const completedParsed = [];\n const completedError = [];\n\n for (const [itemId, trackedInfo] of this._processingItems) {\n const currentItem = itemsById.get(itemId);\n\n if (!currentItem) {\n // Item no longer exists (deleted)\n this._processingItems.delete(itemId);\n continue;\n }\n\n // Check if status changed to a completed state\n if (this._isCompletedStatus(currentItem.status) && !this._notifiedItemIds.has(itemId)) {\n if (currentItem.status === QUEUE_STATUS.PARSED) {\n completedParsed.push(currentItem);\n } else if (currentItem.status === QUEUE_STATUS.ERROR) {\n completedError.push(currentItem);\n }\n\n this._notifiedItemIds.add(itemId);\n this._processingItems.delete(itemId);\n }\n }\n\n // Force reactivity update\n this._processingItems = new Map(this._processingItems);\n\n // Send batched notifications\n if (completedParsed.length > 0) {\n this._sendParsedNotification(completedParsed);\n }\n\n if (completedError.length > 0) {\n this._sendErrorNotification(completedError);\n }\n }\n\n _isCompletedStatus(status) {\n return status === QUEUE_STATUS.PARSED || status === QUEUE_STATUS.ERROR;\n }\n\n /**\n * Send notification for successfully parsed items\n * @param {Array} items - Parsed queue items\n */\n _sendParsedNotification(items) {\n let message;\n\n if (items.length === 1) {\n const item = items[0];\n const fileName = item.fileName || this.intl.t('routes.digitalize-pqr.notifications.unknown-file');\n message = this.intl.t('routes.digitalize-pqr.notifications.parsed', { fileName });\n } else {\n message = this.intl.t('routes.digitalize-pqr.notifications.multiple-parsed', {\n count: items.length,\n });\n }\n\n this.alertMessage.success(message, '', {\n timeOut: this.NOTIFICATION_TIMEOUT,\n extendedTimeOut: 0,\n closeButton: true,\n onclick: () => {\n this._navigateToReview();\n },\n });\n }\n\n /**\n * Send notification for failed items\n * @param {Array} items - Error queue items\n */\n _sendErrorNotification(items) {\n let message;\n\n if (items.length === 1) {\n const item = items[0];\n const fileName = item.fileName || this.intl.t('routes.digitalize-pqr.notifications.unknown-file');\n message = this.intl.t('routes.digitalize-pqr.notifications.error', {\n fileName,\n errorMessage: item.errorMessage || '',\n });\n } else {\n message = this.intl.t('routes.digitalize-pqr.notifications.multiple-errors', {\n count: items.length,\n });\n }\n\n this.alertMessage.error(message, '', {\n timeOut: this.NOTIFICATION_TIMEOUT,\n extendedTimeOut: 0,\n closeButton: true,\n onclick: () => {\n this._navigateToQueue();\n },\n });\n }\n\n /**\n * Navigate to the digitalize-pqr page, optionally opening review modal\n * @param {string|null} itemId - Item ID to open in review modal, or null for just queue\n */\n _navigateToReview() {\n this.router.transitionTo('digitalize-pqr');\n }\n\n _navigateToQueue() {\n this.router.transitionTo('digitalize-pqr');\n }\n}\n","import Service, { service } from '@ember/service';\nimport { AjaxServiceClass } from 'ember-ajax/services/ajax';\nimport type { ApprovePayload } from \"weldnote/components/digitalize-pqr/types/pqr-api-response-types\";\n\n// Re-export shared types for backwards compatibility — existing imports\n// from 'weldnote/services/pqr-parse-queue' continue to work.\nexport {\n QUEUE_STATUS,\n type QueueStatus,\n type QueueFileResponse,\n type QueueListResponse,\n type QueueItem,\n type RejectResponse,\n} from 'weldnote/utils/parse-queue-status';\n\nimport {\n type QueueFileResponse,\n type QueueListResponse,\n type QueueItem,\n type RejectResponse,\n} from 'weldnote/utils/parse-queue-status';\n\n/**\n * Response from `POST /pqr/parse/queue/:guid/approve`.\n */\nexport interface ApproveResponse {\n /** Result status (e.g. success) */\n status: string;\n /** ID of the newly created PQR record */\n pqrId: string;\n}\n\n/**\n * Service for managing the PQR parsing queue, which is a queue of uploaded\n * PQR pdf files which are to be parsed into PQR records, using AI to parse the PDF\n * and return a compliant schema (in json). Each queue item represents a single\n * file to be parsed, and goes through various states from QUEUED to PROCESSING\n * to either PARSED (successful) or ERROR (failed). Parsed items can then be\n * either APPROVED (to create a PQR record) or REJECTED (to discard).\n */\nexport default class PqrParseQueueService extends Service {\n @service declare ajax: AjaxServiceClass;\n\n /**\n * Submits a file for AI-powered PQR parsing. The file is added to the queue\n * and will be processed asynchronously.\n *\n * @param fileId - ID of the previously uploaded PDF file\n * @param fileName - Optional display name for the file\n * @param industryCodeId - Optional industry code to associate with the PQR\n */\n async queueFile(\n fileId: number,\n fileName: string | null = null,\n industryCodeId: string | null = null\n ): Promise {\n let payload: { fileId: number; fileName?: string; industryCodeId?: string } = { fileId };\n if (fileName) {\n payload.fileName = fileName;\n }\n if (industryCodeId) {\n payload.industryCodeId = industryCodeId;\n }\n\n return this.ajax.post('/pqr/parse/queue', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(payload),\n });\n }\n\n /**\n * Fetches a paginated list of queue items, optionally filtered by status.\n *\n * @param statusFilter - Array of {@link QueueStatus} values to filter by (e.g. `['PARSED', 'ERROR']`)\n * @param page - Page number (1-indexed)\n * @param pageSize - Number of items per page\n */\n async listQueueItems(\n statusFilter: string[] | null = null,\n page: number = 1,\n pageSize: number = 20\n ): Promise {\n let url = '/pqr/parse/queue';\n const params = new URLSearchParams();\n\n if (statusFilter && statusFilter.length > 0) {\n params.append('status', statusFilter.join(','));\n }\n params.append('page', String(page));\n params.append('pagesize', String(pageSize));\n\n const queryString = params.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n\n return this.ajax.request(url, {\n method: 'GET',\n });\n }\n\n /**\n * Fetches a single queue item by its GUID.\n *\n * @param guid - Unique identifier of the queue item\n */\n async getQueueItem(guid: string): Promise {\n return this.ajax.request(`/pqr/parse/queue/${guid}`, {\n method: 'GET',\n });\n }\n\n /**\n * Approves a parsed queue item, creating a PQR record from the reviewed data.\n * Only allowlisted fields from {@link ApprovePayload} are sent to the backend;\n * unknown fields are logged as errors and stripped from the payload.\n * Empty values (null, undefined, empty strings, empty arrays) are also excluded.\n *\n * @param guid - Unique identifier of the queue item to approve\n * @param data - PQR field values reviewed/edited by the user\n */\n async approveItem(guid: string, data: ApprovePayload = {}): Promise {\n const FIELD_NAMES: (keyof ApprovePayload)[] = [\n // Required fields\n 'standardId',\n 'unitSystem',\n 'certificateNumber',\n // General Information\n 'companyId',\n 'examiningBodyId',\n 'emissionDate',\n 'welderId',\n 'writtenById',\n 'wpsId',\n 'specialRequirementIds',\n 'address',\n 'testsConductedBy',\n 'notes',\n 'testNotes',\n // Process details\n 'weldTypeId',\n 'productType',\n // Welding Details (array of IDs)\n 'weldingDetailIds',\n // Process 1 (Root)\n 'weldingPositionRootId',\n 'weldingProcessRootId',\n 'processMecanizationRootId',\n 'arcTransferModeRootId',\n 'typeCurrentRootId',\n // Process 2 (Fill)\n 'weldingPositionFillId',\n 'weldingProcessFillId',\n 'processMecanizationFillId',\n 'arcTransferModeFillId',\n 'typeCurrentFillId',\n // Process 3 (Cap)\n 'weldingPositionCapId',\n 'weldingProcessCapId',\n 'processMecanizationCapId',\n 'arcTransferModeCapId',\n 'typeCurrentCapId',\n // Base Materials\n 'baseMaterial1Id',\n 'baseMaterial1Thickness',\n 'baseMaterial1Diameter',\n 'baseMaterial2Id',\n 'baseMaterial2Thickness',\n 'baseMaterial2Diameter',\n 'weldedThickness',\n 'weldedDiameter',\n // Filler Materials\n 'fillerMaterialRootId',\n 'fillerMaterialRootDimensions',\n 'fillerMaterialFillId',\n 'fillerMaterialFillDimensions',\n 'fillerMaterialCapId',\n 'fillerMaterialCapDimensions',\n 'fillerMaterialRootCommercialDesignationId',\n 'fillerMaterialFillCommercialDesignationId',\n 'fillerMaterialCapCommercialDesignationId', \n // Shielding Gas 1\n 'shielding1Type',\n 'shielding1GasId',\n 'shielding1FluxId',\n 'shielding1GasMixture',\n 'shielding1FlowRateMin',\n 'shielding1FlowRateMax',\n // Shielding Gas 2\n 'shielding2Type',\n 'shielding2GasId',\n 'shielding2FluxId',\n 'shielding2GasMixture',\n 'shielding2FlowRateMin',\n 'shielding2FlowRateMax',\n // Shielding Gas 3\n 'shielding3Type',\n 'shielding3GasId',\n 'shielding3FluxId',\n 'shielding3GasMixture',\n 'shielding3FlowRateMin',\n 'shielding3FlowRateMax',\n 'shielding1GasCommercialDesignationId',\n 'shielding1FluxCommercialDesignationId',\n 'shielding2GasCommercialDesignationId',\n 'shielding2FluxCommercialDesignationId',\n 'shielding3GasCommercialDesignationId',\n 'shielding3FluxCommercialDesignationId',\n 'backingGasCommercialDesignationId',\n 'backingFluxCommercialDesignationId',\n // Backing Gas\n 'backingType',\n 'backingGasId',\n 'backingFluxId',\n 'backingDesignation',\n 'backingGasMixture',\n 'backingFlowRateMin',\n 'backingFlowRateMax',\n // Thermal Parameters\n 'preheatTemperature',\n 'interpassTemperature',\n 'postHeatTemperature',\n 'postHeatTime',\n 'pwhtTemperature',\n 'pwhtTime',\n 'pwhtHeatingRate',\n 'pwhtCoolingRate',\n // Welding Passes\n 'passes',\n // Other Details\n 'backGouging',\n 'pulsedWelding',\n 'torchAngleMin',\n 'torchAngleMax',\n 'electrodeType1',\n 'electrodeType2',\n 'electrodeType3',\n 'stickOut1',\n 'stickOut2',\n 'stickOut3',\n 'gasNozzleDiameter1',\n 'gasNozzleDiameter2',\n 'gasNozzleDiameter3',\n 'weaving1',\n 'weaving2',\n 'weaving3',\n 'oscillation1',\n 'oscillation2',\n 'oscillation3',\n 'preparationMethodIds',\n ];\n\n // Warn about unknown fields not in the allowlist\n const fieldSet = new Set(FIELD_NAMES);\n for (let key of Object.keys(data)) {\n if (!fieldSet.has(key)) {\n console.error(`[pqr-parse-queue] approveItem received unknown field \"${key}\" — it will be ignored`);\n }\n }\n\n let payload: Partial = {};\n\n // Build payload only with provided non-empty values\n for (let field of FIELD_NAMES) {\n let value = data[field];\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n if (value.length > 0) {\n (payload as Record)[field] = value;\n }\n } else if (value !== '') {\n (payload as Record)[field] = value;\n }\n }\n }\n\n return this.ajax.post(`/pqr/parse/queue/${guid}/approve`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(payload),\n });\n }\n\n /**\n * Rejects a parsed queue item, discarding its data without creating a PQR record.\n *\n * @param guid - Unique identifier of the queue item to reject\n * @param reason - Optional human-readable reason for the rejection\n */\n async rejectItem(guid: string, reason: string | null = null): Promise {\n let payload: { reason?: string } = {};\n if (reason) {\n payload.reason = reason;\n }\n\n return this.ajax.post(`/pqr/parse/queue/${guid}/reject`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(payload),\n });\n }\n\n /**\n * Permanently deletes a queue item.\n *\n * @param guid - Unique identifier of the queue item to delete\n */\n async deleteItem(guid: string): Promise {\n return this.ajax.delete(`/pqr/parse/queue/${guid}`);\n }\n\n /**\n * Re-queues a failed (ERROR) queue item for another parsing attempt.\n *\n * @param guid - Unique identifier of the queue item to retry\n */\n async retryItem(guid: string): Promise {\n return this.ajax.post(`/pqr/parse/queue/${guid}/retry`, {\n dataType: 'json',\n contentType: 'application/json',\n });\n }\n}\n","// Copied from https://github.com/jasonkriss/ember-scroll-to (I only require the service)\nimport Service from '@ember/service';\n\nimport { computed } from '@ember/object';\nimport $ from 'jquery';\n\nconst DURATION = 750;\nconst EASING = 'swing';\nconst OFFSET = 0;\n\nexport default Service.extend({\n // ----- Static properties -----\n duration: DURATION,\n easing: EASING,\n offset: OFFSET,\n\n // ----- Computed properties -----\n scrollable: computed(() => {\n return $('html, body');\n }),\n\n // ----- Methods -----\n getJQueryElement(target) {\n let jQueryElement = $(target);\n\n if (!jQueryElement) {\n console.warn(\"element couldn't be found:\", target);\n return;\n }\n\n return jQueryElement;\n },\n\n getVerticalCoord(target, offset = 0) {\n let jQueryElement = this.getJQueryElement(target);\n return jQueryElement.offset().top + offset;\n },\n\n scrollVertical(target, opts = {}) {\n this.scrollable.animate(\n {\n scrollTop: this.getVerticalCoord(target, opts.offset),\n },\n opts.duration || this.duration,\n opts.easing || this.easing,\n opts.complete\n );\n },\n});\n","import { service } from '@ember/service';\nimport BaseSessionService from 'ember-simple-auth/services/session';\n\n/**\n * Extends the base session service to load the user session upon authentication.\n * This apparently is the cannonical way to do this in Ember Simple Auth, gotten from the docs\n * https://github.com/mainmatter/ember-simple-auth/blob/v6.1.0-ember-simple-auth/guides/managing-current-user.md\n * Link is for the version we are using. (v6 at the time of writing this)\n */\nexport default class SessionService extends BaseSessionService {\n @service userSession;\n\n async handleAuthentication() {\n super.handleAuthentication(...arguments);\n\n try {\n await this.userSession.loadUser.perform();\n } catch (err) {\n await this.invalidate();\n }\n }\n}\n","import { A } from '@ember/array';\nimport EmberObject from '@ember/object';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { task, timeout } from 'ember-concurrency';\n\nexport default Service.extend({\n ajax: service(),\n\n TASK_STATE: {\n INITIAL: 100,\n IN_PROGRESS: 200,\n FINISHED: 250,\n ABORT: 500,\n },\n\n currentTasks: A(),\n\n parseTask(currentTask) {\n let parsedDescription = currentTask.progressDescription;\n try {\n parsedDescription = JSON.parse(currentTask.progressDescription);\n } catch (e) {\n parsedDescription = currentTask.progressDescription;\n // Not a valid JSON, could happen.. let it go unparsed\n }\n let parsedResult = currentTask.result;\n if (!isEmpty(parsedResult)) {\n try {\n parsedResult = JSON.parse(parsedResult);\n } catch (e) {\n parsedResult = currentTask.result;\n }\n }\n return {\n contextName: currentTask.contextName,\n contextId: currentTask.contextId,\n result: parsedResult,\n progressDescription: parsedDescription,\n state: currentTask.state,\n status: currentTask.status,\n progress: currentTask.progress,\n };\n },\n\n monitorTask: task(function* (taskIdentifier) {\n if (this.hasTask(taskIdentifier)) {\n if (this.isTaskFinished(taskIdentifier)) {\n return;\n }\n }\n\n let currentTask = null;\n // If the first time, create a task\n if (!this.hasTask(taskIdentifier)) {\n let taskStatus = yield this.getTaskProgress(taskIdentifier);\n currentTask = EmberObject.create();\n Object.assign(currentTask, taskStatus);\n this.currentTasks.pushObject(currentTask);\n } else {\n currentTask = this.getTask(taskIdentifier);\n }\n\n if (this.isTaskFinished(taskIdentifier)) {\n currentTask.setProperties(this.parseTask(currentTask));\n return;\n }\n\n while (!this.isTaskFinished(taskIdentifier)) {\n let taskStatus = yield this.getTaskProgress(taskIdentifier);\n currentTask = this.getTask(taskIdentifier);\n if (!isEmpty(currentTask)) {\n currentTask.setProperties(this.parseTask(taskStatus));\n yield timeout(2000);\n } else {\n console.log(`Could not retrieve task ${taskIdentifier}`);\n console.log('Current tasks are');\n console.log(this.currentTasks);\n return;\n }\n }\n }),\n\n isTaskFinished(taskId) {\n let currentTask = this.getTask(taskId);\n if (!isEmpty(currentTask)) {\n let progress = parseInt(currentTask.progress, 10);\n let currentState = parseInt(currentTask.state, 10);\n if (\n progress === 100 ||\n currentState === this.TASK_STATE.FINISHED ||\n currentState === this.TASK_STATE.ABORT\n ) {\n return true;\n }\n }\n return false;\n },\n\n hasTask(taskId) {\n let possibleTask = this.currentTasks.findBy('taskIdentifier', taskId);\n return !isEmpty(possibleTask);\n },\n\n hasTaskByContext(context, contextId) {\n let task = this.currentTasks.find((item) => {\n if (item.get('contextName') === context) {\n if (item.get('contextId') === contextId) {\n return true;\n }\n }\n });\n\n if (!isEmpty(task)) {\n return true;\n }\n return false;\n },\n\n getTaskByContext(context, contextId) {\n let task = this.currentTasks.find((item) => {\n if (item.get('contextName') === context) {\n if (item.get('contextId') === contextId) {\n return item;\n }\n }\n });\n if (!isEmpty(task)) {\n return task;\n }\n return null;\n },\n\n addTask(taskId, taskInfo) {\n if (!isEmpty(taskId)) {\n if (!this.hasTask(taskId)) {\n this.currentTasks.pushObject(taskInfo);\n }\n }\n },\n\n getTask(taskId) {\n if (this.hasTask(taskId)) {\n return this.currentTasks.findBy('taskIdentifier', taskId);\n }\n },\n\n getUrlContent(url) {\n return this.ajax.request(url, {\n method: 'GET',\n });\n },\n\n removeTask(taskId) {\n let task = this.getTask(taskId);\n this.currentTasks.removeObject(task);\n },\n\n removeTaskByContext(context, contextId) {\n let task = this.currentTasks.find((item) => {\n if (item.get('contextName') === context) {\n if (item.get('contextId') === contextId) {\n return true;\n }\n }\n });\n\n if (!isEmpty(task)) {\n this.currentTasks.removeObject(task);\n }\n },\n\n getTaskProgress(taskId) {\n return this.getUrlContent(`/api/task-progress/${taskId}`);\n },\n\n clearTasks() {\n this.currentTasks.clear();\n },\n\n isTaskRunning(task) {\n let { progress, state, status } = task;\n if (progress === 100 || progress === '100') {\n return false;\n }\n // Abort\n if (status === '500' || status === 500) {\n return false;\n }\n // Finished\n if (state === '250' || state === 250) {\n return false;\n }\n // State = Abort\n if (state === '500' || state === 500) {\n return false;\n }\n return true;\n },\n});\n","import ENV from '../config/environment';\n\nconst toastrOptions = {\n closeButton: true,\n debug: false,\n newestOnTop: true,\n progressBar: true,\n positionClass: 'toast-top-right',\n preventDuplicates: true,\n onclick: null,\n showDuration: '300',\n hideDuration: '1000',\n timeOut: '4000',\n extendedTimeOut: '1000',\n showEasing: 'swing',\n hideEasing: 'linear',\n showMethod: 'fadeIn',\n hideMethod: 'fadeOut',\n};\nconst config = ENV['ember-toastr'] || {\n toastrOptions: toastrOptions,\n};\n\nimport Service from 'ember-toastr/services/toast';\n\nexport default Service.extend({\n defaultToastrOptions: toastrOptions,\n config: config,\n});\n","import Service, { service } from '@ember/service';\nimport { IntlService } from 'ember-intl';\nimport Constants from 'weldnote/utils/constants';\n\n\nconst {\n UNITS,\n UNIT_SYSTEM\n} = Constants;\n\nexport default class UnitSystemService extends Service {\n\n @service\n declare intl: IntlService;\n\n isMetricSystem(unitSystem: string) {\n if (unitSystem == UNIT_SYSTEM.METRIC) {\n return true;\n }\n return false;\n }\n\n isImperialSystem(unitSystem: string) {\n if (unitSystem == UNIT_SYSTEM.IMPERIAL) {\n return true;\n }\n return false;\n }\n\n getTemperatureUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return UNITS.CELSIUS;\n } else if (this.isImperialSystem(unitSystem)) {\n return UNITS.FAHRENHEIT;\n }\n return '';\n }\n\n getDistanceUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.MILLIMETER}`);\n } else if (this.isImperialSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.INCH}`);\n }\n return '';\n }\n\n getFlowUnit(unitSystem: string): string {\n if (this.isMetricSystem(unitSystem)) {\n return UNITS.LITER_MINUTE;\n } else if (this.isImperialSystem(unitSystem)) {\n return UNITS.CUBIC_FEET_HOUR;\n }\n return '';\n }\n\n getHeatDistanceUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.KILO_JOULE_MILLIMETER}`);\n } else if (this.isImperialSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.KILO_JOULE_INCH}`);\n }\n return '';\n }\n\n getWireSpeedUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.METER_MINUTE}`);\n } else if (this.isImperialSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.INCH_MINUTE}`);\n }\n return '';\n }\n\n getTravelSpeedUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.MILLIMETER_MINUTE}`);\n } else if (this.isImperialSystem(unitSystem)) {\n return this.intl.t(`lov.units.${UNITS.INCH_MINUTE}`);\n }\n return '';\n }\n\n getForceUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return UNITS.NEWTON;\n } else if (this.isImperialSystem(unitSystem)) {\n return UNITS.POUNDS;\n }\n return '';\n }\n\n getAreaUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return UNITS.SQUARE_MILLIMETER;\n } else if (this.isImperialSystem(unitSystem)) {\n return UNITS.SQUARE_INCH;\n }\n return '';\n }\n\n getPressureUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return UNITS.NEWTON_SQUARE_MILIMETER;\n } else if (this.isImperialSystem(unitSystem)) {\n return UNITS.PSI;\n }\n return '';\n }\n\n getEnergyUnit(unitSystem: string) {\n if (this.isMetricSystem(unitSystem)) {\n return UNITS.JOULE;\n } else if (this.isImperialSystem(unitSystem)) {\n return UNITS.FEET_PER_POUND;\n }\n return '';\n }\n\n}\n","import { computed, get, set } from '@ember/object';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { tracked } from '@glimmer/tracking';\nimport * as Sentry from '@sentry/browser';\nimport classic from 'ember-classic-decorator';\nimport { task } from 'ember-concurrency';\nimport DS from 'ember-data';\nimport IntlService from 'ember-intl/services/intl';\nimport ENV from 'weldnote/config/environment';\nimport Account from 'weldnote/models/account';\nimport Feature from 'weldnote/models/feature';\nimport Constants from 'weldnote/utils/constants';\nimport planResolver from 'weldnote/utils/subscription/plan-resolver';\nimport WeldcloudNotesData from './weldcloud-notes-data';\nimport WeldcloudData from './weldcloud-data';\n\nconst {\n PERMISSIONS,\n UNIT_SYSTEM,\n UNITS,\n DEFAULT_DATE_FORMAT,\n WELDNOTE_PLANS,\n DEFAULT_SMALL_YEAR_FORMAT,\n} = Constants;\n\n@classic\nexport default class UserSessionService extends Service {\n @service\n declare store: DS.Store;\n\n @service\n declare intl: IntlService;\n\n @service\n declare session: any;\n\n @service\n declare analytics: any;\n\n @service\n declare welderCertificateData: any;\n\n @service()\n declare crisp: any;\n\n get chat() {\n return this.crisp;\n }\n\n @service()\n declare weldnoteData: any;\n\n @service\n declare weldcloudNotesData: WeldcloudNotesData;\n\n @service\n declare weldcloudData: WeldcloudData;\n\n get data() {\n return this.weldnoteData;\n }\n\n get userEmail(): string | undefined {\n return this.account?.email;\n }\n\n get userClient() {\n return this.account?.client;\n }\n\n get userLanguage() {\n return this.account?.language;\n }\n\n get userName() {\n return this.account?.name;\n }\n\n @computed('userEmail', 'userName')\n get userLabel() {\n if (!isEmpty(get(this, 'userName'))) {\n return get(this, 'userName');\n }\n return get(this, 'userEmail');\n }\n\n @tracked\n account: Account | null = null;\n\n // List of application names in the weld cloud suite for which\n // the user has a valid license\n @tracked\n applications: any = null;\n\n @tracked\n separatorOfDecimals = '.';\n\n @tracked\n isLoggedInAsCustomerSupport: boolean = false;\n\n get isAdmin(): boolean {\n return this.account?.admin || false;\n }\n\n get clientLabel() {\n return this.account?.client;\n }\n\n get decimalSeparator() {\n return this.separatorOfDecimals;\n }\n\n get subscribedCompanies() {\n return this.account?.companiesSubscribed || [];\n }\n\n get subscribedCompanyIds() {\n let { subscribedCompanies } = this;\n if (!isEmpty(subscribedCompanies)) {\n return this.subscribedCompanies\n .map((item) => {\n return `${item.get('id')}`;\n })\n .join(',');\n }\n return '';\n }\n\n get isAccountLoaded() {\n return this.account && !isEmpty(this.account);\n }\n\n get accountAcronym() {\n let { userLabel: label } = this;\n let userLabel = '';\n if (label) {\n userLabel = label;\n }\n if (!isEmpty(userLabel)) {\n if (userLabel.indexOf(' ') > 0) {\n let userParts = userLabel.split(' ');\n return `${userParts[0].charAt(0)}${userParts[1].charAt(0)}`;\n } else {\n if (userLabel.length > 1) {\n return userLabel.substr(0, 2);\n }\n }\n }\n return 'U';\n }\n\n globalFeatures: Feature[] = [];\n\n @computed('account.features.[]', 'globalFeatures')\n get features() {\n if (!this.isAccountLoaded) {\n return [];\n }\n let userFeatures: Feature[] = [];\n this.account?.features.forEach((feature) => {\n userFeatures.push(feature);\n });\n\n let result = this.globalFeatures.concat(userFeatures);\n\n let finalResult = result.map((feature) => {\n return feature.get('name');\n });\n return finalResult;\n }\n\n loadFeatures = task(\n {\n drop: true,\n },\n async () => {\n let { store } = this;\n let result = await store.findAll('feature');\n return result;\n }\n );\n\n loadApplications = task(\n {\n drop: true,\n },\n async () => {\n let applications = await this.weldcloudData.listOfApplications();\n if (applications) {\n set(this, 'applications', applications);\n } else {\n set(this, 'applications', []);\n }\n }\n );\n\n loadUser = task(\n {\n drop: true,\n },\n async () => {\n let { analytics, intl, chat, session, data } = this;\n\n let features: any = await this.loadFeatures.perform();\n set(\n this,\n 'globalFeatures',\n features.filter((e: Feature) => e.get('activeForAll') === true)\n );\n\n let account = await data.loadCurrentUser();\n let userId = account.get('id');\n\n this.account = account;\n if (!isEmpty(account.decimalSeparator)) {\n set(this, 'separatorOfDecimals', account.decimalSeparator);\n }\n let { language, client } = account;\n if (isEmpty(language)) {\n language = ENV.intl.defaultLocale;\n } else {\n if (language === 'en') {\n language = 'en-us';\n } else if (language === 'pt') {\n language = 'pt-pt';\n } else if (language === 'br') {\n language = 'pt-pr';\n } else if (language === 'es') {\n language = 'es-es';\n } else if (language === 'de') {\n language = 'de-de';\n }\n }\n if (isEmpty(client)) {\n client = 'Weldnote';\n }\n intl.setLocale(language);\n analytics.identify(userId, {\n email: account.get('email'),\n name: account.get('name'),\n language: account.get('language'),\n plan: account.get('subscriptionType'),\n typeOfPlan: account.get('subscriptionPlan'),\n client: `${account.get('client')} (${account.get('clientId')})`,\n });\n // Store the userId\n session.set('data.userId', userId);\n\n // Load all essential data\n await this.weldcloudNotesData.fetchAllData.perform();\n\n await this.weldcloudNotesData.fetchSecondaryData.perform();\n\n if (ENV.environment === 'production') {\n chat.identifyUser(this.userName, this.userEmail);\n Sentry.configureScope((scope: any) => {\n scope.setUser({\n id: this.accountId,\n email: this.userEmail,\n });\n });\n }\n // Add your own custom attributes here. Some EXAMPLES:\n // 'Signed up': '2019—06-20Z', // Signup date in ISO-8601 format.\n // 'Last purchase category': 'Electronics', // Send strings with quotes around them.\n // 'Total purchases': 15, // Send numbers without quotes.\n // 'Last purchase date': '2019-06-20Z', // Send dates in ISO-8601 format.\n // 'Last refund date': null, // Send null when no value exists for a user.});\n\n this.welderCertificateData.queryCertificateCount.perform();\n\n this.loadApplications.perform();\n }\n );\n\n get accountId() {\n return this.account?.id || '';\n }\n\n get dateFormat() {\n let format = this.account?.dateFormat;\n if (!isEmpty(format)) {\n return format;\n }\n return DEFAULT_DATE_FORMAT;\n }\n\n get smallDateFormat() {\n let format = this.account?.dateFormat || '';\n if (!isEmpty(format)) {\n return format.replace('YYYY', 'YY');\n }\n return DEFAULT_SMALL_YEAR_FORMAT;\n }\n\n get isTrial() {\n return this.account?.isTrial;\n }\n\n get isViewer(): boolean {\n return this.account?.notesRole === 'viewer';\n }\n\n get isOwner(): boolean {\n return this.account?.notesRole === 'owner';\n }\n\n get isCollaborator(): boolean {\n return this.account?.notesRole === 'collaborator';\n }\n\n get isAssemblyOwner(): boolean {\n return this.account?.assemblyRole === 'owner';\n }\n\n _hasPermission(permission: string): boolean {\n if (!permission && isEmpty(permission)) {\n throw 'Cannot check an empty permission';\n }\n if (this.isAccountLocked) {\n return false;\n }\n let { account } = this;\n if (!isEmpty(account)) {\n if (\n (this.isWritePermission(permission) && this.isOwner) ||\n this.account?.hasPermission(PERMISSIONS.ACCOUNT_ADMIN)\n ) {\n if (this.account?.hasRoles) {\n return (\n this.account.hasPermission(permission) ||\n this.account.hasPermission(PERMISSIONS.ACCOUNT_ADMIN)\n );\n } else {\n return true;\n }\n } else if (this.isViewer && this.isReadPermission(permission)) {\n return true;\n } else {\n return (\n account?.hasPermission(permission) ||\n account?.hasPermission(PERMISSIONS.ACCOUNT_ADMIN) ||\n this.isAdmin\n );\n }\n }\n return false;\n }\n\n isReadPermission(permission: string): boolean {\n return (\n permission === PERMISSIONS.PQR_READ ||\n permission === PERMISSIONS.WPS_READ ||\n permission === PERMISSIONS.PWPS_READ ||\n permission === PERMISSIONS.WELDER_CERTIFICATE_READ ||\n permission === PERMISSIONS.WELDING_BOOK_READ ||\n permission === PERMISSIONS.PROJECT_READ\n );\n }\n\n isWritePermission(permission: string): boolean {\n return (\n permission === PERMISSIONS.ACCOUNT_ADMIN ||\n permission === PERMISSIONS.PQR_CREATE ||\n permission === PERMISSIONS.PQR_DELETE ||\n permission === PERMISSIONS.PQR_CREATE_WPS ||\n permission === PERMISSIONS.PQR_EDIT_APPROVAL_RANGE ||\n permission === PERMISSIONS.PQR_ARCHIVE ||\n permission === PERMISSIONS.WPS_CREATE ||\n permission === PERMISSIONS.WPS_CREATE_REVISION ||\n permission === PERMISSIONS.WPS_ASSIGN_STAFF ||\n permission === PERMISSIONS.WPS_DELETE ||\n permission === PERMISSIONS.WPS_ARCHIVE ||\n permission === PERMISSIONS.WPS_VERIFY ||\n permission === PERMISSIONS.WPS_APPROVE ||\n permission === PERMISSIONS.WPS_REVOKE ||\n permission === PERMISSIONS.PWPS_CREATE ||\n permission === PERMISSIONS.PWPS_DELETE ||\n permission === PERMISSIONS.PWPS_CREATE_CERTIFICATE ||\n permission === PERMISSIONS.PWPS_CREATE_PQR ||\n permission === PERMISSIONS.WELDER_CERTIFICATE_CREATE ||\n permission === PERMISSIONS.WELDER_CERTIFICATE_DELETE ||\n permission === PERMISSIONS.WELDER_CERTIFICATE_ARCHIVE ||\n permission === PERMISSIONS.WELDER_CERTIFICATE_REVALIDATE ||\n permission === PERMISSIONS.WELDER_CERTIFICATE_EDIT_APPROVAL_RANGE ||\n permission === PERMISSIONS.WELDING_BOOK_CREATE ||\n permission === PERMISSIONS.WELDING_BOOK_CREATE_REVISION ||\n permission === PERMISSIONS.WELDING_BOOK_VERIFY ||\n permission === PERMISSIONS.WELDING_BOOK_APPROVE ||\n permission === PERMISSIONS.WELDING_BOOK_ARCHIVE ||\n permission === PERMISSIONS.WELDING_BOOK_DELETE ||\n permission === PERMISSIONS.FILLER_MATERIAL_CREATE ||\n permission === PERMISSIONS.FILLER_MATERIAL_DELETE ||\n permission === PERMISSIONS.BASE_MATERIAL_CREATE ||\n permission === PERMISSIONS.BASE_MATERIAL_DELETE ||\n permission === PERMISSIONS.WELDER_ARCHIVE ||\n permission === PERMISSIONS.WELDER_CREATE ||\n permission === PERMISSIONS.WELDER_DELETE ||\n permission === PERMISSIONS.PROJECT_ARCHIVE ||\n permission === PERMISSIONS.PROJECT_CREATE ||\n permission === PERMISSIONS.PROJECT_DELETE ||\n permission === PERMISSIONS.PROJECT_WELD_CREATE ||\n permission === PERMISSIONS.PROJECT_WELD_DELETE ||\n permission === PERMISSIONS.GENERIC_WRITE_PERMISSION ||\n permission === PERMISSIONS.QMATRIX_CREATE ||\n permission === PERMISSIONS.QMATRIX_DELETE\n );\n }\n\n get isGlobalAdmin(): boolean {\n let value = this.account?.hasPermission(PERMISSIONS.SYSUSER) || false;\n return value;\n }\n\n // Permission computed properties\n get canCreatePQR(): boolean {\n return this._hasPermission(PERMISSIONS.PQR_CREATE);\n }\n\n get canDeletePQR(): boolean {\n return this._hasPermission(PERMISSIONS.PQR_DELETE);\n }\n\n get canCreateWPSFromPQR(): boolean {\n return this._hasPermission(PERMISSIONS.PQR_CREATE_WPS);\n }\n\n get canEditPQRApprovalRange(): boolean {\n return this._hasPermission(PERMISSIONS.PQR_EDIT_APPROVAL_RANGE);\n }\n\n get canCreateWPS(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_CREATE);\n }\n\n get canCreateRevisionWPS(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_CREATE_REVISION);\n }\n\n get canDeleteWPS(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_DELETE);\n }\n\n get canAssignStaffWPS(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_ASSIGN_STAFF);\n }\n\n get canCreateCertificate(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_CERTIFICATE_CREATE);\n }\n\n get canDeleteCertificate(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_CERTIFICATE_DELETE);\n }\n\n get canArchiveCertificate(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_CERTIFICATE_ARCHIVE);\n }\n\n get canRevalidateCertificate(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_CERTIFICATE_REVALIDATE) || this.isCollaborator;\n }\n\n get canEditCertificateApprovalRange(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_CERTIFICATE_EDIT_APPROVAL_RANGE);\n }\n\n get canCreateWeldingBook(): boolean {\n return this._hasPermission(PERMISSIONS.WELDING_BOOK_CREATE);\n }\n\n get canArchiveWeldingBook(): boolean {\n return this._hasPermission(PERMISSIONS.WELDING_BOOK_ARCHIVE);\n }\n\n get canCreateWeldingBookRevision(): boolean {\n return this._hasPermission(PERMISSIONS.WELDING_BOOK_CREATE_REVISION);\n }\n\n get canVerifyWeldingBook(): boolean {\n return this._hasPermission(PERMISSIONS.WELDING_BOOK_VERIFY);\n }\n\n get canApproveWeldingBook(): boolean {\n return this._hasPermission(PERMISSIONS.WELDING_BOOK_APPROVE);\n }\n\n get canDeleteWeldingBook(): boolean {\n return this._hasPermission(PERMISSIONS.WELDING_BOOK_DELETE);\n }\n\n get canCreateFillerMaterial(): boolean {\n return this._hasPermission(PERMISSIONS.FILLER_MATERIAL_CREATE);\n }\n\n get canDeleteFillerMaterial(): boolean {\n return this._hasPermission(PERMISSIONS.FILLER_MATERIAL_DELETE);\n }\n\n get canCreateBaseMaterial(): boolean {\n return this._hasPermission(PERMISSIONS.BASE_MATERIAL_CREATE);\n }\n\n get canDeleteBaseMaterial(): boolean {\n return this._hasPermission(PERMISSIONS.BASE_MATERIAL_DELETE);\n }\n\n get canCreateWelder(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_CREATE);\n }\n\n get canDeleteWelder(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_DELETE);\n }\n\n get isAccountAdmin(): boolean {\n return this._hasPermission(PERMISSIONS.ACCOUNT_ADMIN);\n }\n\n get canCreateGeneralDrawing(): boolean {\n return this.canSave || this.isCollaborator;\n }\n\n get canCreateComponentDrawing(): boolean {\n return this.canSave || this.isCollaborator;\n }\n\n get canCreateWeldSketch(): boolean {\n return this.canSave || this.isCollaborator;\n }\n\n // Collaborators may only edit the weld sketches they created themselves\n canEditWeldSketch(createdById?: string | number | null): boolean {\n if (this.canSave) {\n return true;\n }\n if (this.isCollaborator) {\n return !isEmpty(createdById) && `${createdById}` === `${this.accountId}`;\n }\n return false;\n }\n\n get canArchivePQR(): boolean {\n return this._hasPermission(PERMISSIONS.PQR_ARCHIVE);\n }\n\n get canArchiveWPS(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_ARCHIVE);\n }\n\n get canArchiveWelder(): boolean {\n return this._hasPermission(PERMISSIONS.WELDER_ARCHIVE);\n }\n\n get canArchiveProject(): boolean {\n return this._hasPermission(PERMISSIONS.PROJECT_ARCHIVE);\n }\n\n get canVerifyWps(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_VERIFY);\n }\n\n get canApproveWps(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_APPROVE);\n }\n\n get canRevokeWps(): boolean {\n return this._hasPermission(PERMISSIONS.WPS_REVOKE);\n }\n\n get canSave(): boolean {\n return this._hasPermission(PERMISSIONS.GENERIC_WRITE_PERMISSION);\n }\n\n get canCreateQMatrix(): boolean {\n return this._hasPermission(PERMISSIONS.QMATRIX_CREATE);\n }\n\n // End Permissions\n\n @computed('applications.@each')\n get hasProductivity() {\n let { applications } = this;\n if (applications) {\n for (let i = 0; i < applications.length; i++) {\n if (applications[i] === 'weldcloud') {\n return true;\n }\n }\n }\n return false;\n }\n\n get isMetricSystem() {\n return this.account?.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperialSystem() {\n return this.account?.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get unitSystem(): string | undefined {\n return this.account?.unitSystem;\n }\n\n get isAccountLocked() {\n return this.account?.accountLocked;\n }\n\n get subscriptionInfo() {\n return this.account?.subscriptionInfo;\n }\n\n get temperatureUnit() {\n if (this.isMetricSystem) {\n return UNITS.CELSIUS;\n } else if (this.isImperialSystem) {\n return UNITS.FAHRENHEIT;\n }\n return '';\n }\n\n get distanceUnit() {\n if (this.isMetricSystem) {\n return this.intl.t(`lov.units.${UNITS.MILLIMETER}`);\n } else if (this.isImperialSystem) {\n return this.intl.t(`lov.units.${UNITS.INCH}`);\n }\n return '';\n }\n\n get flowUnit(): string {\n if (this.isMetricSystem) {\n return UNITS.LITER_MINUTE;\n } else if (this.isImperialSystem) {\n return UNITS.CUBIC_FEET_HOUR;\n }\n return '';\n }\n\n get heatDistanceUnit() {\n if (this.isMetricSystem) {\n return this.intl.t(`lov.units.${UNITS.KILO_JOULE_MILLIMETER}`);\n } else if (this.isImperialSystem) {\n return this.intl.t(`lov.units.${UNITS.KILO_JOULE_INCH}`);\n }\n return '';\n }\n\n get wireSpeedUnit() {\n if (this.isMetricSystem) {\n return this.intl.t(`lov.units.${UNITS.METER_MINUTE}`);\n } else if (this.isImperialSystem) {\n return this.intl.t(`lov.units.${UNITS.INCH_MINUTE}`);\n }\n return '';\n }\n\n get travelSpeedUnit() {\n if (this.isMetricSystem) {\n return this.intl.t(`lov.units.${UNITS.MILLIMETER_MINUTE}`);\n } else if (this.isImperialSystem) {\n return this.intl.t(`lov.units.${UNITS.INCH_MINUTE}`);\n }\n return '';\n }\n\n get forceUnit() {\n if (this.isMetricSystem) {\n return UNITS.NEWTON;\n } else if (this.isImperialSystem) {\n return UNITS.POUNDS;\n }\n return '';\n }\n\n get areaUnit() {\n if (this.isMetricSystem) {\n return UNITS.SQUARE_MILLIMETER;\n } else if (this.isImperialSystem) {\n return UNITS.SQUARE_INCH;\n }\n return '';\n }\n\n get pressureUnit() {\n if (this.isMetricSystem) {\n return UNITS.NEWTON_SQUARE_MILIMETER;\n } else if (this.isImperialSystem) {\n return UNITS.PSI;\n }\n return '';\n }\n\n get energyUnit() {\n if (this.isMetricSystem) {\n return UNITS.JOULE;\n } else if (this.isImperialSystem) {\n return UNITS.FEET_PER_POUND;\n }\n return '';\n }\n\n async reloadUser() {\n let account: Account = await this.data.loadCurrentUser();\n set(this, 'account', account);\n this.intl.setLocale(account.language || 'en-us');\n }\n\n hasFeature(name: string) {\n let collection = get(this, 'features');\n\n if (isEmpty(collection) || isEmpty(name)) {\n return false;\n }\n\n return collection.includes(name);\n }\n\n isAllowedByPlan(activity = '') {\n let plan = this.account?.subscriptionPlan;\n let planVerifier = planResolver(plan);\n return planVerifier(activity);\n }\n\n get isPlanWpsOnly() {\n return this.account?.subscriptionPlan === WELDNOTE_PLANS.WPS_ONLY;\n }\n\n get isPlanCertificates() {\n return this.account?.subscriptionPlan === WELDNOTE_PLANS.CERTIFICATES;\n }\n\n @computed('account.{subscriptionPlan,isTrial}')\n get isPlanQuality() {\n return this.account?.isTrial || this.account?.subscriptionPlan === WELDNOTE_PLANS.QUALITY;\n }\n\n get permissionsLink(): string {\n return `${ENV.esabCloudLink}/settings/groups`;\n }\n\n get personnelLink(): string {\n return `${ENV.esabCloudLink}/settings/personnel`;\n }\n\n get sitesLink(): string {\n return `${ENV.esabCloudLink}/settings/sites`;\n }\n\n get profileLink(): string {\n return `${ENV.esabCloudLink}/settings/my-settings`;\n }\n\n get customerSupportLink(): string {\n return `${ENV.esabCloudLink}/settings/customer-support`;\n }\n}\n","import Service from '@ember/service';\n\nexport default class WeldSearchParametersService extends Service {\n parameters = new Map();\n\n updateParameters(projectId, projectParameters) {\n this.parameters.set(projectId, projectParameters);\n }\n\n hasParameters(projectId) {\n return this.parameters.has(projectId);\n }\n\n deleteParameters(projectId) {\n this.parameters.delete(projectId);\n }\n\n getParametersForProject(projectId) {\n if (this.parameters.has(projectId)) {\n return this.parameters.get(projectId);\n }\n return null;\n }\n}\n","import Service, { service } from '@ember/service';\nimport { AjaxServiceClass } from 'ember-ajax/services/ajax';\nimport ENV from 'weldnote/config/environment';\nimport fetch from 'fetch';\n\nexport declare interface PowerSourceList {\n total: number;\n list: PowerSource[];\n}\n\nexport declare interface PowerSource {\n id: string;\n displayName: string;\n}\n\nconst PAGE_SIZE = 20;\n\nexport default class WeldcloudData extends Service.extend({\n // anything which *must* be merged to prototype here\n}) {\n @service\n declare session: any;\n\n @service\n declare ajax: AjaxServiceClass;\n\n get queryHeaders(): any {\n return {\n Authorization: `Bearer ${this.get('session.session.authenticated.accessToken')}`,\n 'Ocp-Apim-Subscription-Key': ENV.azureSubscriptionManagementId,\n };\n }\n\n async listOfApplications() {\n let result = await fetch(`${ENV.orgApiUrl}/org/odata/users/me`, {\n headers: this.queryHeaders\n });\n let textResult = await result.text();\n let modules = JSON.parse(textResult)?.modules\n if (modules) {\n let applications = modules\n .split(',')\n .map((e: string) => e.toLowerCase())\n .map((e: String) => e.trim());\n return applications;\n }\n return [];\n }\n\n async queryMachines(filterName: string, page = 1): Promise {\n let filterQuery = `&$filter=indexof(displayName, '${filterName}') gt - 1`;\n let pagination = `&$top=${PAGE_SIZE}&$skip=${(page - 1) * PAGE_SIZE}`;\n if (!filterName) {\n filterQuery = '';\n }\n let result = await this.ajax.request(\n `${ENV.orgApiUrl}/org/odata/assets?$select=id,displayName&$count=true${filterQuery}${pagination}`,\n {\n headers: this.queryHeaders,\n }\n );\n if (result.value) {\n let { value } = result;\n let finalResult: PowerSource[] = [];\n value.forEach((powerSource: { id: any; displayName: any }) => {\n finalResult.push({\n id: powerSource.id,\n displayName: powerSource.displayName,\n });\n });\n let total = result['@odata.count'];\n return {\n total,\n list: finalResult,\n };\n } else {\n return {\n total: 0,\n list: [],\n };\n }\n }\n\n async getMachineNameById(machineId: string): Promise {\n if (!machineId) {\n return null;\n }\n let result = await this.ajax.request(\n `${ENV.orgApiUrl}/org/odata/assets/${machineId}?$select=displayName`,\n {\n headers: this.queryHeaders,\n }\n );\n return result;\n }\n // normal class body definition here\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'weldcloud-data': WeldcloudData;\n }\n}\n","import { task, timeout } from 'ember-concurrency';\nimport Service, { service } from '@ember/service';\nimport DS from 'ember-data';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport MutableArray from '@ember/array/mutable';\nimport { tracked } from '@glimmer/tracking';\nimport {\n isStandardASME,\n isStandardAWSB21,\n isStandardAWSD11,\n isStandardAWSD143,\n isWelderStandardISO14732,\n} from 'weldnote/utils/standards';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n isAutomaticMecanization,\n isMechanizedMecanization,\n} from 'weldnote/utils/rules/process-mecanization';\nimport {\n AutomaticArcVoltageControl,\n AutomaticJointTracking,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\nimport IntlService from 'ember-intl/services/intl';\nimport { WeldTypeGroup } from 'weldnote/config/types/weld-type-group';\nimport TestInspectionClass from 'weldnote/models/test-inspection-class';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport PqrStandard from 'weldnote/models/pqr-standard';\nimport WeldType from 'weldnote/models/weld-type';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FluxSpecification from 'weldnote/models/flux-specification';\nimport Staff from 'weldnote/models/staff';\nimport GasSpecification from 'weldnote/models/gas-specification';\nimport PreparationMethod from 'weldnote/models/preparation-method';\nimport PostWeldTreatmentMethod from 'weldnote/models/post-weld-treatment-method';\nimport WeldingResource from 'weldnote/models/welding-resource';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport Company from 'weldnote/models/company';\nimport ExaminingBody from 'weldnote/models/examining-body';\n\nconst {\n UNIT_SYSTEM\n} = Constants;\n\nexport default class WeldcloudNotesData extends Service.extend({\n // anything which *must* be merged to prototype here\n}) {\n @service\n declare store: DS.Store;\n\n @service\n declare intl: IntlService;\n\n @tracked\n private _welderStandards: WelderStandard[] = [];\n\n @tracked\n private _standards: PqrStandard[] = [];\n\n @tracked\n private _processMecanizations: ProcessMecanization[] = [];\n\n @tracked\n private _industryCodes: IndustryCode[] = [];\n\n @tracked\n private _weldTypes: WeldType[] = [];\n\n @tracked\n private _weldingProcesses: WeldingProcess[] = [];\n\n @tracked\n private _baseMaterialGroups: BaseMaterialGroup[] = [];\n\n @tracked\n private _fillerMaterialGroups: FillerMaterialGroup[] = [];\n\n @tracked\n private _arcTransferModes: ArcTransferMode[] = [];\n\n @tracked\n private _weldingDetails: WeldingDetail[] = [];\n\n @tracked\n private _weldingPositions: WeldingPosition[] = [];\n\n @tracked\n private _typeCurrentPolarities: TypeCurrentPolarity[] = [];\n\n @tracked\n private _electrodeTypes: ElectrodeType[] = [];\n\n @tracked\n private _fluxSpecifications: FluxSpecification[] = [];\n\n @tracked\n private _gasSpecifications: GasSpecification[] = [];\n\n @tracked\n private _preparationMethods: PreparationMethod[] = [];\n\n @tracked\n private _companies: Company[] = [];\n\n @tracked\n private _examiningBodies: ExaminingBody[] = [];\n\n @tracked\n private _postWeldHeatTreatmentMethods: PostWeldTreatmentMethod[] = [];\n\n @tracked\n private _staff: Staff[] = [];\n\n fetchAllData = task({ drop: true }, async () => {\n if (this.isPrimaryDataLoaded) {\n return;\n }\n await this.fetchIndustryCodes.perform();\n await this.fetchStandards.perform();\n await this.fetchWelderStandards.perform();\n await this.fetchWeldingData.perform();\n });\n\n fetchSecondaryData = task({ drop: true }, async () => {\n if (this.isSecondaryDataLoaded) {\n return;\n }\n await this.fetchStaff.perform();\n await this.fetchPreparationMethods.perform();\n await this.fetchExaminingBodies.perform();\n await this.fetchCompanies.perform();\n });\n\n get isPrimaryDataLoaded(): boolean {\n return (\n this.industryCodes.length > 0 &&\n this.pqrStandards.length > 0 &&\n this.welderStandards.length > 0 &&\n this.weldingDetails.length > 0 &&\n this.weldTypes.length > 0 &&\n this.baseMaterialGroups.length > 0 &&\n this.fillerMaterialGroups.length > 0 &&\n this.arcTransferModes.length > 0 &&\n this.electrodeTypes.length > 0 &&\n this.typeCurrentPolarities.length > 0 &&\n this.weldingProcesses.length > 0 &&\n this.processMecanizations.length > 0 &&\n this.gasSpecifications.length > 0 &&\n this.fluxSpecifications.length > 0 &&\n this.postWeldHeatTreatmentMethods.length > 0\n );\n }\n\n get isSecondaryDataLoaded(): boolean {\n return this.staff.length > 0 && this.preparationMethods.length > 0 && this.companies.length > 0;\n }\n\n fetchWelderStandards = task(\n {\n drop: true,\n },\n async () => {\n if (this._welderStandards?.length === 0) {\n let data: MutableArray = await this.store.query('welder-standard', {\n 'paging[limit]': 50,\n });\n let sortedStandards = data.slice().sort((a, b) => a.standard.localeCompare(b.standard));\n this._welderStandards = sortedStandards;\n return sortedStandards;\n }\n return this._welderStandards;\n }\n );\n\n fetchWeldingData = task(\n {\n drop: true,\n },\n async () => {\n let result: any = await this.store.findAll('welding-resource', {\n include:\n 'weld-types,arc-transfer-modes,welding-details,welding-positions,base-material-groups,base-material-groups.standard,base-material-groups.welder-standard,filler-material-groups,filler-material-groups.code,electrode-types,type-current-polarities,welding-processes,welding-processes.standard,welding-processes.welder-standard,process-mecanizations,preparation-methods,gas-specifications,flux-specifications,post-weld-heat-treatment-methods',\n });\n // This is really important, and while upgrade to Ember Data 4.8, \n // there was a change that said we should use regular array methods like [0] and not `firstObject`.\n // but once I had issues, and tests were not passing, I had to revert to using `firstObject`.\n let data: WeldingResource | undefined = result.firstObject;\n if (data) {\n this._weldTypes = data.weldTypes.slice();\n this._arcTransferModes = data.arcTransferModes.slice();\n this._weldingDetails = data.weldingDetails.slice();\n this._weldingPositions = data.weldingPositions.slice();\n this._baseMaterialGroups = data.baseMaterialGroups.slice();\n this._fillerMaterialGroups = data.fillerMaterialGroups.slice();\n this._electrodeTypes = data.electrodeTypes.slice();\n this._typeCurrentPolarities = data.typeCurrentPolarities.slice();\n this._weldingProcesses = data.weldingProcesses.slice();\n this._processMecanizations = data.processMecanizations.slice();\n this._preparationMethods = data.preparationMethods.slice();\n this._gasSpecifications = data.gasSpecifications.slice();\n this._fluxSpecifications = data.fluxSpecifications.slice();\n this._postWeldHeatTreatmentMethods = data.postWeldHeatTreatmentMethods.slice();\n }\n }\n );\n\n fetchStandards = task(\n {\n drop: true,\n },\n async () => {\n if (this._standards?.length === 0) {\n let data: MutableArray = await this.store.query('pqr-standard', {\n 'paging[limit]': 50,\n });\n let sortedStandards = data.slice().sort((a, b) => a.standard.localeCompare(b.standard));\n this._standards = sortedStandards;\n return sortedStandards;\n }\n return this._standards;\n }\n );\n\n fetchProcessMecanizations = task(\n {\n drop: true,\n },\n async () => {\n if (this._processMecanizations?.length === 0) {\n let data: MutableArray = await this.store.query(\n 'process-mecanization',\n { 'paging[limit]': 50 }\n );\n let sortedMecanizations = data.slice().sort((a, b) => a.name.localeCompare(b.name));\n this._processMecanizations = sortedMecanizations;\n return sortedMecanizations;\n }\n return this.processMecanizations;\n }\n );\n\n fetchPreparationMethods = task({ drop: true }, async () => {\n if (this._preparationMethods.length === 0) {\n let data = await this.store.query('preparation-method', { 'paging[limit]': 50 });\n let sortedData = data.slice().sort((a, b) => a.method.localeCompare(b.method));\n this._preparationMethods = sortedData;\n return sortedData;\n }\n return this._preparationMethods;\n });\n\n fetchCompanies = task({ drop: true }, async () => {\n if (this._companies.length === 0) {\n let data = await this.store.query('company', { 'paging[limit]': 50 });\n let sortedData = data.slice().sort((a, b) => a.name.localeCompare(b.name));\n this._companies = sortedData;\n return sortedData;\n }\n return this._companies;\n });\n\n fetchExaminingBodies = task({ drop: true }, async () => {\n if (this._examiningBodies.length === 0) {\n let data = await this.store.query('examining-body', { 'paging[limit]': 50 });\n let sortedData = data.slice().sort((a, b) => a?.name.localeCompare(b.name));\n this._examiningBodies = sortedData;\n return sortedData;\n }\n return this._examiningBodies;\n });\n\n fetchIndustryCodes = task(\n {\n drop: true,\n },\n async () => {\n if (this._industryCodes?.length === 0) {\n let data: MutableArray = await this.store.query('industry-code', {\n 'paging[limit]': 50,\n });\n let sortedIndustryCodes = data.slice().sort((a, b) => a.code.localeCompare(b.code));\n this._industryCodes = sortedIndustryCodes;\n return sortedIndustryCodes;\n }\n return this._industryCodes;\n }\n );\n\n fetchStaff = task({ drop: true }, async () => {\n let data = await this.store.query('staff', { 'paging[limit]': 300 });\n let sortedData = data.slice().sort((a, b) => a.name.localeCompare(b.name));\n this._staff = sortedData;\n return sortedData;\n });\n\n findWelder = task(\n {\n restartable: true,\n },\n async (options = {}) => {\n await timeout(250);\n let query: any = {};\n this._parsePagingInformation(query, options);\n if (options.name) {\n query['filter[welder-name]'] = options.name;\n query['filter[welder-stamp]'] = options.name;\n }\n if (options.company) {\n query['filter[company.id]'] = options.company;\n }\n if (options.type) {\n query['filter[person-type]'] = options.type;\n }\n\n return this.store.query('welder', query);\n }\n );\n\n get industryCodes(): IndustryCode[] {\n return this._industryCodes;\n }\n\n get welderStandards(): WelderStandard[] {\n return this._welderStandards;\n }\n\n get pqrStandards(): PqrStandard[] {\n return this._standards;\n }\n\n get weldTypes(): WeldType[] {\n return this._weldTypes;\n }\n\n get weldingProcesses(): WeldingProcess[] {\n return this._weldingProcesses;\n }\n\n get weldingPositions(): WeldingPosition[] {\n return this._weldingPositions;\n }\n\n get arcTransferModes(): ArcTransferMode[] {\n return this._arcTransferModes;\n }\n\n get baseMaterialGroups(): BaseMaterialGroup[] {\n return this._baseMaterialGroups;\n }\n\n get fillerMaterialGroups(): FillerMaterialGroup[] {\n return this._fillerMaterialGroups;\n }\n\n get weldingDetails(): WeldingDetail[] {\n return this._weldingDetails;\n }\n\n get electrodeTypes(): ElectrodeType[] {\n return this._electrodeTypes;\n }\n\n get typeCurrentPolarities(): TypeCurrentPolarity[] {\n return this._typeCurrentPolarities;\n }\n\n get welderCertificateStandards() {\n return this._welderStandards.filter((standard: WelderStandard) => {\n if (isWelderStandardISO14732(standard)) {\n return false;\n }\n return true;\n });\n }\n\n get weldingOperatorStandards() {\n return this._welderStandards.filter((standard) => {\n return (\n isWelderStandardISO14732(standard) ||\n isStandardASME(standard) ||\n isStandardAWSB21(standard) ||\n isStandardAWSD11(standard) ||\n isStandardAWSD143(standard)\n );\n });\n }\n\n get fluxSpecifications() {\n return this._fluxSpecifications;\n }\n\n get gasSpecifications() {\n return this._gasSpecifications;\n }\n\n get preparationMethods() {\n return this._preparationMethods;\n }\n\n get companies() {\n return this._companies;\n }\n\n get examiningBodies() {\n return this._examiningBodies;\n }\n\n get postWeldHeatTreatmentMethods() {\n return this._postWeldHeatTreatmentMethods;\n }\n\n get staff() {\n return this._staff;\n }\n\n findInspectionClasses = task(\n {\n drop: true,\n },\n async (term: string) => {\n await timeout(300);\n let data: MutableArray | null = await this.store.query(\n 'test-inspection-class',\n {\n 'filter[name]': term,\n include:\n 'test-inspection-class,test-inspection-class.stages,test-inspection-class.stages.location,test-inspection-class.stages.name,test-inspection-class.stages.tests.type-of-test',\n }\n );\n return data;\n }\n );\n\n get processMecanizations(): ProcessMecanization[] {\n return this._processMecanizations;\n }\n\n get processMecanizationsForWeldingOperators() {\n return this.processMecanizations?.filter(\n (mecanization) =>\n isAutomaticMecanization(mecanization) || isMechanizedMecanization(mecanization)\n );\n }\n\n get arcVoltageControlOptions() {\n let { intl } = this;\n let withLabel = intl.t('lov.arc-voltage.with');\n let withoutLabel = intl.t('lov.arc-voltage.without');\n return [\n {\n key: AutomaticArcVoltageControl.WITH,\n label: withLabel,\n },\n {\n key: AutomaticArcVoltageControl.WITHOUT,\n label: withoutLabel,\n },\n ];\n }\n\n get jointTrackingOptions() {\n let { intl } = this;\n let withLabel = intl.t('lov.joint-tracking.with');\n let withoutLabel = intl.t('lov.joint-tracking.without');\n return [\n {\n key: AutomaticJointTracking.WITH,\n label: withLabel,\n },\n {\n key: AutomaticJointTracking.WITHOUT,\n label: withoutLabel,\n },\n ];\n }\n\n get visualControlOptions() {\n let { intl } = this;\n let directLabel = intl.t('lov.visual-control.direct');\n let remoteLabel = intl.t('lov.visual-control.remote');\n return [\n {\n key: VisualControl.DIRECT,\n label: directLabel,\n },\n {\n key: VisualControl.REMOTE,\n label: remoteLabel,\n },\n ];\n }\n\n get weldingOperatorWeldingDetailsOptions() {\n let { intl } = this;\n let arcLabel = intl.t('lov.welding-detail-operator.arc');\n let jointLabel = intl.t('lov.welding-detail-operator.joint');\n let noneLabel = intl.t('lov.welding-detail-operator.none');\n return [\n {\n key: `${WeldingOperatorSpecificWeldingDetails.ARC}`,\n label: arcLabel,\n },\n {\n key: `${WeldingOperatorSpecificWeldingDetails.JOINT}`,\n label: jointLabel,\n },\n {\n key: `${WeldingOperatorSpecificWeldingDetails.NONE}`,\n label: noneLabel,\n },\n ];\n }\n\n get unitSystemOptions(): { key: string; label: string }[] {\n let { intl } = this;\n return [\n {\n key: UNIT_SYSTEM.IMPERIAL,\n label: intl.t('lov.unit-system.I')\n },\n {\n key: UNIT_SYSTEM.METRIC,\n label: intl.t('lov.unit-system.M')\n }\n ];\n }\n\n getUnitSystem(unitSystem: string) {\n if (!isEmpty(unitSystem)) {\n const option = this.unitSystemOptions.find(option => option.key === unitSystem);\n if (option) {\n return option;\n }\n }\n return null;\n }\n\n get weldTypeGroupsOptions() {\n let { intl } = this;\n return [\n {\n key: WeldTypeGroup.ALL,\n label: intl.t('lov.weld-type-group.ALL'),\n },\n {\n key: WeldTypeGroup.FULL_PENETRATION_BUTT_WELD,\n label: intl.t('lov.weld-type-group.FPBW'),\n },\n {\n key: WeldTypeGroup.PARTIAL_PENETRATION_BUTT_WELD,\n label: intl.t('lov.weld-type-group.PPBW'),\n },\n {\n key: WeldTypeGroup.FILLET_WELD,\n label: intl.t('lov.weld-type-group.FW'),\n },\n {\n key: WeldTypeGroup.OVERLAY_WELD,\n label: intl.t('lov.weld-type-group.OW'),\n },\n ];\n }\n\n bustStaffCache() {\n this._staff = [];\n this.fetchStaff.perform();\n }\n}\n\ndeclare module '@ember/service' {\n interface Registry {\n 'weldcloud-notes-data': WeldcloudNotesData;\n }\n}\n","import Service from '@ember/service';\nimport ENV from 'weldnote/config/environment';\n\nexport default class WeldcloudService extends Service {\n generateWpsLink(wpsId: string): string {\n return `${ENV.esabCloudLink}/productivity/weld-sessions/by-wps?selectedWPS=[\"${wpsId}\"]`;\n }\n\n generateWelderLink(welderId: string): string {\n return `${ENV.esabCloudLink}/productivity/weld-sessions/by-operator?selectedOperator=[\"${welderId}\"]`;\n }\n\n generateFleetMachineLink(id: string): string {\n return `${ENV.esabCloudLink}/fleet/machines/machines/${id}`;\n }\n\n getFleetMachinesLink(): string {\n return `${ENV.esabCloudLink}/fleet/machines/machines/`;\n }\n}\n","import classic from 'ember-classic-decorator';\nimport { computed } from '@ember/object';\nimport { alias, or } from '@ember/object/computed';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport { A } from '@ember/array';\nimport Constants from 'weldnote/utils/constants';\nimport { task, waitForProperty } from 'ember-concurrency';\n\nconst { WELDER_CERTIFICATE_REVALIDATION_DEADLINES } = Constants;\n\n@classic\nexport default class WelderCertificateDataService extends Service {\n @service\n session;\n\n @service\n userSession;\n\n @service\n ajax;\n\n @service\n intl;\n\n queryCertificateCount = task(async () => {\n await waitForProperty(this, 'userSession.isAccountLoaded', true);\n if (this.doesPlanAllowCertificates) {\n this.certificateInternallyToday.perform();\n this.certificateInternally30Days.perform();\n this.certificateInternallyExpired.perform();\n\n this.miscellaneousToday.perform();\n this.miscellaneous30Days.perform();\n this.miscellaneousExpired.perform();\n\n let result = await this.certificateInIsoCount.perform();\n if (!isEmpty(result) && parseInt(result.certificates, 10) > 0) {\n this.certificateExternallyToday.perform();\n this.certificateExternally30Days.perform();\n this.certificateExternallyExpired.perform();\n }\n }\n });\n\n certificateInternallyToday = task(async () => {\n let data = await this.getWelderCertificatesToInternallyValidateTodayCount();\n return data.count;\n });\n\n certificateInternally30Days = task(async () => {\n let data = await this.getWelderCertificatesToInternallyValidate30DaysCount();\n return data.count;\n });\n\n certificateInternallyExpired = task(async () => {\n let data = await this.getWelderCertificatesToInternallyValidateExpiredCount();\n return data.count;\n });\n\n certificateExternallyToday = task(async () => {\n let data = await this.getWelderCertificatesToExternallyValidateTodayCount();\n return data.count;\n });\n\n certificateExternally30Days = task(async () => {\n let data = await this.getWelderCertificatesToExternallyValidate30DaysCount();\n return data.count;\n });\n\n certificateExternallyExpired = task(async () => {\n let data = await this.getWelderCertificatesToExternallyValidateExpiredCount();\n return data.count;\n });\n\n miscellaneousToday = task(async () => {\n let data = await this.getMiscellaneousCertificatesExpireTodayCount();\n return data.count;\n });\n\n miscellaneous30Days = task(async () => {\n let data = await this.getMiscellaneousCertificatesExpire30DaysCount();\n return data.count;\n });\n\n miscellaneousExpired = task(async () => {\n let data = await this.getMiscellaneousCertificatesExpired();\n return data.count;\n });\n\n certificateInIsoCount = task(async () => {\n return await this.ajax.request('/grid/welder-certificate/isoCertificatesCount');\n });\n\n @computed('certificateInIsoCount.lastSuccessful.value')\n get hasCertificatesInIso() {\n let { lastSuccessful } = this.certificateInIsoCount;\n if (!isEmpty(lastSuccessful)) {\n let { value } = lastSuccessful;\n let certificateCount = parseInt(value.certificates, 10);\n if (!isNaN(certificateCount)) {\n return certificateCount > 0;\n }\n }\n return false;\n }\n\n @alias('certificateInternallyToday.isRunning')\n certificateInternallyTodayRunnning;\n\n @alias('certificateInternallyToday.lastSuccessful.value')\n certificateInternallyTodayCount;\n\n @alias('certificateInternally30Days.isRunning')\n certificateInternally30DaysRunnning;\n\n @alias('certificateInternally30Days.lastSuccessful.value')\n certificateInternally30DaysCount;\n\n @alias('certificateInternallyExpired.isRunning')\n certificateInternallyExpiredRunnning;\n\n @alias('certificateInternallyExpired.lastSuccessful.value')\n certificateInternallyExpiredCount;\n\n @alias('certificateExternallyToday.isRunning')\n certificateExternallyTodayRunnning;\n\n @alias('certificateExternallyToday.lastSuccessful.value')\n certificateExternallyTodayCount;\n\n @alias('certificateExternally30Days.isRunning')\n certificateExternally30DaysRunnning;\n\n @alias('certificateExternally30Days.lastSuccessful.value')\n certificateExternally30DaysCount;\n\n @alias('certificateExternallyExpired.isRunning')\n certificateExternallyExpiredRunnning;\n\n @alias('certificateExternallyExpired.lastSuccessful.value')\n certificateExternallyExpiredCount;\n\n @alias('miscellaneousToday.isRunning')\n miscellaneousTodayRunnning;\n\n @alias('miscellaneousToday.lastSuccessful.value')\n miscellaneousTodayCount;\n\n @alias('miscellaneous30Days.isRunning')\n miscellaneous30DaysRunnning;\n\n @alias('miscellaneous30Days.lastSuccessful.value')\n miscellaneous30DaysCount;\n\n @alias('miscellaneousExpired.isRunning')\n miscellaneousExpiredRunnning;\n\n @alias('miscellaneousExpired.lastSuccessful.value')\n miscellaneousExpiredCount;\n\n @or('userSession.isPlanQuality', 'userSession.isPlanCertificates')\n doesPlanAllowCertificates;\n\n @alias('certificateInternallyTodayCount')\n validateInternallyTodayCount;\n\n @alias('certificateInternally30DaysCount')\n validateInternally30DaysCount;\n\n @alias('certificateInternallyExpiredCount')\n validateInternallyExpiredCount;\n\n @alias('certificateExternallyTodayCount')\n validateExternallyTodayCount;\n\n @alias('certificateExternally30DaysCount')\n validateExternally30DaysCount;\n\n @alias('certificateExternallyExpiredCount')\n validateExternallyExpiredCount;\n\n @computed('intl.locale')\n get deadlineOptions() {\n let { intl } = this;\n return A([\n {\n key: WELDER_CERTIFICATE_REVALIDATION_DEADLINES.TODAY,\n label: intl.t('lov.welder-certificate-deadlines.today'),\n time: 1,\n },\n {\n key: WELDER_CERTIFICATE_REVALIDATION_DEADLINES.WEEK,\n label: intl.t('lov.welder-certificate-deadlines.7days'),\n time: 7,\n },\n {\n key: WELDER_CERTIFICATE_REVALIDATION_DEADLINES.MONTH,\n label: intl.t('lov.welder-certificate-deadlines.30days'),\n time: 30,\n },\n {\n key: WELDER_CERTIFICATE_REVALIDATION_DEADLINES.TWO_MONTH,\n label: intl.t('lov.welder-certificate-deadlines.60days'),\n time: 60,\n },\n {\n key: WELDER_CERTIFICATE_REVALIDATION_DEADLINES.THREE_MONTH,\n label: intl.t('lov.welder-certificate-deadlines.90days'),\n time: 90,\n },\n {\n key: WELDER_CERTIFICATE_REVALIDATION_DEADLINES.CUSTOM,\n label: intl.t('lov.welder-certificate-deadlines.custom'),\n time: null,\n },\n ]);\n }\n\n _requestData(url) {\n return this.ajax.request(url);\n }\n\n _getWelderCertificateData(type, options = {}) {\n let paging = '';\n let company = '';\n let url = `/api/grid/welder-certificate/${type}`;\n if (!isEmpty(options.page)) {\n paging = `?page=${options.page}`;\n }\n if (!isEmpty(options.company)) {\n company = `&filter[Company][id]=${options.company}`;\n }\n let finalUrl = `${url}${paging}${company}`;\n return this._requestData(finalUrl);\n }\n\n _getWelderCertificateDataCustom(type, options = {}) {\n let paging = '';\n let company = '';\n let url = `/api/grid/welder-certificate/${type}/custom/${options.deadlineTime}`;\n if (!isEmpty(options.page)) {\n paging = `?page=${options.page}`;\n }\n if (!isEmpty(options.company)) {\n company = `&filter[Company][id]=${options.company}`;\n }\n let finalUrl = `${url}${paging}${company}`;\n return this._requestData(finalUrl);\n }\n\n _getWelderCertificateDataCustomCount(type, deadlineTime) {\n let url = `/api/grid/welder-certificate/${type}/custom/${deadlineTime}/count`;\n return this._requestData(url);\n }\n\n _getMiscellaneousCertificateData(type, options = {}) {\n let paging = '';\n let company = '';\n let url = `/api/grid/miscellaneous-certificate/${type}`;\n if (!isEmpty(options.page)) {\n paging = `?page=${options.page}`;\n }\n if (!isEmpty(options.company)) {\n company = `&filter[Company][id]=${options.company}`;\n }\n let finalUrl = `${url}${paging}${company}`;\n return this._requestData(finalUrl);\n }\n\n // Gets certificates for internal validation for a custom period\n getWelderCertificatesToInternallyValidateCustom(options = {}) {\n return this._getWelderCertificateDataCustom('internal', options);\n }\n\n // Gets certificates for external validation for a custom period\n getWelderCertificatesToExternallyValidateCustom(options = {}) {\n return this._getWelderCertificateDataCustom('external', options);\n }\n\n getWelderCertificatesToInternallyValidateToday(options = {}) {\n options.deadlineTime = 1;\n return this.getWelderCertificatesToInternallyValidateCustom(options);\n }\n\n getWelderCertificatesToInternallyValidateTodayCount() {\n return this._getWelderCertificateDataCustomCount('internal', 1);\n }\n\n getWelderCertificatesToInternallyValidate30Days(options = {}) {\n options.deadlineTime = 30;\n return this.getWelderCertificatesToInternallyValidateCustom(options);\n }\n\n getWelderCertificatesToInternallyValidate30DaysCount() {\n return this._getWelderCertificateDataCustomCount('internal', 30);\n }\n\n getWelderCertificatesToInternallyValidateExpired(options = {}) {\n return this._getWelderCertificateData('internal/expired', options);\n }\n\n getWelderCertificatesToInternallyValidateExpiredCount() {\n return this._getWelderCertificateData('internal/expired?onlyCount=true');\n }\n\n getWelderCertificatesToExternallyValidateToday(options = {}) {\n options.deadlineTime = 1;\n return this.getWelderCertificatesToExternallyValidateCustom(options);\n }\n\n getWelderCertificatesToExternallyValidateTodayCount() {\n return this._getWelderCertificateDataCustomCount('external', 1);\n }\n\n getWelderCertificatesToExternallyValidate30Days(options = {}) {\n options.deadlineTime = 30;\n return this.getWelderCertificatesToExternallyValidateCustom(options);\n }\n\n getWelderCertificatesToExternallyValidate30DaysCount() {\n return this._getWelderCertificateDataCustomCount('external', 30);\n }\n\n getWelderCertificatesToExternallyValidateExpired(options) {\n return this._getWelderCertificateData('external/expired', options);\n }\n\n getWelderCertificatesToExternallyValidateExpiredCount() {\n return this._getWelderCertificateData('external/expired?onlyCount=true');\n }\n\n getWelderCertificatesArchived(options) {\n return this._getWelderCertificateData('archived', options);\n }\n\n getWelderCertificatesAll(options) {\n return this._getWelderCertificateData('all', options);\n }\n\n getMiscellaneousCertificatesExpired(options = {}) {\n return this._getMiscellaneousCertificateData('expired', options);\n }\n\n getMiscellaneousCertificatesExpiredCount(options = {}) {\n return this._getMiscellaneousCertificateData('expired?onlyCount=true', options);\n }\n\n getMiscellaneousCertificatesExpireToday(options = {}) {\n return this._getMiscellaneousCertificateData('expire/today', options);\n }\n\n getMiscellaneousCertificatesExpireTodayCount(options = {}) {\n return this._getMiscellaneousCertificateData('expire/today?onlyCount=true', options);\n }\n\n getMiscellaneousCertificatesExpire30Days(options = {}) {\n return this._getMiscellaneousCertificateData('expire/30days', options);\n }\n\n getMiscellaneousCertificatesExpire30DaysCount(options = {}) {\n return this._getMiscellaneousCertificateData('expire/30days?onlyCount=true', options);\n }\n\n getMiscellaneousCertificatesArchived(options = {}) {\n return this._getMiscellaneousCertificateData('archived', options);\n }\n\n clearCacheInternal() {\n this.certificateInternallyToday.perform();\n this.certificateInternally30Days.perform();\n this.certificateInternallyExpired.perform();\n }\n\n clearCacheExternal() {\n this.certificateExternallyToday.perform();\n this.certificateExternally30Days.perform();\n this.certificateExternallyExpired.perform();\n }\n\n clearCacheAll() {\n this.clearCacheInternal();\n this.clearCacheExternal();\n }\n\n clearMiscellaneousCache() {\n this.miscellaneousToday.perform();\n this.miscellaneous30Days.perform();\n this.miscellaneousExpired.perform();\n }\n}\n","import Service, { service } from '@ember/service';\nimport { tracked } from '@glimmer/tracking';\nimport { task, timeout } from 'ember-concurrency';\nimport { QUEUE_STATUS } from 'weldnote/utils/parse-queue-status';\n\n/**\n * Global service for monitoring welder certificate parsing queue status.\n * Polls the queue when there are tracked items and sends notifications\n * when items complete processing (PARSED or ERROR).\n */\nexport default class WelderCertificateParseMonitorService extends Service {\n @service welderCertificateParseQueue;\n @service alertMessage;\n @service intl;\n @service router;\n\n POLL_INTERVAL = 10000;\n NOTIFICATION_TIMEOUT = 10000;\n\n @tracked _notifiedItemIds = new Set();\n @tracked _processingItems = new Map();\n @tracked isMonitoring = false;\n\n trackItem(itemId, fileName) {\n this._processingItems.set(itemId, {\n fileName,\n status: QUEUE_STATUS.QUEUED,\n });\n this._processingItems = new Map(this._processingItems);\n\n if (!this.pollTask.isRunning) {\n this.pollTask.perform();\n }\n }\n\n untrackItem(itemId) {\n this._processingItems.delete(itemId);\n this._notifiedItemIds.delete(itemId);\n this._processingItems = new Map(this._processingItems);\n }\n\n clearAll() {\n this._processingItems.clear();\n this._notifiedItemIds.clear();\n this._processingItems = new Map(this._processingItems);\n this.pollTask.cancelAll();\n this.isMonitoring = false;\n }\n\n get hasItemsToTrack() {\n return this._processingItems.size > 0;\n }\n\n @task({ restartable: true })\n *pollTask() {\n this.isMonitoring = true;\n\n while (this.hasItemsToTrack) {\n yield timeout(this.POLL_INTERVAL);\n\n try {\n const items = yield this.welderCertificateParseQueue.listQueueItems();\n this._processCompletions(items);\n } catch {\n // Silently fail on polling errors\n }\n }\n\n this.isMonitoring = false;\n }\n\n _processCompletions(items) {\n const itemsById = new Map(items.map((item) => [item.id, item]));\n const completedParsed = [];\n const completedError = [];\n\n for (const [itemId, _trackedInfo] of this._processingItems) {\n const currentItem = itemsById.get(itemId);\n\n if (!currentItem) {\n this._processingItems.delete(itemId);\n continue;\n }\n\n if (this._isCompletedStatus(currentItem.status) && !this._notifiedItemIds.has(itemId)) {\n if (currentItem.status === QUEUE_STATUS.PARSED) {\n completedParsed.push(currentItem);\n } else if (currentItem.status === QUEUE_STATUS.ERROR) {\n completedError.push(currentItem);\n }\n\n this._notifiedItemIds.add(itemId);\n this._processingItems.delete(itemId);\n }\n }\n\n this._processingItems = new Map(this._processingItems);\n\n if (completedParsed.length > 0) {\n this._sendParsedNotification(completedParsed);\n }\n\n if (completedError.length > 0) {\n this._sendErrorNotification(completedError);\n }\n }\n\n _isCompletedStatus(status) {\n return status === QUEUE_STATUS.PARSED || status === QUEUE_STATUS.ERROR;\n }\n\n _sendParsedNotification(items) {\n let message;\n\n if (items.length === 1) {\n const item = items[0];\n const fileName =\n item.fileName ||\n this.intl.t('routes.digitalize-welder-certificate.notifications.unknown-file');\n message = this.intl.t('routes.digitalize-welder-certificate.notifications.parsed', {\n fileName,\n });\n } else {\n message = this.intl.t('routes.digitalize-welder-certificate.notifications.multiple-parsed', {\n count: items.length,\n });\n }\n\n this.alertMessage.success(message, '', {\n timeOut: this.NOTIFICATION_TIMEOUT,\n extendedTimeOut: 0,\n closeButton: true,\n onclick: () => {\n this.router.transitionTo('digitalize-welder-certificate');\n },\n });\n }\n\n _sendErrorNotification(items) {\n let message;\n\n if (items.length === 1) {\n const item = items[0];\n const fileName =\n item.fileName ||\n this.intl.t('routes.digitalize-welder-certificate.notifications.unknown-file');\n message = this.intl.t('routes.digitalize-welder-certificate.notifications.error', {\n fileName,\n errorMessage: item.errorMessage || '',\n });\n } else {\n message = this.intl.t('routes.digitalize-welder-certificate.notifications.multiple-errors', {\n count: items.length,\n });\n }\n\n this.alertMessage.error(message, '', {\n timeOut: this.NOTIFICATION_TIMEOUT,\n extendedTimeOut: 0,\n closeButton: true,\n onclick: () => {\n this.router.transitionTo('digitalize-welder-certificate');\n },\n });\n }\n}\n","import Service, { service } from '@ember/service';\nimport { AjaxServiceClass } from 'ember-ajax/services/ajax';\nimport type { WelderCertificateApprovePayload } from 'weldnote/components/digitalize-welder-certificate/types/welder-certificate-api-response-types';\nimport type {\n QueueFileResponse,\n QueueListResponse,\n QueueItem,\n RejectResponse,\n} from 'weldnote/utils/parse-queue-status';\n\nexport { QUEUE_STATUS, type QueueStatus, type QueueFileResponse, type QueueListResponse, type QueueItem } from 'weldnote/utils/parse-queue-status';\n\n/**\n * Response from `POST /welder-certificates/parse/queue/:guid/approve`.\n */\nexport interface WelderCertificateApproveResponse {\n status: string;\n createdWelderCertificateId: string;\n}\n\n/**\n * Service for managing the welder certificate parsing queue.\n * Uploaded welder certificate PDFs are parsed by AI into structured data,\n * then reviewed and approved by users to create welder certificate records.\n */\nexport default class WelderCertificateParseQueueService extends Service {\n @service declare ajax: AjaxServiceClass;\n\n async queueFile(\n fileId: number,\n fileName: string | null = null,\n industryCodeId: string | null = null,\n certificateType: string | null = null\n ): Promise {\n let payload: { fileId: number; fileName?: string; industryCodeId?: string; certificateType?: string } = { fileId };\n if (fileName) {\n payload.fileName = fileName;\n }\n if (industryCodeId) {\n payload.industryCodeId = industryCodeId;\n }\n if (certificateType) {\n payload.certificateType = certificateType;\n }\n\n return this.ajax.post('/welder-certificates/parse/queue', {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(payload),\n });\n }\n\n async listQueueItems(\n statusFilter: string[] | null = null,\n page: number = 1,\n pageSize: number = 20\n ): Promise {\n let url = '/welder-certificates/parse/queue';\n const params = new URLSearchParams();\n\n if (statusFilter && statusFilter.length > 0) {\n params.append('status', statusFilter.join(','));\n }\n params.append('page', String(page));\n params.append('pagesize', String(pageSize));\n\n const queryString = params.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n\n return this.ajax.request(url, {\n method: 'GET',\n });\n }\n\n async getQueueItem(guid: string): Promise {\n return this.ajax.request(`/welder-certificates/parse/queue/${guid}`, {\n method: 'GET',\n });\n }\n\n async approveItem(\n guid: string,\n data: WelderCertificateApprovePayload = {}\n ): Promise {\n const FIELD_NAMES: (keyof WelderCertificateApprovePayload)[] = [\n // Required fields\n 'standardId',\n 'unitSystem',\n 'certificateNumber',\n 'certificateType',\n // General Information\n 'companyId',\n 'examiningBodyId',\n 'emissionDate',\n 'welderId',\n 'wpsId',\n 'designation',\n 'testsConductedBy',\n 'notes',\n // Process details\n 'weldTypeId',\n 'productType',\n 'jointType',\n 'overlayType',\n // Welding Details (array of IDs)\n 'weldingDetailIds',\n // Process 1 (Root)\n 'weldingPositionRootId',\n 'weldingPositionRootDirection',\n 'weldingProcessRootId',\n 'processMecanizationRootId',\n 'arcTransferModeRootId',\n 'typeCurrentRootId',\n // Process 2 (Fill)\n 'weldingPositionFillId',\n 'weldingPositionFillDirection',\n 'weldingProcessFillId',\n 'processMecanizationFillId',\n 'arcTransferModeFillId',\n 'typeCurrentFillId',\n // Process 3 (Cap)\n 'weldingPositionCapId',\n 'weldingPositionCapDirection',\n 'weldingProcessCapId',\n 'processMecanizationCapId',\n 'arcTransferModeCapId',\n 'typeCurrentCapId',\n // Base Materials\n 'baseMaterial1Id',\n 'baseMaterial1Thickness',\n 'baseMaterial1Diameter',\n 'baseMaterial2Id',\n 'baseMaterial2Thickness',\n 'baseMaterial2Diameter',\n // Test piece thicknesses/diameter\n 'thicknessRootTestPiece',\n 'thicknessRootLayerTestPiece',\n 'thicknessFillTestPiece',\n 'thicknessFillLayerTestPiece',\n 'thicknessTotalTestPiece',\n 'thicknessCapTestPiece',\n 'thicknessCapLayerTestPiece',\n 'diameterTestPiece',\n // Filler Materials\n 'fillerMaterialRootId',\n 'fillerMaterialRootCommercialDesignationId',\n 'fillerMaterialFillId',\n 'fillerMaterialFillCommercialDesignationId',\n 'fillerMaterialCapId',\n 'fillerMaterialCapCommercialDesignationId',\n // Electrode Types\n 'electrodeTypeRootId',\n 'electrodeTypeFillId',\n 'electrodeTypeCapId',\n // Shielding Root\n 'shieldingRootType',\n 'shieldingRootGasId',\n 'shieldingRootGasCommercialDesignationId',\n 'shieldingRootGasMixture',\n 'shieldingRootFluxId',\n 'shieldingRootFluxCommercialDesignationId',\n 'flowRateRoot',\n // Shielding Fill\n 'shieldingFillType',\n 'shieldingFillGasId',\n 'shieldingFillGasCommercialDesignationId',\n 'shieldingFillGasMixture',\n 'shieldingFillFluxId',\n 'shieldingFillFluxCommercialDesignationId',\n 'flowRateFill',\n // Shielding Cap\n 'shieldingCapType',\n 'shieldingCapGasId',\n 'shieldingCapGasCommercialDesignationId',\n 'shieldingCapGasMixture',\n 'shieldingCapFluxId',\n 'shieldingCapFluxCommercialDesignationId',\n 'flowRateCap',\n // Backing\n 'backingTestPiece',\n 'backingGasId',\n 'backingGasCommercialDesignationId',\n 'backingGasMixture',\n 'backingFluxId',\n 'backingFluxCommercialDesignationId',\n 'backingFlowRateRoot',\n 'backingFlowRateFill',\n 'backingFlowRateCap',\n // NDT Tests\n 'visualTestResult',\n 'visualTestNumber',\n 'penetrantTestResult',\n 'penetrantTestNumber',\n 'magneticTestResult',\n 'magneticTestNumber',\n 'ultrasonicTestResult',\n 'ultrasonicTestNumber',\n 'radiographicTestResult',\n 'radiographicTestNumber',\n // Mechanical Tests\n 'tensileTestResult',\n 'tensileTestNumber',\n 'bendTestResult',\n 'bendTestNumber',\n 'macrographicTestResult',\n 'macrographicTestNumber',\n 'impactTestResult',\n 'impactTestNumber',\n 'fractureTestResult',\n 'fractureTestNumber',\n // Operator-specific fields\n 'arcLengthControlProcess1TestPiece',\n 'visualControlProcess1TestPiece',\n 'jointTrackingProcess1TestPiece',\n 'arcLengthControlProcess2TestPiece',\n 'visualControlProcess2TestPiece',\n 'jointTrackingProcess2TestPiece',\n 'arcLengthControlProcess3TestPiece',\n 'visualControlProcess3TestPiece',\n 'jointTrackingProcess3TestPiece',\n 'weldingOperatorWeldingDetailsProcess1TestPiece',\n 'weldingOperatorWeldingDetailsProcess2TestPiece',\n 'weldingOperatorWeldingDetailsProcess3TestPiece',\n ];\n\n const fieldSet = new Set(FIELD_NAMES as string[]);\n for (let key of Object.keys(data)) {\n if (!fieldSet.has(key)) {\n console.error(\n `[welder-certificate-parse-queue] approveItem received unknown field \"${key}\" — it will be ignored`\n );\n }\n }\n\n let payload: Partial = {};\n\n for (let field of FIELD_NAMES) {\n let value = data[field];\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n if (value.length > 0) {\n (payload as Record)[field] = value;\n }\n } else if (value !== '') {\n (payload as Record)[field] = value;\n }\n }\n }\n\n return this.ajax.post(`/welder-certificates/parse/queue/${guid}/approve`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(payload),\n });\n }\n\n async rejectItem(guid: string, reason: string | null = null): Promise {\n let payload: { reason?: string } = {};\n if (reason) {\n payload.reason = reason;\n }\n\n return this.ajax.post(`/welder-certificates/parse/queue/${guid}/reject`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(payload),\n });\n }\n\n async deleteItem(guid: string): Promise {\n return this.ajax.delete(`/welder-certificates/parse/queue/${guid}`);\n }\n\n async retryItem(guid: string): Promise {\n return this.ajax.post(`/welder-certificates/parse/queue/${guid}/retry`, {\n dataType: 'json',\n contentType: 'application/json',\n });\n }\n}\n","import { A } from '@ember/array';\nimport { computed, get, set } from '@ember/object';\nimport { alias, equal } from '@ember/object/computed';\nimport { debounce } from '@ember/runloop';\nimport Service, { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\nimport classic from 'ember-classic-decorator';\nimport { task, timeout } from 'ember-concurrency';\nimport RSVP from 'rsvp';\nimport Constants from 'weldnote/utils/constants';\nimport Http from 'weldnote/utils/http';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport CertificateRules from 'weldnote/utils/welder-certificate-rules';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\n\nconst { convertPaging, convertFilters } = Http;\n\nconst {\n OVERLAY_TYPE_OPTIONS,\n WELDING_POSITION_DIRECTION_OPTIONS,\n LAYER_OPTIONS,\n PRODUCT_TYPE,\n SHIELDING_OPTIONS,\n JOB_KNOWLEDGE_OPTIONS,\n WELDING_LAYER_OPTIONS,\n GROOVE_SHAPE_OPTIONS,\n JOINT_TYPE_OPTIONS,\n TEST_RESULTS,\n PROJECT_STATUS,\n BEND_TEST_TYPE,\n PRODUCT_FORM,\n FILLER_MATERIAL_ELECTRODE_FORM,\n FILLER_MATERIAL_GUIDE,\n DOCUMENT_TYPE_OPTIONS,\n ARCHIVAL_STATE,\n TYPE_OF_PERSON,\n COMPONENT_PROGRESS_STATE,\n NON_DESTRUCTIVE_TEST_TYPE,\n} = Constants;\n\nconst { PQR } = PQRRules;\n\nconst { WELDER_CERTIFICATE } = CertificateRules;\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\n@classic\nexport default class WeldnoteDataService extends Service {\n @service\n store;\n\n @service\n intl;\n\n @service\n ajax;\n\n @service\n userSession;\n\n @service\n weldcloudNotesData;\n\n companiesCache = [];\n\n companiesFetched = false;\n\n examiningBodiesCache = [];\n\n examiningBodiesFetched = false;\n\n specialRequirementsCache = [];\n\n specialRequirementsFetched = false;\n\n weldingBookStatusCache = [];\n\n weldingBookStatusFetched = false;\n\n rolesCache = [];\n\n rolesFetched = false;\n\n pageSize = 20;\n\n miscellaneousCertificateTypesCache = [];\n\n miscellaneousCertificateTypesFetched = false;\n\n constructionStandardsCache = [];\n\n constructionStandardsFetched = false;\n\n nonDestructiveTestsCache = [];\n\n nonDestructiveTestsFetched = false;\n\n loadCurrentUser() {\n // the \"mine\" account id is a special endpoint to retrieve current logged in user\n // due to some sort of issue with ember data (I believe) we use query record, but then define an adapter\n // that implements this and make a call to /accounts/mine\n // The issue was that sending two calls to that endpoint (even with options such as 'reload: true') would\n // always return the user from the cache, and we wanted to reload the user\n return this.store.queryRecord('account', {\n id: 'mine',\n include: 'roles,companiesSubscribed,features,roles.permissions,signature',\n });\n }\n\n get standardOptions() {\n return this.weldcloudNotesData.pqrStandards;\n }\n\n get welderStandardOptions() {\n return this.weldcloudNotesData.welderStandards;\n }\n\n get industryCodeOptions() {\n return this.weldcloudNotesData.industryCodes;\n }\n\n get processMecanizationOptions() {\n return this.weldcloudNotesData.processMecanizations;\n }\n\n get electrodeTypeOptions() {\n return this.weldcloudNotesData.electrodeTypes;\n }\n\n get arcTransferModeOptions() {\n return this.weldcloudNotesData.arcTransferModes;\n }\n\n get weldingDetailOptions() {\n return this.weldcloudNotesData.weldingDetails;\n }\n\n get weldingProcessOptions() {\n return this.weldcloudNotesData.weldingProcesses;\n }\n\n get weldingPositionOptions() {\n return this.weldcloudNotesData.weldingPositions;\n }\n\n get weldTypeOptions() {\n return this.weldcloudNotesData.weldTypes;\n }\n\n get typeCurrentPolarityOptions() {\n return this.weldcloudNotesData.typeCurrentPolarities;\n }\n\n get staffOptions() {\n return this.weldcloudNotesData.staff;\n }\n\n get postWeldTreatmentMethodOptions() {\n return this.weldcloudNotesData.postWeldHeatTreatmentMethods;\n }\n\n get preparationMethodOptions() {\n return this.weldcloudNotesData.preparationMethods;\n }\n\n get fluxSpecificationOptions() {\n return this.weldcloudNotesData.fluxSpecifications;\n }\n\n get gasSpecificationOptions() {\n return this.weldcloudNotesData.gasSpecifications;\n }\n\n get allBaseMaterialGroups() {\n return this.weldcloudNotesData.baseMaterialGroups;\n }\n\n get allFillerMaterialGroups() {\n return this.weldcloudNotesData.fillerMaterialGroups;\n }\n\n @computed('companiesCache.[]', 'companiesFetched')\n get companyOptions() {\n if (isEmpty(this.companiesCache) && !this.companiesFetched) {\n this.getCompanies().then((companies) => {\n if (companies && companies.sortBy) {\n set(\n this,\n 'companiesCache',\n companies.slice().sort((a, b) => {\n const nameA = a.get('name') || '';\n const nameB = b.get('name') || '';\n return nameA.localeCompare(nameB);\n })\n );\n set(this, 'companiesFetched', true);\n } else {\n set(this, 'companiesCache');\n set(this, 'companiesFetched', true);\n }\n });\n }\n return this.companiesCache;\n }\n\n @computed('staffPositionCache', 'staffPositionFetched')\n get staffPositionOptions() {\n if (isEmpty(this.staffPositionCache) && !this.staffPositionFetched) {\n this.getStaffPositions().then((staffPositions) => {\n set(this, 'staffPositionCache', staffPositions);\n set(this, 'staffPositionFetched', true);\n });\n }\n return this.staffPositionCache;\n }\n\n @computed('examiningBodiesCache.[]', 'examiningBodiesFetched')\n get examiningBodyOptions() {\n if (isEmpty(this.examiningBodiesCache) && !this.examiningBodiesFetched) {\n this.getExaminingBodies().then((examiningBodies) => {\n set(this, 'examiningBodiesCache', examiningBodies);\n set(this, 'examiningBodiesFetched', true);\n });\n }\n return this.examiningBodiesCache;\n }\n\n @computed('specialRequirementsCache', 'specialRequirementsFetched')\n get specialRequirementOptions() {\n if (isEmpty(this.specialRequirementsCache) && !this.specialRequirementsFetched) {\n this.getSpecialRequirements().then((requirements) => {\n set(this, 'specialRequirementsCache', requirements);\n set(this, 'specialRequirementsFetched', true);\n });\n }\n return this.specialRequirementsCache;\n }\n\n @computed('weldingBookStatusCache', 'weldingBookStatusFetched')\n get weldingBookStatusOptions() {\n if (isEmpty(this.weldingBookStatusCache) && !this.weldingBookStatusFetched) {\n this.getWeldingBookStatuses().then((status) => {\n set(this, 'weldingBookStatusCache', status);\n set(this, 'weldingBookStatusFetched', true);\n });\n }\n return this.weldingBookStatusCache;\n }\n\n @computed('rolesCache', 'rolesFetched')\n get roleOptions() {\n if (isEmpty(this.rolesCache) && !this.rolesFetched) {\n this.getRoles().then((roles) => {\n set(this, 'rolesCache', roles);\n set(this, 'rolesFetched', true);\n });\n }\n return this.rolesCache;\n }\n\n @computed('miscellaneousCertificateTypesCache', 'miscellaneousCertificateTypesFetched')\n get miscellaneousCertificateTypeOptions() {\n if (\n isEmpty(this.miscellaneousCertificateTypesCache) &&\n !this.miscellaneousCertificateTypesFetched\n ) {\n this.getMiscellaneousCertificateTypes().then((types) => {\n set(this, 'miscellaneousCertificateTypesCache', types);\n set(this, 'miscellaneousCertificateTypesFetched', true);\n });\n }\n return this.miscellaneousCertificateTypesCache;\n }\n\n @computed('constructionStandardsCache', 'constructionStandardsFetched')\n get constructionStandardOptions() {\n if (isEmpty(this.constructionStandardsCache) && !this.constructionStandardsFetched) {\n this.getConstructionStandards().then((standards) => {\n set(this, 'constructionStandardsCache', standards);\n set(this, 'constructionStandardsFetched', true);\n });\n }\n return this.constructionStandardsCache;\n }\n\n @computed('nonDestructiveTestsCache', 'nonDestructiveTestsFetched')\n get nonDestructiveTestOptions() {\n if (isEmpty(this.nonDestructiveTestsCache) && !this.nonDestructiveTestsFetched) {\n this.getNonDestructiveTests().then((tests) => {\n set(this, 'nonDestructiveTestsCache', tests);\n set(this, 'nonDestructiveTestsFetched', true);\n });\n }\n return this.nonDestructiveTestsCache;\n }\n\n filterBaseMaterialGroupsByIndustryCode(industryCode) {\n if (this.allBaseMaterialGroups.length > 0) {\n return this.allBaseMaterialGroups.filter((g) => {\n return get(g, 'code.id') === industryCode;\n });\n }\n return [];\n }\n\n @equal('companyOptions.length', 1)\n hasOnly1Company;\n\n @alias('companyOptions.firstObject')\n firstCompany;\n\n _parsePagingInformation(query, options) {\n convertPaging(query, options);\n }\n\n // Search Data\n searchExaminingBody(term) {\n return this.store.query('examining-body', { 'filter[name]': term });\n }\n\n searchWelder(term) {\n return this.store.query('welder', {\n 'filter[welder-name]': term,\n 'filter[person-type]': 'WELDER',\n });\n }\n\n searchWelderByStamp(term) {\n return this.store.query('welder', {\n 'filter[welder-stamp]': term,\n 'filter[person-type]': 'WELDER',\n });\n }\n\n searchGas(term) {\n return this.store.query('gas', { 'filter[symbol]': term });\n }\n\n searchGasOptions(options) {\n let query = {};\n if (options.symbol) {\n query['filter[symbol]'] = options.symbol;\n }\n if (options.symbolStrict) {\n query['filter[symbolStrict]'] = options.symbolStrict;\n }\n query.include = 'specification';\n return this.store.query('gas', query);\n }\n\n searchFlux(term) {\n return this.store.query('flux', { 'filter[flux]': term });\n }\n\n searchFluxByCode(term, code) {\n return this.store.query('flux', {\n 'filter[flux]': term,\n 'filter[code.id]': code,\n });\n }\n\n loadAllDataPQR(id) {\n return this.store.findRecord('pqr', id, {\n include:\n 'construction-standard,company,examining-body,shielding-root-gas-test-piece,shielding-root-gas-commercial-designation-test-piece,shielding-root-flux-test-piece,shielding-root-flux-commercial-designation-test-piece,shielding-fill-gas-test-piece,shielding-fill-gas-commercial-designation-test-piece,shielding-fill-flux-test-piece,shielding-fill-flux-commercial-designation-test-piece,backing-gas-test-piece,backing-gas-commercial-designation-test-piece,backing-flux-test-piece,backing-flux-commercial-designation-test-piece,post-weld-heat-treatment-method-test-piece,base-material1-test-document,base-material2-test-document,filler-material-root-test-document,filler-material-fill-test-document,filler-material-cap-test-document,visual-test-document,penetrant-test-document,magnetic-test-document,ultrasonic-test-document,radiographic-test-document,tensile-test-document,bend-test-document,macroscopic-test-document,impact-test-document,hardness-test-document,chemical-analysis-test-document,pqr-report-document,pqr-document,shielding-cap-gas-test-piece,shielding-cap-gas-commercial-designation-test-piece,shielding-cap-flux-test-piece,shielding-cap-flux-commercial-designation-test-piece,wps,written-by,weld-type-approval-range,welding-process-root-approval-range,welding-process-fill-approval-range,welding-details-test-piece,welding-details-approval-range,welding-position-root-approval-range,welding-position-fill-approval-range,arc-transfer-mode-root-approval-range,arc-transfer-mode-fill-approval-range,type-current-root-approval-range,type-current-fill-approval-range,base-material1-approval-range,base-material2-approval-range,preparation-methods-test-piece,filler-material-root-commercial-designation-approval-range,filler-material-fill-commercial-designation-approval-range,shielding-root-gas-approval-range,shielding-root-gas-commercial-designation-approval-range,shielding-root-flux-approval-range,shielding-root-flux-commercial-designation-approval-range,shielding-fill-gas-approval-range,shielding-fill-gas-commercial-designation-approval-range,shielding-fill-flux-approval-range,shielding-fill-flux-commercial-designation-approval-range,backing-gas-approval-range,backing-gas-commercial-designation-approval-range,backing-flux-approval-range,backing-flux-commercial-designation-approval-range,tensile-test-lines,bend-test-lines,impact-test-lines,hardness-test-lines,groove-designs,weld-layer-configurations,process-mecanization-root-approval-range,process-mecanization-fill-approval-range,welding-process-cap-approval-range,arc-transfer-mode-cap-approval-range,process-mecanization-cap-approval-range,welding-position-cap-approval-range,type-current-cap-approval-range,filler-material-cap-commercial-designation-approval-range,shielding-cap-gas-approval-range,shielding-cap-gas-commercial-designation-approval-range,shielding-cap-flux-approval-range,shielding-cap-flux-commercial-designation-approval-range,special-requirements,welders,welding-parameters',\n });\n }\n\n loadAllDataWPQ(id) {\n return this.store.findRecord('welder-certificate', id, {\n include:\n 'examining-body,welder,company,standard,construction-standard,welding-process-root-test-piece,welding-process-fill-test-piece,weld-type-test-piece,supplementary-fillet-weld-test,arc-transfer-mode-root-test-piece,arc-transfer-mode-fill-test-piece,welding-position-root-test-piece,welding-position-fill-test-piece,type-current-root-test-piece,type-current-fill-test-piece,base-material1-test-piece,base-material2-test-piece,filler-material-root-test-piece,filler-material-root-commercial-designation-test-piece,filler-material-fill-test-piece,filler-material-fill-commercial-designation-test-piece,electrode-type-root-test-piece,electrode-type-fill-test-piece,shielding-root-gas-test-piece,shielding-root-gas-commercial-designation-test-piece,shielding-root-flux-test-piece,shielding-root-flux-commercial-designation-test-piece,shielding-fill-gas-test-piece,shielding-fill-gas-commercial-designation-test-piece,shielding-fill-flux-test-piece,shielding-fill-flux-commercial-designation-test-piece,backing-gas-test-piece,backing-gas-commercial-designation-test-piece,backing-flux-test-piece,backing-flux-commercial-designation-test-piece,certificate-document,welding-process-cap-test-piece,arc-transfer-mode-cap-test-piece,welding-position-cap-test-piece,type-current-cap-test-piece,filler-material-cap-test-piece,filler-material-cap-commercial-designation-test-piece,electrode-type-cap-test-piece,shielding-cap-gas-test-piece,shielding-cap-gas-commercial-designation-test-piece,shielding-cap-flux-test-piece,shielding-cap-flux-commercial-designation-test-piece,certificate-report-document,penetrant-test-document,magnetic-test-document,ultrasonic-test-document,radiographic-test-document,visual-test-document,tensile-test-document,bend-test-document,macrographic-test-document,impact-test-document,fracture-test-document,wps,welding-detail-test-piece,welding-process-root-approval-range,welding-process-fill-approval-range,weld-type-approval-range,arc-transfer-mode-root-approval-range,arc-transfer-mode-fill-approval-range,welding-details-approval-range,welding-position-root-approval-range,welding-position-fill-approval-range,base-material1-approval-range,base-material2-approval-range,filler-material-root-approval-range,filler-material-fill-approval-range,filler-material-cap-approval-range,electrode-type-root-approval-range,electrode-type-fill-approval-range,welding-process-cap-approval-range,arc-transfer-mode-cap-approval-range,welding-position-cap-approval-range,electrode-type-cap-approval-range,special-requirements,revalidations,revalidations.revalidation-evidence-report1,revalidations.revalidation-evidence-report2,revalidations.supportingWelds,process-mecanization-root-test-piece,process-mecanization-fill-test-piece,process-mecanization-cap-test-piece,process-mecanization-root-approval-range,process-mecanization-fill-approval-range,process-mecanization-cap-approval-range,internal-auto-renew-supporting-welds,external-auto-renew-supporting-welds',\n });\n }\n\n loadAllDataWPS(id, { reload = false } = {}) {\n return this.store.findRecord('welding-procedure-specification', id, {\n reload,\n include:\n 'company,main-pqr,standard,weld-type,welding-process-root,welding-process-fill,welding-process-cap,base-material1,base-material2,process-mecanization-root,process-mecanization-fill,process-mecanization-cap,arc-transfer-mode-root,arc-transfer-mode-fill,arc-transfer-mode-cap,type-current-root,type-current-fill,type-current-cap,filler-material-root-commercial-designation,filler-material-fill-commercial-designation,filler-material-cap-commercial-designation,shielding-root-gas,shielding-root-gas-commercial-designation,shielding-root-flux,shielding-root-flux-commercial-designation,shielding-fill-gas,shielding-fill-gas-commercial-designation,shielding-fill-flux,shielding-fill-flux-commercial-designation,shielding-cap-gas,shielding-cap-gas-commercial-designation,shielding-cap-flux,shielding-cap-flux-commercial-designation,backing-gas,backing-gas-commercial-designation,backing-flux,backing-flux-commercial-designation,post-weld-heat-treatment-method,written-by,verified-by,approved-by,wps-document,master-wps,pqr-fill,pqr-cap,construction-standard,project-client,project,multiple-position-pqr-root,multiple-position-pqr-fill,multiple-position-pqr-cap,welding-positions-root,welding-positions-fill,welding-positions-cap,groove-designs,weld-layer-configurations,welding-details,secondary-pqrs,preparation-methods,special-requirements,welding-parameters,welding-parameters.source-parameter,welding-parameters.welding-process,welding-parameters.welding-positions,welding-parameters.arc-transfer-mode,welding-parameters.type-current,welding-parameters.filler-material-type,welding-parameters.welding-process,filler-material-root,filler-material-fill,filler-material-cap',\n });\n }\n\n loadAllDataWeldingBook(id) {\n return this.store.findRecord('welding-book', id, {\n include:\n 'wps,component-drawings,verified-by,written-by,approved-by,component,supplier,welding-project,welding-project.standard,status,standard,cover-image',\n\n reload: true,\n });\n }\n\n loadWeldingBookWelds(options, include = 'weldNumber') {\n let query = {};\n if (!options.weldingBook) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n\n query['filter[welding-book.id]'] = options.weldingBook;\n\n query.sort = 'weld-number';\n\n query.include = include;\n this._parsePagingInformation(query, options);\n\n return this.store.query('welding-book-weld', query);\n }\n\n loadAllDataComponentDrawing(id) {\n return this.store.findRecord('component-drawing', id, {\n include: 'referenced-drawing,drawing-content',\n });\n }\n\n loadAllDataProjectComponent(id) {\n return this.store.findRecord('project-component', id, {\n include: 'original-drawing,component-drawing,line-class',\n });\n }\n\n loadAllDataProjectWeld(id) {\n return this.store.findRecord('project-weld', id, {\n include:\n 'component,component.component-drawing,weld-type,wps,base-material1,tack-welder,welders-root-layer,welders-fill-layer,welders-cap-layer,inspections,inspections.test,inspections.report,inspections.test-stage-name,inspections.test-location,pwht-report,component.component-drawing,base-material1.base-material,base-material2,base-material2.base-material,specific-base-material1,specific-base-material1.base-material,specific-base-material2,specific-base-material2.base-material,filler-material-root,filler-material-root.filler-material,filler-material-fill,filler-material-fill.filler-material,filler-material-cap,filler-material-cap.filler-material,fitter,specific-filler-material-process1,specific-filler-material-process2,specific-filler-material-process3',\n\n reload: true,\n });\n }\n\n searchBaseMaterialGroup(term) {\n return this.store.query('base-material-group', {\n include: 'code',\n 'filter[group-name]': term,\n });\n }\n\n searchBaseMaterialSpecification(term) {\n return this.store.query('base-material-specification', {\n 'filter[specification]': term,\n });\n }\n\n searchBaseMaterialGrade(term) {\n return this.store.query('base-material-grade', { 'filter[grade]': term });\n }\n\n searchBaseMaterialGroupByCode(term, code, standard = null, welderStandard = null) {\n let options = {\n 'filter[group-name]': term,\n 'filter[code.id]': code,\n 'paging[limit]': 40,\n };\n if (standard != null) {\n options['filter[standard.id]'] = standard.id;\n }\n if (welderStandard != null) {\n options['filter[welder-standard.id]'] = welderStandard.id;\n }\n options.include = 'code';\n return this.store.query('base-material-group', options);\n }\n\n searchBaseMaterials(query) {\n return this.store.query('base-material', query);\n }\n\n searchBaseMaterialsWithQuery(options) {\n let query = {};\n if (options.industryCode) {\n query['filter[industry-code.id]'] = options.industryCode;\n }\n if (options.baseMaterialSpecification) {\n query['filter[specification.specification]'] = options.baseMaterialSpecification;\n }\n if (options.baseMaterialGrade) {\n query['filter[grade.grade]'] = options.baseMaterialGrade;\n }\n if (options.baseMaterialGroup) {\n query['filter[material-group.group-number]'] = options.baseMaterialGroup;\n }\n\n if (options.baseMaterialGroupStandard) {\n query['filter[standard.id]'] = options.baseMaterialGroupStandard;\n }\n\n if (options.baseMaterialGroupWelderStandard) {\n query['filter[welder-standard.id]'] = options.baseMaterialGroupWelderStandard;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('base-material', query);\n }\n\n searchFillerMaterialSpecification(term) {\n return this.store.query('filler-material-specification', {\n 'filter[specification]': term,\n });\n }\n\n searchFillerMaterialClassification(term) {\n return this.store.query('filler-material-classification', {\n 'filter[classification]': term,\n });\n }\n\n searchFillerMaterialGroup(term) {\n return this.store.query('filler-material-group', {\n 'filter[group-name]': term,\n });\n }\n\n searchFillerMaterialGroupByCode(term, code) {\n return this.store.query('filler-material-group', {\n 'filter[group-name]': term,\n 'filter[code.id]': code,\n });\n }\n\n searchFillerMaterials(query) {\n return this.store.query('filler-material', query);\n }\n\n searchFillerMaterialsWithQuery(options) {\n let query = {};\n if (options.industryCode) {\n query['filter[code.id]'] = options.industryCode;\n }\n if (options.specification) {\n query['filter[specification.specification]'] = options.specification;\n }\n if (options.classification) {\n query['filter[classification.classification]'] = options.classification;\n }\n if (options.group) {\n query['filter[group.group-number]'] = options.group;\n }\n if (options.process) {\n query['filter[welding-processes.id]'] = get(options, 'process.id');\n }\n this._parsePagingInformation(query, options);\n query.include = 'specification,classification,group';\n return this.store.query('filler-material', query);\n }\n\n searchAllFillerMaterialCommercialDesignationByFillerMaterial(fillerMaterialId) {\n let query = {};\n if (fillerMaterialId) {\n query['filter[filler-material.id]'] = fillerMaterialId;\n }\n query.include =\n 'filler-material,filler-material.specification,filler-material.classification,filler-material.group,filler-material.code';\n return this.store.query('filler-material-commercial-designation', query);\n }\n\n searchWelderCertificate(query) {\n return this.store.query('welder-certificate', query);\n }\n\n searchPQR(term) {\n return this.store.query('pqr', {\n 'filter[certificate-number]': term,\n });\n }\n\n searchPipingPieces(query) {\n return this.store.query('piping-piece', query);\n }\n\n searchPlatePieces(query) {\n return this.store.query('plate-piece', query);\n }\n\n searchWPS(term) {\n return this.store.query('welding-procedure-specification', {\n 'filter[wps-number]': term,\n });\n }\n\n searchWPSQuery(options) {\n let query = {};\n if (options.wpsNumber) {\n query['filter[wps-number]'] = options.wpsNumber;\n }\n if (options.standard) {\n query['filter[standard.id]'] = options.standard;\n }\n if (options.pqr) {\n query['filter[main-pqr.id]'] = options.pqr;\n }\n\n if (options.allPQR) {\n query['filter[allPQR]'] = options.allPQR;\n }\n\n if (options.projectAndPrimary) {\n query['filter[projectAndPrimary]'] = options.projectAndPrimary;\n }\n\n if (options.unitSystem) {\n query['filter[unit-system]'] = options.unitSystem;\n }\n\n this._parsePagingInformation(query, options);\n return this.store.query('welding-procedure-specification', query);\n }\n\n searchGasCommercialDesignationsByGases(gases) {\n let gasIds = gases.map((gas) => parseInt(gas.get('id'))).join(',');\n let jsonSerialization = JSON.stringify(gasIds);\n return this.store.query('gas-commercial-designation', {\n 'filter[gas.id][IN]': jsonSerialization,\n 'paging[limit]': 50,\n });\n }\n\n searchFluxCommercialDesignationsByFluxes(fluxes) {\n let fluxIds = fluxes.map((flux) => parseInt(flux.get('id'))).join(',');\n let jsonSerialization = JSON.stringify(fluxIds);\n return this.store.query('flux-commercial-designation', {\n 'filter[flux.id][IN]': jsonSerialization,\n 'paging[limit]': 50,\n });\n }\n\n searchDrawings(options) {\n let query = {};\n if (options.title) {\n query['filter[title]'] = options.title;\n }\n if (options.referenceNumber) {\n query['filter[reference-number]'] = options.referenceNumber;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('drawing', query);\n }\n\n searchGasesWithQuery(options) {\n let query = {};\n\n if (options.industryCode) {\n query['filter[code.id]'] = options.industryCode;\n }\n\n if (options.specification) {\n query['filter[specification.specification]'] = options.specification;\n }\n if (options.composition) {\n query['filter[composition]'] = options.composition;\n }\n if (options.symbol) {\n query['filter[symbol]'] = options.symbol;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('gas', query);\n }\n\n searchFluxesWithQuery(options) {\n let query = {};\n\n if (options.industryCode) {\n query['filter[code.id]'] = options.industryCode;\n }\n\n if (options.specification) {\n query['filter[specification.specification]'] = options.specification;\n }\n if (options.flux) {\n query['filter[flux]'] = options.flux;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('flux', query);\n }\n\n searchProjects(options) {\n let query = {};\n\n if (options.projectName) {\n query['filter[project-name]'] = options.projectName;\n }\n\n if (options.customer) {\n query['filter[[customer]'] = options.customer;\n }\n if (options.designation) {\n query['filter[designation]'] = options.designation;\n }\n\n if (options.supplier) {\n query['filter[supplier.id]'] = options.supplier;\n }\n\n if (options.unitSystem) {\n query['filter[unit-system]'] = options.unitSystem;\n }\n\n this._parsePagingInformation(query, options);\n return this.store.query('project', query);\n }\n\n getCompanies() {\n return this.store.query('company', { 'filter[is-deleted]': false, 'paging[limit]': 300 });\n }\n\n getWeldTypes() {\n return this.store.query('weld-type', { 'paging[limit]': 100 });\n }\n\n getStaffPositions() {\n return this.store.query('staff-position', { 'paging[limit]': 100 });\n }\n\n getPipingPieces() {\n return this.store.query('piping-piece', { 'paging[limit]': 10 });\n }\n\n getSpecialRequirements() {\n return this.store.query('certification-special-requirement', { 'paging[limit]': 100 });\n }\n\n getWeldingBookStatuses() {\n return this.store.query('welding-book-status', { 'paging[limit]': 100 });\n }\n\n getExaminingBodies() {\n return this.store.query('examining-body', { 'paging[limit]': 100 });\n }\n\n getRoles() {\n return this.store.findAll('role');\n }\n\n getMiscellaneousCertificateTypes() {\n return this.store.findAll('miscellaneous-certificate-type');\n }\n\n getConstructionStandards() {\n return this.store.findAll('construction-standard');\n }\n\n getProjectClients() {\n return this.store.query('project-client', { 'paging[limit]': 100 });\n }\n\n getNonDestructiveTests() {\n return this.store.query('non-destructive-testing', { 'paging[limit]': 100 });\n }\n\n getActionLogs(page, filters = {}) {\n let pageValue = parseInt(page, 10);\n if (isNaN(pageValue) || pageValue < 1) {\n pageValue = 1;\n }\n let { pageSize } = this;\n let offset = pageSize * (pageValue - 1);\n let query = { 'paging[offset]': offset, 'paging[limit]': pageSize };\n if (filters.startDate) {\n query['filter[start-date]'] = filters.startDate;\n }\n if (filters.endDate) {\n query['filter[end-date]'] = filters.endDate;\n }\n if (filters.createdBy) {\n query['filter[created-by]'] = filters.createdBy;\n }\n if (filters.instanceType) {\n query['filter[instance-type]'] = filters.instanceType;\n }\n if (filters.actionId) {\n query['filter[action-id]'] = filters.actionId;\n }\n return this.store.query('action-log', query);\n }\n\n getArcTransferModesByIndustryCode(industryCode) {\n return this.arcTransferModeOptions.filter((item) => {\n return item.get('industryCode.id') === industryCode;\n });\n }\n\n getAccounts() {\n if (get(this, 'userSession.isAccountAdmin')) {\n return this.ajax.request('/account-admin/accounts');\n }\n return [];\n }\n\n updateRole(accountId, roleId) {\n return this.ajax.put(`/account-admin/accounts/${accountId}/updateRole`, {\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({ roleId }),\n });\n }\n\n // Cache busters\n bustStaffPositionCache() {\n set(this, 'staffPositionCache', []);\n set(this, 'staffPositionFetched', false);\n }\n\n bustStaffCache() {\n this.weldcloudNotesData.bustStaffCache();\n }\n\n bustCompanyCache() {\n set(this, 'companiesCache', []);\n set(this, 'companiesFetched', false);\n }\n\n bustExaminingBodyCache() {\n set(this, 'examiningBodiesCache', []);\n set(this, 'examiningBodiesFetched', false);\n }\n\n bustSpecialRequirementsCache() {\n set(this, 'specialRequirementsCache', []);\n set(this, 'specialRequirementsFetched', false);\n }\n\n bustWeldingBookStatusCache() {\n set(this, 'weldingBookStatusCache', []);\n set(this, 'weldingBookStatusFetched', false);\n }\n\n bustConstructionStandardCache() {\n set(this, 'constructionStandardsCache', []);\n set(this, 'constructionStandardsFetched', false);\n }\n\n // Async Searches\n _searchBaseMaterialSpecification(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchBaseMaterialSpecification(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchBaseMaterialGrade(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchBaseMaterialGrade(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchBaseMaterialGroup(term, code, standard, welderStandard, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n if (!isEmpty(code)) {\n this.searchBaseMaterialGroupByCode(term, code, standard, welderStandard).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n } else {\n this.searchBaseMaterialGroup(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n }\n\n _searchFillerMaterialGroup(term, code, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n if (!isEmpty(code)) {\n this.searchFillerMaterialGroupByCode(term, code).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n } else {\n this.searchFillerMaterialGroup(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n }\n\n _searchFillerMaterialSpecification(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchFillerMaterialSpecification(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchFillerMaterialClassification(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchFillerMaterialClassification(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchWelderByStamp(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchWelderByStamp(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchWelderByName(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchWelder(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchGas(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchGas(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n _searchFlux(term, resolve, reject) {\n if (isEmpty(term)) {\n return resolve([]);\n }\n this.searchFlux(term).then(\n (data) => resolve(data),\n (err) => reject(err)\n );\n }\n\n findBaseMaterialSpecification(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchBaseMaterialSpecification, term, resolve, reject, 500);\n });\n }\n\n findBaseMaterialGrade(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchBaseMaterialGrade, term, resolve, reject, 500);\n });\n }\n\n findBaseMaterialGroup(term, code, standard = null, welderStandard = null) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(\n this,\n this._searchBaseMaterialGroup,\n term,\n code,\n standard,\n welderStandard,\n resolve,\n reject,\n 500\n );\n });\n }\n\n findFillerMaterialSpecification(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchFillerMaterialSpecification, term, resolve, reject, 500);\n });\n }\n\n findFillerMaterialClassification(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchFillerMaterialClassification, term, resolve, reject, 500);\n });\n }\n\n findFillerMaterialGroup(term, code) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchFillerMaterialGroup, term, code, resolve, reject, 500);\n });\n }\n\n findWelderByStamp(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchWelderByStamp, term, resolve, reject, 500);\n });\n }\n\n findWelderByName(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchWelderByName, term, resolve, reject, 500);\n });\n }\n\n findGas(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchGas, term, resolve, reject, 500);\n });\n }\n\n findFlux(term) {\n return new RSVP.Promise((resolve, reject) => {\n debounce(this, this._searchFlux, term, resolve, reject, 500);\n });\n }\n\n findProject(term) {\n let query = {\n 'filter[unit-system]': this.userSession.unitSystem,\n };\n query['filter[designation]'] = term;\n return this.store.query('project', query);\n }\n\n listAllGasCommercialDesignations(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (!isEmpty(filters)) {\n if (filters.commercialDesignation) {\n query['filter[commercial-designation]'] = filters.commercialDesignation;\n }\n if (filters.gas) {\n query['filter[gas.id]'] = filters.gas;\n }\n }\n query.include = 'gas';\n return this.store.query('gas-commercial-designation', query);\n }\n\n listAllFluxCommercialDesignations(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (!isEmpty(filters)) {\n if (filters.commercialDesignation) {\n query['filter[commercial-designation]'] = filters.commercialDesignation;\n }\n if (filters.flux) {\n query['filter[flux.id]'] = filters.flux;\n }\n if (filters.fluxName) {\n query['filter[flux.flux]'] = filters.fluxName;\n }\n }\n query.include = 'flux,flux.specification';\n return this.store.query('flux-commercial-designation', query);\n }\n\n listAllBaseMaterials(options = {}, filters = {}) {\n let query = {};\n this._parsePagingInformation(query, options);\n\n if (!isEmpty(filters)) {\n if (!isEmpty(filters.specification)) {\n query['filter[specification.specification]'] = filters.specification;\n }\n if (!isEmpty(filters.grade)) {\n query['filter[grade.grade]'] = filters.grade;\n }\n if (!isEmpty(filters.group)) {\n query['filter[material-group.group-number]'] = filters.group;\n }\n if (!isEmpty(filters.industryCode)) {\n query['filter[industry-code.id]'] = filters.industryCode;\n }\n }\n query.include = 'specification,grade,material-group,material-group.code,industry-code';\n return this.store.query('base-material', query);\n }\n\n listAllGases(options = {}, filters = {}) {\n let query = {};\n this._parsePagingInformation(query, options);\n if (!isEmpty(filters)) {\n if (filters.symbol) {\n query['filter[symbol]'] = filters.symbol;\n }\n if (filters.specification) {\n query['filter[specification.specification]'] = filters.specification;\n }\n }\n query.include = 'specification,code';\n return this.store.query('gas', query);\n }\n\n listAllNonDestructiveTesting(options = {}, filters = {}) {\n let query = {};\n this._parsePagingInformation(query, options);\n if (filters.desgination) {\n query['filter[desgination]'] = filters.desgination;\n }\n if (filters.shortDesignation) {\n query['filter[short-designation]'] = filters.shortDesignation;\n }\n\n return this.store.query('non-destructive-testing', query);\n }\n\n listAllFluxes(options = {}, filters = {}) {\n let query = {};\n if (!isEmpty(filters)) {\n if (filters.flux) {\n query['filter[flux]'] = filters.flux;\n }\n if (filters.specification) {\n query['filter[specification.specification]'] = filters.specification;\n }\n }\n this._parsePagingInformation(query, options);\n query.include = 'code,specification';\n return this.store.query('flux', query);\n }\n\n listAllBaseMaterialGroups(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[groupName]'] = options.sort.groupName;\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[group-name]'] = filters.name;\n }\n if (filters.code) {\n query['filter[code.id]'] = get(filters, 'code.id');\n }\n }\n\n query.include = 'code';\n return this.store.query('base-material-group', query);\n }\n\n listAllFillerMaterialGroups(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[group-name]'] = options.sort.groupName;\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[group-name]'] = filters.name;\n }\n if (filters.code) {\n query['filter[code.id]'] = get(filters, 'code.id');\n }\n }\n\n query.include = 'code';\n return this.store.query('filler-material-group', query);\n }\n\n listAllFillerMaterialSpecifications(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[specification]'] = options.sort.specification;\n }\n\n if (!isEmpty(filters)) {\n if (filters.specification) {\n query['filter[specification]'] = filters.specification;\n }\n }\n return this.store.query('filler-material-specification', query);\n }\n\n listAllFillerMaterialClassifications(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[classification]'] = options.sort.classification;\n }\n\n if (!isEmpty(filters)) {\n if (filters.classification) {\n query['filter[classification]'] = filters.classification;\n }\n }\n return this.store.query('filler-material-classification', query);\n }\n\n listAllFillerMaterialCommercialDesignations(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (!isEmpty(filters)) {\n if (filters.commercialDesignation) {\n query['filter[commercial-designation]'] = filters.commercialDesignation;\n }\n if (filters.specification) {\n query['filter[filler-material.specification.specification]'] = filters.specification;\n }\n\n if (filters.classification) {\n query['filter[filler-material.classification.classification]'] = filters.classification;\n }\n if (filters.group) {\n query['filter[filler-material.group.group-name]'] = filters.group;\n }\n if (filters.fillerMaterialId) {\n query['filter[filler-material.id]'] = filters.fillerMaterialId;\n }\n if (filters.industryCodeId) {\n query['filter[filler-material.code.id]'] = filters.industryCodeId;\n }\n }\n query.include =\n 'filler-material,filler-material.specification,filler-material.classification,filler-material.group,filler-material.code';\n return this.store.query('filler-material-commercial-designation', query);\n }\n\n listAllFillerMaterials(options = {}, filters = {}) {\n let query = {};\n this._parsePagingInformation(query, options);\n\n if (!isEmpty(filters)) {\n if (!isEmpty(filters.specification)) {\n query['filter[specification.specification]'] = filters.specification;\n }\n if (!isEmpty(filters.classification)) {\n query['filter[classification.classification]'] = filters.classification;\n }\n if (!isEmpty(filters.group)) {\n query['filter[group.group-number]'] = filters.group;\n }\n if (!isEmpty(filters.code)) {\n query['filter[code.id]'] = filters.code;\n }\n }\n query.include = 'specification,classification,group,code';\n return this.store.query('filler-material', query);\n }\n\n listAllQMatrix(options = {}, filters = {}) {\n let query = {};\n this._parsePagingInformation(query, options);\n if (!isEmpty(filters)) {\n if (!isEmpty(filters.designation)) {\n query['filter[designation]'] = filters.designation;\n }\n if (!isEmpty(filters.pqrStandard)) {\n query['filter[pqr-standard.id]'] = filters.pqrStandard;\n }\n if (!isEmpty(filters.wpsStandard)) {\n query['filter[wps-standard.id]'] = filters.wpsStandard;\n }\n if (!isEmpty(filters.certificateStandard)) {\n query['filter[certificate-standard.id]'] = filters.certificateStandard;\n }\n }\n query.include = 'pqr-standard,wps-standard,certificate-standard,company';\n return this.store.query('welding-map', query);\n }\n\n listAllExaminingBodies(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[name]'] = options.sort.name;\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[name]'] = filters.name;\n }\n }\n return this.store.query('examining-body', query);\n }\n\n listAllCompanies(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[name]'] = options.sort.name;\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[name]'] = filters.name;\n }\n }\n query.include = 'parent-company';\n query['filter[is-deleted]'] = false;\n return this.store.query('company', query);\n }\n\n listAllProjectClients(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n query['sort[name]'] = options.sort.name;\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[name]'] = filters.name;\n }\n }\n return this.store.query('project-client', query);\n }\n\n listAllTestStageNames(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n // we request test stage names to always be sorted by displayOrder\n query.sort = 'display-order';\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[name]'] = filters.name;\n }\n }\n return this.store.query('test-stage-name', query);\n }\n\n listAllPqrLearnedMappings(options = {}, filters = {}) {\n let query = {};\n query.include = 'industry-code';\n convertPaging(query, options);\n\n if (!isEmpty(filters)) {\n if (filters.entityType) {\n query['filter[entity-type]'] = filters.entityType;\n }\n if (filters.parsedValue) {\n query['filter[parsed-value]'] = filters.parsedValue;\n }\n if (filters.canonicalCode) {\n query['filter[canonical-code]'] = filters.canonicalCode;\n }\n if (filters.isVerified !== undefined && filters.isVerified !== null) {\n query['filter[is-verified]'] = filters.isVerified;\n }\n if (filters.industryCode) {\n query['filter[industry-code.id]'] = filters.industryCode;\n }\n }\n\n return this.store.query('pqr-learned-mapping', query);\n }\n\n listAllWpqLearnedMappings(options = {}, filters = {}) {\n let query = {};\n query.include = 'industry-code';\n convertPaging(query, options);\n\n if (!isEmpty(filters)) {\n if (filters.entityType) {\n query['filter[entity-type]'] = filters.entityType;\n }\n if (filters.parsedValue) {\n query['filter[parsed-value]'] = filters.parsedValue;\n }\n if (filters.canonicalCode) {\n query['filter[canonical-code]'] = filters.canonicalCode;\n }\n if (filters.isVerified !== undefined && filters.isVerified !== null) {\n query['filter[is-verified]'] = filters.isVerified;\n }\n if (filters.industryCode) {\n query['filter[industry-code.id]'] = filters.industryCode;\n }\n }\n\n return this.store.query('wpq-learned-mapping', query);\n }\n\n listAllTestLocations(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[name]'] = filters.name;\n }\n }\n return this.store.query('test-location', query);\n }\n\n listAllWelders(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n if (!isEmpty(options.sort.welderName)) {\n query['sort[welder-name]'] = options.sort.welderName;\n }\n if (!isEmpty(options.sort.welderStamp)) {\n query['sort[welder-stamp]'] = options.sort.welderStamp;\n }\n if (!isEmpty(options.sort.dateBirth)) {\n query['sort[date-birth]'] = options.sort.dateBirth;\n }\n }\n\n if (!isEmpty(filters)) {\n if (filters.welderName) {\n query['filter[welder-name]'] = filters.welderName;\n }\n if (filters.welderStamp) {\n query['filter[welder-stamp]'] = filters.welderStamp;\n }\n if (filters.company) {\n query['filter[company.id]'] = filters.company;\n }\n if (filters.archived) {\n query['filter[archival-state]'] = filters.archived;\n }\n if (filters.personType) {\n query['filter[person-type]'] = filters.personType;\n }\n }\n if (!filters.personType) {\n query['filter[person-type]'] = 'WELDER';\n }\n query.include = 'company';\n return this.store.query('welder', query);\n }\n\n listAllFitters(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n if (!isEmpty(options.sort.name)) {\n query['sort[fitter-name]'] = options.sort.name;\n }\n if (!isEmpty(options.sort.stamp)) {\n query['sort[fitter-stamp]'] = options.sort.stamp;\n }\n if (!isEmpty(options.sort.dateBirth)) {\n query['sort[date-birth]'] = options.sort.dateBirth;\n }\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[fitter-name]'] = filters.name;\n }\n if (filters.stamp) {\n query['filter[fitter-stamp]'] = filters.stamp;\n }\n if (filters.company) {\n query['filter[company.id]'] = filters.company;\n }\n }\n query.include = 'company';\n return this.store.query('fitter', query);\n }\n\n listAllInspectors(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (options.sort) {\n if (!isEmpty(options.sort.name)) {\n query['sort[inspector-name]'] = options.sort.name;\n }\n if (!isEmpty(options.sort.stamp)) {\n query['sort[inspector-stamp]'] = options.sort.stamp;\n }\n if (!isEmpty(options.sort.dateBirth)) {\n query['sort[date-birth]'] = options.sort.dateBirth;\n }\n }\n\n if (!isEmpty(filters)) {\n if (filters.name) {\n query['filter[inspector-name]'] = filters.name;\n }\n if (filters.stamp) {\n query['filter[inspector-stamp]'] = filters.stamp;\n }\n if (filters.examiningBody) {\n query['filter[examining-body.id]'] = filters.examiningBody;\n }\n }\n query.include = 'examining-body';\n return this.store.query('inspector', query);\n }\n\n listAllPipingPieces(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n let sort = [];\n if (get(options, 'sort.diameter')) {\n sort.push(get(options, 'sort.diameter'));\n }\n if (get(options, 'sort.diameterInches')) {\n sort.push(get(options, 'sort.diameterInches'));\n }\n if (get(options, 'sort.thickness')) {\n sort.push(get(options, 'sort.thickness'));\n }\n if (get(options, 'sort.thicknessInches')) {\n sort.push(get(options, 'sort.thicknessInches'));\n }\n if (get(options, 'sort.dn')) {\n sort.push(get(options, 'sort.dn'));\n }\n if (get(options, 'sort.schedule')) {\n sort.push(get(options, 'sort.schedule'));\n }\n\n if (!isEmpty(sort)) {\n query['sort='] = sort.join(',');\n }\n\n if (!isEmpty(filters)) {\n if (filters.diameter) {\n query['filter[diameter]'] = filters.diameter;\n }\n if (filters.diameterInches) {\n query['filter[diameter-inches]'] = filters.diameterInches;\n }\n if (filters.nominalDiameter) {\n query['filter[nominal-diameter]'] = filters.nominalDiameter;\n }\n if (filters.schedule) {\n query['filter[schedule]'] = filters.schedule;\n }\n if (filters.thickness) {\n query['filter[thickness]'] = filters.thickness;\n }\n if (filters.thicknessInches) {\n query['filter[thickness-inches]'] = filters.thicknessInches;\n }\n }\n\n return this.store.query('piping-piece', query);\n }\n\n listAllPlatePieces(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n let sort = [];\n if (get(options, 'sort.thicknessInches')) {\n sort.push(get(options, 'sort.thicknessInches'));\n }\n if (get(options, 'sort.thickness')) {\n sort.push(get(options, 'sort.thickness'));\n }\n\n if (!isEmpty(sort)) {\n query['sort='] = sort.join(',');\n }\n\n if (!isEmpty(filters)) {\n if (filters.thicknessInches) {\n query['filter[thickness-inches]'] = filters.thicknessInches;\n }\n if (filters.thickness) {\n query['filter[thickness]'] = filters.thickness;\n }\n }\n\n return this.store.query('plate-piece', query);\n }\n\n listAllWeldingProcesses(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (get(options, 'sort.shortDesignation')) {\n query['sort[short-designation]'] = get(options, 'sort.shortDesignation');\n }\n if (get(options, 'sort.processName')) {\n query['sort[process-name]'] = get(options, 'sort.processName');\n }\n\n if (!isEmpty(filters)) {\n if (filters.designation) {\n query['filter[short-designation]'] = filters.designation;\n }\n if (filters.name) {\n query['filter[process-name]'] = filters.name;\n }\n }\n\n return this.store.query('welding-process', query);\n }\n\n listAllWeldingPositions(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (get(options, 'sort.code')) {\n query['sort[code]'] = get(options, 'sort.code');\n }\n if (get(options, 'sort.industryCode')) {\n query['sort[industry-code.id]'] = get(options, 'sort.industryCode');\n }\n\n if (!isEmpty(filters)) {\n if (filters.code) {\n query['filter[code]'] = filters.code;\n }\n if (filters.industryCode) {\n query['filter[industry-code.id]'] = filters.industryCode;\n }\n }\n\n return this.store.query('welding-position', query);\n }\n\n listAllWeldTypes(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (get(options, 'sort.weldType')) {\n query['sort[weld-type]'] = get(options, 'sort.weldType');\n }\n if (get(options, 'sort.designation')) {\n query['sort[designation]'] = get(options, 'sort.designation');\n }\n\n if (!isEmpty(filters)) {\n if (filters.weldType) {\n query['filter[weld-type]'] = filters.weldType;\n }\n if (filters.designation) {\n query['filter[designation]'] = filters.designation;\n }\n }\n\n return this.store.query('weld-type', query);\n }\n\n listAllGrooveDesigns(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (filters.term) {\n query['filter[description]'] = filters.term;\n }\n if (filters.description) {\n query['filter[description]'] = filters.description;\n }\n if (filters.longDescription) {\n query['filter[long-description]'] = filters.longDescription;\n }\n if (filters.grooveType) {\n query['filter[grooveType]'] = filters.grooveType;\n }\n if (filters.weldType) {\n query['filter[weld-types.id]'] = filters.weldType;\n }\n if (filters.weldingDetails) {\n query['filter[welding-details.id][IN]'] = filters.weldingDetails;\n }\n if (filters.jointType) {\n query['filter[joint-type]'] = filters.jointType;\n }\n if (filters.latest) {\n query['filter[latest]'] = filters.latest;\n }\n if (filters.system) {\n query['filter[system]'] = filters.system;\n }\n return this.store.query('groove-design', query);\n }\n\n listAllWeldLayerConfigurations(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n if (filters.term) {\n query['filter[description]'] = filters.term;\n }\n if (filters.description) {\n query['filter[description]'] = filters.description;\n }\n if (filters.longDescription) {\n query['filter[long-description]'] = filters.longDescription;\n }\n if (filters.grooveType) {\n query['filter[groove-type]'] = filters.grooveType;\n }\n if (filters.weldType) {\n query['filter[weld-types.id]'] = filters.weldType;\n }\n if (filters.weldingDetails) {\n query['filter[welding-details.id][IN]'] = filters.weldingDetails;\n }\n if (filters.jointType) {\n query['filter[joint-type]'] = filters.jointType;\n }\n if (filters.latest) {\n query['filter[latest]'] = filters.latest;\n }\n if (filters.system) {\n query['filter[system]'] = filters.system;\n }\n if (options.fields) {\n query.fields = fields;\n }\n return this.store.query('weld-layer-configuration', query);\n }\n\n listAllWeldingBooks(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n let finalFilters = {};\n\n if (filters.designation) {\n finalFilters.designation = {\n value: filters.designation,\n type: 'startsWith',\n };\n }\n if (filters.weldingProject) {\n finalFilters.weldingProject = {\n value: filters.weldingProject,\n type: 'startsWith',\n };\n }\n if (filters.customer) {\n finalFilters.customer = {\n value: filters.customer,\n type: 'startsWith',\n };\n }\n if (filters.supplier) {\n finalFilters.supplier = {\n value: filters.supplier,\n type: 'eq',\n };\n }\n\n let archivalState = filters.archivalState;\n if (!isEmpty(archivalState)) {\n finalFilters.archivalState = { value: archivalState, type: 'eq' };\n } else {\n finalFilters.archivalState = { value: ARCHIVAL_STATE.ACTIVE, type: 'eq' };\n }\n\n convertFilters(query, finalFilters);\n return this.ajax.request('/grid/welding-book', {\n data: query,\n });\n }\n\n listAllPQR(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n let finalFilters = {};\n if (filters.certificateNumber) {\n finalFilters.certificateNumber = {\n value: filters.certificateNumber,\n type: 'startsWith',\n };\n }\n\n if (options.sort) {\n if (options.sort.certificateNumber) {\n query['sort[0][field]'] = 'certificateNumber';\n query['sort[0][dir]'] = options.sort.certificateNumber;\n }\n }\n\n if (options.userSearch) {\n finalFilters.userSearch = { value: true, type: 'eq' };\n }\n\n let weldType = get(filters, PQR.WELDTYPE_TESTPIECE);\n if (weldType) {\n finalFilters[PQR.WELDTYPE_TESTPIECE] = { value: weldType, type: 'eq' };\n }\n\n let standard = get(filters, PQR.STANDARD);\n if (standard) {\n finalFilters[PQR.STANDARD] = { value: standard, type: 'eq' };\n }\n\n let company = get(filters, PQR.COMPANY);\n if (company) {\n finalFilters[PQR.COMPANY] = { value: company, type: 'eq' };\n }\n\n let constructionStandard = get(filters, PQR.CONSTRUCTION_STANDARD);\n if (constructionStandard) {\n finalFilters[PQR.CONSTRUCTION_STANDARD] = { value: constructionStandard, type: 'eq' };\n }\n\n let productType = get(filters, PQR.PRODUCT_TYPE_TESTPIECE);\n if (productType) {\n finalFilters[PQR.PRODUCT_TYPE_TESTPIECE] = { value: productType, type: 'eq' };\n }\n\n let processRoot = get(filters, PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n if (processRoot) {\n finalFilters[PQR.WELDING_PROCESS_ROOT_TESTPIECE] = { value: processRoot, type: 'eq' };\n }\n\n let processFIll = get(filters, PQR.WELDING_PROCESS_FILL_TESTPIECE);\n if (processFIll) {\n finalFilters[PQR.WELDING_PROCESS_FILL_TESTPIECE] = { value: processFIll, type: 'eq' };\n }\n\n let processCap = get(filters, PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n if (processCap) {\n finalFilters[PQR.WELDING_PROCESS_CAP_TEST_PIECE] = { value: processCap, type: 'eq' };\n }\n\n let examiningBody = get(filters, PQR.EXAMINING_BODY);\n if (examiningBody) {\n finalFilters[PQR.EXAMINING_BODY] = { value: examiningBody, type: 'eq' };\n }\n\n let baseMaterial1Instance = get(filters, PQR.BASE_MATERIAL1_TESTPIECE);\n if (baseMaterial1Instance) {\n finalFilters[PQR.BASE_MATERIAL1_TESTPIECE] = { value: baseMaterial1Instance, type: 'eq' };\n }\n\n let baseMaterial1Group = filters.baseMaterial1Group;\n if (baseMaterial1Group) {\n finalFilters.baseMaterial1Group = { value: baseMaterial1Group, type: 'eq' };\n }\n\n let baseMaterial2Instance = get(filters, PQR.BASE_MATERIAL2_TESTPIECE);\n if (baseMaterial2Instance) {\n finalFilters[PQR.BASE_MATERIAL2_TESTPIECE] = { value: baseMaterial2Instance, type: 'eq' };\n }\n\n let baseMaterial2Group = filters.baseMaterial2Group;\n if (baseMaterial2Group) {\n finalFilters.baseMaterial2Group = { value: baseMaterial2Group, type: 'eq' };\n }\n\n let fillerMaterialRoot = get(filters, PQR.FILLER_MATERIAL_ROOT_TESTPIECE);\n if (fillerMaterialRoot) {\n finalFilters[PQR.FILLER_MATERIAL_ROOT_TESTPIECE] = { value: fillerMaterialRoot, type: 'eq' };\n }\n\n let fillerMaterialFill = get(filters, PQR.FILLER_MATERIAL_FILL_TESTPIECE);\n if (fillerMaterialFill) {\n finalFilters[PQR.FILLER_MATERIAL_FILL_TESTPIECE] = { value: fillerMaterialFill, type: 'eq' };\n }\n\n let fillerMaterialCap = get(filters, PQR.FILLER_MATERIAL_CAP_TEST_PIECE);\n if (fillerMaterialCap) {\n finalFilters[PQR.FILLER_MATERIAL_CAP_TEST_PIECE] = { value: fillerMaterialCap, type: 'eq' };\n }\n\n let diameter = get(filters, PQR.DIAMETER_TESTPIECE);\n if (diameter) {\n finalFilters[PQR.DIAMETER_TESTPIECE] = { value: diameter, type: 'eq' };\n }\n\n let thickness = get(filters, PQR.THICKNESS_TOTAL_TESTPIECE);\n if (thickness) {\n finalFilters[PQR.THICKNESS_TOTAL_TESTPIECE] = { value: thickness, type: 'eq' };\n }\n\n let positionRoot = get(filters, PQR.WELDING_POSITION_ROOT_TESTPIECE);\n if (positionRoot) {\n finalFilters[PQR.WELDING_POSITION_ROOT_TESTPIECE] = { value: positionRoot, type: 'eq' };\n }\n\n let positionFill = get(filters, PQR.WELDING_POSITION_FILL_TESTPIECE);\n if (positionFill) {\n finalFilters[PQR.WELDING_POSITION_FILL_TESTPIECE] = { value: positionFill, type: 'eq' };\n }\n\n let positionCap = get(filters, PQR.WELDING_POSITION_CAP_TEST_PIECE);\n if (positionCap) {\n finalFilters[PQR.WELDING_POSITION_CAP_TEST_PIECE] = { value: positionCap, type: 'eq' };\n }\n\n let branchAngle = get(filters, PQR.BRANCH_ANGLE_TESTPIECE);\n if (branchAngle) {\n finalFilters[PQR.BRANCH_ANGLE_TESTPIECE] = { value: branchAngle, type: 'eq' };\n }\n\n let heatInput = filters.heatInputTestPiece;\n if (heatInput) {\n finalFilters.heatInputTestPiece = { value: heatInput, type: 'eq' };\n }\n\n let preHeat = get(filters, PQR.PREHEAT_TEMPERATURE_TESTPIECE);\n if (preHeat) {\n finalFilters[PQR.PREHEAT_TEMPERATURE_TESTPIECE] = { value: preHeat, type: 'eq' };\n }\n\n let pwht = get(filters, PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE);\n if (pwht) {\n finalFilters[PQR.POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE] = {\n value: pwht,\n type: 'eq',\n };\n }\n\n let thicknessRoot = get(filters, PQR.THICKNESS_ROOT_TESTPIECE);\n if (thicknessRoot) {\n finalFilters[PQR.THICKNESS_ROOT_TESTPIECE] = { value: thicknessRoot, type: 'eq' };\n }\n\n let thicknessFill = get(filters, PQR.THICKNESS_FILL_TESTPIECE);\n if (thicknessFill) {\n finalFilters[PQR.THICKNESS_FILL_TESTPIECE] = { value: thicknessFill, type: 'eq' };\n }\n\n let thicknessCap = get(filters, PQR.THICKNESS_CAP_TEST_PIECE);\n if (thicknessCap) {\n finalFilters[PQR.THICKNESS_CAP_TEST_PIECE] = { value: thicknessCap, type: 'eq' };\n }\n\n let impactTemperature = get(filters, PQR.IMPACT_TEST_TEMPERATURE);\n if (impactTemperature) {\n finalFilters[PQR.IMPACT_TEST_TEMPERATURE] = { value: impactTemperature, type: 'eq' };\n }\n\n let hardnessRequirements = get(filters, PQR.HARDNESS_TEST_REQUIRED);\n if (hardnessRequirements) {\n finalFilters[PQR.HARDNESS_TEST_REQUIRED] = { value: hardnessRequirements, type: 'eq' };\n }\n\n let throatThickness = get(filters, PQR.THROAT_THICKNESS_TESTPIECE);\n if (throatThickness) {\n finalFilters[PQR.THROAT_THICKNESS_TESTPIECE] = { value: throatThickness, type: 'eq' };\n }\n\n let weldingDetails = get(filters, PQR.WELDING_DETAILS_TESTPIECE);\n if (weldingDetails) {\n finalFilters[PQR.WELDING_DETAILS_TESTPIECE] = { value: weldingDetails, type: 'eq' };\n }\n\n let specialRequirements = get(filters, PQR.SPECIAL_REQUIREMENTS);\n if (specialRequirements) {\n finalFilters[PQR.SPECIAL_REQUIREMENTS] = { value: specialRequirements, type: 'eq' };\n }\n\n let pwhtPresent = filters.pwhtPresence;\n if (!isEmpty(pwhtPresent)) {\n finalFilters.pwhtPresence = { value: pwhtPresent, type: 'eq' };\n }\n\n let fillerMaterialRootGroup = filters.fillerMaterialRootGroup;\n if (!isEmpty(fillerMaterialRootGroup)) {\n finalFilters.fillerMaterialRootGroup = { value: fillerMaterialRootGroup, type: 'eq' };\n }\n\n let fillerMaterialFillGroup = filters.fillerMaterialFillGroup;\n if (!isEmpty(fillerMaterialFillGroup)) {\n finalFilters.fillerMaterialFillGroup = { value: fillerMaterialFillGroup, type: 'eq' };\n }\n\n let fillerMaterialCapGroup = filters.fillerMaterialCapGroup;\n if (!isEmpty(fillerMaterialCapGroup)) {\n finalFilters.fillerMaterialCapGroup = { value: fillerMaterialCapGroup, type: 'eq' };\n }\n\n let baseMaterialGroup = filters.baseMaterialGroup;\n if (!isEmpty(baseMaterialGroup)) {\n finalFilters.baseMaterialGroup = { value: baseMaterialGroup, type: 'eq' };\n }\n\n let baseMaterialThickness = filters.baseMaterialThickness;\n if (!isEmpty(baseMaterialThickness)) {\n finalFilters.baseMaterialThickness = { value: baseMaterialThickness, type: 'eq' };\n }\n\n let baseMaterial1Thickness = filters.baseMaterial1Thickness;\n if (!isEmpty(baseMaterial1Thickness)) {\n finalFilters.baseMaterial1Thickness = { value: baseMaterial1Thickness, type: 'eq' };\n }\n\n let baseMaterial2Thickness = filters.baseMaterial2Thickness;\n if (!isEmpty(baseMaterial2Thickness)) {\n finalFilters.baseMaterial2Thickness = { value: baseMaterial2Thickness, type: 'eq' };\n }\n\n let archivalState = get(filters, PQR.ARCHIVAL_STATE);\n if (!isEmpty(archivalState)) {\n finalFilters[PQR.ARCHIVAL_STATE] = { value: archivalState, type: 'eq' };\n } else {\n finalFilters[PQR.ARCHIVAL_STATE] = { value: ARCHIVAL_STATE.ACTIVE, type: 'eq' };\n }\n\n let weldingBookId = filters.weldingBookId;\n if (!isEmpty(weldingBookId)) {\n finalFilters.weldingBookId = { value: weldingBookId, type: 'eq' };\n }\n\n let weldingBookExtraWps = filters.weldingBookExtraWps;\n if (!isEmpty(weldingBookExtraWps)) {\n finalFilters.weldingBookExtraWps = { value: weldingBookExtraWps, type: 'eq' };\n }\n\n let returnLatest = filters.latest;\n if (!isEmpty(returnLatest)) {\n finalFilters.latest = { value: 'latest', type: 'eq' };\n }\n\n let unitSystem = filters.unitSystem;\n if (!isEmpty(unitSystem)) {\n finalFilters.unitSystem = { value: unitSystem, type: 'eq' };\n }\n\n let processMecanizationRoot = get(filters, PQR.PROCESS_MECANIZATION_ROOT_TEST_PIECE);\n if (processMecanizationRoot) {\n finalFilters[PQR.PROCESS_MECANIZATION_ROOT_TEST_PIECE] = {\n value: processMecanizationRoot,\n type: 'eq',\n };\n }\n\n let processMecanizationFill = get(filters, PQR.PROCESS_MECANIZATION_FILL_TEST_PIECE);\n if (processMecanizationFill) {\n finalFilters[PQR.PROCESS_MECANIZATION_FILL_TEST_PIECE] = {\n value: processMecanizationFill,\n type: 'eq',\n };\n }\n\n let processMecanizationCap = get(filters, PQR.PROCESS_MECANIZATION_CAP_TEST_PIECE);\n if (processMecanizationCap) {\n finalFilters[PQR.PROCESS_MECANIZATION_CAP_TEST_PIECE] = {\n value: processMecanizationCap,\n type: 'eq',\n };\n }\n\n convertFilters(query, finalFilters);\n return this.ajax.request('/grid/pqr', {\n data: query,\n });\n }\n\n listAllWelderCertificates(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n let finalFilters = {};\n if (filters.certificateNumber) {\n finalFilters.certificateNumber = {\n value: filters.certificateNumber,\n type: 'startsWith',\n };\n }\n\n if (options.userSearch) {\n finalFilters.userSearch = { value: true, type: 'eq' };\n }\n\n let weldType = get(filters, WELDER_CERTIFICATE.WELD_TYPE_TEST_PIECE);\n if (weldType) {\n finalFilters[WELDER_CERTIFICATE.WELD_TYPE_TEST_PIECE] = { value: weldType, type: 'eq' };\n }\n\n let overlayType = get(filters, WELDER_CERTIFICATE.OVERLAY_TYPE);\n if (overlayType) {\n finalFilters[WELDER_CERTIFICATE.OVERLAY_TYPE] = { value: overlayType, type: 'eq' };\n }\n\n let company = get(filters, WELDER_CERTIFICATE.COMPANY);\n if (company) {\n finalFilters[WELDER_CERTIFICATE.COMPANY] = { value: company, type: 'eq' };\n }\n\n let standard = get(filters, WELDER_CERTIFICATE.STANDARD);\n if (standard) {\n finalFilters[WELDER_CERTIFICATE.STANDARD] = { value: standard, type: 'eq' };\n }\n\n let constructionStandard = get(filters, WELDER_CERTIFICATE.CONSTRUCTION_STANDARD);\n if (constructionStandard) {\n finalFilters[WELDER_CERTIFICATE.CONSTRUCTION_STANDARD] = {\n value: constructionStandard,\n type: 'eq',\n };\n }\n\n let productType = get(filters, WELDER_CERTIFICATE.PRODUCT_TYPE_TEST_PIECE);\n if (productType) {\n finalFilters[WELDER_CERTIFICATE.PRODUCT_TYPE_TEST_PIECE] = { value: productType, type: 'eq' };\n }\n\n let processRoot = get(filters, WELDER_CERTIFICATE.WELDING_PROCESS_ROOT_TEST_PIECE);\n if (processRoot) {\n finalFilters[WELDER_CERTIFICATE.WELDING_PROCESS_ROOT_TEST_PIECE] = {\n value: processRoot,\n type: 'eq',\n };\n }\n\n let processFIll = get(filters, WELDER_CERTIFICATE.WELDING_PROCESS_FILL_TEST_PIECE);\n if (processFIll) {\n finalFilters[WELDER_CERTIFICATE.WELDING_PROCESS_FILL_TEST_PIECE] = {\n value: processFIll,\n type: 'eq',\n };\n }\n\n let processCap = get(filters, WELDER_CERTIFICATE.WELDING_PROCESS_CAP_TEST_PIECE);\n if (processCap) {\n finalFilters[WELDER_CERTIFICATE.WELDING_PROCESS_CAP_TEST_PIECE] = {\n value: processCap,\n type: 'eq',\n };\n }\n\n let examiningBody = get(filters, WELDER_CERTIFICATE.EXAMINING_BODY);\n if (examiningBody) {\n finalFilters[WELDER_CERTIFICATE.EXAMINING_BODY] = { value: examiningBody, type: 'eq' };\n }\n\n let baseMaterial1Group = get(filters, WELDER_CERTIFICATE.BASE_MATERIAL1_TEST_PIECE);\n if (baseMaterial1Group) {\n finalFilters[WELDER_CERTIFICATE.BASE_MATERIAL1_TEST_PIECE] = {\n value: baseMaterial1Group,\n type: 'eq',\n };\n }\n\n let baseMaterial2Group = get(filters, WELDER_CERTIFICATE.BASE_MATERIAL2_TEST_PIECE);\n if (baseMaterial2Group) {\n finalFilters[WELDER_CERTIFICATE.BASE_MATERIAL2_TEST_PIECE] = {\n value: baseMaterial2Group,\n type: 'eq',\n };\n }\n\n let fillerMaterialRoot = get(filters, WELDER_CERTIFICATE.FILLER_MATERIAL_ROOT_TEST_PIECE);\n if (fillerMaterialRoot) {\n finalFilters[WELDER_CERTIFICATE.FILLER_MATERIAL_ROOT_TEST_PIECE] = {\n value: fillerMaterialRoot,\n type: 'eq',\n };\n }\n\n let fillerMaterialRootGroup = get(\n filters,\n WELDER_CERTIFICATE.FILLER_MATERIAL_ROOT_APPROVAL_RANGE\n );\n if (fillerMaterialRootGroup) {\n finalFilters[WELDER_CERTIFICATE.FILLER_MATERIAL_ROOT_APPROVAL_RANGE] = {\n value: fillerMaterialRootGroup,\n type: 'eq',\n };\n }\n\n let fillerMaterialFill = get(filters, WELDER_CERTIFICATE.FILLER_MATERIAL_FILL_TEST_PIECE);\n if (fillerMaterialFill) {\n finalFilters[WELDER_CERTIFICATE.FILLER_MATERIAL_FILL_TEST_PIECE] = {\n value: fillerMaterialFill,\n type: 'eq',\n };\n }\n\n let fillerMaterialFillGroup = get(\n filters,\n WELDER_CERTIFICATE.FILLER_MATERIAL_FILL_APPROVAL_RANGE\n );\n if (fillerMaterialFillGroup) {\n finalFilters[WELDER_CERTIFICATE.FILLER_MATERIAL_FILL_APPROVAL_RANGE] = {\n value: fillerMaterialFillGroup,\n type: 'eq',\n };\n }\n\n let fillerMaterialCap = get(filters, WELDER_CERTIFICATE.FILLER_MATERIAL_CAP_TEST_PIECE);\n if (fillerMaterialCap) {\n finalFilters[WELDER_CERTIFICATE.FILLER_MATERIAL_CAP_TEST_PIECE] = {\n value: fillerMaterialCap,\n type: 'eq',\n };\n }\n\n let fillerMaterialCapGroup = get(\n filters,\n WELDER_CERTIFICATE.FILLER_MATERIAL_CAP_APPROVAL_RANGE\n );\n if (fillerMaterialCapGroup) {\n finalFilters[WELDER_CERTIFICATE.FILLER_MATERIAL_CAP_APPROVAL_RANGE] = {\n value: fillerMaterialCapGroup,\n type: 'eq',\n };\n }\n\n let diameter = get(filters, WELDER_CERTIFICATE.DIAMETER_TEST_PIECE);\n if (diameter) {\n finalFilters[WELDER_CERTIFICATE.DIAMETER_TEST_PIECE] = { value: diameter, type: 'eq' };\n }\n\n let thickness = get(filters, WELDER_CERTIFICATE.THICKNESS_TOTAL_TEST_PIECE);\n if (thickness) {\n finalFilters[WELDER_CERTIFICATE.THICKNESS_TOTAL_TEST_PIECE] = {\n value: thickness,\n type: 'eq',\n };\n }\n\n let thicknessRoot = get(filters, WELDER_CERTIFICATE.THICKNESS_ROOT_TEST_PIECE);\n if (thicknessRoot) {\n finalFilters[WELDER_CERTIFICATE.THICKNESS_ROOT_TEST_PIECE] = {\n value: thicknessRoot,\n type: 'eq',\n };\n }\n\n let thicknessFill = get(filters, WELDER_CERTIFICATE.THICKNESS_FILL_TEST_PIECE);\n if (thicknessFill) {\n finalFilters[WELDER_CERTIFICATE.THICKNESS_FILL_TEST_PIECE] = {\n value: thicknessFill,\n type: 'eq',\n };\n }\n\n let thicknessCap = get(filters, WELDER_CERTIFICATE.THICKNESS_CAP_TEST_PIECE);\n if (thicknessCap) {\n finalFilters[WELDER_CERTIFICATE.THICKNESS_CAP_TEST_PIECE] = {\n value: thicknessCap,\n type: 'eq',\n };\n }\n\n let weldingDetails = get(filters, WELDER_CERTIFICATE.WELDING_DETAIL_TEST_PIECE);\n if (weldingDetails) {\n finalFilters[WELDER_CERTIFICATE.WELDING_DETAIL_TEST_PIECE] = {\n value: weldingDetails,\n type: 'eq',\n };\n }\n\n let specialRequirements = get(filters, WELDER_CERTIFICATE.SPECIAL_REQUIREMENTS);\n if (specialRequirements) {\n finalFilters[WELDER_CERTIFICATE.SPECIAL_REQUIREMENTS] = {\n value: specialRequirements,\n type: 'eq',\n };\n }\n\n let welders = get(filters, WELDER_CERTIFICATE.WELDER);\n if (welders) {\n finalFilters[WELDER_CERTIFICATE.WELDER] = { value: welders, type: 'eq' };\n }\n\n let positionRoot = get(filters, WELDER_CERTIFICATE.WELDING_POSITION_ROOT_TEST_PIECE);\n if (positionRoot) {\n finalFilters[WELDER_CERTIFICATE.WELDING_POSITION_ROOT_TEST_PIECE] = {\n value: positionRoot,\n type: 'eq',\n };\n }\n\n let positionFill = get(filters, WELDER_CERTIFICATE.WELDING_POSITION_FILL_TEST_PIECE);\n if (positionFill) {\n finalFilters[WELDER_CERTIFICATE.WELDING_POSITION_FILL_TEST_PIECE] = {\n value: positionFill,\n type: 'eq',\n };\n }\n\n let positionCap = get(filters, WELDER_CERTIFICATE.WELDING_POSITION_CAP_TEST_PIECE);\n if (positionCap) {\n finalFilters[WELDER_CERTIFICATE.WELDING_POSITION_CAP_TEST_PIECE] = {\n value: positionCap,\n type: 'eq',\n };\n }\n\n let mecanizationRoot = filters.processMecanizationRootTestPiece;\n if (mecanizationRoot) {\n finalFilters.processMecanizationRootTestPiece = {\n value: mecanizationRoot,\n type: 'eq',\n };\n }\n\n let mecanizationFill = filters.processMecanizationFillTestPiece;\n if (mecanizationFill) {\n finalFilters.processMecanizationFillTestPiece = {\n value: mecanizationFill,\n type: 'eq',\n };\n }\n\n let mecanizationCap = filters.processMecanizationCapTestPiece;\n if (mecanizationCap) {\n finalFilters.processMecanizationCapTestPiece = {\n value: mecanizationCap,\n type: 'eq',\n };\n }\n\n let unitSystem = filters.unitSystem;\n if (unitSystem) {\n finalFilters.unitSystem = {\n value: unitSystem,\n type: 'eq',\n };\n }\n\n let selectedShowArchived = filters._activeArchived;\n let selectedShowExpired = filters._activeExpired;\n let showAll = filters._all;\n if ((selectedShowExpired && selectedShowArchived) || !isEmpty(showAll)) {\n finalFilters._all = 'all';\n } else if (selectedShowArchived) {\n finalFilters._activeArchived = '_activeArchived';\n } else if (selectedShowExpired) {\n finalFilters._activeExpired = '_activeExpired';\n }\n\n let returnLatest = filters.latest;\n if (!isEmpty(returnLatest)) {\n finalFilters.latest = { value: 'latest', type: 'eq' };\n }\n\n convertFilters(query, finalFilters);\n return this.ajax.request('/grid/welder-certificate', {\n data: query,\n });\n }\n\n listAllWeldingProcedureSpecifications(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n\n let finalFilters = {};\n if (filters.wpsNumber) {\n finalFilters.wpsNumber = {\n value: filters.wpsNumber,\n type: 'startsWith',\n };\n }\n\n if (options.sort) {\n if (options.sort.wpsNumber) {\n query['sort[0][field]'] = 'wpsNumber';\n query['sort[0][dir]'] = options.sort.wpsNumber;\n }\n }\n\n if (options.userSearch) {\n finalFilters.userSearch = { value: true, type: 'eq' };\n }\n\n let weldType = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE);\n if (weldType) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE] = { value: weldType, type: 'eq' };\n }\n\n let overlayType = get(filters, WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE);\n if (overlayType) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.OVERLAY_TYPE] = {\n value: overlayType,\n type: 'eq',\n };\n }\n\n let standard = get(filters, WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n if (standard) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.STANDARD] = { value: standard, type: 'eq' };\n }\n\n let constructionStandard = get(filters, WELDING_PROCEDURE_SPECIFICATION.CONSTRUCTION_STANDARD);\n if (constructionStandard) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.CONSTRUCTION_STANDARD] = {\n value: constructionStandard,\n type: 'eq',\n };\n }\n\n let productType = get(filters, WELDING_PROCEDURE_SPECIFICATION.PRODUCT_TYPE);\n if (productType) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.PRODUCT_TYPE] = {\n value: productType,\n type: 'eq',\n };\n }\n\n let processRoot = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT);\n if (processRoot) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT] = {\n value: processRoot,\n type: 'eq',\n };\n }\n\n let processFill = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL);\n if (processFill) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL] = {\n value: processFill,\n type: 'eq',\n };\n }\n\n let processCap = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP);\n if (processCap) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP] = {\n value: processCap,\n type: 'eq',\n };\n }\n\n let processMecanizationRoot = get(\n filters,\n WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_ROOT\n );\n if (processMecanizationRoot) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_ROOT] = {\n value: processMecanizationRoot,\n type: 'eq',\n };\n }\n\n let processMecanizationFill = get(\n filters,\n WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_FILL\n );\n if (processMecanizationFill) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_FILL] = {\n value: processMecanizationFill,\n type: 'eq',\n };\n }\n\n let processMecanizationCap = get(\n filters,\n WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_CAP\n );\n if (processMecanizationCap) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.PROCESS_MECANIZATION_CAP] = {\n value: processMecanizationCap,\n type: 'eq',\n };\n }\n\n let positionRoot = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT);\n if (positionRoot) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT] = {\n value: positionRoot,\n type: 'eq',\n };\n }\n\n let positionFill = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL);\n if (positionFill) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL] = {\n value: positionFill,\n type: 'eq',\n };\n }\n\n let positionCap = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP);\n if (positionCap) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP] = {\n value: positionCap,\n type: 'eq',\n };\n }\n\n let baseMaterial1Group = get(filters, WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1);\n if (baseMaterial1Group) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL1] = {\n value: baseMaterial1Group,\n type: 'eq',\n };\n }\n\n let baseMaterial2Group = get(filters, WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2);\n if (baseMaterial2Group) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.BASE_MATERIAL2] = {\n value: baseMaterial2Group,\n type: 'eq',\n };\n }\n\n let baseMaterial1Instance = filters.baseMaterial1Instance;\n if (baseMaterial1Instance) {\n finalFilters.baseMaterial1Instance = { value: baseMaterial1Instance, type: 'eq' };\n }\n\n let baseMaterial2Instance = filters.baseMaterial2Instance;\n if (baseMaterial2Instance) {\n finalFilters.baseMaterial2Instance = { value: baseMaterial2Instance, type: 'eq' };\n }\n\n let fillerMaterialRoot = get(filters, WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT);\n if (fillerMaterialRoot) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT] = {\n value: fillerMaterialRoot,\n type: 'eq',\n };\n }\n\n let fillerMaterialFill = get(filters, WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL);\n if (fillerMaterialFill) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL] = {\n value: fillerMaterialFill,\n type: 'eq',\n };\n }\n\n let fillerMaterialCap = get(filters, WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP);\n if (fillerMaterialCap) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP] = {\n value: fillerMaterialCap,\n type: 'eq',\n };\n }\n\n let fillerMaterialRootCommercialDesignation = get(\n filters,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION\n );\n if (fillerMaterialRootCommercialDesignation) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION] = {\n value: fillerMaterialRootCommercialDesignation,\n type: 'eq',\n };\n }\n\n let fillerMaterialFillCommercialDesignation = get(\n filters,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION\n );\n if (fillerMaterialFillCommercialDesignation) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION] = {\n value: fillerMaterialFillCommercialDesignation,\n type: 'eq',\n };\n }\n\n let fillerMaterialCapCommercialDesignation = get(\n filters,\n WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION\n );\n if (fillerMaterialCapCommercialDesignation) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION] = {\n value: fillerMaterialCapCommercialDesignation,\n type: 'eq',\n };\n }\n\n let diameter = filters.diameter;\n if (diameter) {\n finalFilters.diameter = { value: diameter, type: 'eq' };\n }\n\n let thickness = filters.thickness;\n if (thickness) {\n finalFilters.thickness = { value: thickness, type: 'eq' };\n }\n\n let weldingDetails = get(filters, WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS);\n if (weldingDetails) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.WELDING_DETAILS] = {\n value: weldingDetails,\n type: 'eq',\n };\n }\n\n let specialRequirements = get(filters, WELDING_PROCEDURE_SPECIFICATION.SPECIAL_REQUIREMENTS);\n if (specialRequirements) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.SPECIAL_REQUIREMENTS] = {\n value: specialRequirements,\n type: 'eq',\n };\n }\n\n let impactTemperature = get(filters, WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE);\n if (impactTemperature) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE] = {\n value: impactTemperature,\n type: 'eq',\n };\n }\n\n let hardnessRequirements = get(filters, WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED);\n if (hardnessRequirements) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED] = {\n value: hardnessRequirements,\n type: 'eq',\n };\n }\n\n let mainPqr = get(filters, WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR);\n if (mainPqr) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.MAIN_PQR] = { value: mainPqr, type: 'eq' };\n }\n\n let throatThickness = filters.throatThickness;\n if (throatThickness) {\n finalFilters.throatThickness = { value: throatThickness, type: 'eq' };\n }\n\n let branchAngle = filters.branchAngle;\n if (branchAngle) {\n finalFilters.branchAngle = { value: branchAngle, type: 'eq' };\n }\n\n let heatInput = filters.heatInput;\n if (heatInput) {\n finalFilters.heatInput = { value: heatInput, type: 'eq' };\n }\n\n let preHeat = filters.preHeat;\n if (preHeat) {\n finalFilters.preHeat = { value: preHeat, type: 'eq' };\n }\n\n let pwht = filters.postWeldHeatTreatment;\n if (pwht) {\n finalFilters.postWeldHeatTreatment = { value: pwht, type: 'eq' };\n }\n\n let pwhtTime = filters.postWeldHeatTreatmentTime;\n if (pwhtTime) {\n finalFilters.postWeldHeatTreatmentTime = { value: pwhtTime, type: 'eq' };\n }\n\n let pwhtPresent = filters.pwhtPresence;\n if (!isEmpty(pwhtPresent)) {\n finalFilters.pwhtPresence = { value: pwhtPresent, type: 'eq' };\n }\n\n let company = get(filters, WELDING_PROCEDURE_SPECIFICATION.COMPANY);\n if (!isEmpty(company)) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.COMPANY] = { value: company, type: 'eq' };\n }\n\n let baseMaterialGroup = filters.baseMaterialGroup;\n if (!isEmpty(baseMaterialGroup)) {\n finalFilters.baseMaterialGroup = { value: baseMaterialGroup, type: 'eq' };\n }\n\n let baseMaterialThickness = filters.baseMaterialThickness;\n if (!isEmpty(baseMaterialThickness)) {\n finalFilters.baseMaterialThickness = { value: baseMaterialThickness, type: 'eq' };\n }\n\n let baseMaterial1Thickness = filters.baseMaterial1Thickness;\n if (!isEmpty(baseMaterial1Thickness)) {\n finalFilters.baseMaterial1Thickness = { value: baseMaterial1Thickness, type: 'eq' };\n }\n\n let baseMaterial2Thickness = filters.baseMaterial2Thickness;\n if (!isEmpty(baseMaterial2Thickness)) {\n finalFilters.baseMaterial2Thickness = { value: baseMaterial2Thickness, type: 'eq' };\n }\n\n let archivalState = get(filters, WELDING_PROCEDURE_SPECIFICATION.ARCHIVAL_STATE);\n if (!isEmpty(archivalState)) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.ARCHIVAL_STATE] = {\n value: archivalState,\n type: 'eq',\n };\n } else {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.ARCHIVAL_STATE] = {\n value: ARCHIVAL_STATE.ACTIVE,\n type: 'eq',\n };\n }\n\n let { wpsSearchType } = filters;\n if (!isEmpty(wpsSearchType)) {\n finalFilters.wpsSearchType = { value: wpsSearchType, type: 'eq' };\n }\n\n let projectWps = filters.projectWps;\n if (!isEmpty(projectWps)) {\n finalFilters.projectWps = { value: projectWps, type: 'eq' };\n }\n\n let plusProjectWps = filters.plusProjectWps;\n if (!isEmpty(plusProjectWps)) {\n finalFilters.plusProjectWps = { value: plusProjectWps, type: 'eq' };\n }\n\n let projectClient = get(filters, WELDING_PROCEDURE_SPECIFICATION.PROJECT_CLIENT);\n if (projectClient) {\n finalFilters[WELDING_PROCEDURE_SPECIFICATION.PROJECT_CLIENT] = {\n value: projectClient,\n type: 'eq',\n };\n }\n\n let wpsRevisionState = filters.revisionType;\n if (wpsRevisionState) {\n finalFilters.revisionType = { value: wpsRevisionState, type: 'eq' };\n }\n\n let unitSystem = filters.unitSystem;\n if (!isEmpty(unitSystem)) {\n finalFilters.unitSystem = { value: unitSystem, type: 'eq' };\n }\n\n let returnLatest = filters.latest;\n if (!isEmpty(returnLatest)) {\n finalFilters.latest = { value: 'latest', type: 'eq' };\n }\n\n convertFilters(query, finalFilters);\n return this.ajax.request('/grid/welding-procedure-specification', {\n data: query,\n });\n }\n\n listAllWeldingBookStatus(options = {}) {\n let query = {};\n convertPaging(query, options);\n return this.store.query('welding-book-status', query);\n }\n\n listAllMiscellaneousCertificates(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n query['filter[active]'] = '_active';\n\n if (filters.certificateNumber) {\n query['filter[certificate-number]'] = filters.certificateNumber;\n }\n\n if (filters.company) {\n query['filter[company.id]'] = filters.company;\n }\n\n if (filters.personName) {\n query['filter[person.name]'] = filters.personName;\n }\n\n if (filters.person) {\n query['filter[person.id]'] = filters.person;\n }\n\n if (filters.type) {\n query['filter[type.id]'] = filters.type;\n }\n\n let selectedShowArchived = filters._activeArchived;\n let selectedShowExpired = filters._activeExpired;\n let showAll = filters._all;\n if ((selectedShowExpired && selectedShowArchived) || !isEmpty(showAll)) {\n query['filter[_all]'] = 'all';\n } else if (selectedShowArchived) {\n query['filter[_activeArchived]'] = '_activeArchived';\n } else if (selectedShowExpired) {\n query['filter[_activeExpired]'] = '_activeExpired';\n }\n\n query.include = 'company,certificate-person';\n return this.store.query('miscellaneous-certificate', query);\n }\n\n listAllProjects(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n let finalFilters = {};\n\n if (filters.designation) {\n finalFilters.designation = { type: 'like', value: filters.designation };\n }\n\n if (filters.projectName) {\n finalFilters.projectName = { type: 'like', value: filters.projectName };\n }\n\n if (filters.projectClient) {\n finalFilters.projectClient = { type: 'eq', value: filters.projectClient };\n }\n\n if (filters.supplier) {\n finalFilters.supplier = { type: 'eq', value: filters.supplier };\n }\n\n let archivalState = filters.archivalState;\n if (!isEmpty(archivalState)) {\n finalFilters.archivalState = { value: archivalState, type: 'eq' };\n } else {\n finalFilters.archivalState = { value: ARCHIVAL_STATE.ACTIVE, type: 'eq' };\n }\n\n if (filters.unitSystem) {\n finalFilters.unitSystem = { type: 'eq', value: filters.unitSystem };\n }\n\n convertFilters(query, finalFilters);\n return this.ajax.request('/grid/project', {\n data: query,\n });\n }\n\n listProjects(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n let finalFilters = {};\n\n if (filters.designation) {\n query['filter[designation]'] = filters.designation;\n }\n if (filters.standard) {\n query['filter[standard.id]'] = filters.standard;\n }\n\n if (options.sort) {\n query.sort = options.sort;\n }\n\n convertFilters(query, finalFilters);\n return this.store.query('project', query);\n }\n\n listAllProjectNDTReports(options) {\n let query = {};\n if (!options.project) {\n return [];\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n this._parsePagingInformation(query, options);\n query.include = 'report,report.type-of-test';\n return this.store.query('project-ndt-report-certificate', query);\n }\n\n listAllNDTReportCertificates(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (filters.reportNumber) {\n query['filter[ndt-report-number]'] = filters.reportNumber;\n }\n if (filters.testType) {\n query['filter[type-of-test.id]'] = filters.testType;\n }\n query.include = 'type-of-test,inspector';\n this._parsePagingInformation(query, options);\n return this.store.query('ndt-report-certificate', query);\n }\n\n listAllBaseMaterialCertificates(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (filters.heatNumber) {\n query['filter[heat-number]'] = filters.heatNumber;\n }\n if (filters.material) {\n query['filter[base-material.id]'] = filters.material;\n }\n if (filters.unitSystem) {\n query['filter[unit-system]'] = filters.unitSystem;\n }\n\n this._parsePagingInformation(query, options);\n query.include = 'base-material';\n return this.store.query('base-material-certificate', query);\n }\n\n listAllFillerMaterialCertificates(options = {}, filters = {}) {\n let query = {};\n convertPaging(query, options);\n if (filters.batchNumber) {\n query['filter[batch-number]'] = filters.batchNumber;\n }\n if (filters.material) {\n query['filter[filler-material.id]'] = filters.material;\n }\n if (filters.unitSystem) {\n query['filter[unit-system]'] = filters.unitSystem;\n }\n\n this._parsePagingInformation(query, options);\n query.include =\n 'filler-material,filler-material.specification,filler-material.classification,commercial-designation';\n return this.store.query('filler-material-certificate', query);\n }\n\n listAllProjectDrawings(options) {\n let query = {};\n if (!options.project) {\n return [];\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.referenceNumber) {\n query['filter[reference-number]'] = options.referenceNumber;\n }\n\n this._parsePagingInformation(query, options);\n query.include = 'drawing';\n return this.store.query('project-general-drawing', query);\n }\n\n listAllGeneralDrawings(options = {}, filters = {}) {\n let query = {};\n if (filters.anywhere) {\n query['filter[anywhere]'] = filters.anywhere;\n }\n if (filters.revisionStatus) {\n query['filter[revision-status]'] = filters.revisionStatus;\n }\n if (options.sort) {\n query.sort = options.sort;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('general-drawing', query);\n }\n\n listGeneralDrawingRevisions(drawing) {\n let query = {\n 'filter[reference-number]': drawing.referenceNumber,\n 'filter[revision-status]': 'ALL',\n sort: '-created-on',\n };\n this._parsePagingInformation(query);\n return this.store.query('general-drawing', query);\n }\n\n listAllComponentDrawings(options = {}, filters = {}) {\n let query = {};\n if (filters.anywhere) {\n query['filter[anywhere]'] = filters.anywhere;\n }\n if (filters.referencedDrawing) {\n query['filter[referenced-drawing.id]'] = filters.referencedDrawing;\n }\n if (filters.revisionStatus) {\n query['filter[revision-status]'] = options.revisionStatus;\n }\n if (options.sort) {\n query.sort = options.sort;\n }\n query.include = 'referenced-drawing';\n this._parsePagingInformation(query, options);\n return this.store.query('component-drawing', query);\n }\n\n listComponentDrawingRevisions(drawing) {\n let query = {\n 'filter[reference-number]': drawing.referenceNumber,\n 'filter[revision-status]': 'ALL',\n sort: '-created-on',\n };\n this._parsePagingInformation(query);\n return this.store.query('component-drawing', query);\n }\n\n listAllProjectDocuments(options = {}, filters = {}) {\n let query = {};\n\n if (filters.anywhere) {\n query['filter[anywhere]'] = filters.anywhere;\n }\n\n this._parsePagingInformation(query, options);\n return this.store.query('project-document', query);\n }\n\n listProjectDocumentRevisions(document) {\n let query = {\n 'filter[document-title]': document.documentTitle,\n 'filter[revision-status]': 'ALL',\n sort: '-created-on',\n };\n this._parsePagingInformation(query);\n return this.store.query('project-document', query);\n }\n\n listAllProjectLineClasses(options) {\n let query = {};\n if (!options.project) {\n return [];\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.name) {\n query['filter[name]'] = options.name;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('project-line-class', query);\n }\n\n listAllProjectComponentDrawings(options) {\n let query = {};\n if (!options.project) {\n return [];\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.referenceNumber) {\n query['filter[reference-number]'] = options.referenceNumber;\n }\n this._parsePagingInformation(query, options);\n query.include = 'drawing';\n return this.store.query('project-component-drawing', query);\n }\n\n listAllProjectComponents(options) {\n let query = {};\n if (!options.project) {\n return [];\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.componentNumber) {\n query['filter[component-name]'] = options.componentNumber;\n }\n if (options.componentName) {\n query['filter[component-name]'] = options.componentName;\n }\n if (options.situation) {\n query['filter[situation]'] = options.situation;\n }\n if (options.progressState) {\n query['filter[progress-state]'] = options.progressState;\n }\n\n if (!options.include) {\n query.include = 'originalDrawing,componentDrawing,lineClass,test-inspection-class';\n } else {\n if (options.include === 'all')\n query.include =\n 'original-drawing,component-drawing,line-class,test-inspection-class,test-inspection-class.stages,test-inspection-class.stages.location,test-inspection-class.stages.name,test-inspection-class.stages.tests.type-of-test';\n }\n\n this._parsePagingInformation(query, options);\n return this.store.query('project-component', query);\n }\n\n queryProjectWelds(options, include = '') {\n let query = {};\n if (!options.project) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.component) {\n query['filter[component.id]'] = options.component;\n }\n if (options.components) {\n query['filter[component.id][IN]'] = `${options.components}`;\n }\n if (options.generalDrawings) {\n query['filter[component.original-drawing.id][IN]'] = `${options.generalDrawings}`;\n }\n if (options.componentDrawings) {\n query['filter[component.component-drawing.id][IN]'] = `${options.componentDrawings}`;\n }\n if (options.weldId) {\n query['filter[weld-id]'] = options.weldId;\n }\n if (options.situation) {\n query['filter[situation]'] = options.situation;\n }\n if (options.baseMaterial1) {\n query['filter[specific-base-material1.id]'] = options.baseMaterial1;\n }\n if (options.baseMaterial2) {\n query['filter[specific-base-material2.id]'] = options.baseMaterial2;\n }\n if (options.baseMaterial1Certificate) {\n query['filter[base-material1.id]'] = options.baseMaterial1Certificate;\n }\n if (options.baseMaterial2Certificate) {\n query['filter[base-material2.id]'] = options.baseMaterial2Certificate;\n }\n if (options.wpsRevision) {\n query['filter[wps-revision]'] = options.wpsRevision;\n }\n if (options.specificFillerMaterialProcess1) {\n query['filter[specific-filler-material-process1.id]'] =\n options.specificFillerMaterialProcess1;\n }\n if (options.specificFillerMaterialProcess2) {\n query['filter[specific-filler-material-process2.id]'] =\n options.specificFillerMaterialProcess2;\n }\n if (options.specificFillerMaterialProcess3) {\n query['filter[specific-filler-material-process3.id]'] =\n options.specificFillerMaterialProcess3;\n }\n if (options.fillerMaterialRootCertificate) {\n query['filter[filler-material-root.id]'] = options.fillerMaterialRootCertificate;\n }\n if (options.fillerMaterialFillCertificate) {\n query['filter[filler-material-fill.id]'] = options.fillerMaterialFillCertificate;\n }\n if (options.fillerMaterialCapCertificate) {\n query['filter[filler-material-cap.id]'] = options.fillerMaterialCapCertificate;\n }\n if (options.typeOfTest) {\n query['filter[type-of-test]'] = options.typeOfTest;\n }\n if (options.testStatus) {\n query['filter[test-status]'] = options.testStatus;\n }\n if (options.welder) {\n query['filter[welder.id]'] = options.welder;\n }\n if (options.welderProcess) {\n query['filter[welder-process]'] = options.welderProcess;\n }\n if (options.weldStage) {\n query['filter[state]'] = options.weldStage;\n }\n if (options.testStageName) {\n query['filter[test-stage-name]'] = options.testStageName;\n }\n if (options.testLocation) {\n query['filter[test-location]'] = options.testLocation;\n }\n\n if (!isEmpty(include)) {\n query.include = include;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('project-weld', query);\n }\n\n queryNonDestructiveTestOptions(options = {}) {\n let query = { 'paging[limit]': 100 };\n query['filter[project]'] = options.projectId;\n return this.store.query('non-destructive-testing', query);\n }\n\n listAllProjectWelds(options) {\n let query = {};\n let finalFilters = {};\n if (!options.project) {\n return [];\n }\n if (options.project) {\n finalFilters.project = { value: options.project, type: 'eq' };\n }\n\n if (options.component) {\n finalFilters.component = { value: options.component, type: 'eq' };\n }\n\n if (options.weldId) {\n finalFilters.weldId = { value: options.weldId, type: 'eq' };\n }\n\n if (options.situation) {\n finalFilters.situation = { value: options.situation, type: 'eq' };\n }\n\n convertFilters(query, finalFilters);\n this._parsePagingInformation(query, options);\n return this.ajax.request('/grid/project-weld', {\n data: query,\n });\n }\n\n listAllProjectPwhtReports(options) {\n let query = {};\n if (!options.project) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.reportNumber) {\n query['filter[report-number]'] = options.reportNumber;\n }\n if (options.temperature) {\n query['filter[temperature]'] = options.temperature;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('project-pwht-report-certificate', query);\n }\n\n listAllPwhtReportCertificates(options = {}, filters = {}) {\n let query = {};\n if (filters.reportNumber) {\n query['filter[report-number]'] = filters.reportNumber;\n }\n if (filters.temperature) {\n query['filter[temperature]'] = filters.temperature;\n }\n this._parsePagingInformation(query, options);\n return this.store.query('pwht-report-certificate', query);\n }\n\n listAllProjectWelders(options) {\n let query = {};\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n if (options.welderName) {\n query['filter[welder-name]'] = options.welderName;\n }\n if (options.welderStamp) {\n query['filter[welder-stamp]'] = options.welderStamp;\n }\n\n if (options.referenceType) {\n query['filter[reference-type]'] = options.referenceType;\n }\n\n this._parsePagingInformation(query, options);\n return this.store.query('project-welder', query);\n }\n\n listAllProjectWelderCertificates(options) {\n let query = {};\n if (!options.project) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n\n this._parsePagingInformation(query, options);\n return this.store.query('project-welder-certificate', query);\n }\n\n listAllProjectBaseMaterials(options) {\n let query = {};\n if (!options.project) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n\n this._parsePagingInformation(query, options);\n query.include = 'certificate';\n return this.store.query('project-base-material-certificate', query);\n }\n\n listAllProjectFillerMaterials(options) {\n let query = {};\n if (!options.project) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n\n this._parsePagingInformation(query, options);\n query.include = 'certificate';\n return this.store.query('project-filler-material-certificate', query);\n }\n\n listAllProjectDocumentLinks(options) {\n let query = {};\n if (!options.project) {\n return new RSVP.Promise((resolve) => {\n resolve([]);\n });\n }\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n\n this._parsePagingInformation(query, options);\n query.include = 'document';\n return this.store.query('project-document-link', query);\n }\n\n listAllProjectWps(options) {\n let query = {};\n if (options.project) {\n query['filter[project.id]'] = options.project;\n }\n\n if (options.wpsNumber) {\n query['filter[wps-number]'] = options.wpsNumber;\n }\n\n if (options.referenceType) {\n query['filter[reference-type]'] = options.referenceType;\n }\n\n this._parsePagingInformation(query, options);\n query.include = 'project';\n return this.store.query('project-wps', query);\n }\n\n listAllTestInspectionClasses(options = {}, filters = {}) {\n let query = {};\n if (filters.name) {\n query['filter[name]'] = filters.name;\n }\n this._parsePagingInformation(query, options);\n query.include = 'stages,stages.tests,stages.name,stages.tests.typeOfTest';\n return this.store.query('test-inspection-class', query);\n }\n\n listAllIeis(options = {}, filters = {}) {\n let query = {};\n if (filters.archived) {\n query['filter[archivalState]'] = filters.archived;\n } else {\n query['filter[archivalState]'] = 'AC';\n }\n\n if (filters.standard) {\n query['filter[wps.standard.id]'] = filters.standard;\n }\n\n if (filters.weldingProcessRoot) {\n query['filter[wps.weldingProcessRoot.id]'] = filters.weldingProcessRoot;\n }\n if (filters.weldingProcessFill) {\n query['filter[wps.weldingProcessFill.id]'] = filters.weldingProcessFill;\n }\n if (filters.weldingProcessCap) {\n query['filter[wps.weldingProcessCap.id]'] = filters.weldingProcessCap;\n }\n\n if (filters.fillerMaterialRoot) {\n query['filter[wps.fillerMaterialRoot.id]'] = filters.fillerMaterialRoot;\n }\n if (filters.fillerMaterialFill) {\n query['filter[wps.fillerMaterialFill.id]'] = filters.fillerMaterialFill;\n }\n if (filters.fillerMaterialCap) {\n query['filter[wps.fillerMaterialCap.id]'] = filters.fillerMaterialCap;\n }\n\n if (filters.baseMaterial1Group) {\n query['filter[wps.baseMaterial1Group.id]'] = filters.baseMaterial1Group;\n }\n if (filters.baseMaterial2Group) {\n query['filter[wps.baseMaterial2Group.id]'] = filters.baseMaterial2Group;\n }\n if (filters.baseMaterialGroup) {\n query['filter[wps.baseMaterialGroup.id]'] = filters.baseMaterialGroup;\n }\n\n if (filters.diameter) {\n query['filter[wps.diameter]'] = filters.diameter;\n }\n if (filters.wpsNumber) {\n query['filter[wps.wpsNumber]'] = filters.wpsNumber;\n }\n if (filters.thickness) {\n query['filter[wps.thickness]'] = filters.thickness;\n }\n if (filters.productType) {\n query['filter[wps.productType]'] = filters.productType;\n }\n\n if (filters.pwhtTemperature) {\n query['filter[wps.pwhtTemperature]'] = filters.pwhtTemperature;\n }\n\n if (filters.company) {\n query['filter[wps.company.id]'] = filters.company;\n }\n\n if (filters.ieisNumber) {\n query['filter[ieisNumber]'] = filters.ieisNumber;\n }\n\n if (filters.weldType) {\n query['filter[wps.weldType.id]'] = filters.weldType;\n }\n\n if (filters.inspectionClass) {\n query['filter[inspectionClass.id]'] = filters.inspectionClass;\n }\n if (filters.drawingNumber) {\n query['filter[drawingNumber]'] = filters.drawingNumber;\n }\n\n this._parsePagingInformation(query, options);\n query.include =\n 'wps,wps.weldType,wps.standard,wps.company,wps.weldingProcessRoot,wps.weldingProcessFill,wps.weldingProcessCap,wps.baseMaterial1,wps.baseMaterial1.specification,wps.baseMaterial1.grade,wps.baseMaterial2,wps.baseMaterial2.specification,wps.baseMaterial2.grade,lineClass.stages,lineClass.stages.tests,lineClass.stages.name,lineClass.stages.tests.typeOfTest';\n return this.store.query('ieis', query);\n }\n\n // This method does not belong here, refactor and move to another place\n getUsageLimits() {\n return this.ajax.request('/api/dashboard/usage');\n }\n\n // Ember concurrency tasks\n findFillerMaterialCommercialDesignations = task(\n {\n restartable: true,\n },\n async (fillerMaterial) => {\n if (!isEmpty(fillerMaterial)) {\n await timeout(250);\n return this.searchAllFillerMaterialCommercialDesignationByFillerMaterial(fillerMaterial);\n } else {\n return [];\n }\n }\n );\n\n findLineClasses = task(async (project, term) => {\n await timeout(250);\n let options = {\n project: project.id,\n name: term,\n };\n return this.listAllProjectLineClasses(options);\n });\n\n findProjects = task(\n {\n restartable: true,\n },\n async (standard, term, options = {}) => {\n await timeout(250);\n let filters = {\n designation: term,\n };\n if (standard) {\n filters.standard = standard.get('id');\n }\n return this.listProjects(options, filters);\n }\n );\n\n findProjectByName = task(async (term) => {\n await timeout(250);\n console.log(term);\n let filters = {\n designation: term,\n };\n return this.listProjects({}, filters);\n });\n\n findFitter = task(\n {\n restartable: true,\n },\n async (term) => {\n await timeout(250);\n let query = {};\n this._parsePagingInformation(query, {});\n if (term) {\n query['filter[fitter-name]'] = term;\n query['filter[fitter-stamp]'] = term;\n }\n return this.store.query('fitter', query);\n }\n );\n\n findWelder = task(\n {\n restartable: true,\n },\n async (name, options = {}) => {\n await timeout(250);\n let query = {};\n this._parsePagingInformation(query, options);\n if (name) {\n query['filter[welder-name]'] = name;\n query['filter[welder-stamp]'] = name;\n }\n if (options.company) {\n query['filter[company.id]'] = options.company;\n }\n if (options.personType) {\n query['filter[person-type]'] = options.personType;\n }\n\n return this.store.query('welder', query);\n }\n );\n\n findInspector = task(\n {\n restartable: true,\n },\n async (name) => {\n await timeout(250);\n let query = {};\n this._parsePagingInformation(query);\n if (name) {\n query['filter[inspector-name]'] = name;\n query['filter[inspector-stamp]'] = name;\n }\n return this.store.query('inspector', query);\n }\n );\n\n findProjectComponents = task(async (project, term, searchOptions = {}) => {\n await timeout(250);\n let options = {\n project: project.id,\n componentNumber: term,\n };\n Object.assign(options, searchOptions);\n\n return this.listAllProjectComponents(options);\n });\n\n findProjectDrawings = task(async (project, term) => {\n await timeout(250);\n let options = {\n project: project.id,\n referenceNumber: term,\n };\n return this.listAllProjectDrawings(options);\n });\n\n findProjectComponentDrawings = task(async (project, drawing, term) => {\n await timeout(250);\n let options = {\n project: project.id,\n referenceNumber: term,\n };\n if (!isEmpty(drawing)) {\n options.drawing = drawing.id;\n }\n return this.listAllProjectComponentDrawings(options);\n });\n\n findProjectClient = task(\n {\n restartable: true,\n },\n async (name) => {\n await timeout(250);\n let query = {};\n this._parsePagingInformation(query);\n if (name) {\n query['filter[name]'] = name;\n }\n return this.store.query('project-client', query);\n }\n );\n\n findWpsMetadata = task(\n {\n restartable: true,\n },\n async (wpsId) => {\n let metadata = null;\n try {\n let query = {};\n query['filter[wps.id]'] = wpsId;\n metadata = await this.store.query('welding-procedure-specification-metadata', query);\n } catch (e) {\n console.log(e);\n }\n return metadata;\n }\n );\n\n // Static array lists\n @computed('intl.locale')\n get overlayTypeOptions() {\n let hardFacing = this.intl.t('lov.overlay-type.HF');\n let corrosion = this.intl.t('lov.overlay-type.CR');\n return A([\n {\n key: OVERLAY_TYPE_OPTIONS.HARD_FACING,\n label: hardFacing,\n },\n {\n key: OVERLAY_TYPE_OPTIONS.CORROSION_RESISTANT,\n label: corrosion,\n },\n ]);\n }\n\n @computed('intl.locale')\n get weldingPositionDirectionOptions() {\n let uphill = this.intl.t('lov.welding-position-direction.UH');\n let downhill = this.intl.t('lov.welding-position-direction.DH');\n return A([\n {\n key: WELDING_POSITION_DIRECTION_OPTIONS.UPHILL,\n label: uphill,\n },\n {\n key: WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL,\n label: downhill,\n },\n ]);\n }\n\n @computed('intl.locale')\n get layerOptions() {\n let singleLayer = this.intl.t('lov.layer.SL');\n let multiLayer = this.intl.t('lov.layer.ML');\n return A([\n {\n key: LAYER_OPTIONS.SINGLE_LAYER,\n label: singleLayer,\n },\n {\n key: LAYER_OPTIONS.MULTI_LAYER,\n label: multiLayer,\n },\n ]);\n }\n\n @computed('intl.locale')\n get productTypeOptions() {\n let pipe = this.intl.t('lov.product-type.PI');\n let plate = this.intl.t('lov.product-type.PL');\n return [\n {\n key: PRODUCT_TYPE.PIPE,\n label: pipe,\n },\n {\n key: PRODUCT_TYPE.PLATE,\n label: plate,\n },\n ];\n }\n\n @computed('intl.locale')\n get productTypeOptionsCertificatesIso96061Options() {\n let pipe = this.intl.t('lov.product-type.PI');\n let plate = this.intl.t('lov.product-type.PL');\n let pipePlate = this.intl.t('lov.product-type.PP');\n return A([\n {\n key: PRODUCT_TYPE.PIPE,\n label: pipe,\n },\n {\n key: PRODUCT_TYPE.PLATE,\n label: plate,\n },\n {\n key: PRODUCT_TYPE.PIPE_PLATE,\n label: pipePlate,\n },\n ]);\n }\n\n @computed('intl.locale')\n get shieldingTypeOptions() {\n let gas = this.intl.t('lov.shielding.G');\n let flux = this.intl.t('lov.shielding.F');\n let none = this.intl.t('lov.shielding.N');\n return A([\n {\n key: SHIELDING_OPTIONS.GAS,\n label: gas,\n },\n {\n key: SHIELDING_OPTIONS.FLUX,\n label: flux,\n },\n {\n key: SHIELDING_OPTIONS.NONE,\n label: none,\n },\n ]);\n }\n\n @computed('intl.locale')\n get jobKnowledgeOptions() {\n let acceptable = this.intl.t('lov.job-knowledge.A');\n let notTested = this.intl.t('lov.job-knowledge.N');\n return A([\n {\n key: JOB_KNOWLEDGE_OPTIONS.ACCEPTABLE,\n label: acceptable,\n },\n {\n key: JOB_KNOWLEDGE_OPTIONS.NOT_TESTED,\n label: notTested,\n },\n ]);\n }\n\n @computed('intl.locale')\n get weldingLayerOptions() {\n let root = this.intl.t('lov.welding-layer.ROOT');\n let fill = this.intl.t('lov.welding-layer.FILL');\n let cap = this.intl.t('lov.welding-layer.CAP');\n return A([\n {\n key: WELDING_LAYER_OPTIONS.ROOT,\n label: root,\n },\n {\n key: WELDING_LAYER_OPTIONS.FILL,\n label: fill,\n },\n {\n key: WELDING_LAYER_OPTIONS.CAP,\n label: cap,\n },\n ]);\n }\n\n @computed('intl.locale')\n get grooveShapeOptions() {\n let veeShape = this.intl.t('lov.groove-shapes.GROOVE_V');\n let doubleVeeShape = this.intl.t('lov.groove-shapes.GROOVE_DOUBLE_V');\n let halfVeeShape = this.intl.t('lov.groove-shapes.GROOVE_HALF_V');\n let jayShape = this.intl.t('lov.groove-shapes.GROOVE_J');\n let doubleJayShape = this.intl.t('lov.groove-shapes.GROOVE_DOUBLE_J');\n let youShape = this.intl.t('lov.groove-shapes.GROOVE_U');\n let doubleYouShape = this.intl.t('lov.groove-shapes.GROOVE_DOUBLE_U');\n let kayShape = this.intl.t('lov.groove-shapes.GROOVE_K');\n let exShape = this.intl.t('lov.groove-shapes.GROOVE_X');\n let squareShape = this.intl.t('lov.groove-shapes.GROOVE_SQUARE');\n let none = this.intl.t('lov.groove-shapes.GROOVE_NONE');\n return A([\n {\n key: GROOVE_SHAPE_OPTIONS.V_SHAPE,\n label: veeShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.DOUBLE_V_SHAPE,\n label: doubleVeeShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.HALF_V_SHAPE,\n label: halfVeeShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.J_SHAPE,\n label: jayShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.DOUBLE_J_SHAPE,\n label: doubleJayShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.U_SHAPE,\n label: youShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.DOUBLE_U_SHAPE,\n label: doubleYouShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.K_SHAPE,\n label: kayShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.X_SHAPE,\n label: exShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.SQUARE_SHAPE,\n label: squareShape,\n },\n {\n key: GROOVE_SHAPE_OPTIONS.NO_SHAPE,\n label: none,\n },\n ]);\n }\n\n @computed('intl.locale')\n get jointTypeOptions() {\n let buttJoint = this.intl.t('lov.joint-types.BJ');\n let cornerJoint = this.intl.t('lov.joint-types.CJ');\n let tJoint = this.intl.t('lov.joint-types.TJ');\n let socketJoint = this.intl.t('lov.joint-types.SJ');\n return A([\n {\n key: JOINT_TYPE_OPTIONS.BUTT_JOINT,\n label: buttJoint,\n },\n {\n key: JOINT_TYPE_OPTIONS.CORNER_JOINT,\n label: cornerJoint,\n },\n {\n key: JOINT_TYPE_OPTIONS.T_JOINT,\n label: tJoint,\n },\n {\n key: JOINT_TYPE_OPTIONS.SOCKET_JOINT,\n label: socketJoint,\n },\n ]);\n }\n\n @computed('intl.locale')\n get testResultOptions() {\n let { intl } = this;\n let passed = intl.t('lov.test-results.P');\n let failed = intl.t('lov.test-results.F');\n return A([\n {\n key: TEST_RESULTS.PASSED,\n label: passed,\n },\n {\n key: TEST_RESULTS.FAILED,\n label: failed,\n },\n ]);\n }\n\n @computed('intl.locale')\n get bendTestTypeOptions() {\n let { intl } = this;\n\n let sideBend = intl.t('lov.bend-test-type.SIDE_BEND');\n let transversal = intl.t('lov.bend-test-type.TRANSVERSAL');\n let faceBend = intl.t('lov.bend-test-type.FACE_BEND');\n let longitudinal = intl.t('lov.bend-test-type.LONGITUDINAL');\n let rootBend = intl.t('lov.bend-test-type.ROOT_BEND');\n let bendBreak = intl.t('lov.bend-test-type.BEND_BREAK');\n return A([\n {\n key: BEND_TEST_TYPE.SIDE_BEND,\n label: sideBend,\n },\n {\n key: BEND_TEST_TYPE.TRANSVERSAL,\n label: transversal,\n },\n {\n key: BEND_TEST_TYPE.FACE_BEND,\n label: faceBend,\n },\n {\n key: BEND_TEST_TYPE.LONGITUDINAL,\n label: longitudinal,\n },\n {\n key: BEND_TEST_TYPE.ROOT_BEND,\n label: rootBend,\n },\n {\n key: BEND_TEST_TYPE.BEND_BREAK,\n label: bendBreak,\n },\n ]);\n }\n\n @computed('intl.locale')\n get projectStatusOptions() {\n let { intl } = this;\n let pending = intl.t('lov.project-status.PENDING');\n let active = intl.t('lov.project-status.ACTIVE');\n let finished = intl.t('lov.project-status.FINISHED');\n return A([\n {\n key: PROJECT_STATUS.PENDING,\n label: pending,\n },\n {\n key: PROJECT_STATUS.ACTIVE,\n label: active,\n },\n {\n key: PROJECT_STATUS.FINISHED,\n label: finished,\n },\n ]);\n }\n\n @computed('intl.locale')\n get productFormOptions() {\n return A([\n {\n key: PRODUCT_FORM.PLATE,\n label: 'Plate',\n labelKey: 'lov.product-form.plate',\n },\n {\n key: PRODUCT_FORM.SHEET,\n label: 'Sheet',\n labelKey: 'lov.product-form.sheet',\n },\n {\n key: PRODUCT_FORM.BAR,\n label: 'Bar',\n labelKey: 'lov.product-form.bar',\n },\n {\n key: PRODUCT_FORM.ROD,\n label: 'Rod',\n labelKey: 'lov.product-form.rod',\n },\n {\n key: PRODUCT_FORM.FUSION_WELDED_PIPE,\n label: 'Fusion Welded Pipe',\n labelKey: 'lov.product-form.fusion-welded-pipe',\n },\n {\n key: PRODUCT_FORM.RESISTANCE_WELDED_PIPE,\n label: 'Resistance Welded Pipe',\n labelKey: 'lov.product-form.resistance-welded-pipe',\n },\n {\n key: PRODUCT_FORM.SEAMLESS_PIPE,\n label: 'Seamless Pipe',\n labelKey: 'lov.product-form.seamless-pipe',\n },\n {\n key: PRODUCT_FORM.CAST_PIPE,\n label: 'Cast Pipe',\n labelKey: 'lov.product-form.cast-pipe',\n },\n {\n key: PRODUCT_FORM.FORGED_PIPE,\n label: 'Forged Pipe',\n labelKey: 'lov.product-form.forged-pipe',\n },\n {\n key: PRODUCT_FORM.FLANGE,\n label: 'Flange',\n labelKey: 'lov.product-form.flange',\n },\n {\n key: PRODUCT_FORM.FITTING,\n label: 'Fitting',\n labelKey: 'lov.product-form.fitting',\n },\n {\n key: PRODUCT_FORM.FORGING,\n label: 'Forging',\n labelKey: 'lov.product-form.forging',\n },\n {\n key: PRODUCT_FORM.CASTING,\n label: 'Casting',\n labelKey: 'lov.product-form.casting',\n },\n {\n key: PRODUCT_FORM.I_BEAM,\n label: 'I-Beam',\n labelKey: 'lov.product-form.i-beam',\n },\n {\n key: PRODUCT_FORM.H_BEAM,\n label: 'H-Beam',\n labelKey: 'lov.product-form.h-beam',\n },\n {\n key: PRODUCT_FORM.T_BEAM,\n label: 'T-Beam',\n labelKey: 'lov.product-form.t-beam',\n },\n {\n key: PRODUCT_FORM.L_BEAN,\n label: 'L-Beam',\n labelKey: 'lov.product-form.l-beam',\n },\n {\n key: PRODUCT_FORM.U_BEAM,\n label: 'U-Beam',\n labelKey: 'lov.product-form.u-beam',\n },\n {\n key: PRODUCT_FORM.ELBOW_90_DEGREES,\n label: 'Elbow 90°',\n labelKey: 'lov.product-form.elbow-90',\n },\n {\n key: PRODUCT_FORM.ELBOW_45_DEGREES,\n label: 'Elbow 45°',\n labelKey: 'lov.product-form.elbow-45',\n },\n {\n key: PRODUCT_FORM.FLANGE_RTJ,\n label: 'Flange RTJ',\n labelKey: 'lov.product-form.flange-rtj',\n },\n { key: PRODUCT_FORM.FLANGE_RF, label: 'Flange RF', labelKey: 'lov.product-form.flange-rf' },\n { key: PRODUCT_FORM.FLANGE_FF, label: 'Flange FF', labelKey: 'lov.product-form.flange-ff' },\n { key: PRODUCT_FORM.ECC_RED, label: 'ECC Red', labelKey: 'lov.product-form.ecc-red' },\n { key: PRODUCT_FORM.CONC_RED, label: 'CONC Red', labelKey: 'lov.product-form.conc-red' },\n { key: PRODUCT_FORM.TEE_EQ, label: 'Tee EQ', labelKey: 'lov.product-form.tee-eq' },\n { key: PRODUCT_FORM.TEE_RED, label: 'Tee RED', labelKey: 'lov.product-form.tee-red' },\n { key: PRODUCT_FORM.CAP, label: 'Cap', labelKey: 'lov.product-form.cap' },\n { key: PRODUCT_FORM.STUB_END, label: 'Stub end', labelKey: 'lov.product-form.stub-end' },\n { key: PRODUCT_FORM.WELDOLET, label: 'Weldolet', labelKey: 'lov.product-form.weldolet' },\n {\n key: PRODUCT_FORM.WELDOFLANGEL,\n label: 'Weldoflange',\n labelKey: 'lov.product-form.weldoflange',\n },\n {\n key: PRODUCT_FORM.THREADOLET,\n label: 'Threadolet',\n labelKey: 'lov.product-form.threadolet',\n },\n {\n key: PRODUCT_FORM.GASKET_RTJ,\n label: 'Gasket RTJ',\n labelKey: 'lov.product-form.gasket-rtj',\n },\n {\n key: PRODUCT_FORM.GASKET_FLAT,\n label: 'Gasket Flat',\n labelKey: 'lov.product-form.gasket-flat',\n },\n { key: PRODUCT_FORM.GASKET, label: 'Gasket ', labelKey: 'lov.product-form.gasket' },\n { key: PRODUCT_FORM.TUBE, label: 'Tube ', labelKey: 'lov.product-form.tube' },\n { key: PRODUCT_FORM.ANGLE, label: 'Angle ', labelKey: 'lov.product-form.angle' },\n {\n key: PRODUCT_FORM.ELBOW_180_SHORT,\n label: 'Elbow 180° Short',\n labelKey: 'lov.product-form.elbow-180-short',\n },\n {\n key: PRODUCT_FORM.ELBOW_180_LONG,\n label: 'Elbow 180° Long',\n labelKey: 'lov.product-form.elbow-180-long',\n },\n {\n key: PRODUCT_FORM.ELBOW_90_SHORT,\n label: 'Elbow 90º Short Radius',\n labelKey: 'lov.product-form.elbow-90-short',\n },\n {\n key: PRODUCT_FORM.REDUCING_ELBOW_180_SHORT,\n label: 'Reducing Elbow 180º Short Radius',\n labelKey: 'lov.product-form.reducing-elbow-180-short',\n },\n {\n key: PRODUCT_FORM.REDUCING_ELBOW_90_SHORT,\n label: 'Reducing Elbow 90º Short Radius',\n labelKey: 'lov.product-form.reducing-elbow-90-short',\n },\n {\n key: PRODUCT_FORM.SOCKOLET,\n label: 'Sockolet',\n labelKey: 'lov.product-form.sockolet',\n },\n ]);\n }\n\n @computed('intl.locale')\n get fillerMaterialElectrodeFormOptions() {\n return A([\n {\n key: FILLER_MATERIAL_ELECTRODE_FORM.WIRE,\n label: 'Wire',\n },\n {\n key: FILLER_MATERIAL_ELECTRODE_FORM.PLATE,\n label: 'Plate',\n },\n ]);\n }\n\n @computed('intl.locale')\n get fillerMaterialGuideOptions() {\n return A([\n {\n key: FILLER_MATERIAL_GUIDE.CONSUMABLE,\n label: 'Consumable',\n },\n {\n key: FILLER_MATERIAL_GUIDE.NON_CONSUMABLE,\n label: 'Non-consumable',\n },\n ]);\n }\n\n @computed('intl.locale')\n get documentTypeOptions() {\n let { intl } = this;\n return A([\n {\n key: DOCUMENT_TYPE_OPTIONS.COATING_REPORT,\n label: intl.t('lov.document-type.COATING'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.PAINTING_REPORT,\n label: intl.t('lov.document-type.PAINTING'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.INSPECTION_TEST_PLAN,\n label: intl.t('lov.document-type.INSPECTION'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.RECEIVED_MATERIAL_REPORT,\n label: intl.t('lov.document-type.MATERIAL_REPORT'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.NON_CONFORMITY_REPORT,\n label: intl.t('lov.document-type.NON_CONFORMITY'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.PROCEDURE,\n label: intl.t('lov.document-type.PROCEDURE'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.PURCHASE_ORDER,\n label: intl.t('lov.document-type.PURCHASE'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.QUALITY_PLAN,\n label: intl.t('lov.document-type.QUALITY_PLAN'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.REQUEST_FOR_INFORMATION,\n label: intl.t('lov.document-type.RFI'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.SCOPE_OF_WORK,\n label: intl.t('lov.document-type.SCOPE'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.SPECIFICATION,\n label: intl.t('lov.document-type.SPECIFICATION'),\n },\n {\n key: DOCUMENT_TYPE_OPTIONS.OTHER,\n label: intl.t('lov.document-type.OTHER'),\n },\n ]);\n }\n\n @computed('intl.locale')\n get typeOfPersonOptions() {\n let { intl } = this;\n return A([\n {\n key: TYPE_OF_PERSON.WELDER,\n label: intl.t('lov.person-type.WELDER'),\n },\n {\n key: TYPE_OF_PERSON.FITTER,\n label: intl.t('lov.person-type.FITTER'),\n },\n {\n key: TYPE_OF_PERSON.INSPECTOR,\n label: intl.t('lov.person-type.INSPECTOR'),\n },\n ]);\n }\n\n @computed\n get schematicsWeldTypeOptions() {\n return [\n {\n id: 'butt-weld',\n label: 'Full penetration butt weld',\n },\n {\n id: 'partial-butt-weld',\n label: 'Partial penetration butt weld',\n },\n {\n id: 'fillet-weld',\n label: 'Fillet Weld',\n },\n {\n id: 'branch-connection',\n label: 'Branch Connection',\n },\n {\n id: 'overlay-weld',\n label: 'Overlay Weld',\n },\n ];\n }\n\n get componentProgressStateOptions() {\n let { intl } = this;\n return [\n {\n key: COMPONENT_PROGRESS_STATE.INITIAL,\n label: intl.t('lov.component-progress-state.initial'),\n },\n {\n key: COMPONENT_PROGRESS_STATE.COMPLETED,\n label: intl.t('lov.component-progress-state.completed'),\n },\n {\n key: COMPONENT_PROGRESS_STATE.TESTED,\n label: intl.t('lov.component-progress-state.tested'),\n },\n {\n key: COMPONENT_PROGRESS_STATE.PROCESSED,\n label: intl.t('lov.component-progress-state.processed'),\n },\n {\n key: COMPONENT_PROGRESS_STATE.SHIPPED,\n label: intl.t('lov.component-progress-state.shipped'),\n },\n ];\n }\n\n get nonDestructiveTestTypeOptions() {\n return A([\n {\n key: NON_DESTRUCTIVE_TEST_TYPE.VT,\n label: 'Visual Test',\n },\n {\n key: NON_DESTRUCTIVE_TEST_TYPE.RT,\n label: 'Radiographic Test',\n },\n {\n key: NON_DESTRUCTIVE_TEST_TYPE.PT,\n label: 'Penetration Test',\n },\n {\n key: NON_DESTRUCTIVE_TEST_TYPE.UT,\n label: 'Ultrasonic Test',\n },\n {\n key: NON_DESTRUCTIVE_TEST_TYPE.MT,\n label: 'Magnetic Test',\n },\n ]);\n }\n}\n","import Service from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n\n/** This service exist so that references to Window can be mocked in tests */\nexport default class WindowService extends Service {\n downloadFile(newLocation: string) {\n if (newLocation && !isEmpty(newLocation)) {\n window.location.assign(newLocation);\n }\n }\n\n confirm(message: string): boolean {\n return window.confirm(message);\n }\n}\n","import AdaptiveStore from 'ember-simple-auth/session-stores/adaptive';\n\nexport default AdaptiveStore.extend({\n localStorageKey: 'weldnote-session',\n cookieName: 'weldnote-cookie',\n});\n","import { isEmpty } from '@ember/utils';\n\nexport function getFilenameWithoutExtension(filename: string = ''): string {\n if (isEmpty(filename)) {\n return '';\n }\n if (filename.lastIndexOf('.') > 0) {\n return filename.substring(0, filename.lastIndexOf('.'));\n } else {\n return filename;\n }\n}\n","export default class UrlBuilder {\n private url: string;\n\n private parameters: any;\n\n constructor(url: string) {\n this.url = url;\n this.parameters = [];\n }\n\n addParameter(parameterName: string, value: any) {\n this.parameters.push({\n name: parameterName,\n value,\n });\n }\n\n build(): string {\n let { url } = this;\n for (let i = 0; i < this.parameters.length; i++) {\n let currentParameter = this.parameters[i];\n let parameterName = currentParameter.name;\n let parameterValue = currentParameter.value;\n if (i === 0) {\n url += `?${parameterName}=${parameterValue}`;\n } else {\n url += `&${parameterName}=${parameterValue}`;\n }\n }\n return url;\n }\n}\n","/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday\n * \n * Packaging modified by Edward Faulkner for easier integration with ES-module build tooling.\n */\n\nexport default function factory(moment)\n{\n 'use strict';\n\n /**\n * feature detection and helper functions\n */\n var hasMoment = typeof moment === 'function',\n\n hasEventListeners = !!window.addEventListener,\n\n document = window.document,\n\n sto = window.setTimeout,\n\n addEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.addEventListener(e, callback, !!capture);\n } else {\n el.attachEvent('on' + e, callback);\n }\n },\n\n removeEvent = function(el, e, callback, capture)\n {\n if (hasEventListeners) {\n el.removeEventListener(e, callback, !!capture);\n } else {\n el.detachEvent('on' + e, callback);\n }\n },\n\n trim = function(str)\n {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n },\n\n hasClass = function(el, cn)\n {\n return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n },\n\n addClass = function(el, cn)\n {\n if (!hasClass(el, cn)) {\n el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n }\n },\n\n removeClass = function(el, cn)\n {\n el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n },\n\n isArray = function(obj)\n {\n return (/Array/).test(Object.prototype.toString.call(obj));\n },\n\n isDate = function(obj)\n {\n return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n },\n\n isWeekend = function(date)\n {\n var day = date.getDay();\n return day === 0 || day === 6;\n },\n\n isLeapYear = function(year)\n {\n // solution lifted from date.js (MIT license): https://github.com/datejs/Datejs\n return ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n },\n\n getDaysInMonth = function(year, month)\n {\n return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n },\n\n setToStartOfDay = function(date)\n {\n if (isDate(date)) date.setHours(0,0,0,0);\n },\n\n compareDates = function(a,b)\n {\n // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n return a.getTime() === b.getTime();\n },\n\n extend = function(to, from, overwrite)\n {\n var prop, hasProp;\n for (prop in from) {\n hasProp = to[prop] !== undefined;\n if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n if (isDate(from[prop])) {\n if (overwrite) {\n to[prop] = new Date(from[prop].getTime());\n }\n }\n else if (isArray(from[prop])) {\n if (overwrite) {\n to[prop] = from[prop].slice(0);\n }\n } else {\n to[prop] = extend({}, from[prop], overwrite);\n }\n } else if (overwrite || !hasProp) {\n to[prop] = from[prop];\n }\n }\n return to;\n },\n\n fireEvent = function(el, eventName, data)\n {\n var ev;\n\n if (document.createEvent) {\n ev = document.createEvent('HTMLEvents');\n ev.initEvent(eventName, true, false);\n ev = extend(ev, data);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n ev = document.createEventObject();\n ev = extend(ev, data);\n el.fireEvent('on' + eventName, ev);\n }\n },\n\n adjustCalendar = function(calendar) {\n if (calendar.month < 0) {\n calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n calendar.month += 12;\n }\n if (calendar.month > 11) {\n calendar.year += Math.floor(Math.abs(calendar.month)/12);\n calendar.month -= 12;\n }\n return calendar;\n },\n\n /**\n * defaults and localisation\n */\n defaults = {\n\n // bind the picker to a form field\n field: null,\n\n // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n bound: undefined,\n\n // data-attribute on the input field with an aria assistance text (only applied when `bound` is set)\n ariaLabel: 'Use the arrow keys to pick a date',\n\n // position of the datepicker, relative to the field (default to bottom & left)\n // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n position: 'bottom left',\n\n // automatically fit in the viewport even if it means repositioning from the position option\n reposition: true,\n\n // the default output format for `.toString()` and `field` value\n format: 'YYYY-MM-DD',\n\n // the toString function which gets passed a current date object and format\n // and returns a string\n toString: null,\n\n // used to create date object from current input string\n parse: null,\n\n // the initial date to view when first opened\n defaultDate: null,\n\n // make the `defaultDate` the initial selected value\n setDefaultDate: false,\n\n // first day of week (0: Sunday, 1: Monday etc)\n firstDay: 0,\n\n // minimum number of days in the week that gets week number one\n // default ISO 8601, week 01 is the week with the first Thursday (4)\n firstWeekOfYearMinDays: 4,\n\n // the default flag for moment's strict date parsing\n formatStrict: false,\n\n // the minimum/earliest date that can be selected\n minDate: null,\n // the maximum/latest date that can be selected\n maxDate: null,\n\n // number of years either side, or array of upper/lower range\n yearRange: 10,\n\n // show week numbers at head of row\n showWeekNumber: false,\n\n // Week picker mode\n pickWholeWeek: false,\n\n // used internally (don't config outside)\n minYear: 0,\n maxYear: 9999,\n minMonth: undefined,\n maxMonth: undefined,\n\n startRange: null,\n endRange: null,\n\n isRTL: false,\n\n // Additional text to append to the year in the calendar title\n yearSuffix: '',\n\n // Render the month after year in the calendar title\n showMonthAfterYear: false,\n\n // Render days of the calendar grid that fall in the next or previous month\n showDaysInNextAndPreviousMonths: false,\n\n // Allows user to select days that fall in the next or previous month\n enableSelectionDaysInNextAndPreviousMonths: false,\n\n // how many months are visible\n numberOfMonths: 1,\n\n // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n // only used for the first display or when a selected date is not visible\n mainCalendar: 'left',\n\n // Specify a DOM element to render the calendar in\n container: undefined,\n\n // Blur field when date is selected\n blurFieldOnSelect : true,\n\n // internationalization\n i18n: {\n previousMonth : 'Previous Month',\n nextMonth : 'Next Month',\n months : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n weekdays : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n },\n\n // Theme Classname\n theme: null,\n\n // events array\n events: [],\n\n // callback function\n onSelect: null,\n onOpen: null,\n onClose: null,\n onDraw: null,\n\n // Enable keyboard input\n keyboardInput: true\n },\n\n\n /**\n * templating functions to abstract HTML rendering\n */\n renderDayName = function(opts, day, abbr)\n {\n day += opts.firstDay;\n while (day >= 7) {\n day -= 7;\n }\n return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n },\n\n renderDay = function(opts)\n {\n var arr = [];\n var ariaSelected = 'false';\n if (opts.isEmpty) {\n if (opts.showDaysInNextAndPreviousMonths) {\n arr.push('is-outside-current-month');\n\n if(!opts.enableSelectionDaysInNextAndPreviousMonths) {\n arr.push('is-selection-disabled');\n }\n\n } else {\n return '';\n }\n }\n if (opts.isDisabled) {\n arr.push('is-disabled');\n }\n if (opts.isToday) {\n arr.push('is-today');\n }\n if (opts.isSelected) {\n arr.push('is-selected');\n ariaSelected = 'true';\n }\n if (opts.hasEvent) {\n arr.push('has-event');\n }\n if (opts.isInRange) {\n arr.push('is-inrange');\n }\n if (opts.isStartRange) {\n arr.push('is-startrange');\n }\n if (opts.isEndRange) {\n arr.push('is-endrange');\n }\n return '' +\n '' +\n '';\n },\n\n isoWeek = function(date, firstWeekOfYearMinDays) {\n // Ensure we're at the start of the day.\n date.setHours(0, 0, 0, 0);\n\n // Thursday in current week decides the year because January 4th\n // is always in the first week according to ISO8601.\n var yearDay = date.getDate(),\n weekDay = date.getDay(),\n dayInFirstWeek = firstWeekOfYearMinDays,\n dayShift = dayInFirstWeek - 1, // counting starts at 0\n daysPerWeek = 7,\n prevWeekDay = function(day) { return (day + daysPerWeek - 1) % daysPerWeek; };\n\n // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n date.setDate(yearDay + dayShift - prevWeekDay(weekDay));\n\n var jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek),\n msPerDay = 24 * 60 * 60 * 1000,\n daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay,\n weekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);\n\n return weekNum;\n },\n\n renderWeek = function (d, m, y, firstWeekOfYearMinDays) {\n var date = new Date(y, m, d),\n week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);\n\n return '' + week + '';\n },\n\n renderRow = function(days, isRTL, pickWholeWeek, isRowSelected)\n {\n return '' + (isRTL ? days.reverse() : days).join('') + '';\n },\n\n renderBody = function(rows)\n {\n return '' + rows.join('') + '';\n },\n\n renderHead = function(opts)\n {\n var i, arr = [];\n if (opts.showWeekNumber) {\n arr.push('');\n }\n for (i = 0; i < 7; i++) {\n arr.push('' + renderDayName(opts, i, true) + '');\n }\n return '' + (opts.isRTL ? arr.reverse() : arr).join('') + '';\n },\n\n renderTitle = function(instance, c, year, month, refYear, randId)\n {\n var i, j, arr,\n opts = instance._o,\n isMinYear = year === opts.minYear,\n isMaxYear = year === opts.maxYear,\n html = '
',\n monthHtml,\n yearHtml,\n prev = true,\n next = true;\n\n for (arr = [], i = 0; i < 12; i++) {\n arr.push('');\n }\n\n monthHtml = '
' + opts.i18n.months[month] + '
';\n\n if (isArray(opts.yearRange)) {\n i = opts.yearRange[0];\n j = opts.yearRange[1] + 1;\n } else {\n i = year - opts.yearRange;\n j = 1 + year + opts.yearRange;\n }\n\n for (arr = []; i < j && i <= opts.maxYear; i++) {\n if (i >= opts.minYear) {\n arr.push('');\n }\n }\n yearHtml = '
' + year + opts.yearSuffix + '
';\n\n if (opts.showMonthAfterYear) {\n html += yearHtml + monthHtml;\n } else {\n html += monthHtml + yearHtml;\n }\n\n if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n prev = false;\n }\n\n if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n next = false;\n }\n\n if (c === 0) {\n html += '';\n }\n if (c === (instance._o.numberOfMonths - 1) ) {\n html += '';\n }\n\n return html += '
';\n },\n\n renderTable = function(opts, data, randId)\n {\n return '' + renderHead(opts) + renderBody(data) + '
';\n },\n\n\n /**\n * Pikaday constructor\n */\n Pikaday = function(options)\n {\n var self = this,\n opts = self.config(options);\n\n self._onMouseDown = function(e)\n {\n if (!self._v) {\n return;\n }\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n\n if (!hasClass(target, 'is-disabled')) {\n if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n if (opts.bound) {\n sto(function() {\n self.hide();\n if (opts.blurFieldOnSelect && opts.field) {\n opts.field.blur();\n }\n }, 100);\n }\n }\n else if (hasClass(target, 'pika-prev')) {\n self.prevMonth();\n }\n else if (hasClass(target, 'pika-next')) {\n self.nextMonth();\n }\n }\n if (!hasClass(target, 'pika-select')) {\n // if this is touch event prevent mouse events emulation\n if (e.preventDefault) {\n e.preventDefault();\n } else {\n e.returnValue = false;\n return false;\n }\n } else {\n self._c = true;\n }\n };\n\n self._onChange = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement;\n if (!target) {\n return;\n }\n if (hasClass(target, 'pika-select-month')) {\n self.gotoMonth(target.value);\n }\n else if (hasClass(target, 'pika-select-year')) {\n self.gotoYear(target.value);\n }\n };\n\n self._onKeyChange = function(e)\n {\n e = e || window.event;\n\n if (self.isVisible()) {\n\n switch(e.keyCode){\n case 13:\n case 27:\n if (opts.field) {\n opts.field.blur();\n }\n break;\n case 37:\n self.adjustDate('subtract', 1);\n break;\n case 38:\n self.adjustDate('subtract', 7);\n break;\n case 39:\n self.adjustDate('add', 1);\n break;\n case 40:\n self.adjustDate('add', 7);\n break;\n case 8:\n case 46:\n self.setDate(null);\n break;\n }\n }\n };\n\n self._parseFieldValue = function()\n {\n if (opts.parse) {\n return opts.parse(opts.field.value, opts.format);\n } else if (hasMoment) {\n var date = moment(opts.field.value, opts.format, opts.formatStrict);\n return (date && date.isValid()) ? date.toDate() : null;\n } else {\n return new Date(Date.parse(opts.field.value));\n }\n };\n\n self._onInputChange = function(e)\n {\n var date;\n\n if (e.firedBy === self) {\n return;\n }\n date = self._parseFieldValue();\n if (isDate(date)) {\n self.setDate(date);\n }\n if (!self._v) {\n self.show();\n }\n };\n\n self._onInputFocus = function()\n {\n self.show();\n };\n\n self._onInputClick = function()\n {\n self.show();\n };\n\n self._onInputBlur = function()\n {\n // IE allows pika div to gain focus; catch blur the input field\n var pEl = document.activeElement;\n do {\n if (hasClass(pEl, 'pika-single')) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n\n if (!self._c) {\n self._b = sto(function() {\n self.hide();\n }, 50);\n }\n self._c = false;\n };\n\n self._onClick = function(e)\n {\n e = e || window.event;\n var target = e.target || e.srcElement,\n pEl = target;\n if (!target) {\n return;\n }\n if (!hasEventListeners && hasClass(target, 'pika-select')) {\n if (!target.onchange) {\n target.setAttribute('onchange', 'return;');\n addEvent(target, 'change', self._onChange);\n }\n }\n do {\n if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n return;\n }\n }\n while ((pEl = pEl.parentNode));\n if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n self.hide();\n }\n };\n\n self.el = document.createElement('div');\n self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n addEvent(self.el, 'mousedown', self._onMouseDown, true);\n addEvent(self.el, 'touchend', self._onMouseDown, true);\n addEvent(self.el, 'change', self._onChange);\n\n if (opts.keyboardInput) {\n addEvent(document, 'keydown', self._onKeyChange);\n }\n\n if (opts.field) {\n if (opts.container) {\n opts.container.appendChild(self.el);\n } else if (opts.bound) {\n document.body.appendChild(self.el);\n } else {\n opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n }\n addEvent(opts.field, 'change', self._onInputChange);\n\n if (!opts.defaultDate) {\n opts.defaultDate = self._parseFieldValue();\n opts.setDefaultDate = true;\n }\n }\n\n var defDate = opts.defaultDate;\n\n if (isDate(defDate)) {\n if (opts.setDefaultDate) {\n self.setDate(defDate, true);\n } else {\n self.gotoDate(defDate);\n }\n } else {\n self.gotoDate(new Date());\n }\n\n if (opts.bound) {\n this.hide();\n self.el.className += ' is-bound';\n addEvent(opts.trigger, 'click', self._onInputClick);\n addEvent(opts.trigger, 'focus', self._onInputFocus);\n addEvent(opts.trigger, 'blur', self._onInputBlur);\n } else {\n this.show();\n }\n };\n\n\n /**\n * public Pikaday API\n */\n Pikaday.prototype = {\n\n\n /**\n * configure functionality\n */\n config: function(options)\n {\n if (!this._o) {\n this._o = extend({}, defaults, true);\n }\n\n var opts = extend(this._o, options, true);\n\n opts.isRTL = !!opts.isRTL;\n\n opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n opts.disableWeekends = !!opts.disableWeekends;\n\n opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n var nom = parseInt(opts.numberOfMonths, 10) || 1;\n opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n if (!isDate(opts.minDate)) {\n opts.minDate = false;\n }\n if (!isDate(opts.maxDate)) {\n opts.maxDate = false;\n }\n if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n opts.maxDate = opts.minDate = false;\n }\n if (opts.minDate) {\n this.setMinDate(opts.minDate);\n }\n if (opts.maxDate) {\n this.setMaxDate(opts.maxDate);\n }\n\n if (isArray(opts.yearRange)) {\n var fallback = new Date().getFullYear() - 10;\n opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n } else {\n opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n if (opts.yearRange > 100) {\n opts.yearRange = 100;\n }\n }\n\n return opts;\n },\n\n /**\n * return a formatted string of the current selection (using Moment.js if available)\n */\n toString: function(format)\n {\n format = format || this._o.format;\n if (!isDate(this._d)) {\n return '';\n }\n if (this._o.toString) {\n return this._o.toString(this._d, format);\n }\n if (hasMoment) {\n return moment(this._d).format(format);\n }\n return this._d.toDateString();\n },\n\n /**\n * return a Moment.js object of the current selection (if available)\n */\n getMoment: function()\n {\n return hasMoment ? moment(this._d) : null;\n },\n\n /**\n * set the current selection from a Moment.js object (if available)\n */\n setMoment: function(date, preventOnSelect)\n {\n if (hasMoment && moment.isMoment(date)) {\n this.setDate(date.toDate(), preventOnSelect);\n }\n },\n\n /**\n * return a Date object of the current selection\n */\n getDate: function()\n {\n return isDate(this._d) ? new Date(this._d.getTime()) : null;\n },\n\n /**\n * set the current selection\n */\n setDate: function(date, preventOnSelect)\n {\n if (!date) {\n this._d = null;\n\n if (this._o.field) {\n this._o.field.value = '';\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n\n return this.draw();\n }\n if (typeof date === 'string') {\n date = new Date(Date.parse(date));\n }\n if (!isDate(date)) {\n return;\n }\n\n var min = this._o.minDate,\n max = this._o.maxDate;\n\n if (isDate(min) && date < min) {\n date = min;\n } else if (isDate(max) && date > max) {\n date = max;\n }\n\n this._d = new Date(date.getTime());\n setToStartOfDay(this._d);\n this.gotoDate(this._d);\n\n if (this._o.field) {\n this._o.field.value = this.toString();\n fireEvent(this._o.field, 'change', { firedBy: this });\n }\n if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n this._o.onSelect.call(this, this.getDate());\n }\n },\n\n /**\n * clear and reset the date\n */\n clear: function()\n {\n this.setDate(null);\n },\n\n /**\n * change view to a specific date\n */\n gotoDate: function(date)\n {\n var newCalendar = true;\n\n if (!isDate(date)) {\n return;\n }\n\n if (this.calendars) {\n var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n visibleDate = date.getTime();\n // get the end of the month\n lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n }\n\n if (newCalendar) {\n this.calendars = [{\n month: date.getMonth(),\n year: date.getFullYear()\n }];\n if (this._o.mainCalendar === 'right') {\n this.calendars[0].month += 1 - this._o.numberOfMonths;\n }\n }\n\n this.adjustCalendars();\n },\n\n adjustDate: function(sign, days) {\n\n var day = this.getDate() || new Date();\n var difference = parseInt(days)*24*60*60*1000;\n\n var newDay;\n\n if (sign === 'add') {\n newDay = new Date(day.valueOf() + difference);\n } else if (sign === 'subtract') {\n newDay = new Date(day.valueOf() - difference);\n }\n\n this.setDate(newDay);\n },\n\n adjustCalendars: function() {\n this.calendars[0] = adjustCalendar(this.calendars[0]);\n for (var c = 1; c < this._o.numberOfMonths; c++) {\n this.calendars[c] = adjustCalendar({\n month: this.calendars[0].month + c,\n year: this.calendars[0].year\n });\n }\n this.draw();\n },\n\n gotoToday: function()\n {\n this.gotoDate(new Date());\n },\n\n /**\n * change view to a specific month (zero-index, e.g. 0: January)\n */\n gotoMonth: function(month)\n {\n if (!isNaN(month)) {\n this.calendars[0].month = parseInt(month, 10);\n this.adjustCalendars();\n }\n },\n\n nextMonth: function()\n {\n this.calendars[0].month++;\n this.adjustCalendars();\n },\n\n prevMonth: function()\n {\n this.calendars[0].month--;\n this.adjustCalendars();\n },\n\n /**\n * change view to a specific full year (e.g. \"2012\")\n */\n gotoYear: function(year)\n {\n if (!isNaN(year)) {\n this.calendars[0].year = parseInt(year, 10);\n this.adjustCalendars();\n }\n },\n\n /**\n * change the minDate\n */\n setMinDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.minDate = value;\n this._o.minYear = value.getFullYear();\n this._o.minMonth = value.getMonth();\n } else {\n this._o.minDate = defaults.minDate;\n this._o.minYear = defaults.minYear;\n this._o.minMonth = defaults.minMonth;\n this._o.startRange = defaults.startRange;\n }\n\n this.draw();\n },\n\n /**\n * change the maxDate\n */\n setMaxDate: function(value)\n {\n if(value instanceof Date) {\n setToStartOfDay(value);\n this._o.maxDate = value;\n this._o.maxYear = value.getFullYear();\n this._o.maxMonth = value.getMonth();\n } else {\n this._o.maxDate = defaults.maxDate;\n this._o.maxYear = defaults.maxYear;\n this._o.maxMonth = defaults.maxMonth;\n this._o.endRange = defaults.endRange;\n }\n\n this.draw();\n },\n\n setStartRange: function(value)\n {\n this._o.startRange = value;\n },\n\n setEndRange: function(value)\n {\n this._o.endRange = value;\n },\n\n /**\n * refresh the HTML\n */\n draw: function(force)\n {\n if (!this._v && !force) {\n return;\n }\n var opts = this._o,\n minYear = opts.minYear,\n maxYear = opts.maxYear,\n minMonth = opts.minMonth,\n maxMonth = opts.maxMonth,\n html = '',\n randId;\n\n if (this._y <= minYear) {\n this._y = minYear;\n if (!isNaN(minMonth) && this._m < minMonth) {\n this._m = minMonth;\n }\n }\n if (this._y >= maxYear) {\n this._y = maxYear;\n if (!isNaN(maxMonth) && this._m > maxMonth) {\n this._m = maxMonth;\n }\n }\n\n for (var c = 0; c < opts.numberOfMonths; c++) {\n randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n html += '
' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '
';\n }\n\n this.el.innerHTML = html;\n\n if (opts.bound) {\n if(opts.field.type !== 'hidden') {\n sto(function() {\n opts.trigger.focus();\n }, 1);\n }\n }\n\n if (typeof this._o.onDraw === 'function') {\n this._o.onDraw(this);\n }\n\n if (opts.bound) {\n // let the screen reader user know to use arrow keys\n opts.field.setAttribute('aria-label', opts.ariaLabel);\n }\n },\n\n adjustPosition: function()\n {\n var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect, leftAligned, bottomAligned;\n\n if (this._o.container) return;\n\n this.el.style.position = 'absolute';\n\n field = this._o.trigger;\n pEl = field;\n width = this.el.offsetWidth;\n height = this.el.offsetHeight;\n viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n leftAligned = true;\n bottomAligned = true;\n\n if (typeof field.getBoundingClientRect === 'function') {\n clientRect = field.getBoundingClientRect();\n left = clientRect.left + window.pageXOffset;\n top = clientRect.bottom + window.pageYOffset;\n } else {\n left = pEl.offsetLeft;\n top = pEl.offsetTop + pEl.offsetHeight;\n while((pEl = pEl.offsetParent)) {\n left += pEl.offsetLeft;\n top += pEl.offsetTop;\n }\n }\n\n // default position is bottom & left\n if ((this._o.reposition && left + width > viewportWidth) ||\n (\n this._o.position.indexOf('right') > -1 &&\n left - width + field.offsetWidth > 0\n )\n ) {\n left = left - width + field.offsetWidth;\n leftAligned = false;\n }\n if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n (\n this._o.position.indexOf('top') > -1 &&\n top - height - field.offsetHeight > 0\n )\n ) {\n top = top - height - field.offsetHeight;\n bottomAligned = false;\n }\n \n if (left < 0) {\n left = 0;\n }\n\n if (top < 0) {\n top = 0;\n }\n\n this.el.style.left = left + 'px';\n this.el.style.top = top + 'px';\n\n addClass(this.el, leftAligned ? 'left-aligned' : 'right-aligned');\n addClass(this.el, bottomAligned ? 'bottom-aligned' : 'top-aligned');\n removeClass(this.el, !leftAligned ? 'left-aligned' : 'right-aligned');\n removeClass(this.el, !bottomAligned ? 'bottom-aligned' : 'top-aligned');\n },\n\n /**\n * render HTML for a particular month\n */\n render: function(year, month, randId)\n {\n var opts = this._o,\n now = new Date(),\n days = getDaysInMonth(year, month),\n before = new Date(year, month, 1).getDay(),\n data = [],\n row = [];\n setToStartOfDay(now);\n if (opts.firstDay > 0) {\n before -= opts.firstDay;\n if (before < 0) {\n before += 7;\n }\n }\n var previousMonth = month === 0 ? 11 : month - 1,\n nextMonth = month === 11 ? 0 : month + 1,\n yearOfPreviousMonth = month === 0 ? year - 1 : year,\n yearOfNextMonth = month === 11 ? year + 1 : year,\n daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n var cells = days + before,\n after = cells;\n while(after > 7) {\n after -= 7;\n }\n cells += 7 - after;\n var isWeekSelected = false;\n for (var i = 0, r = 0; i < cells; i++)\n {\n var day = new Date(year, month, 1 + (i - before)),\n isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n isToday = compareDates(day, now),\n hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false,\n isEmpty = i < before || i >= (days + before),\n dayNumber = 1 + (i - before),\n monthNumber = month,\n yearNumber = year,\n isStartRange = opts.startRange && compareDates(opts.startRange, day),\n isEndRange = opts.endRange && compareDates(opts.endRange, day),\n isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n isDisabled = (opts.minDate && day < opts.minDate) ||\n (opts.maxDate && day > opts.maxDate) ||\n (opts.disableWeekends && isWeekend(day)) ||\n (opts.disableDayFn && opts.disableDayFn(day));\n\n if (isEmpty) {\n if (i < before) {\n dayNumber = daysInPreviousMonth + dayNumber;\n monthNumber = previousMonth;\n yearNumber = yearOfPreviousMonth;\n } else {\n dayNumber = dayNumber - days;\n monthNumber = nextMonth;\n yearNumber = yearOfNextMonth;\n }\n }\n\n var dayConfig = {\n day: dayNumber,\n month: monthNumber,\n year: yearNumber,\n hasEvent: hasEvent,\n isSelected: isSelected,\n isToday: isToday,\n isDisabled: isDisabled,\n isEmpty: isEmpty,\n isStartRange: isStartRange,\n isEndRange: isEndRange,\n isInRange: isInRange,\n showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,\n enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths\n };\n\n if (opts.pickWholeWeek && isSelected) {\n isWeekSelected = true;\n }\n\n row.push(renderDay(dayConfig));\n\n if (++r === 7) {\n if (opts.showWeekNumber) {\n row.unshift(renderWeek(i - before, month, year, opts.firstWeekOfYearMinDays));\n }\n data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));\n row = [];\n r = 0;\n isWeekSelected = false;\n }\n }\n return renderTable(opts, data, randId);\n },\n\n isVisible: function()\n {\n return this._v;\n },\n\n show: function()\n {\n if (!this.isVisible()) {\n this._v = true;\n this.draw();\n removeClass(this.el, 'is-hidden');\n if (this._o.bound) {\n addEvent(document, 'click', this._onClick);\n this.adjustPosition();\n }\n if (typeof this._o.onOpen === 'function') {\n this._o.onOpen.call(this);\n }\n }\n },\n\n hide: function()\n {\n var v = this._v;\n if (v !== false) {\n if (this._o.bound) {\n removeEvent(document, 'click', this._onClick);\n }\n\n if (!this._o.container) {\n this.el.style.position = 'static'; // reset\n this.el.style.left = 'auto';\n this.el.style.top = 'auto';\n }\n addClass(this.el, 'is-hidden');\n this._v = false;\n if (v !== undefined && typeof this._o.onClose === 'function') {\n this._o.onClose.call(this);\n }\n }\n },\n\n /**\n * GAME OVER\n */\n destroy: function()\n {\n var opts = this._o;\n\n this.hide();\n removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n removeEvent(this.el, 'touchend', this._onMouseDown, true);\n removeEvent(this.el, 'change', this._onChange);\n if (opts.keyboardInput) {\n removeEvent(document, 'keydown', this._onKeyChange);\n }\n if (opts.field) {\n removeEvent(opts.field, 'change', this._onInputChange);\n if (opts.bound) {\n removeEvent(opts.trigger, 'click', this._onInputClick);\n removeEvent(opts.trigger, 'focus', this._onInputFocus);\n removeEvent(opts.trigger, 'blur', this._onInputBlur);\n }\n }\n if (this.el.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n }\n\n };\n\n return Pikaday;\n}\n","import { get } from '@ember/object';\nimport { A } from '@ember/array';\nimport { isEmpty } from '@ember/utils';\nimport {\n isFilletWeld,\n isButtWeld,\n isOverlayWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { isSingleLayer, isMultiLayer } from 'weldnote/utils/rules/welding-detail';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport WeldingPositionApprovalRange from 'weldnote/utils/approval-range/pqr/welding-position';\nimport { formatRangeWith2Decimals } from 'weldnote/utils/unit-system/format';\nimport BaseMaterialRulesASME from 'weldnote/utils/pqr-base-material-rules-asme';\n\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n PRODUCT_TYPE,\n UNIT_SYSTEM,\n WELDING_DETAILS,\n ARC_TRANSFER_MODES,\n WELD_TYPES,\n OVERLAY_TYPE_OPTIONS,\n} = Constants;\nconst { isGroup } = BaseMaterialRulesASME;\n\nexport default class AsmeIXApprovalRanges {\n constructor(\n pqr,\n {\n weldTypes: allWeldTypes,\n baseMaterials: allBaseMaterials,\n weldingDetails: allWeldingDetails,\n processMecanizations: allProcessMecanizations,\n typeCurrentPolarities: allTypeCurrentPolarity,\n weldingPositions: allWeldingPositions,\n transferModes: allTransferModes,\n unitSystem = UNIT_SYSTEM.METRIC,\n }\n ) {\n this.pqr = pqr;\n let industryCodeId = get(this.standard, 'code.id');\n\n this.allWeldTypes = allWeldTypes.filter((weldType) => {\n return get(weldType, 'industryCode.id') === industryCodeId;\n });\n this._baseMaterials = allBaseMaterials;\n this.allWeldingDetails = allWeldingDetails;\n this.allProcessMecanizations = allProcessMecanizations;\n this.allTypeCurrentPolarity = allTypeCurrentPolarity;\n this._weldingPositions = allWeldingPositions;\n this._transferModes = allTransferModes;\n this.unitSystem = pqr.unitSystem || unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS B2.1 Approval Ranges');\n }\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => get(position, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => get(baseMaterial, 'code.id') === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) => get(transferMode, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get industryCodeId() {\n return get(this.standard, 'code.id');\n }\n\n get standard() {\n return this.pqr.get('standard');\n }\n\n get productTypeTestPiece() {\n return this.pqr.get('productTypeTestPiece');\n }\n\n get weldTypeTestPiece() {\n return this.pqr.get('weldTypeTestPiece');\n }\n\n get weldTypeCode() {\n return this.pqr.get('weldTypeTestPiece.weldType');\n }\n\n get baseMaterial1ThicknessValue() {\n return this.pqr.get('baseMaterial1Thickness');\n }\n\n get baseMaterial1() {\n return this.pqr.get('baseMaterial1TestPiece');\n }\n\n get baseMaterial2ThicknessValue() {\n return this.pqr.get('baseMaterial2Thickness');\n }\n\n get baseMaterial2() {\n return this.pqr.get('baseMaterial2TestPiece');\n }\n\n get weldingDetailsValues() {\n return this.pqr.get('weldingDetailsTestPiece');\n }\n\n get weldingProcessRoot() {\n return this.pqr.get('weldingProcessRootTestPiece');\n }\n\n get weldingProcessFill() {\n return this.pqr.get('weldingProcessFillTestPiece');\n }\n\n get weldingProcessCap() {\n return this.pqr.get('weldingProcessCapTestPiece');\n }\n\n get transferModeRoot() {\n return this.pqr.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.pqr.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.pqr.get('arcTransferModeCapTestPiece');\n }\n\n get impactTemperature() {\n return this.pqr.get('impactTestTemperature');\n }\n\n get impactRequired() {\n return this.pqr.get('impactTestRequired');\n }\n\n get interpassMinimum() {\n return this.pqr.get('interpassTemperatureMinimumApprovalRange');\n }\n\n filterWeldTypes(allTypes, listToFilter, industryCode) {\n let result = A();\n allTypes\n .filter((item) => {\n return get(item, 'industryCode.id') === industryCode;\n })\n .forEach((item) => {\n let name = get(item, 'weldType');\n if (listToFilter.indexOf(name) > -1) {\n result.pushObject(item);\n }\n });\n return result;\n }\n\n weldType(testPiece) {\n let result = A();\n let { industryCodeId } = this;\n\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let curryedFilterTypes = (allWeldTypes, industryCode) => (listToFilter) =>\n this.filterWeldTypes(allWeldTypes, listToFilter, industryCode);\n let filterCurrentWeldTypes = curryedFilterTypes(this.allWeldTypes, industryCodeId);\n if (isFilletWeld(testPiece)) {\n return filterCurrentWeldTypes([WELD_TYPES.FILLET_WELD]);\n }\n if (isButtWeld(testPiece)) {\n return filterCurrentWeldTypes([\n WELD_TYPES.FILLET_WELD,\n WELD_TYPES.BUTT_WELD,\n WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD,\n ]);\n }\n if (isPartialPenetrationButtWeld(testPiece)) {\n return filterCurrentWeldTypes([\n WELD_TYPES.FILLET_WELD,\n WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD,\n ]);\n }\n\n // If no other rules is found, test piece qualifies itself\n if (isEmpty(result) && !isEmpty(testPiece)) {\n result.pushObject(testPiece);\n }\n\n return result;\n }\n\n _findWeldTypes(types = []) {\n let result = [];\n types.forEach((weldType) => {\n result.push(this.allWeldTypes.findBy('weldType', weldType));\n });\n return result;\n }\n\n productType(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n }\n\n weldingProcess(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n _findWeldingDetail(detail) {\n return this.allWeldingDetails.findBy('shortDesignation', detail);\n }\n\n _findListWeldingDetails(details = []) {\n let results = [];\n details.forEach((d) => {\n let detail = this._findWeldingDetail(d);\n if (detail) {\n results.push(detail);\n }\n });\n return results;\n }\n\n _isWeldingDetail(testPiece, detail) {\n return testPiece.findBy('shortDesignation', detail);\n }\n\n weldingDetails(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let resultDetailNames = A();\n let result = A();\n let { weldTypeCode: weldType } = this;\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n testPiece.forEach((detail) => {\n let designation = detail.get('shortDesignation');\n resultDetailNames.pushObject(designation);\n });\n } else {\n testPiece.forEach((detail) => {\n let designation = detail.get('shortDesignation');\n if (\n designation === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n designation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n designation === WELDING_DETAILS.BOTH_SIDES ||\n designation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING\n ) {\n [\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else if (\n designation === WELDING_DETAILS.SINGLE_LAYER ||\n designation === WELDING_DETAILS.MULTI_LAYER\n ) {\n if (this.impactRequirements) {\n resultDetailNames.pushObject(designation);\n } else {\n resultDetailNames.pushObject(WELDING_DETAILS.SINGLE_LAYER);\n resultDetailNames.pushObject(WELDING_DETAILS.MULTI_LAYER);\n }\n } else if (designation === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING) {\n [\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else {\n resultDetailNames.pushObject(designation);\n }\n });\n }\n resultDetailNames.uniq().forEach((name) => {\n let position = this.allWeldingDetails.findBy('shortDesignation', name);\n if (position) {\n result.pushObject(position);\n }\n });\n return result;\n }\n\n processMecanization(testPiece) {\n if (!isEmpty(testPiece)) {\n return this.allProcessMecanizations;\n }\n return [];\n }\n\n transferMode(testPiece, weldingProcess) {\n if (isEmpty(testPiece) || isEmpty(weldingProcess)) {\n return [];\n }\n let weldingProcessName = get(weldingProcess, 'shortDesignation');\n let weldingProcesses = ['GMAW', 'FCAW', 'MCAW', 'FCAW-S'];\n if (!isEmpty(weldingProcessName) && weldingProcesses.indexOf(weldingProcessName) > -1) {\n let arcModeName = testPiece.get('transferMode');\n if (\n arcModeName === ARC_TRANSFER_MODES.SPRAY ||\n arcModeName === ARC_TRANSFER_MODES.GLOBULAR ||\n arcModeName === ARC_TRANSFER_MODES.PULSED_SPRAY\n ) {\n return this.allTransferModes.filter((mode) => {\n if (\n mode.get('transferMode') === ARC_TRANSFER_MODES.SPRAY ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.GLOBULAR ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.PULSED_SPRAY\n ) {\n return true;\n }\n });\n } else {\n return [testPiece];\n }\n } else {\n return [];\n }\n }\n\n filterTypeCurrent(allCurrents, toFilter) {\n let result = [];\n toFilter.forEach((type) => {\n allCurrents.forEach((current) => {\n if (current.get('typeCurrent') === type) {\n result.pushObject(current);\n return;\n }\n });\n });\n return result;\n }\n\n typeCurrentAndPolarity(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n if (this.impactRequirements) {\n return [testPiece];\n } else {\n return this.filterTypeCurrent(this.allTypeCurrentPolarity, ['DC+', 'DC-', 'Pulsed', 'AC']);\n }\n }\n\n diameter(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._toRange(0, null);\n }\n\n weldedThickness(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._calculateWeldingThicknessRange(testPiece);\n }\n\n _calculateWeldingThicknessRange(testPiece) {\n let thickness = parseFloat(testPiece);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let { smallestBaseMaterialThickness } = this;\n let result = {};\n\n if (this.isFilletWeld) {\n result.min = 0;\n result.max = null;\n return result;\n }\n\n result.min = 0;\n if (this.isMetricSystem) {\n if (thickness >= 0 && thickness < 19) {\n result.max = 2 * thickness;\n } else if (thickness >= 19) {\n if (smallestBaseMaterialThickness >= 19 && smallestBaseMaterialThickness < 38) {\n result.max = 2 * smallestBaseMaterialThickness;\n } else if (smallestBaseMaterialThickness >= 38 && smallestBaseMaterialThickness <= 150) {\n result.max = 200;\n } else if (smallestBaseMaterialThickness > 150) {\n result.max = 1.33 * smallestBaseMaterialThickness;\n }\n }\n } else if (this.isImperialSystem) {\n if (thickness >= 0 && thickness < 0.75) {\n result.max = 2 * thickness;\n } else if (thickness >= 0.75) {\n if (smallestBaseMaterialThickness >= 0.75 && smallestBaseMaterialThickness < 1.5) {\n result.max = 2 * smallestBaseMaterialThickness;\n } else if (smallestBaseMaterialThickness >= 1.5 && smallestBaseMaterialThickness <= 6) {\n result.max = 8;\n } else if (smallestBaseMaterialThickness > 6) {\n result.max = 1.33 * smallestBaseMaterialThickness;\n }\n }\n }\n return result;\n }\n\n baseMaterialThickness(thickness1, thickness2) {\n if (isEmpty(thickness1)) {\n return {\n material1: this._emptyRange,\n material2: this._emptyRange,\n };\n }\n\n if (this.isFilletWeld) {\n return {\n material1: {\n min: 0,\n max: null,\n },\n\n material2: {\n min: 0,\n max: null,\n },\n };\n }\n\n let resultThickness1 = null;\n let resultThickness2 = null;\n if (this.isMetricSystem) {\n if (this.isOverlayWeld) {\n resultThickness1 = this._thicknessASMEOverlayWeldMetricSystem(thickness1);\n resultThickness2 = this._thicknessASMEOverlayWeldMetricSystem(thickness2);\n } else {\n resultThickness1 = this._thicknessASMEOtherWeldTypesMetricSystem(\n thickness1,\n this.impactRequirements\n );\n resultThickness2 = this._thicknessASMEOtherWeldTypesMetricSystem(\n thickness2,\n this.impactRequirements\n );\n }\n } else if (this.isImperialSystem) {\n if (this.isOverlayWeld) {\n resultThickness1 = this._thicknessASMEOverlayWeldImperialSystem(thickness1);\n resultThickness2 = this._thicknessASMEOverlayWeldImperialSystem(thickness2);\n } else {\n resultThickness1 = this._thicknessASMEOtherWeldTypesImperialSystem(\n thickness1,\n this.impactRequirements\n );\n resultThickness2 = this._thicknessASMEOtherWeldTypesImperialSystem(\n thickness2,\n this.impactRequirements\n );\n }\n }\n\n let thicknessesDifferent = false;\n let thickness1Numeric = parseFloat(thickness1);\n let thickness2Numeric = parseFloat(thickness2);\n if (\n !isEmpty(thickness1) &&\n !isEmpty(thickness2) &&\n !isNaN(thickness1Numeric) &&\n !isNaN(thickness2Numeric) &&\n thickness1Numeric !== thickness2Numeric\n ) {\n thicknessesDifferent = Math.abs(thickness1 - thickness2) > Number.EPSILON;\n }\n // Special cases for ASME\n if (thicknessesDifferent) {\n if (thickness1Numeric > thickness2Numeric) {\n let groups = ['8', '41', '42', '43', '44', '45', '46', '49', '51', '52', '53', '61', '62'];\n let isOneOfGroups = groups.find((item) => {\n return isGroup(item, this.baseMaterial1GroupName);\n });\n if (!isEmpty(isOneOfGroups)) {\n if (this.isMetricSystem) {\n if (thickness1Numeric > 6) {\n resultThickness1.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness1Numeric > 0.25) {\n resultThickness1.max = null;\n }\n }\n } else {\n if (this.isMetricSystem) {\n if (thickness1Numeric > 38) {\n resultThickness1.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness1Numeric > 1.5) {\n resultThickness1.max = null;\n }\n }\n }\n } else {\n let groups = ['8', '41', '42', '43', '44', '45', '46', '49', '51', '52', '53', '61', '62'];\n let isOneOfGroups = groups.find((item) => {\n return isGroup(item, this.baseMaterial2GroupName);\n });\n if (!isEmpty(isOneOfGroups)) {\n if (this.isMetricSystem) {\n if (thickness2Numeric > 6) {\n resultThickness2.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness2Numeric > 0.25) {\n resultThickness2.max = null;\n }\n }\n } else {\n if (this.isMetricSystem) {\n if (thickness2Numeric > 38) {\n resultThickness2.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness2Numeric > 1.5) {\n resultThickness2.max = null;\n }\n }\n }\n }\n }\n return {\n material1: resultThickness1,\n material2: resultThickness2,\n };\n }\n\n _thicknessASMEOverlayWeldMetricSystem(thickness) {\n let result = this._defaultResult();\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness < 25) {\n result.min = thickness;\n result.max = null;\n } else {\n result.min = 25;\n result.max = null;\n }\n return result;\n }\n\n _thicknessASMEOverlayWeldImperialSystem(thickness) {\n let result = this._defaultResult();\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness < 1) {\n result.min = thickness;\n result.max = null;\n } else {\n result.min = 1;\n result.max = null;\n }\n return result;\n }\n\n _thicknessASMEOtherWeldTypesMetricSystem(thickness, impactRequirements) {\n let result = this._defaultResult();\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness < 1.5) {\n result.min = thickness;\n result.max = 2 * thickness;\n } else if (thickness >= 1.5 && thickness <= 10) {\n result.min = 1.5;\n result.max = 2 * thickness;\n } else if (thickness > 10 && thickness < 38) {\n result.min = 5;\n result.max = 2 * thickness;\n } else if (thickness >= 38 && thickness <= 150) {\n result.min = 5;\n result.max = 200;\n } else {\n result.min = 5;\n result.max = 1.33 * thickness;\n }\n // Override Minimum Thickness because of Impact Requirements\n if (impactRequirements) {\n if (thickness < 6) {\n result.min = thickness * 0.5;\n } else {\n result.min = Math.min(16, thickness);\n }\n }\n return result;\n }\n\n _thicknessASMEOtherWeldTypesImperialSystem(thickness, impactRequirements) {\n let result = this._defaultResult();\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness < 0.0625) {\n result.min = thickness;\n result.max = 2 * thickness;\n } else if (thickness <= 0.375 && thickness >= 0.0625) {\n result.min = 0.0625;\n result.max = 2 * thickness;\n } else if (thickness > 0.375 && thickness < 1.5) {\n result.min = 0.1875;\n result.max = 2 * thickness;\n } else if (thickness >= 1.5 && thickness <= 6) {\n result.min = 0.1875;\n result.max = 8;\n } else if (thickness > 6) {\n result.min = 0.1875;\n result.max = 1.33 * thickness;\n }\n // Override Minimum Thickness because of Impact Requirements\n if (impactRequirements) {\n if (thickness < 0.25) {\n result.min = thickness * 0.5;\n } else {\n result.min = Math.min(0.625, thickness);\n }\n }\n return result;\n }\n\n _defaultResult() {\n return {\n min: 0,\n max: null,\n };\n }\n\n _findWeldingPosition(code = '') {\n return this.allWeldingPositions\n .filter((p) => {\n return get(p, 'industryCode.id') === get(this.standard, 'code.id');\n })\n .findBy('code', code);\n }\n\n weldingPosition(testPiece, direction) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let calculator = new WeldingPositionApprovalRange(this.allWeldingPositions, {\n standard: this.standard,\n weldType: this.weldTypeCode,\n impactRequirements: this.impactRequirements,\n productType: this.productTypeTestPiece,\n });\n\n return calculator.calculateWeldingPositions(testPiece, direction);\n }\n\n fixDecimals(result, unitSystem = UNIT_SYSTEM.METRIC) {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return result;\n }\n return formatRangeWith2Decimals(result);\n }\n\n preHeat(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let result = {\n min: null,\n max: null,\n };\n\n if (this.isMetricSystem) {\n result.min = Math.max(0, testPiece - 55);\n if (this.impactRequirements) {\n result.max = testPiece + 55;\n } else {\n result.max = null;\n }\n } else if (this.isImperialSystem) {\n result.min = Math.max(0, testPiece - 100);\n if (this.impactRequirements) {\n result.max = testPiece + 55;\n } else {\n result.max = null;\n }\n }\n\n return this.fixDecimals(result, this.unitSystem);\n }\n\n postHeat(/* testPiece */) {\n return this._emptyRange;\n }\n\n interpass(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let result = {\n min: null,\n max: null,\n };\n\n let interpassValue = parseInt(testPiece, 10);\n if (interpassValue > 0) {\n if (this.weldTypeCode === WELD_TYPES.OVERLAY_WELD) {\n result.min = 0;\n result.max = interpassValue;\n } else {\n result.min = 0;\n if (this.isMetricSystem) {\n result.max = interpassValue + 55;\n } else if (this.isImperialSystem) {\n result.max = interpassValue + 100;\n }\n }\n }\n\n // Don't update the minimum if there was a previous value there\n if (this.interpassMinimum > 0 && result.min === 0) {\n result.min = this.interpassMinimum;\n }\n\n return this.fixDecimals(result, this.unitSystem);\n }\n\n pwhtTemperature(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._toRange(testPiece, testPiece);\n }\n\n pwhtTime(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let time = parseFloat(testPiece);\n let result = {\n min: null,\n max: null,\n };\n if (!isNaN(time)) {\n result.min = 0;\n result.max = time * 1.25;\n }\n\n return this.fixDecimals(result);\n }\n\n get isMetricSystem() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperialSystem() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n _toRange(min, max) {\n return {\n min,\n max,\n };\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n get isButtWeldOrPartialPenetrationWeld() {\n return (\n isButtWeld(this.weldTypeTestPiece) || isPartialPenetrationButtWeld(this.weldTypeTestPiece)\n );\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n get isMultiLayer() {\n return isMultiLayer(this.weldingDetailsValues);\n }\n\n get isSingleLayer() {\n return isSingleLayer(this.weldingDetailsValues);\n }\n\n get impactRequirements() {\n let { impactTemperature, impactRequired } = this;\n return impactRequired && !isNaN(parseFloat(impactTemperature));\n }\n\n get isOverlayHardFacing() {\n let overlayType = this.pqr.get('overlayType');\n return overlayType === OVERLAY_TYPE_OPTIONS.HARD_FACING;\n }\n\n get baseMaterial1ThicknessApprovalRangeMinimum() {\n return this.pqr.get('baseMaterial1ThicknessMinimumApprovalRange');\n }\n\n get baseMaterial1ThicknessApprovalRangeMaximum() {\n return this.pqr.get('baseMaterial1ThicknessMaximumApprovalRange');\n }\n\n get baseMaterial2ThicknessApprovalRangeMinimum() {\n return this.pqr.get('baseMaterial2ThicknessMinimumApprovalRange');\n }\n\n get baseMaterial2ThicknessApprovalRangeMaximum() {\n return this.pqr.get('baseMaterial2ThicknessMaximumApprovalRange');\n }\n\n get smallestBaseMaterialThickness() {\n let bm1Thickness = parseFloat(this.baseMaterial1ThicknessValue, 10);\n let bm2Thickness = parseFloat(this.baseMaterial2ThicknessValue, 10);\n\n if (!isNaN(bm1Thickness) && !isNaN(bm2Thickness)) {\n return bm1Thickness <= bm2Thickness ? bm1Thickness : bm2Thickness;\n } else if (!isNaN(bm1Thickness)) {\n return bm1Thickness;\n } else if (!isNaN(bm2Thickness)) {\n return bm2Thickness;\n }\n return null;\n }\n\n thicknessProcess(testPiece, layer) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._calculateWeldingThicknessRange(testPiece);\n }\n\n getBaseMaterialGroupName(baseMaterial) {\n if (!isEmpty(baseMaterial)) {\n let materialGroup = get(baseMaterial, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n get baseMaterial1GroupName() {\n let baseMaterial1 = this.pqr.get('baseMaterial1TestPiece');\n if (!isEmpty(baseMaterial1)) {\n let materialGroup = get(baseMaterial1, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n get baseMaterial2GroupName() {\n let baseMaterial2 = this.pqr.get('baseMaterial2TestPiece');\n if (!isEmpty(baseMaterial2)) {\n let materialGroup = get(baseMaterial2, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n baseMaterial(baseMaterial1, baseMaterial2) {\n if (isEmpty(baseMaterial1) || isEmpty(baseMaterial2)) {\n return {\n material1: [],\n material2: [],\n };\n }\n\n let asmeResult = BaseMaterialRulesASME.calculate(\n this.getBaseMaterialGroupName(baseMaterial1),\n true,\n this.getBaseMaterialGroupName(baseMaterial2),\n this.allBaseMaterials,\n this.impactRequirements,\n this.weldTypeCode\n );\n return {\n material1: asmeResult.material1,\n material2: asmeResult.material2,\n };\n }\n\n branchAngle(/* testPiece */) {\n return this._emptyRange;\n }\n\n fillerMaterialRootCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n if (this.impactRequirements && this.isOverlayHardFacing) {\n return [designation];\n }\n return [];\n }\n\n fillerMaterialFillCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n if (this.impactRequirements && this.isOverlayHardFacing) {\n return [designation];\n }\n return [];\n }\n\n fillerMaterialCapCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n if (this.impactRequirements && this.isOverlayHardFacing) {\n return [designation];\n }\n return [];\n }\n\n throatThickness(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._toRange(0, null);\n }\n\n shielding(testPiece) {\n if (isEmpty(testPiece)) {\n return null;\n }\n return calculateShielding(testPiece);\n }\n\n baseMaterial1FilletWeldThickness() {\n if (this.isButtWeldOrPartialPenetrationWeld) {\n return this._toRange(0, null);\n } else {\n return this._toRange(\n this.baseMaterial1ThicknessApprovalRangeMinimum,\n this.baseMaterial1ThicknessApprovalRangeMaximum\n );\n }\n }\n\n baseMaterial2FilletWeldThickness() {\n if (this.isButtWeldOrPartialPenetrationWeld) {\n return this._toRange(0, null);\n } else {\n return this._toRange(\n this.baseMaterial2ThicknessApprovalRangeMinimum,\n this.baseMaterial2ThicknessApprovalRangeMaximum\n );\n }\n }\n\n pjpButtWeldBaseMaterial1Thickness() {\n return this._emptyRange;\n }\n\n pjpButtWeldBaseMaterial2Thickness() {\n return this._emptyRange;\n }\n\n productType(testPiece) {\n let result = {\n productType: [],\n restrictions: [],\n };\n if (testPiece === PRODUCT_TYPE.PIPE || testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n }\n return result;\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport {\n isFilletWeld,\n isButtWeld,\n isOverlayWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { isSingleLayer, isMultiLayer } from 'weldnote/utils/rules/welding-detail';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport { isSMAW, isGMAW, isGTAW, isPAW } from 'weldnote/utils/rules/welding-process';\n\nimport Constants from 'weldnote/utils/constants';\n\nconst { PRODUCT_TYPE, UNIT_SYSTEM, WELDING_DETAILS, ARC_TRANSFER_MODES, WELD_TYPES } = Constants;\n\nexport default class AwsB21ApprovalRanges {\n constructor(\n pqr,\n {\n weldTypes: allWeldTypes,\n baseMaterials: allBaseMaterials,\n weldingDetails: allWeldingDetails,\n processMecanizations: allProcessMecanizations,\n typeCurrentPolarities: allTypeCurrentPolarity,\n weldingPositions: allWeldingPositions,\n transferModes: allTransferModes,\n unitSystem = UNIT_SYSTEM.METRIC,\n }\n ) {\n this.pqr = pqr;\n let industryCodeId = get(this.standard, 'code.id');\n\n this.allWeldTypes = allWeldTypes.filter((weldType) => {\n return get(weldType, 'industryCode.id') === industryCodeId;\n });\n this._baseMaterials = allBaseMaterials;\n this.allWeldingDetails = allWeldingDetails;\n this.allProcessMecanizations = allProcessMecanizations;\n this.allTypeCurrentPolarity = allTypeCurrentPolarity;\n this._weldingPositions = allWeldingPositions;\n this._transferModes = allTransferModes;\n this.unitSystem = pqr.unitSystem || unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS B2.1 Approval Ranges');\n }\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => get(position, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => get(baseMaterial, 'code.id') === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) => get(transferMode, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get industryCodeId() {\n return get(this.standard, 'code.id');\n }\n\n get standard() {\n return this.pqr.get('standard');\n }\n\n get weldTypeTestPiece() {\n return this.pqr.get('weldTypeTestPiece');\n }\n\n get baseMaterial1ThicknessValue() {\n return this.pqr.get('baseMaterial1Thickness');\n }\n\n get baseMaterial1() {\n return this.pqr.get('baseMaterial1TestPiece');\n }\n\n get baseMaterial2ThicknessValue() {\n return this.pqr.get('baseMaterial2Thickness');\n }\n\n get baseMaterial2() {\n return this.pqr.get('baseMaterial2TestPiece');\n }\n\n get weldingDetailsValues() {\n return this.pqr.get('weldingDetailsTestPiece');\n }\n\n get weldingProcessRoot() {\n return this.pqr.get('weldingProcessRootTestPiece');\n }\n\n get weldingProcessFill() {\n return this.pqr.get('weldingProcessFillTestPiece');\n }\n\n get weldingProcessCap() {\n return this.pqr.get('weldingProcessCapTestPiece');\n }\n\n get transferModeRoot() {\n return this.pqr.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.pqr.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.pqr.get('arcTransferModeCapTestPiece');\n }\n\n get impactTemperature() {\n return this.pqr.get('impactTestTemperature');\n }\n\n get impactRequired() {\n return this.pqr.get('impactTestRequired');\n }\n\n weldType(testPiece) {\n if (isButtWeld(testPiece)) {\n return this._findWeldTypes([\n WELD_TYPES.BUTT_WELD,\n WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD,\n WELD_TYPES.FILLET_WELD,\n ]);\n } else if (isPartialPenetrationButtWeld(testPiece)) {\n return this._findWeldTypes([\n WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD,\n WELD_TYPES.FILLET_WELD,\n ]);\n } else if (isFilletWeld(testPiece)) {\n return this._findWeldTypes([WELD_TYPES.OVERLAY_WELD, WELD_TYPES.FILLET_WELD]);\n } else if (isOverlayWeld(testPiece)) {\n return [testPiece];\n }\n if (!isEmpty(testPiece)) {\n return [testPiece];\n }\n return [];\n }\n\n _findWeldTypes(types = []) {\n let result = [];\n types.forEach((weldType) => {\n result.push(this.allWeldTypes.findBy('weldType', weldType));\n });\n return result;\n }\n\n productType(testPiece) {\n if (testPiece === PRODUCT_TYPE.PIPE) {\n return [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n } else if (testPiece === PRODUCT_TYPE.PLATE) {\n return [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n }\n }\n\n weldingProcess(testPiece) {\n if (!isEmpty(testPiece)) {\n return [testPiece];\n }\n return [];\n }\n\n _isWeldingProcessGMAWShort(layer) {\n let weldingProcess = null;\n let transferMode = null;\n if (layer === 'ROOT') {\n weldingProcess = this.weldingProcessRoot;\n transferMode = this.transferModeRoot;\n } else if (layer === 'FILL') {\n weldingProcess = this.weldingProcessFill;\n transferMode = this.transferModeFill;\n } else if (layer === 'CAP') {\n weldingProcess = this.weldingProcessCap;\n transferMode = this.transferModeCap;\n }\n if (!isEmpty(weldingProcess) && !isEmpty(transferMode)) {\n return (\n get(weldingProcess, 'shortDesignation') === 'GMAW' &&\n get(transferMode, 'transferMode') === ARC_TRANSFER_MODES.SHORT_ARC\n );\n }\n return false;\n }\n\n get isWeldingProcessGMAWShort() {\n let { weldingProcessRoot: root, weldingProcessFill: fill, weldingProcessCap: cap } = this;\n if (root != null && fill != null && cap != null) {\n return (\n this._isWeldingProcessGMAWShort('ROOT') &&\n this._isWeldingProcessGMAWShort('FILL') &&\n this._isWeldingProcessGMAWShort('CAP')\n );\n } else if (root != null && fill != null) {\n return this._isWeldingProcessGMAWShort('ROOT') && this._isWeldingProcessGMAWShort('FILL');\n } else {\n return this._isWeldingProcessGMAWShort('ROOT');\n }\n }\n\n _findWeldingDetail(detail) {\n return this.allWeldingDetails.findBy('shortDesignation', detail);\n }\n\n _findListWeldingDetails(details = []) {\n let results = [];\n details.forEach((d) => {\n let detail = this._findWeldingDetail(d);\n if (detail) {\n results.push(detail);\n }\n });\n return results;\n }\n\n _isWeldingDetail(testPiece, detail) {\n return testPiece.findBy('shortDesignation', detail);\n }\n\n weldingDetails(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results = [];\n if (this.impactRequirements) {\n if (this.isMultiLayer) {\n results.push(this._findWeldingDetail(WELDING_DETAILS.MULTI_LAYER));\n } else if (this.isSingleLayer) {\n results.push(this._findWeldingDetail(WELDING_DETAILS.SINGLE_LAYER));\n }\n } else {\n if (this.isMultiLayer) {\n results.push(this._findWeldingDetail(WELDING_DETAILS.SINGLE_LAYER));\n results.push(this._findWeldingDetail(WELDING_DETAILS.MULTI_LAYER));\n } else if (this.isSingleLayer) {\n results.push(this._findWeldingDetail(WELDING_DETAILS.SINGLE_LAYER));\n results.push(this._findWeldingDetail(WELDING_DETAILS.MULTI_LAYER));\n }\n }\n\n if (this._isWeldingDetail(testPiece, WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n this._findListWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ]).forEach((d) => results.pushObject(d));\n } else if (this._isWeldingDetail(testPiece, WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING)) {\n this._findListWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ]).forEach((d) => results.pushObject(d));\n } else if (this._isWeldingDetail(testPiece, WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n this._findListWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ]).forEach((d) => results.pushObject(d));\n } else if (this._isWeldingDetail(testPiece, WELDING_DETAILS.BOTH_SIDES)) {\n this._findListWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ]).forEach((d) => results.pushObject(d));\n } else if (this._isWeldingDetail(testPiece, WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n this._findListWeldingDetails([WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING]).forEach((d) =>\n results.pushObject(d)\n );\n }\n\n if (this._isWeldingDetail(testPiece, WELDING_DETAILS.CONSUMABLE_INSERT)) {\n this._findListWeldingDetails([WELDING_DETAILS.CONSUMABLE_INSERT]).forEach((d) =>\n results.pushObject(d)\n );\n }\n\n return results;\n }\n\n processMecanization(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.allProcessMecanizations;\n }\n\n transferMode(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let transferMode = get(testPiece, 'transferMode');\n if (transferMode === ARC_TRANSFER_MODES.SHORT_ARC) {\n return [testPiece];\n } else {\n return this.allTransferModes.filter((t) => {\n return get(t, 'transferMode') !== ARC_TRANSFER_MODES.SHORT_ARC;\n });\n }\n }\n\n typeCurrentAndPolarity(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.allTypeCurrentPolarity;\n }\n\n diameter(/* testPiece */) {\n return this._toRange(0, null);\n }\n\n weldedThickness(testPiece) {\n let testPieceNumber = parseFloat(testPiece, 10);\n if (isNaN(testPieceNumber)) {\n return this._emptyRange;\n }\n if (this.isMetricSystem) {\n return this._weldedThicknessMetric(testPieceNumber);\n } else if (this.isImperialSystem) {\n return this._weldedThicknessImperial(testPieceNumber);\n }\n return this._emptyRange;\n }\n\n baseMaterialThickness(thickness1, thickness2) {\n return {\n material1: this.baseMaterial1Thickness(thickness1),\n material2: this.baseMaterial2Thickness(thickness2),\n };\n }\n\n baseMaterial1Thickness(value) {\n return this._baseMaterialThickness(value);\n }\n\n baseMaterial2Thickness(value) {\n return this._baseMaterialThickness(value);\n }\n\n _baseMaterialThickness(value) {\n let testPiece = parseFloat(value, 10);\n if (isNaN(testPiece)) {\n return this._emptyRange;\n }\n if (this.isMetricSystem) {\n if (this.isFilletWeld) {\n return this._toRange(0, null);\n } else if (this.isOverlayWeld) {\n if (testPiece < 25) {\n return this._toRange(testPiece, null);\n } else if (testPiece >= 25) {\n return this._toRange(25, null);\n }\n } else if (this.isButtWeldOrPartialPenetrationWeld) {\n let min = null;\n let max = null;\n if (testPiece < 1.5) {\n min = 0.5 * testPiece;\n max = 2 * testPiece;\n } else if (testPiece >= 1.5 && testPiece <= 10) {\n min = 1.5;\n max = 2 * testPiece;\n } else if (testPiece > 10 && testPiece < 19) {\n min = 5;\n max = 2 * testPiece;\n } else if (testPiece >= 19 && testPiece < 38) {\n min = 5;\n max = 2 * testPiece;\n } else if (testPiece >= 38 && testPiece < 152) {\n min = 5;\n max = 203;\n } else if (testPiece >= 152) {\n min = 25;\n max = 1.33 * testPiece;\n }\n if (this.impactRequirements && testPiece < 16) {\n min = testPiece;\n }\n return this._toRange(min, max);\n }\n } else if (this.isImperialSystem) {\n if (this.isFilletWeld) {\n return this._toRange(0, null);\n } else if (this.isOverlayWeld) {\n if (testPiece < 1) {\n return this._toRange(testPiece, null);\n } else if (testPiece >= 1) {\n return this._toRange(1, null);\n }\n } else if (this.isButtWeldOrPartialPenetrationWeld) {\n let min = null;\n let max = null;\n if (testPiece < 0.0625) {\n min = 0.5 * testPiece;\n max = 2 * testPiece;\n } else if (testPiece >= 0.0625 && testPiece <= 0.375) {\n min = 0.0625;\n max = 2 * testPiece;\n } else if (testPiece > 0.375 && testPiece < 0.75) {\n min = 0.1875;\n max = 2 * testPiece;\n } else if (testPiece >= 0.75 && testPiece < 1.5) {\n min = 0.1875;\n max = 2 * testPiece;\n } else if (testPiece >= 1.5 && testPiece < 6) {\n min = 0.1875;\n max = 8;\n } else if (testPiece >= 6) {\n min = 1;\n max = 1.33 * testPiece;\n }\n if (this.impactRequirements && testPiece < 0.625) {\n min = testPiece;\n }\n return this._toRange(min, max);\n }\n }\n return this._emptyRange;\n }\n\n _findWeldingPosition(code = '') {\n return this.allWeldingPositions\n .filter((p) => {\n return get(p, 'industryCode.id') === get(this.standard, 'code.id');\n })\n .findBy('code', code);\n }\n\n _findWeldingPositions(codes = []) {\n let results = [];\n codes.forEach((position) => {\n results.push(\n this.allWeldingPositions\n .filter((p) => {\n return get(p, 'industryCode.id') === get(this.standard, 'code.id');\n })\n .findBy('code', get(position, 'code'))\n );\n });\n return results;\n }\n\n weldingPosition(testPiece /* direction */) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let currentPosition = get(testPiece, 'code');\n\n if (this.isOverlayWeld) {\n return [testPiece, this._findWeldingPosition('1G')];\n }\n\n if (this.impactRequirements) {\n if (this.isButtWeldOrPartialPenetrationWeld) {\n let verticalPositions = ['3G', '5G', '6G', '3F', '5F'];\n if (verticalPositions.includes(currentPosition)) {\n return this._findWeldingPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n }\n let nonVerticalPositions = ['1G', '2G', '4G'];\n if (nonVerticalPositions.includes(currentPosition)) {\n return this._findWeldingPositions(['1G', '2G', '4G', '1F', '2F', '4F']);\n }\n } else if (this.isFilletWeld) {\n let verticalPositions = ['3F', '5F'];\n if (verticalPositions.includes(currentPosition)) {\n return this._findWeldingPositions(['1F', '2F', '3F', '4F', '5F']);\n }\n let nonVerticalPositions = ['1F', '2F', '4F'];\n if (nonVerticalPositions.includes(currentPosition)) {\n return this._findWeldingPositions(['1F', '2F', '4F']);\n }\n }\n } else {\n return this.allWeldingPositions.filter((position) => {\n let code = get(position, 'code');\n let validPositions = ['1G', '2G', '3G', '4G', '5G', '6G', '1F', '2F', '3F', '4F', '5F'];\n return validPositions.includes(code);\n });\n }\n\n return [testPiece];\n }\n\n preHeat(testPiece) {\n let value = parseFloat(testPiece, 10);\n if (!isNaN(value)) {\n if (this.isMetricSystem) {\n return this._toRange(value - 38, null);\n } else if (this.isImperialSystem) {\n return this._toRange(value - 100, null);\n }\n }\n return this._emptyRange;\n }\n\n postHeat(/* testPiece */) {\n return this._emptyRange;\n }\n\n get isBaseMaterialSpecialGroupInterpass() {\n let material1 = this.baseMaterial1;\n let material2 = this.baseMaterial2;\n\n if (!isEmpty(material1)) {\n let baseMaterial1Group = get(material1, 'materialGroup.groupNumber');\n if (!isEmpty(baseMaterial1Group)) {\n return ['23', '24', '26', '27'].includes(baseMaterial1Group);\n }\n }\n\n if (!isEmpty(material2)) {\n let baseMaterial2Group = get(material2, 'materialGroup.groupNumber');\n if (!isEmpty(baseMaterial2Group)) {\n return ['23', '24', '26', '27'].includes(baseMaterial2Group);\n }\n }\n\n return false;\n }\n\n get isWeldingProcessSpecialForInterpass() {\n return (\n this._isSpecialInterpassWeldingProcess(this.weldingProcessRoot) ||\n this._isSpecialInterpassWeldingProcess(this.weldingProcessFill) ||\n this._isSpecialInterpassWeldingProcess(this.weldingProcessCap)\n );\n }\n\n _isSpecialInterpassWeldingProcess(weldingProcess) {\n if (!isEmpty(weldingProcess)) {\n return (\n isGTAW(weldingProcess) ||\n isGMAW(weldingProcess) ||\n isPAW(weldingProcess) ||\n isSMAW(weldingProcess)\n );\n }\n return false;\n }\n\n get isSpecialInterpassCase() {\n return this.isBaseMaterialSpecialGroupInterpass && this.isWeldingProcessSpecialForInterpass;\n }\n\n interpass(testPiece) {\n let value = parseFloat(testPiece, 10);\n if (isNaN(value)) {\n return this._emptyRange;\n }\n\n if (this.isSpecialInterpassCase) {\n if (this.isMetricSystem) {\n return this._toRange(0, value + 38);\n } else if (this.isImperialSystem) {\n return this._toRange(0, value + 100);\n }\n }\n if (this.impactRequirements) {\n if (this.isMetricSystem) {\n return this._toRange(0, value + 38);\n } else if (this.isImperialSystem) {\n return this._toRange(0, value + 100);\n }\n } else {\n return this._toRange(0, null);\n }\n\n return this._emptyRange;\n }\n\n pwhtTemperature(testPiece) {\n let value = parseFloat(testPiece, 10);\n if (isNaN(value)) {\n return this._emptyRange;\n }\n\n return this._toRange(value, value);\n }\n\n pwhtTime(testPiece) {\n let value = parseFloat(testPiece, 10);\n if (isNaN(value)) {\n return this._emptyRange;\n }\n return this._toRange(0, value * 1.25);\n }\n\n get isMetricSystem() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperialSystem() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n _toRange(min, max) {\n return {\n min,\n max,\n };\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n get isButtWeldOrPartialPenetrationWeld() {\n return (\n isButtWeld(this.weldTypeTestPiece) || isPartialPenetrationButtWeld(this.weldTypeTestPiece)\n );\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n get isMultiLayer() {\n return isMultiLayer(this.weldingDetailsValues);\n }\n\n get isSingleLayer() {\n return isSingleLayer(this.weldingDetailsValues);\n }\n\n get impactRequirements() {\n let { impactTemperature, impactRequired } = this;\n return impactRequired && !isNaN(parseFloat(impactTemperature));\n }\n\n get smallestBaseMaterialThickness() {\n let bm1Thickness = parseFloat(this.baseMaterial1ThicknessValue, 10);\n let bm2Thickness = parseFloat(this.baseMaterial2ThicknessValue, 10);\n\n if (!isNaN(bm1Thickness) && !isNaN(bm2Thickness)) {\n return bm1Thickness <= bm2Thickness ? bm1Thickness : bm2Thickness;\n } else if (!isNaN(bm1Thickness)) {\n return bm1Thickness;\n } else if (!isNaN(bm2Thickness)) {\n return bm2Thickness;\n }\n return null;\n }\n\n _weldedThicknessMetric(testPiece) {\n let { smallestBaseMaterialThickness } = this;\n let min = null;\n let max = null;\n if (this.isButtWeldOrPartialPenetrationWeld) {\n if (testPiece < 19) {\n min = 0;\n max = 2 * testPiece;\n } else if (\n testPiece >= 19 &&\n smallestBaseMaterialThickness >= 19 &&\n smallestBaseMaterialThickness < 38\n ) {\n min = 0;\n max = 2 * smallestBaseMaterialThickness;\n } else if (\n testPiece >= 19 &&\n smallestBaseMaterialThickness >= 38 &&\n smallestBaseMaterialThickness < 152\n ) {\n min = 0;\n max = 203;\n } else if (testPiece >= 19 && testPiece < 152 && smallestBaseMaterialThickness >= 152) {\n min = 0;\n max = 203;\n } else if (testPiece >= 152 && smallestBaseMaterialThickness >= 152) {\n min = 0;\n max = 1.33 * testPiece;\n }\n } else if (this.isFilletWeld) {\n if (this.isSingleLayer) {\n min = 0;\n max = testPiece;\n } else if (this.isMultiLayer) {\n if (this.isWeldingProcessGMAWShort) {\n min = testPiece * 0.5;\n max = null;\n } else {\n min = testPiece * 0.5;\n max = testPiece * 1.1;\n }\n }\n } else if (this.isOverlayWeld) {\n min = 0;\n max = null;\n }\n\n if (this.isWeldingProcessGMAWShort) {\n if (testPiece < 13) {\n max = 1.1 * testPiece;\n }\n }\n return this._toRange(min, max);\n }\n\n _weldedThicknessImperial(testPiece) {\n let { smallestBaseMaterialThickness } = this;\n let min = null;\n let max = null;\n if (this.isButtWeldOrPartialPenetrationWeld) {\n if (testPiece < 0.75) {\n min = 0;\n max = 2 * testPiece;\n } else if (\n testPiece >= 0.75 &&\n smallestBaseMaterialThickness >= 0.75 &&\n smallestBaseMaterialThickness < 1.5\n ) {\n min = 0;\n max = 2 * smallestBaseMaterialThickness;\n } else if (\n testPiece >= 0.75 &&\n smallestBaseMaterialThickness >= 1.5 &&\n smallestBaseMaterialThickness < 6\n ) {\n min = 0;\n max = 8;\n } else if (testPiece >= 0.75 && testPiece < 6 && smallestBaseMaterialThickness >= 6) {\n min = 0;\n max = 8;\n } else if (testPiece >= 6 && smallestBaseMaterialThickness >= 6) {\n min = 0;\n max = 1.33 * testPiece;\n }\n } else if (this.isFilletWeld) {\n if (this.isSingleLayer) {\n min = 0;\n max = testPiece;\n } else if (this.isMultiLayer) {\n if (this.isWeldingProcessGMAWShort) {\n min = testPiece * 0.5;\n max = null;\n } else {\n min = testPiece * 0.5;\n max = testPiece * 1.1;\n }\n }\n } else if (this.isOverlayWeld) {\n min = 0;\n max = null;\n }\n if (this.isWeldingProcessGMAWShort) {\n if (testPiece < 0.5) {\n max = 1.1 * testPiece;\n }\n }\n return this._toRange(min, max);\n }\n\n thicknessProcess(testPiece, layer) {\n let testPieceNumber = parseFloat(testPiece, 10);\n if (isNaN(testPieceNumber)) {\n return this._emptyRange;\n }\n if (this.isMetricSystem) {\n return this._thicknessProcessMetric(testPieceNumber);\n } else if (this.isImperialSystem) {\n return this._thicknessProcessImperial(testPieceNumber);\n }\n return this._emptyRange;\n }\n\n _thicknessProcessMetric(testPiece, layer) {\n let { smallestBaseMaterialThickness } = this;\n let min = null;\n let max = null;\n if (this.isButtWeldOrPartialPenetrationWeld) {\n if (testPiece < 19) {\n min = 0;\n max = 2 * testPiece;\n } else if (\n testPiece >= 19 &&\n smallestBaseMaterialThickness >= 19 &&\n smallestBaseMaterialThickness < 38\n ) {\n min = 0;\n max = 2 * smallestBaseMaterialThickness;\n } else if (\n testPiece >= 19 &&\n smallestBaseMaterialThickness >= 38 &&\n smallestBaseMaterialThickness < 152\n ) {\n min = 0;\n max = 203;\n } else if (testPiece >= 19 && testPiece < 152 && smallestBaseMaterialThickness >= 152) {\n min = 0;\n max = 203;\n } else if (testPiece >= 152 && smallestBaseMaterialThickness >= 152) {\n min = 0;\n max = 1.33 * testPiece;\n }\n } else if (this.isFilletWeld) {\n if (this.isSingleLayer) {\n min = 0;\n max = testPiece;\n } else if (this.isMultiLayer) {\n if (this.isWeldingProcessGMAWShort) {\n min = testPiece * 0.5;\n max = null;\n } else {\n min = testPiece * 0.5;\n max = testPiece * 1.1;\n }\n }\n } else if (this.isOverlayWeld) {\n min = 0;\n max = null;\n }\n\n if (this._isWeldingProcessGMAWShort(layer)) {\n if (testPiece < 13) {\n max = 1.1 * testPiece;\n }\n }\n return this._toRange(min, max);\n }\n\n _thicknessProcessImperial(testPiece, layer) {\n let { smallestBaseMaterialThickness } = this;\n let min = null;\n let max = null;\n if (this.isButtWeldOrPartialPenetrationWeld) {\n if (testPiece < 0.75) {\n min = 0;\n max = 2 * testPiece;\n } else if (\n testPiece >= 0.75 &&\n smallestBaseMaterialThickness >= 0.75 &&\n smallestBaseMaterialThickness < 1.5\n ) {\n min = 0;\n max = 2 * smallestBaseMaterialThickness;\n } else if (\n testPiece >= 0.75 &&\n smallestBaseMaterialThickness >= 1.5 &&\n smallestBaseMaterialThickness < 6\n ) {\n min = 0;\n max = 8;\n } else if (testPiece >= 0.75 && testPiece < 6 && smallestBaseMaterialThickness >= 6) {\n min = 0;\n max = 8;\n } else if (testPiece >= 6 && smallestBaseMaterialThickness >= 6) {\n min = 0;\n max = 1.33 * testPiece;\n }\n } else if (this.isFilletWeld) {\n if (this.isSingleLayer) {\n min = 0;\n max = testPiece;\n } else if (this.isMultiLayer) {\n if (this.isWeldingProcessGMAWShort) {\n min = testPiece * 0.5;\n max = null;\n } else {\n min = testPiece * 0.5;\n max = testPiece * 1.1;\n }\n }\n } else if (this.isOverlayWeld) {\n min = 0;\n max = null;\n }\n if (this._isWeldingProcessGMAWShort(layer)) {\n if (testPiece < 0.5) {\n max = 1.1 * testPiece;\n }\n }\n return this._toRange(min, max);\n }\n\n _getAllMaterialsOfNumber(number) {\n return this.allBaseMaterials.filter((material) => {\n return get(material, 'groupNumber') === number;\n });\n }\n\n _getAllMaterialsOfNumberAndSmaller(number) {\n let numberParsed = parseInt(number, 10);\n if (isNaN(numberParsed)) {\n // Hack for the situation of groupNumber being 5X\n if (number === '5A' || number === '5B' || number === '5C') {\n numberParsed = 5;\n }\n }\n if (isNaN(numberParsed)) {\n return [];\n }\n return this.allBaseMaterials.filter((material) => {\n let groupNumberAsNumber = parseInt(get(material, 'groupNumber'), 10);\n if (isNaN(groupNumberAsNumber)) {\n return false;\n }\n return groupNumberAsNumber <= numberParsed;\n });\n }\n\n baseMaterial(baseMaterial1, baseMaterial2) {\n if (isEmpty(baseMaterial1) || isEmpty(baseMaterial2)) {\n return {\n material1: [],\n material2: [],\n };\n }\n\n let baseMaterialGroup1 = get(baseMaterial1, 'materialGroup.groupNumber');\n let baseMaterialGroup2 = get(baseMaterial2, 'materialGroup.groupNumber');\n\n let baseMaterial1Id = get(baseMaterial1, 'id');\n let baseMaterial2Id = get(baseMaterial2, 'id');\n\n let isSameMaterial = baseMaterial1Id === baseMaterial1Id;\n\n let baseMaterial1ApprovalRange = [];\n let baseMaterial2ApprovalRange = [];\n\n if (this.impactRequirements) {\n if (isSameMaterial) {\n // Approval Range is the test piece groups\n baseMaterial1ApprovalRange.push(get(baseMaterial1, 'materialGroup'));\n baseMaterial2ApprovalRange.push(get(baseMaterial2, 'materialGroup'));\n } else {\n baseMaterial1ApprovalRange.push(get(baseMaterial1, 'materialGroup'));\n baseMaterial1ApprovalRange.push(get(baseMaterial2, 'materialGroup'));\n baseMaterial2ApprovalRange.push(get(baseMaterial2, 'materialGroup'));\n baseMaterial2ApprovalRange.push(get(baseMaterial1, 'materialGroup'));\n }\n } else {\n if (isSameMaterial) {\n let specialGroups = ['1', '3', '4', '5A'];\n if (\n specialGroups.includes(baseMaterialGroup1) &&\n specialGroups.includes(baseMaterialGroup2)\n ) {\n baseMaterial1ApprovalRange = this._getAllMaterialsOfNumber(baseMaterialGroup1);\n baseMaterial2ApprovalRange = this._getAllMaterialsOfNumberAndSmaller(baseMaterialGroup2);\n } else {\n baseMaterial1ApprovalRange = this._getAllMaterialsOfNumber(baseMaterialGroup1);\n baseMaterial2ApprovalRange = this._getAllMaterialsOfNumber(baseMaterialGroup2);\n }\n } else {\n baseMaterial1ApprovalRange = this._getAllMaterialsOfNumber(baseMaterialGroup1);\n baseMaterial2ApprovalRange = this._getAllMaterialsOfNumber(baseMaterialGroup2);\n }\n }\n\n return {\n material1: baseMaterial1ApprovalRange,\n material2: baseMaterial2ApprovalRange,\n };\n }\n\n branchAngle(/* testPiece */) {\n return this._emptyRange;\n }\n\n fillerMaterialRootCommercialDesignation(designation) {\n return [];\n }\n\n fillerMaterialFillCommercialDesignation(designation) {\n return [];\n }\n\n fillerMaterialCapCommercialDesignation(designation) {\n return [];\n }\n\n throatThickness(thickness) {\n return this._emptyRange;\n }\n\n pjpButtWeldBaseMaterial1Thickness() {\n return this.baseMaterialThickness(this.baseMaterial1ThicknessValue);\n }\n\n pjpButtWeldBaseMaterial2Thickness() {\n return this.baseMaterialThickness(this.baseMaterial2ThicknessValue);\n }\n\n baseMaterial1FilletWeldThickness() {\n return this._baseMaterialFilletWeldThickness();\n }\n\n baseMaterial2FilletWeldThickness() {\n return this._baseMaterialFilletWeldThickness();\n }\n\n _baseMaterialFilletWeldThickness() {\n let { smallestBaseMaterialThickness } = this;\n if (this.isMetricSystem) {\n if (smallestBaseMaterialThickness > 10) {\n return this._toRange(0, null);\n } else {\n return this._baseMaterialThickness(smallestBaseMaterialThickness);\n }\n } else if (this.isImperialSystem) {\n if (smallestBaseMaterialThickness > 0.375) {\n return this._toRange(0, null);\n } else {\n return this._baseMaterialThickness(smallestBaseMaterialThickness);\n }\n }\n return this._emptyRange;\n }\n\n shielding(testPiece) {\n return calculateShielding(testPiece);\n }\n\n productType(testPiece) {\n let result = {\n productType: [],\n restrictions: [],\n };\n if (testPiece === PRODUCT_TYPE.PIPE || testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n }\n return result;\n }\n}\n","import { A } from '@ember/array';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport WeldingPositionApprovalRange from 'weldnote/utils/approval-range/pqr/welding-position';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport {\n filterMecanizations,\n isManualMecanization,\n} from 'weldnote/utils/rules/process-mecanization';\nimport {\n isCompleteJointPenetrationButtWeld,\n isFilletWeld,\n isPartialJointPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport {\n allGTAW,\n isFCAW,\n isFCAWS,\n isGMAW,\n isMCAW,\n isSMAW,\n} from 'weldnote/utils/rules/welding-process';\nimport { fixDecimalsForUnitSystem } from 'weldnote/utils/unit-system/format';\n\nconst { PRODUCT_TYPE, WELD_TYPES, WELDING_DETAILS, UNIT_SYSTEM, PROCESS_MECANIZATION } = Constants;\n\nexport default class AwsD11ApprovalRanges {\n constructor(\n pqr,\n {\n weldTypes: allWeldTypes,\n baseMaterials: allBaseMaterials,\n weldingDetails: allWeldingDetails,\n processMecanizations: allProcessMecanizations,\n typeCurrentPolarities: allTypeCurrentPolarity,\n weldingPositions: allWeldingPositions,\n transferModes: allTransferModes,\n unitSystem = UNIT_SYSTEM.METRIC,\n }\n ) {\n this.pqr = pqr;\n let industryCodeId = get(this.standard, 'code.id');\n\n this.allWeldTypes = allWeldTypes.filter((weldType) => {\n return get(weldType, 'industryCode.id') === industryCodeId;\n });\n this._baseMaterials = allBaseMaterials;\n this.allWeldingDetails = allWeldingDetails;\n this.allProcessMecanizations = allProcessMecanizations;\n this.allTypeCurrentPolarity = allTypeCurrentPolarity;\n this._weldingPositions = allWeldingPositions;\n this._transferModes = allTransferModes;\n this.unitSystem = pqr.unitSystem || unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS D1.1 Approval Ranges');\n }\n }\n\n get weldingProcessRoot() {\n return this.pqr.get('weldingProcessRootTestPiece');\n }\n\n get weldingProcessFill() {\n return this.pqr.get('weldingProcessFillTestPiece');\n }\n\n get weldingProcessCap() {\n return this.pqr.get('weldingProcessCapTestPiece');\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => get(position, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get industryCodeId() {\n return get(this.standard, 'code.id');\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => get(baseMaterial, 'code.id') === this.industryCodeId\n );\n }\n\n weldingProcess(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n processMecanization(/* testPiece */) {\n return [];\n }\n\n _filterCurrentWeldTypes(types) {\n let result = [];\n types.forEach((t) => {\n let weldType = this.allWeldTypes.findBy('weldType', t);\n if (weldType) {\n result.pushObject(weldType);\n }\n });\n return result;\n }\n\n weldType(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results = [];\n if (isCompleteJointPenetrationButtWeld(testPiece) && !isEmpty(this.productTypeTestPiece)) {\n return this._filterCurrentWeldTypes([\n WELD_TYPES.FILLET_WELD,\n WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD,\n WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD,\n ]);\n } else if (isPartialJointPenetrationButtWeld(testPiece)) {\n return this._filterCurrentWeldTypes([\n WELD_TYPES.FILLET_WELD,\n WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD,\n ]);\n }\n if (isEmpty(results)) {\n results.pushObject(testPiece);\n }\n return results;\n }\n\n weldingPosition(testPiece, direction) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let calculator = new WeldingPositionApprovalRange(this.allWeldingPositions, {\n standard: this.standard,\n weldType: this.weldTypeCode,\n impactRequirements: this.impactRequirements,\n productType: this.productTypeTestPiece,\n });\n\n return calculator.calculateWeldingPositions(testPiece, direction);\n }\n\n transferMode(transferMode) {\n if (isEmpty(transferMode)) {\n return [];\n }\n return [transferMode];\n }\n\n transferModeFill(transferMode) {\n if (isEmpty(transferMode)) {\n return [];\n }\n return [transferMode];\n }\n\n transferModeCap(transferMode) {\n if (isEmpty(transferMode)) {\n return [];\n }\n return [transferMode];\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n get standard() {\n return this.pqr.get('standard');\n }\n\n get isSingleLayer() {\n return !isEmpty(this.pqr.get('weldingDetailsTestPiece').findBy('shortDesignation', 'sl'));\n }\n\n get isMetricSystem() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperialSystem() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get productTypeTestPiece() {\n return this.pqr.get('productTypeTestPiece');\n }\n\n get isPipe() {\n let { productTypeTestPiece } = this;\n if (!isEmpty(productTypeTestPiece)) {\n return productTypeTestPiece === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productTypeTestPiece } = this;\n if (!isEmpty(productTypeTestPiece)) {\n return productTypeTestPiece === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get weldTypeTestPiece() {\n return this.pqr.get('weldTypeTestPiece');\n }\n\n get weldTypeCode() {\n let { weldTypeTestPiece: weldType } = this;\n if (isEmpty(weldType)) {\n return '';\n }\n return get(weldType, 'weldType');\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isPartialJointPenetrationButtWeld() {\n return isPartialJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get isCompleteJointPenetrationButtWeld() {\n return isCompleteJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get impactRequirements() {\n let { impactTemperature, impactRequired } = this;\n return !isEmpty(impactRequired) && impactRequired && !isNaN(parseFloat(impactTemperature));\n }\n\n get impactTemperature() {\n return this.pqr.get('impactTestTemperature');\n }\n\n get impactTestReport() {\n return this.pqr.get('impactTestReport');\n }\n\n get impactRequired() {\n return this.pqr.get('impactTestRequired');\n }\n\n get productType() {\n return this.pqr.get('productTypeTestPiece');\n }\n\n get diameterValue() {\n return this.pqr.get('diameterTestPiece');\n }\n\n weldedThickness(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._calculateWeldingThicknessRange(testPiece);\n }\n\n _calculateWeldingThicknessRange(testPiece) {\n let thickness = parseFloat(testPiece);\n let { diameterValue: diameter } = this;\n\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let result = {};\n\n let specialCase = false;\n if (this.isMetricSystem) {\n if (thickness === 5.5 && diameter === 60.3) {\n result.min = 3;\n result.max = 20;\n specialCase = true;\n }\n if (thickness === 5.5 && diameter === 88.9) {\n result.min = 3;\n result.max = 20;\n specialCase = true;\n }\n if (thickness === 14.3 && diameter === 168.3) {\n result.min = 5;\n result.max = null;\n specialCase = true;\n }\n if (thickness === 12.7 && diameter === 219.1) {\n result.min = 5;\n result.max = null;\n specialCase = true;\n }\n } else if (this.isImperialSystem) {\n if (thickness === 0.218 && diameter === 2) {\n result.min = 0.125;\n result.max = 0.75;\n specialCase = true;\n }\n if (thickness === 0.216 && diameter === 3) {\n result.min = 0.125;\n result.max = 0.75;\n specialCase = true;\n }\n if (thickness === 0.562 && diameter === 6) {\n result.min = 0.1875;\n result.max = null;\n specialCase = true;\n }\n if (thickness === 0.5 && diameter === 8) {\n result.min = 0.1875;\n result.max = null;\n specialCase = true;\n }\n }\n if (!specialCase) {\n if (this.isCompleteJointPenetrationButtWeld && this.isPlate) {\n if (this.isMetricSystem) {\n if (thickness >= 3 && thickness <= 10) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness > 10 && thickness < 25) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness >= 25) {\n result.min = 3;\n result.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness > 0.375 && thickness < 1) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness >= 1) {\n result.min = 0.125;\n result.max = null;\n }\n }\n } else if (this.isCompleteJointPenetrationButtWeld && this.isPipe) {\n if (this.isMetricSystem) {\n if (thickness >= 3 && thickness <= 10) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness > 10 && thickness < 20) {\n result.min = thickness * 0.5;\n result.max = thickness * 2;\n } else if (thickness >= 20) {\n result.min = 10;\n result.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness > 0.375 && thickness < 0.75) {\n result.min = thickness * 0.5;\n result.max = thickness * 2;\n } else if (thickness >= 0.75) {\n result.min = 0.375;\n result.max = null;\n }\n }\n } else if (this.isPartialJointPenetrationButtWeld) {\n if (this.isMetricSystem) {\n if (thickness >= 3 && thickness <= 10) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness > 10 && thickness < 25) {\n result.min = 3;\n result.max = null;\n } else if (thickness >= 25) {\n result.min = 3;\n result.max = null;\n }\n } else if (this.isImperialSystem) {\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness > 0.375 && thickness < 1) {\n result.min = 0.125;\n result.max = null;\n } else if (thickness >= 1) {\n result.min = 0.125;\n result.max = null;\n }\n }\n } else if (this.isFilletWeld) {\n if (this.isSingleLayer) {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n } else {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n }\n }\n }\n return result;\n }\n\n thicknessProcess(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._calculateWeldingThicknessRange(testPiece);\n }\n\n weldingDetails(weldingDetails) {\n if (isEmpty(weldingDetails)) {\n return [];\n }\n\n let resultDetailNames = [];\n let result = [];\n weldingDetails.forEach((detail) => {\n let designation = detail.shortDesignation;\n if (designation === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING) {\n [\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else if (designation === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING) {\n [\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else {\n resultDetailNames.pushObject(designation);\n }\n });\n\n resultDetailNames.uniq().forEach((name) => {\n let position = this.allWeldingDetails.findBy('shortDesignation', name);\n if (position) {\n result.pushObject(position);\n }\n });\n return result;\n }\n\n _calculateProcessMecanization(processMecanization, weldingProcess) {\n if (isEmpty(processMecanization)) {\n return [];\n }\n if (isSMAW(weldingProcess) && isManualMecanization(processMecanization)) {\n return filterMecanizations(this.allProcessMecanizations, [PROCESS_MECANIZATION.MANUAL]);\n } else if (\n (isGMAW(weldingProcess) ||\n isFCAW(weldingProcess) ||\n isMCAW(weldingProcess) ||\n isFCAWS(weldingProcess)) &&\n !isManualMecanization(processMecanization)\n ) {\n return filterMecanizations(this.allProcessMecanizations, [\n PROCESS_MECANIZATION.SEMI_AUTOMATIC,\n PROCESS_MECANIZATION.MECHANIZED,\n PROCESS_MECANIZATION.AUTOMATIC,\n ]);\n } else {\n return [processMecanization];\n }\n }\n\n processMecanization(processMecanization, weldingProcess) {\n return this._calculateProcessMecanization(processMecanization, weldingProcess);\n }\n\n typeCurrentAndPolarity(typeCurrent) {\n if (isEmpty(typeCurrent)) {\n return [];\n }\n return [typeCurrent];\n }\n\n preHeat(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let preHeat = parseFloat(testPiece);\n if (isNaN(preHeat)) {\n return this._emptyRange;\n }\n\n let result = {};\n let { weldingProcessRoot: root, weldingProcessFill: fill, weldingProcessCap: cap } = this;\n if (allGTAW(root, fill, cap)) {\n result.min = preHeat - 55;\n } else {\n result.min = preHeat - 15;\n }\n if (this.impactRequirements) {\n result.max = preHeat + 56;\n }\n\n return result;\n }\n\n get interpassMinimumApprovalRange() {\n return this.pqr.get('interpassTemperatureMinimumApprovalRange');\n }\n\n interpass(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let interpassValue = parseFloat(testPiece);\n if (isNaN(interpassValue)) {\n return this._emptyRange;\n }\n let result = {};\n if (this.impactRequirements) {\n result.max = interpassValue + 56;\n }\n\n if (this.interpassMinimumApprovalRange > 0 && result.min === 0) {\n result.min = this.interpassMinimumApprovalRange;\n }\n\n return result;\n }\n\n postHeat(postHeat) {\n return this._emptyRange;\n }\n\n pwhtTemperature(pwht) {\n if (isEmpty(pwht)) {\n return this._emptyRange;\n }\n let postWeldHeatTreament = parseFloat(pwht);\n if (isNaN(postWeldHeatTreament)) {\n return this._emptyRange;\n }\n return {\n min: postWeldHeatTreament,\n max: postWeldHeatTreament,\n };\n }\n\n pwhtTime(time) {\n if (isEmpty(time)) {\n return this._emptyRange;\n }\n\n let timeFloat = parseFloat(time);\n if (isNaN(timeFloat)) {\n return this._emptyRange;\n }\n return {\n min: timeFloat,\n max: timeFloat * 1.25,\n };\n }\n\n _filterGroups(groups) {\n let result = A();\n groups.forEach((group) => {\n let groupModel = this.allBaseMaterials.findBy('groupName', group);\n if (groupModel) {\n result.push(groupModel);\n }\n });\n return result;\n }\n\n baseMaterial(baseMaterial1, baseMaterial2) {\n if (isEmpty(baseMaterial1) || isEmpty(baseMaterial2)) {\n return {\n material1: [],\n material2: [],\n };\n }\n\n let result = {\n material1: [],\n material2: [],\n };\n\n let group = baseMaterial1.get('materialGroup.groupName');\n let group2 = baseMaterial2.get('materialGroup.groupName');\n\n if (group === 'I' && group2 === 'I') {\n result.material1 = this._filterGroups(['I']);\n result.material2 = this._filterGroups(['I']);\n } else if (group === 'II' && group2 === 'II') {\n if (this.impactRequirements) {\n result.material1 = this._filterGroups(['II']);\n result.material2 = this._filterGroups(['II']);\n } else {\n result.material1 = this._filterGroups(['I', 'II']);\n result.material2 = this._filterGroups(['I', 'II']);\n }\n } else if ((group === 'III' || group === 'Table 4.9') && group2 === 'I') {\n result.material1 = [];\n result.material2 = this._filterGroups(['I']);\n } else if ((group === 'I' || group === 'Table 4.9') && group2 === 'II') {\n if (this.impactRequirements) {\n result.material1 = [];\n result.material2 = this._filterGroups(['II']);\n } else {\n result.material1 = [];\n result.material2 = this._filterGroups(['I', 'II']);\n }\n } else {\n result.material1 = [];\n result.material2 = [];\n }\n return result;\n }\n\n _thicknessAWSPlateCompleteJointButtWeldMetricSystem(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness >= 3 && thickness <= 10) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness > 10 && thickness < 25) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness >= 25) {\n result.min = 3;\n result.max = null;\n }\n return result;\n }\n\n _thicknessAWSPlateCompleteJointButtWeldImperialSystem(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness > 0.375 && thickness < 1) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness >= 1) {\n result.min = 0.125;\n result.max = null;\n }\n return result;\n }\n\n _thicknessAWSPipeCompleteJointButtWeldMetricSystem(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness >= 3 && thickness <= 10) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness > 10 && thickness < 20) {\n result.min = thickness * 0.5;\n result.max = thickness * 2;\n } else if (thickness >= 20) {\n result.min = 10;\n result.max = null;\n }\n return result;\n }\n\n _thicknessAWSPipeCompleteJointButtWeldImperialSystem(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness > 0.375 && thickness < 0.75) {\n result.min = thickness * 0.5;\n result.max = thickness * 2;\n } else if (thickness >= 0.75) {\n result.min = 0.375;\n result.max = null;\n }\n return result;\n }\n\n _thicknessAWSPartialPenetrationButtWeldMetricSystem(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness >= 3 && thickness <= 10) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness > 10 && thickness < 25) {\n result.min = 3;\n result.max = null;\n } else if (thickness >= 25) {\n result.min = 3;\n result.max = null;\n }\n return result;\n }\n\n _thicknessAWSPartialPenetrationButtWeldImperialSystem(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else if (thickness > 0.375 && thickness < 1) {\n result.min = 0.125;\n result.max = null;\n } else if (thickness >= 1) {\n result.min = 0.125;\n result.max = null;\n }\n return result;\n }\n\n _awsStandardSpecialCase(thickness, diameter, unitSystem = UNIT_SYSTEM.METRIC) {\n let result = {\n specialCase: false,\n min: null,\n max: null,\n };\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (thickness === 5.5 && diameter === 60.3) {\n result.min = 3;\n result.max = 20;\n result.specialCase = true;\n }\n if (thickness === 5.5 && diameter === 88.9) {\n result.min = 3;\n result.max = 20;\n result.specialCase = true;\n }\n if (thickness === 14.3 && diameter === 168.3) {\n result.min = 5;\n result.max = null;\n result.specialCase = true;\n }\n if (thickness === 12.7 && diameter === 219.1) {\n result.min = 5;\n result.max = null;\n result.specialCase = true;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (thickness === 0.218 && diameter === 2) {\n result.min = 0.125;\n result.max = 0.75;\n result.specialCase = true;\n }\n if (thickness === 0.216 && diameter === 3) {\n result.min = 0.125;\n result.max = 0.75;\n result.specialCase = true;\n }\n if (thickness === 0.562 && diameter === 6) {\n result.min = 0.1875;\n result.max = null;\n result.specialCase = true;\n }\n if (thickness === 0.5 && diameter === 8) {\n result.min = 0.1875;\n result.max = null;\n result.specialCase = true;\n }\n }\n\n return result;\n }\n\n get baseMaterial1Diameter() {\n return this.pqr.get('baseMaterial1Diameter');\n }\n\n get baseMaterial2Diameter() {\n return this.pqr.get('baseMaterial2Diameter');\n }\n\n baseMaterialThickness(thickness1, thickness2) {\n let resultThickness1 = {\n min: 0,\n max: null,\n };\n let resultThickness2 = {\n min: 0,\n max: null,\n };\n\n if (isEmpty(thickness1) && isEmpty(thickness2)) {\n return {\n material1: {\n min: null,\n max: null,\n },\n\n material2: {\n min: null,\n max: null,\n },\n };\n }\n\n if (this.isCompleteJointPenetrationButtWeld && this.isPlate) {\n if (this.isMetricSystem) {\n resultThickness1 = this._thicknessAWSPlateCompleteJointButtWeldMetricSystem(thickness1);\n resultThickness2 = this._thicknessAWSPlateCompleteJointButtWeldMetricSystem(thickness2);\n } else if (this.isImperialSystem) {\n resultThickness1 = this._thicknessAWSPlateCompleteJointButtWeldImperialSystem(thickness1);\n resultThickness2 = this._thicknessAWSPlateCompleteJointButtWeldImperialSystem(thickness2);\n }\n } else if (this.isCompleteJointPenetrationButtWeld && this.isPipe) {\n if (this.isMetricSystem) {\n resultThickness1 = this._thicknessAWSPipeCompleteJointButtWeldMetricSystem(thickness1);\n resultThickness2 = this._thicknessAWSPipeCompleteJointButtWeldMetricSystem(thickness2);\n } else if (this.isImperialSystem) {\n resultThickness1 = this._thicknessAWSPipeCompleteJointButtWeldImperialSystem(thickness1);\n resultThickness2 = this._thicknessAWSPipeCompleteJointButtWeldImperialSystem(thickness2);\n }\n } else if (this.isPartialJointPenetrationButtWeld) {\n if (this.isMetricSystem) {\n resultThickness1 = this._thicknessAWSPartialPenetrationButtWeldMetricSystem(thickness1);\n resultThickness2 = this._thicknessAWSPartialPenetrationButtWeldMetricSystem(thickness2);\n } else if (this.isImperialSystem) {\n resultThickness1 = this._thicknessAWSPartialPenetrationButtWeldImperialSystem(thickness1);\n resultThickness2 = this._thicknessAWSPartialPenetrationButtWeldImperialSystem(thickness2);\n }\n } else if (this.isFilletWeld) {\n if (this.isMetricSystem) {\n resultThickness1.min = 3;\n resultThickness1.max = null;\n resultThickness2.min = 3;\n resultThickness2.max = null;\n } else if (this.isImperialSystem) {\n resultThickness1.min = 0.125;\n resultThickness1.max = null;\n resultThickness2.min = 0.125;\n resultThickness2.max = null;\n }\n }\n\n let specialCaseThickness1 = this._awsStandardSpecialCase(\n thickness1,\n this.baseMaterial1Diameter,\n this.unitSystem\n );\n let specialCaseThickness2 = this._awsStandardSpecialCase(\n thickness2,\n this.baseMaterial2Diameter,\n this.unitSystem\n );\n\n if (specialCaseThickness1.specialCase) {\n resultThickness1.min = specialCaseThickness1.min;\n resultThickness1.max = specialCaseThickness1.max;\n }\n\n if (specialCaseThickness2.specialCase) {\n resultThickness2.min = specialCaseThickness2.min;\n resultThickness2.max = specialCaseThickness2.max;\n }\n\n return {\n material1: fixDecimalsForUnitSystem(resultThickness1, this.unitSystem),\n material2: fixDecimalsForUnitSystem(resultThickness2, this.unitSystem),\n };\n }\n\n branchAngle(/* testPiece */) {\n return this._emptyRange;\n }\n\n fillerMaterialRootCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n\n if (isFCAW(this.weldingProcessRoot)) {\n return [designation];\n }\n\n return [];\n }\n\n fillerMaterialFillCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n\n if (isFCAW(this.weldingProcessFill)) {\n return [designation];\n }\n\n return [];\n }\n\n fillerMaterialCapCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n\n if (isFCAW(this.weldingProcessCap)) {\n return [designation];\n }\n\n return [];\n }\n\n throatThickness(thickness) {\n if (isEmpty(thickness)) {\n return this._emptyRange;\n }\n return {\n min: 0,\n max: null,\n };\n }\n\n get totalThickness() {\n return this.pqr.get('thicknessTotalTestPiece');\n }\n\n diameter(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let result = {\n min: null,\n max: null,\n };\n\n let thickness = this.totalThickness;\n let specialCase = false;\n let diameter = parseFloat(testPiece);\n if (isNaN(diameter)) {\n return this._emptyRange;\n }\n\n if (this.isMetricSystem) {\n if (thickness === 5.5 && diameter === 60.3) {\n result.min = 20;\n result.max = 100;\n specialCase = true;\n }\n if (thickness === 5.5 && diameter === 88.9) {\n result.min = 20;\n result.max = 100;\n specialCase = true;\n }\n if (thickness === 14.3 && diameter === 168.3) {\n result.min = 100;\n result.max = null;\n specialCase = true;\n }\n if (thickness === 12.7 && diameter === 219.1) {\n result.min = 100;\n result.max = null;\n specialCase = true;\n }\n } else if (this.isImperialSystem) {\n if (thickness === 0.218 && diameter === 2) {\n result.min = 0.75;\n result.max = 4;\n specialCase = true;\n }\n if (thickness === 0.216 && diameter === 3) {\n result.min = 0.75;\n result.max = 4;\n specialCase = true;\n }\n if (thickness === 0.562 && diameter === 6) {\n result.min = 4;\n result.max = null;\n specialCase = true;\n }\n if (thickness === 0.5 && diameter === 8) {\n result.min = 4;\n result.max = null;\n specialCase = true;\n }\n }\n if (!specialCase) {\n if (this.isCompleteJointPenetrationButtWeld && this.isPipe) {\n if (this.isMetricSystem) {\n if (diameter < 600) {\n result.min = diameter;\n result.max = null;\n } else {\n if (thickness >= 3 && thickness <= 10) {\n result.min = diameter;\n result.max = null;\n } else {\n result.min = 600;\n result.max = null;\n }\n }\n } else if (this.isImperialSystem) {\n if (diameter < 24) {\n result.min = diameter;\n result.max = null;\n } else {\n if (thickness >= 0.125 && thickness <= 0.375) {\n result.min = diameter;\n result.max = null;\n } else {\n result.min = 24;\n result.max = null;\n }\n }\n }\n }\n }\n return result;\n }\n\n _calculatePjpButtWeldBaseMaterialThickness() {\n let result = {\n min: null,\n max: null,\n };\n\n if (this.isCompleteJointPenetrationButtWeld && this.isPlate) {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n } else if (this.isCompleteJointPenetrationButtWeld && this.isPipe) {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n }\n\n return result;\n }\n\n pjpButtWeldBaseMaterial1Thickness() {\n return this._calculatePjpButtWeldBaseMaterialThickness();\n }\n\n pjpButtWeldBaseMaterial2Thickness() {\n return this._calculatePjpButtWeldBaseMaterialThickness();\n }\n\n _calculateBaseMaterialFilletWeldThickness() {\n let result = {\n min: null,\n max: null,\n };\n\n if (this.isCompleteJointPenetrationButtWeld && this.isPlate) {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n } else if (this.isCompleteJointPenetrationButtWeld && this.isPipe) {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n } else if (this.isPartialJointPenetrationButtWeld) {\n if (this.isMetricSystem) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperialSystem) {\n result.min = 0.125;\n result.max = null;\n }\n }\n return result;\n }\n\n baseMaterial1FilletWeldThickness(thickness) {\n return this._calculateBaseMaterialFilletWeldThickness();\n }\n\n baseMaterial2FilletWeldThickness(thickness) {\n return this._calculateBaseMaterialFilletWeldThickness();\n }\n\n shielding(weldingProcessCode) {\n return calculateShielding(weldingProcessCode);\n }\n\n productType(testPiece) {\n let result = {\n productType: [],\n restrictions: [],\n };\n\n if (testPiece === PRODUCT_TYPE.PIPE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n } else if (testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 600,\n unitSystem: UNIT_SYSTEM.METRIC,\n },\n });\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 24,\n unitSystem: UNIT_SYSTEM.IMPERIAL,\n },\n });\n }\n }\n return result;\n }\n}\n","import ArcTransferMode from \"weldnote/models/arc-transfer-mode\";\nimport BaseMaterial from \"weldnote/models/base-material\";\nimport BaseMaterialGroup from \"weldnote/models/base-material-group\";\nimport FillerMaterialCommercialDesignation from \"weldnote/models/filler-material-commercial-designation\";\nimport IndustryCode from \"weldnote/models/industry-code\";\nimport ProcessMecanization from \"weldnote/models/process-mecanization\";\nimport TypeCurrentPolarity from \"weldnote/models/type-current-polarity\";\nimport WeldType from \"weldnote/models/weld-type\";\nimport WeldingDetail from \"weldnote/models/welding-detail\";\nimport WeldingPosition from \"weldnote/models/welding-position\";\nimport WeldingProcess from \"weldnote/models/welding-process\";\nimport PQRModel from \"weldnote/models/pqr\";\nimport { BaseMaterialGroupApprovalRange, BaseMaterialThicknessApprovalRange, NumericalRange, PqrApprovalRangeInterface, WeldingData } from \"./pqr-approval-range-interface\";\nimport { isEmpty } from \"@ember/utils\"\nimport { get } from \"@ember/object\";\nimport PqrStandard from \"weldnote/models/pqr-standard\";\nimport {\n isCompleteJointPenetrationButtWeld,\n isFilletWeld, isPartialJointPenetrationButtWeld\n} from \"weldnote/utils/rules/weld-type\";\nimport {\n isBothSidesDetail,\n isConsumableInsertDetail,\n isMultiLayerDetail,\n isSingleLayer,\n isSingleLayerDetail,\n isSingleSideFluxBackingDetail,\n isSingleSideGasBackingDetail,\n isSingleSideMaterialBackingDetail,\n isSingleSideNoBackingDetail\n} from 'weldnote/utils/rules/welding-detail';\nimport { isStandardAWSD15 } from \"weldnote/utils/standards\";\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport Constants from 'weldnote/utils/constants';\n\nconst { PQR } = PQRRules;\nconst { UNIT_SYSTEM } = Constants;\n\n\nexport default class AwsD15ApprovalRanges implements PqrApprovalRangeInterface {\n approvalRange: any;\n pqr: PQRModel;\n unitSystem: string;\n data: any;\n _allWeldingDetails: WeldingDetail[];\n _allProcessMecanizations: ProcessMecanization[];\n _allBaseMaterials: BaseMaterialGroup[];\n _allTypeCurrentPolarity: TypeCurrentPolarity[];\n _allWeldingPositions: WeldingPosition[];\n _allTransferModes: ArcTransferMode[];\n _allWeldType: WeldType[];\n\n constructor(\n pqr: PQRModel,\n data: WeldingData,\n unitSystem: string,\n ) {\n this.pqr = pqr;\n let industryCodeId = get(this.standard, 'code.id');\n \n this._allWeldType = data.weldTypes.filter((weldType: WeldType) => {\n return get(weldType, 'industryCode.id') === industryCodeId;\n });\n this._allBaseMaterials = data.baseMaterials;\n this._allWeldingDetails = data.weldingDetails;\n this._allProcessMecanizations = data.processMecanizations;\n this._allTypeCurrentPolarity = data.typeCurrentPolarities;\n this._allWeldingPositions = data.weldingPositions;\n this._allTransferModes = data.transferModes;\n this.unitSystem = pqr.unitSystem || unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for ISO 15614-1 Approval Ranges');\n }\n }\n\n get standard(): PqrStandard {\n return get(this.pqr, 'standard');\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n get isSingleLayer(): boolean {\n return isSingleLayer(this.pqr.weldingDetails);\n }\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n if (isFilletWeld(testPiece)) {\n return [testPiece];\n } else if (isCompleteJointPenetrationButtWeld(testPiece)) {\n return this._allWeldType.filter(\n (weldType: WeldType) => {\n if (isCompleteJointPenetrationButtWeld(weldType)) {\n return true;\n }\n if (isPartialJointPenetrationButtWeld(weldType)) {\n return true;\n }\n if (this.isSingleLayer && isFilletWeld(weldType)) {\n return true;\n }\n\n return false;\n }\n );\n } else if (isPartialJointPenetrationButtWeld(testPiece)) {\n let results = this._allWeldType.filter(\n (weldType: WeldType) => {\n if (isPartialJointPenetrationButtWeld(weldType)) {\n return true;\n }\n if (this.isSingleLayer && isFilletWeld(weldType)) {\n return true;\n }\n return false;\n }\n );\n return results;\n }\n return [testPiece];\n }\n productType(testPiece: string): string[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n weldingProcess(testPiece: WeldingProcess): WeldingProcess[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n\n get hasProcessEGW() {\n let root = get(this.pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE);\n let fill = get(this.pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE);\n let cap = get(this.pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE);\n if (root != null) {\n let designation = get(root, 'shortDesignation');\n if (designation === 'EGW') {\n return true;\n }\n }\n if (fill != null) {\n let designation = get(fill, 'shortDesignation');\n if (designation === 'EGW') {\n return true;\n }\n }\n if (cap != null) {\n let designation = get(cap, 'shortDesignation');\n if (designation === 'EGW') {\n return true;\n }\n }\n return false;\n \n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n weldingDetails(testPieces: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPieces)) {\n return []\n }\n\n let result: WeldingDetail[] = [];\n testPieces.forEach(\n (d: WeldingDetail) => {\n if (isSingleSideMaterialBackingDetail(d)\n || isSingleSideGasBackingDetail(d)\n || isSingleSideNoBackingDetail(d)\n || isSingleSideFluxBackingDetail(d)\n || isConsumableInsertDetail(d)\n || isBothSidesDetail(d)) {\n result.push(d);\n } else if (isSingleLayerDetail(d)) {\n if (this.hasProcessEGW) {\n result.push(d);\n } else {\n result.push(d);\n let multiLayer = this._allWeldingDetails\n .filter((d: WeldingDetail) => isMultiLayerDetail(d));\n if (!isEmpty(multiLayer)) {\n result.push(multiLayer[0]);\n }\n }\n } else if (isMultiLayerDetail(d)) {\n if (this.hasProcessEGW) {\n result.push(d);\n } else {\n result.push(d);\n let singleLayer = this._allWeldingDetails\n .filter((d: WeldingDetail) => isSingleLayerDetail(d));\n if (!isEmpty(singleLayer)) {\n result.push(singleLayer[0]);\n }\n }\n }\n });\n\n return result;\n }\n processMecanization(testPiece: ProcessMecanization, _process: WeldingProcess): ProcessMecanization[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n transferMode(testPiece: ArcTransferMode, _process: WeldingProcess): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n typeCurrentAndPolarity(testPiece: TypeCurrentPolarity): TypeCurrentPolarity[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n diameter(_testPiece: number): NumericalRange {\n return this._emptyRange;\n }\n weldedThickness(_testPiece: number): NumericalRange {\n return this._emptyRange;\n }\n baseMaterialThickness(thickness1: number, thickness2: number): BaseMaterialThicknessApprovalRange {\n let result1: NumericalRange = this._emptyRange;\n let result2: NumericalRange = this._emptyRange;\n if (!isEmpty(thickness1)) {\n result1 = this.calculateBaseMaterialThickness(thickness1);\n }\n if (!isEmpty(thickness2)) {\n result2 = this.calculateBaseMaterialThickness(thickness2);\n }\n return {\n material1: result1,\n material2: result2\n }\n }\n\n allProcessesSameType(weldingProcess: string) {\n let processes: WeldingProcess[] = [];\n let root = get(this.pqr, PQR.WELDING_PROCESS_ROOT_TESTPIECE) as WeldingProcess;\n let fill = get(this.pqr, PQR.WELDING_PROCESS_FILL_TESTPIECE) as WeldingProcess;\n let cap = get(this.pqr, PQR.WELDING_PROCESS_CAP_TEST_PIECE) as WeldingProcess;\n\n if (root) {\n processes.push(root);\n }\n if (fill) {\n processes.push(fill);\n }\n if (cap) {\n processes.push(cap);\n }\n\n let totalProcesses = processes.length;\n let totalProcessesOfType = 0;\n processes.forEach((p: WeldingProcess) => {\n if (p.shortDesignation === weldingProcess) {\n totalProcessesOfType++;\n }\n });\n if (totalProcesses === totalProcessesOfType) {\n return true;\n }\n return false;\n }\n\n calculateBaseMaterialThickness(value: number): NumericalRange {\n if (isEmpty(value) || isNaN(value)) {\n return this._emptyRange;\n }\n\n let result: NumericalRange = {\n min: null,\n max: null\n };\n\n if (this.allProcessesSameType('EGW')) {\n result.min = 0.5 * value;\n result.max = 1.1 * value;\n return result;\n } else if (this.allProcessesSameType('ESW')) {\n if (this.isImperial) {\n result.min = Math.max(value, 0.125);\n } else if (this.isMetric) {\n result.min = Math.max(value, 3)\n }\n result.max = value;\n return result;\n } else if ((this.allProcessesSameType('SMAW') || this.allProcessesSameType('FCAW') || this.allProcessesSameType('GMAW')) && this.isBaseMaterial100) {\n if (this.isImperial) {\n result.min = Math.max(0.125, value - 1);\n result.max = value + 0.5;\n } else if (this.isMetric) {\n result.min = Math.max(3, value - 25);\n result.max = value + 12;\n }\n return result;\n } else {\n if (this.isImperial) {\n result.min = Math.max(0.125, value);\n } else if (this.isMetric) {\n result.min = Math.max(3, value);\n }\n result.max = null;\n }\n\n return result;\n }\n\n get isBaseMaterial100(): boolean {\n let bm1 = get(this.pqr, PQR.BASE_MATERIAL1_TESTPIECE) as BaseMaterial;\n let bm2 = get(this.pqr, PQR.BASE_MATERIAL2_TESTPIECE) as BaseMaterial;\n if (bm1) {\n let group = get(bm1, 'materialGroup') as BaseMaterialGroup;\n if (this.isMaterialGroup100(group)) {\n return true;\n }\n }\n if (bm2) {\n let group = get(bm2, 'materialGroup') as BaseMaterialGroup;\n if (this.isMaterialGroup100(group)) {\n return true;\n }\n }\n return false;\n }\n\n baseMaterial1Thickness(value: number): NumericalRange {\n return this.calculateBaseMaterialThickness(value);\n }\n baseMaterial2Thickness(value: number): NumericalRange {\n return this.calculateBaseMaterialThickness(value);\n } \n\n weldingPosition(testPiece: WeldingPosition, _direction: string): WeldingPosition[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n preHeat(testPiece: number): NumericalRange {\n const result = this._emptyRange;\n if (!isEmpty(testPiece)) {\n result.min = testPiece;\n if (this.pqr.interpassTemperatureMaximumApprovalRange && !isNaN(this.pqr.interpassTemperatureMaximumApprovalRange)) {\n result.max = this.pqr.interpassTemperatureMaximumApprovalRange;\n }\n }\n return result;\n }\n postHeat(_testPiece: Number): NumericalRange {\n return this._emptyRange;\n }\n interpass(testPiece: number): NumericalRange {\n const result = this._emptyRange;\n if (isEmpty(testPiece)) {\n return result; \n }\n\n if (this.pqr.preheatTemperatureMinimumApprovalRange) {\n const minimumResult = Math.max(0, this.pqr.preheatTemperatureMinimumApprovalRange);\n if (!isNaN(minimumResult)) {\n result.min = minimumResult;\n }\n }\n result.max = testPiece;\n return result;\n }\n pwhtTemperature(_testPiece: Number): NumericalRange {\n return this._emptyRange;\n }\n pwhtTime(_testPiece: Number): NumericalRange {\n return this._emptyRange;\n }\n thicknessProcess(_testPiece: Number, _layer: string): NumericalRange {\n return this._emptyRange;\n }\n\n baseMaterial(baseMaterial1: BaseMaterial, baseMaterial2: BaseMaterial): BaseMaterialGroupApprovalRange {\n \n if (baseMaterial1 == null && baseMaterial2 == null) {\n return {\n material1: [],\n material2: [],\n };\n }\n\n if (baseMaterial1 != null && baseMaterial2 != null) {\n let bm1Group = baseMaterial1.materialGroup;\n let bm2Group = baseMaterial2.materialGroup;\n\n let group1ApprovalRange: BaseMaterialGroup[] = [];\n let group2ApprovalRange: BaseMaterialGroup[] = [];\n\n if (this.isMaterialGroup100(bm1Group)) {\n group1ApprovalRange = this.approvalRangeGroup100;\n } else if (this.isMaterialGroup70(bm1Group)) {\n group1ApprovalRange = this.approvalRangeGroup70;\n } else if (this.isMaterialGroup50(bm1Group)) {\n group1ApprovalRange = this.approvalRangeGroup50;\n } else if (this.isMaterialGroup36(bm1Group)) {\n group1ApprovalRange = this.approvalRangeGroup36;\n } else if (this.isMaterialGroupUnlisted(bm1Group)) {\n group1ApprovalRange = this.approvalRangeGroupUnlisted;\n }\n\n if (this.isMaterialGroup100(bm2Group)) {\n group2ApprovalRange = this.approvalRangeGroup100;\n } else if (this.isMaterialGroup70(bm2Group)) {\n group2ApprovalRange = this.approvalRangeGroup70;\n } else if (this.isMaterialGroup50(bm2Group)) {\n group2ApprovalRange = this.approvalRangeGroup50;\n } else if (this.isMaterialGroup36(bm2Group)) {\n group2ApprovalRange = this.approvalRangeGroup36;\n } else if (this.isMaterialGroupUnlisted(bm2Group)) {\n group2ApprovalRange = this.approvalRangeGroupUnlisted;\n }\n\n return {\n material1: group1ApprovalRange,\n material2: group2ApprovalRange\n };\n }\n\n return {\n material1: [],\n material2: [],\n };\n }\n\n isMaterialGroupUnlisted(bm1Group: BaseMaterialGroup) {\n return this.isMaterialGroup(bm1Group, \"U AWS D1.5\");\n }\n\n isMaterialGroup36(group: BaseMaterialGroup) {\n return this.isMaterialGroup(group, \"36 AWS D1.5\");\n }\n\n isMaterialGroup50(group: BaseMaterialGroup) {\n return this.isMaterialGroup(group, \"50 AWS D1.5\");\n }\n\n isMaterialGroup70(group: BaseMaterialGroup) {\n return this.isMaterialGroup(group, \"70 AWS D1.5\");\n }\n\n isMaterialGroup100(group: BaseMaterialGroup) {\n return this.isMaterialGroup(group, \"100 AWS D1.5\");\n }\n\n isMaterialGroup(group: BaseMaterialGroup, groupName: string) {\n if (isEmpty(group) || isEmpty(groupName)) {\n return false;\n }\n if (group && groupName) {\n return groupName === group.groupName;\n }\n\n return false;\n\n }\n\n get approvalRangeGroup36(): BaseMaterialGroup[] {\n return this._allBaseMaterials\n .filter((group: BaseMaterialGroup) => isStandardAWSD15(group.standard))\n .filter((group: BaseMaterialGroup) => this.isMaterialGroup36(group))\n ;\n }\n\n get approvalRangeGroupUnlisted(): BaseMaterialGroup[] {\n return this._allBaseMaterials\n .filter((group: BaseMaterialGroup) => isStandardAWSD15(group.standard))\n .filter((group: BaseMaterialGroup) => this.isMaterialGroupUnlisted(group))\n ;\n }\n\n get approvalRangeGroup50(): BaseMaterialGroup[] {\n return this._allBaseMaterials\n .filter((group: BaseMaterialGroup) => isStandardAWSD15(group.standard))\n .filter((group: BaseMaterialGroup) => this.isMaterialGroup36(group) || this.isMaterialGroup50(group))\n ;\n }\n\n get approvalRangeGroup70(): BaseMaterialGroup[] {\n return this._allBaseMaterials\n .filter((group: BaseMaterialGroup) => isStandardAWSD15(group.standard))\n .filter((group: BaseMaterialGroup) => this.isMaterialGroup36(group) || this.isMaterialGroup50(group) || this.isMaterialGroup70(group))\n ;\n }\n\n get approvalRangeGroup100(): BaseMaterialGroup[] {\n return this._allBaseMaterials\n .filter((group: BaseMaterialGroup) => isStandardAWSD15(group.standard))\n .filter((group: BaseMaterialGroup) =>\n this.isMaterialGroup36(group) || this.isMaterialGroup50(group)\n || this.isMaterialGroup70(group) || this.isMaterialGroup100(group))\n ;\n }\n\n branchAngle(_testPiece: Number): NumericalRange {\n return this._emptyRange;\n }\n fillerMaterialRootCommercialDesignation(testPiece: FillerMaterialCommercialDesignation): FillerMaterialCommercialDesignation[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n fillerMaterialFillCommercialDesignation(testPiece: FillerMaterialCommercialDesignation): FillerMaterialCommercialDesignation[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n fillerMaterialCapCommercialDesignation(testPiece: FillerMaterialCommercialDesignation): FillerMaterialCommercialDesignation[] {\n if (isEmpty(testPiece)) {\n return []\n }\n return [testPiece];\n }\n throatThickness(_testPiece: Number): NumericalRange {\n return this._emptyRange;\n }\n pjpButtWeldBaseMaterial1Thickness(): NumericalRange {\n return this._emptyRange;\n }\n pjpButtWeldBaseMaterial2Thickness(): NumericalRange {\n return this._emptyRange;\n }\n baseMaterial1FilletWeldThickness(): NumericalRange {\n return this._emptyRange;\n }\n baseMaterial2FilletWeldThickness(): NumericalRange {\n return this._emptyRange;\n }\n shielding(_testPiece: string) {\n return \"\";\n }\n \n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n \n}\n\n\n","import AwsB21ApprovalRanges from './aws-b2-1';\n\nexport default class AwsD143ApprovalRanges extends AwsB21ApprovalRanges {\n constructor(pqr, options) {\n super(pqr, options);\n }\n}\n","import Iso156141ApprovalRanges from './iso-15614-1';\n\nexport default class Iso15611ApprovalRanges extends Iso156141ApprovalRanges {\n constructor(pqr, options) {\n super(pqr, options);\n }\n}\n","import Iso156141ApprovalRanges from './iso-15614-1';\n\nexport default class Iso15612ApprovalRanges extends Iso156141ApprovalRanges {\n constructor(pqr, options) {\n super(pqr, options);\n }\n}\n","import Iso156141ApprovalRanges from './iso-15614-1';\n\nexport default class Iso15613ApprovalRanges extends Iso156141ApprovalRanges {\n constructor(pqr, options) {\n super(pqr, options);\n }\n}\n","import { get } from '@ember/object';\nimport { A } from '@ember/array';\nimport { isEmpty } from '@ember/utils';\nimport {\n isFilletWeld,\n isButtWeld,\n isOverlayWeld,\n isPartialPenetrationButtWeld,\n isBranchConnection,\n isATypeOfButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { isSingleLayer, isMultiLayer } from 'weldnote/utils/rules/welding-detail';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport {\n formatRangeWith2Decimals,\n formatRangeWith3Decimals,\n} from 'weldnote/utils/unit-system/format';\nimport BaseMaterialRulesISO from 'weldnote/utils/pqr-base-material-rules-iso';\nimport {\n convertMilimetersToInches,\n convertInchesToMilimeters,\n} from 'weldnote/utils/unit-system/units';\n\nimport Constants from 'weldnote/utils/constants';\n\nconst {\n PRODUCT_TYPE,\n UNIT_SYSTEM,\n WELDING_DETAILS,\n ARC_TRANSFER_MODES,\n WELD_TYPES,\n OVERLAY_TYPE_OPTIONS,\n} = Constants;\n\nexport default class Iso156141ApprovalRanges {\n constructor(\n pqr,\n {\n weldTypes: allWeldTypes,\n baseMaterials: allBaseMaterials,\n weldingDetails: allWeldingDetails,\n processMecanizations: allProcessMecanizations,\n typeCurrentPolarities: allTypeCurrentPolarity,\n weldingPositions: allWeldingPositions,\n transferModes: allTransferModes,\n unitSystem = UNIT_SYSTEM.METRIC,\n }\n ) {\n this.pqr = pqr;\n let industryCodeId = get(this.standard, 'code.id');\n\n this.allWeldTypes = allWeldTypes.filter((weldType) => {\n return get(weldType, 'industryCode.id') === industryCodeId;\n });\n this._baseMaterials = allBaseMaterials;\n this.allWeldingDetails = allWeldingDetails;\n this.allProcessMecanizations = allProcessMecanizations;\n this.allTypeCurrentPolarity = allTypeCurrentPolarity;\n this._weldingPositions = allWeldingPositions;\n this._transferModes = allTransferModes;\n this.unitSystem = pqr.unitSystem || unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for ISO 15614-1 Approval Ranges');\n }\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => get(position, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => get(baseMaterial, 'code.id') === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) => get(transferMode, 'industryCode.id') === this.industryCodeId\n );\n }\n\n get industryCodeId() {\n return get(this.standard, 'code.id');\n }\n\n get standard() {\n return this.pqr.get('standard');\n }\n\n get productTypeTestPiece() {\n return this.pqr.get('productTypeTestPiece');\n }\n\n get weldTypeTestPiece() {\n return this.pqr.get('weldTypeTestPiece');\n }\n\n get weldTypeCode() {\n return this.pqr.get('weldTypeTestPiece.weldType');\n }\n\n get baseMaterial1ThicknessValue() {\n return this.pqr.get('baseMaterial1Thickness');\n }\n\n get baseMaterial1() {\n return this.pqr.get('baseMaterial1TestPiece');\n }\n\n get baseMaterial2ThicknessValue() {\n return this.pqr.get('baseMaterial2Thickness');\n }\n\n get baseMaterial2() {\n return this.pqr.get('baseMaterial2TestPiece');\n }\n\n get weldingDetailsValues() {\n return this.pqr.get('weldingDetailsTestPiece');\n }\n\n get weldingProcessRoot() {\n return this.pqr.get('weldingProcessRootTestPiece');\n }\n\n get weldingProcessFill() {\n return this.pqr.get('weldingProcessFillTestPiece');\n }\n\n get weldingProcessCap() {\n return this.pqr.get('weldingProcessCapTestPiece');\n }\n\n get transferModeRoot() {\n return this.pqr.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.pqr.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.pqr.get('arcTransferModeCapTestPiece');\n }\n\n get impactTemperature() {\n return this.pqr.get('impactTestTemperature');\n }\n\n get impactRequired() {\n return this.pqr.get('impactTestRequired');\n }\n\n get impactTestReport() {\n return this.pqr.get('impactTestReport');\n }\n\n get interpassMinimum() {\n return this.pqr.get('interpassTemperatureMinimumApprovalRange');\n }\n\n get thicknessTotal() {\n return this.pqr.get('thicknessTotalTestPiece');\n }\n\n get isPipe() {\n let { productTypeTestPiece: productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productTypeTestPiece: productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n filterWeldTypes(allTypes, listToFilter, industryCode) {\n let result = A();\n allTypes\n .filter((item) => {\n return get(item, 'industryCode.id') === industryCode;\n })\n .forEach((item) => {\n let name = get(item, 'weldType');\n if (listToFilter.indexOf(name) > -1) {\n result.pushObject(item);\n }\n });\n return result;\n }\n\n weldType(testPiece) {\n let result = A();\n let { industryCodeId } = this;\n\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let curryedFilterTypes = (allWeldTypes, industryCode) => (listToFilter) =>\n this.filterWeldTypes(allWeldTypes, listToFilter, industryCode);\n let filterCurrentWeldTypes = curryedFilterTypes(this.allWeldTypes, industryCodeId);\n\n if (isBranchConnection(testPiece) || isFilletWeld(testPiece)) {\n result.pushObject(testPiece);\n } else if (isButtWeld(testPiece)) {\n result = filterCurrentWeldTypes([\n WELD_TYPES.FILLET_WELD,\n WELD_TYPES.BUTT_WELD,\n WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD,\n ]);\n if (this.isPipe) {\n // Add a Branch Connection\n let [branchConnection] = filterCurrentWeldTypes([WELD_TYPES.BRANCH_CONNECTION]);\n result.pushObject(branchConnection);\n }\n } else if (isPartialPenetrationButtWeld(testPiece)) {\n result = filterCurrentWeldTypes([\n WELD_TYPES.FILLET_WELD,\n WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD,\n ]);\n }\n\n // If no other rules is found, test piece qualifies itself\n if (isEmpty(result) && !isEmpty(testPiece)) {\n result.pushObject(testPiece);\n }\n\n return result;\n }\n\n weldingProcess(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n _findWeldingDetail(detail) {\n return this.allWeldingDetails.findBy('shortDesignation', detail);\n }\n\n _findListWeldingDetails(details = []) {\n let results = [];\n details.forEach((d) => {\n let detail = this._findWeldingDetail(d);\n if (detail) {\n results.push(detail);\n }\n });\n return results;\n }\n\n _isWeldingDetail(testPiece, detail) {\n return testPiece.findBy('shortDesignation', detail);\n }\n\n weldingDetails(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let resultDetailNames = A();\n let result = A();\n let { weldTypeCode: weldType, overlayType } = this;\n\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (overlayType === OVERLAY_TYPE_OPTIONS.CORROSION_RESISTANT) {\n testPiece.forEach((detail) => {\n let designation = detail.get('shortDesignation');\n if (designation === WELDING_DETAILS.SINGLE_LAYER) {\n [WELDING_DETAILS.SINGLE_LAYER, WELDING_DETAILS.MULTI_LAYER].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else {\n resultDetailNames.pushObject(designation);\n }\n });\n } else {\n testPiece.forEach((detail) => {\n let designation = detail.get('shortDesignation');\n resultDetailNames.pushObject(designation);\n });\n }\n } else {\n testPiece.forEach((detail) => {\n let designation = detail.get('shortDesignation');\n if (designation === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING) {\n [\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n resultDetailNames.concat();\n } else if (designation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING) {\n [WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING, WELDING_DETAILS.BOTH_SIDES].forEach(\n (currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n }\n );\n } else if (designation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING) {\n [\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else if (designation === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING) {\n [\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ].forEach((currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n });\n } else if (designation === WELDING_DETAILS.BOTH_SIDES) {\n [WELDING_DETAILS.BOTH_SIDES, WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING].forEach(\n (currentDetail) => {\n resultDetailNames.pushObject(currentDetail);\n }\n );\n } else {\n resultDetailNames.pushObject(designation);\n }\n });\n }\n\n resultDetailNames.uniq().forEach((name) => {\n let position = this.allWeldingDetails.findBy('shortDesignation', name);\n if (position) {\n result.pushObject(position);\n }\n });\n return result;\n }\n\n processMecanization(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n transferMode(transferMode, weldingProcess) {\n if (isEmpty(transferMode) || isEmpty(weldingProcess)) {\n return [];\n }\n let weldingProcessName = get(weldingProcess, 'shortDesignation');\n let weldingProcesses = ['114', '131', '135', '136', '137', '138'];\n if (!isEmpty(weldingProcessName) && weldingProcesses.indexOf(weldingProcessName) > -1) {\n let transferModeName = transferMode.get('transferMode');\n if (\n transferModeName === ARC_TRANSFER_MODES.SPRAY ||\n transferModeName === ARC_TRANSFER_MODES.GLOBULAR\n ) {\n return this.allTransferModes.filter((mode) => {\n if (\n mode.get('transferMode') === ARC_TRANSFER_MODES.SPRAY ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.GLOBULAR\n ) {\n return true;\n }\n });\n } else {\n return [transferMode];\n }\n } else {\n return [];\n }\n }\n\n filterTypeCurrent(allCurrents, toFilter) {\n let result = [];\n toFilter.forEach((type) => {\n allCurrents.forEach((current) => {\n if (current.get('typeCurrent') === type) {\n result.pushObject(current);\n return;\n }\n });\n });\n return result;\n }\n\n typeCurrentAndPolarity(testPiece) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n diameter(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let result = {\n min: null,\n max: null,\n };\n\n let diameter = parseFloat(testPiece, 10);\n\n if (isNaN(diameter)) {\n return this._emptyRange;\n }\n\n if (this.isPipe) {\n if (this.isOverlayWeld) {\n result.min = 0.75 * diameter;\n result.max = null;\n } else {\n result.min = 0.5 * diameter;\n result.max = null;\n }\n } else {\n if (this.isOverlayWeld) {\n result.min = 150;\n result.max = null;\n }\n }\n return this.fixDecimals(result);\n }\n\n weldedThickness(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._calculateWeldingThicknessRange(testPiece);\n }\n\n _calculateWeldingThicknessRange(testPiece) {\n let thickness = parseFloat(testPiece);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let { smallestBaseMaterialThickness, impactRequirements, weldTypeCode: weldType } = this;\n let result = this._emptyRange;\n result.min = 0;\n if (this.isImperialSystem) {\n thickness = convertInchesToMilimeters(thickness);\n smallestBaseMaterialThickness = convertInchesToMilimeters(smallestBaseMaterialThickness);\n }\n if (\n weldType === WELD_TYPES.BUTT_WELD ||\n weldType === WELD_TYPES.BRANCH_CONNECTION ||\n weldType === WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD\n ) {\n if (thickness > 0 && thickness <= 3) {\n result.max = 2 * thickness;\n } else if (thickness > 3 && thickness <= 12) {\n if (impactRequirements && isEmpty(this.impactTestReport)) {\n result.max = 12;\n } else if (impactRequirements && !isEmpty(this.impactTestReport)) {\n result.max = 2 * thickness;\n } else if (!impactRequirements) {\n result.max = 2 * thickness;\n }\n } else if (thickness > 12 && thickness <= 20) {\n result.max = 2 * thickness;\n } else if (thickness > 20) {\n if (smallestBaseMaterialThickness >= 20 && smallestBaseMaterialThickness < 40) {\n result.max = 2 * smallestBaseMaterialThickness;\n } else if (smallestBaseMaterialThickness >= 40 && smallestBaseMaterialThickness < 100) {\n result.max = 200;\n } else if (smallestBaseMaterialThickness >= 100 && smallestBaseMaterialThickness < 150) {\n result.max = 300;\n } else if (smallestBaseMaterialThickness >= 150) {\n result.max = 1.33 * smallestBaseMaterialThickness;\n }\n }\n } else {\n if (this.isSingleLayer) {\n result.min = 0.75 * thickness;\n result.max = 1.5 * thickness;\n } else if (this.isMultiLayer) {\n result.min = 0;\n result.max = null;\n }\n }\n if (this.isImperialSystem) {\n result.min = convertMilimetersToInches(result.min);\n result.max = convertMilimetersToInches(result.max);\n result = formatRangeWith3Decimals(result);\n return result;\n }\n\n return this.fixDecimals(result);\n }\n\n _thicknessButtWeldBranchConnectionSingleLayer(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return result;\n }\n if (thickness <= 3) {\n result.min = thickness * 0.5;\n result.max = thickness * 2;\n } else if (thickness > 3 && thickness <= 12) {\n result.min = Math.max(3, 0.5 * thickness);\n if (this.impactRequirements && isEmpty(this.impactTestReport)) {\n if (1.3 * thickness >= 12) {\n result.max = 12;\n } else {\n result.max = 1.3 * thickness;\n }\n } else {\n result.max = 1.3 * thickness;\n }\n } else if (thickness > 12 && thickness <= 100) {\n result.min = 0.5 * thickness;\n result.max = 1.1 * thickness;\n } else {\n result.min = null;\n result.max = null;\n }\n return result;\n }\n\n _thicknessButtWeldBranchConnectionMultiLayer(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return result;\n }\n if (thickness <= 3) {\n result.min = 0.5 * thickness;\n result.max = 2 * thickness;\n } else if (thickness > 3 && thickness <= 12) {\n result.min = 3;\n if (this.impactRequirements && isEmpty(this.impactTestReport)) {\n if (2 * thickness >= 12) {\n result.max = 12;\n } else {\n result.max = 2 * thickness;\n }\n } else {\n result.max = 2 * thickness;\n }\n } else if (thickness > 12 && thickness <= 100) {\n result.min = 0.5 * thickness;\n result.max = 2 * thickness;\n } else {\n result.min = 50;\n result.max = 2 * thickness;\n }\n return result;\n }\n\n _thicknessFilletWeld(thickness) {\n let result = this._emptyRange;\n if (thickness <= 3) {\n result.min = 0.7 * thickness;\n result.max = 2 * thickness;\n } else if (thickness > 3 && thickness < 30) {\n result.min = 3;\n result.max = thickness * 2;\n } else if (thickness >= 30) {\n result.min = 5;\n result.max = null;\n }\n return result;\n }\n\n _thicknessOverlayWeld(thickness) {\n let result = this._emptyRange;\n if (isNaN(thickness)) {\n return result;\n }\n if (thickness < 25) {\n result.min = 0.8 * thickness;\n result.max = 1.5 * thickness;\n } else {\n result.min = 25;\n result.max = null;\n }\n return result;\n }\n\n baseMaterialThickness(thickness1, thickness2) {\n if (isEmpty(thickness1)) {\n return {\n material1: this._emptyRange,\n material2: this._emptyRange,\n };\n }\n\n let { weldTypeCode: weldType } = this;\n\n let thicknessesDifferent = false;\n let thickness1Numeric = parseFloat(thickness1);\n let thickness2Numeric = parseFloat(thickness2);\n\n let resultThickness1 = {\n min: 0,\n max: null,\n };\n let resultThickness2 = {\n min: 0,\n max: null,\n };\n if (\n !isEmpty(thickness1) &&\n !isEmpty(thickness2) &&\n !isNaN(thickness1Numeric) &&\n !isNaN(thickness2Numeric) &&\n thickness1Numeric !== thickness2Numeric\n ) {\n thicknessesDifferent = Math.abs(thickness1 - thickness2) > Number.EPSILON;\n }\n\n if (this.isImperialSystem) {\n thickness1 = convertInchesToMilimeters(thickness1);\n thickness2 = convertInchesToMilimeters(thickness2);\n }\n\n if (\n weldType === WELD_TYPES.BUTT_WELD ||\n weldType === WELD_TYPES.BRANCH_CONNECTION ||\n weldType === WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD\n ) {\n if (this.isSingleLayer) {\n resultThickness1 = this._thicknessButtWeldBranchConnectionSingleLayer(thickness1);\n resultThickness2 = this._thicknessButtWeldBranchConnectionSingleLayer(thickness2);\n } else if (this.isMultiLayer) {\n resultThickness1 = this._thicknessButtWeldBranchConnectionMultiLayer(thickness1);\n resultThickness2 = this._thicknessButtWeldBranchConnectionMultiLayer(thickness2);\n }\n } else if (weldType === WELD_TYPES.FILLET_WELD) {\n resultThickness1 = this._thicknessFilletWeld(thickness1);\n resultThickness2 = this._thicknessFilletWeld(thickness2);\n } else if (weldType === WELD_TYPES.OVERLAY_WELD) {\n resultThickness1 = this._thicknessOverlayWeld(thickness1);\n resultThickness2 = this._thicknessOverlayWeld(thickness2);\n }\n\n if (thicknessesDifferent) {\n if (thickness1Numeric >= 30 && thickness2Numeric >= 30) {\n if (thickness1Numeric > thickness2Numeric) {\n resultThickness1.max = null;\n } else if (thickness2Numeric > thickness1Numeric) {\n resultThickness2.max = null;\n }\n }\n }\n\n if (this.isImperialSystem) {\n resultThickness1.min = convertMilimetersToInches(resultThickness1.min);\n resultThickness1.max = convertMilimetersToInches(resultThickness1.max);\n resultThickness2.min = convertMilimetersToInches(resultThickness2.min);\n resultThickness2.max = convertMilimetersToInches(resultThickness2.max);\n resultThickness1 = formatRangeWith3Decimals(resultThickness1);\n resultThickness2 = formatRangeWith3Decimals(resultThickness2);\n return {\n material1: resultThickness1,\n material2: resultThickness2,\n };\n }\n\n return {\n material1: this.fixDecimals(resultThickness1),\n material2: this.fixDecimals(resultThickness2),\n };\n }\n\n _findWeldingPosition(code = '') {\n return this.allWeldingPositions\n .filter((p) => {\n return get(p, 'industryCode.id') === get(this.standard, 'code.id');\n })\n .findBy('code', code);\n }\n\n weldingPosition(testPiece, direction) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let weldingPosition = get(testPiece, 'code');\n let { weldTypeCode: weldType } = this;\n\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (weldingPosition === 'PC') {\n let resultingPositions = ['PA', 'PB', 'PC'];\n return this.allWeldingPositions.filter((item) => {\n let currentPositionCode = item.get('code');\n return resultingPositions.includes(currentPositionCode);\n });\n } else {\n return this.allWeldingPositions.filter((item) => {\n return item.get('code') === weldingPosition;\n });\n }\n } else {\n let ascendantPositions = ['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PH', 'H-L045', 'PF+PC'];\n let result = ascendantPositions.includes(weldingPosition);\n if (result) {\n return this.allWeldingPositions.filter((item) => {\n let currentPositionCode = item.get('code');\n return ascendantPositions.includes(currentPositionCode);\n });\n }\n let descendentPositions = ['PG', 'PJ', 'J-L045'];\n result = descendentPositions.includes(weldingPosition);\n if (result) {\n return this.allWeldingPositions.filter((item) => {\n let currentPositionCode = item.get('code');\n return descendentPositions.includes(currentPositionCode);\n });\n }\n }\n\n return [testPiece];\n }\n\n fixDecimals(result) {\n if (result == null) {\n return null;\n }\n if (this.unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return result;\n }\n return formatRangeWith2Decimals(result);\n }\n\n preHeat(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let preHeat = parseFloat(testPiece);\n if (isNaN(preHeat)) {\n return this._emptyRange;\n }\n\n let result = {\n min: null,\n max: null,\n };\n\n result.min = Math.max(preHeat - 50, 0);\n result.max = null;\n\n return this.fixDecimals(result);\n }\n\n postHeat(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let postHeat = parseFloat(testPiece);\n if (isNaN(postHeat)) {\n return this._emptyRange;\n }\n\n let result = this._emptyRange;\n let { weldTypeCode: weldType } = this;\n\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n result.min = postHeat;\n result.max = postHeat + 20;\n } else {\n result.min = postHeat;\n result.max = null;\n }\n\n if (result.min < 0) {\n result.min = 0;\n }\n if (result.max < 0) {\n result.max = 0;\n }\n\n return this.fixDecimals(result);\n }\n\n isCorrectGroupISO15614(group) {\n return (\n BaseMaterialRulesISO.isGroup8(group) ||\n BaseMaterialRulesISO.isGroupExactly40(group) ||\n BaseMaterialRulesISO.isGroupExactly48(group) ||\n BaseMaterialRulesISO.isGroup10(group)\n );\n }\n\n interpass(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let result = {\n min: null,\n max: null,\n };\n\n if (!isEmpty(this.baseMaterial1GroupName) && !isEmpty(this.baseMaterial2GroupName)) {\n if (\n this.isCorrectGroupISO15614(this.baseMaterial1GroupName) &&\n this.isCorrectGroupISO15614(this.baseMaterial2GroupName)\n ) {\n result.min = 0;\n result.max = testPiece;\n } else {\n result.min = 0;\n result.max = testPiece + 50;\n }\n } else {\n result.min = 0;\n result.max = testPiece;\n }\n\n // Don't update the minimum if there was a previous value there\n if (this.interpassMinimum > 0 && result.min === 0) {\n result.min = this.interpassMinimum;\n }\n\n return this.fixDecimals(result);\n }\n\n pwhtTemperature(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let postWeldHeatTreament = parseFloat(testPiece);\n if (isNaN(postWeldHeatTreament)) {\n return this._emptyRange;\n }\n\n let result = this._emptyRange;\n let min = postWeldHeatTreament - 20;\n if (min < 0) {\n min = 0;\n }\n let max = postWeldHeatTreament + 20;\n if (max > 999) {\n max = 999;\n }\n result.min = min;\n result.max = max;\n\n return this._toRange(testPiece, testPiece);\n }\n\n pwhtTime(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let result = this._emptyRange;\n\n let time = parseFloat(testPiece);\n if (isNaN(time)) {\n return this._emptyRange;\n }\n\n result.min = 0;\n result.max = time;\n\n return this.fixDecimals(result);\n }\n\n get isMetricSystem() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperialSystem() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n _toRange(min, max) {\n return {\n min,\n max,\n };\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n get isButtWeldOrPartialPenetrationWeld() {\n return (\n isButtWeld(this.weldTypeTestPiece) || isPartialPenetrationButtWeld(this.weldTypeTestPiece)\n );\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n get isMultiLayer() {\n return isMultiLayer(this.weldingDetailsValues);\n }\n\n get isSingleLayer() {\n return isSingleLayer(this.weldingDetailsValues);\n }\n\n get impactRequirements() {\n let { impactTemperature, impactRequired } = this;\n return impactRequired && !isNaN(parseFloat(impactTemperature));\n }\n\n get overlayType() {\n return this.pqr.get('overlayType');\n }\n\n get isOverlayHardFacing() {\n let { overlayType } = ThirtyDaysRoute;\n return overlayType === OVERLAY_TYPE_OPTIONS.HARD_FACING;\n }\n\n get baseMaterial1ThicknessApprovalRangeMinimum() {\n return this.pqr.get('baseMaterial1ThicknessMinimumApprovalRange');\n }\n\n get baseMaterial1ThicknessApprovalRangeMaximum() {\n return this.pqr.get('baseMaterial1ThicknessMaximumApprovalRange');\n }\n\n get baseMaterial2ThicknessApprovalRangeMinimum() {\n return this.pqr.get('baseMaterial2ThicknessMinimumApprovalRange');\n }\n\n get baseMaterial2ThicknessApprovalRangeMaximum() {\n return this.pqr.get('baseMaterial2ThicknessMaximumApprovalRange');\n }\n\n get smallestBaseMaterialThickness() {\n let bm1Thickness = parseFloat(this.baseMaterial1ThicknessValue, 10);\n let bm2Thickness = parseFloat(this.baseMaterial2ThicknessValue, 10);\n\n if (!isNaN(bm1Thickness) && !isNaN(bm2Thickness)) {\n return bm1Thickness <= bm2Thickness ? bm1Thickness : bm2Thickness;\n } else if (!isNaN(bm1Thickness)) {\n return bm1Thickness;\n } else if (!isNaN(bm2Thickness)) {\n return bm2Thickness;\n }\n return null;\n }\n\n thicknessProcess(testPiece /* ,layer */) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._calculateWeldingThicknessRange(testPiece);\n }\n\n get baseMaterial1GroupName() {\n let baseMaterial1 = this.pqr.get('baseMaterial1TestPiece');\n if (!isEmpty(baseMaterial1)) {\n let materialGroup = get(baseMaterial1, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n get baseMaterial2GroupName() {\n let baseMaterial2 = this.pqr.get('baseMaterial2TestPiece');\n if (!isEmpty(baseMaterial2)) {\n let materialGroup = get(baseMaterial2, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n _filterGroups(groups) {\n let result = A();\n groups.forEach((group) => {\n let groupModel = this.allBaseMaterials.findBy('groupName', group);\n if (groupModel) {\n result.push(groupModel);\n }\n });\n return result;\n }\n\n _calculateBaseMaterialGroup(baseMaterial1Group, baseMaterial2Group, isMaterial1) {\n let { weldTypeCode: weldType } = this;\n let result = null;\n let result2 = null;\n let group = get(baseMaterial1Group, 'materialGroup.groupName');\n let group2 = get(baseMaterial2Group, 'materialGroup.groupName');\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n // Rules for overlay weld\n if (group === '1.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor1dot1());\n } else if (group === '1.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor1dot2());\n } else if (group === '1.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor1dot3());\n } else if (group === '2.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor2dot1());\n } else if (group === '2.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor2dot2());\n } else if (group === '3.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor3dot1());\n } else if (group === '3.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor3dot2());\n } else if (group === '3.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor3dot3());\n } else if (group === '4.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor4dot1());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor4dot1());\n }\n } else if (group === '4.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor4dot2());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor4dot2());\n }\n } else if (group === '5.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot1());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot1());\n }\n } else if (group === '5.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot2());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot2());\n }\n } else if (group === '5.3') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot3());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot3());\n }\n } else if (group === '5.4') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot4());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot4());\n }\n } else if (group === '6.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot1());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot1());\n }\n } else if (group === '6.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot2());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot2());\n }\n } else if (group === '6.3') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot3());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot3());\n }\n } else if (group === '6.4') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot4());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot4());\n }\n } else if (group === '7.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor7dot1());\n } else if (group === '7.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor7dot2());\n } else if (group === '8.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor8dot1());\n } else if (group === '8.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor8dot2());\n } else if (group === '8.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor8dot3());\n } else if (group === '10.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor10dot1());\n } else if (group === '10.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor10dot2());\n } else if (group === '11.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor11dot1());\n } else {\n result = this._filterGroups(\n BaseMaterialRulesISO.getRuleFor11dot1().concat(['1.4', '1.3', '1.2', '1.1'])\n );\n }\n } else if (group === '11.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor11dot2());\n } else {\n result = this._filterGroups(\n BaseMaterialRulesISO.getRuleFor11dot2().concat(['1.4', '1.3', '1.2', '1.1'])\n );\n }\n } else if (group === '11.3') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor11dot3());\n } else {\n result = this._filterGroups(\n BaseMaterialRulesISO.getRuleFor11dot3().concat(['1.4', '1.3', '1.2', '1.1'])\n );\n }\n } else {\n result = this._filterGroups([group]);\n }\n // End of Rules for Overlay Welds\n } else {\n // Rules for general case\n if (group === '1.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor1dot1());\n } else if (group === '1.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor1dot2());\n } else if (group === '1.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor1dot3());\n } else if (group === '2.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor2dot1());\n } else if (group === '2.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor2dot2());\n } else if (group === '3.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor3dot1());\n } else if (group === '3.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor3dot2());\n } else if (group === '3.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor3dot3());\n } else if (group === '4.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor4dot1());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor4dot1());\n }\n } else if (group === '4.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor4dot2());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor4dot2());\n }\n } else if (group === '5.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot1());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot1());\n }\n } else if (group === '5.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot2());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot2());\n }\n } else if (group === '5.3') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot3());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot3());\n }\n } else if (group === '5.4') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor5dot4());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor5dot4());\n }\n } else if (group === '6.1') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot1());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot1());\n }\n } else if (group === '6.2') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot2());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot2());\n }\n } else if (group === '6.3') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot3());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot3());\n }\n } else if (group === '6.4') {\n if (isMaterial1) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRuleFor6dot4());\n } else {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor6dot4());\n }\n } else if (group === '7.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor7dot1());\n } else if (group === '7.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor7dot2());\n } else if (group === '7.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor7dot3());\n } else if (group === '8.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor8dot1());\n } else if (group === '8.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor8dot2());\n } else if (group === '8.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor8dot3());\n } else if (group === '9.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor9dot1());\n } else if (group === '9.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor9dot2());\n } else if (group === '9.3') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor9dot3());\n } else if (group === '10.1') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor10dot1());\n } else if (group === '10.2') {\n result = this._filterGroups(BaseMaterialRulesISO.getRuleFor10dot2());\n } else if (['41', '42', '44', '46', '48'].indexOf(group) > -1) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor40(group));\n } else {\n result = this._filterGroups([group]);\n }\n\n // Special Combinations of groups (8.x + 6.x, 8.x + 5.x)\n // Missing rules of 6x -> 8.x && 5.x -> 8.x 6.x -> 10.x && 5.x -> 10.x\n if (BaseMaterialRulesISO.isGroup8(group) && BaseMaterialRulesISO.isGroup6(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor6(group2).concat(['4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup6(group) && BaseMaterialRulesISO.isGroup8(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group2));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor6(group).concat(['4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup8(group) && BaseMaterialRulesISO.isGroup2(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group));\n result2 = this._filterGroups(BaseMaterialRulesISO.getRulesFor2(group2));\n } else if (BaseMaterialRulesISO.isGroup2(group) && BaseMaterialRulesISO.isGroup8(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group2));\n result2 = this._filterGroups(BaseMaterialRulesISO.getRulesFor2(group));\n } else if (BaseMaterialRulesISO.isGroup8(group) && BaseMaterialRulesISO.isGroup5(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor5(group2).concat(['6.2', '6.1', '4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup5(group) && BaseMaterialRulesISO.isGroup8(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group2));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor5(group).concat(['6.2', '6.1', '4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup10(group) && BaseMaterialRulesISO.isGroup6(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor6(group2).concat(['4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup6(group) && BaseMaterialRulesISO.isGroup10(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group2));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor6(group).concat(['4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup10(group) && BaseMaterialRulesISO.isGroup5(group2)) {\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor5(group2).concat(['6.2', '6.1', '4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup5(group) && BaseMaterialRulesISO.isGroup10(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group2));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor5(group).concat(['6.2', '6.1', '4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup10(group) && BaseMaterialRulesISO.isGroup8(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group));\n result2 = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group2));\n } else if (BaseMaterialRulesISO.isGroup8(group) && BaseMaterialRulesISO.isGroup10(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group2));\n result2 = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor8(group));\n } else if (BaseMaterialRulesISO.isGroup11(group) && BaseMaterialRulesISO.isGroup11(group2)) {\n result = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor11(group).concat(['1.4', '1.3', '1.2', '1.1'])\n );\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor11(group2).concat(['1.4', '1.3', '1.2', '1.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup40(group) && BaseMaterialRulesISO.isGroup6(group2)) {\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor6(group2).concat(['4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup6(group) && BaseMaterialRulesISO.isGroup40(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor40(group2));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor6(group).concat(['4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup40(group) && BaseMaterialRulesISO.isGroup5(group2)) {\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor5(group2).concat(['6.2', '6.1', '4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup5(group) && BaseMaterialRulesISO.isGroup40(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor40(group2));\n result2 = this._filterGroups(\n BaseMaterialRulesISO.getRulesFor5(group).concat(['6.2', '6.1', '4.2', '4.1'])\n );\n } else if (BaseMaterialRulesISO.isGroup5(group) && BaseMaterialRulesISO.isGroup5(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getSimpleRulesFor5(group));\n result2 = this._filterGroups(BaseMaterialRulesISO.getRulesFor5(group2));\n } else if (BaseMaterialRulesISO.isGroup10(group) && BaseMaterialRulesISO.isGroup10(group2)) {\n result = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group));\n result2 = this._filterGroups(BaseMaterialRulesISO.getRulesFor10(group2));\n }\n }\n return {\n material1: result,\n material2: result2,\n };\n }\n\n baseMaterial(baseMaterial1, baseMaterial2) {\n if (isEmpty(baseMaterial1) || isEmpty(baseMaterial2)) {\n return {\n material1: [],\n material2: [],\n };\n }\n return this._calculateBaseMaterialGroup(baseMaterial1, baseMaterial2, true);\n }\n\n branchAngle(/* testPiece */) {\n return this._emptyRange;\n }\n\n _calculateFillerMaterialRootCommercialDesignation(testPiece, currentProcess) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let result = [];\n let processes = ['111', '114', '121', '122', '123', '124', '125', '136', '137'];\n let processName = '';\n if (!isEmpty(currentProcess)) {\n processName = currentProcess.shortDesignation;\n }\n if (\n processes.includes(processName) &&\n this.impactRequirements & (this.impactTemperature <= -20)\n ) {\n result = [testPiece];\n } else {\n // Not needed, but just wanted to make the rule explicit\n result = [];\n }\n return result;\n }\n\n fillerMaterialRootCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n return this._calculateFillerMaterialRootCommercialDesignation(\n designation,\n this.weldingProcessRoot\n );\n }\n\n fillerMaterialFillCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n return this._calculateFillerMaterialRootCommercialDesignation(\n designation,\n this.weldingProcessFill\n );\n }\n\n fillerMaterialCapCommercialDesignation(designation) {\n if (isEmpty(designation)) {\n return [];\n }\n return this._calculateFillerMaterialRootCommercialDesignation(\n designation,\n this.weldingProcessCap\n );\n }\n\n throatThickness(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let result = this._emptyRange;\n\n let weldedThickness = parseFloat(this.thicknessTotal);\n if (isNaN(weldedThickness)) {\n return this._emptyRange;\n }\n\n if (!isATypeOfButtWeld(this.weldTypeTestPiece)) {\n return result;\n }\n\n if (this.isSingleLayer) {\n result.min = 0.75 * this.thicknessTotal;\n result.max = 1.5 * this.thicknessTotal;\n } else if (this.isMultiLayer) {\n result.min = 0;\n result.max = null;\n }\n return this.fixDecimals(result);\n }\n\n shielding(weldingProcess) {\n if (isEmpty(weldingProcess)) {\n return null;\n }\n return calculateShielding(weldingProcess);\n }\n\n _calculateBaseMaterialFilletWeldThickness(testPiece) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let thickness = parseFloat(testPiece);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let result = this._emptyRange;\n\n let { weldTypeCode: weldType } = this;\n if (\n weldType === WELD_TYPES.BUTT_WELD ||\n weldType === WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD\n ) {\n if (thickness <= 3) {\n result.min = 0.7 * thickness;\n result.max = 2 * thickness;\n } else if (thickness > 3 && thickness < 30) {\n result.min = 3;\n result.max = 2 * thickness;\n } else {\n result.min = 5;\n result.max = null;\n }\n }\n return result;\n }\n\n baseMaterial1FilletWeldThickness() {\n return this._calculateBaseMaterialFilletWeldThickness(this.baseMaterial1ThicknessValue);\n }\n\n baseMaterial2FilletWeldThickness() {\n return this._calculateBaseMaterialFilletWeldThickness(this.baseMaterial2ThicknessValue);\n }\n\n pjpButtWeldBaseMaterial1Thickness() {\n return this._emptyRange;\n }\n\n pjpButtWeldBaseMaterial2Thickness() {\n return this._emptyRange;\n }\n\n productType(testPiece) {\n let result = {\n productType: [],\n restrictions: [],\n };\n if (isButtWeld(weldType) && testPiece === PRODUCT_TYPE.PIPE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n } else if (testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 150,\n unitSystem: UNIT_SYSTEM.METRIC,\n },\n\n weldingPositions: ['PA', 'PC'],\n });\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 500,\n unitSystem: UNIT_SYSTEM.METRIC,\n },\n });\n } else if (testPiece === PRODUCT_TYPE.PIPE) {\n result.productType = [PRODUCT_TYPE.PIPE];\n }\n return result;\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport WeldType from 'weldnote/models/weld-type';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport Constants from 'weldnote/utils/constants';\nimport { PqrApprovalRangeInterface } from './pqr-approval-range-interface';\n\nconst { PRODUCT_TYPE } = Constants;\n\nexport default class NotSupportedApprovalRanges implements PqrApprovalRangeInterface {\n constructor() {}\n\n weldType(testPiece: WeldType) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n productType(testPiece: string) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n }\n\n weldingProcess(testPiece: WeldingProcess) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n weldingDetails(testPieces: WeldingDetail[] = []) {\n return testPieces;\n }\n\n processMecanization(testPiece: ProcessMecanization) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n transferMode(testPiece: ArcTransferMode) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n typeCurrentAndPolarity(testPiece: TypeCurrentPolarity) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n diameter(/* testPiece */) {\n return this._emptyRange;\n }\n\n weldedThickness(/* testPiece */) {\n return this._emptyRange;\n }\n\n baseMaterialThickness(/* thickness1, thickness2 */) {\n return {\n material1: this._emptyRange,\n material2: this._emptyRange,\n };\n }\n\n baseMaterial1Thickness() {\n return this._emptyRange;\n }\n\n baseMaterial2Thickness() {\n return this._emptyRange;\n }\n\n weldingPosition(testPiece: WeldingPosition /* direction */) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n preHeat() {\n return this._emptyRange;\n }\n\n postHeat() {\n return this._emptyRange;\n }\n\n interpass() {\n return this._emptyRange;\n }\n\n pwhtTemperature() {\n return this._emptyRange;\n }\n\n pwhtTime() {\n return this._emptyRange;\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n thicknessProcess(/* testPiece, layer */) {\n return this._emptyRange;\n }\n\n baseMaterial(baseMaterial1: BaseMaterial, baseMaterial2: BaseMaterial) {\n if (isEmpty(baseMaterial1) || isEmpty(baseMaterial2)) {\n return {\n material1: [],\n material2: [],\n };\n }\n\n return {\n material1: [get(baseMaterial1, 'materialGroup')],\n material2: [get(baseMaterial2, 'materialGroup')],\n };\n }\n\n branchAngle(/* testPiece */) {\n return this._emptyRange;\n }\n\n fillerMaterialRootCommercialDesignation(designation: FillerMaterialCommercialDesignation) {\n if (isEmpty(designation)) {\n return [];\n }\n return [designation];\n }\n\n fillerMaterialFillCommercialDesignation(designation: FillerMaterialCommercialDesignation) {\n if (isEmpty(designation)) {\n return [];\n }\n return [designation];\n }\n\n fillerMaterialCapCommercialDesignation(designation: FillerMaterialCommercialDesignation) {\n if (isEmpty(designation)) {\n return [];\n }\n return [designation];\n }\n\n throatThickness() {\n return this._emptyRange;\n }\n\n pjpButtWeldBaseMaterial1Thickness() {\n return this._emptyRange;\n }\n\n pjpButtWeldBaseMaterial2Thickness() {\n return this._emptyRange;\n }\n\n baseMaterial1FilletWeldThickness() {\n return this._emptyRange;\n }\n\n baseMaterial2FilletWeldThickness() {\n return this._emptyRange;\n }\n\n shielding() {\n return '';\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isStandardASME,\n isStandardAWSB21,\n isStandardAWSD11,\n isStandardISO15614,\n isStandardISO15613,\n isStandardISO15611,\n isStandardISO15612,\n isStandardAWSD143,\n isStandardAWSD15,\n} from 'weldnote/utils/standards';\nimport AsmeIXApprovalRanges from './asme-ix';\nimport AwsB21ApprovalRanges from './aws-b2-1';\nimport NotSupportedStandardApprovalRanges from './not-supported';\nimport AwsD11ApprovalRanges from './aws-d1-1';\nimport Iso156141ApprovalRanges from './iso-15614-1';\nimport Iso15613ApprovalRanges from './iso-15613';\nimport Iso15611ApprovalRanges from './iso-15611';\nimport AwsD143ApprovalRanges from './aws-d143';\nimport Iso15612ApprovalRanges from './iso-15612';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport PQRModel from 'weldnote/models/pqr';\nimport FillerMaterialCommercialDesignation from 'weldnote/models/filler-material-commercial-designation';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldType from 'weldnote/models/weld-type';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport AwsD15ApprovalRanges from './aws-d1-5';\nimport { WeldingData } from './pqr-approval-range-interface';\n\nconst { UNIT_SYSTEM, OVERLAY_TYPE_OPTIONS } = Constants;\n\nexport default class PqrApprovalRange {\n approvalRange: any;\n\n pqr: any;\n\n unitSystem: string;\n\n data: any;\n\n allWeldingDetails: WeldingDetail[];\n\n allProcessMecanizations: ProcessMecanization[];\n\n allBaseMaterials: BaseMaterialGroup[];\n\n allWeldTypes: WeldType[];\n\n allTypeCurrentPolarity: TypeCurrentPolarity[];\n\n allWeldingPositions: WeldingPosition[];\n\n allTransferModes: ArcTransferMode[];\n\n constructor(pqr: PQRModel, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.pqr = pqr;\n this.data = data;\n let standard = get(pqr, 'standard');\n let industryCodeId = '';\n if (standard) {\n industryCodeId = this.getIndustryCode(get(standard, 'code'));\n }\n this.allWeldTypes = data.weldTypeOptions.filter((weldType: WeldType) => {\n return this.getIndustryCode(get(weldType, 'industryCode')) === industryCodeId;\n });\n this.allWeldingDetails = data.weldingDetailOptions;\n this.allBaseMaterials = data.allBaseMaterialGroups;\n this.allProcessMecanizations = data.processMecanizationOptions;\n this.allTypeCurrentPolarity = data.typeCurrentPolarityOptions;\n this.allWeldingPositions = data.weldingPositionOptions.filter((position: WeldingPosition) => {\n return this.getIndustryCode(get(position, 'industryCode')) === industryCodeId;\n });\n this.allTransferModes = data.arcTransferModeOptions.filter((transferMode: ArcTransferMode) => {\n return this.getIndustryCode(get(transferMode, 'industryCode')) === industryCodeId;\n });\n this.unitSystem = pqr.unitSystem || unitSystem;\n let allData: WeldingData = {\n weldTypes: data.weldTypeOptions,\n baseMaterials: data.allBaseMaterialGroups,\n processMecanizations: data.processMecanizationOptions,\n typeCurrentPolarities: data.typeCurrentPolarityOptions,\n weldingPositions: data.weldingPositionOptions,\n transferModes: data.arcTransferModeOptions,\n weldingDetails: data.weldingDetailOptions,\n weldingProcesses: data.weldingProcessOptions,\n unitSystem: pqr.unitSystem || unitSystem,\n };\n\n if (isStandardASME(this.standard)) {\n this.approvalRange = new AsmeIXApprovalRanges(pqr, allData);\n } else if (isStandardAWSD11(this.standard)) {\n this.approvalRange = new AwsD11ApprovalRanges(pqr, allData);\n } else if (isStandardAWSD15(this.standard)) {\n this.approvalRange = new AwsD15ApprovalRanges(pqr, allData, this.unitSystem);\n } else if (isStandardISO15614(this.standard)) {\n this.approvalRange = new Iso156141ApprovalRanges(pqr, allData);\n } else if (isStandardAWSB21(this.standard)) {\n this.approvalRange = new AwsB21ApprovalRanges(pqr, allData);\n } else if (isStandardISO15613(this.standard)) {\n this.approvalRange = new Iso15613ApprovalRanges(pqr, allData);\n } else if (isStandardISO15611(this.standard)) {\n this.approvalRange = new Iso15611ApprovalRanges(pqr, allData);\n } else if (isStandardAWSD143(this.standard)) {\n this.approvalRange = new AwsD143ApprovalRanges(pqr, allData);\n } else if (isStandardISO15612(this.standard)) {\n this.approvalRange = new Iso15612ApprovalRanges(pqr, allData);\n } else {\n this.approvalRange = new NotSupportedStandardApprovalRanges();\n }\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get standard() {\n return this.pqr.get('standard');\n }\n\n get productTypeValue() {\n return this.pqr.get('productTypeTestPiece');\n }\n\n get weldTypeValue() {\n return this.pqr.get('weldTypeTestPiece');\n }\n\n get weldTypeCode() {\n let weldType = this.pqr.get('weldTypeTestPiece');\n if (!isEmpty(weldType)) {\n return weldType.weldType;\n }\n return '';\n }\n\n get impactRequirements() {\n let { impactTemperature, impactRequired } = this;\n return !isEmpty(impactRequired) && impactRequired && !isNaN(parseFloat(impactTemperature));\n }\n\n get impactTemperature() {\n return this.pqr.get('impactTestTemperature');\n }\n\n get impactTestReport() {\n return this.pqr.get('impactTestReport');\n }\n\n get impactRequired() {\n return this.pqr.get('impactTestRequired');\n }\n\n get diameterValue() {\n return this.pqr.get('diameterTestPiece');\n }\n\n get overlayType() {\n return this.pqr.get('overlayType');\n }\n\n get weldingProcessRoot() {\n return this.pqr.get('weldingProcessRootTestPiece');\n }\n\n get layerType() {\n return this.pqr.getLayerType();\n }\n\n get rootLayerType() {\n return this.pqr.get('thicknessRootLayerTestPiece');\n }\n\n get fillLayerType() {\n return this.pqr.get('thicknessFillLayerTestPiece');\n }\n\n get capLayerType() {\n return this.pqr.get('thicknessCapLayerTestPiece');\n }\n\n get weldingProcessRootName() {\n let weldingProcess = this.pqr.get('weldingProcessRootTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldingProcessFill() {\n return this.pqr.get('weldingProcessFillTestPiece');\n }\n\n get weldingProcessFillName() {\n let weldingProcess = this.pqr.get('weldingProcessFillTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldingProcessCap() {\n return this.pqr.get('weldingProcessCapTestPiece');\n }\n\n get weldingProcessCapName() {\n let weldingProcess = this.pqr.get('weldingProcessCapTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get pwhtTimeTestPiece() {\n return this.pqr.get('postWeldHeatTreatmentTimeTestPiece');\n }\n\n get weldingProcessRootDesignation() {\n let weldingProcess = this.pqr.get('weldingProcessRootTestPiece');\n if (!isEmpty(weldingProcess)) {\n return get(weldingProcess, 'shortDesignation');\n }\n return null;\n }\n\n get weldingProcessFillDesignation() {\n let weldingProcess = this.pqr.get('weldingProcessFillTestPiece');\n if (!isEmpty(weldingProcess)) {\n return get(weldingProcess, 'shortDesignation');\n }\n return null;\n }\n\n get weldingProcessCapDesignation() {\n let weldingProcess = this.pqr.get('weldingProcessCapTestPiece');\n if (!isEmpty(weldingProcess)) {\n return get(weldingProcess, 'shortDesignation');\n }\n return null;\n }\n\n get baseMaterial1() {\n return this.pqr.get('baseMaterial1TestPiece');\n }\n\n get baseMaterial1Thickness() {\n return this.pqr.get('baseMaterial1Thickness');\n }\n\n get baseMaterial1ThicknessApprovalRangeMinimum() {\n return this.pqr.get('baseMaterial1ThicknessMinimumApprovalRange');\n }\n\n get baseMaterial1ThicknessApprovalRangeMaximum() {\n return this.pqr.get('baseMaterial1ThicknessMaximumApprovalRange');\n }\n\n get baseMaterial2Thickness() {\n return this.pqr.get('baseMaterial2Thickness');\n }\n\n get baseMaterial2ThicknessApprovalRangeMinimum() {\n return this.pqr.get('baseMaterial2ThicknessMinimumApprovalRange');\n }\n\n get baseMaterial2ThicknessApprovalRangeMaximum() {\n return this.pqr.get('baseMaterial2ThicknessMaximumApprovalRange');\n }\n\n get baseMaterial1Diameter() {\n return this.pqr.get('baseMaterial1Diameter');\n }\n\n get baseMaterial2Diameter() {\n return this.pqr.get('baseMaterial2Diameter');\n }\n\n get baseMaterial2() {\n return this.pqr.get('baseMaterial2TestPiece');\n }\n\n get baseMaterial1GroupName() {\n let baseMaterial1 = this.pqr.get('baseMaterial1TestPiece');\n if (!isEmpty(baseMaterial1)) {\n let materialGroup = get(baseMaterial1, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n get baseMaterial2GroupName() {\n let baseMaterial2 = this.pqr.get('baseMaterial2TestPiece');\n if (!isEmpty(baseMaterial2)) {\n let materialGroup = get(baseMaterial2, 'materialGroup.groupName');\n if (!isEmpty(materialGroup)) {\n return materialGroup;\n }\n }\n return '';\n }\n\n get smallestBaseMaterialThickness() {\n let { baseMaterial1Thickness, baseMaterial2Thickness } = this;\n let smallestBaseMaterialThickness = null;\n\n if (!isNaN(baseMaterial1Thickness) && !isNaN(baseMaterial2Thickness)) {\n if (baseMaterial1Thickness < baseMaterial2Thickness) {\n smallestBaseMaterialThickness = baseMaterial1Thickness;\n } else {\n smallestBaseMaterialThickness = baseMaterial2Thickness;\n }\n } else if (!isNaN(baseMaterial1Thickness)) {\n smallestBaseMaterialThickness = baseMaterial1Thickness;\n } else {\n smallestBaseMaterialThickness = this.weldedThickness;\n }\n\n return smallestBaseMaterialThickness;\n }\n\n get interpassMinimumApprovalRange() {\n return this.pqr.get('interpassTemperatureMinimumApprovalRange');\n }\n\n get isOverlayHardFacing() {\n let overlayType = this.pqr.get('overlayType');\n return overlayType === OVERLAY_TYPE_OPTIONS.HARD_FACING;\n }\n\n get weldedThickness() {\n return this.pqr.get('thicknessTotalTestPiece');\n }\n\n weldingProcess(testPiece: WeldingProcess) {\n if (this.approvalRange) {\n return this.approvalRange.weldingProcess(testPiece);\n } else {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n }\n\n /*\n Return the Product Type approval range with the following structure:\n {\n productType: [] // Array with the product types\n restrictions: [] // Array of objects with restrictions that apply to any of the values in the `productType`key\n structure if the following:\n\n productType: null, // The product type to which this applies\n diameter: {\n unitSystem: null, // The unit system for the restriction\n value: null, // the minimum value of the diameter (inclusive)\n },\n weldingPositions: [], // welding positions (if any) that must exist\n }\n */\n productType(testPiece: string): string[] {\n return this.approvalRange.productType(testPiece);\n }\n\n weldType(weldType: WeldType) {\n return this.approvalRange.weldType(weldType);\n }\n\n weldingPosition(position: WeldingPosition, direction: string) {\n return this.approvalRange.weldingPosition(position, direction);\n }\n\n arcTransferModeRoot(transferMode: ArcTransferMode) {\n return this.approvalRange.transferMode(transferMode, this.weldingProcessRoot);\n }\n\n arcTransferModeFill(transferMode: ArcTransferMode) {\n return this.approvalRange.transferMode(transferMode, this.weldingProcessFill);\n }\n\n arcTransferModeCap(transferMode: ArcTransferMode) {\n return this.approvalRange.transferMode(transferMode, this.weldingProcessCap);\n }\n\n weldingThickness(thickness: Number) {\n return this.approvalRange.weldedThickness(thickness);\n }\n\n weldingThicknessRoot(thickness: Number) {\n return this.approvalRange.thicknessProcess(thickness, this.rootLayerType);\n }\n\n weldingThicknessFill(thickness: Number) {\n return this.approvalRange.thicknessProcess(thickness, this.fillLayerType);\n }\n\n weldingThicknessCap(thickness: Number) {\n return this.approvalRange.thicknessProcess(thickness, this.capLayerType);\n }\n\n weldingDetails(weldingDetails: WeldingDetail[]) {\n return this.approvalRange.weldingDetails(weldingDetails);\n }\n\n processMecanizationRoot(processMecanization: ProcessMecanization) {\n return this.approvalRange.processMecanization(processMecanization, this.weldingProcessRoot);\n }\n\n processMecanizationFill(processMecanization: ProcessMecanization) {\n return this.approvalRange.processMecanization(processMecanization, this.weldingProcessFill);\n }\n\n processMecanizationCap(processMecanization: ProcessMecanization) {\n return this.approvalRange.processMecanization(processMecanization, this.weldingProcessCap);\n }\n\n typeCurrentPolarity(typeCurrent: TypeCurrentPolarity) {\n return this.approvalRange.typeCurrentAndPolarity(typeCurrent);\n }\n\n preHeat(preHeat: Number) {\n return this.approvalRange.preHeat(preHeat);\n }\n\n interpass(interpass: Number) {\n return this.approvalRange.interpass(interpass);\n }\n\n postHeat(postHeat: Number) {\n return this.approvalRange.postHeat(postHeat);\n }\n\n pwhtTemperature(pwht: Number) {\n return this.approvalRange.pwhtTemperature(pwht);\n }\n\n pwhtTime(time: Number) {\n return this.approvalRange.pwhtTime(time);\n }\n\n baseMaterial(baseMaterial1: BaseMaterial, baseMaterial2: BaseMaterial) {\n return this.approvalRange.baseMaterial(baseMaterial1, baseMaterial2);\n }\n\n baseMaterialThickness(thickness1: Number, thickness2: Number) {\n return this.approvalRange.baseMaterialThickness(thickness1, thickness2);\n }\n\n branchAngle(testPiece: Number) {\n return this.approvalRange.branchAngle(testPiece);\n }\n\n fillerMaterialRootCommercialDesignation(designation: FillerMaterialCommercialDesignation) {\n return this.approvalRange.fillerMaterialRootCommercialDesignation(designation);\n }\n\n fillerMaterialFillCommercialDesignation(designation: FillerMaterialCommercialDesignation) {\n return this.approvalRange.fillerMaterialFillCommercialDesignation(designation);\n }\n\n fillerMaterialCapCommercialDesignation(designation: FillerMaterialCommercialDesignation) {\n return this.approvalRange.fillerMaterialCapCommercialDesignation(designation);\n }\n\n throatThickness(thickness: Number) {\n return this.approvalRange.throatThickness(thickness);\n }\n\n diameter(diameter: Number) {\n return this.approvalRange.diameter(diameter);\n }\n\n pjpButtWeldBaseMaterial1Thickness() {\n return this.approvalRange.pjpButtWeldBaseMaterial1Thickness();\n }\n\n pjpButtWeldBaseMaterial2Thickness() {\n return this.approvalRange.pjpButtWeldBaseMaterial2Thickness();\n }\n\n baseMaterial1FilletWeldThickness() {\n return this.approvalRange.baseMaterial1FilletWeldThickness();\n }\n\n baseMaterial2FilletWeldThickness() {\n return this.approvalRange.baseMaterial2FilletWeldThickness();\n }\n\n shielding(weldingProcessCode: string) {\n return this.approvalRange.shielding(weldingProcessCode);\n }\n}\n","import WpsValidationType from 'weldnote/src-weldnote/types/wps/wps-validation';\n\nexport default class NullWpsValidation implements WpsValidationType {\n get fillerMaterialRootInvalidMessage(): string {\n return '';\n }\n\n fillerMaterialGuideCapInvalidMessage: any;\n\n get isFillerMaterialGuideCapValid(): boolean {\n return true;\n }\n\n fillerMaterialGuideFillInvalidMessage: any;\n\n get isFillerMaterialGuideFillValid(): boolean {\n return true;\n }\n\n fillerMaterialGuideRootInvalidMessage: any;\n\n get isFillerMaterialGuideRootValid(): boolean {\n return true;\n }\n\n fillerMaterialElectrodeFormCapInvalidMessage: any;\n\n get isFillerMaterialElectrodeFormCapValid(): boolean {\n return true;\n }\n\n fillerMaterialElectrodeFormFillInvalidMessage: any;\n\n get isFillerMaterialElectrodeFormFillValid(): boolean {\n return true;\n }\n\n fillerMaterialElectrodeFormRootInvalidMessage: any;\n\n get isFillerMaterialElectrodeFormRootValid(): boolean {\n return true;\n }\n\n overlayNumberOfLayerInvalidMessage: any;\n\n get isOverlayNumberOfLayerValid(): boolean {\n return true;\n }\n\n impactTestTemperatureInvalidMessage: any;\n\n get isImpactTestTemperatureValid(): boolean {\n return true;\n }\n\n hardnessRequirementsInvalidMessage: any;\n\n get isHardnessRequirementsValid(): boolean {\n return true;\n }\n\n thicknessCapMaximumInvalidMessage: any;\n\n get isThicknessCapMaximumValid(): boolean {\n return true;\n }\n\n thicknessCapMinimumInvalidMessage: any;\n\n get isThicknessCapMinimumValid(): boolean {\n return true;\n }\n\n thicknessFillMaximumInvalidMessage: any;\n\n get isThicknessFillMaximumValid(): boolean {\n return true;\n }\n\n thicknessFillMinimumInvalidMessage: any;\n\n get isThicknessFillMinimumValid(): boolean {\n return true;\n }\n\n thicknessRootMaximumInvalidMessage: any;\n\n get isThicknessRootMaximumValid(): boolean {\n return true;\n }\n\n thicknessRootMinimumInvalidMessage: any;\n\n get isThicknessRootMinimumValid(): boolean {\n return true;\n }\n\n weldingPositionCapInvalidMessage: any;\n\n get isWeldingPositionCapValid(): boolean {\n return true;\n }\n\n weldingPositionFillInvalidMessage: any;\n\n get isWeldingPositionFillValid(): boolean {\n return true;\n }\n\n weldingPositionRootInvalidMessage: any;\n\n get isWeldingPositionRootValid(): boolean {\n return true;\n }\n\n weldingPositionCapDirectionInvalidMessage: any;\n\n get isWeldingPositionCapDirectionValid(): boolean {\n return true;\n }\n\n weldingPositionFillDirectionInvalidMessage: any;\n\n get isWeldingPositionFillDirectionValid(): boolean {\n return true;\n }\n\n weldingPositionRootDirectionInvalidMessage: any;\n\n get isWeldingPositionRootDirectionValid(): boolean {\n return true;\n }\n\n backingFluxCommercialDesignationInvalidMessage: any;\n\n get isBackingFluxCommercialDesignationValid(): boolean {\n return true;\n }\n\n shieldingCapFluxCommercialDesignationInvalidMessage: any;\n\n get isShieldingCapFluxCommercialDesignationValid(): boolean {\n return true;\n }\n\n shieldingFillFluxCommercialDesignationInvalidMessage: any;\n\n get isShieldingFillFluxCommercialDesignationValid(): boolean {\n return true;\n }\n\n shieldingRootFluxCommercialDesignationInvalidMessage: any;\n\n get isShieldingRootFluxCommercialDesignationValid(): boolean {\n return true;\n }\n\n backingFluxInvalidMessage: any;\n\n get isBackingFluxValid(): boolean {\n return true;\n }\n\n shieldingCapFluxInvalidMessage: any;\n\n get isShieldingCapFluxValid(): boolean {\n return true;\n }\n\n shieldingFillFluxInvalidMessage: any;\n\n get isShieldingFillFluxValid(): boolean {\n return true;\n }\n\n shieldingRootFluxInvalidMessage: any;\n\n get isShieldingRootFluxValid(): boolean {\n return true;\n }\n\n backingGasInvalidMessage: any;\n\n get isBackingGasValid(): boolean {\n return true;\n }\n\n shieldingCapGasInvalidMessage: any;\n\n get isShieldingCapGasValid(): boolean {\n return true;\n }\n\n shieldingFillGasInvalidMessage: any;\n\n get isShieldingFillGasValid(): boolean {\n return true;\n }\n\n shieldingRootGasInvalidMessage: any;\n\n get isShieldingRootGasValid(): boolean {\n return true;\n }\n\n backingInvalidMessage: any;\n\n get isBackingValid(): boolean {\n return true;\n }\n\n shieldingCapInvalidMessageForProcess: any;\n\n get isShieldingCapValidForProcess(): boolean {\n return true;\n }\n\n shieldingCapInvalidMessage: any;\n\n get isShieldingCapValid(): boolean {\n return true;\n }\n\n shieldingFillInvalidMessageForProcess: any;\n\n get isShieldingFillValidForProcess(): boolean {\n return true;\n }\n\n shieldingFillInvalidMessage: any;\n\n get isShieldingFillValid(): boolean {\n return true;\n }\n\n shieldingRootInvalidMessageForProcess: any;\n\n get isShieldingRootValidForProcess(): boolean {\n return true;\n }\n\n shieldingRootInvalidMessage: any;\n\n get isShieldingRootValid(): boolean {\n return true;\n }\n\n fillerMaterialCapCommercialDesignationInvalidMessage: any;\n\n get isFillerMaterialCapCommercialDesignationValid(): boolean {\n return true;\n }\n\n fillerMaterialFillCommercialDesignationInvalidMessage: any;\n\n get isFillerMaterialFillCommercialDesignationValid(): boolean {\n return true;\n }\n\n fillerMaterialRootCommercialDesignationInvalidMessage: any;\n\n get isFillerMaterialRootCommercialDesignationValid(): boolean {\n return true;\n }\n\n fillerMaterialCapAWSInvalidMessage: any;\n\n get isFillerMaterialCapAWSValid(): boolean {\n return true;\n }\n\n fillerMaterialCapInvalidMessage: any;\n\n get isFillerMaterialCapValid(): boolean {\n return true;\n }\n\n fillerMaterialFillAWSInvalidMessage: any;\n\n get isFillerMaterialFillAWSValid(): boolean {\n return true;\n }\n\n fillerMaterialFillInvalidMessage: any;\n\n get isFillerMaterialFillValid(): boolean {\n return true;\n }\n\n fillerMaterialRootAWSInvalidMessage: any;\n\n get isFillerMaterialRootAWSValid(): boolean {\n return true;\n }\n\n get isFillerMaterialRootValid(): boolean {\n return true;\n }\n\n productTypeInvalidMessage: any;\n\n get isProductTypeValid(): boolean {\n return true;\n }\n\n overlayTypeInvalidMessage: any;\n\n get isOverlayTypeValid(): boolean {\n return true;\n }\n\n baseMaterial2InvalidMessage: any;\n\n get isBaseMaterial2Valid(): boolean {\n return true;\n }\n\n baseMaterial1InvalidMessage: any;\n\n get isBaseMaterial1Valid(): boolean {\n return true;\n }\n\n weldTypeInvalidMessage: any;\n\n get isWeldTypeValid(): boolean {\n return true;\n }\n\n arcTransferModeCapInvalidMessage: any;\n\n get isArcTransferModeCapValid(): boolean {\n return true;\n }\n\n arcTransferModeFillInvalidMessage: any;\n\n get isArcTransferModeFillValid(): boolean {\n return true;\n }\n\n arcTransferModeRootInvalidMessage: any;\n\n get isArcTransferModeRootValid(): boolean {\n return true;\n }\n\n typeCurrentCapInvalidMessage: any;\n\n get isTypeCurrentCapValid(): boolean {\n return true;\n }\n\n typeCurrentFillInvalidMessage: any;\n\n get isTypeCurrentFillValid(): boolean {\n return true;\n }\n\n typeCurrentRootInvalidMessage: any;\n\n get isTypeCurrentRootValid(): boolean {\n return true;\n }\n\n processMecanizationCapInvalidMessage: any;\n\n get isProcessMecanizationCapValid(): boolean {\n return true;\n }\n\n processMecanizationFillInvalidMessage: any;\n\n get isProcessMecanizationFillValid(): boolean {\n return true;\n }\n\n processMecanizationRootInvalidMessage: any;\n\n get isProcessMecanizationRootValid(): boolean {\n return true;\n }\n\n weldingDetailsInvalidMessage: any;\n\n get isWeldingDetailsValid(): boolean {\n return true;\n }\n\n weldingProcessCapInvalidMessage: any;\n\n get isWeldingProcessCapValid(): boolean {\n return true;\n }\n\n weldingProcessFillInvalidMessage: any;\n\n get isWeldingProcessFillValid(): boolean {\n return true;\n }\n\n weldingProcessRootInvalidMessage: any;\n\n get isWeldingProcessRootValid(): boolean {\n return true;\n }\n\n postHeatTimeMaximumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPostHeatTimeMaximumPresenceValid(_value: any): boolean{\n return true;\n }\n\n postHeatTimeMinimumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPostHeatTimeMinimumPresenceValid(_value: any): boolean{\n return true;\n }\n\n postHeatTimeInvalidMessage(_value: any): string {\n return '';\n }\n\n isPostHeatTimeValid(_value: any): boolean{\n return true;\n }\n\n baseMaterial2ThicknessInvalidMessage(_value: any): string {\n return '';\n }\n\n isBaseMaterial2ThicknessValid(_bm2: number): boolean{\n return true;\n }\n\n baseMaterial1ThicknessInvalidMessage(_value: any): string {\n return '';\n }\n\n isBaseMaterial1ThicknessValid(_bm1: number): boolean{\n return true;\n }\n\n numberOfElectrodesCapInvalidMessage: any;\n\n get isNumberElectrodesCapValid(): boolean {\n return true;\n }\n\n numberOfElectrodesFillInvalidMessage: any;\n\n get isNumberElectrodesFillValid(): boolean {\n return true;\n }\n\n gasNozzleDiameterCapInvalidMessage: any;\n\n get isGasNozzleDiameterCapValid(): boolean {\n return true;\n }\n\n gasNozzleDiameterFillInvalidMessage: any;\n\n get isGasNozzleDiameterFillValid(): boolean {\n return true;\n }\n\n gasNozzleDiameterRootInvalidMessage: any;\n\n get isGasNozzleDiameterRootValid(): boolean {\n return true;\n }\n\n postHeatMaximumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPostHeatMaximumPresenceValid(_value: any): boolean{\n return true;\n }\n\n postHeatMinimumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPostHeatMinimumPresenceValid(_value: any): boolean{\n return true;\n }\n\n postHeatTemperatureInvalidMessage(_value: any): string {\n return '';\n }\n\n isPostHeatTemperatureValid(_value: any): boolean{\n return true;\n }\n\n interpassTemperatureMaximumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isInterpassTemperatureMaximumPresenceValid(_value: any): boolean{\n return true;\n }\n\n interpassTemperatureMinimumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isInterpassTemperatureMinimumPresenceValid(_value: any): boolean{\n return true;\n }\n\n interpassTemperatureInvalidMessage(_value: any): string {\n return '';\n }\n\n isInterpassTemperatureValid(_value: any): boolean{\n return true;\n }\n\n preheatMaximumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPreheatMaximumPresenceValid(_value: any): boolean{\n return true;\n }\n\n preheatMinimumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPreheatMinimumPresenceValid(_value: any): boolean{\n return true;\n }\n\n preheatTemperatureInvalidMessage(_value: any): string {\n return '';\n }\n\n isPreheatTemperatureValid(_value: any): boolean{\n return true;\n }\n\n pWHTMaximumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPWHTMaximumPresenceValid(_value: any): boolean{\n return true;\n }\n\n pWHTMinimumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPWHTMinimumPresenceValid(_value: any): boolean{\n return true;\n }\n\n pwthTemperatureInvalidMessage(_value: any): string {\n return '';\n }\n\n isPwhtTemperatureValid(_value: any): boolean{\n return true;\n }\n\n branchAngleInvalidMessage(_value: any): string {\n return '';\n }\n\n isBranchAngleValid(_value: any): boolean{\n return true;\n }\n\n pWHTTimeMaximumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPWHTTimeMaximumPresenceValid(_value: any): boolean{\n return true;\n }\n\n pWHTTimeMinimumPresenceInvalidMessage(_value: any): string {\n return '';\n }\n\n isPWHTTimeMinimumPresenceValid(_value: any): boolean{\n return true;\n }\n\n pwthTimeInvalidMessage(_value: any): string {\n return '';\n }\n\n isPwhtTimeValid(_value: any): boolean{\n return true;\n }\n\n numberOfElectrodesRootInvalidMessage: any;\n\n get isNumberElectrodesRootValid(): boolean {\n return true;\n }\n\n fillerMaterialDiameterCapInvalidMessage: any;\n\n get isFillerMaterialDiameterCapValid(): boolean {\n return true;\n }\n\n fillerMaterialDiameterFillInvalidMessage: any;\n\n get isFillerMaterialDiameterFillValid(): boolean {\n return true;\n }\n\n fillerMaterialDiameterRootInvalidMessage: any;\n\n get isFillerMaterialDiameterRootValid(): boolean {\n return true;\n }\n\n get thicknessTotalMinimumInvalidMessage(): string {\n return '';\n }\n\n get isThicknessTotalMinimumValid(): boolean {\n return true;\n }\n\n get diameterForPipeInvalidMessage(): string {\n return '';\n }\n\n isDiameterValidForPipe(_value: any): boolean{\n return false;\n }\n\n diameterInvalidMessage(_value: any): string {\n return '';\n }\n\n isDiameterValid(_value: any): boolean{\n return false;\n }\n\n get thicknessTotalMaximumInvalidMessage(): string {\n return '';\n }\n\n get isThicknessTotalMaximumValid(): boolean{\n return false;\n }\n}\n","export function localStorageSet(key: string, item: any) {\n window.localStorage.setItem(key, JSON.stringify(item));\n}\n\nexport function localStorageGet(key: string): JSON | null {\n let item = window.localStorage.getItem(key);\n if (!item) return null;\n return JSON.parse(item);\n}\n","import { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport { get, set } from '@ember/object';\n\nexport default class ModelSetter {\n model = null;\n\n constructor(model) {\n this.model = model;\n }\n\n getModelValue(attribute) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n return get(this, `model.${attribute}`);\n }\n\n setModelValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n set(this, `model.${attribute}`, value);\n }\n\n setModelDecimalValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let separator = get(this, 'userSession.decimalSeparator');\n if (separator === ',') {\n if (!isEmpty(value)) {\n value = `${value}`.replace(',', '.');\n }\n }\n set(this, `model.${attribute}`, value);\n }\n\n setModelCollection(attribute, values) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = get(this, `model.${attribute}`);\n collection.clear();\n if (!isEmpty(values)) {\n values.forEach((value) => {\n collection.pushObject(value);\n });\n }\n }\n\n setModelCollectionValue(attribute, value) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n get(this, `model.${attribute}`).clear();\n if (!isEmpty(value)) {\n get(this, `model.${attribute}`).pushObject(value);\n }\n }\n\n clearModelCollection(attribute) {\n assert(`Must pass a valid attribute - ${attribute}`, !isEmpty(attribute));\n let collection = get(this, `model.${attribute}`);\n collection.clear();\n }\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport WeldingProcess from 'weldnote/models/welding-process';\n\nexport function calculateProcessLabels(\n process1: WeldingProcess | null = null,\n process2: WeldingProcess | null = null,\n process3: WeldingProcess | null = null\n): {\n process1: string;\n process2: string;\n process3: string;\n} {\n let process1Name = process1 && !isEmpty(process1) ? get(process1, 'shortDesignation') : '';\n let process2Name = process2 && !isEmpty(process2) ? get(process2, 'shortDesignation') : '';\n let process3Name = process3 && !isEmpty(process3) ? get(process3, 'shortDesignation') : '';\n if (!isEmpty(process1Name) && !isEmpty(process2Name) && !isEmpty(process3Name)) {\n if (process1Name === process2Name && process2Name === process3Name) {\n return {\n process1: `${process1Name} #1`,\n process2: `${process2Name} #2`,\n process3: `${process3Name} #3`,\n };\n } else if (process1Name === process2Name) {\n return {\n process1: `${process1Name} #1`,\n process2: `${process2Name} #2`,\n process3: process3Name,\n };\n } else if (process2Name === process3Name) {\n return {\n process1: process1Name,\n process2: `${process2Name} #1`,\n process3: `${process3Name} #2`,\n };\n } else {\n return {\n process1: process1Name,\n process2: process2Name,\n process3: process3Name,\n };\n }\n }\n if (!isEmpty(process1Name) && !isEmpty(process2Name)) {\n if (process1Name === process2Name) {\n return {\n process1: `${process1Name} #1`,\n process2: `${process2Name} #2`,\n process3: '',\n };\n } else {\n return {\n process1: process1Name,\n process2: process2Name,\n process3: '',\n };\n }\n }\n if (!isEmpty(process1Name)) {\n return {\n process1: process1Name,\n process2: '',\n process3: '',\n };\n }\n return {\n process1: '',\n process2: '',\n process3: '',\n };\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\n\nconst { ARC_TRANSFER_MODES } = Constants;\n\nexport function isGlobular(transferMode: ArcTransferMode): boolean {\n return (\n !isEmpty(transferMode) && get(transferMode, 'transferMode') === ARC_TRANSFER_MODES.GLOBULAR\n );\n}\n\nexport function isShortArc(transferMode: ArcTransferMode): boolean {\n return (\n !isEmpty(transferMode) && get(transferMode, 'transferMode') === ARC_TRANSFER_MODES.SHORT_ARC\n );\n}\n\nexport function isPulsedSpray(transferMode: ArcTransferMode): boolean {\n return (\n !isEmpty(transferMode) && get(transferMode, 'transferMode') === ARC_TRANSFER_MODES.PULSED_SPRAY\n );\n}\n\nexport function isSpray(transferMode: ArcTransferMode): boolean {\n return !isEmpty(transferMode) && get(transferMode, 'transferMode') === ARC_TRANSFER_MODES.SPRAY;\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport CertificateFillerRules from 'weldnote/utils/certificate-filler-material-rules-asme';\nimport {\n isButtWeld,\n isOverlayWeld,\n isFilletWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport moment from 'moment';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport { NumericalRange, WelderCertificateApprovalRange } from './wopq-range-interface';\nimport WeldType from 'weldnote/models/weld-type';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport { isGMAW } from 'weldnote/utils/rules/welding-process';\nimport {\n AutomaticJointTracking,\n AutomaticArcVoltageControl,\n TestPieceValuesSingleProcess,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from '../types';\n\nconst { UNIT_SYSTEM, WELDING_DETAILS, PRODUCT_TYPE } = Constants;\n\nexport default class WeldingOperatorAsmeIxApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private unitSystem: string;\n\n private allElectrodes: ElectrodeType[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private allBaseMaterials: BaseMaterialGroup[];\n\n private allTransferModes: ArcTransferMode[];\n\n private allWeldingPositions: WeldingPosition[];\n\n private allFillerMaterials: FillerMaterialGroup[];\n\n private allWeldTypes: WeldType[];\n\n private allWeldingProcesses: WeldingProcess[];\n\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n this.unitSystem = unitSystem;\n this.allElectrodes = data.allElectrodes;\n this.allWeldingDetails = data.allWeldingDetails;\n this.allWeldingProcesses = data.allWeldingProcesses.filter(\n (process: WeldingProcess) =>\n this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n this.allBaseMaterials = data.allBaseMaterials.filter((material: BaseMaterialGroup) => {\n this.getIndustryCode(get(material, 'code')) === this.industryCodeId;\n });\n this.allTransferModes = data.allTransferModes.filter(\n (transferMode: ArcTransferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n this.allWeldingPositions = data.allWeldingPositions.filter(\n (position: WeldingPosition) =>\n this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n this.allFillerMaterials = data.allFillerMaterials.filter(\n (material: FillerMaterialGroup) =>\n this.getIndustryCode(get(material, 'code')) === this.industryCodeId\n );\n this.allWeldTypes = data.allWeldTypes.filter((weldType: WeldType) => {\n return this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId;\n });\n }\n\n processMecanization(testPiece: ProcessMecanization): ProcessMecanization[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n if (testPiece.isAutomatic) {\n return [testPiece];\n }\n if (testPiece.isMechanized) {\n return [testPiece];\n }\n return [];\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get diameterValue() {\n return this.certificate.get('diameterTestPiece');\n }\n\n get weldingProcessRootName() {\n let weldingProcess = this.certificate.get('weldingProcessRootTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldingProcessFillName() {\n let weldingProcess = this.certificate.get('weldingProcessFillTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldingProcessCapName() {\n let weldingProcess = this.certificate.get('weldingProcessCapTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get weldTypeCode() {\n let weldType = this.certificate.get('weldTypeTestPiece');\n if (!isEmpty(weldType)) {\n return weldType.weldType;\n }\n return '';\n }\n\n get supplementaryFilletWeldTestRequired() {\n return this.certificate.get('supplementaryFilletWeldTestRequired');\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n electrodeTypeRoot(\n electrode: ElectrodeType,\n processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeType(electrode, processValues);\n }\n\n electrodeTypeFill(\n electrode: ElectrodeType,\n processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeType(electrode, processValues);\n }\n\n electrodeTypeCap(\n electrode: ElectrodeType,\n processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeType(electrode, processValues);\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n if (isEmpty(electrode)) {\n return [];\n }\n let { shortDesignation } = electrode;\n return this._filterElectrodeTypes([shortDesignation]);\n }\n\n _filterElectrodeTypes(electrodeCodes: string[]): ElectrodeType[] {\n let results: ElectrodeType[] = [];\n electrodeCodes.forEach((designation) => {\n let candidate = this.allElectrodes.findBy('shortDesignation', designation);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n get _allRange(): NumericalRange {\n return {\n min: 0,\n max: null,\n };\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isButtWeld() {\n return isButtWeld(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n get isPartialPenetrationButtWeld() {\n return isPartialPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n thickness(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n return this._allRange;\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n return this.allWeldTypes;\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n return this.allTransferModes;\n }\n\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results: WeldingDetail[] = [];\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_LAYER)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.MULTI_LAYER ||\n shortDesignation === WELDING_DETAILS.SINGLE_LAYER\n );\n })\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.MULTI_LAYER)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.MULTI_LAYER ||\n shortDesignation === WELDING_DETAILS.SINGLE_LAYER\n );\n })\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n\n // Consumable Insert is always qualified\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return shortDesignation === WELDING_DETAILS.CONSUMABLE_INSERT;\n })\n );\n\n return results;\n }\n\n _filterBaseMaterials(wanted: string[]) {\n let results: BaseMaterialGroup[] = [];\n wanted.forEach((position) => {\n let candidate = this.allBaseMaterials.findBy('groupName', position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.allBaseMaterials;\n }\n\n _filterProcessByName(processes: string[]) {\n let result: WeldingProcess[] = [];\n processes.forEach((processName) => {\n let process = this.allWeldingProcesses.findBy('shortDesignation', processName);\n if (process) {\n result.pushObject(process);\n }\n });\n return result;\n }\n\n _calculateWeldingProcess(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n let result: WeldingProcess[] = [];\n if (isGMAW(process)) {\n result = this._filterProcessByName(['GMAW', 'FCAW']);\n }\n\n if (isEmpty(result)) {\n result = [process];\n }\n return result;\n }\n\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n shielding(process: WeldingProcess) {\n if (isEmpty(process)) {\n return null;\n }\n\n return calculateShielding(process.shortDesignation);\n }\n\n diameter(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n return this._allRange;\n }\n\n _filterPositions(positions: string[]) {\n return this.allWeldingPositions.filter((position: WeldingPosition) => {\n let { code } = position;\n if (code) {\n return positions.indexOf(code) >= 0;\n } else {\n return false;\n }\n });\n }\n\n weldingPosition(\n testPiece: WeldingPosition,\n processValues: TestPieceValuesSingleProcess\n ): WeldingPosition[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results = [];\n\n let weldingPosition = testPiece.code;\n if (!weldingPosition) {\n return [];\n }\n\n if (processValues.processMecanization.isPresent()) {\n if (processValues.processMecanization.get().isAutomatic) {\n return this.allWeldingPositions.filter((position: WeldingPosition) => !position.isMultiple);\n } else if (processValues.processMecanization.get().isMechanized) {\n if (weldingPosition === '1G') {\n results = this._filterPositions(['1G', '1F']);\n } else if (weldingPosition === '2G') {\n results = this._filterPositions(['1G', '2G', '1F', '2F']);\n } else if (weldingPosition === '2G+3G+4G') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '3G') {\n results = this._filterPositions(['1G', '3G', '1F', '2F', '3F']);\n } else if (weldingPosition === '4G') {\n results = this._filterPositions(['1G', '4G', '1F', '2F', '4F']);\n } else if (weldingPosition === '3G+4G') {\n results = this._filterPositions(['1G', '3G', '4G', '1F', '2F', '3F', '4F', '5F']);\n } else if (weldingPosition === '5G') {\n results = this._filterPositions(['1G', '3G', '4G', '5G', '1F', '2F', '3F', '4F', '5F']);\n } else if (weldingPosition === '5G+2G') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6G') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6GR') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '1F') {\n results = this._filterPositions(['1F']);\n } else if (weldingPosition === '2F') {\n results = this._filterPositions(['1F', '2F']);\n } else if (weldingPosition === '3F') {\n results = this._filterPositions(['1F', '2F', '3F']);\n } else if (weldingPosition === '4F') {\n results = this._filterPositions(['1F', '2F', '4F']);\n } else if (weldingPosition === '3F+4F') {\n results = this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else if (weldingPosition === '5F') {\n results = this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else {\n results = this._filterPositions([weldingPosition]);\n }\n return results;\n }\n }\n\n return [];\n }\n\n _filterFillerMaterialGroups(groupToSelect: string[]) {\n let results: FillerMaterialGroup[] = [];\n groupToSelect.forEach((groupCode) => {\n let candidate = this.allFillerMaterials.findBy('groupName', groupCode);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n let group: FillerMaterialGroup = get(testPiece, 'group');\n let groupCode: string = '';\n if (group) {\n groupCode = get(group, 'groupName') || '';\n }\n\n let results: FillerMaterialGroup[] = [];\n if (CertificateFillerRules.isFillerMaterialGroup1(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroup2(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial2Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroup3(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial2Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial3Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroup4(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial2Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial3Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial4Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroup5(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial5Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroup6(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial6Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroupRange30to40(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial30to40Groups())\n );\n } else if (CertificateFillerRules.isFillerMaterialGroup50(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial50Groups())\n );\n } else {\n results.pushObjects(this._filterFillerMaterialGroups([groupCode]));\n }\n return results;\n }\n\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n return null;\n }\n\n automaticJointTracking(\n testPiece: AutomaticJointTracking | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n if (process.processMecanization.isPresent()) {\n let processMecanization = process.processMecanization.get();\n if (processMecanization.isAutomatic) {\n return [];\n } else if (processMecanization.isMechanized) {\n if (testPiece === AutomaticJointTracking.WITH) {\n return [AutomaticJointTracking.WITH];\n } else if (testPiece === AutomaticJointTracking.WITHOUT) {\n return [AutomaticJointTracking.WITH, AutomaticJointTracking.WITHOUT];\n }\n }\n }\n return [];\n }\n\n automaticVoltageControl(\n testPiece: AutomaticArcVoltageControl | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n if (process.processMecanization.isPresent()) {\n let processMecanization = process.processMecanization.get();\n if (processMecanization.isAutomatic) {\n return [];\n } else if (processMecanization.isMechanized) {\n if (testPiece === AutomaticArcVoltageControl.WITH) {\n return [AutomaticArcVoltageControl.WITH];\n } else if (testPiece === AutomaticArcVoltageControl.WITHOUT) {\n return [AutomaticArcVoltageControl.WITH, AutomaticArcVoltageControl.WITHOUT];\n }\n }\n }\n return [];\n }\n\n visualControl(\n testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n if (!testPiece) {\n return [];\n }\n if (testPiece === VisualControl.DIRECT) {\n return [VisualControl.DIRECT];\n } else if (testPiece === VisualControl.REMOTE) {\n return [VisualControl.REMOTE];\n }\n return [];\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return [];\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport moment from 'moment';\nimport { isGMAW } from 'weldnote/utils/rules/welding-process';\nimport {\n isFilletWeld,\n isButtWeld,\n isOverlayWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldType from 'weldnote/models/weld-type';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport { NumericalRange, WelderCertificateApprovalRange } from './wopq-range-interface';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n isAutomaticMecanization,\n isMechanizedMecanization,\n} from 'weldnote/utils/rules/process-mecanization';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from '../types';\nimport {\n isSingleSideNoBacking,\n isSingleSideMaterialBacking,\n isSingleSideGasBacking,\n} from 'weldnote/utils/rules/welding-detail';\n\nconst { PRODUCT_TYPE, UNIT_SYSTEM, WELDING_DETAILS } = Constants;\n\nexport default class AwsB21ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem: string) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this.allWeldingDetails = data.allWeldingDetails;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.unitSystem = unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS B2.1 Approval Ranges');\n }\n }\n\n processMecanization(testPiece: ProcessMecanization): ProcessMecanization[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n if (isAutomaticMecanization(testPiece)) {\n return [testPiece];\n }\n if (isMechanizedMecanization(testPiece)) {\n return [testPiece];\n }\n return [];\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeTypeRoot(electrode);\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n _findWeldingPositions(codes: string[] = []): WeldingPosition[] {\n let results: WeldingPosition[] = [];\n codes.forEach((position) => {\n let foundPosition = this.allWeldingPositions.findBy('code', position);\n if (foundPosition) {\n results.push(foundPosition);\n }\n });\n return results;\n }\n\n weldingPosition(position: WeldingPosition): WeldingPosition[] {\n if (isEmpty(position)) {\n return [];\n }\n let { code } = position;\n if (!code) {\n return [];\n }\n let result = [code];\n if (this.isPlate) {\n if (code === '1G') {\n result = ['1G', '1F'];\n } else if (code === '2G') {\n result = ['1G', '1F', '2G', '2F'];\n } else if (code === '3G') {\n result = ['1G', '3G', '1F', '2F', '3F'];\n } else if (code === '4G') {\n result = ['1G', '4G', '1F', '2F', '4F'];\n } else if (code === '3G+4G') {\n result = ['1G', '3G', '4G', '1F', '2F', '3F', '4F'];\n } else if (code === '2G+3G+4G') {\n result = ['1G', '2G', '3G', '4G', '5G', '6G', '1F', '2F', '3F', '4F', '5F'];\n } else if (code === '1F') {\n result = ['1F'];\n } else if (code === '2F') {\n result = ['1F', '2F'];\n } else if (code === '3F') {\n result = ['1F', '2F', '3F'];\n } else if (code === '4F') {\n result = ['1F', '2F', '4F'];\n } else if (code === '3F+4F') {\n result = ['1F', '2F', '3F', '4F', '5F'];\n } else {\n result = [code];\n }\n } else if (this.isPipe || this.isPipePlate) {\n if (code === '1G') {\n result = ['1G', '1F', '2F'];\n } else if (code === '2G') {\n result = ['1G', '1F', '2G', '2F'];\n } else if (code === '3G') {\n result = ['1G', '3G', '1F', '2F', '3F'];\n } else if (code === '4G') {\n result = ['1G', '4G', '1F', '2F', '4F'];\n } else if (code === '5G') {\n result = ['1G', '3G', '4G', '5G', '1F', '2F', '3F', '4F', '5F'];\n } else if (code === '6G') {\n result = ['1G', '2G', '3G', '4G', '5G', '6G', '1F', '2F', '3F', '4F', '5F'];\n } else if (code === '1F') {\n result = ['1F'];\n } else if (code === '2F') {\n result = ['1F', '2F'];\n } else if (code === '3F') {\n result = ['1F', '2F', '3F'];\n } else if (code === '4F') {\n result = ['1F', '2F', '4F'];\n } else if (code === '5F') {\n result = ['1F', '2F', '3F', '4F', '5F'];\n } else {\n result = [code];\n }\n }\n\n return this._findWeldingPositions(result);\n }\n\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n return null;\n }\n\n _filterProcessByName(processes: string[]) {\n let result: WeldingProcess[] = [];\n processes.forEach((processName) => {\n let process = this.allWeldingProcesses.findBy('shortDesignation', processName);\n if (process) {\n result.pushObject(process);\n }\n });\n return result;\n }\n\n _calculateWeldingProcess(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n let result: WeldingProcess[] = [];\n if (isGMAW(process)) {\n result = this._filterProcessByName(['GMAW', 'FCAW']);\n }\n\n if (isEmpty(result)) {\n result = [process];\n }\n return result;\n }\n\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n _findWeldingDetails(details: string[] = []) {\n let results: WeldingDetail[] = [];\n details.forEach((detail) => {\n let detailInstance = this.allWeldingDetails.findBy('shortDesignation', detail);\n if (detailInstance) {\n results.pushObject(detailInstance);\n }\n });\n return results;\n }\n\n weldingDetails(details: WeldingDetail[]): WeldingDetail[] {\n let result: WeldingDetail[] = [];\n if (isSingleSideNoBacking(details)) {\n result.pushObjects(\n this._findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n } else if (isSingleSideGasBacking(details)) {\n result.pushObjects(\n this._findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n } else if (isSingleSideMaterialBacking(details)) {\n result.pushObjects(this._findWeldingDetails([WELDING_DETAILS.BOTH_SIDES]));\n }\n\n details.forEach((position) => {\n result.pushObject(position);\n });\n\n return result;\n }\n\n _toRange(min: number, max: number | null): NumericalRange {\n return {\n min,\n max,\n };\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n get _fullRange(): NumericalRange {\n return {\n min: 0,\n max: null,\n };\n }\n\n diameter(testPiece: number): NumericalRange {\n if (!testPiece) {\n return this._emptyRange;\n }\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._fullRange;\n }\n\n get isButtWeldOrPartialPenetrationWeld() {\n return (\n isButtWeld(this.weldTypeTestPiece) || isPartialPenetrationButtWeld(this.weldTypeTestPiece)\n );\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n thickness(testPiece: number): NumericalRange {\n if (!testPiece) {\n return this._emptyRange;\n }\n\n return this._fullRange;\n }\n\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n\n let materialGroup = get(testPiece, 'materialGroup');\n let groupNumber = '';\n if (materialGroup) {\n groupNumber = get(materialGroup, 'groupNumber') || '';\n }\n let groups1 = [\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '10',\n '11',\n '34',\n '41',\n '42',\n '43',\n '44',\n '45',\n '46',\n '47',\n ];\n if (groups1.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups1.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups2 = ['21', '22', '23', '24', '25', '26', '27'];\n if (groups2.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups2.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups3 = ['31', '32', '33', '35'];\n if (groups3.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n return get(material, 'groupNumber') === groupNumber;\n });\n }\n\n let groups4 = ['34', '42'];\n if (groups4.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return ['34', '41', '42', '43', '44', '45', '46', '47'].includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups5 = ['51', '52', '53', '54', '61', '62'];\n if (groups5.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups5.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups6 = ['81', '83'];\n if (groups6.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups6.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n // TP = AR\n return this.allBaseMaterials.filter((material) => get(material, 'groupNumber') === groupNumber);\n }\n\n parseGroupNumber(number: string | undefined): number {\n if (isEmpty(number)) {\n return NaN;\n }\n if (!number) {\n return NaN;\n }\n let result = parseInt(number, 10);\n if (!isNaN(result)) {\n return result;\n }\n let match = number.match(/\\d+/g);\n if (match && !isEmpty(match)) {\n let [numericValue] = match;\n return parseInt(numericValue);\n }\n return NaN;\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n\n let group = get(testPiece, 'group');\n let groupNumber = this.parseGroupNumber(get(group, 'groupNumber'));\n if (isNaN(groupNumber)) {\n return [get(testPiece, 'group')];\n }\n\n if (groupNumber >= 1 && groupNumber <= 5) {\n return this.allFillerMaterials.filter((m) => {\n return this.parseGroupNumber(m.groupNumber) <= groupNumber;\n });\n }\n\n if (groupNumber === 6) {\n return this.allFillerMaterials.filter((m) => {\n return this.parseGroupNumber(m.groupNumber) === 6;\n });\n }\n\n if (groupNumber >= 20 && groupNumber <= 29) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber >= 20 && currentGroupNumber <= 29;\n });\n }\n\n if (groupNumber >= 30 && groupNumber <= 39) {\n return [group];\n }\n\n if (groupNumber >= 40 && groupNumber <= 49) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return (\n (currentGroupNumber >= 1 && currentGroupNumber <= 5) ||\n (currentGroupNumber >= 40 && currentGroupNumber <= 49)\n );\n });\n }\n\n if (groupNumber >= 50 && groupNumber <= 59) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber >= 50 && currentGroupNumber <= 59;\n });\n }\n\n if (groupNumber === 61) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber === 61;\n });\n }\n\n if (groupNumber === 71) {\n return [group];\n }\n\n if (groupNumber === 91) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber === 91;\n });\n }\n\n return [group];\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n if (isButtWeld(testPiece)) {\n return this.allWeldTypes.filter(\n (weldType) =>\n isPartialPenetrationButtWeld(weldType) || isFilletWeld(weldType) || isButtWeld(weldType)\n );\n } else if (isFilletWeld(testPiece)) {\n return [testPiece];\n } else if (isOverlayWeld(testPiece)) {\n return [testPiece];\n } else if (isPartialPenetrationButtWeld(testPiece)) {\n return this.allWeldTypes.filter(\n (weldType) => isFilletWeld(weldType) || isPartialPenetrationButtWeld(weldType)\n );\n }\n return [testPiece];\n }\n\n shielding(testPiece: WeldingProcess): string | null {\n if (testPiece) {\n let designation = get(testPiece, 'shortDesignation');\n return calculateShielding(designation);\n } else {\n return null;\n }\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (!testPiece) {\n return [];\n }\n\n if (testPiece.isShortArc) {\n return [testPiece];\n }\n\n if (testPiece.isGlobular || testPiece.isSpray || testPiece.isPulsedSpray) {\n return this.allTransferModes.filter((t) => t.isSpray || t.isGlobular || t.isPulsedSpray);\n }\n\n return [testPiece];\n }\n\n electrodeTypeRoot(testPiece: ElectrodeType): ElectrodeType[] {\n if (!testPiece) {\n return [];\n }\n return [testPiece];\n }\n\n electrodeTypeFill(testPiece: ElectrodeType): ElectrodeType[] {\n if (!testPiece) {\n return [];\n }\n return [testPiece];\n }\n\n electrodeTypeCap(testPiece: ElectrodeType): ElectrodeType[] {\n if (!testPiece) {\n return [];\n }\n return [testPiece];\n }\n\n automaticJointTracking(\n testPiece: AutomaticJointTracking | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n if (process.processMecanization.isPresent()) {\n let processMecanization = process.processMecanization.get();\n if (processMecanization.isAutomatic) {\n return [];\n } else if (processMecanization.isMechanized) {\n if (testPiece === AutomaticJointTracking.WITH) {\n return [AutomaticJointTracking.WITH];\n } else if (testPiece === AutomaticJointTracking.WITHOUT) {\n return [AutomaticJointTracking.WITH, AutomaticJointTracking.WITHOUT];\n }\n }\n }\n return [];\n }\n\n automaticVoltageControl(\n testPiece: AutomaticArcVoltageControl | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n if (process.processMecanization.isPresent()) {\n let processMecanization = process.processMecanization.get();\n if (processMecanization.isAutomatic) {\n return [];\n } else if (processMecanization.isMechanized) {\n if (testPiece === AutomaticArcVoltageControl.WITH) {\n return [AutomaticArcVoltageControl.WITH];\n } else if (testPiece === AutomaticArcVoltageControl.WITHOUT) {\n return [AutomaticArcVoltageControl.WITH, AutomaticArcVoltageControl.WITHOUT];\n }\n }\n }\n return [];\n }\n\n visualControl(\n testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n if (!testPiece) {\n return [];\n }\n if (testPiece === VisualControl.DIRECT) {\n return [VisualControl.DIRECT];\n } else if (testPiece === VisualControl.REMOTE) {\n return [VisualControl.REMOTE];\n }\n return [];\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return [];\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport WeldType from 'weldnote/models/weld-type';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isAutomaticMecanization,\n isMechanizedMecanization,\n} from 'weldnote/utils/rules/process-mecanization';\nimport {\n isCompleteJointPenetrationButtWeld,\n isFilletWeld,\n isPartialJointPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from '../types';\nimport { NumericalRange, WelderCertificateApprovalRange } from './wopq-range-interface';\n\nconst { ARC_TRANSFER_MODES, WELDING_DETAILS, UNIT_SYSTEM, PRODUCT_TYPE } = Constants;\n\nexport default class AwsD11ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this.allWeldingDetails = data.allWeldingDetails;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.unitSystem = unitSystem;\n }\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n processMecanization(testPiece: ProcessMecanization): ProcessMecanization[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n if (isAutomaticMecanization(testPiece)) {\n return [testPiece];\n }\n if (isMechanizedMecanization(testPiece)) {\n return [testPiece];\n }\n return [];\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isPartialJointPenetrationButtWeld() {\n return isPartialJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get isCompleteJointPenetrationButtWeld() {\n return isCompleteJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeTypeRoot(electrode);\n }\n\n electrodeTypeRoot(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeFill(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeCap(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n _electrodeType(electrode: ElectrodeType /* , weldingProcess */) {\n if (isEmpty(electrode)) {\n return [];\n }\n return [electrode];\n }\n\n thickness(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let thickness = parseFloat(`${testPiece}`);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let diameter = this.certificate.get('diameterTestPiece');\n\n let result = this._emptyRange;\n\n if (\n (this.isCompleteJointPenetrationButtWeld || this.isPartialJointPenetrationButtWeld) &&\n this.isPlate\n ) {\n if (this.isMetric) {\n if (thickness <= 10) {\n result.min = 3;\n result.max = 20;\n } else if (thickness > 10 && thickness < 25) {\n result.min = 3;\n result.max = thickness * 2;\n } else {\n result.min = 3;\n result.max = null;\n }\n } else if (this.isImperial) {\n if (thickness <= 0.375) {\n result.min = 0.125;\n result.max = 0.75;\n } else if (thickness > 0.375 && thickness < 1) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else {\n result.min = 0.125;\n result.max = null;\n }\n }\n } else if (this.isFilletWeld) {\n if (!isEmpty(thickness)) {\n if (this.isMetric) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperial) {\n result.min = 0.125;\n result.max = null;\n }\n }\n } else if (\n (this.isCompleteJointPenetrationButtWeld || this.isPartialJointPenetrationButtWeld) &&\n this.isPipe\n ) {\n if (diameter) {\n // Diameter is required for pipe thickness ranges, but might not have been provided yet\n if (this.isMetric) {\n if (thickness > 10 && diameter > 100) {\n result.min = 5;\n result.max = null;\n } else if (thickness <= 10 && diameter > 100) {\n result.min = 3;\n result.max = 20;\n } else if (diameter <= 100 && !isEmpty(thickness)) {\n result.min = 3;\n result.max = 20;\n }\n } else if (this.isImperial) {\n if (thickness <= 0.375 && diameter > 4) {\n result.min = 0.125;\n result.max = 0.75;\n } else if (thickness > 0.375 && diameter > 4) {\n result.min = 0.1875;\n result.max = null;\n } else if (diameter <= 4 && !isEmpty(thickness)) {\n result.min = 0.125;\n result.max = 0.75;\n }\n }\n }\n }\n return result;\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n if (isCompleteJointPenetrationButtWeld(testPiece)) {\n return this.allWeldTypes.filter((e) => {\n return (\n isFilletWeld(e) ||\n isPartialJointPenetrationButtWeld(e) ||\n isCompleteJointPenetrationButtWeld(e)\n );\n });\n } else {\n return [testPiece];\n }\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let arcTransferMode = get(testPiece, 'transferMode');\n\n if (arcTransferMode === ARC_TRANSFER_MODES.SHORT_ARC) {\n return [testPiece];\n }\n if (\n arcTransferMode === ARC_TRANSFER_MODES.GLOBULAR ||\n arcTransferMode === ARC_TRANSFER_MODES.PULSED_SPRAY ||\n arcTransferMode === ARC_TRANSFER_MODES.SPRAY\n ) {\n return this.allTransferModes.filter((e) => {\n let currentMode = get(e, 'transferMode');\n return (\n currentMode === ARC_TRANSFER_MODES.PULSED_SPRAY ||\n currentMode === ARC_TRANSFER_MODES.GLOBULAR ||\n currentMode === ARC_TRANSFER_MODES.SPRAY\n );\n });\n }\n return [];\n }\n\n findWeldingDetails(wanted: string[], property: keyof WeldingDetail): WeldingDetail[] {\n let results: WeldingDetail[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingDetails.findBy(property, position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results: WeldingDetail[] = [];\n let finalResults: WeldingDetail[] = [];\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING, WELDING_DETAILS.BOTH_SIDES],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [WELDING_DETAILS.BOTH_SIDES, WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n ],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.BOTH_SIDES)) {\n results.pushObjects(\n this.findWeldingDetails([WELDING_DETAILS.BOTH_SIDES], 'shortDesignation')\n );\n }\n\n testPiece.forEach((detail) => {\n results.pushObject(detail);\n });\n results.forEach((detail) => {\n if (!finalResults.findBy('shortDesignation', detail.get('shortDesignation'))) {\n finalResults.pushObject(detail);\n }\n });\n return finalResults;\n }\n\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.allBaseMaterials.filter((group) => {\n let { groupName } = group;\n return (\n groupName === 'I' ||\n groupName === 'II' ||\n groupName === 'III' ||\n groupName === 'IV' ||\n groupName === 'Table 4.9'\n );\n });\n }\n\n weldingProcessRoot(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n weldingProcessFill(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n weldingProcessCap(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n shielding(process: WeldingProcess): string | null {\n if (isEmpty(process)) {\n return '';\n }\n return calculateShielding(process.shortDesignation);\n }\n\n diameter(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let results: NumericalRange = { min: null, max: null };\n\n let diameter = parseFloat(`${testPiece}`);\n if (diameter < 0) {\n return results;\n }\n if (this.isMetric) {\n if (this.isPlate) {\n results.min = 600;\n results.max = null;\n } else if (this.isPipe) {\n if (!isNaN(diameter)) {\n if (diameter <= 100) {\n results.min = 20;\n results.max = 100;\n } else {\n results.min = Math.max(100, 0.5 * diameter);\n results.max = null;\n }\n }\n }\n } else if (this.isImperial) {\n if (this.isPlate) {\n results.min = 24;\n results.max = null;\n } else if (this.isPipe) {\n if (!isNaN(diameter)) {\n if (diameter <= 4) {\n results.min = 0.75;\n results.max = 4;\n } else {\n results.min = Math.max(4, 0.5 * diameter);\n results.max = null;\n }\n }\n }\n }\n return results;\n }\n\n filterPositions(wanted: string[]): WeldingPosition[] {\n let results: WeldingPosition[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingPositions.findBy('code', position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingPosition(testPiece: WeldingPosition): WeldingPosition[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results = [];\n let weldingPosition = get(testPiece, 'code');\n if (!weldingPosition) {\n return [];\n }\n\n if (weldingPosition === '1G') {\n results = this.filterPositions(['1G', '1F', '2F']);\n } else if (weldingPosition === '2G') {\n results = this.filterPositions(['1G', '2G', '1F', '2F']);\n } else if (weldingPosition === '3G') {\n results = this.filterPositions(['1G', '2G', '3G', '1F', '2F', '3F']);\n } else if (weldingPosition === '4G') {\n results = this.filterPositions(['1G', '4G', '1F', '2F', '4F']);\n } else if (weldingPosition === '3G + 4G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '5G') {\n results = this.filterPositions(['1G', '3G', '4G', '5G', '1F', '3F', '4F', '5F']);\n } else if (weldingPosition === '5G+2G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6GR') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '1F') {\n results = this.filterPositions(['1F']);\n } else if (weldingPosition === '2F') {\n results = this.filterPositions(['1F', '2F']);\n } else if (weldingPosition === '3F') {\n results = this.filterPositions(['1F', '2F', '3F']);\n } else if (weldingPosition === '4F') {\n results = this.filterPositions(['1F', '2F', '4F']);\n } else if (weldingPosition === '5F') {\n results = this.filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else if (weldingPosition === '3F + 4F') {\n results = this.filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n return results.sortBy('code');\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [];\n }\n\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let { requalificationPeriod } = this.certificate;\n if (requalificationPeriod) {\n let newDate = moment(previousDate).add(requalificationPeriod, 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return [];\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isButtWeld,\n isFilletWeld,\n isPartialPenetrationButtWeldISO,\n isBranchConnection,\n isOverlayWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldType from 'weldnote/models/weld-type';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport { NumericalRange, WelderCertificateApprovalRange } from './wopq-range-interface';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n isAutomaticMecanization,\n isMechanizedMecanization,\n} from 'weldnote/utils/rules/process-mecanization';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from '../types';\n\nconst { WELDING_DETAILS, UNIT_SYSTEM, PRODUCT_TYPE } = Constants;\n\nexport default class Iso14732ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private allElectrodeTypes: ElectrodeType[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem: string) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this.allWeldingDetails = data.allWeldingDetails;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.allElectrodeTypes = data.allElectrodes;\n this.unitSystem = unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS B2.1 Approval Ranges');\n }\n }\n\n processMecanization(testPiece: ProcessMecanization): ProcessMecanization[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n if (isAutomaticMecanization(testPiece)) {\n return [testPiece];\n }\n if (isMechanizedMecanization(testPiece)) {\n return [testPiece];\n }\n return [];\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isSupplementaryFilletWeldTestRequired() {\n return !isEmpty(this.certificate.get('supplementaryFilletWeldTestRequired'));\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isButtWeld() {\n return isButtWeld(this.weldTypeTestPiece);\n }\n\n get isPartialPenetrationButtWeld() {\n return isPartialPenetrationButtWeldISO(this.weldTypeTestPiece);\n }\n\n get isBranchConnection() {\n return isBranchConnection(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n get _fullRange(): NumericalRange {\n return {\n min: 0,\n max: null,\n };\n }\n\n get weldingProcessRootTestPiece() {\n return get(this.certificate, 'weldingProcessRootTestPiece');\n }\n\n get weldingProcessFillTestPiece() {\n return get(this.certificate, 'weldingProcessFillTestPiece');\n }\n\n get weldingProcessCapTestPiece() {\n return get(this.certificate, 'weldingProcessCapTestPiece');\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeTypeRoot(electrode);\n }\n\n electrodeTypeRoot(electrode: ElectrodeType) {\n return this._electrodeType(electrode, this.weldingProcessRootTestPiece);\n }\n\n electrodeTypeFill(electrode: ElectrodeType) {\n return this._electrodeType(electrode, this.weldingProcessFillTestPiece);\n }\n\n electrodeTypeCap(electrode: ElectrodeType) {\n return this._electrodeType(electrode, this.weldingProcessCapTestPiece);\n }\n\n filterElectrodeTypes(electrodeCodes: string[]) {\n let results: ElectrodeType[] = [];\n electrodeCodes.forEach((designation) => {\n let candidate = this.allElectrodeTypes.findBy('shortDesignation', designation);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n _electrodeType(electrode: ElectrodeType, weldingProcess: WeldingProcess) {\n if (isEmpty(electrode)) {\n return [];\n }\n\n let weldingProcessName = '';\n if (!isEmpty(weldingProcess)) {\n weldingProcessName = weldingProcess.shortDesignation;\n }\n let electrodeCode = electrode.shortDesignation;\n if (weldingProcessName === '111') {\n if (\n electrodeCode === 'A' ||\n electrodeCode === 'RA' ||\n electrodeCode === 'RB' ||\n electrodeCode === 'RC' ||\n electrodeCode === 'RR' ||\n electrodeCode === 'R'\n ) {\n return this.filterElectrodeTypes(['A', 'RA', 'RB', 'RC', 'RR', 'R']);\n } else if (electrodeCode === 'B') {\n return this.filterElectrodeTypes(['A', 'RA', 'RB', 'RC', 'RR', 'R', 'B']);\n } else if (electrodeCode === 'C') {\n return this.filterElectrodeTypes(['C']);\n }\n } else if (weldingProcessName === '135' || weldingProcessName === '138') {\n if (electrodeCode === 'SW' || electrodeCode === 'MC') {\n return this.filterElectrodeTypes(['SW', 'MC']);\n }\n } else if (weldingProcessName === '136') {\n if (electrodeCode === 'FC (B)') {\n return this.filterElectrodeTypes([\n 'FC (B)',\n 'FC (R)',\n 'FC (P)',\n 'FC (V)',\n 'FC (W)',\n 'FC (Y)',\n 'FC (Z)',\n ]);\n } else if (\n electrodeCode === 'FC (R)' ||\n electrodeCode === 'FC (P)' ||\n electrodeCode === 'FC (V)' ||\n electrodeCode === 'FC (W)' ||\n electrodeCode === 'FC (Y)' ||\n electrodeCode === 'FC (Z)'\n ) {\n return this.filterElectrodeTypes([\n 'FC (R)',\n 'FC (P)',\n 'FC (V)',\n 'FC (W)',\n 'FC (Y)',\n 'FC (Z)',\n ]);\n }\n } else {\n return this.filterElectrodeTypes([electrodeCode]);\n }\n\n return [electrode];\n }\n\n thickness(testPiece: number) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n return this._fullRange;\n }\n\n weldType(testPiece: WeldType) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n return this.allWeldTypes;\n }\n\n transferMode(testPiece: ArcTransferMode) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n return this.allTransferModes;\n }\n\n findWeldingDetails(wanted: string[]) {\n let results: WeldingDetail[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingDetails.findBy('shortDesignation', position);\n if (candidate && !isEmpty(candidate)) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingDetails(testPiece: WeldingDetail[]) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results: WeldingDetail[] = [];\n let finalResults: WeldingDetail[] = [];\n\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n }\n\n if (\n testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING) ||\n testPiece.findBy('shortDesignation', WELDING_DETAILS.BOTH_SIDES)\n ) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.MULTI_LAYER)) {\n results.pushObjects(\n this.findWeldingDetails([WELDING_DETAILS.SINGLE_LAYER, WELDING_DETAILS.MULTI_LAYER])\n );\n }\n\n testPiece.forEach((detail) => {\n results.pushObject(detail);\n });\n\n // Consumable Insert is always qualified\n results.pushObjects(this.findWeldingDetails([WELDING_DETAILS.CONSUMABLE_INSERT]));\n\n results.forEach((detail) => {\n if (!finalResults.findBy('shortDesignation', detail.get('shortDesignation'))) {\n finalResults.pushObject(detail);\n }\n });\n return finalResults;\n }\n\n baseMaterial(testPiece: BaseMaterial) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.allBaseMaterials;\n }\n\n _filterProcessByName(processes: string[]) {\n let result: WeldingProcess[] = [];\n processes.forEach((processName) => {\n let process = this.allWeldingProcesses.findBy('shortDesignation', processName);\n if (process) {\n result.pushObject(process);\n }\n });\n return result;\n }\n\n _calculateWeldingProcess(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n let result: WeldingProcess[] = [];\n let processName = process.shortDesignation;\n if (['131', '135', '136', '137', '138'].includes(processName)) {\n result = this._filterProcessByName(['131', '135', '136', '137', '138']);\n } else {\n result = [process];\n }\n\n if (isEmpty(result)) {\n result = [process];\n }\n return result;\n }\n\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n shielding(process: WeldingProcess) {\n if (isEmpty(process)) {\n return null;\n }\n return calculateShielding(process.shortDesignation);\n }\n\n diameter(testPiece: number) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._fullRange;\n }\n\n filterPositions(wanted: string[]) {\n let results: WeldingPosition[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingPositions.findBy('code', position);\n if (candidate && !isEmpty(candidate)) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingPosition(testPiece: WeldingPosition) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results: WeldingPosition[] = [];\n let weldingPosition = get(testPiece, 'code');\n\n if (this.isFilletWeld) {\n if (weldingPosition === 'PA') {\n return this.filterPositions(['PA']);\n } else if (weldingPosition === 'PB') {\n return this.filterPositions(['PA', 'PB']);\n } else if (weldingPosition === 'PC') {\n return this.filterPositions(['PA', 'PB', 'PC']);\n } else if (weldingPosition === 'PD' || weldingPosition === 'PE') {\n return this.filterPositions(['PA', 'PB', 'PC', 'PD', 'PE']);\n } else if (weldingPosition === 'PF') {\n return this.filterPositions(['PA', 'PB', 'PF']);\n } else if (weldingPosition === 'PH') {\n return this.filterPositions(['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PH']);\n } else if (weldingPosition === 'PG') {\n return this.filterPositions(['PG']);\n } else if (weldingPosition === 'PJ') {\n return this.filterPositions(['PA', 'PB', 'PD', 'PE', 'PG', 'PJ']);\n }\n } else if (this.isButtWeld || this.isOverlayWeld || this.isPartialPenetrationButtWeld) {\n if (weldingPosition === 'PA') {\n results = this.filterPositions(['PA']);\n } else if (weldingPosition === 'PC') {\n results = this.filterPositions(['PA', 'PC']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB']));\n }\n } else if (weldingPosition === 'PE') {\n results = this.filterPositions(['PA', 'PC', 'PE']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'PF') {\n results = this.filterPositions(['PA', 'PF']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB']));\n }\n } else if (weldingPosition === 'PH') {\n results = this.filterPositions(['PA', 'PF', 'PE', 'PH']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'PG') {\n return this.filterPositions(['PG']);\n } else if (weldingPosition === 'PJ') {\n results = this.filterPositions(['PA', 'PE', 'PG', 'PJ']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'PF+PC') {\n results = this.filterPositions(['PA', 'PC', 'PE', 'PF']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'H-L045' || weldingPosition === 'PH+PC') {\n results = this.filterPositions(['PA', 'PC', 'PE', 'PF', 'PH', 'H-L045']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'J-L045' || weldingPosition === 'PJ+PC') {\n results = this.filterPositions(['PA', 'PC', 'PE', 'PG', 'PJ', 'J-L045']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n return results.sortBy('code');\n }\n\n _filterFillerMaterialGroups(groupToSelect: string[]) {\n let results: FillerMaterialGroup[] = [];\n groupToSelect.forEach((groupCode) => {\n let candidate = this.allFillerMaterials.findBy('groupName', groupCode);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n fillerMaterial(testPiece: FillerMaterial) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let materialGroup = get(testPiece, 'group');\n let groupCode = get(materialGroup, 'groupName');\n if (groupCode === 'FM1' || groupCode === 'FM2') {\n return this._filterFillerMaterialGroups(['FM1', 'FM2']);\n } else if (groupCode === 'FM3') {\n return this._filterFillerMaterialGroups(['FM1', 'FM2', 'FM3']);\n } else if (groupCode === 'FM4') {\n return this._filterFillerMaterialGroups(['FM1', 'FM2', 'FM3', 'FM4']);\n } else if (groupCode === 'FM5') {\n return this._filterFillerMaterialGroups(['FM5']);\n } else if (groupCode === 'FM6') {\n return this._filterFillerMaterialGroups(['FM5', 'FM6']);\n }\n return [];\n }\n\n internalDeadline(previousDate: Date) {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date) {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let requalificationPeriod = this.certificate.get('requalificationPeriod');\n if (!isNaN(parseInt(`${requalificationPeriod}`))) {\n let newDate = moment(previousDate).add(parseInt(`${requalificationPeriod}`), 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n\n automaticJointTracking(\n testPiece: AutomaticJointTracking | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n if (process.processMecanization.isPresent()) {\n let processMecanization = process.processMecanization.get();\n if (processMecanization.isAutomatic) {\n return [];\n } else if (processMecanization.isMechanized) {\n if (testPiece === AutomaticJointTracking.WITH) {\n return [AutomaticJointTracking.WITH];\n } else if (testPiece === AutomaticJointTracking.WITHOUT) {\n return [AutomaticJointTracking.WITH, AutomaticJointTracking.WITHOUT];\n }\n }\n }\n return [];\n }\n\n automaticVoltageControl(\n testPiece: AutomaticArcVoltageControl | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n if (process.processMecanization.isPresent()) {\n let processMecanization = process.processMecanization.get();\n if (processMecanization.isAutomatic) {\n return [];\n } else if (processMecanization.isMechanized) {\n if (testPiece === AutomaticArcVoltageControl.WITH) {\n return [AutomaticArcVoltageControl.WITH];\n } else if (testPiece === AutomaticArcVoltageControl.WITHOUT) {\n return [AutomaticArcVoltageControl.WITH, AutomaticArcVoltageControl.WITHOUT];\n }\n }\n }\n return [];\n }\n\n visualControl(\n testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n if (!testPiece) {\n return [];\n }\n if (testPiece === VisualControl.DIRECT) {\n return [VisualControl.DIRECT];\n } else if (testPiece === VisualControl.REMOTE) {\n return [VisualControl.REMOTE];\n }\n return [];\n }\n\n weldingDetailsForOperator(\n testPiece: WeldingOperatorSpecificWeldingDetails,\n process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n if (!testPiece) {\n return [];\n }\n if (process.processMecanization.isPresent()) {\n if (process.processMecanization.get().isMechanized) {\n return [];\n } else if (process.processMecanization.get().isAutomatic) {\n if (\n testPiece === WeldingOperatorSpecificWeldingDetails.ARC ||\n testPiece === WeldingOperatorSpecificWeldingDetails.JOINT\n ) {\n return [\n WeldingOperatorSpecificWeldingDetails.ARC,\n WeldingOperatorSpecificWeldingDetails.JOINT,\n ];\n } else if (testPiece === WeldingOperatorSpecificWeldingDetails.NONE) {\n return [\n WeldingOperatorSpecificWeldingDetails.ARC,\n WeldingOperatorSpecificWeldingDetails.JOINT,\n WeldingOperatorSpecificWeldingDetails.NONE,\n ];\n }\n }\n }\n return [];\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport processMecanization from 'weldnote/models/process-mecanization';\nimport WeldType from 'weldnote/models/weld-type';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from '../types';\nimport { NumericalRange, WelderCertificateApprovalRange } from './wopq-range-interface';\n\nexport default class NonSupportedApprovalRange implements WelderCertificateApprovalRange {\n constructor() {}\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n processMecanization(testPiece: processMecanization): processMecanization[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n electrodeType(testPiece: ElectrodeType): ElectrodeType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n electrodeTypeRoot(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n electrodeTypeFill(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n electrodeTypeCap(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n thickness(): NumericalRange {\n return this._emptyRange;\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return testPiece;\n }\n\n baseMaterial(_testPiece: BaseMaterial): BaseMaterialGroup[] {\n return [];\n }\n\n weldingProcessRoot(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n\n return [process];\n }\n\n weldingProcessFill(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n\n return [process];\n }\n\n weldingProcessCap(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n\n return [process];\n }\n\n shielding(process: WeldingProcess): string | null {\n if (isEmpty(process)) {\n return null;\n }\n\n return null;\n }\n\n diameter(): NumericalRange {\n return this._emptyRange;\n }\n\n weldingPosition(testPiece: WeldingPosition) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n if (get(testPiece, 'group')) {\n return [get(testPiece, 'group')];\n }\n return [];\n }\n\n internalDeadline(_previousDate: Date): Date | null {\n return null;\n }\n\n externalDeadline(_previousDate: Date): Date | null {\n return null;\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return [];\n }\n}\n","import { isEmpty } from '@ember/utils';\n\nimport AwsD11ApprovalRanges from './aws-d1-1';\n\nimport Constants from 'weldnote/utils/constants';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport WeldType from 'weldnote/models/weld-type';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport { NumericalRange, WelderCertificateApprovalRange } from './wopq-range-interface';\nimport {\n isStandardASME,\n isStandardAWSB21,\n isStandardAWSD11,\n isWelderStandardISO14732,\n} from 'weldnote/utils/standards';\nimport NonSupportedApprovalRange from './non-supported';\nimport WeldingOperatorAsmeIxApprovalRanges from './asme-ix';\nimport AwsB21ApprovalRanges from './aws-b2-1';\nimport Iso14732ApprovalRanges from './iso-14732';\nimport processMecanization from 'weldnote/models/process-mecanization';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from '../types';\nconst { UNIT_SYSTEM } = Constants;\n\nexport default class WopqApprovalRange implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private approvalRange: WelderCertificateApprovalRange;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n let allData = {\n allWeldTypes: data.weldTypeOptions,\n allBaseMaterials: data.allBaseMaterialGroups,\n allWeldingDetails: data.weldingDetailOptions,\n allProcessMecanizations: data.processMecanizationOptions,\n allTypeCurrentPolarity: data.typeCurrentPolarityOptions,\n allWeldingPositions: data.weldingPositionOptions,\n allTransferModes: data.arcTransferModeOptions,\n allWeldingProcesses: data.weldingProcessOptions,\n allFillerMaterials: data.allFillerMaterialGroups,\n allElectrodes: data.electrodeTypeOptions,\n unitSystem,\n };\n if (isWelderStandardISO14732(this.standard)) {\n this.approvalRange = new Iso14732ApprovalRanges(certificate, allData, unitSystem);\n } else if (isStandardASME(this.standard)) {\n this.approvalRange = new WeldingOperatorAsmeIxApprovalRanges(\n certificate,\n allData,\n unitSystem\n );\n } else if (isStandardAWSD11(this.standard)) {\n this.approvalRange = new AwsD11ApprovalRanges(certificate, allData, unitSystem);\n } else if (isStandardAWSB21(this.standard)) {\n this.approvalRange = new AwsB21ApprovalRanges(certificate, allData, unitSystem);\n } else {\n this.approvalRange = new NonSupportedApprovalRange();\n }\n }\n\n automaticJointTracking(\n testPiece: AutomaticJointTracking | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return this.approvalRange.automaticJointTracking(testPiece, process);\n }\n\n automaticVoltageControl(\n testPiece: AutomaticArcVoltageControl | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return this.approvalRange.automaticVoltageControl(testPiece, process);\n }\n\n visualControl(\n testPiece: VisualControl | null,\n process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return this.approvalRange.visualControl(testPiece, process);\n }\n\n processMecanization(\n testPiece: processMecanization,\n processValues: TestPieceValuesSingleProcess\n ): processMecanization[] {\n return this.approvalRange.processMecanization(testPiece, processValues);\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n electrodeType(electrode: ElectrodeType, processValues: TestPieceValuesSingleProcess) {\n return this.approvalRange.electrodeType(electrode, processValues);\n }\n\n thickness(testPiece: number) {\n return this.approvalRange.thickness(testPiece);\n }\n\n weldType(testPiece: WeldType) {\n return this.approvalRange.weldType(testPiece);\n }\n\n transferMode(testPiece: ArcTransferMode, processValues: TestPieceValuesSingleProcess) {\n return this.approvalRange.transferMode(testPiece, processValues);\n }\n\n weldingDetails(testPiece: WeldingDetail[]) {\n return this.approvalRange.weldingDetails(testPiece);\n }\n\n baseMaterial(testPiece: BaseMaterial) {\n return this.approvalRange.baseMaterial(testPiece);\n }\n\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n return this.approvalRange.weldingProcessRoot(process);\n }\n\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n return this.approvalRange.weldingProcessFill(process);\n }\n\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this.approvalRange.weldingProcessCap(process);\n }\n\n shielding(process: WeldingProcess) {\n if (isEmpty(process)) {\n return null;\n }\n\n return this.approvalRange.shielding(process);\n }\n\n diameter(testPiece: number): NumericalRange {\n return this.approvalRange.diameter(testPiece);\n }\n\n weldingPosition(testPiece: WeldingPosition, processValues: TestPieceValuesSingleProcess) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.approvalRange.weldingPosition(testPiece, processValues);\n }\n\n fillerMaterial(testPiece: FillerMaterial, processValues: TestPieceValuesSingleProcess) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.approvalRange.fillerMaterial(testPiece, processValues);\n }\n\n internalDeadline(previousDate: Date) {\n return this.approvalRange.internalDeadline(previousDate);\n }\n\n externalDeadline(previousDate: Date) {\n return this.approvalRange.externalDeadline(previousDate);\n }\n\n weldingDetailsForOperator(\n testPiece: WeldingOperatorSpecificWeldingDetails,\n process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return this.approvalRange.weldingDetailsForOperator(testPiece, process);\n }\n}\n","import { get } from '@ember/object';\nimport { Optional } from 'typescript-optional';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport TypeCurrentPolarity from 'weldnote/models/type-current-polarity';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\n\nexport enum AutomaticJointTracking {\n WITH = 'WITH',\n WITHOUT = 'WITHOUT',\n}\n\nexport enum AutomaticArcVoltageControl {\n WITH = 'WITH',\n WITHOUT = 'WITHOUT',\n}\n\nexport enum VisualControl {\n DIRECT = 'DIRECT',\n REMOTE = 'REMOTE',\n}\n\nexport enum WeldingOperatorSpecificWeldingDetails {\n ARC = 'ARC',\n JOINT = 'JOINT',\n NONE = 'NONE',\n}\n\nexport enum Process {\n PROCESS1,\n PROCESS2,\n PROCESS3,\n}\n\n/**\n *\n */\nexport interface TestPieceValuesSingleProcess {\n weldingProcess: Optional;\n weldingPosition: Optional;\n processMecanization: Optional;\n transferMode: Optional;\n fillerMaterial: Optional;\n typeCurrent: Optional;\n}\n\nexport class WelderCertificateTestPieceValues implements TestPieceValuesSingleProcess {\n certificate: WelderCertificate;\n\n process: Process;\n\n constructor(certificate: WelderCertificate, process: Process) {\n this.certificate = certificate;\n this.process = process;\n }\n\n get weldingProcess(): Optional {\n if (this.process === Process.PROCESS1) {\n return Optional.ofNullable(get(this.certificate, 'weldingProcessRootTestPiece'));\n } else if (this.process === Process.PROCESS2) {\n return Optional.ofNullable(get(this.certificate, 'weldingProcessFillTestPiece'));\n } else if (this.process === Process.PROCESS3) {\n return Optional.ofNullable(get(this.certificate, 'weldingProcessCapTestPiece'));\n }\n return Optional.empty();\n }\n\n get weldingPosition(): Optional {\n if (this.process === Process.PROCESS1) {\n return Optional.ofNullable(get(this.certificate, 'weldingPositionRootTestPiece'));\n } else if (this.process === Process.PROCESS2) {\n return Optional.ofNullable(get(this.certificate, 'weldingPositionFillTestPiece'));\n } else if (this.process === Process.PROCESS3) {\n return Optional.ofNullable(get(this.certificate, 'weldingPositionCapTestPiece'));\n }\n return Optional.empty();\n }\n\n get processMecanization(): Optional {\n if (this.process === Process.PROCESS1) {\n return Optional.ofNullable(get(this.certificate, 'processMecanizationRootTestPiece'));\n } else if (this.process === Process.PROCESS2) {\n return Optional.ofNullable(get(this.certificate, 'processMecanizationFillTestPiece'));\n } else if (this.process === Process.PROCESS3) {\n return Optional.ofNullable(get(this.certificate, 'processMecanizationCapTestPiece'));\n }\n return Optional.empty();\n }\n\n get transferMode(): Optional {\n if (this.process === Process.PROCESS1) {\n return Optional.ofNullable(get(this.certificate, 'arcTransferModeRootTestPiece'));\n } else if (this.process === Process.PROCESS2) {\n return Optional.ofNullable(get(this.certificate, 'arcTransferModeFillTestPiece'));\n } else if (this.process === Process.PROCESS3) {\n return Optional.ofNullable(get(this.certificate, 'arcTransferModeCapTestPiece'));\n }\n return Optional.empty();\n }\n\n get fillerMaterial(): Optional {\n if (this.process === Process.PROCESS1) {\n return Optional.ofNullable(get(this.certificate, 'fillerMaterialRootTestPiece'));\n } else if (this.process === Process.PROCESS2) {\n return Optional.ofNullable(get(this.certificate, 'fillerMaterialFillTestPiece'));\n } else if (this.process === Process.PROCESS3) {\n return Optional.ofNullable(get(this.certificate, 'fillerMaterialCapTestPiece'));\n }\n return Optional.empty();\n }\n\n get typeCurrent(): Optional {\n if (this.process === Process.PROCESS1) {\n return Optional.ofNullable(get(this.certificate, 'typeCurrentRootTestPiece'));\n } else if (this.process === Process.PROCESS2) {\n return Optional.ofNullable(get(this.certificate, 'typeCurrentFillTestPiece'));\n } else if (this.process === Process.PROCESS3) {\n return Optional.ofNullable(get(this.certificate, 'typeCurrentCapTestPiece'));\n }\n return Optional.empty();\n }\n}\n\nexport class NullTestPieceValues implements TestPieceValuesSingleProcess {\n get weldingProcess(): Optional {\n return Optional.empty();\n }\n\n get weldingPosition(): Optional {\n return Optional.empty();\n }\n\n get processMecanization(): Optional {\n return Optional.empty();\n }\n\n get transferMode(): Optional {\n return Optional.empty();\n }\n\n get fillerMaterial(): Optional {\n return Optional.empty();\n }\n\n get typeCurrent(): Optional {\n return Optional.empty();\n }\n}\n\nexport class WelderOperatorTypes {\n static jointTrackingFromString(value: string): Optional {\n if (value) {\n if (value.toUpperCase() === 'WITH') {\n return Optional.of(AutomaticJointTracking.WITH);\n } else if (value.toUpperCase() === 'WITHOUT') {\n return Optional.of(AutomaticJointTracking.WITHOUT);\n }\n }\n return Optional.empty();\n }\n\n static arcVoltageControlFromString(value: string): Optional {\n if (value) {\n if (value.toUpperCase() === 'WITH') {\n return Optional.of(AutomaticArcVoltageControl.WITH);\n } else if (value.toUpperCase() === 'WITHOUT') {\n return Optional.of(AutomaticArcVoltageControl.WITHOUT);\n }\n }\n return Optional.empty();\n }\n\n static visualControlFromString(value: string): Optional {\n if (value) {\n if (value.toUpperCase() === 'DIRECT') {\n return Optional.of(VisualControl.DIRECT);\n } else if (value.toUpperCase() === 'REMOTE') {\n return Optional.of(VisualControl.REMOTE);\n }\n }\n return Optional.empty();\n }\n\n static processFromString(value: string): Optional {\n if (value) {\n if (value === 'process1') {\n return Optional.of(Process.PROCESS1);\n } else if (value === 'process2') {\n return Optional.of(Process.PROCESS2);\n } else if (value === 'process3') {\n return Optional.of(Process.PROCESS3);\n }\n }\n return Optional.empty();\n }\n\n static weldingOperatorDetailFromString(\n value: string\n ): Optional {\n if (value) {\n if (value.toUpperCase() === 'ARC') {\n return Optional.of(WeldingOperatorSpecificWeldingDetails.ARC);\n } else if (value.toUpperCase() === 'JOINT') {\n return Optional.of(WeldingOperatorSpecificWeldingDetails.JOINT);\n } else if (value.toUpperCase() === 'NONE') {\n return Optional.of(WeldingOperatorSpecificWeldingDetails.NONE);\n }\n }\n return Optional.empty();\n }\n}\n","/**\n * @fileoverview ASME Section IX Welder Qualification Approval Ranges\n *\n * This file implements the approval range rules according to ASME Boiler and Pressure\n * Vessel Code, Section IX - Welding, Brazing, and Fusing Qualifications.\n *\n * WELDING PERSPECTIVE - ABOUT ASME SECTION IX:\n * ASME IX is one of the most widely used welding qualification standards in the world,\n * particularly in pressure vessel and piping applications. It defines:\n * - QW-300: Welding Performance Qualifications (WPQ/WPS)\n * - Essential Variables that require requalification when changed\n * - Range of approval for each essential variable\n *\n * KEY CONCEPTS:\n * 1. Essential Variables: Changes that require requalification (thickness, position, process, etc.)\n * 2. P-Numbers: Base material groupings (P-1 = Carbon Steel, P-8 = Stainless, etc.)\n * 3. F-Numbers: Filler material groupings based on usability characteristics\n * 4. Position: Groove (G) and Fillet (F) positions with qualification hierarchy\n * 5. Thickness Qualification: Uses 2T rule for thin plates (<13mm metric, <0.5\" imperial)\n *\n * IMPLEMENTATION NOTES:\n * - This class filters all reference data to ASME IX specific values during construction\n * - Each method implements specific ASME IX QW-300 series requirements\n * - Returns empty arrays for operator-specific methods (ASME IX is welder-focused)\n * - Supports both metric and imperial unit systems with different breakpoints\n */\n\nimport { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport CertificateFillerRules from 'weldnote/utils/certificate-filler-material-rules-asme';\nimport CertificateBaseMaterialRules from 'weldnote/utils/welder-certificate-base-material-rules-asme';\nimport {\n isButtWeld,\n isOverlayWeld,\n isFilletWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport moment from 'moment';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldType from 'weldnote/models/weld-type';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n NumericalRange,\n WelderCertificateApprovalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\n\nconst { UNIT_SYSTEM, ARC_TRANSFER_MODES, WELDING_DETAILS, PRODUCT_TYPE } = Constants;\n\n/**\n * ASME Section IX Approval Range Calculator\n *\n * Implements WelderCertificateApprovalRange interface with ASME IX specific rules.\n * All approval ranges are based on ASME BPVC Section IX, QW-300 series requirements.\n */\nexport default class CertificateAsmeIxApprovalRanges implements WelderCertificateApprovalRange {\n /** The welder certificate being evaluated for approval ranges */\n private certificate: WelderCertificate;\n\n /** Unit system for measurements (metric or imperial) */\n private unitSystem: string;\n\n /** Available electrode types (not filtered by industry code - applies to all) */\n private allElectrodes: ElectrodeType[];\n\n /** Available welding details (not filtered by industry code - applies to all) */\n private allWeldingDetails: WeldingDetail[];\n\n /** Available base material groups (not filtered by industry code - applies to all) */\n private allBaseMaterials: BaseMaterialGroup[];\n\n /** Arc transfer modes filtered to ASME IX specific modes */\n private allTransferModes: ArcTransferMode[];\n\n /** Welding positions filtered to ASME IX notation (1G, 2G, 3G, etc.) */\n private allWeldingPositions: WeldingPosition[];\n\n /** Filler material groups filtered to ASME IX F-Number groups */\n private allFillerMaterials: FillerMaterialGroup[];\n\n /** Weld types filtered to ASME IX classifications */\n private allWeldTypes: WeldType[];\n\n /**\n * Constructs an ASME IX approval range calculator.\n *\n * IMPLEMENTATION NOTE: The constructor filters reference data collections to only\n * include ASME IX specific values. This prevents cross-contamination with other\n * standards (ISO, EN, etc.) that may be in the database.\n *\n * @param certificate The welder certificate containing test piece parameters\n * @param data Object containing all reference data collections\n * @param unitSystem Metric or imperial unit system (default: metric)\n */\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n this.unitSystem = unitSystem;\n\n // Electrodes, welding details, and base materials are not filtered by industry code\n // as they are used across all standards with the same definitions\n this.allElectrodes = data.allElectrodes;\n this.allWeldingDetails = data.allWeldingDetails;\n this.allBaseMaterials = data.allBaseMaterials;\n\n // Filter transfer modes to ASME IX specific modes only\n this.allTransferModes = data.allTransferModes.filter(\n (transferMode: ArcTransferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n\n // Filter welding positions to ASME IX notation (1G, 2G, 3G, 4G, 5G, 6G, 6GR, etc.)\n this.allWeldingPositions = data.allWeldingPositions.filter(\n (position: WeldingPosition) =>\n this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n\n // Filter filler materials to ASME IX F-Number groups\n this.allFillerMaterials = data.allFillerMaterials.filter(\n (material: FillerMaterialGroup) =>\n this.getIndustryCode(get(material, 'code')) === this.industryCodeId\n );\n\n // Filter weld types to ASME IX classifications\n this.allWeldTypes = data.allWeldTypes.filter((weldType: WeldType) => {\n return this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId;\n });\n }\n\n /**\n * Returns empty array - ASME IX does not have automatic joint tracking requirements.\n *\n * WELDING PERSPECTIVE: ASME IX is focused on welder qualifications rather than\n * welding operator qualifications. Automatic joint tracking is relevant for\n * mechanized/automated welding operations covered by other sections/standards.\n */\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n /**\n * Returns empty array - ASME IX does not have automatic voltage control requirements.\n *\n * WELDING PERSPECTIVE: Similar to joint tracking, AVC is relevant for mechanized\n * operations covered by other standards. Manual welder qualifications per ASME IX\n * do not include AVC as an essential variable.\n */\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n /**\n * Returns empty array - ASME IX does not have visual control requirements.\n *\n * WELDING PERSPECTIVE: Visual control methods (direct vision, camera, etc.) are\n * relevant for remote or automated operations but not part of ASME IX welder\n * qualification requirements.\n */\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n /**\n * Returns empty array - ASME IX does not have process mechanization requirements.\n *\n * WELDING PERSPECTIVE: Process mechanization levels are relevant for welding\n * operator qualifications (WOPQ) rather than welder performance qualifications (WPQ).\n * ASME IX primarily covers manual welder qualifications.\n */\n processMecanization(_testPiece: ProcessMecanization): ProcessMecanization[] {\n return [];\n }\n\n /**\n * Helper: Extracts industry code ID from an IndustryCode object.\n * Returns empty string if code is undefined.\n */\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n /**\n * Gets the industry code ID for this certificate's standard.\n * Used to filter reference data to ASME IX specific values.\n */\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n /** Returns the welding standard (ASME IX) associated with this certificate */\n get standard() {\n return this.certificate.get('standard');\n }\n\n /** Returns the test piece pipe diameter (for pipe qualifications) */\n get diameterValue() {\n return this.certificate.get('diameterTestPiece');\n }\n\n /** Returns the welding process short designation used for root pass */\n get weldingProcessRootName() {\n let weldingProcess = this.certificate.get('weldingProcessRootTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n /** Returns the welding process short designation used for fill passes */\n get weldingProcessFillName() {\n let weldingProcess = this.certificate.get('weldingProcessFillTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n /** Returns the welding process short designation used for cap/cover pass */\n get weldingProcessCapName() {\n let weldingProcess = this.certificate.get('weldingProcessCapTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n /** Returns the weld type object from the test piece */\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n /** Returns the weld type code (string identifier) from the test piece */\n get weldTypeCode() {\n let weldType = this.certificate.get('weldTypeTestPiece');\n if (!isEmpty(weldType)) {\n return weldType.weldType;\n }\n return '';\n }\n\n /**\n * Indicates if supplementary fillet weld test is required.\n *\n * WELDING PERSPECTIVE: ASME IX may require a supplementary fillet test when\n * the primary test was on a groove weld but fillet weld qualification is also desired.\n */\n get supplementaryFilletWeldTestRequired() {\n return this.certificate.get('supplementaryFilletWeldTestRequired');\n }\n\n /**\n * Returns the requalification period in years (if specified by employer).\n *\n * WELDING PERSPECTIVE: While ASME IX requires 6-month continuity, employers\n * may impose additional periodic requalification requirements (e.g., retest every 2 years).\n */\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n /**\n * Determines approved electrode types for root pass.\n *\n * WELDING PERSPECTIVE: In ASME IX, electrode qualification is typically specific to\n * the electrode used. This delegates to the common electrodeType method.\n */\n electrodeTypeRoot(electrode: ElectrodeType): ElectrodeType[] {\n return this.electrodeType(electrode);\n }\n\n /**\n * Determines approved electrode types for fill passes.\n * Same approval logic as root pass per ASME IX.\n */\n electrodeTypeFill(electrode: ElectrodeType): ElectrodeType[] {\n return this.electrodeType(electrode);\n }\n\n /**\n * Determines approved electrode types for cap/cover pass.\n * Same approval logic as root pass per ASME IX.\n */\n electrodeTypeCap(electrode: ElectrodeType): ElectrodeType[] {\n return this.electrodeType(electrode);\n }\n\n /**\n * Determines approved electrode type based on test piece electrode.\n *\n * WELDING PERSPECTIVE: ASME IX typically requires exact electrode match or\n * electrodes within the same classification. This implementation returns\n * only the specific electrode used in the test.\n *\n * @returns Array containing only the test piece electrode\n */\n electrodeType(electrode: ElectrodeType): ElectrodeType[] {\n if (isEmpty(electrode)) {\n return [];\n }\n let { shortDesignation } = electrode;\n return this._filterElectrodeTypes([shortDesignation]);\n }\n\n /**\n * Helper: Filters electrode types by their short designation codes.\n * Used to convert electrode code strings into ElectrodeType objects.\n */\n _filterElectrodeTypes(electrodeCodes: string[]): ElectrodeType[] {\n let results: ElectrodeType[] = [];\n electrodeCodes.forEach((designation) => {\n let candidate = this.allElectrodes.findBy('shortDesignation', designation);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n /** Returns an empty numerical range object (both min and max are null) */\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n /** True if test piece was a fillet weld */\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n /** True if test piece was a complete penetration butt/groove weld */\n get isButtWeld() {\n return isButtWeld(this.weldTypeTestPiece);\n }\n\n /** True if test piece was an overlay/surfacing weld */\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n /** True if test piece was a partial penetration groove weld */\n get isPartialPenetrationButtWeld() {\n return isPartialPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n /** Returns the product type (plate or pipe) from the test piece */\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n /**\n * True if test piece was pipe/tube.\n *\n * WELDING PERSPECTIVE: Pipe vs. plate affects position qualification and\n * diameter requirements. Pipe welding often requires all-positional skills.\n */\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n /** True if using metric unit system */\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n /** True if using imperial unit system */\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n /**\n * Calculates approved thickness range per ASME IX QW-452.1.\n *\n * WELDING PERSPECTIVE:\n * Thickness is an essential variable because thicker materials:\n * - Require more heat input and slower cooling rates\n * - Have greater restraint affecting distortion and cracking\n * - May require preheat and interpass temperature control\n * - Affect weld penetration and fusion characteristics\n *\n * ASME IX RULES (QW-452.1):\n * - Test on <13mm (metric) or <0.5\" (imperial): Qualifies up to 2T maximum\n * - Test on ≥13mm (metric) or ≥0.5\" (imperial): Qualifies unlimited thickness\n * - Minimum qualified: Always down to 0 (any thinner material)\n * - Fillet welds on pipe: Qualify for unlimited thickness regardless of test thickness\n *\n * IMPLEMENTATION NOTE: The 2T rule for thin plates prevents a welder who only tested\n * on 3mm from immediately being qualified for 200mm thick plates. They must demonstrate\n * capability on thicker material first.\n *\n * @param testPiece Test piece thickness in mm (metric) or inches (imperial)\n * @returns Range with min always 0, max either 2*thickness or unlimited (null)\n */\n thickness(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let result: NumericalRange = { min: null, max: null };\n\n // Special case: Fillet welds on pipe qualify for unlimited thickness\n if (this.isFilletWeld && this.isPipe) {\n if (this.isMetric) {\n result.min = 0;\n result.max = null; // Unlimited\n } else if (this.isImperial) {\n result.min = 0;\n result.max = null; // Unlimited\n }\n } else {\n // Standard thickness rules\n if (this.isMetric) {\n if (testPiece < 13) {\n // Thin plate: 2T rule applies\n result.min = 0;\n result.max = 2 * testPiece;\n } else {\n // Thick plate: unlimited qualification\n result.min = 0;\n result.max = null; // Unlimited\n }\n } else if (this.isImperial) {\n if (testPiece < 0.5) {\n // Thin plate: 2T rule applies\n result.min = 0;\n result.max = 2 * testPiece;\n } else {\n // Thick plate: unlimited qualification\n result.min = 0;\n result.max = null; // Unlimited\n }\n }\n }\n return result;\n }\n\n /**\n * Determines approved weld types per ASME IX QW-451.2.\n *\n * WELDING PERSPECTIVE:\n * Weld type qualification follows a hierarchy based on difficulty:\n * - Butt/Groove welds are most difficult (require complete joint penetration)\n * - Partial penetration groove welds are intermediate\n * - Fillet welds are generally easier (no full penetration required)\n *\n * ASME IX RULES (QW-451.2):\n * - Butt weld test qualifies: Butt, partial penetration, and fillet welds\n * - Partial penetration test qualifies: Partial penetration and fillet welds only\n * - Fillet weld test qualifies: Fillet welds only\n * - Overlay weld test qualifies: Overlay and fillet welds\n *\n * RATIONALE: A welder who can make a full penetration butt weld has demonstrated\n * greater skill than one who only makes fillet welds, so they're qualified for\n * \"easier\" weld types without additional testing.\n *\n * @param testPiece The weld type used in the qualification test\n * @returns Array of all weld types the welder is qualified to perform\n */\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results: WeldType[] = [];\n // Always qualified for the exact weld type tested\n results.pushObject(testPiece);\n\n // Butt weld qualifies for partial penetration and fillet welds\n if (this.isButtWeld) {\n results.pushObjects(\n this.allWeldTypes.filter(\n (weldType) => isFilletWeld(weldType) || isPartialPenetrationButtWeld(weldType)\n )\n );\n }\n\n // Partial penetration qualifies for fillet welds\n if (isPartialPenetrationButtWeld(testPiece)) {\n results.pushObjects(this.allWeldTypes.filter((weldType) => isFilletWeld(weldType)));\n }\n\n // Overlay weld qualifies for fillet welds\n if (this.isOverlayWeld) {\n results.pushObjects(this.allWeldTypes.filter((weldType) => isFilletWeld(weldType)));\n }\n\n return results;\n }\n\n /**\n * Determines approved arc transfer modes per ASME IX QW-409.\n *\n * WELDING PERSPECTIVE:\n * Arc transfer mode (for GMAW/FCAW processes) describes how the filler metal\n * transfers from the electrode to the weld pool:\n * - Short-circuit: Low heat input, small droplets, used for thin materials\n * - Globular: Medium heat, large irregular droplets\n * - Spray: High heat, fine droplets in axial stream, smooth transfer\n * - Pulsed spray: Controlled spray transfer using pulsed current\n *\n * ASME IX RULES (QW-409):\n * Spray, pulsed spray, and globular transfer modes are grouped together because\n * they operate at similar current levels and produce comparable results. Testing\n * with any one of these modes qualifies for the other two.\n *\n * Short-circuit transfer is separate because it operates at much lower currents\n * and is a distinctly different technique - requires specific qualification.\n *\n * IMPLEMENTATION NOTE: The grouping logic checks for the three high-current modes\n * and returns all three if any one was tested. Otherwise, returns only the specific\n * mode tested (e.g., short-circuit qualifies only short-circuit).\n *\n * @param testPiece The arc transfer mode used in the test\n * @returns Array of approved transfer modes\n */\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let arcModeName = testPiece.get('transferMode');\n\n // Group: Spray, Pulsed Spray, and Globular are interchangeable per ASME IX\n if (\n arcModeName === ARC_TRANSFER_MODES.PULSED_SPRAY ||\n arcModeName === ARC_TRANSFER_MODES.GLOBULAR ||\n arcModeName === ARC_TRANSFER_MODES.SPRAY\n ) {\n return this.allTransferModes.filter((mode) => {\n if (\n mode.get('transferMode') === ARC_TRANSFER_MODES.SPRAY ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.GLOBULAR ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.PULSED_SPRAY\n ) {\n return true;\n }\n return false;\n });\n } else {\n // Other modes (e.g., short-circuit) qualify only themselves\n return [testPiece];\n }\n }\n\n /**\n * Determines approved welding details per ASME IX QW-402 and QW-403.\n *\n * WELDING PERSPECTIVE:\n * Welding details describe two main aspects:\n *\n * 1. BACKING CONDITIONS (QW-402):\n * - No backing: Most difficult - requires full control of root pass penetration\n * - Gas backing: Inert gas purge protects root from oxidation\n * - Material backing: Physical backing bar or consumable insert supports root\n * - Flux backing: Granular flux backing (SAW process)\n * - Both sides: Access to back side for back gouging/welding\n *\n * 2. LAYER COUNT (QW-403):\n * - Single layer: Entire joint filled in one pass (thin materials)\n * - Multi-layer: Multiple passes to fill joint (thicker materials)\n *\n * ASME IX APPROVAL HIERARCHY (QW-402):\n * More restrictive test conditions qualify for less restrictive production:\n * - No backing → qualifies for: no backing, gas backing, material backing, both sides\n * - Gas backing → qualifies for: gas backing, material backing, both sides\n * - Material backing → qualifies for: material backing, both sides\n * - Both sides → qualifies for: both sides only\n *\n * LAYER COUNT RULES (QW-403):\n * Single and multi-layer qualifications are interchangeable - either qualifies both.\n *\n * IMPLEMENTATION NOTE: This method processes multiple welding details from the test\n * piece (since a test may have both backing and layer count details) and builds up\n * the approved set. Results may contain duplicates which are handled by the caller.\n *\n * @param testPiece Array of welding details from the qualification test\n * @returns Array of all approved welding details\n */\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results: WeldingDetail[] = [];\n\n // No backing (most restrictive) - qualifies for all backing types\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n\n // Gas backing - qualifies for gas, material backing, and both sides\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n\n // Material backing - qualifies for material backing and both sides\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n\n // Single layer - qualifies for both single and multi-layer\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_LAYER)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.MULTI_LAYER ||\n shortDesignation === WELDING_DETAILS.SINGLE_LAYER\n );\n })\n );\n }\n\n // Multi-layer - qualifies for both single and multi-layer\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.MULTI_LAYER)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.MULTI_LAYER ||\n shortDesignation === WELDING_DETAILS.SINGLE_LAYER\n );\n })\n );\n }\n\n // Flux backing (for SAW) - qualifies for flux backing, material backing, and both sides\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n results.pushObjects(\n this.allWeldingDetails.filter((detail) => {\n let { shortDesignation } = detail;\n return (\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING ||\n shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n shortDesignation === WELDING_DETAILS.BOTH_SIDES\n );\n })\n );\n }\n\n return results;\n }\n\n /**\n * Helper: Filters base material groups by their group names.\n * Used to convert group name strings into BaseMaterialGroup objects.\n */\n _filterBaseMaterials(wanted: string[]) {\n let results: BaseMaterialGroup[] = [];\n wanted.forEach((position) => {\n let candidate = this.allBaseMaterials.findBy('groupName', position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n /**\n * Determines approved base material groups per ASME IX QW-423.\n *\n * WELDING PERSPECTIVE:\n * Base materials are the metals being joined by welding. They are grouped by\n * weldability characteristics including:\n * - Chemical composition and alloying elements\n * - Metallurgical structure (ferritic, austenitic, etc.)\n * - Mechanical properties\n * - Heat treatment response\n * - Preheat and interpass temperature requirements\n *\n * ASME IX P-NUMBER SYSTEM (QW-423):\n * Materials are assigned P-Numbers based on weldability:\n * - P-1: Carbon steels (most common, relatively easy to weld)\n * - P-3: Low alloy steels\n * - P-4: Low alloy steels (higher alloy content)\n * - P-5A, P-5B, P-5C: Chromium-molybdenum steels\n * - P-8: Austenitic stainless steels\n * - P-21 through P-25: Aluminum alloys\n * - P-31 through P-35: Titanium alloys\n * - P-41 through P-49: Nickel alloys\n *\n * APPROVAL RANGES:\n * Generally, qualification on one P-Number qualifies only that P-Number.\n * However, ASME IX allows limited cross-qualification within certain material families:\n * - Steel and nickel alloys have complex inter-qualification rules\n * - Aluminum alloys are grouped separately\n * - Titanium/zirconium alloys are grouped separately\n *\n * IMPLEMENTATION NOTE: This method delegates to CertificateBaseMaterialRules which\n * contains the detailed P-Number approval range logic from ASME IX QW-423.\n * The rules module encapsulates the complex material grouping logic.\n *\n * @param testPiece The base material used in the qualification test\n * @returns Array of all approved base material groups\n */\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results = [];\n let baseMaterialGroupInstance = get(testPiece, 'materialGroup');\n let baseMaterialGroup = get(baseMaterialGroupInstance, 'groupName');\n\n // Steel and nickel alloys have complex inter-qualification rules\n if (CertificateBaseMaterialRules.isSteelAndNickelAlloys(baseMaterialGroup)) {\n results = this._filterBaseMaterials(\n CertificateBaseMaterialRules.getSteelAndNickelAlloysApprovalRange()\n );\n }\n // Aluminum alloys are grouped separately from ferrous materials\n else if (CertificateBaseMaterialRules.isAluminiumAlloys(baseMaterialGroup)) {\n results = this._filterBaseMaterials(\n CertificateBaseMaterialRules.getAluminiumAlloysApprovalRange()\n );\n }\n // Titanium and zirconium alloys are grouped together\n else if (CertificateBaseMaterialRules.isTitaniumAndZirconiumAlloys(baseMaterialGroup)) {\n results = this._filterBaseMaterials(\n CertificateBaseMaterialRules.getTitaniumAndZirconiumAlloysApprovalRange()\n );\n }\n // Other materials: qualify only the specific P-Number tested\n else {\n results = this._filterBaseMaterials([baseMaterialGroup]);\n }\n return results;\n }\n\n /**\n * Determines approved welding processes for root pass per ASME IX QW-420.\n *\n * WELDING PERSPECTIVE:\n * The root pass is the first pass in a multi-pass weld, typically the most critical:\n * - Establishes the weld foundation and penetration\n * - Must prevent burn-through in thin materials\n * - Must achieve proper fusion without defects\n * - Often uses different parameters than fill/cap passes\n *\n * ASME IX RULES (QW-420):\n * Welding process is an essential variable. Each process requires separate qualification.\n * Common processes include:\n * - SMAW (Shielded Metal Arc Welding) - Stick welding\n * - GMAW (Gas Metal Arc Welding) - MIG welding\n * - GTAW (Gas Tungsten Arc Welding) - TIG welding\n * - SAW (Submerged Arc Welding)\n * - FCAW (Flux Cored Arc Welding)\n *\n * IMPLEMENTATION NOTE: ASME IX requires exact process match - qualification with\n * one process does not approve others. Returns only the tested process.\n *\n * @returns Array containing only the root pass welding process tested\n */\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n /**\n * Determines approved welding processes for fill passes per ASME IX QW-420.\n *\n * WELDING PERSPECTIVE:\n * Fill passes build up the weld joint between root and cap:\n * - Multiple passes in thick materials\n * - May use higher deposition rates than root\n * - Must maintain proper fusion between passes\n *\n * ASME IX requires exact process match for fill passes as well.\n *\n * @returns Array containing only the fill pass welding process tested\n */\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n /**\n * Determines approved welding processes for cap/cover pass per ASME IX QW-420.\n *\n * WELDING PERSPECTIVE:\n * The cap (or cover) pass is the final pass providing the weld surface:\n * - Determines final weld contour and appearance\n * - May require different technique for smooth finish\n * - Sometimes a different process is used for cap than root/fill\n *\n * ASME IX allows multi-process qualifications where different processes\n * are used for root, fill, and cap passes.\n *\n * @returns Array containing only the cap pass welding process tested\n */\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n /**\n * Determines required shielding gas/method based on welding process.\n *\n * WELDING PERSPECTIVE:\n * Shielding protects the molten weld pool from atmospheric contamination:\n * - SMAW: Shielding from electrode coating (flux)\n * - GMAW: External shielding gas (Ar, CO2, or mixtures)\n * - GTAW: External shielding gas (typically Argon or Helium)\n * - SAW: Granular flux provides shielding\n * - FCAW: May be self-shielded or gas-shielded\n *\n * Without proper shielding, welds suffer from porosity, lack of fusion,\n * and contamination leading to mechanical property degradation.\n *\n * @returns Shielding gas/method designation or null if not applicable\n */\n shielding(process: WeldingProcess) {\n if (isEmpty(process)) {\n return null;\n }\n\n return calculateShielding(process.shortDesignation);\n }\n\n /**\n * Calculates approved pipe diameter range per ASME IX QW-452.3.\n *\n * WELDING PERSPECTIVE:\n * Pipe diameter is an essential variable because:\n * - Small diameter pipes require all-positional welding (pipe rotates through all positions)\n * - Smaller diameters increase welding difficulty due to tight curvature\n * - Arc access and manipulation are more challenging in small diameter pipes\n * - Different diameters affect heat distribution and cooling rates\n *\n * ASME IX RULES (QW-452.3):\n * The code defines three diameter ranges with specific breakpoints:\n *\n * METRIC:\n * - Test on ≤25mm OD: Qualifies from test diameter to unlimited\n * - Test on >25mm and ≤73mm OD: Qualifies from 25mm to unlimited\n * - Test on >73mm OD: Qualifies from 73mm to unlimited\n *\n * IMPERIAL:\n * - Test on ≤1\" OD: Qualifies from test diameter to unlimited\n * - Test on >1\" and ≤2.875\" OD: Qualifies from 1\" to unlimited\n * - Test on >2.875\" OD: Qualifies from 2.875\" to unlimited\n *\n * RATIONALE: Testing on smaller diameter pipes demonstrates greater skill because\n * they're more difficult to weld. The breakpoints (25mm/1\" and 73mm/2.875\") are\n * standard pipe size categories. A welder qualified on small pipe is approved for\n * larger pipe, but not the reverse.\n *\n * IMPLEMENTATION NOTE: The method returns minimum qualified diameter (either test\n * diameter or a breakpoint) with unlimited maximum. There is no upper diameter limit\n * in ASME IX pipe qualifications.\n *\n * @param testPiece Test piece pipe outside diameter in mm (metric) or inches (imperial)\n * @returns Range with minimum diameter and unlimited (null) maximum\n */\n diameter(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let results = this._emptyRange;\n\n if (this.isMetric) {\n if (testPiece <= 25) {\n // Small pipe: qualified from test diameter up\n results.min = testPiece;\n results.max = null; // Unlimited\n } else if (testPiece > 25 && testPiece <= 73) {\n // Medium pipe: qualified from 25mm up\n results.min = 25;\n results.max = null; // Unlimited\n } else {\n // Large pipe: qualified from 73mm up\n results.min = 73;\n results.max = null; // Unlimited\n }\n } else if (this.isImperial) {\n if (testPiece <= 1) {\n // Small pipe: qualified from test diameter up\n results.min = testPiece;\n results.max = null; // Unlimited\n } else if (testPiece > 1 && testPiece <= 2.875) {\n // Medium pipe: qualified from 1\" up\n results.min = 1;\n results.max = null; // Unlimited\n } else if (testPiece > 2.875) {\n // Large pipe: qualified from 2.875\" up\n results.min = 2.875;\n results.max = null; // Unlimited\n }\n }\n return results;\n }\n\n /**\n * Helper: Filters welding positions by their position codes.\n * Used to convert position code strings into WeldingPosition objects.\n */\n _filterPositions(positions: string[]) {\n return this.allWeldingPositions.filter((position: WeldingPosition) => {\n let { code } = position;\n if (code) {\n return positions.indexOf(code) >= 0;\n } else {\n return false;\n }\n });\n }\n\n /**\n * Determines approved welding positions per ASME IX QW-461.3 through QW-461.9.\n *\n * WELDING PERSPECTIVE:\n * Welding position is one of the most critical qualifications because different positions\n * require completely different techniques and skill levels:\n *\n * GROOVE (G) POSITIONS FOR PLATE:\n * - 1G: Flat - easiest position, weld face approximately horizontal\n * - 2G: Horizontal - weld axis horizontal, face approximately vertical\n * - 3G: Vertical - weld axis vertical\n * - 4G: Overhead - most difficult, welding from underneath\n *\n * GROOVE (G) POSITIONS FOR PIPE:\n * - 1G: Flat/rotated - pipe rotates, welder stationary, easiest\n * - 2G: Horizontal rolled - pipe axis vertical, pipe may rotate\n * - 5G: Multiple/horizontal fixed - pipe horizontal, cannot rotate\n * - 6G: Multiple inclined fixed - pipe at 45° angle, cannot rotate, most difficult\n * - 6GR: 6G with restriction ring - even more difficult\n *\n * FILLET (F) POSITIONS:\n * - 1F: Flat - easiest\n * - 2F: Horizontal\n * - 3F: Vertical\n * - 4F: Overhead\n * - 5F: Multiple (all positions)\n *\n * ASME IX APPROVAL HIERARCHY (QW-461):\n * More difficult positions qualify for easier positions. Key rules:\n * - Groove weld qualification includes fillet weld qualification\n * - 6G/6GR qualifies all positions (the \"universal\" qualification)\n * - 5G qualifies all groove positions except 6G, and all fillet positions\n * - Individual plate positions (1G, 2G, 3G, 4G) each have limited approval\n * - Combined tests (3G+4G, 5G+2G, 2G+3G+4G) offer broader qualification\n *\n * IMPLEMENTATION NOTE: The extensive if/else chain implements the complex ASME IX\n * position qualification matrix. Each test position maps to its approved production\n * positions. The logic is explicit rather than algorithmic to match the code tables\n * exactly and maintain clarity for welding engineers.\n *\n * @param testPiece The welding position used in the qualification test\n * @returns Array of all approved welding positions (groove and fillet)\n */\n weldingPosition(testPiece: WeldingPosition): WeldingPosition[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results = [];\n\n let weldingPosition = testPiece.code;\n if (!weldingPosition) {\n return [];\n }\n\n // 1G (Flat groove) - qualifies: 1G groove and 1F fillet only\n if (weldingPosition === '1G') {\n results = this._filterPositions(['1G', '1F']);\n }\n // 2G (Horizontal groove) - qualifies: 1G, 2G groove and 1F, 2F fillet\n else if (weldingPosition === '2G') {\n results = this._filterPositions(['1G', '2G', '1F', '2F']);\n }\n // 2G+3G+4G (Combined plate test) - qualifies: 1G-6G groove, 1F-5F fillet\n else if (weldingPosition === '2G+3G+4G') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n }\n // 3G (Vertical groove) - qualifies: 1G, 3G groove and 1F, 2F, 3F fillet\n else if (weldingPosition === '3G') {\n results = this._filterPositions(['1G', '3G', '1F', '2F', '3F']);\n }\n // 4G (Overhead groove) - qualifies: 1G, 4G groove and 1F, 2F, 4F fillet\n else if (weldingPosition === '4G') {\n results = this._filterPositions(['1G', '4G', '1F', '2F', '4F']);\n }\n // 3G+4G (Vertical + Overhead) - qualifies: 1G, 3G, 4G groove and 1F-5F fillet\n else if (weldingPosition === '3G+4G') {\n results = this._filterPositions(['1G', '3G', '4G', '1F', '2F', '3F', '4F', '5F']);\n }\n // 5G (Horizontal fixed pipe) - qualifies: 1G, 3G, 4G, 5G groove and all fillet\n else if (weldingPosition === '5G') {\n results = this._filterPositions(['1G', '3G', '4G', '5G', '1F', '2F', '3F', '4F', '5F']);\n }\n // 5G+2G (Pipe with 2G added) - qualifies: All groove and fillet positions\n else if (weldingPosition === '5G+2G') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n }\n // 6G (Inclined fixed pipe) - The \"universal\" qualification for all positions except 6GR\n else if (weldingPosition === '6G') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n }\n // 6GR (6G with restriction) - Qualifies for ALL positions including 6G\n else if (weldingPosition === '6GR') {\n results = this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n }\n // 1F (Flat fillet) - qualifies: 1F only\n else if (weldingPosition === '1F') {\n results = this._filterPositions(['1F']);\n }\n // 2F (Horizontal fillet) - qualifies: 1F, 2F\n else if (weldingPosition === '2F') {\n results = this._filterPositions(['1F', '2F']);\n }\n // 3F (Vertical fillet) - qualifies: 1F, 2F, 3F\n else if (weldingPosition === '3F') {\n results = this._filterPositions(['1F', '2F', '3F']);\n }\n // 4F (Overhead fillet) - qualifies: 1F, 2F, 4F\n else if (weldingPosition === '4F') {\n results = this._filterPositions(['1F', '2F', '4F']);\n }\n // 3F+4F (Vertical + Overhead fillet) - qualifies: All fillet positions\n else if (weldingPosition === '3F+4F') {\n results = this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n }\n // 5F (Multiple fillet) - qualifies: All fillet positions\n else if (weldingPosition === '5F') {\n results = this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n }\n // Default: Unknown position code, qualify only the exact position tested\n else {\n results = this._filterPositions([weldingPosition]);\n }\n return results;\n }\n\n /**\n * Helper: Filters filler material groups by their group names.\n * Used to convert group name strings into FillerMaterialGroup objects.\n */\n _filterFillerMaterialGroups(groupToSelect: string[]) {\n let results: FillerMaterialGroup[] = [];\n groupToSelect.forEach((groupCode) => {\n let candidate = this.allFillerMaterials.findBy('groupName', groupCode);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n /**\n * Determines approved filler material groups per ASME IX QW-432.\n *\n * WELDING PERSPECTIVE:\n * Filler materials (electrodes, wires, rods) are consumables that provide\n * the deposited weld metal. They are classified by:\n * - Chemical composition and alloying elements\n * - Mechanical properties (strength, toughness, ductility)\n * - Usability characteristics (arc stability, slag removal, position capability)\n * - Coating type (for SMAW) or wire composition (for GMAW/FCAW)\n *\n * ASME IX F-NUMBER SYSTEM (QW-432):\n * Filler materials are assigned F-Numbers based on usability characteristics.\n * Key F-Number groups include:\n * - F-1 through F-5: Steel filler metals (SMAW electrodes)\n * - F-6: Various processes and materials\n * - F-21 through F-25: Aluminum filler metals\n * - F-31 through F-35: Titanium filler metals\n * - F-41 through F-49: Nickel filler metals\n *\n * APPROVAL HIERARCHY:\n * ASME IX defines a hierarchical system where qualification with certain\n * F-Numbers qualifies for other F-Numbers:\n * - Group 1 materials (F-1, F-2, F-3, F-4): Lowest tier, qualifies Group 1 only\n * - Group 2 materials: Qualifies Groups 1 and 2\n * - Group 3 materials: Qualifies Groups 1, 2, and 3\n * - Group 4 materials: Qualifies Groups 1, 2, 3, and 4\n * - Group 5 materials: Qualifies Groups 1 and 5\n * - Group 6, 30-40, 50: Separate qualification requirements\n *\n * The hierarchy recognizes that certain fillers require more skill (e.g., low hydrogen\n * electrodes) and qualification with these qualifies for \"easier\" fillers.\n *\n * IMPLEMENTATION NOTE: This method delegates to CertificateFillerRules which\n * implements the complex F-Number approval hierarchy from ASME IX QW-432.\n *\n * @param testPiece The filler material used in the qualification test\n * @returns Array of all approved filler material groups\n */\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n let group: FillerMaterialGroup = get(testPiece, 'group');\n let groupCode: string = '';\n if (group) {\n groupCode = get(group, 'groupName') || '';\n }\n\n let results: FillerMaterialGroup[] = [];\n\n // Group 1: Qualifies Group 1 only\n if (CertificateFillerRules.isFillerMaterialGroup1(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n }\n // Group 2: Qualifies Groups 1 and 2\n else if (CertificateFillerRules.isFillerMaterialGroup2(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial2Groups())\n );\n }\n // Group 3: Qualifies Groups 1, 2, and 3\n else if (CertificateFillerRules.isFillerMaterialGroup3(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial2Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial3Groups())\n );\n }\n // Group 4: Qualifies Groups 1, 2, 3, and 4 (broadest qualification for this family)\n else if (CertificateFillerRules.isFillerMaterialGroup4(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial2Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial3Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial4Groups())\n );\n }\n // Group 5: Qualifies Groups 1 and 5\n else if (CertificateFillerRules.isFillerMaterialGroup5(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial1Groups())\n );\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial5Groups())\n );\n }\n // Group 6: Qualifies Group 6 only (special materials)\n else if (CertificateFillerRules.isFillerMaterialGroup6(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial6Groups())\n );\n }\n // Groups 30-40: Aluminum fillers (qualify within range)\n else if (CertificateFillerRules.isFillerMaterialGroupRange30to40(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial30to40Groups())\n );\n }\n // Group 50: Special materials (qualify Group 50 only)\n else if (CertificateFillerRules.isFillerMaterialGroup50(groupCode)) {\n results.pushObjects(\n this._filterFillerMaterialGroups(CertificateFillerRules.getFillerMaterial50Groups())\n );\n }\n // Unknown/other groups: qualify only the specific F-Number tested\n else {\n results.pushObjects(this._filterFillerMaterialGroups([groupCode]));\n }\n return results;\n }\n\n /**\n * Calculates internal continuity deadline per ASME IX QW-322.\n *\n * WELDING PERSPECTIVE:\n * ASME IX requires welders to maintain continuity to keep their qualification valid.\n * This is based on the principle that welding skills deteriorate without practice.\n *\n * ASME IX RULES (QW-322):\n * A welder must perform at least one production weld using each qualified process\n * every 6 months. If the welder doesn't weld for 6 consecutive months, their\n * qualification lapses and they must requalify.\n *\n * RATIONALE: The 6-month continuity requirement ensures welders maintain current\n * skills and familiarity with the welding processes. It's less stringent than\n * other codes (e.g., EN 287 requires quarterly) but more than some (ISO 9606\n * allows 2 years in some cases).\n *\n * IMPLEMENTATION NOTE: This method calculates the deadline by adding 6 months\n * to the previous weld date. The company must track each welder's last weld\n * date for each qualified process to manage continuity.\n *\n * @param previousDate Date of last production weld with this qualification\n * @returns Date when continuity expires (6 months from previous date)\n */\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n /**\n * Calculates external periodic requalification deadline (employer-imposed).\n *\n * WELDING PERSPECTIVE:\n * While ASME IX requires only 6-month continuity, many employers impose\n * additional periodic requalification requirements as part of their quality\n * management system. This is common in industries with high safety requirements.\n *\n * EMPLOYER POLICIES:\n * Typical requalification periods:\n * - Nuclear: Often annual or biennial retesting\n * - Pressure vessels: Commonly 2-3 years\n * - Structural: Varies widely by contractor\n * - Pipeline: Often follows company-specific schedules\n *\n * RATIONALE: Periodic requalification provides:\n * - Verification of continued skill proficiency\n * - Detection of any performance degradation\n * - Confidence for clients and inspectors\n * - Documentation for quality audits\n *\n * IMPLEMENTATION NOTE: This is NOT an ASME IX requirement - it's employer-imposed.\n * The requalificationPeriod value is stored with the certificate and represents\n * the company's policy. If not set, returns null (no external deadline).\n *\n * @param previousDate Date of last qualification or requalification test\n * @returns Date when periodic requalification is due, or null if not required\n */\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n // Check if employer has imposed a periodic requalification requirement\n if (this.requalificationPeriod && !isNaN(parseInt(`${this.requalificationPeriod}`))) {\n let newDate = moment(previousDate).add(this.requalificationPeriod, 'y');\n return newDate.toDate();\n }\n\n // No external deadline - employer doesn't require periodic requalification\n return null;\n }\n\n /**\n * Returns empty array - ASME IX does not have operator-specific welding details.\n *\n * WELDING PERSPECTIVE: This method is part of the interface to support welding\n * operator qualifications (WOPQ) which may have additional welding detail requirements\n * beyond those for manual welders. ASME IX Section IX is primarily focused on\n * welder performance qualifications (WPQ) rather than operators.\n *\n * @returns Empty array as ASME IX has no operator-specific welding details\n */\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return [];\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport moment from 'moment';\nimport { isGMAW, isFCAW } from 'weldnote/utils/rules/welding-process';\nimport { isGlobular, isPulsedSpray, isSpray } from 'weldnote/src-weldnote/welding/transfer-mode';\nimport {\n isSingleSideNoBacking,\n isSingleSideMaterialBacking,\n isSingleSideGasBacking,\n} from 'weldnote/utils/rules/welding-detail';\nimport {\n isFilletWeld,\n isButtWeld,\n isOverlayWeld,\n isPartialPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldType from 'weldnote/models/weld-type';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n NumericalRange,\n WelderCertificateApprovalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\n\nconst { PRODUCT_TYPE, WELDING_DETAILS, UNIT_SYSTEM } = Constants;\n\nexport default class AwsB21ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem: string) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this.allWeldingDetails = data.allWeldingDetails;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.unitSystem = unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS B2.1 Approval Ranges');\n }\n }\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n processMecanization(_testPiece: ProcessMecanization): ProcessMecanization[] {\n return [];\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeTypeRoot(electrode);\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n _findWeldingPositions(codes: string[] = []): WeldingPosition[] {\n let results: WeldingPosition[] = [];\n codes.forEach((position) => {\n let foundPosition = this.allWeldingPositions.findBy('code', position);\n if (foundPosition) {\n results.push(foundPosition);\n }\n });\n return results;\n }\n\n weldingPosition(position: WeldingPosition): WeldingPosition[] {\n if (isEmpty(position)) {\n return [];\n }\n let { code } = position;\n if (!code) {\n return [];\n }\n let result = [code];\n if (this.isPlate) {\n if (code === '1G') {\n result = ['1G', '1F'];\n } else if (code === '2G') {\n result = ['1G', '1F', '2G', '2F'];\n } else if (code === '3G') {\n result = ['1G', '3G', '1F', '2F', '3F'];\n } else if (code === '4G') {\n result = ['1G', '4G', '1F', '2F', '4F'];\n } else if (code === '3G+4G') {\n result = ['1G', '3G', '4G', '1F', '2F', '3F', '4F'];\n } else if (code === '2G+3G+4G') {\n result = ['1G', '2G', '3G', '4G', '5G', '6G', '1F', '2F', '3F', '4F', '5F'];\n } else if (code === '1F') {\n result = ['1F'];\n } else if (code === '2F') {\n result = ['1F', '2F'];\n } else if (code === '3F') {\n result = ['1F', '2F', '3F'];\n } else if (code === '4F') {\n result = ['1F', '2F', '4F'];\n } else if (code === '3F+4F') {\n result = ['1F', '2F', '3F', '4F', '5F'];\n } else {\n result = [code];\n }\n } else if (this.isPipe || this.isPipePlate) {\n if (code === '1G') {\n result = ['1G', '1F', '2F'];\n } else if (code === '2G') {\n result = ['1G', '1F', '2G', '2F'];\n } else if (code === '3G') {\n result = ['1G', '3G', '1F', '2F', '3F'];\n } else if (code === '4G') {\n result = ['1G', '4G', '1F', '2F', '4F'];\n } else if (code === '5G') {\n result = ['1G', '3G', '4G', '5G', '1F', '2F', '3F', '4F', '5F'];\n } else if (code === '6G') {\n result = ['1G', '2G', '3G', '4G', '5G', '6G', '1F', '2F', '3F', '4F', '5F'];\n } else if (code === '1F') {\n result = ['1F'];\n } else if (code === '2F') {\n result = ['1F', '2F'];\n } else if (code === '3F') {\n result = ['1F', '2F', '3F'];\n } else if (code === '4F') {\n result = ['1F', '2F', '4F'];\n } else if (code === '5F') {\n result = ['1F', '2F', '3F', '4F', '5F'];\n } else {\n result = [code];\n }\n }\n\n return this._findWeldingPositions(result);\n }\n\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n if (this.requalificationPeriod && !isNaN(parseInt(`${this.requalificationPeriod}`))) {\n let newDate = moment(previousDate).add(this.requalificationPeriod, 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n\n weldingProcessRoot(process: WeldingProcess): WeldingProcess[] {\n return this._weldingProcess(process, this.transferModeRoot);\n }\n\n weldingProcessFill(process: WeldingProcess): WeldingProcess[] {\n return this._weldingProcess(process, this.transferModeFill);\n }\n\n weldingProcessCap(process: WeldingProcess): WeldingProcess[] {\n return this._weldingProcess(process, this.transferModeCap);\n }\n\n _weldingProcess(process: WeldingProcess, transferMode: ArcTransferMode) {\n if (isEmpty(process)) {\n return [];\n }\n\n if (\n isGMAW(process) &&\n (isSpray(transferMode) || isGlobular(transferMode) || isPulsedSpray(transferMode))\n ) {\n return this.allWeldingProcesses.filter((process) => {\n return isGMAW(process) || isFCAW(process);\n });\n }\n\n return this.allWeldingProcesses.filter((p) => {\n return p.shortDesignation === process.shortDesignation;\n });\n }\n\n _findWeldingDetails(details: string[] = []) {\n let results: WeldingDetail[] = [];\n details.forEach((detail) => {\n let detailInstance = this.allWeldingDetails.findBy('shortDesignation', detail);\n if (detailInstance) {\n results.pushObject(detailInstance);\n }\n });\n return results;\n }\n\n weldingDetails(details: WeldingDetail[]): WeldingDetail[] {\n let result: WeldingDetail[] = [];\n if (isSingleSideNoBacking(details)) {\n result.pushObjects(\n this._findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n } else if (isSingleSideGasBacking(details)) {\n result.pushObjects(\n this._findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n } else if (isSingleSideMaterialBacking(details)) {\n result.pushObjects(this._findWeldingDetails([WELDING_DETAILS.BOTH_SIDES]));\n }\n\n details.forEach((position) => {\n result.pushObject(position);\n });\n\n return result;\n }\n\n _toRange(min: number, max: number | null): NumericalRange {\n return {\n min,\n max,\n };\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n diameter(testPiece: number): NumericalRange {\n if (!testPiece) {\n return this._emptyRange;\n }\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n if (this.isMetric) {\n if (testPiece <= 25) {\n return this._toRange(testPiece, null);\n } else if (testPiece > 25 && testPiece <= 73) {\n return this._toRange(25, null);\n } else if (testPiece > 73) {\n return this._toRange(73, null);\n }\n } else if (this.isImperial) {\n if (testPiece <= 1) {\n return this._toRange(testPiece, null);\n } else if (testPiece > 1 && testPiece <= 2.875) {\n return this._toRange(1, null);\n } else if (testPiece > 2.875) {\n return this._toRange(2.875, null);\n }\n }\n return this._emptyRange;\n }\n\n get isButtWeldOrPartialPenetrationWeld() {\n return (\n isButtWeld(this.weldTypeTestPiece) || isPartialPenetrationButtWeld(this.weldTypeTestPiece)\n );\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n thickness(testPiece: number): NumericalRange {\n if (this.isButtWeldOrPartialPenetrationWeld || this.isOverlayWeld) {\n if (this.isMetric) {\n if (testPiece < 19) {\n return this._toRange(0, 2 * testPiece);\n } else if (testPiece >= 19) {\n return this._toRange(0, null);\n }\n } else if (this.isImperial) {\n if (testPiece < 0.75) {\n return this._toRange(0, 2 * testPiece);\n } else if (testPiece >= 0.75) {\n return this._toRange(0, null);\n }\n }\n } else if (this.isFilletWeld) {\n return this._toRange(0, null);\n }\n\n return this._emptyRange;\n }\n\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n\n let materialGroup = get(testPiece, 'materialGroup');\n let groupNumber = '';\n if (materialGroup) {\n groupNumber = get(materialGroup, 'groupNumber') || '';\n }\n let groups1 = [\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '10',\n '11',\n '34',\n '41',\n '42',\n '43',\n '44',\n '45',\n '46',\n '47',\n ];\n if (groups1.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups1.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups2 = ['21', '22', '23', '24', '25', '26', '27'];\n if (groups2.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups2.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups3 = ['31', '32', '33', '35'];\n if (groups3.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n return get(material, 'groupNumber') === groupNumber;\n });\n }\n\n let groups4 = ['34', '42'];\n if (groups4.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return ['34', '41', '42', '43', '44', '45', '46', '47'].includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups5 = ['51', '52', '53', '54', '61', '62'];\n if (groups5.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups5.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n let groups6 = ['81', '83'];\n if (groups6.includes(groupNumber)) {\n return this.allBaseMaterials.filter((material) => {\n let groupNumber = get(material, 'groupNumber');\n if (groupNumber) {\n return groups6.includes(groupNumber);\n } else {\n return false;\n }\n });\n }\n\n // TP = AR\n return this.allBaseMaterials.filter((material) => get(material, 'groupNumber') === groupNumber);\n }\n\n parseGroupNumber(number: string | undefined): number {\n if (isEmpty(number)) {\n return NaN;\n }\n if (!number) {\n return NaN;\n }\n let result = parseInt(number, 10);\n if (!isNaN(result)) {\n return result;\n }\n let match = number.match(/\\d+/g);\n if (match && !isEmpty(match)) {\n let [numericValue] = match;\n return parseInt(numericValue);\n }\n return NaN;\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (!testPiece && isEmpty(testPiece)) {\n return [];\n }\n\n let group = get(testPiece, 'group');\n let groupNumber = this.parseGroupNumber(get(group, 'groupNumber'));\n if (isNaN(groupNumber)) {\n return [get(testPiece, 'group')];\n }\n\n if (groupNumber >= 1 && groupNumber <= 5) {\n return this.allFillerMaterials.filter((m) => {\n return this.parseGroupNumber(m.groupNumber) <= groupNumber;\n });\n }\n\n if (groupNumber === 6) {\n return this.allFillerMaterials.filter((m) => {\n return this.parseGroupNumber(m.groupNumber) === 6;\n });\n }\n\n if (groupNumber >= 20 && groupNumber <= 29) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber >= 20 && currentGroupNumber <= 29;\n });\n }\n\n if (groupNumber >= 30 && groupNumber <= 39) {\n return [group];\n }\n\n if (groupNumber >= 40 && groupNumber <= 49) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return (\n (currentGroupNumber >= 1 && currentGroupNumber <= 5) ||\n (currentGroupNumber >= 40 && currentGroupNumber <= 49)\n );\n });\n }\n\n if (groupNumber >= 50 && groupNumber <= 59) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber >= 50 && currentGroupNumber <= 59;\n });\n }\n\n if (groupNumber === 61) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber === 61;\n });\n }\n\n if (groupNumber === 71) {\n return [group];\n }\n\n if (groupNumber === 91) {\n return this.allFillerMaterials.filter((m) => {\n let currentGroupNumber = this.parseGroupNumber(m.groupNumber);\n return currentGroupNumber === 91;\n });\n }\n\n return [group];\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n if (isButtWeld(testPiece)) {\n return this.allWeldTypes.filter(\n (weldType) =>\n isPartialPenetrationButtWeld(weldType) || isFilletWeld(weldType) || isButtWeld(weldType)\n );\n } else if (isFilletWeld(testPiece)) {\n return [testPiece];\n } else if (isOverlayWeld(testPiece)) {\n return [testPiece];\n } else if (isPartialPenetrationButtWeld(testPiece)) {\n return this.allWeldTypes.filter(\n (weldType) => isFilletWeld(weldType) || isPartialPenetrationButtWeld(weldType)\n );\n }\n return [testPiece];\n }\n\n shielding(testPiece: WeldingProcess): string | null {\n if (testPiece) {\n let designation = get(testPiece, 'shortDesignation');\n return calculateShielding(designation);\n } else {\n return null;\n }\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n return [testPiece];\n }\n\n electrodeTypeRoot(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n electrodeTypeFill(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n electrodeTypeCap(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n throw new Error('Method not implemented.');\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport WeldType from 'weldnote/models/weld-type';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport {\n WelderCertificateApprovalRange,\n NumericalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isCompleteJointPenetrationButtWeld,\n isFilletWeld,\n isPartialJointPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\n\nconst { ARC_TRANSFER_MODES, WELDING_DETAILS, UNIT_SYSTEM, PRODUCT_TYPE } = Constants;\n\nexport default class AwsD11ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this.allWeldingDetails = data.allWeldingDetails;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.unitSystem = unitSystem;\n }\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n processMecanization(_testPiece: ProcessMecanization): ProcessMecanization[] {\n return [];\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isPartialJointPenetrationButtWeld() {\n return isPartialJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get isCompleteJointPenetrationButtWeld() {\n return isCompleteJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeTypeRoot(electrode);\n }\n\n electrodeTypeRoot(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeFill(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeCap(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n _electrodeType(electrode: ElectrodeType /* , weldingProcess */) {\n if (isEmpty(electrode)) {\n return [];\n }\n return [electrode];\n }\n\n thickness(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let thickness = parseFloat(`${testPiece}`);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let diameter = this.certificate.get('diameterTestPiece');\n\n let result = this._emptyRange;\n\n if (\n (this.isCompleteJointPenetrationButtWeld || this.isPartialJointPenetrationButtWeld) &&\n this.isPlate\n ) {\n if (this.isMetric) {\n if (thickness <= 10) {\n result.min = 3;\n result.max = 20;\n } else if (thickness > 10 && thickness < 25) {\n result.min = 3;\n result.max = thickness * 2;\n } else {\n result.min = 3;\n result.max = null;\n }\n } else if (this.isImperial) {\n if (thickness <= 0.375) {\n result.min = 0.125;\n result.max = 0.75;\n } else if (thickness > 0.375 && thickness < 1) {\n result.min = 0.125;\n result.max = thickness * 2;\n } else {\n result.min = 0.125;\n result.max = null;\n }\n }\n } else if (this.isFilletWeld) {\n if (!isEmpty(thickness)) {\n if (this.isMetric) {\n result.min = 3;\n result.max = null;\n } else if (this.isImperial) {\n result.min = 0.125;\n result.max = null;\n }\n }\n } else if (\n (this.isCompleteJointPenetrationButtWeld || this.isPartialJointPenetrationButtWeld) &&\n this.isPipe\n ) {\n if (diameter) {\n if (this.isMetric) {\n if (thickness > 10 && diameter > 100) {\n result.min = 5;\n result.max = null;\n } else if (thickness <= 10 && diameter > 100) {\n result.min = 3;\n result.max = 20;\n } else if (diameter <= 100 && !isEmpty(thickness)) {\n result.min = 3;\n result.max = 20;\n }\n } else if (this.isImperial) {\n if (thickness <= 0.375 && diameter > 4) {\n result.min = 0.125;\n result.max = 0.75;\n } else if (thickness > 0.375 && diameter > 4) {\n result.min = 0.1875;\n result.max = null;\n } else if (diameter <= 4 && !isEmpty(thickness)) {\n result.min = 0.125;\n result.max = 0.75;\n }\n }\n }\n }\n\n return result;\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n if (isCompleteJointPenetrationButtWeld(testPiece)) {\n return this.allWeldTypes.filter((e) => {\n return (\n isFilletWeld(e) ||\n isPartialJointPenetrationButtWeld(e) ||\n isCompleteJointPenetrationButtWeld(e)\n );\n });\n } else {\n return [testPiece];\n }\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let arcTransferMode = get(testPiece, 'transferMode');\n\n if (arcTransferMode === ARC_TRANSFER_MODES.SHORT_ARC) {\n return [testPiece];\n }\n if (\n arcTransferMode === ARC_TRANSFER_MODES.GLOBULAR ||\n arcTransferMode === ARC_TRANSFER_MODES.PULSED_SPRAY ||\n arcTransferMode === ARC_TRANSFER_MODES.SPRAY\n ) {\n return this.allTransferModes.filter((e) => {\n let currentMode = get(e, 'transferMode');\n return (\n currentMode === ARC_TRANSFER_MODES.PULSED_SPRAY ||\n currentMode === ARC_TRANSFER_MODES.GLOBULAR ||\n currentMode === ARC_TRANSFER_MODES.SPRAY\n );\n });\n }\n return [];\n }\n\n findWeldingDetails(wanted: string[], property: keyof WeldingDetail): WeldingDetail[] {\n let results: WeldingDetail[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingDetails.findBy(property, position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results: WeldingDetail[] = [];\n let finalResults: WeldingDetail[] = [];\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING, WELDING_DETAILS.BOTH_SIDES],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [WELDING_DETAILS.BOTH_SIDES, WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails(\n [\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n ],\n 'shortDesignation'\n )\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.BOTH_SIDES)) {\n results.pushObjects(\n this.findWeldingDetails([WELDING_DETAILS.BOTH_SIDES], 'shortDesignation')\n );\n }\n\n testPiece.forEach((detail) => {\n results.pushObject(detail);\n });\n results.forEach((detail) => {\n if (!finalResults.findBy('shortDesignation', detail.get('shortDesignation'))) {\n finalResults.pushObject(detail);\n }\n });\n return finalResults;\n }\n\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.allBaseMaterials.filter((group) => {\n let { groupName } = group;\n return (\n groupName === 'I' ||\n groupName === 'II' ||\n groupName === 'III' ||\n groupName === 'IV' ||\n groupName === 'Table 4.9'\n );\n });\n }\n\n weldingProcessRoot(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n weldingProcessFill(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n weldingProcessCap(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n shielding(process: WeldingProcess): string | null {\n if (isEmpty(process)) {\n return '';\n }\n return calculateShielding(process.shortDesignation);\n }\n\n diameter(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let results: NumericalRange = { min: null, max: null };\n\n let diameter = parseFloat(`${testPiece}`);\n if (diameter < 0) {\n return results;\n }\n if (this.isMetric) {\n if (this.isPlate) {\n results.min = 600;\n results.max = null;\n } else if (this.isPipe) {\n if (!isNaN(diameter)) {\n if (diameter <= 100) {\n results.min = 20;\n results.max = 100;\n } else {\n results.min = Math.max(100, 0.5 * diameter);\n results.max = null;\n }\n }\n }\n } else if (this.isImperial) {\n if (this.isPlate) {\n results.min = 24;\n results.max = null;\n } else if (this.isPipe) {\n if (!isNaN(diameter)) {\n if (diameter <= 4) {\n results.min = 0.75;\n results.max = 4;\n } else {\n results.min = Math.max(4, 0.5 * diameter);\n results.max = null;\n }\n }\n }\n }\n return results;\n }\n\n filterPositions(wanted: string[]): WeldingPosition[] {\n let results: WeldingPosition[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingPositions.findBy('code', position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingPosition(testPiece: WeldingPosition): WeldingPosition[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results = [];\n let weldingPosition = get(testPiece, 'code');\n if (!weldingPosition) {\n return [];\n }\n\n if (weldingPosition === '1G') {\n results = this.filterPositions(['1G', '1F', '2F']);\n } else if (weldingPosition === '2G') {\n results = this.filterPositions(['1G', '2G', '1F', '2F']);\n } else if (weldingPosition === '3G') {\n results = this.filterPositions(['1G', '2G', '3G', '1F', '2F', '3F']);\n } else if (weldingPosition === '4G') {\n results = this.filterPositions(['1G', '4G', '1F', '2F', '4F']);\n } else if (weldingPosition === '3G+4G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '5G') {\n results = this.filterPositions(['1G', '3G', '4G', '5G', '1F', '3F', '4F', '5F']);\n } else if (weldingPosition === '5G+2G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6GR') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '1F') {\n results = this.filterPositions(['1F']);\n } else if (weldingPosition === '2F') {\n results = this.filterPositions(['1F', '2F']);\n } else if (weldingPosition === '3F') {\n results = this.filterPositions(['1F', '2F', '3F']);\n } else if (weldingPosition === '4F') {\n results = this.filterPositions(['1F', '2F', '4F']);\n } else if (weldingPosition === '5F') {\n results = this.filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else if (weldingPosition === '3F+4F') {\n results = this.filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n return results.sortBy('code');\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [];\n }\n\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let { requalificationPeriod } = this.certificate;\n if (requalificationPeriod) {\n let newDate = moment(previousDate).add(requalificationPeriod, 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n throw new Error('Method not implemented.');\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport WeldType from 'weldnote/models/weld-type';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport moment from 'moment';\nimport {\n WelderCertificateApprovalRange,\n NumericalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isCompleteJointPenetrationButtWeld,\n isFilletWeld,\n isPartialJointPenetrationButtWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport Rules from 'weldnote/utils/welder-certificate-rules';\n\nconst { UNIT_SYSTEM, PRODUCT_TYPE } = Constants;\n\nconst { WELDER_CERTIFICATE } = Rules;\n\nexport default class AwsD15ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.unitSystem = unitSystem;\n }\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n processMecanization(_testPiece: ProcessMecanization): ProcessMecanization[] {\n return [];\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n\n get isEGWorESWProcess() {\n let root = get(this.certificate, WELDER_CERTIFICATE.WELDING_PROCESS_ROOT_TEST_PIECE);\n let fill = get(this.certificate, WELDER_CERTIFICATE.WELDING_PROCESS_FILL_TEST_PIECE);\n let cap = get(this.certificate, WELDER_CERTIFICATE.WELDING_PROCESS_CAP_TEST_PIECE);\n if (root != null) {\n let designation = get(root, 'shortDesignation');\n if (designation === 'EGW' || designation === 'ESW') {\n return true;\n }\n }\n if (fill != null) {\n let designation = get(fill, 'shortDesignation');\n if (designation === 'EGW' || designation === 'ESW') {\n return true;\n }\n }\n if (cap != null) {\n let designation = get(cap, 'shortDesignation');\n if (designation === 'EGW' || designation === 'ESW') {\n return true;\n }\n }\n return false;\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isPartialJointPenetrationButtWeld() {\n return isPartialJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get isCompleteJointPenetrationButtWeld() {\n return isCompleteJointPenetrationButtWeld(this.weldTypeTestPiece);\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeRoot(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeFill(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n electrodeTypeCap(electrode: ElectrodeType) {\n return this._electrodeType(electrode);\n }\n\n _electrodeType(electrode: ElectrodeType /* , weldingProcess */) {\n if (isEmpty(electrode)) {\n return [];\n }\n return [electrode];\n }\n\n thickness(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let thickness = parseFloat(`${testPiece}`);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n\n let result = this._emptyRange;\n\n if (this.isEGWorESWProcess) {\n if (this.isImperial) {\n if (testPiece < 1.5) {\n result.min = 0;\n result.max = testPiece;\n } else {\n result.min = 0;\n result.max = null;\n }\n } else if (this.isMetric) {\n if (testPiece < 38) {\n result.min = 0;\n result.max = testPiece;\n } else {\n result.min = 0;\n result.max = null;\n }\n }\n return result;\n }\n\n if (this.isCompleteJointPenetrationButtWeld || this.isPartialJointPenetrationButtWeld) {\n if (this.isImperial) {\n if (testPiece < 0.375) {\n result.min = 0.125;\n result.max = 0.75\n } else if (testPiece >= 0.375 && testPiece < 1) {\n result.min = 0.125;\n result.max = 2 * testPiece;\n } else if (testPiece >= 1) {\n result.min = 0.125;\n result.max = null;\n }\n } else if (this.isMetric) {\n if (testPiece < 10) {\n result.min = 3;\n result.max = 20;\n } else if (testPiece >= 10 && testPiece < 25) {\n result.min = 3;\n result.max = 2 * testPiece;\n } else if (testPiece >= 25) { \n result.min = 3;\n result.max = null;\n }\n }\n return result;\n } else if (this.isFilletWeld) {\n if (this.isImperial) {\n result.min = 0.125;\n result.max = null;\n } else if (this.isMetric) {\n result.min = 3;\n result.max = null;\n }\n return result;\n }\n\n return result;\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n return [testPiece];\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n return [testPiece];\n }\n\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return testPiece;\n }\n\n baseMaterial(testPiece: BaseMaterial): BaseMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece.materialGroup];\n }\n\n weldingProcessRoot(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n weldingProcessFill(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n weldingProcessCap(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n return [process];\n }\n\n shielding(process: WeldingProcess): string | null {\n if (isEmpty(process)) {\n return '';\n }\n return null;\n }\n\n diameter(testPiece: number): NumericalRange {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n return this._emptyRange;\n }\n\n filterPositions(wanted: string[]): WeldingPosition[] {\n let results: WeldingPosition[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingPositions.findBy('code', position);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingPosition(testPiece: WeldingPosition): WeldingPosition[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n\n let results = [];\n let weldingPosition = get(testPiece, 'code');\n if (!weldingPosition) {\n return [];\n }\n\n if (weldingPosition === '1G') {\n results = this.filterPositions(['1G', '1F', '2F']);\n } else if (weldingPosition === '2G') {\n results = this.filterPositions(['1G', '2G', '1F', '2F']);\n } else if (weldingPosition === '3G') {\n results = this.filterPositions(['1G', '2G', '3G', '1F', '2F', '3F']);\n } else if (weldingPosition === '4G') {\n results = this.filterPositions(['1G', '4G', '1F', '2F', '4F']);\n } else if (weldingPosition === '3G+4G') {\n results = this.filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '1F',\n '2F',\n '3F',\n '4F',\n ]);\n } else if (weldingPosition === '1F') {\n results = this.filterPositions(['1F']);\n } else if (weldingPosition === '2F') {\n results = this.filterPositions(['1F', '2F']);\n } else if (weldingPosition === '3F') {\n results = this.filterPositions(['1F', '2F', '3F']);\n } else if (weldingPosition === '4F') {\n results = this.filterPositions(['1F', '2F', '4F']);\n } else if (weldingPosition === '3F+4F') {\n results = this.filterPositions(['1F', '2F', '3F', '4F']);\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n return results.sortBy('code');\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece.group];\n }\n\n internalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date): Date | null {\n if (isEmpty(previousDate)) {\n return null;\n }\n let { requalificationPeriod } = this.certificate;\n if (requalificationPeriod) {\n let newDate = moment(previousDate).add(requalificationPeriod, 'y');\n return newDate.toDate();\n } else {\n let newDate = moment(previousDate).add(1, 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n throw new Error('Method not implemented.');\n }\n}\n","import WelderCertificate from 'weldnote/models/welder-certificate';\nimport AwsB21ApprovalRanges from './aws-b2-1';\n\nexport default class AwsD143ApprovalRanges extends AwsB21ApprovalRanges {\n constructor(certificate: WelderCertificate, options: any, unitSystem: string) {\n super(certificate, options, unitSystem);\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport moment from 'moment';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport {\n isButtWeld,\n isFilletWeld,\n isPartialPenetrationButtWeldISO,\n isBranchConnection,\n isOverlayWeld,\n} from 'weldnote/utils/rules/weld-type';\nimport {\n convertInchesToMilimeters,\n convertMilimetersToInches,\n} from 'weldnote/utils/unit-system/units';\nimport { formatRangeWith3Decimals } from 'weldnote/utils/unit-system/format';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport WeldType from 'weldnote/models/weld-type';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport IndustryCode from 'weldnote/models/industry-code';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport {\n WelderCertificateApprovalRange,\n NumericalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\n\nconst { ARC_TRANSFER_MODES, WELDING_DETAILS, UNIT_SYSTEM, PRODUCT_TYPE } = Constants;\n\nexport default class Iso96061ApprovalRanges implements WelderCertificateApprovalRange {\n private certificate: WelderCertificate;\n\n private _weldTypes: WeldType[];\n\n private _baseMaterials: BaseMaterialGroup[];\n\n private allWeldingDetails: WeldingDetail[];\n\n private _fillerMaterials: FillerMaterialGroup[];\n\n private _weldingProcesses: WeldingProcess[];\n\n private _weldingPositions: WeldingPosition[];\n\n private _transferModes: ArcTransferMode[];\n\n private allElectrodeTypes: ElectrodeType[];\n\n private unitSystem: string;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem: string) {\n this.certificate = certificate;\n this._weldTypes = data.allWeldTypes;\n this._baseMaterials = data.allBaseMaterials;\n this.allWeldingDetails = data.allWeldingDetails;\n this._fillerMaterials = data.allFillerMaterials;\n this._weldingProcesses = data.allWeldingProcesses;\n this._weldingPositions = data.allWeldingPositions;\n this._transferModes = data.allTransferModes;\n this.allElectrodeTypes = data.allElectrodes;\n this.unitSystem = unitSystem;\n if (unitSystem === null) {\n throw new Error('Unit System is required for AWS B2.1 Approval Ranges');\n }\n }\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n electrodeType(\n electrode: ElectrodeType,\n _processValues: TestPieceValuesSingleProcess\n ): ElectrodeType[] {\n return this.electrodeTypeRoot(electrode);\n }\n\n processMecanization(_testPiece: ProcessMecanization): ProcessMecanization[] {\n return [];\n }\n\n getIndustryCode(code: IndustryCode | undefined): string {\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get industryCodeId() {\n let { standard } = this;\n let code = get(standard, 'code');\n if (code) {\n return get(code, 'id');\n }\n return '';\n }\n\n get allWeldingProcesses() {\n return this._weldingProcesses.filter(\n (process) => this.getIndustryCode(get(process, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldingPositions() {\n return this._weldingPositions.filter(\n (position) => this.getIndustryCode(get(position, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allTransferModes() {\n return this._transferModes.filter(\n (transferMode) =>\n this.getIndustryCode(get(transferMode, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allWeldTypes() {\n return this._weldTypes.filter(\n (weldType) => this.getIndustryCode(get(weldType, 'industryCode')) === this.industryCodeId\n );\n }\n\n get allBaseMaterials() {\n return this._baseMaterials.filter(\n (baseMaterial) => this.getIndustryCode(get(baseMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get allFillerMaterials() {\n return this._fillerMaterials.filter(\n (fillerMaterial) => this.getIndustryCode(get(fillerMaterial, 'code')) === this.industryCodeId\n );\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get isPlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PLATE;\n }\n return false;\n }\n\n get isPipePlate() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE_PLATE;\n }\n return false;\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n get weldTypeTestPiece() {\n return this.certificate.get('weldTypeTestPiece');\n }\n\n get transferModeRoot() {\n return this.certificate.get('arcTransferModeRootTestPiece');\n }\n\n get transferModeFill() {\n return this.certificate.get('arcTransferModeFillTestPiece');\n }\n\n get transferModeCap() {\n return this.certificate.get('arcTransferModeCapTestPiece');\n }\n\n get isMetric() {\n return this.unitSystem === UNIT_SYSTEM.METRIC;\n }\n\n get isSupplementaryFilletWeldTestRequired() {\n let required = this.certificate.get('supplementaryFilletWeldTestRequired');\n return !isEmpty(required) && required;\n }\n\n get isImperial() {\n return this.unitSystem === UNIT_SYSTEM.IMPERIAL;\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.weldTypeTestPiece);\n }\n\n get isButtWeld() {\n return isButtWeld(this.weldTypeTestPiece);\n }\n\n get isPartialPenetrationButtWeld() {\n return isPartialPenetrationButtWeldISO(this.weldTypeTestPiece);\n }\n\n get isBranchConnection() {\n return isBranchConnection(this.weldTypeTestPiece);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.weldTypeTestPiece);\n }\n\n get isPipe() {\n let { productType } = this;\n if (!isEmpty(productType)) {\n return productType === PRODUCT_TYPE.PIPE;\n }\n return false;\n }\n\n get _emptyRange() {\n return {\n min: null,\n max: null,\n };\n }\n\n get weldingProcessRootTestPiece() {\n return get(this.certificate, 'weldingProcessRootTestPiece');\n }\n\n get weldingProcessFillTestPiece() {\n return get(this.certificate, 'weldingProcessFillTestPiece');\n }\n\n get weldingProcessCapTestPiece() {\n return get(this.certificate, 'weldingProcessCapTestPiece');\n }\n\n electrodeTypeRoot(electrode: ElectrodeType) {\n return this._electrodeType(electrode, this.weldingProcessRootTestPiece);\n }\n\n electrodeTypeFill(electrode: ElectrodeType) {\n return this._electrodeType(electrode, this.weldingProcessFillTestPiece);\n }\n\n electrodeTypeCap(electrode: ElectrodeType) {\n return this._electrodeType(electrode, this.weldingProcessCapTestPiece);\n }\n\n filterElectrodeTypes(electrodeCodes: string[]) {\n let results: ElectrodeType[] = [];\n electrodeCodes.forEach((designation) => {\n let candidate = this.allElectrodeTypes.findBy('shortDesignation', designation);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n _electrodeType(electrode: ElectrodeType, weldingProcess: WeldingProcess) {\n if (isEmpty(electrode)) {\n return [];\n }\n\n let weldingProcessName = '';\n if (!isEmpty(weldingProcess)) {\n weldingProcessName = weldingProcess.shortDesignation;\n }\n let electrodeCode = electrode.shortDesignation;\n if (weldingProcessName === '111') {\n if (\n electrodeCode === 'A' ||\n electrodeCode === 'RA' ||\n electrodeCode === 'RB' ||\n electrodeCode === 'RC' ||\n electrodeCode === 'RR' ||\n electrodeCode === 'R'\n ) {\n return this.filterElectrodeTypes(['A', 'RA', 'RB', 'RC', 'RR', 'R']);\n } else if (electrodeCode === 'B') {\n return this.filterElectrodeTypes(['A', 'RA', 'RB', 'RC', 'RR', 'R', 'B']);\n } else if (electrodeCode === 'C') {\n return this.filterElectrodeTypes(['C']);\n }\n } else if (weldingProcessName === '135' || weldingProcessName === '138') {\n if (electrodeCode === 'SW' || electrodeCode === 'MC') {\n return this.filterElectrodeTypes(['SW', 'MC']);\n }\n } else if (weldingProcessName === '136') {\n if (electrodeCode === 'FC (B)') {\n return this.filterElectrodeTypes([\n 'FC (B)',\n 'FC (R)',\n 'FC (P)',\n 'FC (V)',\n 'FC (W)',\n 'FC (Y)',\n 'FC (Z)',\n ]);\n } else if (\n electrodeCode === 'FC (R)' ||\n electrodeCode === 'FC (P)' ||\n electrodeCode === 'FC (V)' ||\n electrodeCode === 'FC (W)' ||\n electrodeCode === 'FC (Y)' ||\n electrodeCode === 'FC (Z)'\n ) {\n return this.filterElectrodeTypes([\n 'FC (R)',\n 'FC (P)',\n 'FC (V)',\n 'FC (W)',\n 'FC (Y)',\n 'FC (Z)',\n ]);\n }\n } else {\n return this.filterElectrodeTypes([electrodeCode]);\n }\n\n return [electrode];\n }\n\n thickness(testPiece: number) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n\n let thickness: number | null = parseFloat(`${testPiece}`);\n if (isNaN(thickness)) {\n return this._emptyRange;\n }\n let result: NumericalRange = this._emptyRange;\n\n if (this.isImperial) {\n thickness = convertInchesToMilimeters(thickness);\n }\n\n if (!thickness) {\n return this._emptyRange;\n }\n\n if (this.isButtWeld || this.isOverlayWeld || this.isPartialPenetrationButtWeld) {\n if (thickness < 3) {\n result.min = thickness;\n result.max = Math.max(3, 2 * thickness);\n } else if (thickness < 12 && thickness >= 3) {\n result.min = 3;\n result.max = 2 * thickness;\n } else {\n result.min = 3;\n result.max = null;\n }\n } else if (this.isFilletWeld) {\n if (thickness < 3) {\n result.min = thickness;\n result.max = Math.max(3, 2 * thickness);\n } else {\n result.min = 3;\n result.max = null;\n }\n }\n\n if (this.isImperial) {\n result.min = convertMilimetersToInches(result.min);\n result.max = convertMilimetersToInches(result.max);\n result = formatRangeWith3Decimals(result);\n }\n\n return result;\n }\n\n weldType(testPiece: WeldType) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results: WeldType[] = [];\n results.pushObject(testPiece);\n if (isButtWeld(testPiece) || isOverlayWeld(testPiece)) {\n if (this.productType === PRODUCT_TYPE.PIPE) {\n let [branchConnection] = this.allWeldTypes.filter((e) => isBranchConnection(e));\n results.pushObject(branchConnection);\n }\n if (this.isSupplementaryFilletWeldTestRequired) {\n let [filletWeld] = this.allWeldTypes.filter((e) => isFilletWeld(e));\n results.pushObject(filletWeld);\n }\n if (isButtWeld(testPiece)) {\n let [partialPenetration] = this.allWeldTypes.filter((e) =>\n isPartialPenetrationButtWeldISO(e)\n );\n results.pushObject(partialPenetration);\n }\n }\n if (isPartialPenetrationButtWeldISO(testPiece) && this.isSupplementaryFilletWeldTestRequired) {\n let [filletWeld] = this.allWeldTypes.filter((e) => isFilletWeld(e));\n results.pushObject(filletWeld);\n }\n\n return results;\n }\n\n transferMode(testPiece: ArcTransferMode) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let arcTransferMode = get(testPiece, 'transferMode');\n\n if (arcTransferMode === ARC_TRANSFER_MODES.SHORT_ARC) {\n return this.allTransferModes.filter((e) => {\n let currentMode = get(e, 'transferMode');\n return (\n currentMode === ARC_TRANSFER_MODES.PULSED_SPRAY ||\n currentMode === ARC_TRANSFER_MODES.GLOBULAR ||\n currentMode === ARC_TRANSFER_MODES.SPRAY ||\n currentMode === ARC_TRANSFER_MODES.SHORT_ARC\n );\n });\n }\n\n return [testPiece];\n }\n\n findWeldingDetails(wanted: string[]) {\n let results: WeldingDetail[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingDetails.findBy('shortDesignation', position);\n if (candidate && !isEmpty(candidate)) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingDetails(testPiece: WeldingDetail[]) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let results: WeldingDetail[] = [];\n let finalResults: WeldingDetail[] = [];\n\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_NO_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n }\n if (\n testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING) ||\n testPiece.findBy('shortDesignation', WELDING_DETAILS.BOTH_SIDES)\n ) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.CONSUMABLE_INSERT)) {\n results.pushObjects(\n this.findWeldingDetails([\n WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING,\n WELDING_DETAILS.BOTH_SIDES,\n WELDING_DETAILS.CONSUMABLE_INSERT,\n ])\n );\n }\n if (testPiece.findBy('shortDesignation', WELDING_DETAILS.MULTI_LAYER)) {\n results.pushObjects(\n this.findWeldingDetails([WELDING_DETAILS.SINGLE_LAYER, WELDING_DETAILS.MULTI_LAYER])\n );\n }\n\n testPiece.forEach((detail) => {\n results.pushObject(detail);\n });\n results.forEach((detail) => {\n if (!finalResults.findBy('shortDesignation', detail.get('shortDesignation'))) {\n finalResults.pushObject(detail);\n }\n });\n return finalResults;\n }\n\n baseMaterial(testPiece: BaseMaterial) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [];\n }\n\n _filterProcessByName(processes: string[]) {\n let result: WeldingProcess[] = [];\n processes.forEach((processName) => {\n let process = this.allWeldingProcesses.findBy('shortDesignation', processName);\n if (process) {\n result.pushObject(process);\n }\n });\n return result;\n }\n\n _calculateWeldingProcess(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n let result: WeldingProcess[] = [];\n let processName = process.shortDesignation;\n if ('135' === processName || '138' === processName) {\n result = this._filterProcessByName(['135', '138']);\n }\n if ('121' === processName || '125' === processName) {\n result = this._filterProcessByName(['121', '125']);\n }\n if ('141' === processName || '143' === processName || '145' === processName) {\n result = this._filterProcessByName(['141', '142', '143', '145']);\n }\n\n if (isEmpty(result)) {\n result = [process];\n }\n return result;\n }\n\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this._calculateWeldingProcess(process);\n }\n\n shielding(process: WeldingProcess) {\n if (isEmpty(process)) {\n return null;\n }\n return calculateShielding(process.shortDesignation);\n }\n\n diameter(testPiece: number) {\n if (isEmpty(testPiece)) {\n return this._emptyRange;\n }\n let results: NumericalRange = this._emptyRange;\n\n let diameter: number | null = parseFloat(`${testPiece}`);\n if (!diameter) {\n return this._emptyRange;\n }\n\n if (diameter < 0) {\n return results;\n }\n if (this.isImperial) {\n diameter = convertInchesToMilimeters(diameter);\n }\n if (!diameter) {\n return this._emptyRange;\n }\n\n if (diameter <= 25) {\n results.min = diameter;\n results.max = 2 * diameter;\n } else {\n results.min = Math.max(25, 0.5 * diameter);\n results.max = null;\n }\n if (this.isImperial) {\n results.min = convertMilimetersToInches(results.min);\n results.max = convertMilimetersToInches(results.max);\n results = formatRangeWith3Decimals(results);\n }\n return results;\n }\n\n filterPositions(wanted: string[]) {\n let results: WeldingPosition[] = [];\n wanted.forEach((position) => {\n let candidate = this.allWeldingPositions.findBy('code', position);\n if (candidate && !isEmpty(candidate)) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n weldingPosition(testPiece: WeldingPosition) {\n if (isEmpty(testPiece)) {\n return [];\n }\n\n let results: WeldingPosition[] = [];\n let weldingPosition = get(testPiece, 'code');\n\n if (this.isFilletWeld) {\n if (weldingPosition === 'PA') {\n return this.filterPositions(['PA']);\n } else if (weldingPosition === 'PB') {\n return this.filterPositions(['PA', 'PB']);\n } else if (weldingPosition === 'PC') {\n return this.filterPositions(['PA', 'PB', 'PC']);\n } else if (weldingPosition === 'PD' || weldingPosition === 'PE') {\n return this.filterPositions(['PA', 'PB', 'PC', 'PD', 'PE']);\n } else if (weldingPosition === 'PF') {\n return this.filterPositions(['PA', 'PB', 'PF']);\n } else if (weldingPosition === 'PH') {\n return this.filterPositions(['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PH']);\n } else if (weldingPosition === 'PG') {\n return this.filterPositions(['PG']);\n } else if (weldingPosition === 'PJ') {\n return this.filterPositions(['PA', 'PB', 'PD', 'PE', 'PG', 'PJ']);\n }\n } else if (this.isButtWeld || this.isOverlayWeld || this.isPartialPenetrationButtWeld) {\n if (weldingPosition === 'PA') {\n results = this.filterPositions(['PA']);\n } else if (weldingPosition === 'PC') {\n results = this.filterPositions(['PA', 'PC']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB']));\n }\n } else if (weldingPosition === 'PE') {\n results = this.filterPositions(['PA', 'PC', 'PE']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'PF') {\n results = this.filterPositions(['PA', 'PF']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB']));\n }\n } else if (weldingPosition === 'PH') {\n results = this.filterPositions(['PA', 'PF', 'PE', 'PH']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'PG') {\n return this.filterPositions(['PG']);\n } else if (weldingPosition === 'PJ') {\n results = this.filterPositions(['PA', 'PE', 'PG', 'PJ']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'PF+PC') {\n results = this.filterPositions(['PA', 'PC', 'PE', 'PF']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'H-L045' || weldingPosition === 'PH+PC') {\n results = this.filterPositions(['PA', 'PC', 'PE', 'PF', 'PH', 'H-L045']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else if (weldingPosition === 'J-L045' || weldingPosition === 'PJ+PC') {\n results = this.filterPositions(['PA', 'PC', 'PE', 'PG', 'PJ', 'J-L045']);\n if (this.isSupplementaryFilletWeldTestRequired) {\n results.pushObjects(this.filterPositions(['PB', 'PD']));\n }\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n } else {\n results = this.filterPositions([weldingPosition]);\n }\n return results.sortBy('code');\n }\n\n _filterFillerMaterialGroups(groupToSelect: string[]) {\n let results: FillerMaterialGroup[] = [];\n groupToSelect.forEach((groupCode) => {\n let candidate = this.allFillerMaterials.findBy('groupName', groupCode);\n if (candidate) {\n results.pushObject(candidate);\n }\n });\n return results;\n }\n\n fillerMaterial(testPiece: FillerMaterial) {\n if (isEmpty(testPiece)) {\n return [];\n }\n let materialGroup = get(testPiece, 'group');\n let groupCode = get(materialGroup, 'groupName');\n if (groupCode === 'FM1' || groupCode === 'FM2') {\n return this._filterFillerMaterialGroups(['FM1', 'FM2']);\n } else if (groupCode === 'FM3') {\n return this._filterFillerMaterialGroups(['FM1', 'FM2', 'FM3']);\n } else if (groupCode === 'FM4') {\n return this._filterFillerMaterialGroups(['FM1', 'FM2', 'FM3', 'FM4']);\n } else if (groupCode === 'FM5') {\n return this._filterFillerMaterialGroups(['FM5']);\n } else if (groupCode === 'FM6') {\n return this._filterFillerMaterialGroups(['FM5', 'FM6']);\n }\n return [];\n }\n\n internalDeadline(previousDate: Date) {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date) {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let requalificationPeriod = this.certificate.get('requalificationPeriod');\n if (!isNaN(parseInt(`${requalificationPeriod}`))) {\n let newDate = moment(previousDate).add(parseInt(`${requalificationPeriod}`), 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n throw new Error('Method not implemented.');\n }\n}\n","import { isEmpty } from '@ember/utils';\nimport moment from 'moment';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport NonSupportedApprovalRange from './non-supported';\n\nexport default class Iso96062ApprovalRanges extends NonSupportedApprovalRange {\n certificate: WelderCertificate;\n\n constructor(certificate: WelderCertificate, _allData: any) {\n super();\n this.certificate = certificate;\n }\n\n internalDeadline(previousDate: Date | null) {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let newDate = moment(previousDate).add(6, 'M');\n return newDate.toDate();\n }\n\n externalDeadline(previousDate: Date | null) {\n if (isEmpty(previousDate)) {\n return null;\n }\n\n let requalificationPeriod = this.certificate.get('requalificationPeriod');\n if (!isNaN(parseInt(`${requalificationPeriod}`))) {\n let newDate = moment(previousDate).add(parseInt(`${requalificationPeriod}`), 'y');\n return newDate.toDate();\n }\n\n return null;\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport FillerMaterialGroup from 'weldnote/models/filler-material-group';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport WeldType from 'weldnote/models/weld-type';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport {\n NumericalRange,\n WelderCertificateApprovalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\n\nexport default class NonSupportedApprovalRange implements WelderCertificateApprovalRange {\n constructor() {}\n\n automaticJointTracking(\n _testPiece: AutomaticJointTracking | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return [];\n }\n\n automaticVoltageControl(\n _testPiece: AutomaticArcVoltageControl | null,\n _process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return [];\n }\n\n visualControl(\n _testPiece: VisualControl | null,\n _process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return [];\n }\n\n processMecanization(_testPiece: ProcessMecanization): ProcessMecanization[] {\n return [];\n }\n\n get _emptyRange(): NumericalRange {\n return {\n min: null,\n max: null,\n };\n }\n\n electrodeType(testPiece: ElectrodeType): ElectrodeType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n electrodeTypeRoot(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n electrodeTypeFill(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n electrodeTypeCap(testPiece: ElectrodeType): ElectrodeType[] {\n return [testPiece];\n }\n\n thickness(): NumericalRange {\n return this._emptyRange;\n }\n\n weldType(testPiece: WeldType): WeldType[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n transferMode(testPiece: ArcTransferMode): ArcTransferMode[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n weldingDetails(testPiece: WeldingDetail[]): WeldingDetail[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n return testPiece;\n }\n\n baseMaterial(_testPiece: BaseMaterial): BaseMaterialGroup[] {\n return [];\n }\n\n weldingProcessRoot(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n\n return [process];\n }\n\n weldingProcessFill(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n\n return [process];\n }\n\n weldingProcessCap(process: WeldingProcess): WeldingProcess[] {\n if (isEmpty(process)) {\n return [];\n }\n\n return [process];\n }\n\n shielding(process: WeldingProcess): string | null {\n if (isEmpty(process)) {\n return null;\n }\n\n return null;\n }\n\n diameter(): NumericalRange {\n return this._emptyRange;\n }\n\n weldingPosition(testPiece: WeldingPosition) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return [testPiece];\n }\n\n fillerMaterial(testPiece: FillerMaterial): FillerMaterialGroup[] {\n if (isEmpty(testPiece)) {\n return [];\n }\n if (get(testPiece, 'group')) {\n return [get(testPiece, 'group')];\n }\n return [];\n }\n\n internalDeadline(_previousDate: Date): Date | null {\n return null;\n }\n\n externalDeadline(_previousDate: Date): Date | null {\n return null;\n }\n\n weldingDetailsForOperator(\n _testPiece: WeldingOperatorSpecificWeldingDetails,\n _process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n throw new Error('Method not implemented.');\n }\n}\n","import { isEmpty } from '@ember/utils';\nimport {\n isStandardAWSB21,\n isStandardAWSD143,\n isStandardASME,\n isStandardAWSD11,\n isWelderStandardISO96061,\n isWelderStandardISO96062,\n isStandardAWSD15,\n} from 'weldnote/utils/standards';\nimport AwsB21ApprovalRanges from './aws-b2-1';\nimport AwsD143ApprovalRanges from './aws-d14-3';\nimport CertificateAsmeIxApprovalRanges from './asme-ix';\nimport AwsD11ApprovalRanges from './aws-d1-1';\nimport Iso96061ApprovalRanges from './iso-9606-1';\nimport Iso96062ApprovalRanges from './iso-9606-2';\n\nimport Constants from 'weldnote/utils/constants';\nimport NotSupportedApprovalRanges from './non-supported';\nimport WelderCertificate from 'weldnote/models/welder-certificate';\nimport {\n NumericalRange,\n WelderCertificateApprovalRange,\n} from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport BaseMaterial from 'weldnote/models/base-material';\nimport ElectrodeType from 'weldnote/models/electrode-type';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport WeldType from 'weldnote/models/weld-type';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport ProcessMecanization from 'weldnote/models/process-mecanization';\nimport {\n AutomaticJointTracking,\n TestPieceValuesSingleProcess,\n AutomaticArcVoltageControl,\n VisualControl,\n WeldingOperatorSpecificWeldingDetails,\n} from 'weldnote/src-weldnote/wopq/types';\nimport AwsD15ApprovalRanges from './aws-d1-5';\n\nconst { UNIT_SYSTEM } = Constants;\n\nexport default class WpqApprovalRange implements WelderCertificateApprovalRange {\n certificate: WelderCertificate;\n\n approvalRange: WelderCertificateApprovalRange;\n\n data: any;\n\n constructor(certificate: WelderCertificate, data: any, unitSystem = UNIT_SYSTEM.METRIC) {\n this.certificate = certificate;\n this.data = data;\n let allData = {\n allWeldTypes: data.weldTypeOptions,\n allBaseMaterials: data.allBaseMaterialGroups,\n allWeldingDetails: data.weldingDetailOptions,\n allProcessMecanizations: data.processMecanizationOptions,\n allTypeCurrentPolarity: data.typeCurrentPolarityOptions,\n allWeldingPositions: data.weldingPositionOptions,\n allTransferModes: data.arcTransferModeOptions,\n allWeldingProcesses: data.weldingProcessOptions,\n allFillerMaterials: data.allFillerMaterialGroups,\n allElectrodes: data.electrodeTypeOptions,\n unitSystem,\n };\n\n if (isStandardASME(this.standard)) {\n this.approvalRange = new CertificateAsmeIxApprovalRanges(certificate, allData, unitSystem);\n } else if (isStandardAWSD11(this.standard)) {\n this.approvalRange = new AwsD11ApprovalRanges(certificate, allData, unitSystem);\n } else if (isStandardAWSD15(this.standard)) {\n this.approvalRange = new AwsD15ApprovalRanges(certificate, allData, unitSystem);\n } else if (isWelderStandardISO96061(this.standard)) {\n this.approvalRange = new Iso96061ApprovalRanges(certificate, allData, unitSystem);\n } else if (isWelderStandardISO96062(this.standard)) {\n this.approvalRange = new Iso96062ApprovalRanges(certificate, allData);\n } else if (isStandardAWSB21(this.standard)) {\n this.approvalRange = new AwsB21ApprovalRanges(certificate, allData, unitSystem);\n } else if (isStandardAWSD143(this.standard)) {\n this.approvalRange = new AwsD143ApprovalRanges(certificate, allData, unitSystem);\n } else {\n this.approvalRange = new NotSupportedApprovalRanges();\n }\n }\n\n automaticJointTracking(\n testPiece: AutomaticJointTracking | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticJointTracking[] {\n return this.approvalRange.automaticJointTracking(testPiece, process);\n }\n\n automaticVoltageControl(\n testPiece: AutomaticArcVoltageControl | null,\n process: TestPieceValuesSingleProcess\n ): AutomaticArcVoltageControl[] {\n return this.approvalRange.automaticVoltageControl(testPiece, process);\n }\n\n visualControl(\n testPiece: VisualControl | null,\n process: TestPieceValuesSingleProcess\n ): VisualControl[] {\n return this.approvalRange.visualControl(testPiece, process);\n }\n\n processMecanization(\n testPiece: ProcessMecanization,\n processValues: TestPieceValuesSingleProcess\n ): ProcessMecanization[] {\n return this.approvalRange.processMecanization(testPiece, processValues);\n }\n\n get standard() {\n return this.certificate.get('standard');\n }\n\n get productType() {\n return this.certificate.get('productTypeTestPiece');\n }\n\n get diameterValue() {\n return this.certificate.get('diameterTestPiece');\n }\n\n get weldingProcessRootName() {\n let weldingProcess = this.certificate.get('weldingProcessRootTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldingProcessFillName() {\n let weldingProcess = this.certificate.get('weldingProcessFillTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldingProcessCapName() {\n let weldingProcess = this.certificate.get('weldingProcessCapTestPiece');\n if (!isEmpty(weldingProcess)) {\n return weldingProcess.shortDesignation;\n }\n return '';\n }\n\n get weldTypeCode() {\n let weldType = this.certificate.get('weldTypeTestPiece');\n if (!isEmpty(weldType)) {\n return weldType.weldType;\n }\n return '';\n }\n\n get supplementaryFilletWeldTestRequired() {\n return this.certificate.get('supplementaryFilletWeldTestRequired');\n }\n\n get requalificationPeriod() {\n return this.certificate.get('requalificationPeriod');\n }\n\n electrodeType(electrode: ElectrodeType, processValues: TestPieceValuesSingleProcess) {\n return this.approvalRange.electrodeType(electrode, processValues);\n }\n\n thickness(testPiece: number) {\n return this.approvalRange.thickness(testPiece);\n }\n\n weldType(testPiece: WeldType) {\n return this.approvalRange.weldType(testPiece);\n }\n\n transferMode(testPiece: ArcTransferMode, processValues: TestPieceValuesSingleProcess) {\n return this.approvalRange.transferMode(testPiece, processValues);\n }\n\n weldingDetails(testPiece: WeldingDetail[]) {\n return this.approvalRange.weldingDetails(testPiece);\n }\n\n baseMaterial(testPiece: BaseMaterial) {\n return this.approvalRange.baseMaterial(testPiece);\n }\n\n weldingProcessRoot(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n return this.approvalRange.weldingProcessRoot(process);\n }\n\n weldingProcessFill(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n\n return this.approvalRange.weldingProcessFill(process);\n }\n\n weldingProcessCap(process: WeldingProcess) {\n if (isEmpty(process)) {\n return [];\n }\n return this.approvalRange.weldingProcessCap(process);\n }\n\n shielding(process: WeldingProcess) {\n if (isEmpty(process)) {\n return null;\n }\n\n return this.approvalRange.shielding(process);\n }\n\n diameter(testPiece: number): NumericalRange {\n return this.approvalRange.diameter(testPiece);\n }\n\n weldingPosition(testPiece: WeldingPosition, processValues: TestPieceValuesSingleProcess) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.approvalRange.weldingPosition(testPiece, processValues);\n }\n\n fillerMaterial(testPiece: FillerMaterial, processValues: TestPieceValuesSingleProcess) {\n if (isEmpty(testPiece)) {\n return [];\n }\n return this.approvalRange.fillerMaterial(testPiece, processValues);\n }\n\n internalDeadline(previousDate: Date) {\n return this.approvalRange.internalDeadline(previousDate);\n }\n\n externalDeadline(previousDate: Date) {\n return this.approvalRange.externalDeadline(previousDate);\n }\n\n weldingDetailsForOperator(\n testPiece: WeldingOperatorSpecificWeldingDetails,\n process: TestPieceValuesSingleProcess\n ): WeldingOperatorSpecificWeldingDetails[] {\n return this.approvalRange.weldingDetailsForOperator(testPiece, process);\n }\n}\n","import WpsValidation from 'weldnote/utils/validation/wps-from-pqr';\nimport Rules from 'weldnote/utils/welding-procedure-specification-rules';\nimport { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = Rules;\n\nconst { WELDING_POSITION_DIRECTION_OPTIONS } = Constants;\n\nexport default class AwsB21Validator extends WpsValidation {\n constructor(validations, wps, intl, units) {\n super(validations, wps, intl, units);\n }\n\n get isFillerMaterialRootValid() {\n let fillerMaterial = this._wpsFillerMaterialRoot;\n if (!isEmpty(fillerMaterial)) {\n if (this._hasImpactRequirements()) {\n let pqrMaterialId = get(this.validations, 'fillerMaterialRoot.value');\n let fillerMaterialId = get(fillerMaterial, 'id');\n if (!isEmpty(pqrMaterialId)) {\n return pqrMaterialId === fillerMaterialId;\n }\n } else {\n let pqrMaterialGroupId = get(this.validations, 'fillerMaterialRootGroup.value');\n if (!isEmpty(pqrMaterialGroupId)) {\n let groupId = get(fillerMaterial, 'group.id');\n return pqrMaterialGroupId === groupId;\n }\n }\n }\n return true;\n }\n\n get fillerMaterialRootInvalidMessage() {\n let fillerMaterial = this._wpsFillerMaterialRoot;\n if (!isEmpty(fillerMaterial)) {\n if (this._hasImpactRequirements()) {\n let { value: pqrMaterialId, label } = get(this.validations, 'fillerMaterialRoot');\n if (!isEmpty(pqrMaterialId) && pqrMaterialId !== get(fillerMaterial, 'id')) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material.same-material', {\n fillerMaterial: label,\n })\n .toString();\n }\n } else {\n let { value: pqrMaterialGroupId, label } = get(this.validations, 'fillerMaterialRootGroup');\n if (\n !isEmpty(pqrMaterialGroupId) &&\n pqrMaterialGroupId !== get(fillerMaterial, 'group.id')\n ) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material.same-group', {\n group: label,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n get isFillerMaterialFillValid() {\n let fillerMaterial = this._wpsFillerMaterialFill;\n if (!isEmpty(fillerMaterial)) {\n if (this._hasImpactRequirements()) {\n let pqrMaterialId = get(this.validations, 'fillerMaterialFill.value');\n let fillerMaterialId = get(fillerMaterial, 'id');\n if (!isEmpty(pqrMaterialId)) {\n return pqrMaterialId === fillerMaterialId;\n }\n } else {\n let pqrMaterialGroupId = get(this.validations, 'fillerMaterialFillGroup.value');\n if (!isEmpty(pqrMaterialGroupId)) {\n let groupId = get(fillerMaterial, 'group.id');\n return pqrMaterialGroupId === groupId;\n }\n }\n }\n return true;\n }\n\n get fillerMaterialFillInvalidMessage() {\n let fillerMaterial = this._wpsFillerMaterialFill;\n if (!isEmpty(fillerMaterial)) {\n if (this._hasImpactRequirements()) {\n let { value: pqrMaterialId, label } = get(this.validations, 'fillerMaterialFill');\n if (!isEmpty(pqrMaterialId) && pqrMaterialId !== get(fillerMaterial, 'id')) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material.same-material', {\n fillerMaterial: label,\n })\n .toString();\n }\n } else {\n let { value: pqrMaterialGroupId, label } = get(this.validations, 'fillerMaterialFillGroup');\n if (\n !isEmpty(pqrMaterialGroupId) &&\n pqrMaterialGroupId !== get(fillerMaterial, 'group.id')\n ) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material.same-group', {\n group: label,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n get isFillerMaterialCapValid() {\n let fillerMaterial = this._wpsFillerMaterialCap;\n if (!isEmpty(fillerMaterial)) {\n if (this._hasImpactRequirements()) {\n let pqrMaterialId = get(this.validations, 'fillerMaterialCap.value');\n let fillerMaterialId = get(fillerMaterial, 'id');\n if (!isEmpty(pqrMaterialId)) {\n return pqrMaterialId === fillerMaterialId;\n }\n } else {\n let pqrMaterialGroupId = get(this.validations, 'fillerMaterialCapGroup.value');\n if (!isEmpty(pqrMaterialGroupId)) {\n let groupId = get(fillerMaterial, 'group.id');\n return pqrMaterialGroupId === groupId;\n }\n }\n }\n return true;\n }\n\n get fillerMaterialCapInvalidMessage() {\n let fillerMaterial = this._wpsFillerMaterialCap;\n if (!isEmpty(fillerMaterial)) {\n if (this._hasImpactRequirements()) {\n let { value: pqrMaterialId, label } = get(this.validations, 'fillerMaterialCap');\n if (!isEmpty(pqrMaterialId) && pqrMaterialId !== get(fillerMaterial, 'id')) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material.same-material', {\n fillerMaterial: label,\n })\n .toString();\n }\n } else {\n let { value: pqrMaterialGroupId, label } = get(this.validations, 'fillerMaterialCapGroup');\n if (\n !isEmpty(pqrMaterialGroupId) &&\n pqrMaterialGroupId !== get(fillerMaterial, 'group.id')\n ) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material.same-group', {\n group: label,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n get isFillerMaterialDiameterRootValid() {\n if (this.isOverlayWeld) {\n let pqrDiametersSerialized = get(this.validations, 'fillerMaterialRootDiameter');\n let wpsDiameters = get(this.wps, 'fillerMaterialRootDiameters');\n if (!isEmpty(pqrDiametersSerialized) && !isEmpty(wpsDiameters)) {\n let pqrDiameters = pqrDiametersSerialized.split(',');\n if (wpsDiameters.length !== pqrDiameters.length) {\n return false;\n }\n\n for (let i = 0; i < pqrDiameters.length; i++) {\n let pqrDiameter = pqrDiameters[i];\n if (wpsDiameters.indexOf(pqrDiameter) < 0) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n get fillerMaterialDiameterRootInvalidMessage() {\n if (this.isOverlayWeld) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.filler-material-diameter.overlay-same', {\n values: get(this.validations, 'fillerMaterialRootDiameter'),\n })\n .toString();\n }\n return '';\n }\n\n get isWeldingPositionRootDirectionValid() {\n let pqrDirection = get(this.validations, 'weldingPositionRootDirection');\n let wpsDirection = get(this.wps, 'weldingPositionRootDirection');\n\n if (!isEmpty(pqrDirection)) {\n if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL) {\n return true;\n } else if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL) {\n return (\n wpsDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL || isEmpty(wpsDirection)\n );\n }\n } else {\n return wpsDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL || isEmpty(wpsDirection);\n }\n return true;\n }\n\n get weldingPositionRootDirectionInvalidMessage() {\n let pqrDirection = get(this.validations, 'weldingPositionRootDirection');\n let wpsDirection = get(this.wps, 'weldingPositionRootDirection');\n\n if (!isEmpty(pqrDirection)) {\n if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL) {\n return true;\n } else if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.welding-position-direction.down-hill-or-nothing')\n .toString();\n }\n } else {\n return this.intl\n .t('model-validations.wps.aws-b2-1.welding-position-direction.down-hill-or-nothing')\n .toString();\n }\n return '';\n }\n\n get isWeldingPositionFillDirectionValid() {\n let pqrDirection = get(this.validations, 'weldingPositionFillDirection');\n let wpsDirection = get(this.wps, 'weldingPositionFillDirection');\n\n if (!isEmpty(pqrDirection)) {\n if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL) {\n return true;\n } else if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL) {\n return (\n wpsDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL || isEmpty(wpsDirection)\n );\n }\n } else {\n return wpsDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL || isEmpty(wpsDirection);\n }\n return true;\n }\n\n get weldingPositionFillDirectionInvalidMessage() {\n let pqrDirection = get(this.validations, 'weldingPositionFillDirection');\n let wpsDirection = get(this.wps, 'weldingPositionFillDirection');\n\n if (!isEmpty(pqrDirection)) {\n if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL) {\n return true;\n } else if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.welding-position-direction.down-hill-or-nothing')\n .toString();\n }\n } else {\n return this.intl\n .t('model-validations.wps.aws-b2-1.welding-position-direction.down-hill-or-nothing')\n .toString();\n }\n return '';\n }\n\n get isWeldingPositionCapDirectionValid() {\n let pqrDirection = get(this.validations, 'weldingPositionCapDirection');\n let wpsDirection = get(this.wps, 'weldingPositionCapDirection');\n\n if (!isEmpty(pqrDirection)) {\n if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL) {\n return '';\n } else if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL) {\n return (\n wpsDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL || isEmpty(wpsDirection)\n );\n }\n } else {\n return wpsDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL || isEmpty(wpsDirection);\n }\n return true;\n }\n\n get weldingPositionCapDirectionInvalidMessage() {\n let pqrDirection = get(this.validations, 'weldingPositionCapDirection');\n\n if (!isEmpty(pqrDirection)) {\n if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL) {\n return '';\n } else if (pqrDirection === WELDING_POSITION_DIRECTION_OPTIONS.DOWNHILL) {\n return this.intl\n .t('model-validations.wps.aws-b2-1.welding-position-direction.down-hill-or-nothing')\n .toString();\n }\n } else {\n return this.intl\n .t('model-validations.wps.aws-b2-1.welding-position-direction.down-hill-or-nothing')\n .toString();\n }\n return '';\n }\n\n get isOverlayNumberOfLayerValid() {\n let pqrLayers = parseInt(get(this.validations, 'overlayNumberOfLayers'));\n let wpsLayers = parseInt(get(this.wps, 'overlayNumberOfLayers'));\n\n if (!isNaN(pqrLayers) && !isNaN(wpsLayers)) {\n if (pqrLayers === 1) {\n return wpsLayers >= 1;\n }\n if (pqrLayers >= 2) {\n return wpsLayers >= 2;\n }\n }\n return true;\n }\n\n get overlayNumberOfLayerInvalidMessage() {\n let pqrLayers = parseInt(get(this.validations, 'overlayNumberOfLayers'));\n let wpsLayers = parseInt(get(this.wps, 'overlayNumberOfLayers'));\n\n if (!isNaN(pqrLayers) && !isNaN(wpsLayers)) {\n return this.intl.t('model-validations.wps.aws-b2-1.overlay-number-layers.must-have', {\n layers: pqrLayers,\n });\n }\n return true;\n }\n}\n","/*\n\nTailwind - The Utility-First CSS Framework\n\nA project by Adam Wathan (@adamwathan), Jonathan Reinink (@reinink),\nDavid Hemphill (@davidhemphill) and Steve Schoger (@steveschoger).\n\nWelcome to the Tailwind config file. This is where you can customize\nTailwind specifically for your project. Don't be intimidated by the\nlength of this file. It's really just a big JavaScript object and\nwe've done our very best to explain each section.\n\nView the full documentation at https://tailwindcss.com.\n\n\n|-------------------------------------------------------------------------------\n| The default config\n|-------------------------------------------------------------------------------\n|\n| This variable contains the default Tailwind config. You don't have\n| to use it, but it can sometimes be helpful to have available. For\n| example, you may choose to merge your custom configuration\n| values with some of the Tailwind defaults.\n|\n*/\n\n// let defaultConfig = require('tailwindcss/defaultConfig')\n\n/*\n|-------------------------------------------------------------------------------\n| Colors https://tailwindcss.com/docs/colors\n|-------------------------------------------------------------------------------\n|\n| Here you can specify the colors used in your project. To get you started,\n| we've provided a generous palette of great looking colors that are perfect\n| for prototyping, but don't hesitate to change them for your project. You\n| own these colors, nothing will break if you change everything about them.\n|\n| We've used literal color names (\"red\", \"blue\", etc.) for the default\n| palette, but if you'd rather use functional names like \"primary\" and\n| \"secondary\", or even a numeric scale like \"100\" and \"200\", go for it.\n|\n*/\n\nmodule.exports = {\n theme: {\n colors: {\n transparent: 'transparent',\n black: '#22292f',\n 'real-black': '#000',\n 'gray-800': '#3d4852',\n 'gray-700': '#606f7b',\n 'gray-600': '#8795a1',\n gray: '#b8c2cc',\n 'gray-400': '#dae1e7',\n 'gray-200': '#f1f5f8',\n 'gray-100': '#f8fafc',\n\n white: '#ffffff',\n 'off-white': '#f7fafc',\n 'grey-weldnote': '#dae1e7',\n\n 'red-900': '#3b0d0c',\n 'red-800': '#621b18',\n 'red-600': '#cc1f1a',\n red: '#e3342f',\n 'red-400': '#ef5753',\n 'red-200': '#f9acaa',\n 'red-100': '#fcebea',\n\n 'yellow-900': '#453411',\n 'yellow-800': '#a77f2e',\n 'yellow-600': '#f2d024',\n yellow: '#ffed4a',\n 'yellow-400': '#fff382',\n 'yellow-200': '#fff9c2',\n 'yellow-100': '#fcfbeb',\n\n 'green-900': '#0f2f21',\n 'green-800': '#1a4731',\n 'green-600': '#1f9d55',\n green: '#38c172',\n 'green-400': '#51d88a',\n 'green-200': '#a2f5bf',\n 'green-100': '#e3fcec',\n\n 'blue-modal': '#2e4050',\n 'blue-900': '#12283a',\n 'blue-800': '#1c3d5a',\n 'blue-600': '#2779bd',\n blue: '#3498db',\n 'blue-400': '#6cb2eb',\n 'blue-200': '#bcdefa',\n 'blue-100': '#eff8ff',\n\n 'purple-900': '#21183c',\n 'purple-800': '#382b5f',\n 'purple-600': '#794acf',\n purple: '#9561e2',\n 'purple-400': '#a779e9',\n 'purple-200': '#d6bbfc',\n 'purple-100': '#f3ebff',\n\n 'orange-900': '#462a16',\n 'orange-800': '#613b1f',\n 'orange-600': '#de751f',\n orange: '#f6993f',\n 'orange-400': '#faad63',\n 'orange-200': '#fcd9b6',\n 'orange-100': '#fff5eb',\n\n // TODO UI: old UI colors that we might want to review and remove them\n 'esab-gray': '#cecfd0',\n 'esab-orange': '#da7129',\n 'esab-darkgrey': '#373338',\n 'esab-background': '#f0f0f0',\n\n // New UI colors for 2021 design\n 'esab-icon-blue': '#0B7DA8',\n 'esab-sidebar-blue': '#c7d0d8',\n 'esab-sidebar-blue-active': '#174167',\n 'esab-sidebar-blue-arrow': '#164167',\n 'esab-black': '#26292A',\n 'esab-primary-blue': '#1A61A1',\n 'esab-primary-blue-light': '#347fc3',\n 'esab-secondary-blue': '#6ca1cd', // this one is not from the designs\n 'esab-card-blue': '#2961A1',\n 'esab-card-secondary-blue': '#6491EB',\n 'esab-red': '#E23900',\n 'esab-red-highlight': '#ed6031',\n 'assembly-color': '#c7074e',\n },\n screens: {\n sm: '576px',\n md: '768px',\n lg: '992px',\n xl: '1200px',\n },\n fontFamily: {\n sans: [\n 'system-ui',\n 'BlinkMacSystemFont',\n '-apple-system',\n 'Segoe UI',\n 'Roboto',\n 'Oxygen',\n 'Ubuntu',\n 'Cantarell',\n 'Fira Sans',\n 'Droid Sans',\n 'Helvetica Neue',\n 'sans-serif',\n ],\n serif: [\n 'Constantia',\n 'Lucida Bright',\n 'Lucidabright',\n 'Lucida Serif',\n 'Lucida',\n 'DejaVu Serif',\n 'Bitstream Vera Serif',\n 'Liberation Serif',\n 'Georgia',\n 'serif',\n ],\n mono: ['Menlo', 'Monaco', 'Consolas', 'Liberation Mono', 'Courier New', 'monospace'],\n museo: ['Museo Sans', 'Roboto', 'sans-serif'],\n },\n fontSize: {\n // xs: '.75rem', // 12px\n sm: '.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n xl: '1.25rem', // 20px\n '2xl': '1.5rem', // 24px\n '3xl': '1.875rem', // 30px\n '4xl': '2.25rem', // 36px\n '5xl': '3rem', // 48px\n '6xl': '4rem', // 64px\n '7xl': '5rem',\n },\n fontWeight: {\n hairline: 100,\n thin: 200,\n light: 300,\n normal: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n extrabold: 800,\n black: 900,\n },\n lineHeight: {\n none: 1,\n tight: 1.25,\n normal: 1.5,\n loose: 2,\n 10: '2.7rem !important',\n },\n letterSpacing: {\n tight: '-0.05em',\n normal: '0',\n wide: '0.05em',\n },\n textColor: (theme) => theme('colors'),\n backgroundColor: (theme) => theme('colors'),\n backgroundSize: {\n auto: 'auto',\n cover: 'cover',\n contain: 'contain',\n },\n borderWidth: {\n default: '1px',\n 0: '0',\n 2: '2px',\n 4: '4px',\n 8: '8px',\n },\n borderColor: (theme) => ({\n default: theme('colors.gray-400'),\n ...theme('colors'),\n }),\n borderRadius: {\n none: '0',\n sm: '.125rem',\n default: '.25rem',\n lg: '.5rem',\n full: '9999px',\n },\n width: {\n auto: 'auto',\n px: '1px',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n 32: '8rem',\n 48: '12rem',\n 64: '16rem',\n 128: '32rem',\n 160: '40rem',\n 184: '46rem',\n '1/2': '50%',\n '1/3': '33.33333%',\n '2/3': '66.66667%',\n '1/4': '25%',\n '3/4': '75%',\n '1/5': '20%',\n '2/5': '40%',\n '3/5': '60%',\n '4/5': '80%',\n '1/6': '16.66667%',\n '5/6': '83.33333%',\n full: '100%',\n screen: '100vw',\n },\n height: {\n auto: 'auto',\n px: '1px',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 24: '6rem',\n 32: '8rem',\n 48: '12rem',\n 64: '16rem',\n full: '100%',\n screen: '100vh',\n },\n minWidth: {\n 0: '0',\n full: '100%',\n },\n minHeight: {\n 0: '0',\n full: '100%',\n },\n maxWidth: {\n xs: '20rem',\n sm: '30rem',\n md: '40rem',\n lg: '50rem',\n xl: '60rem',\n '2xl': '70rem',\n '3xl': '80rem',\n '4xl': '90rem',\n '5xl': '100rem',\n full: '100%',\n },\n maxHeight: {\n full: '100%',\n screen: '100vh',\n },\n padding: {\n px: '1px',\n 0: '0',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n 32: '8rem',\n },\n margin: {\n auto: 'auto',\n px: '1px',\n 0: '0',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n 32: '8rem',\n // Negative\n '-px': '-1px',\n '-0': '0',\n '-1': '-0.25rem',\n '-2': '-0.5rem',\n '-3': '-0.75rem',\n '-4': '-1rem',\n '-5': '-1.25rem',\n '-6': '-1.5rem',\n '-8': '-2rem',\n '-10': '-2.5rem',\n '-12': '-3rem',\n '-16': '-4rem',\n '-20': '-5rem',\n '-24': '-6rem',\n '-32': '-8rem',\n },\n boxShadow: {\n default: '0 2px 4px 0 rgba(0,0,0,0.10)',\n md: '0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08)',\n lg: '0 15px 30px 0 rgba(0,0,0,0.11), 0 5px 15px 0 rgba(0,0,0,0.08)',\n inner: 'inset 0 2px 4px 0 rgba(0,0,0,0.06)',\n outline: '0 0 0 3px rgba(52,144,220,0.5)',\n none: 'none',\n },\n zIndex: {\n auto: 'auto',\n 0: 0,\n 10: 10,\n 20: 20,\n 30: 30,\n 40: 40,\n 50: 50,\n },\n opacity: {\n 0: '0',\n 10: '.1',\n 20: '.20',\n 25: '.25',\n 50: '.5',\n 75: '.75',\n 100: '1',\n },\n fill: {\n current: 'currentColor',\n },\n stroke: {\n current: 'currentColor',\n },\n },\n\n variants: {\n appearance: [],\n backgroundAttachment: [],\n backgroundColor: ['hover', 'group-hover'],\n backgroundPosition: [],\n backgroundRepeat: [],\n backgroundSize: [],\n borderCollapse: [],\n borderColor: ['focus', 'hover'],\n borderRadius: ['hover'],\n borderStyle: [],\n borderWidth: [],\n cursor: ['hover'],\n display: [],\n flexDirection: [],\n flexWrap: [],\n alignItems: [],\n alignSelf: [],\n justifyContent: [],\n alignContent: [],\n flex: [],\n flexGrow: [],\n flexShrink: [],\n float: [],\n fontFamily: [],\n fontWeight: [],\n height: [],\n lineHeight: [],\n listStylePosition: [],\n listStyleType: [],\n margin: ['responsive'],\n maxHeight: [],\n maxWidth: [],\n minHeight: [],\n minWidth: [],\n negativeMargin: [],\n opacity: [],\n outline: [],\n overflow: [],\n padding: [],\n pointerEvents: [],\n position: [],\n inset: [],\n resize: [],\n boxShadow: ['hover'],\n fill: [],\n stroke: [],\n textAlign: [],\n textColor: ['hover', 'group-hover', 'focus'],\n fontSize: [],\n fontStyle: ['hover'],\n fontSmoothing: ['hover'],\n textDecoration: ['hover'],\n textTransform: ['hover'],\n letterSpacing: [],\n userSelect: [],\n verticalAlign: [],\n visibility: [],\n whitespace: [],\n wordBreak: [],\n width: ['responsive'],\n zIndex: [],\n },\n\n corePlugins: {\n container: false,\n },\n\n /*\n |-----------------------------------------------------------------------------\n | Plugins https://tailwindcss.com/docs/plugins\n |-----------------------------------------------------------------------------\n |\n | Here is where you can register any plugins you'd like to use in your\n | project. Tailwind's built-in `container` plugin is enabled by default to\n | give you a Bootstrap-style responsive container component out of the box.\n |\n | Be sure to view the complete plugin documentation to learn more about how\n | the plugin system works.\n |\n */\n\n plugins: [],\n};\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{t \\\"weldcloud.settings.links.licences\\\"}}\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.accounts as |account|}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"account-admin.table-account-label\\\"}}{{t \\\"account-admin.table-role-label\\\"}}
{{account.name}} ({{account.email}})\\n \\n {{role.name}}\\n \\n
{{t \\\"account-admin.table-no-results\\\"}}
\\n\\n\\n{{#if this.showConfirmModal}}\\n \\n \\n
\\n
\\n

{{t\\n \\\"account-admin.confirm-role-update-message\\\"\\n accountName=this.currentAccount.name\\n newRole=this.newRole.name\\n oldRole=this.oldRole.name\\n }}

\\n
\\n
\\n
\\n \\n
\\n \\n {{t \\\"account-admin.confirm-role-update-yes-btn\\\"}}\\n
\\n
\\n \\n{{/if}}', { moduleName: 'weldnote/templates/account-admin.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"action-log-list.page-title\\\"}}

\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{account.name}}\\n \\n \\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n \\n {{action.label}}\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |logInstance|}}\\n \\n \\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"action-log-list.author-column-title\\\"}}{{t \\\"action-log-list.what-column-title\\\"}}{{t \\\"action-log-list.which-column-title\\\"}}{{t \\\"action-log-list.when-column-title\\\"}}
{{logInstance.author}}{{t (concat \\\"components.action-log/display.\\\" logInstance.actionId)}}{{format-date date=logInstance.actionTime format=this.dateTimeFormat}}
{{t \\\"action-log-list.no-actions\\\"}}
\\n \\n', { moduleName: 'weldnote/templates/action-logs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n

\\n Staff console for finding and fixing drift between Notes and the OrgApi. The panels are in the\\n order you normally use them: find, triage, diagnose, fix. New here? Read Instructions first.\\n Every call acts on any tenant and is refused (403) for anyone but the staff account.\\n

\\n\\n
\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n {{! Not collapsible: the other panels\\' Dossier buttons open rows here, which needs it mounted. }}\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n
\\n', { moduleName: 'weldnote/templates/admin-tools.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.hasSession}}\\n
\\n
\\n \\n \\n\\n
\\n
\\n
\\n \\n {{#if this.userSession.isAccountLocked}}\\n \\n {{/if}}\\n {{#if this.userSession.isTrial}}\\n \\n {{/if}}\\n
\\n \\n {{outlet}}\\n
\\n
\\n \\n{{else}}\\n
\\n {{outlet}}\\n
\\n{{/if}}\\n
\\n\\n{{#if this.showAlertLogout}}\\n \\n \\n

{{t \\\"components.inspinia-config.unsaved-work\\\"}}

\\n
\\n \\n
\\n {{t \\\"application.go-back-button\\\"}}\\n \\n
\\n
\\n \\n{{/if}}', { moduleName: 'weldnote/templates/application.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/arc-transfer-mode.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/arc-transfer-mode/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |arcTransfer|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.arc-transfer-mode.transferMode.label\\\"}}{{t \\\"model.arc-transfer-mode.industryCode.label\\\"}}
{{arcTransfer.transferMode}}{{arcTransfer.industryCode.code}}
\\n
', { moduleName: 'weldnote/templates/arc-transfer-modes.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n
\\n
\\n \\n

\\n Invalid URL\\n

\\n

\\n The link you followed doesn\\'t match any page in WeldCloud Notes. Please check the URL and\\n try again.\\n

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

\\n If you believe this is an error, please contact WeldCloud Notes support.\\n

\\n
\\n
\\n
', { moduleName: 'weldnote/templates/bad-url.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/base-material-group.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/base-material-group/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/base-material-groups.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/base-material.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/base-material/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canCreateBaseMaterial}}\\n \\n {{/if}}\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n
\\n
\\n \\n \\n {{option.code}}\\n \\n \\n
\\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n\\n
', { moduleName: 'weldnote/templates/base-materials.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/certification-special-requirement.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/certification-special-requirement/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |requirement|}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.certification-special-requirement.name.label\\\"}}{{t \\\"model.certification-special-requirement.description.label\\\"}}
{{requirement.name}}{{requirement.description}}
\\n\\n
\\n
', { moduleName: 'weldnote/templates/certification-special-requirements.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.companies.messages.help1\\\"}}
\\n
{{t \\\"routes.companies.messages.help2\\\"}}
\\n
\\n\\n
\\n \\n \\n \\n \\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n\\n
\\n\\n
\\n
\\n {{t \\\"routes.companies.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.companies.title.current-companies\\\"}}\\n
\\n
\\n \\n
\\n
\\n\\n
\\n
\\n \\n
\\n {{t \\\"routes.companies.messages.company-not-displayed\\\"}}\\n
\\n
\\n \\n \\n {{t \\\"routes.companies.buttons.sync-companies\\\"}}\\n \\n
\\n
\\n
\\n\\n
', { moduleName: 'weldnote/templates/companies.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/company.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/component-drawing.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/component-drawing/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.component-drawings.messages.help\\\"}}
\\n
\\n {{#if this.userSession.canCreateComponentDrawing}}\\n \\n {{/if}}\\n
\\n\\n
\\n
\\n {{t \\\"routes.general-drawings.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n {{t \\\"list-view.clear-button\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.component-drawings.title.current-reports\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/component-drawings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{@value}}', { moduleName: 'weldnote/templates/components/fleet-machine-selector/machine-select.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n

{{this.value}}

\\n
', { moduleName: 'weldnote/templates/components/model-welder-certificate/arc-length-control-approval-range.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n

{{this.value}}

\\n
', { moduleName: 'weldnote/templates/components/model-welder-certificate/joint-tracking-approval-range.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n

{{this.value}}

\\n
', { moduleName: 'weldnote/templates/components/model-welder-certificate/visual-control-approval-range.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n

{{this.value}}

\\n
', { moduleName: 'weldnote/templates/components/model-welder-certificate/welding-operator-welding-detail-approval-range.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (eq @unitSystem \\\"I\\\")}}\\n in\\n{{else if (eq @unitSystem \\\"M\\\")}}\\n mm\\n{{/if}}', { moduleName: 'weldnote/templates/components/unit-system-badge.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (has-value @row.diameter)}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.diameter}}\\n (mm)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.diameter}}\\n (in)\\n {{/if}}\\n{{/if}}', { moduleName: 'weldnote/templates/components/weldnote-grid/pqr-diameter.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (has-value @row.heatInput)}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.heatInput}}\\n (kj/mm)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.heatInput}}\\n (kj/in)\\n {{/if}}\\n{{/if}}', { moduleName: 'weldnote/templates/components/weldnote-grid/pqr-heat-input.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (has-value @row.preHeat)}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.preHeat}}\\n (ºC)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.preHeat}}\\n (ºF)\\n {{/if}}\\n{{/if}}', { moduleName: 'weldnote/templates/components/weldnote-grid/pqr-preheat.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (has-value @row.postWeldHeatTreament)}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.postWeldHeatTreament}}\\n (ºC)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.postWeldHeatTreament}}\\n (ºF)\\n {{/if}}\\n{{/if}}', { moduleName: 'weldnote/templates/components/weldnote-grid/pqr-pwht.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if (has-value @row.totalThickness)}}\\n {{#if (eq @row.unitSystem \\\"M\\\")}}\\n {{@row.totalThickness}}\\n (mm)\\n {{else if (eq @row.unitSystem \\\"I\\\")}}\\n {{@row.totalThickness}}\\n (in)\\n {{/if}}\\n{{/if}}', { moduleName: 'weldnote/templates/components/weldnote-grid/wpq-thickness.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/construction-standard.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/construction-standard/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n \\n\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |standard|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.construction-standard.designation.label\\\"}}{{t \\\"model.construction-standard.industryCode.label\\\"}}
{{standard.designation}}{{standard.industryCode.code}}
\\n
', { moduleName: 'weldnote/templates/construction-standards.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/destructive-testing.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/destructive-testing/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |testing|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.destructive-testing.designation.label\\\"}}
{{testing.designation}}
\\n
', { moduleName: 'weldnote/templates/destructive-testings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/digitalize-pqr.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/digitalize-welder-certificate.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/electrode-type.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/electrode-type/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |electrode|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.electrode-type.longDesignation.label\\\"}}{{t \\\"model.electrode-type.shortDesignation.label\\\"}}
{{electrode.longDesignation}}{{electrode.shortDesignation}}
\\n
', { moduleName: 'weldnote/templates/electrode-types.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n
\\n
\\n \\n

\\n Access Denied\\n

\\n

\\n You don\\'t have permission to view this document\\n

\\n
\\n\\n {{#if this.hasSiteInfo}}\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n

\\n Site Access Required\\n

\\n
\\n

\\n You are trying to access a\\n {{this.documentLabel}}\\n ({{this.documentType}}) that belongs to the site\\n {{this.siteLabel}}, but you don\\'t have access to\\n this site.\\n

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

\\n What can you do?\\n

\\n
\\n
    \\n
  • Contact your site administrator to request access
  • \\n
  • Verify that you\\'re logged into the correct account
  • \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n \\n\\n \\n \\n Contact Support\\n \\n
\\n
\\n {{/if}}\\n\\n
\\n

\\n If you believe this is an error, please contact WeldCloud Notes support\\n

\\n
\\n
\\n
', { moduleName: 'weldnote/templates/error-not-allowed-site.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n

Error

\\n

An error has occurred

\\n\\n
\\n Sorry, it appears that an error has occured!\\n
\\n
', { moduleName: 'weldnote/templates/error.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.examining-bodies.messages.help\\\"}}
\\n
\\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{/if}}\\n
\\n\\n
\\n \\n {{t \\\"routes.examining-bodies.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n\\n\\n
\\n \\n {{t \\\"routes.examining-bodies.title.current-examining-bodies\\\"}}\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/examining-bodies.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/examining-body.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/examining-body/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/filler-material-commercial-designation.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/filler-material-commercial-designation/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/filler-material-commercial-designations.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/filler-material-group.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/filler-material-group/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/filler-material-groups.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/filler-material.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/filler-material/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canCreateFillerMaterial}}\\n \\n {{/if}}\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n\\n', { moduleName: 'weldnote/templates/filler-materials.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/fitter.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n {{t \\\"indusuite.apps.settings.messages.personnel-managed\\\"}}\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.fitters.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.fitters.title.current-fitters\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/fitters.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/flux-commercial-designation.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/flux-commercial-designation/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/flux-commercial-designations.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/flux-specification.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/flux-specification/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |flux|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.flux-specification.specification.label\\\"}}
{{flux.specification}}
\\n
', { moduleName: 'weldnote/templates/flux-specifications.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/flux.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/flux/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/fluxes.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/gas-commercial-designation.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/gas-commercial-designation/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/gas-commercial-designations.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/gas-specification.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/gas-specification/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |gas|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.gas-specification.specification.label\\\"}}
{{gas.specification}}
\\n
', { moduleName: 'weldnote/templates/gas-specifications.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/gas.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/gas/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/gases.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/general-drawing.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/general-drawing/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.general-drawings.messages.help\\\"}}
\\n
\\n {{#if this.userSession.canCreateGeneralDrawing}}\\n \\n {{/if}}\\n
\\n\\n
\\n
\\n {{t \\\"routes.general-drawings.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n {{t \\\"list-view.clear-button\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.general-drawings.title.current-reports\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/general-drawings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/groove-design.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/groove-design/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/groove-designs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/help-center.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
This shows the IEIS Archived Page
\\n
\\n
\\n\\n
\\n \\n IEIS Archived\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/ieis-archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/ieis-edit.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreateWPS}}\\n \\n \\n {{/if}}\\n \\n \\n {{t \\\"routes.ieis.buttons.find-qualified\\\"}}\\n \\n \\n\\n\\n\\n
\\n
\\n {{t \\\"routes.ieis.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if (not (has-value this.selectedStandard.id))}}\\n {{t\\n \\\"pqr-list.search-parameters.help.standard\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n {{#if this.isStandardSelected}}\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n {{#if this.showDissimilarMaterials}}\\n \\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.dissimilarMaterials}}\\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{inspection.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"wps-list.buttons.search\\\"}}\\n {{#unless this.isStandardSelected}}\\n \\n {{/unless}}\\n \\n \\n \\n \\n
\\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.ieis.title.search-results\\\"}}\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"list-view.export-excel-btn\\\"}}\\n \\n \\n \\n
\\n\\n \\n
\\n
', { moduleName: 'weldnote/templates/ieis.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/ieis/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.session.isAuthenticated}}\\n {{#if this.accountDataLoaded}}\\n {{#if this.userSession.isTrial}}\\n \\n {{else}}\\n \\n {{#if this.canSeeMenuToCreate}}\\n
\\n \\n \\n {{t \\\"routes.index.buttons.create-new\\\"}}\\n \\n \\n
    \\n {{#if this.userSession.canCreatePQR}}\\n
  • \\n {{t \\\"routes.index.links.create-pqr\\\"}}\\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateWPS}}\\n
  • \\n {{t\\n \\\"routes.index.links.create-pwps\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"routes.index.links.create-wps-single-pqr\\\"\\n }}\\n
  • \\n
  • \\n {{t\\n \\\"routes.index.links.create-wps-multiple-pqr\\\"\\n }}\\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateCertificate}}\\n
  • \\n {{t\\n \\\"routes.index.links.create-welder-certificate\\\"\\n }}\\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateQMatrix}}\\n
  • \\n {{t\\n \\\"routes.index.links.create-qmatrix\\\"\\n }}\\n
  • \\n {{/if}}\\n {{#if this.userSession.canCreateWeldingBook}}\\n
  • \\n {{t\\n \\\"routes.index.links.create-welding-book\\\"\\n }}\\n
  • \\n {{/if}}\\n\\n
\\n
\\n
\\n
\\n {{/if}}\\n\\n {{#if this.userSession.isAccountLocked}}\\n

{{t \\\"dashboard.account-locked-message\\\"}}

\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n {{/if}}\\n
\\n\\n {{#unless this.userSession.isAccountLocked}}\\n
\\n\\n

{{t\\n \\\"routes.index.messages.most-recent-documents\\\"\\n }}

\\n\\n
\\n {{#if this.model.latestDocuments.isRunning}}\\n {{#each this.emptyCards}}\\n
\\n
\\n \\n
\\n
\\n {{/each}}\\n {{else}}\\n {{#each this.latestDocumentRow as |document|}}\\n
\\n {{#if (eq document.type \\\"pqr\\\")}}\\n \\n {{else if (eq document.type \\\"welder-certificate\\\")}}\\n \\n {{else if (eq document.type \\\"wps\\\")}}\\n \\n {{/if}}\\n
\\n {{/each}}\\n {{/if}}\\n
\\n
\\n\\n
\\n\\n

{{t \\\"routes.index.messages.upcoming-renewals\\\"}}

\\n\\n
\\n {{#if this.showInternalRevalidations}}\\n \\n {{t \\\"routes.index.messages.internal-renewals\\\"}}\\n ({{this.internalCertificateList.count}})\\n
\\n \\n {{t \\\"routes.index.messages.external-renewals\\\"}}\\n ({{this.externalCertificateList.count}})\\n
\\n \\n {{t \\\"routes.index.messages.miscellaneous-renewals\\\"}}\\n ({{this.miscellaneousCertificateList.count}})\\n \\n {{else if this.showExternalRevalidations}}\\n \\n {{t \\\"routes.index.messages.internal-renewals\\\"}}\\n ({{this.internalCertificateList.count}})\\n \\n \\n {{t \\\"routes.index.messages.external-renewals\\\"}}\\n ({{this.externalCertificateList.count}})\\n \\n \\n {{t \\\"routes.index.messages.miscellaneous-renewals\\\"}}\\n ({{this.miscellaneousCertificateList.count}})\\n \\n {{else if this.showMiscellaneousRevalidations}}\\n \\n {{t \\\"routes.index.messages.internal-renewals\\\"}}\\n ({{this.internalCertificateList.count}})\\n \\n \\n {{t \\\"routes.index.messages.external-renewals\\\"}}\\n ({{this.externalCertificateList.count}})\\n \\n \\n {{t \\\"routes.index.messages.miscellaneous-renewals\\\"}}\\n ({{this.miscellaneousCertificateList.count}})\\n \\n {{/if}}\\n \\n \\n\\n
\\n
\\n
\\n {{#if this.showInternalRevalidations}}\\n {{t \\\"welder-certificate-expiration.internally-expire-30-days-title\\\"}}\\n {{else if this.showExternalRevalidations}}\\n {{t \\\"welder-certificate-expiration.externally-expire-30-days-title\\\"}}\\n {{else if this.showMiscellaneousRevalidations}}\\n {{t \\\"routes.index.messages.miscellaneous-title\\\"}}\\n {{/if}}\\n
\\n
\\n {{#if this.showInternalRevalidations}}\\n {{#if this.isLoadingInternalCertificateList}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{else if this.showExternalRevalidations}}\\n {{#if this.isLoadingExternalCertificateList}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{else if this.showMiscellaneousRevalidations}}\\n {{#if this.isLoadingMiscellaneousCertificateList}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{/if}}\\n
\\n
\\n {{#if this.showInternalRevalidations}}\\n {{#if (gt this.internalCertificateList.count 0)}}\\n {{t \\\"dashboard.links.see-all-certificates\\\"}}\\n ({{this.internalCertificateList.count}})\\n {{/if}}\\n {{else if this.showExternalRevalidations}}\\n {{#if (gt this.externalCertificateList.count 0)}}\\n {{t \\\"dashboard.links.see-all-certificates\\\"}}\\n ({{this.externalCertificateList.count}})\\n {{/if}}\\n {{else if this.showMiscellaneousRevalidations}}\\n {{#if (gt this.miscellaneousCertificateList.count 0)}}\\n {{t \\\"dashboard.links.see-all-certificates\\\"}}\\n ({{this.miscellaneousCertificateList.count}})\\n {{/if}}\\n {{/if}}\\n
\\n
\\n
\\n\\n
\\n
\\n
\\n
\\n {{t \\\"dashboard.action-log.title\\\"}}\\n
\\n
\\n {{#if this.model.actionLog.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n {{t\\n \\\"dashboard.action-log.count-log\\\"\\n actionCount=this.model.actionLog.length\\n }}\\n {{t \\\"dashboard.action-log.see-all\\\"}}\\n
\\n
\\n
\\n
\\n
\\n
\\n {{t \\\"routes.index.messages.document-count\\\"}}\\n
\\n
\\n {{#if this.model.usageData.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n
\\n
\\n
\\n
\\n\\n {{/unless}}\\n {{/if}}\\n {{else}}\\n \\n {{/if}}\\n{{/if}}', { moduleName: 'weldnote/templates/index.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/inspector.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n {{t \\\"indusuite.apps.settings.messages.personnel-managed\\\"}}\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.inspectors.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{inspector.name}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.inspectors.title.current-inspectors\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/inspectors.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{! CSS Styles in index.html }}\\n{{#if this.session.isAuthenticated}}\\n
\\n {{svg-jar \\\"weld-cloud-loader\\\" class=\\\"weld-cloud-loader w-24 pt-24\\\"}}\\n
\\n{{else}}\\n
\\n {{svg-jar \\\"weld-cloud-loader\\\" class=\\\"weld-cloud-loader w-24 mt-2\\\"}}\\n

\\n WeldCloudNotes™\\n

\\n
\\n{{/if}}', { moduleName: 'weldnote/templates/loading.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{#if this.displayLoginFallbackPage}}\\n \\n{{else}}\\n
\\n {{svg-jar \\\"weld-cloud-loader\\\" class=\\\"weld-cloud-loader w-24 mt-2\\\"}}\\n

\\n WeldCloudNotes™\\n

\\n
\\n{{/if}}', { moduleName: 'weldnote/templates/login.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t\\n \\\"routes.miscellaneous-certificate-duplicate.messages.help\\\"\\n certificate=this.model.certificateNumber\\n }}

\\n\\n\\n', { moduleName: 'weldnote/templates/miscellaneous-certificate-duplicate.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/miscellaneous-certificate-type.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/miscellaneous-certificate-type/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |certificateType|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.miscellaneous-certificate-type.type.label\\\"}}
{{certificateType.type}}
\\n
', { moduleName: 'weldnote/templates/miscellaneous-certificate-types.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/miscellaneous-certificate.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/miscellaneous-certificate/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.miscellaneous-certificates.messages.help\\\"}}
\\n
\\n {{#if this.userSession.canCreateCertificate}}\\n \\n {{/if}}\\n
\\n\\n
\\n
\\n {{t \\\"routes.miscellaneous-certificates.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n {{type.type}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.miscellaneous-certificates.title.current-miscellaneous\\\"}}\\n
\\n
\\n
\\n {{t \\\"list-view.export-excel-btn\\\"}}\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/miscellaneous-certificates.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/miscellaneous-certificates/30days.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t\\n \\\"routes.miscellaneous-certificates-archived.certificates-help\\\"\\n }}
\\n
\\n
\\n\\n
\\n \\n {{t \\\"routes.miscellaneous-certificates-archived.certificate-title-archived\\\"}}\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/miscellaneous-certificates/archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n', { moduleName: 'weldnote/templates/miscellaneous-certificates/expired.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n', { moduleName: 'weldnote/templates/miscellaneous-certificates/today.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/non-destructive-testing.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/non-destructive-testing/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n
\\n
{{this.routeTitle}}
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/non-destructive-testings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('
\\n
\\n
\\n \\n

\\n Resource Does Not Exist\\n

\\n

\\n The resource you\\'re trying to access does not exist or you do not have permission to view\\n it.\\'\\n

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

\\n If you believe this is an error, please contact WeldCloud Notes support\\n

\\n
\\n
\\n
', { moduleName: 'weldnote/templates/not-found-resource.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/piping-piece.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/piping-piece/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n\\n {{#if this.isMetric}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.isImperial}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/piping-pieces.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/plate-piece.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/plate-piece/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/plate-pieces.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/post-weld-treatment-method.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/post-weld-treatment-method/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |method|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.post-weld-treatment-method.designation.label\\\"}}
{{method.designation}}
\\n
', { moduleName: 'weldnote/templates/post-weld-treatment-methods.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n', { moduleName: 'weldnote/templates/pqr-learned-mapping.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n', { moduleName: 'weldnote/templates/pqr-learned-mapping/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n
\\n
\\n {{t \\\"list-view.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
{{this.routeTitle}}
\\n
\\n \\n
\\n
\\n', { moduleName: 'weldnote/templates/pqr-learned-mappings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/pqr-standard.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/pqr-standard/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |standard|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.pqr-standard.standard.label\\\"}}{{t \\\"model.pqr-standard.code.label\\\"}}
{{standard.standard}}{{standard.code.code}}
\\n
', { moduleName: 'weldnote/templates/pqr-standards.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/pqr-view.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/pqr.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.pqr/new.help-message\\\"}}

\\n
\\n\\n', { moduleName: 'weldnote/templates/pqr/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.pqr-archived.messages.help\\\"}}
\\n
\\n
\\n\\n
\\n \\n {{t \\\"routes.pqr-archived.title-archived\\\"}}\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/pqrs-archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreatePQR}}\\n \\n \\n {{t \\\"routes.pqrs.buttons.add-new\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n {{t \\\"pqr-list.buttons.find-certificates\\\"}}\\n \\n \\n \\n \\n {{t \\\"pqr-list.buttons.digitalize-pqr\\\"}}\\n \\n \\n \\n {{#if this.help.isHelpActive}}\\n \\n {{t \\\"pqr-list.buttons.how-to-create\\\"}}\\n {{/if}}\\n\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\\n\\n\\n

{{t \\\"feature-banner.pqr-list.description\\\"}}

\\n

{{t \\\"feature-banner.pqr-list.how-it-works\\\"}}

\\n\\n\\n\\n
\\n
\\n {{t \\\"pqr-list.search-parameters.title\\\"}}\\n
\\n
\\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if (not (has-value this.selectedStandard.id))}}\\n {{t\\n \\\"pqr-list.search-parameters.help.standard\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n {{standard.designation}}\\n \\n \\n \\n {{#if this.isStandardSelected}}\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n {{#if this.showDissimilarMaterials}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if this.dissimilarMaterials}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n {{else}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n
\\n {{t \\\"pqr-list.search-parameters.labels.filler-material-group\\\"}}\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n
\\n {{t \\\"pqr-list.search-parameters.labels.filler-material-group\\\"}}\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n
\\n {{t \\\"pqr-list.search-parameters.labels.filler-material-group\\\"}}\\n
\\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n
\\n
\\n\\n
\\n \\n {{t \\\"pqr-list.advanced-parameters.title\\\"}}\\n {{#if this.showAdvancedParameters}}\\n
\\n {{! template-lint-disable require-presentational-children }}\\n \\n
\\n {{else}}\\n
\\n {{! template-lint-disable require-presentational-children }}\\n \\n
\\n {{/if}}\\n
\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{body.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n {{requirement.name}}\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"pqr-list.buttons.clear\\\"}}\\n \\n \\n \\n
\\n {{/if}}\\n \\n\\n
\\n\\n
\\n
\\n {{t \\\"pqr-list.messages.list\\\"}}\\n
\\n
\\n
\\n \\n \\n \\n \\n {{t \\\"pqr-list.buttons.export-list\\\"}}\\n \\n \\n \\n \\n \\n \\n
\\n\\n \\n \\n

{{t \\\"pqr-list.messages.no-content-found-pt1\\\"}}

\\n

{{t \\\"pqr-list.messages.no-content-found-pt2\\\"}}

\\n
\\n \\n\\n
\\n
', { moduleName: 'weldnote/templates/pqrs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/preparation-method.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/preparation-method/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |method|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.preparation-method.method.label\\\"}}
{{method.method}}
\\n
', { moduleName: 'weldnote/templates/preparation-methods.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/project-client/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/project-document/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{!\\n Main settings template that organizes welding configuration management into categories.\\n \\n This template implements a tabbed interface where each category contains related settings\\n organized according to welding industry workflows. The layout uses a vertical tab navigation\\n on the left with content panels on the right.\\n \\n Category Organization:\\n - User Settings: User profile and account administration\\n - Materials: Base and filler materials with their groups and specifications\\n - Gas: Shielding gases for GMAW, GTAW, FCAW processes\\n - Flux: Flux materials for SMAW, SAW processes\\n - Testing: NDT (Non-Destructive Testing) and DT (Destructive Testing) methods\\n - Pieces: Piping and plate piece configurations (joint types)\\n - Staff: Personnel records and positions\\n - Welding: Processes, positions, electrode types following AWS standards\\n - Methods: Preparation methods and PWHT (Post-Weld Heat Treatment)\\n - Schematics: Groove designs and weld layer configurations\\n - Welding Book: Status tracking for welding procedure documentation\\n - Standards: PQR, welder qualification, and construction standards (ASME, AWS, ISO)\\n \\n Permission-Based Visibility:\\n - Most categories visible to all authenticated users\\n - Welding Book and Standards tabs restricted to account administrators\\n - Individual \\\"New\\\" buttons controlled by role (isAccountAdmin or isAdmin)\\n}}\\n\\n

{{t \\\"sidebar.settings\\\"}}

\\n
\\n\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n {{#if (eq this.category \\\"user-settings\\\")}}\\n \\n \\n \\n
\\n
\\n \\n \\n \\n
\\n {{#if\\n (and\\n (has-feature this.userSession.features \\\"permissions\\\")\\n this.userSession.isAccountAdmin\\n )\\n }}\\n
\\n \\n \\n \\n
\\n {{/if}}\\n
\\n
\\n
\\n
\\n {{/if}}\\n {{#if (eq this.category \\\"materials\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"gas\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"flux\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"testing\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"pieces\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"staff\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"welding\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.userSession.isGlobalAdmin}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n {{/if}}\\n {{#if (eq this.category \\\"methods\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"schematics\\\")}}\\n \\n \\n \\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (eq this.category \\\"welding-book\\\")}}\\n \\n \\n \\n \\n \\n {{/if}}\\n {{#if (and (eq this.category \\\"standards\\\") this.isAccountAdmin)}}\\n \\n {{#if this.isAdmin}}\\n \\n \\n \\n \\n \\n \\n {{/if}}\\n \\n \\n \\n \\n {{/if}}\\n
\\n
\\n
\\n
\\n
\\n
', { moduleName: 'weldnote/templates/settings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/staff-position.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/staff-position/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAccountAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |position|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.staff-position.designation.label\\\"}}
{{position.designation}}
\\n
', { moduleName: 'weldnote/templates/staff-positions.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/staff.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each @model as |staff|}}\\n \\n \\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.staff.name.label\\\"}}{{t \\\"model.staff.position.label\\\"}}{{t \\\"model.staff.email.label\\\"}}{{t \\\"model.staff.company.label\\\"}}
{{staff.name}}{{staff.position.designation}}{{staff.account.email}}{{staff.company.name}}
\\n
', { moduleName: 'weldnote/templates/staffs.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/test-inspection-class.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/test-inspection-class/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.test-inspection-classes.messages.help\\\"}}
\\n
\\n \\n
\\n\\n
\\n
\\n {{t \\\"routes.welders.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.welders.title.current-welders\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/test-inspection-classes.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/test-location.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/test-location/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n
\\n
{{this.routeTitle}}
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/test-locations.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/test-stage-name.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/test-stage-name/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n
\\n
{{this.routeTitle}}
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/test-stage-names.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |polarity|}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.type-current-polarity.typeCurrent.label\\\"}}
{{polarity.typeCurrent}}
\\n
', { moduleName: 'weldnote/templates/type-current-polarities.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/type-current-polarity.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/type-current-polarity/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('{{!\\n User profile settings template.\\n Delegates rendering to the UserProfile component which handles user information display and updates.\\n}}\\n', { moduleName: 'weldnote/templates/user-settings.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/weld-layer-configuration.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/weld-layer-configuration/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/weld-layer-configurations.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n \\n \\n {{t \\\"routes.weld-sketch-design.labels.instructions\\\"}}\\n \\n \\n
\\n\\n \\n
\\n \\n
\\n\\n
\\n
\\n', { moduleName: 'weldnote/templates/weld-sketch-design.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreateWeldSketch}}\\n \\n {{t \\\"routes.weld-sketches.buttons.new-sketch\\\"}}\\n \\n \\n \\n \\n {{t \\\"routes.weld-sketches.buttons.groove-design\\\"}}\\n \\n \\n \\n {{t \\\"routes.weld-sketches.buttons.weld-layer-configuration\\\"}}\\n \\n {{/if}}\\n\\n\\n{{#if (gt this.latestSketches.length 0)}}\\n
\\n

{{t \\\"routes.weld-sketches.latest-sketches.title\\\"}}

\\n
\\n {{#if this.model.latestSketches.isRunning}}\\n {{#each this.emptyCards}}\\n
\\n
\\n \\n
\\n
\\n {{/each}}\\n {{else}}\\n {{#each this.latestSketches as |sketch|}}\\n \\n
\\n \\n
\\n {{sketch.description}}\\n \\n {{#if (eq sketch.metadata.modelName \\\"groove-design\\\")}}\\n {{t \\\"routes.weld-sketches.latest-sketches.type.groove-design\\\"}}\\n {{else}}\\n {{t \\\"routes.weld-sketches.latest-sketches.type.weld-layer\\\"}}\\n {{/if}}\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n {{/each}}\\n {{/if}}\\n \\n \\n{{/if}}\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{#if this.search.isRunning}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{t \\\"list-view.search-button\\\"}}\\n \\n {{t \\\"list-view.clear-button\\\"}}\\n \\n \\n\\n\\n
\\n \\n
\\n
\\n {{#if this.showGrooveDesignTab}}\\n
\\n
\\n {{t \\\"routes.weld-sketches.groove-designs.search-results\\\"}}\\n
\\n
\\n \\n
\\n
\\n {{else if this.showWeldLayerConfigurationTab}}\\n
\\n
\\n {{t \\\"routes.weld-sketches.weld-layer-configurations.search-results\\\"}}\\n
\\n
\\n \\n
\\n
\\n {{/if}}\\n
\\n
\\n
', { moduleName: 'weldnote/templates/weld-sketches.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/weld-type.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/weld-type/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/weld-types.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welder-certificate-view.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welder-certificate.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welder-certificate/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreateCertificate}}\\n \\n \\n New\\n \\n \\n
    \\n
  • \\n Welder\\n Certificate\\n
  • \\n
  • \\n
  • \\n \\n Operator Certificate\\n
  • \\n
\\n
\\n
\\n\\n {{/if}}\\n {{#if this.help.isHelpActive}}\\n \\n {{t \\\"routes.welder-certificates.buttons.how-to-create\\\"}}\\n {{/if}}\\n \\n \\n {{t \\\"certificate-list.buttons.find-certificates\\\"}}\\n \\n \\n \\n \\n \\n
\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\\n\\n\\n

{{t \\\"feature-banner.welder-certificate-list.description\\\"}}

\\n

{{t \\\"feature-banner.welder-certificate-list.how-it-works\\\"}}

\\n\\n\\n\\n {{#if this.showSearchParameters}}\\n
\\n
\\n {{t \\\"pqr-list.search-parameters.title\\\"}}\\n
\\n
\\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if (not (has-value this.selectedStandard.id))}}\\n {{t\\n \\\"certificate-list.search-parameters.help.standard\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n {{standard.designation}}\\n \\n \\n \\n {{#if this.isStandardSelected}}\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n {{#unless this.isISO96061}}\\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n {{/unless}}\\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n \\n {{material.visualLabel}}\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n {{t \\\"pqr-list.buttons.clear\\\"}}\\n \\n \\n \\n
\\n
\\n {{/if}}\\n\\n
\\n \\n {{t \\\"pqr-list.advanced-parameters.title\\\"}}\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n
\\n {{/if}}\\n
\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{body.name}}\\n \\n \\n \\n \\n {{welder.welderName}}\\n ({{welder.welderStamp}})\\n \\n \\n \\n \\n \\n \\n {{requirement.name}}\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"pqr-list.buttons.clear\\\"}}\\n \\n \\n \\n
\\n {{/if}}\\n \\n
\\n\\n
\\n
\\n {{t \\\"certificate-list.messages.list\\\"}}\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"certificate-list.buttons.export-excel\\\"}}\\n \\n \\n \\n \\n \\n
\\n\\n \\n \\n {{#if (and (not this.selectedShowExpired) (not this.selectedShowArchived))}}\\n {{t \\\"routes.welder-certificates.messages.no-content-try-other-options\\\"}}\\n
\\n {{t \\\"routes.welder-certificates.buttons.include-expired\\\"}}\\n {{t \\\"routes.welder-certificates.buttons.include-archived\\\"}}\\n
\\n {{else}}\\n {{t \\\"routes.welder-certificates.messages.no-certificates-found\\\"}}\\n {{/if}}\\n\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/welder-certificates.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.welder-certificates-archived.certificates-help\\\"}}
\\n
\\n
\\n\\n
\\n \\n {{t \\\"routes.welder-certificates-archived.certificate-title-archived\\\"}}\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/welder-certificates/archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/welder-certificates/external/30days.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/welder-certificates/external/expired.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/welder-certificates/external/today.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/welder-certificates/internal/30days.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/welder-certificates/internal/expired.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n\\n
\\n \\n
', { moduleName: 'weldnote/templates/welder-certificates/internal/today.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welder-standard.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welder-standard/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |standard|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.welder-standard.standard.label\\\"}}{{t \\\"model.welder-standard.code.label\\\"}}
{{standard.standard}}{{standard.code.code}}
\\n
', { moduleName: 'weldnote/templates/welder-standards.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welder.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n {{t \\\"indusuite.apps.settings.messages.personnel-managed\\\"}}\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.projects.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n\\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n
\\n
\\n\\n
\\n \\n {{t \\\"routes.welders-archived.welder-title-archived\\\"}}\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/welders-archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n {{t \\\"indusuite.apps.settings.messages.personnel-managed\\\"}}\\n \\n \\n {{t \\\"weldcloud.settings.application-label\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.welders.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.welders.title.current-welders\\\"}}\\n
\\n
\\n
\\n \\n \\n {{t \\\"routes.welders.buttons.export-excel\\\"}}\\n \\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/welders.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-book-status.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-book-status/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.canSave}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |status|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.welding-book-status.designation.label\\\"}}{{t \\\"model.welding-book-status.abbreviation.label\\\"}}
{{status.designation}}{{status.abbreviation}}
\\n
', { moduleName: 'weldnote/templates/welding-book-statuses.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-book.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-book/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.welding-books-archived.messages.help\\\"}}
\\n
\\n
\\n\\n
\\n \\n {{t \\\"routes.welding-books-archived.messages.archived-title\\\"}}\\n
\\n
\\n \\n
\\n', { moduleName: 'weldnote/templates/welding-books-archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreateWeldingBook}}\\n {{t \\\"toolbar.new.label\\\"}} \\n {{/if}}\\n {{#if this.help.isHelpActive}}\\n \\n {{t \\\"routes.welding-books.buttons.how-to-create\\\"}}\\n {{/if}}\\n\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\\n\\n
\\n
\\n {{t \\\"routes.welding-books.titles.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n {{t \\\"list-view.clear-button\\\"}}\\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.welding-books.titles.welding-book-list\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/welding-books.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-detail.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-detail/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n {{#each this.model as |detail|}}\\n \\n \\n \\n \\n {{/each}}\\n \\n
{{t \\\"model.welding-detail.shortDesignation.label\\\"}}{{t \\\"model.welding-detail.completeDesignation.label\\\"}}
{{detail.shortDesignation}}{{detail.completeDesignation}}
\\n
', { moduleName: 'weldnote/templates/welding-details.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-map.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-map/certificate-map.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n\\n\\n
\\n {{#if this.isShowingPipingPiecesTab}}\\n
\\n \\n \\n \\n \\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n \\n \\n {{#each this.sortedPieces as |piece|}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"welding-map-edit.diameter-column-title\\\"\\n }}{{t\\n \\\"welding-map-edit.diameter-inches-column-title\\\"\\n }}{{t\\n \\\"welding-map-edit.thickness-column-title\\\"\\n }}{{t\\n \\\"welding-map-edit.thickness-inches-column-title\\\"\\n }}{{t\\n \\\"welding-map-edit.schedule-column-title\\\"\\n }}{{t\\n \\\"welding-map-edit.nominal-diameter-column-title\\\"\\n }}
{{format-decimal piece.diameter}}{{format-decimal piece.diameterInches}}{{format-decimal piece.thickness}}{{format-decimal piece.thicknessInches}}{{piece.schedule}}{{piece.nominalDiameter}}\\n {{#if this.userSession.canCreateQMatrix}}\\n \\n \\n {{t \\\"welding-map-edit.remove-piece-btn\\\"}}\\n \\n {{/if}}\\n
\\n {{t \\\"routes.qmatrixes.messages.no-piping-pieces\\\"}}\\n
\\n \\n
\\n {{/if}}\\n {{#if this.isShowingPlatePiecesTab}}\\n
\\n \\n
\\n \\n
\\n \\n \\n
\\n \\n \\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n \\n \\n {{#each this.sortedPlates as |plate|}}\\n \\n {{#if this.isMetric}}\\n \\n {{else}}\\n \\n {{/if}}\\n \\n \\n {{else}}\\n \\n \\n \\n {{/each}}\\n \\n
{{t\\n \\\"welding-map-edit.plate-pieces.thickness-column\\\"\\n }}{{t\\n \\\"welding-map-edit.plate-pieces.thickness-inches-column\\\"\\n }}
{{format-decimal plate.thickness}}{{format-decimal plate.thicknessInches}}\\n {{#if this.userSession.canCreateQMatrix}}\\n \\n \\n {{t \\\"welding-map-edit.remove-piece-btn\\\"}}\\n \\n {{/if}}\\n
\\n {{t \\\"routes.qmatrixes.messages.no-plate-pieces\\\"}}\\n
\\n
\\n \\n
\\n {{/if}}\\n
', { moduleName: 'weldnote/templates/welding-map/index.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-map/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-map/pqr-map.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-map/wps-map.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n

{{t \\\"routes.qmatrixes.messages.help1\\\"}}

\\n

\\n {{t \\\"routes.qmatrixes.messages.help2\\\"}}\\n {{t \\\"routes.qmatrixes.messages.video\\\"}}\\n \\n

\\n
\\n \\n {{#if this.help.isHelpActive}}\\n {{t \\\"routes.qmatrixes.buttons.how-to-create\\\"}}\\n {{/if}}\\n \\n
\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\\n\\n
\\n
\\n {{t \\\"routes.qmatrixes.title.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n \\n \\n \\n {{option.standard}}\\n \\n \\n \\n \\n \\n \\n {{option.standard}}\\n \\n \\n \\n \\n {{option.standard}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.qmatrixes.title.current-qmatrix\\\"}}\\n
\\n
\\n \\n
\\n
\\n\\n{{#if this.showHelpVideo}}\\n \\n{{/if}}', { moduleName: 'weldnote/templates/welding-maps.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-position.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-position/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n \\n', { moduleName: 'weldnote/templates/welding-positions.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification-pwps-to-certificate.help-message\\\"}}

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

{{this.wps.wpsNumber}}

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

{{this.wps.company.name}}

\\n
\\n
\\n
\\n\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification-pwps-to-certificate.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification-pwps-to-pqr.help-message\\\"}}

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

{{this.wps.wpsNumber}}

\\n
\\n
\\n \\n \\n \\n
\\n\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification-pwps-to-pqr.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification-pwps-to-prequalified.help-message\\\"}}

\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification-pwps-to-prequalified.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification-pwps-to-standard.help-message\\\"}}

\\n
\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification-pwps-to-standard-wps.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-procedure-specification-view-pass.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-procedure-specification-view.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-procedure-specification.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification/new-from-pqr.help-message\\\"}}

\\n
\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification/new-from-pqr.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification/new-multiple.help-message\\\"}}

\\n
\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification/new-multiple.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n

{{t \\\"routes.welding-procedure-specification/new.help-message\\\"}}

\\n
\\n\\n', { moduleName: 'weldnote/templates/welding-procedure-specification/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n
\\n
{{t \\\"routes.wps-archived.messages.help\\\"}}
\\n
\\n
\\n\\n
\\n
\\n {{t \\\"routes.wps-archived.title-archived\\\"}}\\n
\\n
\\n \\n
\\n
', { moduleName: 'weldnote/templates/welding-procedure-specifications-archived.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreateWPS}}\\n \\n \\n {{t \\\"routes.welding-procedure-specifications-preliminary.buttons.add-new\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n {{t \\\"routes.preliminary-welding-procedure-specifications.buttons.find-wps\\\"}}\\n \\n \\n {{#if this.help.isHelpActive}}\\n \\n {{t \\\"routes.preliminary-welding-procedure-specifications.buttons.how-to-create\\\"}}\\n {{/if}}\\n\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\\n\\n\\n
\\n
\\n {{t \\\"wps-list.search-parameters.title\\\"}}\\n
\\n
\\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if (not (has-value this.selectedStandard.id))}}\\n {{t\\n \\\"pqr-list.search-parameters.help.standard\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n {{standard.designation}}\\n \\n \\n \\n {{#if this.isStandardSelected}}\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n {{#if this.showDissimilarMaterials}}\\n \\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.dissimilarMaterials}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n {{else}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n {{t \\\"wps-list.buttons.search\\\"}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n \\n {{t \\\"wps-list.advanced-parameters.title\\\"}}\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n
\\n {{/if}}\\n
\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{requirement.name}}\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"wps-list.buttons.clear\\\"}}\\n \\n \\n \\n
\\n {{/if}}\\n \\n
\\n\\n
\\n
\\n {{t \\\"pqr-list.search-results.title\\\"}}\\n
\\n
\\n
\\n \\n \\n {{t \\\"list-view.export-excel-btn\\\"}}\\n \\n \\n \\n \\n \\n
\\n\\n \\n
\\n
', { moduleName: 'weldnote/templates/welding-procedure-specifications-preliminary.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n {{#if this.userSession.canCreateWPS}}\\n \\n {{t \\\"wps-list.buttons.single-pqr\\\"}}\\n \\n \\n \\n {{t \\\"wps-list.buttons.multiple-pqr\\\"}}\\n \\n \\n {{/if}}\\n \\n \\n {{t \\\"wps-list.buttons.find-wps\\\"}}\\n \\n \\n
\\n {{#if this.help.isHelpActive}}\\n \\n {{t \\\"routes.welding-procedure-specifications.buttons.how-to-create-single\\\"}}\\n \\n {{t \\\"routes.welding-procedure-specifications.buttons.how-to-create-multi\\\"}}\\n {{/if}}\\n
\\n
\\n\\n{{#if this.showVideo}}\\n \\n{{/if}}\\n\\n\\n
\\n
\\n {{t \\\"wps-list.search-parameters.title\\\"}}\\n
\\n
\\n \\n \\n \\n \\n {{standard.visualLabel}}\\n \\n {{#if (not (has-value this.selectedStandard.id))}}\\n {{t\\n \\\"pqr-list.search-parameters.help.standard\\\"\\n }}\\n {{/if}}\\n \\n \\n \\n {{company.name}}\\n \\n \\n \\n \\n \\n \\n {{unit.label}}\\n \\n \\n \\n \\n {{standard.designation}}\\n \\n \\n \\n {{#if this.isStandardSelected}}\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{format-weld-type type}}\\n \\n \\n \\n {{#if this.isOverlayWeld}}\\n \\n \\n \\n \\n {{type.label}}\\n \\n \\n \\n {{/if}}\\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n {{option.shortDesignation}}\\n \\n \\n \\n \\n \\n \\n {{detail.completeDesignation}}\\n \\n \\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n \\n {{option.name}}\\n \\n \\n \\n {{#if this.showDissimilarMaterials}}\\n \\n \\n
\\n \\n
\\n
\\n
\\n {{/if}}\\n {{#if this.dissimilarMaterials}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n {{else}}\\n \\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{pqr.certificateNumber}}\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n {{/if}}\\n \\n \\n \\n \\n \\n \\n
\\n
\\n\\n
\\n \\n {{t \\\"wps-list.advanced-parameters.title\\\"}}\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n
\\n {{else}}\\n
\\n \\n
\\n {{/if}}\\n
\\n {{#if this.showAdvancedParameters}}\\n
\\n \\n \\n
\\n \\n \\n
\\n
\\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n {{requirement.name}}\\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"wps-list.buttons.clear\\\"}}\\n \\n \\n \\n
\\n {{/if}}\\n \\n
\\n\\n
\\n
\\n {{t \\\"wps-list.messages.list\\\"}}\\n
\\n
\\n
\\n \\n \\n \\n {{t \\\"wps-list.buttons.export-excel\\\"}}\\n \\n \\n \\n \\n \\n
\\n\\n \\n
\\n
', { moduleName: 'weldnote/templates/welding-procedure-specifications.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-process.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('', { moduleName: 'weldnote/templates/welding-process/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{t \\\"list-view.search-button\\\"}}\\n \\n \\n \\n\\n \\n', { moduleName: 'weldnote/templates/welding-processes.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n', { moduleName: 'weldnote/templates/wpq-learned-mapping.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n', { moduleName: 'weldnote/templates/wpq-learned-mapping/new.hbs' });\n","import { hbs } from 'ember-cli-htmlbars';\nexport default hbs('\\n \\n {{#if this.userSession.isAdmin}}\\n \\n {{/if}}\\n\\n\\n
\\n
\\n {{t \\\"list-view.search-parameters\\\"}}\\n
\\n
\\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{option.label}}\\n \\n \\n \\n \\n {{option.code}}\\n \\n \\n \\n \\n \\n \\n {{#if this.loadData.isRunning}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{else}}\\n \\n {{t \\\"list-view.search-button\\\"}}\\n {{/if}}\\n \\n \\n \\n \\n
\\n
\\n\\n
\\n
{{this.routeTitle}}
\\n
\\n \\n
\\n
\\n', { moduleName: 'weldnote/templates/wpq-learned-mappings.hbs' });\n","import Transform from '@ember-data/serializer/transform';\nimport { get } from '@ember/object';\nimport { service } from '@ember/service';\nimport { isEmpty } from '@ember/utils';\n\ndeclare module 'ember-data/types/registries/transform' {\n export default interface TransformRegistry {\n 'decimal-value': number;\n }\n}\n\nexport type DecimalValue = {\n value: number;\n};\n\nexport default class DecimalValueTransform extends Transform {\n @service\n userSession: any;\n\n deserialize(serialized: any): DecimalValue {\n // There's no need to deserialize as the backend will always send decimals with dot and never with a comma\n return serialized;\n }\n\n serialize(deserialized: any): number {\n // This shouldn't have to happen as the app should deal with this, but just in case\n // add this second layer of protection\n let { userSession } = this;\n let separator = get(userSession, 'decimalSeparator');\n if (separator === ',') {\n if (!isEmpty(deserialized)) {\n let noComma = `${deserialized}`.replace(separator, '.');\n return parseFloat(noComma);\n }\n } else {\n if (!isEmpty(deserialized)) {\n return parseFloat(deserialized);\n }\n }\n return deserialized;\n }\n}\n\n\n\n\n\n","export default function () {\n this.transition(\n this.hasClass('document-list'),\n\n // this makes our rule apply when the liquid-if transitions to the\n // true state.\n this.toValue(true),\n this.use('toDown', { duration: 300 }),\n\n // which means we can also apply a reverse rule for transitions to\n // the false state.\n this.reverse('toUp', { duration: 300 })\n );\n\n this.transition(\n this.hasClass('sketch-instructions'),\n\n // this makes our rule apply when the liquid-if transitions to the\n // true state.\n this.toValue(true),\n this.use('toDown', { duration: 800 }),\n\n // which means we can also apply a reverse rule for transitions to\n // the false state.\n this.reverse('toUp', { duration: 300 })\n );\n}\n","export interface InstanceTypeOption {\n key: string;\n labelKey: string;\n}\n\nexport const INSTANCE_TYPES: InstanceTypeOption[] = [\n { key: 'PROJECT', labelKey: 'action-log-list.instance-types.PROJECT' },\n { key: 'PROJECT_COMPONENT', labelKey: 'action-log-list.instance-types.PROJECT_COMPONENT' },\n { key: 'PROJECT_WELD', labelKey: 'action-log-list.instance-types.PROJECT_WELD' },\n { key: 'WELDER', labelKey: 'action-log-list.instance-types.WELDER' },\n { key: 'CERTIFICATE', labelKey: 'action-log-list.instance-types.CERTIFICATE' },\n { key: 'PQR', labelKey: 'action-log-list.instance-types.PQR' },\n { key: 'WPS', labelKey: 'action-log-list.instance-types.WPS' },\n { key: 'WELDING_MAP', labelKey: 'action-log-list.instance-types.WELDING_MAP' },\n { key: 'WELDING_BOOK', labelKey: 'action-log-list.instance-types.WELDING_BOOK' },\n {\n key: 'MISCELLANEOUS_CERTIFICATE',\n labelKey: 'action-log-list.instance-types.MISCELLANEOUS_CERTIFICATE',\n },\n];\n\nexport const ACTION_IDS_BY_INSTANCE_TYPE: Record = {\n PROJECT: [\n 'PROJECT_ADD',\n 'PROJECT_DELETE',\n 'PROJECT_ARCHIVE',\n 'PROJECT_UNARCHIVE',\n 'PROJECT_VERIFY',\n 'PROJECT_APPROVE',\n 'PROJECT_REVOKE',\n ],\n PROJECT_COMPONENT: ['PROJECT_ADD_COMPONENT', 'PROJECT_DELETE_COMPONENT', 'PROJECT_RESTORE_COMPONENT'],\n PROJECT_WELD: [\n 'PROJECT_ADD_WELD',\n 'PROJECT_DELETE_WELD',\n 'PROJECT_REPAIR_WELD',\n 'PROJECT_CUT_WELD',\n 'PROJECT_DUPLICATE_WELD',\n 'PROJECT_RESTORE_WELD',\n 'PROJECT_APPROVE_WELD_STAGE_WAITING',\n 'PROJECT_APPROVE_WELD_STAGE_FITTING',\n 'PROJECT_APPROVE_WELD_STAGE_WELDED',\n 'PROJECT_APPROVE_WELD_STAGE_PWHT_COMPLETE',\n 'PROJECT_APPROVE_WELD_STAGE_TESTED',\n 'PROJECT_APPROVE_WELD_STAGE_FINISHED',\n 'PROJECT_APPROVE_WELD_STAGE_SHIPPED',\n 'PROJECT_REVOKE_WELD_STAGE_WAITING',\n 'PROJECT_REVOKE_WELD_STAGE_FITTING',\n 'PROJECT_REVOKE_WELD_STAGE_WELDED',\n 'PROJECT_REVOKE_WELD_STAGE_PWHT_COMPLETE',\n 'PROJECT_REVOKE_WELD_STAGE_TESTED',\n 'PROJECT_REVOKE_WELD_STAGE_FINISHED',\n 'PROJECT_REVOKE_WELD_STAGE_SHIPPED',\n ],\n PQR: [\n 'PQR_ADD',\n 'PQR_DELETE',\n 'PQR_ARCHIVE',\n 'PQR_UNARCHIVE',\n 'PQR_DOCUMENT_ADD',\n 'PQR_DOCUMENT_REPLACE',\n 'PQR_DOCUMENT_REMOVE',\n ],\n WPS: [\n 'WPS_ADD',\n 'WPS_DELETE',\n 'WPS_ARCHIVE',\n 'WPS_UNARCHIVE',\n 'WPS_VERIFY',\n 'WPS_APPROVE',\n 'WPS_REVOKE',\n 'WPS_DOCUMENT_ADD',\n 'WPS_DOCUMENT_REPLACE',\n 'WPS_DOCUMENT_REMOVE',\n ],\n WELDER: ['WELDER_ADD', 'WELDER_DELETE'],\n CERTIFICATE: [\n 'CERTIFICATE_ADD',\n 'CERTIFICATE_DELETE',\n 'CERTIFICATE_ARCHIVE',\n 'CERTIFICATE_UNARCHIVE',\n 'CERTIFICATE_DOCUMENT_ADD',\n 'CERTIFICATE_DOCUMENT_REPLACE',\n 'CERTIFICATE_DOCUMENT_REMOVE',\n 'CERTIFICATE_REVALIDATE_INTERNAL_MANUAL',\n 'CERTIFICATE_REVALIDATE_EXTERNAL_MANUAL',\n 'CERTIFICATE_REVALIDATE_INTERNAL_AUTOMATIC',\n 'CERTIFICATE_REVALIDATE_EXTERNAL_AUTOMATIC',\n ],\n WELDING_MAP: ['WELDING_MAP_ADD', 'WELDING_MAP_DELETE'],\n WELDING_BOOK: [\n 'WELDING_BOOK_ADD',\n 'WELDING_BOOK_DELETE',\n 'WELDING_BOOK_VERIFY',\n 'WELDING_BOOK_APPROVE',\n 'WELDING_BOOK_REVOKE',\n 'WELDING_BOOK_ARCHIVE',\n 'WELDING_BOOK_UNARCHIVE',\n 'PROJECT_COPY_WELDING_BOOK_WELDS',\n ],\n MISCELLANEOUS_CERTIFICATE: [\n 'MISCELLANEOUS_CERTIFICATE_ADD',\n 'MISCELLANEOUS_CERTIFICATE_DELETE',\n 'MISCELLANEOUS_CERTIFICATE_ARCHIVE',\n 'MISCELLANEOUS_CERTIFICATE_UNARCHIVE',\n ],\n};\n","/**\n * The staff console's help texts, in one place: what each dossier flag, next-sync decision, drift\n * type and conflict reason means, and what to do about it. The panels show these as tooltips and\n * hints, and the Instructions panel lists them in full, so the two can never disagree.\n */\n\nexport interface HelpEntry {\n /** One line: what it means. Used as the tooltip. */\n meaning: string;\n /** What staff should do next. */\n action: string;\n}\n\n/** Dossier flags, by `code` from `IdentityDossierService`. */\nexport const FLAG_HELP: Record = {\n ORG_MISMATCH: {\n meaning: 'The account is in one organization in Notes, but the OrgApi puts the user in another.',\n action:\n 'Run a USER-EMAIL sync. If \"Next sync would\" says park ORG_MOVE, the sync parks a conflict: preview and apply it in Identity conflicts.',\n },\n DELETED_UPSTREAM_BUT_LIVE: {\n meaning: 'The OrgApi marks the user deleted, but the Notes account is still live.',\n action:\n 'The delete event never reached Notes. Retire the account in Account repair, with a reason saying it was deleted upstream.',\n },\n REMOTE_NOT_FOUND: {\n meaning: 'The account has a B2C id, but the OrgApi returns no user for it or for its email.',\n action:\n 'Check the OrgApi directly. If the user is really gone, retire the account. If they exist under another email, fix the email first.',\n },\n CLIENT_ORPHANED: {\n meaning:\n \"The account's organization was deleted upstream. Its sessions and app tokens are refused.\",\n action:\n 'Nothing to fix on the account. If the organization comes back, the next client sync un-orphans it; otherwise dismiss the ORGANIZATION_DELETED conflict.',\n },\n CROSS_TENANT_COMPANIES: {\n meaning: \"The account holds company grants that belong to another client: residue of a half-applied move.\",\n action: 'No repair operation exists yet. Note the account; do not edit the grants by hand.',\n },\n LEDGER_MISSING: {\n meaning: 'The account has a B2C id but no current identity ledger row.',\n action:\n 'Harmless for day-to-day use. A sync that matches by the current B2C id writes no ledger row, so this stays until the next rebind.',\n },\n LEDGER_REMOTE_ID_STALE: {\n meaning: \"The current ledger row names a different B2C id than the account.\",\n action:\n 'Harmless for day-to-day use: sign-in and sync use the account, not the ledger. Note it; it only affects matching of old ids.',\n },\n LEDGER_CLIENT_STALE: {\n meaning: 'The current ledger row still names the old client after a move.',\n action: 'Known gap: moves do not update the ledger. Harmless; no action needed.',\n },\n NO_ORG_API_USER_ID: {\n meaning: 'No OrgApi user id is stored, so an upstream delete event cannot find this account.',\n action: 'Run a USER-EMAIL sync; any sync stores the id.',\n },\n NEVER_SYNCED: {\n meaning: 'No sync has been recorded for this account.',\n action: 'Run a USER-EMAIL sync to bring it up to date.',\n },\n SEVERAL_LIVE_ACCOUNTS: {\n meaning: 'More than one live account matches this query. One person should have one account.',\n action:\n 'Open each account by id and decide which one is real. Retire the others, with a reason naming the one you kept.',\n },\n OPEN_CONFLICTS: {\n meaning: 'The sync parked one or more conflicts about this person and is waiting for staff.',\n action: 'Work them in Identity conflicts: Preview first, then Apply or Dismiss.',\n },\n ORGAPI_UNREACHABLE: {\n meaning: 'The OrgApi could not be asked, so the remote checks were skipped.',\n action: 'Try again later. Do not act on remote information from this dossier.',\n },\n NO_LOCAL_ACCOUNT: {\n meaning: 'No Notes account matches this query.',\n action:\n 'If the OrgApi knows the user, the account is created by the next OrgApi event for them. Manual syncs never create accounts.',\n },\n};\n\n/** \"Next sync would\" decisions, by `decision` from the dossier. */\nexport const NEXT_SYNC_HELP: Record = {\n UPDATE_EXISTING: {\n meaning: 'Update the existing account.',\n action: 'Healthy. A sync refreshes the account in place.',\n },\n CREATE_ACCOUNT: {\n meaning: 'Create a new account (event sync only; a manual sync never creates).',\n action: 'Wait for the next OrgApi event for this user; it creates the account.',\n },\n PARK_ORG_MOVE: {\n meaning: 'Park an ORG_MOVE conflict for staff; nothing is applied.',\n action:\n 'Run a USER-EMAIL sync to park it, then preview and apply it in Identity conflicts.',\n },\n PARK_EMAIL_DIFFERENT_CLIENT: {\n meaning: 'Park an EMAIL_DIFFERENT_CLIENT conflict for staff; nothing is applied.',\n action:\n 'The user was probably re-created upstream in another organization. See \"Same email, different organization\" in Instructions.',\n },\n PARK_NO_CLIENT: {\n meaning: 'Park a NO_CLIENT conflict: the organization has no Notes client.',\n action:\n \"Only parked for a user with no Notes account, so a manual sync cannot help. Get the organization's Notes client created (onboarding), then wait for the next OrgApi event for the user, which creates the account. Dismiss only once the account exists.\",\n },\n SKIP: {\n meaning: 'Skip the user; nothing changes.',\n action: 'Read the reason. A retired or deleted identity is skipped on purpose.',\n },\n ERROR: {\n meaning: 'Could not predict the next sync.',\n action: 'Try again later.',\n },\n};\n\n/** Drift audit finding types, by `type` from `IdentityDriftAuditor`. */\nexport const DRIFT_TYPE_HELP: Record = {\n ORG_MISMATCH: {\n label: 'Account in a different organization than the OrgApi says',\n meaning: \"The account's client is not the organization the OrgApi puts the user in.\",\n action: 'Open the dossier and follow \"Next sync would\". Usually a USER-EMAIL sync, then apply the parked ORG_MOVE.',\n },\n ORPHANED_REMOTE_ID: {\n label: 'Account whose B2C id the OrgApi no longer knows',\n meaning: 'The stored B2C id, and the email, find no OrgApi user.',\n action: 'Open the dossier. Retire the account if the user is gone for good.',\n },\n WELDER_FORK_OPERATOR_ID: {\n label: 'Welders sharing an operator id in one client',\n meaning: 'Two or more live welders in one client have the same operator id: a welder that forked when re-created.',\n action: 'No link operation exists yet for old forks. Note them; do not merge certificates by hand.',\n },\n WELDER_FORK_STAMP_NAME: {\n label: 'Welders sharing a stamp and name in one client',\n meaning: 'Two or more live welders in one client have the same stamp and name.',\n action: 'Same as operator-id forks: note them, do not merge by hand.',\n },\n CROSS_TENANT_COMPANY: {\n label: \"Account holding another client's company\",\n meaning: 'An account is subscribed to, or allowed on, a company owned by a different client.',\n action: 'No repair operation exists yet. Note the account.',\n },\n AUDIT_ERROR: {\n label: 'Account the audit could not check',\n meaning: 'An OrgApi call failed for this account during the audit.',\n action: 'Re-run the full audit later. If it keeps failing, open the dossier.',\n },\n};\n\n/** Identity conflict reasons, by `reason`. */\nexport const CONFLICT_REASON_HELP: Record = {\n ORG_MOVE: {\n meaning: \"The user's organization changed upstream; the account still sits in the old one.\",\n action:\n 'Preview, then Apply: the account and its staff move. Refused when the staff authored, verified or approved documents; then leave it for a product decision.',\n },\n EMAIL_DIFFERENT_CLIENT: {\n meaning: 'An OrgApi user in another organization has the email of an existing account.',\n action:\n 'Cannot be applied. Open the dossier and follow \"Same email, different organization\" in Instructions, then Dismiss.',\n },\n NO_CLIENT: {\n meaning: \"The user's organization has no Notes client, so the user could not be placed.\",\n action:\n \"Only parked for a user with no Notes account, so a manual sync cannot help. Get the organization's Notes client created, then wait for the next OrgApi event for the user, which creates the account. Dismiss only once the account exists.\",\n },\n DUPLICATE_BUSINESS_KEY: {\n meaning: 'A welder re-created upstream matched an existing welder by operator id or stamp and name.',\n action:\n 'Preview, then Apply to link the new id to the existing welder; its certificates stay put. If several welders matched, link by hand.',\n },\n ORGANIZATION_DELETED: {\n meaning: 'The organization was deleted upstream; its client was orphaned, not deleted.',\n action: 'Nothing to apply. Dismiss once you have confirmed the deletion was intended.',\n },\n AMBIGUOUS_USER_DELETION: {\n meaning: 'A user deletion matched more than one live account, so nothing was retired.',\n action: 'Open the dossier, retire the right account by hand, then Dismiss.',\n },\n};\n\nexport function flagHelp(code: string): HelpEntry | null {\n return FLAG_HELP[code] ?? null;\n}\n","export interface ParsedIds {\n ids: number[];\n invalid: string[];\n}\n\n/**\n * Parses a free-text list of numeric IDs, separated by commas, whitespace or newlines, as pasted\n * from a SQL result or a spreadsheet column. Duplicates are dropped and order is kept. Anything that\n * is not a positive integer lands in `invalid`, so the caller can refuse the whole input rather than\n * silently sending a partial list.\n */\nexport function parseIds(text: string): ParsedIds {\n const ids: number[] = [];\n const invalid: string[] = [];\n for (const token of text.split(/[\\s,;]+/)) {\n if (token === '') {\n continue;\n }\n if (/^\\d+$/.test(token) && Number(token) > 0 && Number.isSafeInteger(Number(token))) {\n const id = Number(token);\n if (!ids.includes(id)) {\n ids.push(id);\n }\n } else {\n invalid.push(token);\n }\n }\n return { ids, invalid };\n}\n\n/**\n * Formats a backend ISO-8601 instant as `YYYY-MM-DD HH:mm UTC`, the precision a staff member\n * needs to line events up. Anything unparseable is returned unchanged, and a missing value as ''.\n */\nexport function formatInstant(iso: string | null | undefined): string {\n if (!iso) {\n return '';\n }\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) {\n return iso;\n }\n return `${date.toISOString().slice(0, 16).replace('T', ' ')} UTC`;\n}\n\n/** Whole days from `iso` to `now`, or null when `iso` is missing or unparseable. */\nexport function daysSince(iso: string | null | undefined, now: Date = new Date()): number | null {\n if (!iso) {\n return null;\n }\n const then = new Date(iso).getTime();\n if (Number.isNaN(then)) {\n return null;\n }\n return Math.max(0, Math.floor((now.getTime() - then) / 86_400_000));\n}\n","import { get } from '@ember/object';\nimport RSVP from 'rsvp';\nimport { isEmpty } from '@ember/utils';\nimport ENV from 'weldnote/config/environment';\n\nfunction authorizeRequest(request, session) {\n let { accessToken } = get(session, 'data.authenticated');\n request.setRequestHeader('Authorization', `Bearer ${accessToken}`);\n}\n\n// https://blog.jayway.com/2017/07/13/open-pdf-downloaded-api-javascript/\n// Downloads a File by Posting to a URL and getting the file back as binary (parameters are sent in the url)\nexport function downloadAjaxFilePromise(\n url,\n session,\n mimeType = 'application/pdf',\n extension = 'pdf'\n) {\n let promise = new RSVP.Promise(function (resolve, reject) {\n let request = new XMLHttpRequest();\n let resolvedUrl = url;\n if (ENV.notesBackendEndpoint && url.startsWith('/')) {\n resolvedUrl = `${ENV.notesBackendEndpoint}${url}`;\n }\n request.open('POST', resolvedUrl);\n request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n authorizeRequest(request, session);\n request.responseType = 'blob';\n request.onload = function () {\n // Only handle status code 200\n if (request.status === 200) {\n // Try to find out the filename from the content disposition `filename` value\n let dispositionHeader = request.getResponseHeader('content-disposition');\n let fileName = `unnamed.${extension}`;\n if (!isEmpty(dispositionHeader)) {\n let matches = /\"([^\"]*)\"/.exec(dispositionHeader);\n fileName = matches != null && matches[1] ? matches[1] : `file.${extension}`;\n }\n // The actual download\n let blob = new Blob([request.response], { type: mimeType });\n\n if (window.navigator.msSaveOrOpenBlob) {\n try {\n window.navigator.msSaveOrOpenBlob(blob, fileName);\n } catch (e) {\n alert('An error ocurred while saving the file, please contact support');\n }\n } else {\n let link = document.createElement('a');\n let objectUrl = window.URL.createObjectURL(blob);\n link.href = objectUrl;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n setTimeout(function () {\n document.body.removeChild(link);\n window.URL.revokeObjectURL(objectUrl);\n }, 100);\n }\n resolve(request.response);\n } else {\n reject(this);\n }\n };\n request.send();\n return request;\n });\n return promise;\n}\n\nexport function downloadExcel(url, session) {\n return downloadAjaxFilePromise(url, session, 'application/vnd.ms-excel', 'xls');\n}\n\nexport function downloadPdf(url, session) {\n return downloadAjaxFilePromise(url, session, 'application/pdf', 'pdf');\n}\n\n// Downloads an export file by POSTing filters as JSON to export/download\nexport function downloadExport(url, session, filters) {\n let promise = new RSVP.Promise(function (resolve, reject) {\n let request = new XMLHttpRequest();\n let resolvedUrl = url;\n if (ENV.notesBackendEndpoint && url.startsWith('/')) {\n resolvedUrl = `${ENV.notesBackendEndpoint}${url}`;\n }\n request.open('POST', resolvedUrl);\n request.setRequestHeader('Content-Type', 'application/json');\n authorizeRequest(request, session);\n request.responseType = 'blob';\n request.onload = function () {\n if (request.status === 200) {\n let dispositionHeader = request.getResponseHeader('content-disposition');\n let fileName = 'unnamed.xls';\n if (!isEmpty(dispositionHeader)) {\n let matches = /\"([^\"]*)\"/.exec(dispositionHeader);\n fileName = matches != null && matches[1] ? matches[1] : 'file.xls';\n }\n let blob = new Blob([request.response], {\n type: 'application/vnd.ms-excel',\n });\n let link = document.createElement('a');\n let objectUrl = window.URL.createObjectURL(blob);\n link.href = objectUrl;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n setTimeout(function () {\n document.body.removeChild(link);\n window.URL.revokeObjectURL(objectUrl);\n }, 100);\n resolve(request.response);\n } else {\n reject(this);\n }\n };\n request.send(JSON.stringify(filters));\n });\n return promise;\n}\n","export default {\n SAVE: 'Save',\n DELETE: 'Delete',\n UPLOAD: 'Upload',\n EDIT: 'Edit',\n ARCHIVE: 'Archive',\n UNARCHIVE: 'Unarchive',\n GENERATE: 'Generate',\n SEARCH: 'Search',\n SELECT: 'Select',\n REVISION: 'Revision',\n MASTER_WPS: 'MasterWPS',\n CREATE_WPS_FROM_PQR: 'CreateWpsFromPQR',\n DISCARD: 'Discard',\n HELP: 'Help',\n LOGIN_METRIC: 'LoginMetric',\n LOGIN_IMPERIAL: 'LoginImperial',\n VALIDATION_FAILED: 'ValidationFailed',\n};\n","import { getOwner } from '@ember/application';\n\n/**\n * Local implementation of ember-api-actions memberAction\n * Performs API actions on individual model instances\n */\nexport function memberAction(options) {\n const { type = 'put', path, urlType = 'updateRecord', ajaxOptions = {}, before, after } = options;\n\n if (!path) {\n throw new Error('memberAction requires a path option');\n }\n\n return function runMemberAction(payload) {\n const record = this;\n const modelClass = record.constructor;\n const modelName = modelClass.modelName || modelClass.typeKey;\n const owner = getOwner(record);\n const store = owner.lookup('service:store');\n const adapter = store.adapterFor(modelName);\n\n // Create snapshot for buildURL\n const snapshot = record._createSnapshot();\n\n // Build the URL using ember-data's buildURL method\n const baseUrl = adapter.buildURL(modelName, record.get('id'), snapshot, urlType);\n\n // Append the action path\n const fullUrl =\n baseUrl.charAt(baseUrl.length - 1) === '/' ? `${baseUrl}${path}` : `${baseUrl}/${path}`;\n\n // Process payload with before hook if provided\n const data = (before && before.call(record, payload)) || payload;\n\n // Make the AJAX request\n const requestOptions = Object.assign({}, ajaxOptions, { data });\n\n return adapter.ajax(fullUrl, type.toUpperCase(), requestOptions).then((response) => {\n if (after && !record.isDestroyed) {\n return after.call(record, response);\n }\n return response;\n });\n };\n}\n\n/**\n * Local implementation of ember-api-actions collectionAction\n * Performs API actions on model collections/classes\n */\nexport function collectionAction(options) {\n const { type = 'put', path, urlType = 'updateRecord', ajaxOptions = {}, before, after } = options;\n\n if (!path) {\n throw new Error('collectionAction requires a path option');\n }\n\n return function runCollectionAction(payload) {\n const record = this;\n const modelClass = record.constructor;\n const modelName = modelClass.modelName || modelClass.typeKey;\n const owner = getOwner(record);\n const store = owner.lookup('service:store');\n const adapter = store.adapterFor(modelName);\n\n // Create snapshot for buildURL\n const snapshot = record._createSnapshot();\n\n // Build the URL using ember-data's buildURL method (without instance ID for collection)\n const baseUrl = adapter.buildURL(\n modelName,\n null, // No ID for collection actions\n snapshot,\n urlType\n );\n\n // Append the action path\n const fullUrl =\n baseUrl.charAt(baseUrl.length - 1) === '/' ? `${baseUrl}${path}` : `${baseUrl}/${path}`;\n\n // Process payload with before hook if provided\n const data = (before && before.call(record, payload)) || payload;\n\n // Make the AJAX request\n const requestOptions = Object.assign({}, ajaxOptions, { data });\n\n return adapter.ajax(fullUrl, type.toUpperCase(), requestOptions).then((response) => {\n if (after && !record.isDestroyed) {\n return after.call(record, response);\n }\n return response;\n });\n };\n}\n\n/**\n * Helper function for pushing response data into the store\n * Similar to ember-api-actions' serializeAndPush utility\n */\nexport function serializeAndPush(response) {\n if (response && response.data) {\n const owner = getOwner(this);\n const store = owner.lookup('service:store');\n return store.pushPayload(response);\n }\n return response;\n}\n\n// Export default for backward compatibility\nexport default {\n memberAction,\n collectionAction,\n serializeAndPush,\n};\n","import {\n isStandardISO,\n isStandardASME,\n isStandardAWS,\n isStandardAWSB21,\n} from 'weldnote/utils/standards';\nimport { isButtWeld } from 'weldnote/utils/rules/weld-type';\nimport Constants from 'weldnote/utils/constants';\n\nconst { PRODUCT_TYPE, UNIT_SYSTEM } = Constants;\n\n/*\n Return the Product Type approval range with the following structure:\n {\n productType: [] // Array with the product types\n restrictions: [] // Array of objects with restrictions that apply to any of the values in the `productType`key\n structure if the following:\n\n productType: null, // The product type to which this applies\n diameter: {\n unitSystem: null, // The unit system for the restriction\n value: null, // the minimum value of the diameter (inclusive)\n },\n weldingPositions: [], // welding positions (if any) that must exist\n }\n */\nexport function calculatePqrProductTypeApprovalRange(\n standard,\n weldType,\n testPiece,\n unitSystem = UNIT_SYSTEM.METRIC\n) {\n let result = {\n productType: [],\n restrictions: [],\n };\n // Restrictions array includes objects with the following type\n /* {\n productType: null,\n diameter: {\n unitSystem: null,\n value: null,\n },\n weldingPositions: [],\n }\n */\n if (isStandardISO(standard)) {\n if (isButtWeld(weldType) && testPiece === PRODUCT_TYPE.PIPE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n } else if (testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 150,\n unitSystem: UNIT_SYSTEM.METRIC,\n },\n\n weldingPositions: ['PA', 'PC'],\n });\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 500,\n unitSystem: UNIT_SYSTEM.METRIC,\n },\n });\n } else if (testPiece === PRODUCT_TYPE.PIPE) {\n result.productType = [PRODUCT_TYPE.PIPE];\n }\n } else if (isStandardASME(standard) || isStandardAWSB21(standard)) {\n if (testPiece === PRODUCT_TYPE.PIPE || testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n }\n } else if (isStandardAWS(standard)) {\n if (testPiece === PRODUCT_TYPE.PIPE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n } else if (testPiece === PRODUCT_TYPE.PLATE) {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 600,\n unitSystem: UNIT_SYSTEM.METRIC,\n },\n });\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n result.restrictions.pushObject({\n productType: PRODUCT_TYPE.PIPE,\n diameter: {\n value: 24,\n unitSystem: UNIT_SYSTEM.IMPERIAL,\n },\n });\n }\n }\n } else {\n result.productType = [PRODUCT_TYPE.PIPE, PRODUCT_TYPE.PLATE];\n }\n return result;\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nimport { isStandardISO, isStandardASME, isStandardAWS } from 'weldnote/utils/standards';\n\nimport Constants from 'weldnote/utils/constants';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport { WeldingStandard } from 'weldnote/config/types/welding-standard';\nimport WeldType from 'weldnote/models/weld-type';\n\nconst { WELD_TYPES, WELDING_POSITION_DIRECTION_OPTIONS, PRODUCT_TYPE } = Constants;\n\nexport default class WeldingPositionApprovalRange {\n private allPositions: WeldingPosition[];\n\n private parameters: any;\n\n constructor(\n allPositions: WeldingPosition[],\n parameters: {\n standard: WeldingStandard;\n weldType: WeldType;\n impactRequirements: boolean;\n productType: string;\n }\n ) {\n this.parameters = parameters;\n let { standard } = parameters;\n if (standard) {\n let codeId = standard.industryCodeId;\n this.allPositions = allPositions.filter((item) => {\n let industryCode = get(item, 'industryCode');\n if (industryCode) {\n let positionCodeId = get(industryCode, 'id');\n return positionCodeId === codeId;\n }\n return false;\n });\n } else {\n this.allPositions = allPositions;\n }\n }\n\n _filterPositions(positions: string[]): WeldingPosition[] {\n let result: WeldingPosition[] = [];\n positions.forEach((position: string) => {\n let potentialMatch = this.allPositions.findBy('code', position);\n if (potentialMatch) {\n result.pushObject(potentialMatch);\n }\n });\n return result;\n }\n\n _calculateISOPositions(weldingPosition: string, weldType: string): WeldingPosition[] {\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (weldingPosition === 'PC') {\n let resultingPositions = ['PA', 'PB', 'PC'];\n return this.allPositions.filter((item) => {\n let currentPositionCode = item.get('code');\n if (currentPositionCode) {\n return resultingPositions.includes(currentPositionCode);\n } else {\n return false;\n }\n });\n } else {\n return this.allPositions.filter((item) => {\n return item.get('code') === weldingPosition;\n });\n }\n } else {\n let ascendantPositions = ['PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PH', 'H-L045', 'PF+PC'];\n let result = ascendantPositions.includes(weldingPosition);\n if (result) {\n return this.allPositions.filter((item) => {\n let currentPositionCode = item.get('code');\n if (currentPositionCode) {\n return ascendantPositions.includes(currentPositionCode);\n } else {\n return false;\n }\n });\n }\n let descendentPositions = ['PG', 'PJ', 'J-L045'];\n result = descendentPositions.includes(weldingPosition);\n if (result) {\n return this.allPositions.filter((item) => {\n let currentPositionCode = item.get('code');\n if (currentPositionCode) {\n return descendentPositions.includes(currentPositionCode);\n } else {\n return false;\n }\n });\n }\n }\n return [];\n }\n\n _calculateAWSPositions(weldingPosition: string, productType: string) {\n if (productType === PRODUCT_TYPE.PLATE) {\n if (weldingPosition === '1G') {\n return this._filterPositions(['1G', '1F']);\n } else if (weldingPosition === '2G') {\n return this._filterPositions(['1G', '2G', '1F', '2F']);\n } else if (weldingPosition === '3G') {\n return this._filterPositions(['3G', '3F']);\n } else if (weldingPosition === '4G') {\n return this._filterPositions(['4G', '4F']);\n } else if (weldingPosition === '2F') {\n return this._filterPositions(['2F', '1F']);\n } else {\n return this._filterPositions([weldingPosition]);\n }\n } else if (productType === PRODUCT_TYPE.PIPE) {\n if (weldingPosition === '1G') {\n return this._filterPositions(['1G', '1F']);\n } else if (weldingPosition === '2G') {\n return this._filterPositions(['1G', '2G', '1F', '2F']);\n } else if (weldingPosition === '5G') {\n return this._filterPositions(['1G', '3G', '4G', '5G', '1F', '3F', '4F', '5F']);\n } else if (weldingPosition === '5G+2G') {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6G') {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '6GR') {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (weldingPosition === '2F') {\n return this._filterPositions(['1F', '2F']);\n } else if (weldingPosition === '4F') {\n return this._filterPositions(['1F', '2F', '4F']);\n } else if (weldingPosition === '5F') {\n return this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n } else {\n return this._filterPositions([weldingPosition]);\n }\n }\n return [];\n }\n\n _calculateASMEPositions(\n weldingPosition: string,\n testPieceDirection: string,\n weldType: string,\n impactRequirements: boolean\n ) {\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n let positions2 = ['3G', '5G', '6G', '6GR'];\n if (\n positions2.includes(weldingPosition) &&\n testPieceDirection === WELDING_POSITION_DIRECTION_OPTIONS.UPHILL\n ) {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (['1F', '1G'].includes(weldingPosition)) {\n return this._filterPositions(['1G', '1F']);\n } else if (['2F', '2G'].includes(weldingPosition)) {\n return this._filterPositions(['1G', '1F', '2G', '2F']);\n } else if (['3F', '3G'].includes(weldingPosition)) {\n return this._filterPositions(['1G', '1F', '3G', '3F']);\n } else if (['4F', '4G'].includes(weldingPosition)) {\n return this._filterPositions(['1G', '1F', '4G', '4F']);\n } else if (['5F', '5G'].includes(weldingPosition)) {\n return this._filterPositions(['1G', '2G', '3G', '4G', '5G', '1F', '2F', '3F', '4F', '5F']);\n } else if (['6G'].includes(weldingPosition)) {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (['6GR'].includes(weldingPosition)) {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n }\n } else {\n if (!impactRequirements) {\n let positionsG = ['1G', '2G', '3G', '4G', '5G', '6G', '6GR'];\n let positionsF = ['1F', '2F', '3F', '4F', '5F'];\n if (positionsG.includes(weldingPosition)) {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (positionsF.includes(weldingPosition)) {\n return this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n }\n } else {\n let positions1 = ['1G', '2G', '4G'];\n let positions2 = ['3G', '5G', '6G', '6GR'];\n let positions3 = ['1F', '2F', '4F'];\n let positions4 = ['3F', '5F'];\n if (positions1.includes(weldingPosition)) {\n return this._filterPositions(['1G', '2G', '4G', '1F', '2F', '4F']);\n } else if (positions2.includes(weldingPosition)) {\n return this._filterPositions([\n '1G',\n '2G',\n '3G',\n '4G',\n '5G',\n '6G',\n '6GR',\n '1F',\n '2F',\n '3F',\n '4F',\n '5F',\n ]);\n } else if (positions3.includes(weldingPosition)) {\n return this._filterPositions(['1F', '2F', '4F']);\n } else if (positions4.includes(weldingPosition)) {\n return this._filterPositions(['1F', '2F', '3F', '4F', '5F']);\n }\n }\n }\n return [];\n }\n\n calculateWeldingPositions(testPiece: WeldingPosition, testPieceDirection: string) {\n let { standard, weldType, impactRequirements, productType } = this.parameters;\n\n if (isEmpty(testPiece) || !standard) {\n return [];\n }\n let weldingPosition = get(testPiece, 'code');\n if (!weldingPosition) {\n return [];\n }\n if (isEmpty(weldingPosition)) {\n return [];\n }\n\n if (isStandardISO(standard)) {\n return this._calculateISOPositions(weldingPosition, weldType);\n } else if (isStandardASME(standard)) {\n return this._calculateASMEPositions(\n weldingPosition,\n testPieceDirection,\n weldType,\n impactRequirements\n );\n } else if (isStandardAWS(standard)) {\n return this._calculateAWSPositions(weldingPosition, productType);\n }\n\n if (testPiece) {\n return this.allPositions.filter((item) => {\n return item.get('code') === weldingPosition;\n });\n } else {\n return [];\n }\n }\n}\n","import { isEmpty } from '@ember/utils';\nimport BaseMaterial from 'weldnote/models/base-material';\n\nexport function isSameMaterial(material1: BaseMaterial, material2: BaseMaterial) {\n return material1.id === material2.id;\n}\n\ntype SimpleMaterial = {\n specification: string;\n grade: string;\n group: string;\n};\n\nexport function formatMaterial({ specification, grade, group }: SimpleMaterial) {\n if (!isEmpty(specification) && !isEmpty(grade) && !isEmpty(group)) {\n return `${specification} - ${grade} - ${group}`;\n } else if (!isEmpty(specification) && !isEmpty(group)) {\n return `${specification} - ${group}`;\n }\n return '';\n}\n\nexport function formatMaterialWithThickness(\n material: SimpleMaterial,\n thickness: number,\n distanceUnits: string\n) {\n if (!isEmpty(thickness)) {\n return `${formatMaterial(material)} (${thickness} ${distanceUnits})`;\n } else {\n return formatMaterial(material);\n }\n}\n","export default {\n isFillerMaterialGroup1(group: string): boolean {\n return (\n group === '1 (1)' ||\n group === '1 (2)' ||\n group === '1 (3)' ||\n group === '1 (4)' ||\n group === '1 (5)' ||\n group === '1 (6)' ||\n group === '1 (7)' ||\n group === '1 (8)' ||\n group === '1 (9)' ||\n group === '1 (10)' ||\n group === '1 (11)' ||\n group === '1 (12)' ||\n group === '1 (N/A)'\n );\n },\n\n isFillerMaterialGroup2(group: string): boolean {\n return (\n group === '2 (1)' ||\n group === '2 (2)' ||\n group === '2 (3)' ||\n group === '2 (4)' ||\n group === '2 (5)' ||\n group === '2 (6)' ||\n group === '2 (7)' ||\n group === '2 (8)' ||\n group === '2 (9)' ||\n group === '2 (10)' ||\n group === '2 (11)' ||\n group === '2 (12)' ||\n group === '2 (N/A)'\n );\n },\n\n isFillerMaterialGroup3(group: string): boolean {\n return (\n group === '3 (1)' ||\n group === '3 (2)' ||\n group === '3 (3)' ||\n group === '3 (4)' ||\n group === '3 (5)' ||\n group === '3 (6)' ||\n group === '3 (7)' ||\n group === '3 (8)' ||\n group === '3 (9)' ||\n group === '3 (10)' ||\n group === '3 (11)' ||\n group === '3 (12)' ||\n group === '3 (N/A)'\n );\n },\n\n isFillerMaterialGroup4(group: string): boolean {\n return (\n group === '4 (1)' ||\n group === '4 (2)' ||\n group === '4 (3)' ||\n group === '4 (4)' ||\n group === '4 (5)' ||\n group === '4 (6)' ||\n group === '4 (7)' ||\n group === '4 (8)' ||\n group === '4 (9)' ||\n group === '4 (10)' ||\n group === '4 (11)' ||\n group === '4 (12)' ||\n group === '4 (N/A)'\n );\n },\n\n isFillerMaterialGroup5(group: string): boolean {\n return (\n group === '5 (1)' ||\n group === '5 (2)' ||\n group === '5 (3)' ||\n group === '5 (4)' ||\n group === '5 (5)' ||\n group === '5 (6)' ||\n group === '5 (7)' ||\n group === '5 (8)' ||\n group === '5 (9)' ||\n group === '5 (10)' ||\n group === '5 (11)' ||\n group === '5 (12)' ||\n group === '5 (N/A)'\n );\n },\n\n isFillerMaterialGroup6(group: string): boolean {\n return (\n group === '6 (1)' ||\n group === '6 (2)' ||\n group === '6 (3)' ||\n group === '6 (4)' ||\n group === '6 (5)' ||\n group === '6 (6)' ||\n group === '6 (7)' ||\n group === '6 (8)' ||\n group === '6 (9)' ||\n group === '6 (10)' ||\n group === '6 (11)' ||\n group === '6 (12)' ||\n group === '6 (N/A)'\n );\n },\n\n isFillerMaterialGroupRange30to40(group: string): boolean {\n return (\n group === '34 (N/A)' ||\n group === '41 (N/A)' ||\n group === '42 (N/A)' ||\n group === '43 (N/A)' ||\n group === '44 (N/A)' ||\n group === '45 (N/A)' ||\n group === '46 (N/A)'\n );\n },\n\n isFillerMaterialGroup50(group: string): boolean {\n return (\n group === '51 (N/A)' ||\n group === '52 (N/A)' ||\n group === '53 (N/A)' ||\n group === '54 (N/A)' ||\n group === '55 (N/A)'\n );\n },\n\n getFillerMaterial1Groups(): string[] {\n return [\n '1 (1)',\n '1 (2)',\n '1 (3)',\n '1 (4)',\n '1 (5)',\n '1 (6)',\n '1 (7)',\n '1 (8)',\n '1 (9)',\n '1 (10)',\n '1 (11)',\n '1 (12)',\n '1 (N/A)',\n ];\n },\n\n getFillerMaterial2Groups(): string[] {\n return [\n '2 (1)',\n '2 (2)',\n '2 (3)',\n '2 (4)',\n '2 (5)',\n '2 (6)',\n '2 (7)',\n '2 (8)',\n '2 (9)',\n '2 (10)',\n '2 (11)',\n '2 (12)',\n '2 (N/A)',\n ];\n },\n\n getFillerMaterial3Groups(): string[] {\n return [\n '3 (1)',\n '3 (2)',\n '3 (3)',\n '3 (4)',\n '3 (5)',\n '3 (6)',\n '3 (7)',\n '3 (8)',\n '3 (9)',\n '3 (10)',\n '3 (11)',\n '3 (12)',\n '3 (N/A)',\n ];\n },\n\n getFillerMaterial4Groups(): string[] {\n return [\n '4 (1)',\n '4 (2)',\n '4 (3)',\n '4 (4)',\n '4 (5)',\n '4 (6)',\n '4 (7)',\n '4 (8)',\n '4 (9)',\n '4 (10)',\n '4 (11)',\n '4 (12)',\n '4 (N/A)',\n ];\n },\n\n getFillerMaterial5Groups(): string[] {\n return [\n '5 (1)',\n '5 (2)',\n '5 (3)',\n '5 (4)',\n '5 (5)',\n '5 (6)',\n '5 (7)',\n '5 (8)',\n '5 (9)',\n '5 (10)',\n '5 (11)',\n '5 (12)',\n '5 (N/A)',\n ];\n },\n\n getFillerMaterial6Groups(): string[] {\n return [\n '6 (1)',\n '6 (2)',\n '6 (3)',\n '6 (4)',\n '6 (5)',\n '6 (6)',\n '6 (7)',\n '6 (8)',\n '6 (9)',\n '6 (10)',\n '6 (11)',\n '6 (12)',\n '6 (N/A)',\n ];\n },\n\n getFillerMaterial30to40Groups(): string[] {\n return ['34 (N/A)', '41 (N/A)', '42 (N/A)', '43 (N/A)', '44 (N/A)', '45 (N/A)', '46 (N/A)'];\n },\n\n getFillerMaterial50Groups(): string[] {\n return ['51 (N/A)', '52 (N/A)', '53 (N/A)', '54 (N/A)', '55 (N/A)'];\n },\n};\n","// This files holds rules that are valid for WPS, PQR and Welder Certificates\nimport Constants from './constants';\n\nconst { SHIELDING_OPTIONS } = Constants;\n\nexport function calculateShielding(weldingProcess: string): string | null {\n let processesNone = ['111', '114', 'SMAW', 'FCAW-S', 'FCAW'];\n let processGas = [\n '141',\n '142',\n '143',\n '145',\n '131',\n '135',\n '136',\n '138',\n 'GTAW',\n 'GMAW',\n 'FCAW',\n 'MCAW',\n 'PAW',\n 'EGW',\n ];\n let processFlux = ['121', '122', '123', '124', '125', 'ESW', 'SAW'];\n if (processesNone.includes(weldingProcess)) {\n return SHIELDING_OPTIONS.NONE;\n } else if (processGas.includes(weldingProcess)) {\n return SHIELDING_OPTIONS.GAS;\n } else if (processFlux.includes(weldingProcess)) {\n return SHIELDING_OPTIONS.FLUX;\n }\n return null;\n}\n","export default {\n CERTIFICATION_SPECIAL_REQUIREMENT: {\n NAME: 'name',\n DESCRIPTION: 'description',\n },\n};\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\n\nexport function notInCollectionById(collection, values) {\n let notInCollection = [];\n if (!isEmpty(collection)) {\n values.forEach((v) => {\n let result = collection.findBy('id', get(v, 'id'));\n if (isEmpty(result)) {\n notInCollection.pushObject(v);\n }\n });\n }\n return notInCollection;\n}\n\nexport function serializeCollection(collection, attribute, join = ', ') {\n if (!isEmpty(collection)) {\n return collection\n .map((item) => {\n return `${get(item, attribute)}`;\n })\n .join(join);\n }\n return '';\n}\n\nexport function valueInCollectionById(collection, idValue) {\n if (!isEmpty(collection) && !isEmpty(idValue)) {\n let result = collection.findBy('id', idValue);\n return !isEmpty(result);\n }\n // When the collection is empty we accept any value\n return true;\n}\n\nexport function collectionInCollectionById(collection, values) {\n let inApprovalRange = true;\n if (!isEmpty(collection)) {\n values.forEach((v) => {\n let result = collection.findBy('id', get(v, 'id'));\n if (isEmpty(result)) {\n inApprovalRange = false;\n }\n });\n }\n return inApprovalRange;\n}\n","export default {\n COMPANY: {\n NAME: 'name',\n ADDRESS: 'address',\n COMPANY_LOGO: 'companyLogo',\n SECONDARY_LOGO: 'secondaryLogo',\n LANGUAGE: 'language',\n ACCOUNT_FOR_AUTO_CERTIFICATES_RENEWAL: 'accountForAutoCertificatesRenewal',\n },\n};\n","export default {\n LAYER_OPTIONS: {\n SINGLE_LAYER: 'SL',\n MULTI_LAYER: 'ML',\n },\n\n WELDING_POSITION_DIRECTION_OPTIONS: {\n UPHILL: 'UH',\n DOWNHILL: 'DH',\n },\n\n WELD_TYPES: {\n BUTT_WELD: 'BW',\n FILLET_WELD: 'FW',\n BRANCH_CONNECTION: 'BC',\n TACK_WELD: 'TW',\n COMPLETE_JOINT_PENETRATION_BUTT_WELD: 'CJP BW',\n PARTIAL_JOINT_PENETRATION_BUTT_WELD: 'PJP BW',\n OVERLAY_WELD: 'OW',\n PARTIAL_PENETRATION_BUTT_WELD: 'PP BW',\n },\n\n WELDING_DETAILS: {\n MULTI_LAYER: 'ml',\n SINGLE_LAYER: 'sl',\n SINGLE_SIDE_NO_BACKING: 'ss nb',\n SINGLE_SIDE_MATERIAL_BACKING: 'ss mb',\n SINGLE_SIDE_GAS_BACKING: 'ss gb',\n SINGLE_SIDE_FLUX_BACKING: 'ss fb',\n BOTH_SIDES: 'bs',\n CONSUMABLE_INSERT: 'ci',\n },\n\n OVERLAY_TYPE_OPTIONS: {\n HARD_FACING: 'HF',\n CORROSION_RESISTANT: 'CR',\n },\n\n SHIELDING_OPTIONS: {\n GAS: 'G',\n FLUX: 'F',\n NONE: 'N',\n },\n\n PRODUCT_TYPE: {\n PIPE: 'PI',\n PLATE: 'PL',\n PIPE_PLATE: 'PP',\n },\n\n ARC_TRANSFER_MODES: {\n SPRAY: 'Spray',\n GLOBULAR: 'Globular',\n PULSED_SPRAY: 'Pulsed-spray',\n SHORT_ARC: 'Short-arc',\n },\n\n CERTIFICATE_STATE: {\n ACTIVE: 'AC',\n ARCHIVED: 'AR',\n INTERNALLY_EXPIRED: 'IE',\n EXTERNALLY_EXPIRED: 'EE',\n },\n\n CERTIFICATE_TYPE: {\n WELDER: 'WELDER',\n OPERATOR: 'OPERATOR',\n },\n\n MISCELLANEOUS_CERTIFICATE_STATE: {\n ACTIVE: 'AC',\n ARCHIVED: 'AR',\n EXPIRED: 'EX',\n },\n\n JOB_KNOWLEDGE_OPTIONS: {\n ACCEPTABLE: 'A',\n NOT_TESTED: 'N',\n },\n\n HTTP: {\n DEBOUNCE: 400,\n },\n\n WELDING_LAYER_OPTIONS: {\n ROOT: 'ROOT',\n FILL: 'FILL',\n CAP: 'CAP',\n },\n\n ERROR_CODES: {\n DUPLICATED_INSTANCE: '23000',\n COMPANY_NOT_ALLOWED: '23021',\n ERROR_SAVING: '2000',\n PERMISSION_DENIED: '1000',\n MISSING_STAFF: '1100',\n MISSING_USER: '2010',\n FOREIGN_KEY: '23503',\n INVALID_PQR_FOR_WPS: '8005',\n CERTIFICATE_INTERNAL_DEADLINE_AFTER_EXTERNAL_DEADLINE: '4050',\n WELDER_STANDARD_NOT_SUPPORTED: '31000',\n SESSION_EXPIRED: '40010',\n PROJECT_WELD_INTERMEDIATE_RESTORE: '41012',\n PROJECT_WELD_USED_BY_OTHERS: '41013',\n },\n\n GROOVE_SHAPE_OPTIONS: {\n V_SHAPE: 'GROOVE_V',\n DOUBLE_V_SHAPE: 'GROOVE_DOUBLE_V',\n HALF_V_SHAPE: 'GROOVE_HALF_V',\n J_SHAPE: 'GROOVE_J',\n DOUBLE_J_SHAPE: 'GROOVE_DOUBLE_J',\n U_SHAPE: 'GROOVE_U',\n DOUBLE_U_SHAPE: 'GROOVE_DOUBLE_U',\n K_SHAPE: 'GROOVE_K',\n X_SHAPE: 'GROOVE_X',\n SQUARE_SHAPE: 'GROOVE_SQUARE',\n NO_SHAPE: 'GROOVE_NONE',\n },\n\n JOINT_TYPE_OPTIONS: {\n BUTT_JOINT: 'BJ',\n CORNER_JOINT: 'CJ',\n T_JOINT: 'TJ',\n SOCKET_JOINT: 'SJ',\n },\n\n PERMISSIONS: {\n ACCOUNT_ADMIN: 'admin',\n SYSUSER: 'sysuser',\n PQR_READ: 'pqr-read',\n PQR_CREATE: 'pqr-create',\n PQR_DELETE: 'pqr-delete',\n PQR_CREATE_WPS: 'pqr-create-wps',\n PQR_EDIT_APPROVAL_RANGE: 'pqr-edit-approval-range',\n PQR_ARCHIVE: 'pqr-archive',\n WPS_READ: 'wps-read',\n WPS_CREATE: 'wps-create',\n WPS_CREATE_REVISION: 'wps-create-revision',\n WPS_ASSIGN_STAFF: 'wps-assign-staff',\n WPS_DELETE: 'wps-delete',\n WPS_ARCHIVE: 'wps-archive',\n WPS_VERIFY: 'wps-verify',\n WPS_APPROVE: 'wps-approve',\n WPS_REVOKE: 'wps-revoke',\n PWPS_READ: 'pwps-read',\n PWPS_CREATE: 'pwps-create',\n PWPS_DELETE: 'pwps-delete',\n PWPS_CREATE_CERTIFICATE: 'pwps-create-certificate',\n PWPS_CREATE_PQR: 'pwps-create-pqr',\n WELDER_CERTIFICATE_READ: 'certificate-read',\n WELDER_CERTIFICATE_CREATE: 'certificate-create',\n WELDER_CERTIFICATE_DELETE: 'certificate-delete',\n WELDER_CERTIFICATE_ARCHIVE: 'certificate-archive',\n WELDER_CERTIFICATE_REVALIDATE: 'certificate-revalidate',\n WELDER_CERTIFICATE_EDIT_APPROVAL_RANGE: 'certificate-edit-approval-range',\n WELDING_BOOK_READ: 'welding-book-read',\n WELDING_BOOK_CREATE: 'welding-book-create',\n WELDING_BOOK_CREATE_REVISION: 'welding-book-create-revision',\n WELDING_BOOK_VERIFY: 'welding-book-verify',\n WELDING_BOOK_APPROVE: 'welding-book-approve',\n WELDING_BOOK_ARCHIVE: 'welding-book-archive',\n WELDING_BOOK_DELETE: 'welding-book-delete',\n FILLER_MATERIAL_CREATE: 'filler-material-create',\n FILLER_MATERIAL_DELETE: 'filler-material-delete',\n BASE_MATERIAL_CREATE: 'base-material-create',\n BASE_MATERIAL_DELETE: 'base-material-delete',\n WELDER_ARCHIVE: 'welder-archive',\n WELDER_CREATE: 'welder-create',\n WELDER_DELETE: 'welder-delete',\n PROJECT_ARCHIVE: 'project-archive',\n PROJECT_READ: 'project-read',\n PROJECT_CREATE: 'project-create',\n PROJECT_DELETE: 'project-delete',\n PROJECT_WELD_CREATE: 'project-weld-create',\n PROJECT_WELD_DELETE: 'project-weld-delete',\n GENERIC_WRITE_PERMISSION: 'generic-write-permission',\n QMATRIX_CREATE: 'qmatrix-create',\n QMATRIX_DELETE: 'qmatrix-delete',\n },\n\n UNIT_SYSTEM: {\n METRIC: 'M',\n IMPERIAL: 'I',\n },\n\n UNITS: {\n MILLIMETER: 'mm',\n INCH: 'in',\n CELSIUS: 'ºC',\n FAHRENHEIT: 'ºF',\n LITER_MINUTE: 'l/min',\n CUBIC_FEET_HOUR: 'CFH',\n KILO_JOULE_MILLIMETER: 'kjmm',\n KILO_JOULE_INCH: 'kjin',\n MILLIMETER_SECOND: 'mms',\n MILLIMETER_MINUTE: 'mmmin',\n METER_MINUTE: 'mmin',\n INCH_MINUTE: 'inmin',\n NEWTON: 'N',\n POUNDS: 'lbs',\n NEWTON_SQUARE_MILIMETER: 'N/mm^2',\n PSI: 'psi',\n SQUARE_MILLIMETER: 'mm^2',\n SQUARE_INCH: 'sq. in.',\n JOULE: 'J',\n FEET_PER_POUND: 'ft. lbs',\n },\n\n WELDING_PROCESSES: {\n GTAW: 'GTAW',\n FCAW: 'FCAW',\n SMAW: 'SMAW',\n SAW: 'SAW',\n GMAW: 'GMAW',\n MCAW: 'MCAW',\n FCAWS: 'FCAW-S',\n PAW: 'PAW',\n ESW: 'ESW',\n 111: '111',\n 121: '121',\n 122: '122',\n 123: '123',\n 124: '124',\n 125: '125',\n 131: '131',\n 135: '135',\n 136: '136',\n 137: '137',\n 138: '138',\n 141: '141',\n 142: '142',\n 143: '143',\n 145: '145',\n 15: '15',\n },\n\n PROCESS_MECANIZATION: {\n MANUAL: 'Manual',\n SEMI_AUTOMATIC: 'Semi-automatic',\n AUTOMATIC: 'Automatic',\n MECHANIZED: 'Mechanized',\n },\n\n TEST_RESULTS: {\n PASSED: 'P',\n FAILED: 'F',\n },\n\n BEND_TEST_TYPE: {\n SIDE_BEND: 'SIDE_BEND',\n TRANSVERSAL: 'TRANSVERSAL',\n FACE_BEND: 'FACE_BEND',\n LONGITUDINAL: 'LONGITUDINAL',\n ROOT_BEND: 'ROOT_BEND',\n BEND_BREAK: 'BEND_BREAK',\n },\n\n DEFAULT_DATE_FORMAT: 'DD/MM/YYYY',\n DEFAULT_SMALL_YEAR_FORMAT: 'DD/MM/YY',\n DEFAULT_DECIMAL_SEPARATOR: '.',\n\n FEATURES: {},\n\n WELDING_POSITIONS: {\n PA: 'PA',\n PC: 'PC',\n },\n\n PWHT_PRESENCE: {\n YES: 'YES',\n NO: 'NO',\n ABSENT: 'ABSENT',\n },\n\n PROJECT_STATUS: {\n PENDING: 'PENDING',\n ACTIVE: 'ACTIVE',\n FINISHED: 'FINISHED',\n },\n\n WPS_TYPE: {\n PRIMARY: 'PRI',\n PROJECT: 'PRO',\n PRELIMINARY: 'PWPS',\n PREQUALIFIED: 'PRE',\n },\n\n PRODUCT_FORM: {\n PLATE: 'PLATE',\n SHEET: 'SHEET',\n BAR: 'BAR',\n ROD: 'ROD',\n FUSION_WELDED_PIPE: 'FUSION_WELDED_PIPE',\n RESISTANCE_WELDED_PIPE: 'RESISTANCE_WELDED_PIPE',\n SEAMLESS_PIPE: 'SEAMLESS_PIPE',\n CAST_PIPE: 'CAST_PIPE',\n FORGED_PIPE: 'FORGED_PIPE',\n FLANGE: 'FLANGE',\n FITTING: 'FITTING',\n FORGING: 'FORGING',\n CASTING: 'CASTING',\n I_BEAM: 'I_BEAM',\n H_BEAM: 'H_BEAM',\n T_BEAM: 'T_BEAM',\n L_BEAN: 'L_BEAN',\n U_BEAM: 'U_BEAM',\n ELBOW_90_DEGREES: 'ELBOW_90_DEGREES',\n ELBOW_45_DEGREES: 'ELBOW_45_DEGREES',\n FLANGE_RTJ: 'FLANGE_RTJ',\n FLANGE_RF: 'FLANGE_RF',\n FLANGE_FF: 'FLANGE_FF',\n ECC_RED: 'ECC_RED',\n CONC_RED: 'CONC_RED',\n TEE_EQ: 'TEE_EQ',\n TEE_RED: 'TEE_RED',\n CAP: 'CAP',\n STUB_END: 'STUB_END',\n WELDOLET: 'WELDOLET',\n WELDOFLANGEL: 'WELDOFLANGEL',\n THREADOLET: 'THREADOLET',\n GASKET_RTJ: 'GASKET_RTJ',\n GASKET_FLAT: 'GASKET_FLAT',\n GASKET: 'GASKET',\n TUBE: 'TUBE',\n ANGLE: 'ANGLE',\n ELBOW_180_SHORT: 'ELBOW_180_SHORT',\n ELBOW_180_LONG: 'ELBOW_180_LONG',\n ELBOW_90_SHORT: 'ELBOW_90_SHORT',\n REDUCING_ELBOW_180_SHORT: 'REDUCING_ELBOW_180_SHORT',\n REDUCING_ELBOW_90_SHORT: 'REDUCING_ELBOW_90_SHORT',\n SOCKOLET: 'SOCKOLET'\n },\n\n FILLER_MATERIAL_ELECTRODE_FORM: {\n WIRE: 'WIRE',\n PLATE: 'PLATE',\n },\n\n FILLER_MATERIAL_GUIDE: {\n CONSUMABLE: 'CONSUMABLE',\n NON_CONSUMABLE: 'NON_CONSUMABLE',\n },\n\n CERTIFICATE_REVALIDATION_TYPE: {\n INTERNAL: 'INTERNAL',\n EXTERNAL: 'EXTERNAL',\n },\n\n REVISION_STATUS: {\n ACTIVE: 'ACT',\n REVISION: 'REV',\n },\n\n WELD_CONDITION: {\n GOOD: 'OK',\n DAMAGED: 'NOK',\n },\n\n WELD_SITUATION: {\n ACTIVE: 'ACT',\n DELETED: 'DEL',\n },\n\n COMPONENT_PROGRESS_STATE: {\n INITIAL: 1,\n COMPLETED: 2,\n TESTED: 4,\n PROCESSED: 8,\n SHIPPED: 16,\n },\n\n COMPONENT_SITUATION: {\n ACTIVE: 'ACT',\n DELETED: 'DEL',\n },\n\n WELD_PROGRESS_STATE: {\n INITIAL: 1,\n FIT: 2,\n WELDED: 4,\n PWHT_COMPLETED: 8,\n TESTED: 16,\n PROCESSED: 32,\n SHIPPED: 64,\n },\n\n WELD_PROGRESS_STATES_ARRAY: [\n {\n name: 'Initial',\n labelKey: 'components.model-project-weld/edit.weld-progress.waiting',\n },\n {\n name: 'Fit',\n labelKey: 'components.model-project-weld/edit.weld-progress.fitted',\n },\n {\n name: 'Welded',\n labelKey: 'components.model-project-weld/edit.weld-progress.welded',\n },\n {\n name: 'Completed',\n labelKey: 'components.model-project-weld/edit.weld-progress.pwht-complete',\n },\n {\n name: 'Tested',\n labelKey: 'components.model-project-weld/edit.weld-progress.tested',\n },\n {\n name: 'Processed',\n labelKey: 'components.model-project-weld/edit.weld-progress.processed',\n },\n {\n name: 'Shipped',\n labelKey: 'components.model-project-weld/edit.weld-progress.shipped',\n },\n ],\n\n DOCUMENT_TYPE_OPTIONS: {\n COATING_REPORT: 'COATING',\n PAINTING_REPORT: 'PAINTING',\n INSPECTION_TEST_PLAN: 'INSPECTION',\n RECEIVED_MATERIAL_REPORT: 'MATERIAL_REPORT',\n NON_CONFORMITY_REPORT: 'NON_CONFORMITY',\n PROCEDURE: 'PROCEDURE',\n PURCHASE_ORDER: 'PURCHASE',\n QUALITY_PLAN: 'QUALITY_PLAN',\n REQUEST_FOR_INFORMATION: 'RFI',\n SCOPE_OF_WORK: 'SCOPE',\n SPECIFICATION: 'SPECIFICATION',\n OTHER: 'OTHER',\n },\n\n WELDER_CERTIFICATE_REVALIDATION_DEADLINES: {\n TODAY: 'today',\n WEEK: '7days',\n MONTH: '30days',\n TWO_MONTH: '60days',\n THREE_MONTH: '90days',\n CUSTOM: 'custom',\n },\n\n ARCHIVAL_STATE: {\n ACTIVE: 'AC',\n ARCHIVED: 'AR',\n },\n\n CERTIFICATE_INTERNAL_REVALIDATION_TYPE: {\n REGULAR: 'regular',\n INTERNAL: 'internal',\n EXTERNAL: 'external',\n },\n\n TYPE_OF_PERSON: {\n WELDER: 'WELDER',\n FITTER: 'FITTER',\n INSPECTOR: 'INSPECTOR',\n },\n\n WPS_INCLUSION: {\n INCLUDE_UPLOADED: 'UP',\n GENERATE_PDF: 'GEN',\n },\n\n PROJECT_REFERENCE_TYPE: {\n MANUAL: 'M',\n REFERENCE: 'R',\n },\n\n WELDNOTE_PLANS: {\n WPS_ONLY: 'WPS_ONLY',\n CERTIFICATES: 'CERTIFICATES',\n QUALITY: 'QUALITY',\n },\n\n TASK_STATUS: {\n INITIAL: 100,\n IN_PROGRESS: 200,\n FINISHED: 250,\n IN_ERROR: 500,\n },\n\n OVERLAY_FILLER_MATERIAL_FORM: {\n WIRE: 'WIRE',\n STRIP: 'STRIP',\n },\n\n FILE_CONTEXT: {\n GROOVE_DESIGN: 'groove-design',\n WELD_LAYER_CONFIGURATION: 'weld-layer',\n COMPANY_LOGO: 'logo',\n PQR_PDF_DOCUMENT: 'pqr-pdf-document',\n PQR_REPORT_DOCUMENT: 'pqr-report',\n PQR_TEST: 'pqr-test',\n WPS_PDF_DOCUMENT: 'wps-pdf-document',\n IEIS_PDF_DOCUMENT: 'ieis-pdf-document',\n WELDER_CERTIFICATE_REPORT: 'welder-certificate-report',\n WELDER_CERTIFICATE_PDF_DOCUMENT: 'welder-certificate-pdf-document',\n WELDER_CERTIFICATE_TEST: 'welder-certificate-test',\n MISCELLANEOUS_CERTIFICATE_PDF_DOCUMENT: 'miscellaneous-certificate-pdf-document',\n WPS_TEMPLATE: 'wps-template',\n WELDER_REPORT: 'welder-report',\n FITTER_REPORT: 'fitter-report',\n INSPECTOR_REPORT: 'inspector-report',\n PROJECT_BASE_MATERIAL_CERTIFICATE: 'project-base-material-certificate',\n PROJECT_FILLER_MATERIAL_CERTIFICATE: 'project-filler-material-certificate',\n PROJECT_REPORT_DOCUMENT: 'project-report',\n PROJECT_EXCEL_WELD_EXPORT: 'project-weld-excel-report',\n PROJECT_DRAWING: 'project-drawing',\n PROJECT_COMPONENT_DRAWING: 'project-component-drawing',\n PROJECT_TEST: 'project-test',\n PROJECT_DOCUMENT: 'project-document',\n PROJECT_COVER: 'project-cover',\n WELDING_BOOK_REPORT: 'welding-book-report',\n WELDING_BOOK_COVER: 'welding-book-cover',\n WELDING_BOOK_DRAWING: 'welding-book-drawing',\n WPS_PDF: 'wps-pdf',\n SIGNATURE: 'signature',\n DIGITALIZE_PQR: 'digitalize-pqr',\n DIGITALIZE_WELDER_CERTIFICATE: 'digitalize-welder-certificate',\n },\n\n NON_DESTRUCTIVE_TEST_TYPE: {\n VT: 'VT', \n MT: 'MT',\n RT: 'RT',\n UT: 'UT',\n PT: 'PT'\n },\n};\n","import { assert } from '@ember/debug';\nimport { isEmpty } from '@ember/utils';\n\nexport function convertDecimals(rawValue: number, separator: string): string {\n assert('Must pass a separator', !isEmpty(separator));\n\n let rawValueString = `${rawValue}`;\n if (separator !== '.') {\n rawValueString = rawValueString.replace(separator, '.');\n }\n if (rawValueString.indexOf(',') >= 0) {\n rawValueString = rawValueString.replace(',', '.');\n }\n return rawValueString;\n}\n\nexport function displayDecimals(rawValue: number, separator: string): string {\n assert('Must pass a separator', !isEmpty(separator));\n\n let rawValueString = `${rawValue}`;\n let result = rawValueString;\n if (separator !== '.') {\n return (result = rawValueString.replace('.', separator));\n }\n return result;\n}\n","/**\n * Entity resolver functions for the digitalize feature.\n *\n * Pure functions that match parsed PDF values to existing WeldNote entities.\n * Used by both Welder Certificate and PQR review modals (and future WPS).\n *\n * Pattern: Each resolver takes an options array (or store for async lookups)\n * and returns the matched entity, or null if not found.\n */\n\nimport Constants from 'weldnote/utils/constants';\nimport type {\n EmberRecord,\n MappedValue,\n KeyLabelOption,\n StoreInterface,\n ShieldingInfo,\n} from './types';\nimport { getId, getProperty, matchKeyLabelOption, findMapping } from './shared-helpers';\n\nconst { SHIELDING_OPTIONS } = Constants;\n\n/**\n * Narrow interface for objects that may have Ember Data's `.get()` method.\n * Ember Data model classes satisfy this without needing `[key: string]: unknown`.\n */\ninterface Gettable {\n id?: string;\n get?: (key: string) => unknown;\n}\n\n/**\n * Accepts both strict `Record` and typed interfaces\n * with optional MappedValue fields (e.g., PQRValidationMappings).\n */\ntype MappingsParam = Record;\n\n// ============================================================================\n// Synchronous resolvers (from pre-loaded options arrays)\n// ============================================================================\n\n/**\n * Look up an entity by its validation mapping `entityId` in a pre-loaded options array.\n *\n * The backend returns a `mappings` object where each key maps to `{ entityId, originalValue }`.\n * This function finds the matching record in `options` by comparing IDs.\n */\nexport function resolveEntityByMapping(\n mappingKey: string,\n mappings: MappingsParam,\n options: T[] | null | undefined\n): T | null {\n const mapping = mappings[mappingKey];\n if (!mapping?.entityId || !options) return null;\n\n const found = options.find((o) => {\n const id = o.get ? (o.get('id') as string) : o.id;\n return String(id) === String(mapping.entityId);\n });\n\n return found || null;\n}\n\n/**\n * Resolve a unit system from a parsed value.\n * Matches by key prefix (e.g., \"Metric\" → \"M\", \"Imperial\" → \"I\").\n */\nexport function resolveUnitSystem(\n options: KeyLabelOption[] | null | undefined,\n parsedValue: string | undefined\n): KeyLabelOption | null {\n if (!parsedValue || !options) return null;\n const upper = parsedValue.toUpperCase();\n return (\n options.find((o) => {\n const key = o.key?.toUpperCase();\n return key && upper.startsWith(key);\n }) || null\n );\n}\n\n/**\n * Resolve a certificate type from a parsed value.\n * Matches by exact key (case-insensitive). Falls back to defaultKey if provided.\n */\nexport function resolveCertificateType(\n options: KeyLabelOption[],\n parsedValue: string | undefined,\n defaultKey?: string\n): KeyLabelOption | null {\n if (parsedValue) {\n const upper = parsedValue.toUpperCase();\n const match = options.find((o) => o.key.toUpperCase() === upper);\n if (match) return match;\n }\n if (defaultKey) {\n return options.find((o) => o.key === defaultKey) || null;\n }\n return null;\n}\n\n/**\n * Resolve a product type from a parsed value.\n * Matches by key or label (case-insensitive, label uses includes).\n */\nexport function resolveProductType(\n options: KeyLabelOption[] | null | undefined,\n parsedValue: string | undefined\n): KeyLabelOption | null {\n return matchKeyLabelOption(options, parsedValue);\n}\n\n/**\n * Resolve a joint type from a parsed value.\n */\nexport function resolveJointType(\n options: KeyLabelOption[] | null | undefined,\n parsedValue: string | undefined\n): KeyLabelOption | null {\n return matchKeyLabelOption(options, parsedValue);\n}\n\n/**\n * Resolve an overlay type from a parsed value.\n */\nexport function resolveOverlayType(\n options: KeyLabelOption[] | null | undefined,\n parsedValue: string | undefined\n): KeyLabelOption | null {\n return matchKeyLabelOption(options, parsedValue);\n}\n\n/**\n * Resolve a position direction from a parsed value.\n * Matches by exact key (case-insensitive).\n */\nexport function resolvePositionDirection(\n options: KeyLabelOption[] | null | undefined,\n parsedValue: string | undefined\n): KeyLabelOption | null {\n if (!parsedValue || !options) return null;\n const upper = parsedValue.toUpperCase();\n return options.find((o) => o.key.toUpperCase() === upper) || null;\n}\n\n/**\n * Fallback resolver for mechanization: matches by name when the backend\n * doesn't provide an entity mapping (e.g., \"Manual\", \"Semi-automatic\").\n */\nexport function resolveMecanizationByName(\n options: T[] | null | undefined,\n parsedValue: string | undefined\n): T | null {\n if (!parsedValue || !options) return null;\n const normalized = parsedValue.trim().toLowerCase();\n return (\n options.find((o) => {\n const name = (o.get ? o.get('name') : (o as Record)['name']) as string | undefined;\n return typeof name === 'string' && name.trim().toLowerCase() === normalized;\n }) || null\n );\n}\n\n/**\n * Resolve an electrode type from a mapping, with fallback matching by shortDesignation.\n */\nexport function resolveElectrodeType(\n mappingKey: string,\n mappings: MappingsParam,\n options: T[] | null | undefined,\n parsedValue: string | undefined\n): T | null {\n // Try mapping first\n const byMapping = resolveEntityByMapping(mappingKey, mappings, options);\n if (byMapping) return byMapping;\n\n // Fallback: match by shortDesignation\n if (!parsedValue || !options) return null;\n const lower = parsedValue.toLowerCase();\n return (\n options.find((o) => {\n const des = (o.get ? o.get('shortDesignation') : (o as Record)['shortDesignation']) as string | undefined;\n return des != null && des.toLowerCase() === lower;\n }) || null\n );\n}\n\n// ============================================================================\n// Async resolvers (require store lookup)\n// ============================================================================\n\n/**\n * Resolve a store record by model name and entity ID from a mapping.\n * Returns the record, or null if not found.\n */\nexport async function resolveStoreRecord(\n store: StoreInterface,\n modelName: string,\n entityId: string\n): Promise {\n try {\n return await store.findRecord(modelName, entityId);\n } catch {\n return null;\n }\n}\n\n/**\n * Resolve a base material from a mapping + populate thickness/diameter fields.\n * Returns `{ baseMaterial, thickness, diameter }`.\n */\nexport interface ResolvedBaseMaterial {\n baseMaterial: EmberRecord | null;\n thickness: number | null;\n diameter: number | null;\n}\n\nexport async function resolveBaseMaterial(\n store: StoreInterface,\n mappingKey: string,\n mappings: MappingsParam,\n parsedBm: { thickness?: string | number; diameter?: string | number } | null | undefined\n): Promise {\n let baseMaterial: EmberRecord | null = null;\n const mapping = mappings[mappingKey];\n if (mapping?.entityId) {\n baseMaterial = await resolveStoreRecord(store, 'base-material', String(mapping.entityId));\n }\n\n const thickness = parsedBm?.thickness != null ? Number(parsedBm.thickness) : null;\n const diameter = parsedBm?.diameter != null ? Number(parsedBm.diameter) : null;\n\n return {\n baseMaterial,\n thickness: thickness != null && !isNaN(thickness) ? thickness : null,\n diameter: diameter != null && !isNaN(diameter) ? diameter : null,\n };\n}\n\n/**\n * Resolve a filler material from a mapping.\n */\nexport async function resolveFillerMaterial(\n store: StoreInterface,\n index: number,\n mappings: MappingsParam\n): Promise {\n const mappingKey = `fillerMaterial${index}`;\n const mapping = mappings[mappingKey];\n if (!mapping?.entityId) return null;\n return resolveStoreRecord(store, 'filler-material', String(mapping.entityId));\n}\n\n/**\n * Resolve a filler material commercial designation from a mapping.\n * Also returns the parent filler material if the CD has one and no filler material was previously set.\n */\nexport interface ResolvedCommercialDesignation {\n commercialDesignation: EmberRecord | null;\n parentFillerMaterial: EmberRecord | null;\n}\n\nexport async function resolveFillerMaterialCommercialDesignation(\n store: StoreInterface,\n index: number,\n mappings: MappingsParam,\n alternateKeys?: string[]\n): Promise {\n const primaryKey = `fillerMaterial${index}CommercialDesignation`;\n const keys = alternateKeys ? [primaryKey, ...alternateKeys] : [primaryKey];\n const mapping = findMapping(mappings, keys);\n\n if (!mapping?.entityId) {\n return { commercialDesignation: null, parentFillerMaterial: null };\n }\n\n const cd = await resolveStoreRecord(\n store,\n 'filler-material-commercial-designation',\n String(mapping.entityId)\n );\n\n let parentFillerMaterial: EmberRecord | null = null;\n if (cd) {\n const fm = getProperty(cd, 'fillerMaterial') as EmberRecord | null;\n if (fm && getId(fm)) {\n parentFillerMaterial = fm;\n }\n }\n\n return { commercialDesignation: cd, parentFillerMaterial };\n}\n\n// ============================================================================\n// Shielding resolvers\n// ============================================================================\n\n/**\n * Result of resolving a shielding section (gas/flux entity, commercial designation, etc.).\n */\nexport interface ResolvedShielding {\n shieldingType: string | null;\n gasMixture: string;\n gas: EmberRecord | null;\n flux: EmberRecord | null;\n gasCommercialDesignation: EmberRecord | null;\n fluxCommercialDesignation: EmberRecord | null;\n parentGas: EmberRecord | null;\n parentFlux: EmberRecord | null;\n flowRateMin: number | null;\n flowRateMax: number | null;\n flowRate: string;\n}\n\n/**\n * Resolve all shielding fields for a given index (1, 2, 3) or key (\"Root\", \"Fill\", \"Cap\").\n * Handles both WC naming (Root/Fill/Cap) and PQR naming (1/2/3).\n */\nexport async function resolveShielding(\n store: StoreInterface,\n shieldingKey: string,\n parsedShielding: ShieldingInfo | undefined,\n mappings: MappingsParam\n): Promise {\n const empty: ResolvedShielding = {\n shieldingType: null,\n gasMixture: '',\n gas: null,\n flux: null,\n gasCommercialDesignation: null,\n fluxCommercialDesignation: null,\n parentGas: null,\n parentFlux: null,\n flowRateMin: null,\n flowRateMax: null,\n flowRate: '',\n };\n\n if (!parsedShielding) return empty;\n\n // Determine shielding type\n let shieldingType: string | null = null;\n if (parsedShielding.type === 'flux') {\n shieldingType = SHIELDING_OPTIONS.FLUX;\n } else if (\n parsedShielding.designation ||\n parsedShielding.gas_mixture ||\n parsedShielding.flow_rate ||\n parsedShielding.flow_rate_min != null\n ) {\n shieldingType = SHIELDING_OPTIONS.GAS;\n }\n\n const gasMixture = parsedShielding.gas_mixture || '';\n const flowRateMin = parsedShielding.flow_rate_min ?? null;\n const flowRateMax = parsedShielding.flow_rate_max ?? null;\n const flowRate = parsedShielding.flow_rate || '';\n\n // Resolve gas/flux entity from mapping\n let gas: EmberRecord | null = null;\n let flux: EmberRecord | null = null;\n const mapping = mappings[shieldingKey];\n\n if (mapping?.entityId && parsedShielding.type === 'gas') {\n gas = await resolveStoreRecord(store, 'gas', String(mapping.entityId));\n } else if (mapping?.entityId && parsedShielding.type === 'flux') {\n flux = await resolveStoreRecord(store, 'flux', String(mapping.entityId));\n }\n\n // Resolve gas commercial designation\n let gasCommercialDesignation: EmberRecord | null = null;\n let parentGas: EmberRecord | null = null;\n const gasCdMapping = findMapping(mappings, [`${shieldingKey}GasCommercialDesignation`]);\n if (gasCdMapping?.entityId && parsedShielding.type === 'gas') {\n gasCommercialDesignation = await resolveStoreRecord(\n store,\n 'gas-commercial-designation',\n String(gasCdMapping.entityId)\n );\n if (gasCommercialDesignation && !gas) {\n const relatedGas = getProperty(gasCommercialDesignation, 'gas') as EmberRecord | null;\n if (relatedGas && getId(relatedGas)) {\n parentGas = relatedGas;\n }\n }\n }\n\n // Resolve flux commercial designation\n let fluxCommercialDesignation: EmberRecord | null = null;\n let parentFlux: EmberRecord | null = null;\n const fluxCdMapping = findMapping(mappings, [`${shieldingKey}FluxCommercialDesignation`]);\n if (fluxCdMapping?.entityId && parsedShielding.type === 'flux') {\n fluxCommercialDesignation = await resolveStoreRecord(\n store,\n 'flux-commercial-designation',\n String(fluxCdMapping.entityId)\n );\n if (fluxCommercialDesignation && !flux) {\n const relatedFlux = getProperty(fluxCommercialDesignation, 'flux') as EmberRecord | null;\n if (relatedFlux && getId(relatedFlux)) {\n parentFlux = relatedFlux;\n }\n }\n }\n\n return {\n shieldingType,\n gasMixture,\n gas,\n flux,\n gasCommercialDesignation,\n fluxCommercialDesignation,\n parentGas,\n parentFlux,\n flowRateMin,\n flowRateMax,\n flowRate,\n };\n}\n\n/**\n * Resolve backing shielding fields. Similar to resolveShielding but with\n * fixed \"backing\" key and slightly different parsed data shape.\n */\nexport async function resolveShieldingBacking(\n store: StoreInterface,\n parsedBacking: ShieldingInfo | undefined,\n mappings: MappingsParam\n): Promise {\n return resolveShielding(store, 'backing', parsedBacking, mappings);\n}\n\n/**\n * Resolve an emission date from a parsed string.\n * Returns `{ date, originalValue }`.\n */\nexport function resolveEmissionDate(\n parsedDate: string | undefined\n): { date: Date | null; originalValue: string } {\n if (!parsedDate) {\n return { date: null, originalValue: '' };\n }\n const date = new Date(parsedDate);\n return {\n date: !isNaN(date.getTime()) ? date : null,\n originalValue: parsedDate,\n };\n}\n\n/**\n * Resolve a company from a mapping, with fallback to the only-company shortcut.\n */\nexport function resolveCompany(\n mappings: MappingsParam,\n options: T[] | null | undefined,\n parsedCompany: string | undefined,\n hasOnly1Company: boolean,\n firstCompany: T | null | undefined\n): { selectedCompany: T | null; parsedValue: string } {\n const mapping = mappings['company'];\n if (mapping?.entityId && options) {\n const found = options.find((o) => {\n const id = o.get ? (o.get('id') as string) : o.id;\n return String(id) === String(mapping.entityId);\n });\n if (found) {\n return { selectedCompany: found, parsedValue: parsedCompany || '' };\n }\n }\n\n // Auto-select when there's only one company\n if (hasOnly1Company && firstCompany) {\n return { selectedCompany: firstCompany, parsedValue: parsedCompany || '' };\n }\n\n return { selectedCompany: null, parsedValue: parsedCompany || '' };\n}\n\n/**\n * Resolve an examining body from a mapping.\n */\nexport function resolveExaminingBody(\n mappings: MappingsParam,\n options: T[] | null | undefined,\n parsedExaminingBody: string | undefined\n): { selectedExaminingBody: T | null; parsedValue: string } {\n const mapping = mappings['examiningBody'];\n if (mapping?.entityId && options) {\n const found = options.find((o) => {\n const id = o.get ? (o.get('id') as string) : o.id;\n return String(id) === String(mapping.entityId);\n });\n if (found) {\n return { selectedExaminingBody: found, parsedValue: parsedExaminingBody || '' };\n }\n }\n return { selectedExaminingBody: null, parsedValue: parsedExaminingBody || '' };\n}\n","/**\n * Filtered option functions for the digitalize feature.\n *\n * These functions filter entity option arrays by industry code ID,\n * which changes when the user selects a different standard.\n * Used by both Welder Certificate and PQR review modals.\n */\n\n/**\n * Minimal interface for records that can be filtered by industry code.\n * Uses a narrow constraint (only `get?`) so both Ember Data models\n * and plain test objects satisfy it — Ember Data models lack the\n * `[key: string]: unknown` index signature that `EmberRecord` requires.\n */\ninterface Filterable {\n get?: (key: string) => unknown;\n}\n\n/**\n * Filter an Ember Data record array by matching `industryCode.id`.\n * Returns the full array when no `industryCodeId` is provided.\n *\n * Works with both Ember Data records (`.get('industryCode.id')`) and\n * plain objects (`record.industryCode?.id`).\n */\nexport function filterByIndustryCode(\n options: T[] | null | undefined,\n industryCodeId: string | null | undefined\n): T[] {\n if (!options) return [];\n if (!industryCodeId) return options;\n\n return options.filter((record) => {\n const codeId = record.get\n ? (record.get('industryCode.id') as string | undefined)\n : (record as Record)['industryCode'] &&\n ((record as Record)['industryCode'] as { id?: string })?.id;\n return codeId === industryCodeId;\n });\n}\n\n/**\n * Get weld type options filtered by industry code.\n */\nexport function getFilteredWeldTypes(\n allWeldTypes: T[] | null | undefined,\n industryCodeId: string | null | undefined\n): T[] {\n return filterByIndustryCode(allWeldTypes, industryCodeId);\n}\n\n/**\n * Get welding process options filtered by industry code.\n */\nexport function getFilteredWeldingProcesses(\n allProcesses: T[] | null | undefined,\n industryCodeId: string | null | undefined\n): T[] {\n return filterByIndustryCode(allProcesses, industryCodeId);\n}\n\n/**\n * Get welding position options filtered by industry code.\n */\nexport function getFilteredWeldingPositions(\n allPositions: T[] | null | undefined,\n industryCodeId: string | null | undefined\n): T[] {\n return filterByIndustryCode(allPositions, industryCodeId);\n}\n\n/**\n * Get arc transfer mode options filtered by industry code.\n */\nexport function getFilteredArcTransferModes(\n allModes: T[] | null | undefined,\n industryCodeId: string | null | undefined\n): T[] {\n return filterByIndustryCode(allModes, industryCodeId);\n}\n","/**\n * Parsed hint functions for the digitalize feature.\n *\n * These functions extract \"hint\" display values from the raw parsed PDF data\n * and validation mappings. Hints show the user what the parser extracted so\n * they can verify or override the auto-resolved values.\n *\n * All functions are pure — they take the parsed data and validation mappings\n * as arguments and return a string.\n */\n\nimport type { MappedValue, BaseMaterialInfo, FillerMaterialInfo, ShieldingInfo } from './types';\n\n/**\n * Accepts both `Record` and typed mapping interfaces\n * where values are `MappedValue | undefined` (e.g., PQRValidationMappings).\n */\ntype MappingsParam = Record | null | undefined;\n\n// ============================================================================\n// Generic hint helpers\n// ============================================================================\n\n/**\n * Get a hint from the validation mappings (originalValue), falling back to a parsed field.\n */\nexport function getHintFromMapping(\n mappings: MappingsParam,\n mappingKey: string,\n parsedFallback: string | undefined\n): string {\n return mappings?.[mappingKey]?.originalValue || parsedFallback || '';\n}\n\n// ============================================================================\n// Standard / Unit System / Certificate Type hints\n// ============================================================================\n\nexport function parsedStandardHint(\n mappings: MappingsParam,\n parsedStandard: string | undefined\n): string {\n return getHintFromMapping(mappings, 'standard', parsedStandard);\n}\n\nexport function parsedUnitSystemHint(parsedUnitSystem: string | undefined): string {\n return parsedUnitSystem || '';\n}\n\nexport function parsedCertificateTypeHint(parsedCertificateType: string | undefined): string {\n return parsedCertificateType || '';\n}\n\n// ============================================================================\n// Test Piece hints\n// ============================================================================\n\nexport function parsedWeldTypeHint(\n mappings: MappingsParam,\n parsedWeldType: string | undefined\n): string {\n return getHintFromMapping(mappings, 'weldType', parsedWeldType);\n}\n\nexport function parsedProductTypeHint(parsedProductType: string | undefined): string {\n return parsedProductType || '';\n}\n\nexport function parsedJointTypeHint(parsedJointType: string | undefined): string {\n return parsedJointType || '';\n}\n\nexport function parsedOverlayTypeHint(parsedOverlayType: string | undefined): string {\n return parsedOverlayType || '';\n}\n\n/**\n * Get the hint for a welding process (1, 2, or 3).\n */\nexport function parsedProcessHint(\n mappings: MappingsParam,\n index: number,\n parsedProcess: string | undefined\n): string {\n return getHintFromMapping(mappings, `weldingProcess${index}`, parsedProcess);\n}\n\n/**\n * Get the hint for a welding position (1, 2, or 3).\n */\nexport function parsedPositionHint(\n mappings: MappingsParam,\n index: number,\n parsedPosition: string | undefined\n): string {\n const mapped = mappings?.[`weldingPositions${index}`]?.originalValue;\n if (mapped) return mapped;\n if (Array.isArray(parsedPosition)) return parsedPosition.join(', ');\n return parsedPosition || '';\n}\n\nexport function parsedPositionDirectionHint(parsedDirection: string | undefined): string {\n return parsedDirection || '';\n}\n\n/**\n * Get the hint for an arc transfer mode (1, 2, or 3).\n */\nexport function parsedTransferModeHint(\n mappings: MappingsParam,\n index: number,\n parsedTransferMode: string | undefined\n): string {\n return getHintFromMapping(mappings, `transferMode${index}`, parsedTransferMode);\n}\n\n/**\n * Get the hint for a current/polarity type (1, 2, or 3).\n */\nexport function parsedTypeCurrentHint(\n mappings: MappingsParam,\n index: number,\n parsedTypeCurrent: string | undefined\n): string {\n return getHintFromMapping(mappings, `typeOfCurrent${index}`, parsedTypeCurrent);\n}\n\n/**\n * Get the hint for a process mechanization (1, 2, or 3).\n */\nexport function parsedProcessMecanizationHint(\n mappings: MappingsParam,\n index: number,\n parsedMecanization: string | undefined\n): string {\n return getHintFromMapping(mappings, `processMecanization${index}`, parsedMecanization);\n}\n\n/**\n * Get the hint for welding details (layers/sides/consumable inserts).\n * Handles both WC format (array of names) and PQR format (object with layers/sides/consumable_insert).\n */\nexport function parsedWeldingDetailsHint(\n parsedDetails: { welding_detail_names?: string[] | null } | { layers?: string; sides?: string; consumable_insert?: string } | null | undefined\n): string {\n if (!parsedDetails) return '';\n\n // WC format: { welding_detail_names: string[] }\n if ('welding_detail_names' in parsedDetails) {\n const names = parsedDetails.welding_detail_names;\n return Array.isArray(names) ? names.join(', ') : '';\n }\n\n // PQR format: { layers, sides, consumable_insert }\n if ('layers' in parsedDetails) {\n return [parsedDetails.layers, parsedDetails.sides, parsedDetails.consumable_insert]\n .filter(Boolean)\n .join(', ');\n }\n\n return '';\n}\n\n// ============================================================================\n// General section hints\n// ============================================================================\n\nexport function parsedCompanyHint(\n mappings: MappingsParam,\n parsedCompanyValue: string,\n parsedCompany: string | undefined\n): string {\n return mappings?.company?.originalValue || parsedCompanyValue || parsedCompany || '';\n}\n\nexport function parsedExaminingBodyHint(\n mappings: MappingsParam,\n parsedExaminingBodyValue: string,\n parsedExaminingBody: string | undefined\n): string {\n return mappings?.examiningBody?.originalValue || parsedExaminingBodyValue || parsedExaminingBody || '';\n}\n\nexport function parsedEmissionDateHint(\n parsedDateValue: string,\n parsedDate: string | undefined\n): string {\n return parsedDateValue || parsedDate || '';\n}\n\nexport function parsedWeldersHint(\n parsedWeldersValue: string,\n parsedWelder: string | string[] | undefined\n): string {\n if (parsedWeldersValue) return parsedWeldersValue;\n if (Array.isArray(parsedWelder)) return parsedWelder.join(', ');\n return parsedWelder || '';\n}\n\nexport function parsedWpsUsedHint(\n parsedWpsValue: string,\n parsedWps: string | undefined\n): string {\n return parsedWpsValue || parsedWps || '';\n}\n\n// ============================================================================\n// Base Material hints\n// ============================================================================\n\n/**\n * Get the hint for a base material (1 or 2).\n * Shows the mapping's original value, or builds from spec/grade/group.\n */\nexport function parsedBaseMaterialHint(\n mappings: MappingsParam,\n index: number,\n parsedBm: BaseMaterialInfo | null | undefined\n): string {\n const key = `baseMaterial${index}`;\n const mapped = mappings?.[key]?.originalValue;\n if (mapped) return mapped;\n if (!parsedBm) return '';\n return [parsedBm.specification, parsedBm.grade, parsedBm.group].filter(Boolean).join(' / ');\n}\n\n// ============================================================================\n// Filler Material hints\n// ============================================================================\n\n/**\n * Get the hint for a filler material (1, 2, or 3).\n * Builds from spec/classification/group.\n */\nexport function parsedFillerMaterialHint(\n parsedFm: FillerMaterialInfo | null | undefined\n): string {\n if (!parsedFm) return '';\n return [parsedFm.specification, parsedFm.classification, parsedFm.group]\n .filter(Boolean)\n .join(' / ');\n}\n\n/**\n * Get the commercial designation hint for a filler material.\n */\nexport function parsedCommercialDesignationHint(\n parsedFm: FillerMaterialInfo | null | undefined\n): string {\n return parsedFm?.commercial_designation || '';\n}\n\n// ============================================================================\n// Shielding hints\n// ============================================================================\n\n/**\n * Get the hint for a shielding section.\n * Shows designation / commercial_designation / gas_mixture.\n */\nexport function parsedShieldingHint(\n parsedShielding: ShieldingInfo | null | undefined\n): string {\n if (!parsedShielding) return '';\n return [parsedShielding.designation, parsedShielding.commercial_designation, parsedShielding.gas_mixture]\n .filter(Boolean)\n .join(' / ');\n}\n\n/**\n * Get the commercial designation hint for a shielding section.\n */\nexport function parsedShieldingCDHint(\n parsedShielding: ShieldingInfo | null | undefined\n): string {\n return parsedShielding?.commercial_designation || '';\n}\n","/**\n * Quick-create save functions for the digitalize feature.\n *\n * Async functions that create new WeldNote entities (base materials,\n * filler materials, commercial designations, gas/flux CDs, welders,\n * examining bodies) during the review process.\n *\n * These are plain async functions — the calling component wraps them\n * in `ember-concurrency` tasks (dropTask) for cancellation support.\n */\n\nimport { isEmpty } from '@ember/utils';\nimport { isDuplicateError } from 'weldnote/utils/json-api-errors';\nimport type { EmberRecord, StoreInterface } from './types';\nimport { getId, getProperty } from './shared-helpers';\n\n// ============================================================================\n// Result types\n// ============================================================================\n\nexport interface QuickCreateResult {\n success: boolean;\n record: EmberRecord | null;\n errorType: 'duplicate' | 'generic' | null;\n}\n\nfunction successResult(record: EmberRecord): QuickCreateResult {\n return { success: true, record, errorType: null };\n}\n\nfunction errorResult(e: unknown): QuickCreateResult {\n return {\n success: false,\n record: null,\n errorType: isDuplicateError(e) ? 'duplicate' : 'generic',\n };\n}\n\n// ============================================================================\n// Base Material\n// ============================================================================\n\n/**\n * Save a new base material from the quick-create form.\n * Handles saving nested specification/grade if they are new records.\n */\nexport async function saveBaseMaterial(\n store: StoreInterface,\n material: EmberRecord\n): Promise {\n try {\n let specification = getProperty(material, 'specification') as EmberRecord | null;\n let grade = getProperty(material, 'grade') as EmberRecord | null;\n\n if (specification && (getProperty(specification, 'isNew') as boolean)) {\n specification = await (specification as EmberRecord & { save(): Promise }).save();\n }\n if (grade && (getProperty(grade, 'isNew') as boolean)) {\n grade = await (grade as EmberRecord & { save(): Promise }).save();\n }\n\n const newRecord = store.createRecord('base-material');\n newRecord.set('specification', specification);\n newRecord.set('grade', grade);\n newRecord.set('materialGroup', getProperty(material, 'materialGroup'));\n\n const industryCode = getProperty(material, 'industryCode');\n if (isEmpty(industryCode)) {\n newRecord.set('industryCode', getProperty(material, 'materialGroup.code'));\n } else {\n newRecord.set('industryCode', industryCode);\n }\n\n const saved = await newRecord.save();\n return successResult(saved);\n } catch (e) {\n return errorResult(e);\n }\n}\n\n// ============================================================================\n// Filler Material\n// ============================================================================\n\n/**\n * Save a new filler material from the quick-create form.\n * Optionally associates the filler material with a welding process.\n */\nexport async function saveFillerMaterial(\n store: StoreInterface,\n material: EmberRecord,\n weldingProcess: EmberRecord | null\n): Promise {\n try {\n let specification = getProperty(material, 'specification') as EmberRecord & { save(): Promise } | null;\n let classification = getProperty(material, 'classification') as EmberRecord & { save(): Promise } | null;\n\n if (specification && (getProperty(specification, 'isNew') as boolean)) {\n specification = await specification.save() as typeof specification;\n }\n if (classification && (getProperty(classification, 'isNew') as boolean)) {\n classification = await classification.save() as typeof classification;\n }\n\n const newRecord = store.createRecord('filler-material');\n newRecord.set('specification', specification);\n newRecord.set('classification', classification);\n newRecord.set('group', getProperty(material, 'group'));\n\n const code = getProperty(material, 'code');\n if (isEmpty(code) || isEmpty((code as EmberRecord | null)?.id)) {\n newRecord.set('code', getProperty(material, 'group.code'));\n } else {\n newRecord.set('code', code);\n }\n\n if (weldingProcess && !isEmpty(getId(weldingProcess))) {\n const processes = await (newRecord as unknown as { get(key: string): Promise<{ pushObject(obj: unknown): void }> }).get('weldingProcesses');\n processes.pushObject(weldingProcess);\n }\n\n const saved = await newRecord.save();\n return successResult(saved);\n } catch (e) {\n return errorResult(e);\n }\n}\n\n// ============================================================================\n// Filler Material Commercial Designation\n// ============================================================================\n\n/**\n * Save a new filler material commercial designation.\n */\nexport async function saveCommercialDesignation(\n store: StoreInterface,\n fillerMaterial: EmberRecord,\n name: string\n): Promise {\n if (isEmpty(name) || !fillerMaterial) {\n return { success: false, record: null, errorType: 'generic' };\n }\n\n try {\n const designation = store.createRecord('filler-material-commercial-designation');\n designation.set('fillerMaterial', fillerMaterial);\n designation.set('commercialDesignation', name);\n const saved = await designation.save();\n return successResult(saved);\n } catch (e) {\n return errorResult(e);\n }\n}\n\n// ============================================================================\n// Gas Commercial Designation\n// ============================================================================\n\n/**\n * Save a new gas commercial designation.\n */\nexport async function saveGasCommercialDesignation(\n store: StoreInterface,\n gas: EmberRecord,\n name: string\n): Promise {\n if (isEmpty(name) || !gas) {\n return { success: false, record: null, errorType: 'generic' };\n }\n\n try {\n const designation = store.createRecord('gas-commercial-designation');\n designation.set('gas', gas);\n designation.set('commercialDesignation', name);\n const saved = await designation.save();\n return successResult(saved);\n } catch (e) {\n return errorResult(e);\n }\n}\n\n// ============================================================================\n// Flux Commercial Designation\n// ============================================================================\n\n/**\n * Save a new flux commercial designation.\n */\nexport async function saveFluxCommercialDesignation(\n store: StoreInterface,\n flux: EmberRecord,\n name: string\n): Promise {\n if (isEmpty(name) || !flux) {\n return { success: false, record: null, errorType: 'generic' };\n }\n\n try {\n const designation = store.createRecord('flux-commercial-designation');\n designation.set('flux', flux);\n designation.set('commercialDesignation', name);\n const saved = await designation.save();\n return successResult(saved);\n } catch (e) {\n return errorResult(e);\n }\n}\n\n// ============================================================================\n// Examining Body\n// ============================================================================\n\n/**\n * Save a new examining body.\n */\nexport async function saveExaminingBody(\n store: StoreInterface,\n name: string\n): Promise {\n if (isEmpty(name)) {\n return { success: false, record: null, errorType: 'generic' };\n }\n\n try {\n const newExaminingBody = store.createRecord('examining-body');\n newExaminingBody.set('name', name);\n const saved = await newExaminingBody.save();\n return successResult(saved);\n } catch (e) {\n return errorResult(e);\n }\n}\n\n/**\n * Unload a filler material's nested new records (specification, classification)\n * when cancelling a quick-create. Prevents orphaned unsaved records in the store.\n */\nexport function unloadFillerMaterialRelated(\n store: StoreInterface,\n material: { get?: (key: string) => unknown } | null\n): void {\n if (!material) return;\n const specification = getProperty(material, 'specification') as EmberRecord | null;\n if (specification && getProperty(specification, 'isNew')) {\n store.unloadRecord(specification);\n }\n const classification = getProperty(material, 'classification') as EmberRecord | null;\n if (classification && getProperty(classification, 'isNew')) {\n store.unloadRecord(classification);\n }\n}\n","/**\n * Shared helper functions for the digitalize feature.\n *\n * Small, pure utility functions used across entity resolvers,\n * review modals, and payload builders.\n */\n\nimport Constants from 'weldnote/utils/constants';\nimport type { MappedValue, KeyLabelOption } from './types';\n\nconst { TEST_RESULTS, LAYER_OPTIONS } = Constants;\n\n/**\n * Minimal interface for objects that may have Ember Data's `.get()` method.\n * Narrower than `EmberRecord` so Ember Data model classes satisfy it\n * without needing the `[key: string]: unknown` index signature.\n */\ninterface Gettable {\n id?: string;\n get?: (key: string) => unknown;\n}\n\n/**\n * Safely extract an entity ID from an Ember Data record or POJO.\n * Handles both `.get('id')` (Ember Data) and `.id` (POJO) access patterns.\n */\nexport function getId(entity: Gettable | null | undefined): string | undefined {\n if (!entity) return undefined;\n const id = entity.get ? (entity.get('id') as string | undefined) : entity.id;\n return id ?? undefined;\n}\n\n/**\n * Safely read a property from an Ember Data record or POJO.\n * Handles both `.get(key)` and direct property access.\n */\nexport function getProperty(record: Record | Gettable | null | undefined, key: string): unknown {\n if (!record) return undefined;\n const rec = record as Gettable;\n return rec.get ? rec.get(key) : (record as Record)[key];\n}\n\n/**\n * Format min/max flow rate values into a display string.\n * Returns `undefined` when both values are null.\n */\nexport function buildFlowRate(min: number | null, max: number | null): string | undefined {\n if (min != null && max != null) return `${min} - ${max}`;\n if (min != null) return String(min);\n if (max != null) return String(max);\n return undefined;\n}\n\n/**\n * Match a parsed test result string to a standard key (PASSED or FAILED).\n * Handles common variations: \"P\", \"Pass\", \"Passed\", \"Acceptable\", \"F\", \"Fail\", \"Failed\", \"Not acceptable\", \"Rejected\".\n */\nexport function matchTestResultKey(parsedValue: string | undefined): string | null {\n if (!parsedValue) return null;\n const upper = parsedValue.toUpperCase().trim();\n if (upper === 'P' || upper.startsWith('PASS') || upper.startsWith('ACCEPT')) {\n return TEST_RESULTS.PASSED;\n }\n if (\n upper === 'F' ||\n upper.startsWith('FAIL') ||\n upper.startsWith('NOT') ||\n upper.startsWith('REJECT')\n ) {\n return TEST_RESULTS.FAILED;\n }\n return null;\n}\n\n/**\n * Match a parsed layer string to a standard layer key (SINGLE_LAYER or MULTI_LAYER).\n */\nexport function matchLayerKey(parsedValue: string | undefined): string {\n if (!parsedValue) return '';\n const upper = parsedValue.toUpperCase().trim();\n if (upper === 'SL' || upper.startsWith('SINGLE')) {\n return LAYER_OPTIONS.SINGLE_LAYER;\n }\n if (upper === 'ML' || upper.startsWith('MULTI')) {\n return LAYER_OPTIONS.MULTI_LAYER;\n }\n return '';\n}\n\n/**\n * Normalise a free-text value (parser output or user-typed) to a LOV option key by matching it\n * case-insensitively against each option's key or (translated) label. Returns undefined when\n * nothing matches, so callers can omit the field rather than send an unrecognised value the backend\n * would reject. Used for enum-valued fields the review modal still edits as free text.\n */\nexport function matchLovKey(\n value: string | undefined | null,\n options: ReadonlyArray<{ key: string; label: string }>\n): string | undefined {\n if (!value) return undefined;\n const needle = value.trim().toLowerCase();\n if (!needle) return undefined;\n for (const option of options) {\n if (\n option.key.toLowerCase() === needle ||\n option.label.trim().toLowerCase() === needle\n ) {\n return option.key;\n }\n }\n return undefined;\n}\n\n/**\n * Check if a value is non-empty (not null, undefined, or empty string).\n */\nexport function isNonEmpty(value: string | null | undefined): value is string {\n return value != null && value !== '';\n}\n\n/**\n * Find a KeyLabelOption by key in an options array.\n * Returns null if not found or if key is falsy.\n */\nexport function findOptionByKey(\n options: KeyLabelOption[] | null | undefined,\n key: string | null | undefined\n): KeyLabelOption | null {\n if (!key || !options) return null;\n return options.find((o) => o.key === key) || null;\n}\n\n/**\n * Match a key/label option by either key or label (case-insensitive).\n * Used for resolving parsed product types, joint types, overlay types, etc.\n */\nexport function matchKeyLabelOption(\n options: KeyLabelOption[] | null | undefined,\n parsedValue: string | undefined\n): KeyLabelOption | null {\n if (!parsedValue || !options) return null;\n const upper = parsedValue.toUpperCase();\n return (\n options.find((o) => {\n const key = (o.key || '').toUpperCase();\n const label = (o.label || '').toUpperCase();\n return key === upper || label.includes(upper);\n }) || null\n );\n}\n\n/**\n * Find a mapping entry from a validation mappings object, trying multiple keys.\n * Returns the first mapping that has an `entityId`.\n */\nexport function findMapping(\n mappings: Record,\n keys: string[]\n): MappedValue | undefined {\n return keys.map((key) => mappings[key]).find((mapping) => mapping?.entityId);\n}\n","/**\n * Shared types for the digitalize feature (Welder Certificate, PQR, future WPS).\n *\n * These types describe the common data shapes used by entity resolvers,\n * quick-create tasks, filtered options, and parsed hints across all\n * digitalize review modals.\n */\n\n// ============================================================================\n// Ember Data record abstraction\n// ============================================================================\n\n/**\n * Minimal interface for an Ember Data record with an `id` and optional `.get()`.\n * Covers both classic Ember Data records and POJOs from tests.\n */\nexport interface EmberRecord {\n id?: string;\n get?: (key: string) => unknown;\n [key: string]: unknown;\n}\n\n/**\n * Helper to safely retrieve the `id` from an Ember Data record or POJO.\n */\nexport function getRecordId(record: EmberRecord | null | undefined): string | undefined {\n if (!record) return undefined;\n if (record.get) return record.get('id') as string | undefined;\n return record.id;\n}\n\n// ============================================================================\n// Validation / mapping types (shared between WC and PQR)\n// ============================================================================\n\n/**\n * Represents a successfully mapped value from the PDF parser's backend validation.\n */\nexport interface MappedValue {\n originalValue: string;\n entityId: number;\n resolvedValue: string | null;\n}\n\n/**\n * Represents a mapping result for a list field item (e.g. preparation methods).\n * Used only in PQR currently, but exported for shared code.\n */\nexport interface ListMappedValue {\n originalValue: string;\n entityId: number | null;\n mapped: boolean;\n warningMessage: string | null;\n}\n\nexport interface ValidationMessage {\n field: string;\n message: string;\n}\n\nexport type MappingKey = string;\n\n/**\n * Generic validation result shape. Both WC and PQR use this same structure.\n */\nexport interface ValidationResult {\n mappings: Record;\n warnings: ValidationMessage[];\n errors: ValidationMessage[];\n unmappedValues?: Record;\n listMappings?: Record;\n}\n\n// ============================================================================\n// Dropdown option types\n// ============================================================================\n\n/**\n * Common shape for key/label dropdown options (product type, joint type,\n * overlay type, shielding type, unit system, certificate type, position direction, etc.).\n */\nexport interface KeyLabelOption {\n key: string;\n label: string;\n}\n\n/**\n * Shielding info from the parsed PDF data.\n */\nexport interface ShieldingInfo {\n type?: string;\n designation?: string;\n commercial_designation?: string;\n gas_mixture?: string;\n flow_rate?: string;\n flow_rate_min?: number;\n flow_rate_max?: number;\n}\n\n/**\n * Base material info from the parsed PDF data.\n */\nexport interface BaseMaterialInfo {\n specification?: string;\n grade?: string;\n group?: string;\n thickness?: string | number;\n diameter?: string | number;\n}\n\n/**\n * Filler material info from the parsed PDF data.\n */\nexport interface FillerMaterialInfo {\n specification?: string;\n classification?: string;\n group?: string;\n commercial_designation?: string;\n dimensions?: (string | number)[];\n}\n\n// ============================================================================\n// Entity resolver types\n// ============================================================================\n\n/**\n * Result of resolving an entity by mapping: the matched option from the\n * dropdown list, or `null` if no match was found.\n */\nexport type ResolvedEntity = T | null;\n\n/**\n * Shape for options that have an `industryCode` relationship.\n * Used by filtered options functions.\n */\nexport interface IndustryCodeFilterable extends EmberRecord {\n industryCode?: { id?: string } | null;\n}\n\n// ============================================================================\n// Store abstraction for resolver/quick-create functions\n// ============================================================================\n\n/**\n * Minimal store interface needed by entity resolvers and quick-create tasks.\n * This avoids importing the full Ember Data store type in utility functions.\n */\nexport interface StoreInterface {\n findRecord(modelName: string, id: string): Promise;\n createRecord(modelName: string, data?: Record): EmberRecord & {\n save(): Promise;\n set(key: string, value: unknown): void;\n };\n query(modelName: string, params: Record): Promise<{ toArray(): EmberRecord[]; firstObject?: EmberRecord }>;\n unloadRecord(record: unknown): void;\n peekRecord(modelName: string, id: string): EmberRecord | null;\n}\n","export default {\n DRAWING: {\n TITLE: 'title',\n REFERENCE_NUMBER: 'referenceNumber',\n DRAWING_CONTENT: 'drawingContent',\n REVISION: 'revision',\n REVISION_STATUS: 'revisionStatus',\n },\n};\n","export default {\n ELECTRODE_TYPE: {\n SHORT_DESIGNATION: 'shortDesignation',\n LONG_DESIGNATION: 'longDesignation',\n },\n};\n","import { A as emberA, isArray } from '@ember/array';\n\nexport function setDiff(setA, setB) {\n if (!isArray(setA)) {\n return emberA();\n }\n if (!isArray(setB)) {\n return emberA(setA);\n }\n\n return setA.filter((x) => setB.indexOf(x) === -1);\n}\n","export default {\n FILE_UPLOAD: {\n FILE_PATH: 'filePath',\n ORIGINAL_FILENAME: 'originalFilename',\n CONTEXT: 'context',\n FILE_SIZE: 'fileSize',\n },\n};\n","export default {\n GROOVE_DESIGN: {\n DESCRIPTION: 'description',\n LONG_DESCRIPTION: 'longDescription',\n IMAGE: 'image',\n WELDING_DETAILS: 'weldingDetails',\n WELD_TYPES: 'weldTypes',\n GROOVE_TYPE: 'grooveType',\n JOINT_TYPE: 'jointType',\n },\n};\n","const DEFAULT_PAGE_SIZE = 20;\n\ninterface PaginationOptions {\n pageSize: number | null;\n page: number | null;\n sort?: any;\n}\n\n/*\n * Convert A set of filters to an object query to be send to the back end\n *\n * @query - The query object to append the values to\n * @filters - The list of filters\n *\n * filters: {\n * fieldName: {\n * value: 'value',\n * type: 'eq'\n * }\n * }\n *\n */\nfunction convertFilters(query: any, filters: any = {}) {\n let keys = Object.keys(filters);\n let index = 0;\n keys.forEach((key) => {\n let { value, type } = filters[key];\n query[`filter[filters][${index}][field]`] = key;\n query[`filter[filters][${index}][operator]`] = type;\n query[`filter[filters][${index}][value]`] = value;\n index++;\n });\n}\n\nfunction convertPaging(\n query: any,\n options: PaginationOptions = {\n pageSize: DEFAULT_PAGE_SIZE,\n page: 1,\n sort: '',\n }\n) {\n let pageSize = DEFAULT_PAGE_SIZE;\n if (options.pageSize) {\n pageSize = parseInt(`${options.pageSize}`, 10);\n if (pageSize < 0 || isNaN(pageSize)) {\n pageSize = DEFAULT_PAGE_SIZE;\n }\n query['paging[limit]'] = pageSize;\n } else {\n query['paging[limit]'] = pageSize;\n }\n if (options.page) {\n let pageValue = parseInt(`${options.page}`, 10);\n if (isNaN(pageValue) || pageValue < 1) {\n pageValue = 1;\n }\n let offset = pageSize * (pageValue - 1);\n query['paging[offset]'] = offset;\n } else {\n query['paging[offset]'] = 0;\n }\n}\n\nfunction convertSorting(query: any, sorting: any) {\n let keys = Object.keys(sorting);\n let index = 0;\n keys.forEach((key) => {\n let value = sorting[key];\n if (value !== 'asc' && value !== 'desc') {\n value = 'asc';\n }\n query[`sort[${index}][field]`] = key;\n query[`sort[${index}][dir]`] = value;\n index++;\n });\n}\n\nfunction convertToUrlParameters(query: any, options: PaginationOptions) {\n convertPaging(query, options);\n convertSorting(query, options.sort);\n}\n\nexport default { convertFilters, convertPaging, convertSorting, convertToUrlParameters };\n","export default function () {\n return '';\n}\n","export default function missingMessage(key, locales /*, options */) {\n return '';\n}\n","import { isEmpty } from '@ember/utils';\nimport Constants from './constants';\n\nconst { ERROR_CODES } = Constants;\n\n/**\n * @public\n * Set of functions to help with JSONAPI errors, namely getting error codes\n */\nexport function getErrorCode(error) {\n let { payload } = error;\n if (payload && payload.errors && payload.errors.length > 0) {\n let [firstError] = payload.errors;\n let { code } = firstError;\n return code;\n }\n let { errors } = error;\n if (errors && errors.length > 0) {\n let [firstError] = errors;\n let { code } = firstError;\n return code;\n }\n\n let { json } = error;\n if (json && json.errors) {\n let [firstError] = json.errors;\n let { code } = firstError;\n return code;\n }\n}\n\nexport function getErrorMeta(error) {\n let { payload } = error;\n if (payload && payload.errors && payload.errors.length > 0) {\n let [firstError] = payload.errors;\n let { code } = firstError;\n return code;\n }\n let { errors } = error;\n if (errors && errors.length > 0) {\n let [firstError] = errors;\n let { meta } = firstError;\n return meta;\n }\n\n let { json } = error;\n if (json && json.errors) {\n let [firstError] = json.errors;\n let { meta } = firstError;\n return meta;\n }\n}\n\nexport function getErrorStatus(error) {\n let { payload } = error;\n if (payload && payload.errors && payload.errors.length > 0) {\n let [firstError] = payload.errors;\n let { status } = firstError;\n return status;\n }\n let { errors } = error;\n if (errors && errors.length > 0) {\n let [firstError] = errors;\n let { status } = firstError;\n return status;\n }\n\n let { json } = error;\n if (json && json.errors) {\n let [firstError] = json.errors;\n let { status } = firstError;\n return status;\n }\n}\n\nexport function getErrorDetail(error) {\n let { payload } = error;\n if (payload && payload.errors && payload.errors.length > 0) {\n let [firstError] = payload.errors;\n let { detail } = firstError;\n return detail;\n }\n let { errors } = error;\n if (errors && errors.length > 0) {\n let [firstError] = errors;\n let { detail } = firstError;\n return detail;\n }\n}\n\nexport function isDuplicateError(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.DUPLICATED_INSTANCE;\n }\n return false;\n}\n\nexport function isCompanyNotAllowedError(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.COMPANY_NOT_ALLOWED;\n }\n return false;\n}\n\nexport function getCompanyNotAllowedMeta(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.COMPANY_NOT_ALLOWED;\n }\n return false;\n}\n\nexport function isPermissionDenied(error) {\n let code = getErrorStatus(error);\n if (!isEmpty(code)) {\n return code === 403 || code === '403'; // HTTP Forbidden\n }\n return false;\n}\n\nexport function isMissingUser(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.MISSING_USER;\n }\n return false;\n}\n\nexport function isSessionExpired(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.SESSION_EXPIRED;\n }\n return false;\n}\n\nexport function isWelderStandardNotSupported(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.WELDER_STANDARD_NOT_SUPPORTED;\n }\n return false;\n}\n\nexport function isError(error, expected) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === expected;\n }\n return false;\n}\n\nexport function isForeignKeyError(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.FOREIGN_KEY;\n }\n return false;\n}\n\nexport function isIntermediateWeldRestoreError(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.PROJECT_WELD_INTERMEDIATE_RESTORE;\n }\n return false;\n}\n\nexport function isProjectWeldUsedByOthersError(error) {\n let code = getErrorCode(error);\n if (!isEmpty(code)) {\n return code === ERROR_CODES.PROJECT_WELD_USED_BY_OTHERS;\n }\n return false;\n}\n","/**\n * Shared queue status types and interfaces for document parsing features\n * (PQR digitalization, Welder Certificate digitalization, etc.).\n *\n * Possible states of a queue item as it moves through the parsing pipeline:\n *\n * - `QUEUED` — File uploaded, waiting to be picked up for parsing\n * - `START` — Parsing job has been picked up and is initializing\n * - `PROCESSING` — AI is actively parsing the PDF\n * - `PARSED` — Parsing succeeded, results are ready for human review\n * - `APPROVED` — User accepted the parsed data and a record was created\n * - `REJECTED` — User discarded the parsed data\n * - `ERROR` — Parsing failed\n */\nexport const QUEUE_STATUS = {\n QUEUED: 'QUEUED',\n START: 'START',\n PROCESSING: 'PROCESSING',\n PARSED: 'PARSED',\n APPROVED: 'APPROVED',\n REJECTED: 'REJECTED',\n ERROR: 'ERROR',\n} as const;\n\n/**\n * Union type derived from {@link QUEUE_STATUS} values.\n * Equivalent to `'QUEUED' | 'START' | 'PROCESSING' | 'PARSED' | 'APPROVED' | 'REJECTED' | 'ERROR'`.\n */\nexport type QueueStatus = (typeof QUEUE_STATUS)[keyof typeof QUEUE_STATUS];\n\n/**\n * Response returned by the backend when a file is queued for parsing\n * or retried.\n */\nexport interface QueueFileResponse {\n /** GUID identifying this queue entry */\n queueItemId: string;\n /** Current status after the operation */\n status: string;\n /** Backend task/job ID tracking the async parsing work */\n taskId: number;\n}\n\n/**\n * Paginated response from a queue list endpoint.\n */\nexport interface QueueListResponse {\n /** Array of queue items for the current page */\n list: QueueItem[];\n /** Total number of items matching the filter (used for pagination) */\n count: number;\n}\n\n/**\n * Represents a single entry in a parsing queue. This is the core domain\n * object returned by queue endpoints.\n *\n * The index signature (`[key: string]: unknown`) acts as a forward-compatibility\n * escape hatch, allowing extra backend fields without breaking the type.\n */\nexport interface QueueItemParseResult {\n /** Extracted fields from the parsed document */\n parsedData?: Record;\n /** Validation warnings/errors produced by the parser */\n validation?: Record;\n}\n\nexport interface QueueItem {\n /** Unique GUID for this queue entry */\n id: string;\n /** Original uploaded filename (optional — older items may lack it) */\n fileName?: string;\n /** Reference to the stored file in the backend */\n fileId?: number;\n /** Current lifecycle state of the queue item */\n status: QueueStatus;\n /** Server path to the uploaded PDF */\n uploadPdfPath?: string;\n /** Present when status is `PARSED` — holds the AI parsing output */\n parseResult?: QueueItemParseResult;\n /** ISO-8601 creation timestamp */\n createdAt?: string;\n industryCode: string;\n [key: string]: unknown;\n}\n\n/**\n * Response from an approve endpoint.\n */\nexport interface ApproveResponse {\n /** Result status (e.g. success) */\n status: string;\n /** ID of the newly created record */\n recordId: string;\n}\n\n/**\n * Response from a reject endpoint.\n */\nexport interface RejectResponse {\n /** Confirmation that the rejection was recorded */\n status: string;\n}\n","export default {\n PIPING_PIECE: {\n DIAMETER: 'diameter',\n THICKNESS: 'thickness',\n DIAMETER_INCHES: 'diameterInches',\n THICKNESS_INCHES: 'thicknessInches',\n SCHEDULE: 'schedule',\n NOMINAL_DIAMETER: 'nominalDiameter',\n },\n};\n","export default {\n PLATE_PIECE: {\n THICKNESS: 'thickness',\n THICKNESS_INCHES: 'thicknessInches',\n },\n};\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport BaseMaterialGroup from 'weldnote/models/base-material-group';\nimport Constants from 'weldnote/utils/constants';\n\nconst { WELD_TYPES } = Constants;\n\ninterface BaseMaterialApprovalRange {\n material1: BaseMaterialGroup[] | null;\n material2: BaseMaterialGroup[] | null;\n}\n\nexport default {\n isGroup(groupNumber: string, value: string) {\n let groupExpression = `${groupNumber} (`;\n if (!isEmpty(value) && value.startsWith(groupExpression)) {\n return true;\n }\n return false;\n },\n\n isSameGroup(material1: BaseMaterialGroup | null, material2: BaseMaterialGroup | null): boolean {\n if (material1 && material2) {\n return get(material1, 'groupNumber') === get(material2, 'groupNumber');\n }\n return false;\n },\n\n // Checks if a certain value is a group from the given list\n isGroups(groupNumberList: string[], value: string) {\n let result = false;\n groupNumberList.forEach((groupNumber) => {\n let groupExpression = `${groupNumber} (`;\n if (value.startsWith(groupExpression)) {\n result = true;\n }\n });\n return result;\n },\n\n // Gets a list of groups of the same group number\n groupAllSameGroup(groupNumber: string, groupList: BaseMaterialGroup[]) {\n let result: BaseMaterialGroup[] = [];\n groupList.forEach((item) => {\n if (this.isGroup(groupNumber, item.get('groupName'))) {\n result.pushObject(item);\n }\n });\n return result;\n },\n\n // Gets a subset of groups from the list\n groupAllSameGroups(groupNumberList: string[], groupList: BaseMaterialGroup[]) {\n let result: BaseMaterialGroup[] = [];\n groupNumberList.forEach((currentGroup) => {\n groupList.forEach((item) => {\n if (this.isGroup(currentGroup, item.get('groupName'))) {\n result.pushObject(item);\n }\n });\n });\n return result;\n },\n\n // Retrives a specific group from the list passed\n getGroupFromList(group: string, groupList: BaseMaterialGroup[]): BaseMaterialGroup[] {\n let result = null;\n groupList.forEach((current) => {\n if (group === current.get('groupName')) {\n result = current;\n return;\n }\n });\n if (result != null) {\n return [result];\n } else {\n return [];\n }\n },\n\n getFirstGroupOrNone(groups: BaseMaterialGroup[]): BaseMaterialGroup | null {\n if (groups && groups.length > 0) {\n return groups[0];\n }\n return null;\n },\n\n calculate(\n group1: string,\n isGroup1: boolean,\n group2: string,\n allGroups: BaseMaterialGroup[],\n impactRequirements: boolean,\n weldType: string\n ): BaseMaterialApprovalRange {\n let result: BaseMaterialApprovalRange = {\n material1: null,\n material2: null,\n };\n\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n let groups = [\n '1',\n '3',\n '4',\n '5A',\n '5B',\n '5C',\n '6',\n '7',\n '8',\n '9A',\n '9B',\n '9C',\n '10A',\n '10B',\n '10C',\n '10F',\n '10H',\n '10I',\n '10J',\n '10K',\n '11A',\n '11B',\n '11C',\n '15E',\n ];\n groups.forEach((g) => {\n if (this.isGroup(g, group1)) {\n result.material1 = this.groupAllSameGroup(g, allGroups);\n }\n if (this.isGroup(g, group2)) {\n result.material2 = this.groupAllSameGroup(g, allGroups);\n }\n\n if (isEmpty(result.material1) && !isEmpty(group1)) {\n result.material1 = this.getGroupFromList(group1, allGroups);\n }\n\n if (isEmpty(result.material2) && !isEmpty(group2)) {\n result.material2 = this.getGroupFromList(group2, allGroups);\n }\n });\n } else {\n if (!isEmpty(group1) && !isEmpty(group2)) {\n if (!impactRequirements) {\n if (this.isGroup('3', group1) && this.isGroup('3', group2)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroup('3', allGroups);\n result.material2 = this.groupAllSameGroups(['3', '1'], allGroups);\n }\n } else if (this.isGroup('4', group1) && this.isGroup('4', group2)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroup('4', allGroups);\n result.material2 = this.groupAllSameGroups(['4', '3', '1'], allGroups);\n }\n } else if (this.isGroup('5A', group1) && this.isGroup('5A', group2)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroup('5A', allGroups);\n result.material2 = this.groupAllSameGroups(['5A', '4', '3', '1'], allGroups);\n }\n } else if (this.isGroup('4', group1) && this.isGroups(['3', '1'], group2)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroup('4', allGroups);\n result.material2 = this.groupAllSameGroups(['3', '1'], allGroups);\n }\n } else if (this.isGroup('5A', group1) && this.isGroups(['4', '3', '1'], group2)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroup('5A', allGroups);\n result.material2 = this.groupAllSameGroups(['4', '3', '1'], allGroups);\n }\n } else if (this.isGroup('4', group2) && this.isGroups(['3', '1'], group1)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroups(['3', '1'], allGroups);\n result.material2 = this.groupAllSameGroup('4', allGroups);\n }\n } else {\n let groups = [\n '1',\n '3',\n '4',\n '5A',\n '5B',\n '5C',\n '6',\n '7',\n '8',\n '9A',\n '9B',\n '9C',\n '10A',\n '10B',\n '10C',\n '10F',\n '10H',\n '10I',\n '10J',\n '10K',\n '11A',\n '11B',\n '11C',\n ];\n groups.forEach((g) => {\n if (this.isGroup(g, group1)) {\n result.material1 = this.groupAllSameGroup(g, allGroups);\n }\n if (this.isGroup(g, group2)) {\n result.material2 = this.groupAllSameGroup(g, allGroups);\n }\n });\n if (isEmpty(result.material1)) {\n if (this.isGroup('15E', group1)) {\n result.material1 = this.groupAllSameGroups(['15E', '5B'], allGroups);\n } else {\n result.material1 = this.getGroupFromList(group1, allGroups);\n }\n }\n if (isEmpty(result.material2)) {\n if (this.isGroup('15E', group2)) {\n result.material2 = this.groupAllSameGroups(['15E', '5B'], allGroups);\n } else {\n result.material2 = this.getGroupFromList(group2, allGroups);\n }\n }\n }\n } else {\n // Impact Requirements = true\n let currentGroup1 = this.getGroupFromList(group1, allGroups);\n let currentGroup2 = this.getGroupFromList(group2, allGroups);\n if (this.isGroup('3', group1) && this.isGroup('3', group2)) {\n if (isGroup1) {\n result.material1 = currentGroup1.concat(currentGroup2);\n result.material2 = currentGroup1\n .concat(currentGroup2)\n .concat(this.groupAllSameGroup('1', allGroups));\n }\n } else if (this.isGroup('4', group1) && this.isGroup('4', group2)) {\n if (isGroup1) {\n result.material1 = currentGroup1.concat(currentGroup2);\n result.material2 = currentGroup1\n .concat(currentGroup2)\n .concat(this.groupAllSameGroups(['3', '1'], allGroups));\n }\n } else if (this.isGroup('5A', group1) && this.isGroup('5A', group2)) {\n if (isGroup1) {\n result.material1 = currentGroup1.concat(currentGroup2);\n result.material2 = currentGroup1\n .concat(currentGroup2)\n .concat(this.groupAllSameGroups(['4', '3', '1'], allGroups));\n }\n } else if (this.isGroup('5A', group1) && this.isGroups(['4', '3', '1'], group2)) {\n if (isGroup1) {\n result.material1 = currentGroup1;\n result.material2 = this.groupAllSameGroups(['4', '3', '1'], allGroups);\n }\n } else if (this.isGroup('5A', group2) && this.isGroups(['4', '3', '1'], group1)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroups(['4', '3', '1'], allGroups);\n result.material2 = currentGroup2;\n }\n } else if (this.isGroup('4', group1) && this.isGroups(['3', '1'], group2)) {\n if (isGroup1) {\n result.material1 = currentGroup1;\n result.material2 = this.groupAllSameGroups(['3', '1'], allGroups);\n }\n } else if (this.isGroup('4', group2) && this.isGroups(['3', '1'], group1)) {\n if (isGroup1) {\n result.material1 = this.groupAllSameGroups(['3', '1'], allGroups);\n result.material2 = currentGroup2;\n }\n } else {\n if (\n this.isSameGroup(\n this.getFirstGroupOrNone(currentGroup1),\n this.getFirstGroupOrNone(currentGroup2)\n )\n ) {\n result.material1 = currentGroup1.concat(currentGroup2);\n result.material2 = currentGroup1.concat(currentGroup2);\n } else {\n result.material1 = currentGroup1;\n result.material2 = currentGroup2;\n }\n }\n }\n } else if (!isEmpty(group1)) {\n let currentGroup1 = this.getGroupFromList(group1, allGroups);\n if (impactRequirements) {\n result.material1 = currentGroup1;\n } else {\n let groups = [\n '1',\n '3',\n '4',\n '5A',\n '5B',\n '5C',\n '6',\n '7',\n '8',\n '9A',\n '9B',\n '9C',\n '10A',\n '10B',\n '10C',\n '10F',\n '10H',\n '10I',\n '10J',\n '10K',\n '11A',\n '11B',\n '11C',\n ];\n groups.forEach((g) => {\n if (this.isGroup(g, group1)) {\n result.material1 = this.groupAllSameGroup(g, allGroups);\n return;\n }\n });\n if (isEmpty(result.material1)) {\n if (this.isGroup('15E', group1)) {\n result.material1 = this.groupAllSameGroups(['15E', '5B'], allGroups);\n } else {\n result.material1 = currentGroup1;\n }\n }\n result.material2 = [];\n }\n }\n }\n return result;\n },\n};\n","import { isEmpty } from '@ember/utils';\n\nexport default {\n isGroup1(group: string): boolean {\n return '1.1' === group || '1.2' === group || '1.3' === group || '1.4' === group;\n },\n\n isGroup2(group: string): boolean {\n return '2.1' === group || '2.2' === group;\n },\n\n isGroup3(group: string): boolean {\n return '3.1' === group || '3.2' === group || '3.3' === group;\n },\n\n isGroup4(group: string): boolean {\n return '4.1' === group || '4.2' === group;\n },\n\n isGroup5(group: string): boolean {\n return '5.1' === group || '5.2' === group || '5.3' === group || '5.4' === group;\n },\n\n isGroup6(group: string): boolean {\n return '6.1' === group || '6.2' === group || '6.3' === group || '6.4' === group;\n },\n\n isGroup8(group: string): boolean {\n return '8.1' === group || '8.2' === group || '8.3' === group || '8.4' === group;\n },\n\n isGroup10(group: string): boolean {\n return '10.1' === group || '10.2' === group;\n },\n\n isGroup11(group: string): boolean {\n return '11.1' === group || '11.2' === group;\n },\n\n isGroupExactly40(group: string): boolean {\n let groupInt = parseInt(group, 10);\n return groupInt === 40;\n },\n\n isGroupExactly48(group: string): boolean {\n let groupInt = parseInt(group, 10);\n return groupInt === 48;\n },\n\n isGroup40(group: string): boolean {\n let groupInt = parseInt(group, 10);\n return groupInt >= 40 && groupInt <= 49;\n },\n\n isGroup80(group: string): boolean {\n let groupInt = parseInt(group, 10);\n return groupInt >= 80 && groupInt <= 89;\n },\n\n isGroup8OrAnyGroup40(group: string): boolean {\n let groupInt = parseInt(group, 10);\n let isGroup40 = groupInt >= 40 && groupInt <= 49;\n let isGroup80 = groupInt >= 80 && groupInt <= 89;\n return isGroup40 || isGroup80;\n },\n\n isSameGroup(group1: string, group2: string) {\n if (isEmpty(group1) || isEmpty(group2)) {\n return false;\n }\n if (group1 === group2) {\n return true;\n }\n\n let dotPositionGroup1 = group1.indexOf('.');\n let dotPositionGroup2 = group1.indexOf('.');\n\n if (dotPositionGroup1 > -1 && dotPositionGroup2 > -1) {\n let majorGroup1 = group1.substring(0, dotPositionGroup1);\n let majorGroup2 = group2.substring(0, dotPositionGroup2);\n if (majorGroup1 === majorGroup2) {\n return true;\n } else {\n return false;\n }\n }\n return group1 === group2;\n },\n\n getRuleFor1dot1(): string[] {\n return ['1.1'];\n },\n\n getRuleFor1dot2(): string[] {\n return ['1.2'].concat(this.getRuleFor1dot1());\n },\n\n getRuleFor1dot3(): string[] {\n return ['1.3'].concat(this.getRuleFor1dot2());\n },\n\n getRuleFor1dot4(): string[] {\n return ['1.4'];\n },\n\n getRuleFor1All(): string[] {\n return this.getRuleFor1dot4().concat(this.getRuleFor1dot3());\n },\n\n getRuleFor2dot1(): string[] {\n return ['2.1'].concat(this.getRuleFor1All());\n },\n\n getRuleFor2dot2(): string[] {\n return ['2.2'].concat(this.getRuleFor2dot1());\n },\n\n getRuleFor3dot1(): string[] {\n return ['3.1'].concat(this.getRuleFor2dot2());\n },\n\n getRuleFor3dot2(): string[] {\n return ['3.2'].concat(this.getRuleFor3dot1());\n },\n\n getRuleFor3dot3(): string[] {\n return ['3.3'].concat(this.getRuleFor3dot2());\n },\n\n getRuleFor4dot1(): string[] {\n return ['4.1'].concat(this.getRuleFor2dot2());\n },\n\n getSimpleRuleFor4dot1(): string[] {\n return ['4.1'];\n },\n\n getRuleFor4dot2(): string[] {\n return ['4.2'].concat(this.getRuleFor4dot1());\n },\n\n getSimpleRuleFor4dot2(): string[] {\n return ['4.2'].concat(this.getSimpleRuleFor4dot1());\n },\n\n getRuleFor5dot1(): string[] {\n return ['5.1'].concat(this.getRuleFor2dot2());\n },\n\n getSimpleRuleFor5dot1(): string[] {\n return ['5.1'];\n },\n\n getRuleFor5dot2(): string[] {\n return ['5.2'].concat(this.getRuleFor5dot1());\n },\n\n getSimpleRuleFor5dot2(): string[] {\n return ['5.2'].concat(this.getSimpleRuleFor5dot1());\n },\n\n getRuleFor5dot3(): string[] {\n return ['5.3'].concat(this.getRuleFor5dot2());\n },\n\n getSimpleRuleFor5dot3(): string[] {\n return ['5.3'].concat(this.getSimpleRuleFor5dot2());\n },\n\n getRuleFor5dot4(): string[] {\n return ['5.4'].concat(this.getRuleFor5dot3());\n },\n\n getSimpleRuleFor5dot4(): string[] {\n return ['5.4'].concat(this.getSimpleRuleFor5dot3());\n },\n\n getRuleFor6dot1(): string[] {\n return ['6.1'].concat(this.getRuleFor2dot2());\n },\n\n getSimpleRuleFor6dot1(): string[] {\n return ['6.1'];\n },\n\n getRuleFor6dot2(): string[] {\n return ['6.2'].concat(this.getRuleFor6dot1());\n },\n\n getSimpleRuleFor6dot2(): string[] {\n return ['6.2'].concat(this.getSimpleRuleFor6dot1());\n },\n\n getRuleFor6dot3(): string[] {\n return ['6.3'].concat(this.getRuleFor6dot2());\n },\n\n getSimpleRuleFor6dot3(): string[] {\n return ['6.3'].concat(this.getSimpleRuleFor6dot2());\n },\n\n getRuleFor6dot4(): string[] {\n return ['6.4'].concat(this.getRuleFor6dot3());\n },\n\n getSimpleRuleFor6dot4(): string[] {\n return ['6.4'].concat(this.getSimpleRuleFor6dot3());\n },\n\n getRuleFor7dot1(): string[] {\n return ['7.1'];\n },\n\n getRuleFor7dot2(): string[] {\n return ['7.2'];\n },\n\n getRuleFor7dot3(): string[] {\n return ['7.3'];\n },\n\n getRuleFor8dot1(): string[] {\n return ['8.1'];\n },\n\n getRuleFor8dot2(): string[] {\n return ['8.2'].concat(this.getRuleFor8dot1());\n },\n\n getRuleFor8dot3(): string[] {\n return ['8.3'].concat(this.getRuleFor8dot2());\n },\n\n getRuleFor8dot4(): string[] {\n return ['8.4'].concat(this.getRuleFor8dot3());\n },\n\n getRuleFor9dot1(): string[] {\n return ['9.1'];\n },\n\n getRuleFor9dot2(): string[] {\n return ['9.2'].concat(this.getRuleFor9dot1());\n },\n\n getRuleFor9dot3(): string[] {\n return ['9.3'].concat(this.getRuleFor9dot2());\n },\n\n getRuleFor10dot1(): string[] {\n return ['10.1'];\n },\n\n getRuleFor10dot2(): string[] {\n return ['10.2'].concat(this.getRuleFor10dot1());\n },\n\n getRuleFor11dot1(): string[] {\n return ['11.1'];\n },\n\n getRuleFor11dot2(): string[] {\n return ['11.2'].concat(this.getRuleFor11dot1());\n },\n\n getRuleFor11dot3(): string[] {\n return ['11.3'].concat(this.getRuleFor11dot2());\n },\n\n // Rules for arrays\n getRulesFor2(group: string): string[] {\n if (group === '2.2') {\n return this.getRuleFor2dot2();\n } else if (group === '2.1') {\n return this.getRuleFor2dot1();\n }\n return [];\n },\n\n getRulesFor5(group: string): string[] {\n if (group === '5.1') {\n return this.getRuleFor5dot1();\n } else if (group === '5.2') {\n return this.getRuleFor5dot2();\n } else if (group === '5.3') {\n return this.getRuleFor5dot3();\n } else if (group === '5.4') {\n return this.getRuleFor5dot4();\n }\n return [];\n },\n\n getRulesFor6(group: string): string[] {\n if (group === '6.1') {\n return this.getRuleFor6dot1();\n } else if (group === '6.2') {\n return this.getRuleFor6dot2();\n } else if (group === '6.3') {\n return this.getRuleFor6dot3();\n } else if (group === '6.4') {\n return this.getRuleFor6dot4();\n }\n return [];\n },\n\n getRulesFor7(group: string): string[] {\n if (group === '7.1') {\n return this.getRuleFor7dot1();\n } else if (group === '7.2') {\n return this.getRuleFor7dot2();\n } else if (group === '7.3') {\n return this.getRuleFor7dot3();\n }\n return [];\n },\n\n getRulesFor8(group: string): string[] {\n if (group === '8.1') {\n return this.getRuleFor8dot1();\n } else if (group === '8.2') {\n return this.getRuleFor8dot2();\n } else if (group === '8.3') {\n return this.getRuleFor8dot3();\n } else if (group === '8.4') {\n return this.getRuleFor8dot4();\n }\n return [];\n },\n\n getRulesFor10(group: string): string[] {\n if (group === '10.1') {\n return this.getRuleFor10dot1();\n } else if (group === '10.2') {\n return this.getRuleFor10dot2();\n }\n return [];\n },\n\n getSimpleRulesFor8(group: string): string[] {\n return [group];\n },\n\n getSimpleRulesFor5(group: string): string[] {\n if (group === '5.4') {\n return this.getSimpleRuleFor5dot4();\n } else if (group === '5.3') {\n return this.getSimpleRuleFor5dot3();\n } else if (group === '5.2') {\n return this.getSimpleRuleFor5dot2();\n } else if (group === '5.1') {\n return this.getSimpleRuleFor5dot1();\n }\n return [];\n },\n\n getRulesFor11(group: string): string[] {\n if (group === '11.1') {\n return this.getRuleFor11dot1();\n } else if (group === '11.2') {\n return this.getRuleFor11dot2();\n } else if (group === '11.3') {\n return this.getRuleFor11dot3();\n }\n return [];\n },\n\n getRulesFor40(group: string): string[] {\n return [group];\n },\n};\n","import { isEmpty } from '@ember/utils';\nimport RSVP from 'rsvp';\nimport { A } from '@ember/array';\nimport { get } from '@ember/object';\nimport WeldingParameter from './pqr-welding-parameter';\nimport Constants from './constants';\nimport { formatRangeWith2Decimals, formatRangeWith3Decimals } from './unit-system/format';\nimport { isStandardISO, isStandardASME, isStandardAWS } from './standards';\nimport { isButtWeld, isPartialPenetrationButtWeld } from 'weldnote/utils/rules/weld-type';\n\nconst { WELDING } = WeldingParameter;\n\nconst { PRODUCT_TYPE, WELD_TYPES, ARC_TRANSFER_MODES, UNIT_SYSTEM, OVERLAY_FILLER_MATERIAL_FORM } =\n Constants;\n\nexport default {\n PQR: {\n CERTIFICATE_NUMBER: 'certificateNumber',\n COMPANY: 'company',\n ADDRESS: 'address',\n STANDARD: 'standard',\n CONSTRUCTION_STANDARD: 'constructionStandard',\n EXAMINING_BODY: 'examiningBody',\n EMISSION_DATE: 'emissionDate',\n // Weld Type\n WELDTYPE_TESTPIECE: 'weldTypeTestPiece',\n WELDTYPE_APPROVALRANGE: 'weldTypeApprovalRange',\n // Welding Process\n WELDING_PROCESS_ROOT_TESTPIECE: 'weldingProcessRootTestPiece',\n WELDING_PROCESS_FILL_TESTPIECE: 'weldingProcessFillTestPiece',\n WELDING_PROCESS_ROOT_APPROVALRANGE: 'weldingProcessRootApprovalRange',\n WELDING_PROCESS_FILL_APPROVALRANGE: 'weldingProcessFillApprovalRange',\n // Welding Details\n WELDING_DETAILS_TESTPIECE: 'weldingDetailsTestPiece',\n WELDING_DETAILS_APPROVALRANGE: 'weldingDetailsApprovalRange',\n // Welding Position\n WELDING_POSITION_ROOT_TESTPIECE: 'weldingPositionRootTestPiece',\n WELDING_POSITION_FILL_TESTPIECE: 'weldingPositionFillTestPiece',\n WELDING_POSITION_ROOT_APPROVALRANGE: 'weldingPositionRootApprovalRange',\n WELDING_POSITION_FILL_APPROVALRANGE: 'weldingPositionFillApprovalRange',\n\n ARC_TRANSFER_MODE_ROOT_TESTPIECE: 'arcTransferModeRootTestPiece',\n ARC_TRANSFER_MODE_FILL_TESTPIECE: 'arcTransferModeFillTestPiece',\n ARC_TRANSFER_MODE_ROOT_APPROVALRANGE: 'arcTransferModeRootApprovalRange',\n ARC_TRANSFER_MODE_FILL_APPROVALRANGE: 'arcTransferModeFillApprovalRange',\n\n TYPE_CURRENT_ROOT_TESTPIECE: 'typeCurrentRootTestPiece',\n TYPE_CURRENT_FILL_TESTPIECE: 'typeCurrentFillTestPiece',\n TYPE_CURRENT_ROOT_APPROVALRANGE: 'typeCurrentRootApprovalRange',\n TYPE_CURRENT_FILL_APPROVALRANGE: 'typeCurrentFillApprovalRange',\n\n PRODUCT_TYPE_TESTPIECE: 'productTypeTestPiece',\n BASE_MATERIAL1_TESTPIECE: 'baseMaterial1TestPiece',\n BASE_MATERIAL2_TESTPIECE: 'baseMaterial2TestPiece',\n BASE_MATERIAL1_APPROVAL_RANGE: 'baseMaterial1ApprovalRange',\n BASE_MATERIAL2_APPROVAL_RANGE: 'baseMaterial2ApprovalRange',\n\n THICKNESS_ROOT_TESTPIECE: 'thicknessRootTestPiece',\n THICKNESS_ROOT_LAYER_TESTPIECE: 'thicknessRootLayerTestPiece',\n THICKNESS_FILL_TESTPIECE: 'thicknessFillTestPiece',\n THICKNESS_FILL_LAYER_TESTPIECE: 'thicknessFillLayerTestPiece',\n THICKNESS_TOTAL_TESTPIECE: 'thicknessTotalTestPiece',\n THICKNESS_ROOT_MINIMUM_APPROVALRANGE: 'thicknessRootMinimumApprovalRange',\n THICKNESS_ROOT_MAXIMUM_APPROVALRANGE: 'thicknessRootMaximumApprovalRange',\n THICKNESS_FILL_MINIMUM_APPROVALRANGE: 'thicknessFillMinimumApprovalRange',\n THICKNESS_FILL_MAXIMUM_APPROVALRANGE: 'thicknessFillMaximumApprovalRange',\n THICKNESS_TOTAL_MINIMUM_APPROVALRANGE: 'thicknessTotalMinimumApprovalRange',\n THICKNESS_TOTAL_MAXIMUM_APPROVALRANGE: 'thicknessTotalMaximumApprovalRange',\n\n DIAMETER_TESTPIECE: 'diameterTestPiece',\n DIAMETER_MINIMUM_APPROVALRANGE: 'diameterMinimumApprovalRange',\n DIAMETER_MAXIMUM_APPROVALRANGE: 'diameterMaximumApprovalRange',\n\n BRANCH_ANGLE_TESTPIECE: 'branchAngleTestPiece',\n BRANCH_ANGLE_MINIMUM_APPROVALRANGE: 'branchAngleMinimumApprovalRange',\n BRANCH_ANGLE_MAXIMUM_APPROVALRANGE: 'branchAngleMaximumApprovalRange',\n\n THROAT_THICKNESS_TESTPIECE: 'throatThicknessTestPiece',\n THROAT_THICKNESS_MINIMUM_APPROVALRANGE: 'throatThicknessMinimumApprovalRange',\n THROAT_THICKNESS_MAXIMUM_APPROVALRANGE: 'throatThicknessMaximumApprovalRange',\n\n FILLET_WELD_BASE_MATERIAL1_THICKNESS_TESTPIECE: 'filletWeldBaseMaterial1ThicknessTestPiece',\n FILLET_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVALRANGE:\n 'filletWeldBaseMaterial1ThicknessMinimumApprovalRange',\n\n FILLET_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVALRANGE:\n 'filletWeldBaseMaterial1ThicknessMaximumApprovalRange',\n\n FILLET_WELD_BASE_MATERIAL2_THICKNESS_TESTPIECE: 'filletWeldBaseMaterial2ThicknessTestPiece',\n FILLET_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVALRANGE:\n 'filletWeldBaseMaterial2ThicknessMinimumApprovalRange',\n\n FILLET_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVALRANGE:\n 'filletWeldBaseMaterial2ThicknessMaximumApprovalRange',\n\n PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE:\n 'pjpButtWeldBaseMaterialThicknessMinimumApprovalRange',\n\n PJP_BUTT_WELD_BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE:\n 'pjpButtWeldBaseMaterialThicknessMaximumApprovalRange',\n\n PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE:\n 'pjpButtWeldBaseMaterialThicknessMinimumApprovalRange',\n\n PJP_BUTT_WELD_BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE:\n 'pjpButtWeldBaseMaterialThicknessMaximumApprovalRange',\n\n FILLER_MATERIAL_ROOT_TESTPIECE: 'fillerMaterialRootTestPiece',\n FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TESTPIECE:\n 'fillerMaterialRootCommercialDesignationTestPiece',\n\n FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'fillerMaterialRootCommercialDesignationApprovalRange',\n\n FILLER_MATERIAL_FILL_TESTPIECE: 'fillerMaterialFillTestPiece',\n FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TESTPIECE:\n 'fillerMaterialFillCommercialDesignationTestPiece',\n\n FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'fillerMaterialFillCommercialDesignationApprovalRange',\n\n FILLER_MATERIAL_ROOT_DIAMETERS: 'fillerMaterialRootDiameters',\n FILLER_MATERIAL_FILL_DIAMETERS: 'fillerMaterialFillDiameters',\n FILLER_MATERIAL_CAP_DIAMETERS: 'fillerMaterialCapDiameters',\n\n SHIELDING_ROOT: 'shieldingRoot',\n SHIELDING_ROOT_GAS_TESTPIECE: 'shieldingRootGasTestPiece',\n SHIELDING_ROOT_GAS_APPROVALRANGE: 'shieldingRootGasApprovalRange',\n SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TESTPIECE:\n 'shieldingRootGasCommercialDesignationTestPiece',\n\n SHIELDING_ROOT_GAS_MIXTURE: 'shieldingRootGasMixture',\n SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'shieldingRootGasCommercialDesignationApprovalRange',\n\n SHIELDING_ROOT_FLUX_TESTPIECE: 'shieldingRootFluxTestPiece',\n SHIELDING_ROOT_FLUX_APPROVALRANGE: 'shieldingRootFluxApprovalRange',\n SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE:\n 'shieldingRootFluxCommercialDesignationTestPiece',\n\n SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'shieldingRootFluxCommercialDesignationApprovalRange',\n\n SHIELDING_FILL: 'shieldingFill',\n SHIELDING_FILL_GAS_TESTPIECE: 'shieldingFillGasTestPiece',\n SHIELDING_FILL_GAS_APPROVALRANGE: 'shieldingFillGasApprovalRange',\n SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TESTPIECE:\n 'shieldingFillGasCommercialDesignationTestPiece',\n\n SHIELDING_FILL_GAS_MIXTURE: 'shieldingFillGasMixture',\n SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'shieldingFillGasCommercialDesignationApprovalRange',\n\n SHIELDING_FILL_FLUX_TESTPIECE: 'shieldingFillFluxTestPiece',\n SHIELDING_FILL_FLUX_APPROVALRANGE: 'shieldingFillFluxApprovalRange',\n SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE:\n 'shieldingFillFluxCommercialDesignationTestPiece',\n\n SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'shieldingFillFluxCommercialDesignationApprovalRange',\n\n BACKING_TESTPIECE: 'backingTestPiece',\n BACKING_GAS_TESTPIECE: 'backingGasTestPiece',\n BACKING_GAS_APPROVALRANGE: 'backingGasApprovalRange',\n BACKING_GAS_COMMERCIAL_DESIGNATION_TESTPIECE: 'backingGasCommercialDesignationTestPiece',\n BACKING_GAS_MIXTURE: 'backingGasMixture',\n BACKING_GAS_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'backingGasCommercialDesignationApprovalRange',\n\n BACKING_FLUX_TESTPIECE: 'backingFluxTestPiece',\n BACKING_FLUX_APPROVALRANGE: 'backingFluxApprovalRange',\n BACKING_FLUX_COMMERCIAL_DESIGNATION_TESTPIECE: 'backingFluxCommercialDesignationTestPiece',\n BACKING_FLUX_COMMERCIAL_DESIGNATION_APPROVALRANGE:\n 'backingFluxCommercialDesignationApprovalRange',\n\n BACKING_FLOW_RATE_ROOT: 'backingFlowRateRoot',\n BACKING_FLOW_RATE_FILL: 'backingFlowRateFill',\n\n FLOW_RATE_ROOT: 'flowRateRoot',\n FLOW_RATE_FILL: 'flowRateFill',\n\n ELECTRODE_TYPE: 'electrodeType',\n NUMBER_OF_ELECTRODES: 'numberOfElectrodes',\n PULSED_WELDING_DETAILS: 'pulsedWeldingDetails',\n WEAVING: 'weaving',\n CONTACT_TUBE_DISTANCE: 'contactTubeDistance',\n BACK_GAUGING_DETAILS: 'backGaugingDetails',\n\n PREHEAT_TEMPERATURE_TESTPIECE: 'preheatTemperatureTestPiece',\n INTERPASS_TEMPERATURE_TESTPIECE: 'interpassTemperatureTestPiece',\n POST_HEAT_TEMPERATURE_TESTPIECE: 'postHeatTemperatureTestPiece',\n POST_WELD_HEAT_TREATMENT_TIME_TESTPIECE: 'postWeldHeatTreatmentTimeTestPiece',\n POST_WELD_HEAT_TREATMENT_TIME_MINIMUM_APPROVAL_RANGE:\n 'postWeldHeatTreatmentTimeMinimumApprovalRange',\n\n POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM_APPROVAL_RANGE:\n 'postWeldHeatTreatmentTimeMaximumApprovalRange',\n\n POST_WELD_HEAT_TREATMENT_TEMPERATURE_TESTPIECE: 'postWeldHeatTreatmentTemperatureTestPiece',\n POST_WELD_HEAT_TREATMENT_METHOD_TESTPIECE: 'postWeldHeatTreatmentMethodTestPiece',\n POST_WELD_HEAT_TREATMENT_HEATING_RATE_TESTPIECE: 'postWeldHeatTreatmentHeatingRateTestPiece',\n POST_WELD_HEAT_TREATMENT_COOLING_RATE_TESTPIECE: 'postWeldHeatTreatmentCoolingRateTestPiece',\n HEAT_INPUT_MINIMUM_APPROVALRANGE: 'heatInputMinimumApprovalRange',\n HEAT_INPUT_MAXIMUM_APPROVALRANGE: 'heatInputMaximumApprovalRange',\n PREHEAT_TEMPERATURE_MINIMUM_APPROVALRANGE: 'preheatTemperatureMinimumApprovalRange',\n PREHEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE: 'preheatTemperatureMaximumApprovalRange',\n INTERPASS_TEMPERATURE_MINIMUM_APPROVALRANGE: 'interpassTemperatureMinimumApprovalRange',\n INTERPASS_TEMPERATURE_MAXIMUM_APPROVALRANGE: 'interpassTemperatureMaximumApprovalRange',\n POST_HEAT_TEMPERATURE_MINIMUM_APPROVALRANGE: 'postHeatTemperatureMinimumApprovalRange',\n POST_HEAT_TEMPERATURE_MAXIMUM_APPROVALRANGE: 'postHeatTemperatureMaximumApprovalRange',\n POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM_APPROVALRANGE:\n 'postWeldHeatTreatmentTemperatureMinimumApprovalRange',\n\n POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM_APPROVALRANGE:\n 'postWeldHeatTreatmentTemperatureMaximumApprovalRange',\n\n WELDING_PARAMETERS: 'weldingParameters',\n\n TENSILE_TEST_NAME: 'tensileTestName',\n TENSILE_TEST_TEMPERATURE: 'tensileTestTemperature',\n TENSILE_TEST_LINES: 'tensileTestLines',\n\n BEND_TEST_REPORT: 'bendTestReport',\n BEND_TEST_MANDRILL_DIAMETER: 'bendTestMandrillDiameter',\n BEND_TEST_LINES: 'bendTestLines',\n\n MACROSCOPIC_EXAMINATION_TEST_REPORT: 'macroscopicExaminationTestReport',\n MACROSCOPIC_EXAMINATION_OBSERVATIONS: 'macroscopicExaminationObservations',\n\n IMPACT_TEST_REPORT: 'impactTestReport',\n IMPACT_TEST_REQUIRED: 'impactTestRequired',\n IMPACT_TEST_TYPE: 'impactTestType',\n IMPACT_TEST_DIMENSIONS: 'impactTestDimensions',\n IMPACT_TEST_TEMPERATURE: 'impactTestTemperature',\n IMPACT_TEST_LINES: 'impactTestLines',\n IMPACT_TEST_DOCUMENT: 'impactTestDocument',\n\n HARDNESS_TEST_REPORT: 'hardnessTestReport',\n HARDNESS_TEST_REQUIRED: 'hardnessTestRequired',\n HARDNESS_TEST_TYPE: 'hardnessTestType',\n HARDNESS_TEST_LINES: 'hardnessTestLines',\n HARDNESS_TEST_DOCUMENT: 'hardnessTestDocument',\n\n NON_DESTRUCTIVE_VISUAL_TESTING: 'nonDestructiveVisualTesting',\n NON_DESTRUCTIVE_PENETRANT_TESTING: 'nonDestructivePenetrantTesting',\n NON_DESTRUCTIVE_MAGNETIC_TESTING: 'nonDestructiveMagneticTesting',\n NON_DESTRUCTIVE_ULTRASONIC_TESTING: 'nonDestructiveUltrasonicTesting',\n NON_DESTRUCTIVE_RADIOGRAPHIC_TESTING: 'nonDestructiveRadiographicTesting',\n\n GROOVE_ANGLE_MINIMUM: 'grooveAngleMinimum',\n GROOVE_ANGLE_MAXIMUM: 'grooveAngleMaximum',\n ROOT_FACE_MINIMUM: 'rootFaceMinimum',\n ROOT_FACE_MAXIMUM: 'rootFaceMaximum',\n ROOT_GAP_MINIMUM: 'rootGapMinimum',\n ROOT_GAP_MAXIMUM: 'rootGapMaximum',\n\n GROOVE_DESIGNS: 'grooveDesigns',\n WELD_LAYER_CONFIGURATIONS: 'weldLayerConfigurations',\n\n PREPARATION_METHODS_TESTPIECE: 'preparationMethodsTestPiece',\n\n TORCH_ANGLE_MINIMUM: 'torchAngleMinimum',\n TORCH_ANGLE_MAXIMUM: 'torchAngleMaximum',\n\n GAS_NOZZLE_DIAMETER_ROOT: 'gasNozzleDiameterRoot',\n GAS_NOZZLE_DIAMETER_FILL: 'gasNozzleDiameterFill',\n PROCESS_MECANIZATION_ROOT_TEST_PIECE: 'processMecanizationRootTestPiece',\n PROCESS_MECANIZATION_FILL_TEST_PIECE: 'processMecanizationFillTestPiece',\n PROCESS_MECANIZATION_ROOT_APPROVAL_RANGE: 'processMecanizationRootApprovalRange',\n PROCESS_MECANIZATION_FILL_APPROVAL_RANGE: 'processMecanizationFillApprovalRange',\n\n WELDING_PROCESS_CAP_TEST_PIECE: 'weldingProcessCapTestPiece',\n WELDING_PROCESS_CAP_APPROVAL_RANGE: 'weldingProcessCapApprovalRange',\n ARC_TRANSFER_MODE_CAP_TEST_PIECE: 'arcTransferModeCapTestPiece',\n ARC_TRANSFER_MODE_CAP_APPROVAL_RANGE: 'arcTransferModeCapApprovalRange',\n PROCESS_MECANIZATION_CAP_TEST_PIECE: 'processMecanizationCapTestPiece',\n PROCESS_MECANIZATION_CAP_APPROVAL_RANGE: 'processMecanizationCapApprovalRange',\n GAS_NOZZLE_DIAMETER_CAP: 'gasNozzleDiameterCap',\n WELDING_POSITION_CAP_TEST_PIECE: 'weldingPositionCapTestPiece',\n WELDING_POSITION_CAP_APPROVAL_RANGE: 'weldingPositionCapApprovalRange',\n TYPE_CURRENT_CAP_TEST_PIECE: 'typeCurrentCapTestPiece',\n TYPE_CURRENT_CAP_APPROVAL_RANGE: 'typeCurrentCapApprovalRange',\n THICKNESS_CAP_TEST_PIECE: 'thicknessCapTestPiece',\n THICKNESS_CAP_LAYER_TEST_PIECE: 'thicknessCapLayerTestPiece',\n THICKNESS_CAP_MINIMUM_APPROVAL_RANGE: 'thicknessCapMinimumApprovalRange',\n THICKNESS_CAP_MAXIMUM_APPROVAL_RANGE: 'thicknessCapMaximumApprovalRange',\n SHIELDING_CAP: 'shieldingCap',\n SHIELDING_CAP_GAS_TEST_PIECE: 'shieldingCapGasTestPiece',\n SHIELDING_CAP_GAS_APPROVAL_RANGE: 'shieldingCapGasApprovalRange',\n SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingCapGasCommercialDesignationTestPiece',\n\n SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_APPROVAL_RANGE:\n 'shieldingCapGasCommercialDesignationApprovalRange',\n\n SHIELDING_CAP_GAS_MIXTURE: 'shieldingCapGasMixture',\n SHIELDING_CAP_FLUX_TEST_PIECE: 'shieldingCapFluxTestPiece',\n SHIELDING_CAP_FLUX_APPROVAL_RANGE: 'shieldingCapFluxApprovalRange',\n SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingCapFluxCommercialDesignationTestPiece',\n\n SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_APPROVAL_RANGE:\n 'shieldingCapFluxCommercialDesignationApprovalRange',\n\n FLOW_RATE_CAP: 'flowRateCap',\n BACKING_FLOW_RATE_CAP: 'backingFlowRateCap',\n NUMBER_OF_ELECTRODES_FILL: 'numberOfElectrodesFill',\n NUMBER_OF_ELECTRODES_CAP: 'numberOfElectrodesCap',\n FILLER_MATERIAL_CAP_TEST_PIECE: 'fillerMaterialCapTestPiece',\n FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'fillerMaterialCapCommercialDesignationTestPiece',\n\n FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_APPROVAL_RANGE:\n 'fillerMaterialCapCommercialDesignationApprovalRange',\n\n BASE_MATERIAL1_THICKNESS: 'baseMaterial1Thickness',\n BASE_MATERIAL1_THICKNESS_MINIMUM_APPROVAL_RANGE: 'baseMaterial1ThicknessMinimumApprovalRange',\n BASE_MATERIAL1_THICKNESS_MAXIMUM_APPROVAL_RANGE: 'baseMaterial1ThicknessMaximumApprovalRange',\n BASE_MATERIAL1_DIAMETER: 'baseMaterial1Diameter',\n BASE_MATERIAL2_THICKNESS: 'baseMaterial2Thickness',\n BASE_MATERIAL2_THICKNESS_MINIMUM_APPROVAL_RANGE: 'baseMaterial2ThicknessMinimumApprovalRange',\n BASE_MATERIAL2_THICKNESS_MAXIMUM_APPROVAL_RANGE: 'baseMaterial2ThicknessMaximumApprovalRange',\n BASE_MATERIAL2_DIAMETER: 'baseMaterial2Diameter',\n WELDING_POSITION_ROOT_DIRECTION: 'weldingPositionRootDirection',\n WELDING_POSITION_FILL_DIRECTION: 'weldingPositionFillDirection',\n WELDING_POSITION_CAP_DIRECTION: 'weldingPositionCapDirection',\n SPECIAL_REQUIREMENTS: 'specialRequirements',\n OVERLAY_TYPE: 'overlayType',\n POST_HEAT_TIME_TEST_PIECE: 'postHeatTimeTestPiece',\n POST_HEAT_TIME_MINIMUM_APPROVAL_RANGE: 'postHeatTimeMinimumApprovalRange',\n POST_HEAT_TIME_MAXIMUM_APPROVAL_RANGE: 'postHeatTimeMaximumApprovalRange',\n JOINT_TYPE: 'jointType',\n ELECTRODE_TYPE_FILL: 'electrodeTypeFill',\n ELECTRODE_TYPE_CAP: 'electrodeTypeCap',\n CONTACT_TUBE_DISTANCE_FILL: 'contactTubeDistanceFill',\n CONTACT_TUBE_DISTANCE_CAP: 'contactTubeDistanceCap',\n WEAVING_FILL: 'weavingFill',\n WEAVING_CAP: 'weavingCap',\n TUNGSTEN_DIAMETER_ROOT: 'tungstenDiameterRoot',\n TUNGSTEN_DIAMETER_FILL: 'tungstenDiameterFill',\n TUNGSTEN_DIAMETER_CAP: 'tungstenDiameterCap',\n CHEMICAL_REPORT_NAME: 'chemicalReportName',\n CHEMICAL_CARBON_CONTENT: 'chemicalCarbonContent',\n CHEMICAL_MANGANESE_CONTENT: 'chemicalManganeseContent',\n CHEMICAL_SILICON_CONTENT: 'chemicalSiliconContent',\n CHEMICAL_CHROMIUM_CONTENT: 'chemicalChromiumContent',\n CHEMICAL_NICKEL_CONTENT: 'chemicalNickelContent',\n CHEMICAL_MOLYBDENUM_CONTENT: 'chemicalMolybdenumContent',\n CHEMICAL_COPPER_CONTENT: 'chemicalCopperContent',\n CHEMICAL_PHOSPHORUS_CONTENT: 'chemicalPhosphorusContent',\n CHEMICAL_SULPHUR_CONTENT: 'chemicalSulphurContent',\n CHEMICAL_ALUMINUM_CONTENT: 'chemicalAluminumContent',\n CHEMICAL_TITANIUM_CONTENT: 'chemicalTitaniumContent',\n OVERLAY_NUMBER_OF_LAYERS: 'overlayNumberOfLayers',\n FILLER_MATERIAL_ELECTRODE_FORM_ROOT: 'fillerMaterialElectrodeFormRoot',\n FILLER_MATERIAL_ELECTRODE_FORM_FILL: 'fillerMaterialElectrodeFormFill',\n FILLER_MATERIAL_ELECTRODE_FORM_CAP: 'fillerMaterialElectrodeFormCap',\n FILLER_MATERIAL_GUIDE_ROOT: 'fillerMaterialGuideRoot',\n FILLER_MATERIAL_GUIDE_FILL: 'fillerMaterialGuideFill',\n FILLER_MATERIAL_GUIDE_CAP: 'fillerMaterialGuideCap',\n OSCILLATION_WIDTH_ROOT: 'oscillationWidthRoot',\n OSCILLATION_WIDTH_FILL: 'oscillationWidthFill',\n OSCILLATION_WIDTH_CAP: 'oscillationWidthCap',\n OSCILLATION_FREQUENCY_ROOT: 'oscillationFrequencyRoot',\n OSCILLATION_FREQUENCY_FILL: 'oscillationFrequencyFill',\n OSCILLATION_FREQUENCY_CAP: 'oscillationFrequencyCap',\n OSCILLATION_DWELL_TIME_ROOT: 'oscillationDwellTimeRoot',\n OSCILLATION_DWELL_TIME_FILL: 'oscillationDwellTimeFill',\n OSCILLATION_DWELL_TIME_CAP: 'oscillationDwellTimeCap',\n SUPPLEMENTAL_DEVICE_ROOT: 'supplementalDeviceRoot',\n SUPPLEMENTAL_DEVICE_FILL: 'supplementalDeviceFill',\n SUPPLEMENTAL_DEVICE_CAP: 'supplementalDeviceCap',\n ARCHIVAL_STATE: 'archivalState',\n FLOW_RATE_PROCESS1_MINIMUM: 'flowRateProcess1Minimum',\n FLOW_RATE_PROCESS1_MAXIMUM: 'flowRateProcess1Maximum',\n FLOW_RATE_PROCESS2_MINIMUM: 'flowRateProcess2Minimum',\n FLOW_RATE_PROCESS2_MAXIMUM: 'flowRateProcess2Maximum',\n FLOW_RATE_PROCESS3_MINIMUM: 'flowRateProcess3Minimum',\n FLOW_RATE_PROCESS3_MAXIMUM: 'flowRateProcess3Maximum',\n UNIT_SYSTEM: 'unitSystem',\n },\n\n // Disabled Rules\n // Diameter should be disabled when the product type is not Pipe\n isDiameterDisabled(productType) {\n return productType !== PRODUCT_TYPE.PIPE;\n },\n\n isBranchAngleDisabled(weldType) {\n return weldType !== WELD_TYPES.BRANCH_CONNECTION;\n },\n\n _groupBelongs(groupName, groupList) {\n return !isEmpty(groupName) && groupList.indexOf(groupName) > -1;\n },\n\n _fixDecimals(result, unitSystem = UNIT_SYSTEM.METRIC) {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return result;\n }\n return formatRangeWith2Decimals(result);\n },\n\n getSmallestBaseMaterialThickness(baseMaterial1ThicknessValue, baseMaterial2ThicknessValue) {\n let bm1Thickness = parseFloat(baseMaterial1ThicknessValue, 10);\n let bm2Thickness = parseFloat(baseMaterial2ThicknessValue, 10);\n\n if (!isNaN(bm1Thickness) && !isNaN(bm2Thickness)) {\n return bm1Thickness <= bm2Thickness ? bm1Thickness : bm2Thickness;\n } else if (!isNaN(bm1Thickness)) {\n return bm1Thickness;\n } else if (!isNaN(bm2Thickness)) {\n return bm2Thickness;\n }\n return null;\n },\n\n updateHeatInputApprovalRange(pqr, unitSystem = UNIT_SYSTEM.METRIC) {\n let standard = pqr.get(this.PQR.STANDARD);\n let parameters = pqr.get(this.PQR.WELDING_PARAMETERS);\n let weldType = pqr.get(this.PQR.WELDTYPE_TESTPIECE);\n let hardnessTestRequired = pqr.get(this.PQR.HARDNESS_TEST_REQUIRED);\n let impactTestRequired = this.hasImpactRequirements(pqr);\n\n let heatInputMinimum = this.calculateParametersMinimumHeatInput(parameters);\n let heatInputMaximum = this.calculateParametersMaximumHeatInput(parameters);\n\n if (isNaN(heatInputMinimum) && isNaN(heatInputMaximum)) {\n pqr.set(this.PQR.HEAT_INPUT_MINIMUM_APPROVALRANGE, null);\n pqr.set(this.PQR.HEAT_INPUT_MAXIMUM_APPROVALRANGE, null);\n return;\n }\n\n let weldTypeCode = '';\n if (!isEmpty(weldType)) {\n weldTypeCode = weldType.get('weldType');\n }\n\n let result = this.calculateHeatInputApprovalRange(\n standard,\n hardnessTestRequired,\n impactTestRequired,\n heatInputMinimum,\n heatInputMaximum,\n weldTypeCode,\n unitSystem\n );\n pqr.set(this.PQR.HEAT_INPUT_MINIMUM_APPROVALRANGE, result.min);\n pqr.set(this.PQR.HEAT_INPUT_MAXIMUM_APPROVALRANGE, result.max);\n },\n\n calculateParametersMinimumHeatInput(parameters) {\n let minimum = 9999999;\n if (isEmpty(parameters)) {\n return null;\n }\n parameters.forEach((p) => {\n let heatInputMin = parseFloat(p.get(WELDING.HEAT_INPUT_MINIMUM));\n if (!isNaN(heatInputMin)) {\n if (minimum > heatInputMin) {\n minimum = heatInputMin;\n }\n }\n });\n\n if (minimum === 9999999) {\n return null;\n }\n\n return minimum;\n },\n\n calculateParametersMaximumHeatInput(parameters) {\n let maximum = -1;\n if (isEmpty(parameters)) {\n return null;\n }\n parameters.forEach((p) => {\n let heatInputMax = parseFloat(p.get(WELDING.HEAT_INPUT_MAXIMUM));\n if (!isNaN(heatInputMax)) {\n if (maximum < heatInputMax) {\n maximum = heatInputMax;\n }\n }\n });\n\n if (maximum === -1) {\n return null;\n }\n\n return maximum;\n },\n\n calculateHeatInputApprovalRange(\n standard,\n hardnessTestRequired,\n impactTestRequired,\n heatInputMin,\n heatInputMax,\n weldType,\n unitSystem\n ) {\n let result = {\n min: null,\n max: null,\n };\n\n let heatInputMinParsed = parseFloat(heatInputMin, 10);\n let heatInputMaxParsed = parseFloat(heatInputMax, 10);\n if (isStandardISO(standard)) {\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (!isNaN(heatInputMinParsed)) {\n result.min = heatInputMinParsed * 0.9;\n }\n if (!isNaN(heatInputMaxParsed)) {\n result.max = heatInputMaxParsed * 1.25;\n }\n } else if (!isNaN(heatInputMinParsed) && heatInputMinParsed >= 0) {\n if (hardnessTestRequired) {\n result.min = parseFloat((heatInputMinParsed * 0.75).toFixed(2));\n }\n if (!isNaN(heatInputMaxParsed) && impactTestRequired) {\n result.max = parseFloat((heatInputMaxParsed * 1.25).toFixed(2));\n }\n }\n } else if (isStandardASME(standard)) {\n result.min = null;\n if (!isNaN(heatInputMaxParsed) && impactTestRequired) {\n result.max = heatInputMaxParsed;\n } else {\n result.max = null;\n }\n } else if (isStandardAWS(standard)) {\n result.min = 0;\n if (!isNaN(heatInputMaxParsed) && impactTestRequired) {\n result.max = heatInputMaxParsed;\n } else {\n result.max = null;\n }\n }\n return this._fixDecimals(result, unitSystem);\n },\n\n updateArcTransferModeTestPieceByWeldingProcess(\n pqr,\n weldingProcessProperty,\n arcTransferModeProperty\n ) {\n let processRoot = pqr.get(weldingProcessProperty);\n let standard = get(pqr, this.PQR.STANDARD);\n if (isStandardASME(standard)) {\n let weldingProcesses = ['GMAW', 'FCAW', 'MCAW', 'FCAW-S'];\n if (!isEmpty(processRoot)) {\n let designation = processRoot.get('shortDesignation');\n if (weldingProcesses.indexOf(designation) === -1) {\n pqr.set(arcTransferModeProperty, null);\n }\n }\n }\n },\n\n calculateArcTransferModeApprovalRange(standard, weldingProcessName, transferMode, transferModes) {\n let weldingProcesses = ['114', '131', '135', '136', '137', '138'];\n if (!isEmpty(transferMode)) {\n if (isStandardISO(standard)) {\n if (!isEmpty(weldingProcessName) && weldingProcesses.indexOf(weldingProcessName) > -1) {\n let transferModeName = transferMode.get('transferMode');\n if (\n transferModeName === ARC_TRANSFER_MODES.SPRAY ||\n transferModeName === ARC_TRANSFER_MODES.GLOBULAR\n ) {\n return transferModes.filter((mode) => {\n if (\n mode.get('transferMode') === ARC_TRANSFER_MODES.SPRAY ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.GLOBULAR\n ) {\n return true;\n }\n });\n } else {\n return [transferMode];\n }\n } else {\n return [];\n }\n } else if (isStandardASME(standard)) {\n let weldingProcesses = ['GMAW', 'FCAW', 'MCAW', 'FCAW-S'];\n if (!isEmpty(weldingProcessName) && weldingProcesses.indexOf(weldingProcessName) > -1) {\n let arcModeName = transferMode.get('transferMode');\n if (\n arcModeName === ARC_TRANSFER_MODES.SPRAY ||\n arcModeName === ARC_TRANSFER_MODES.GLOBULAR ||\n arcModeName === ARC_TRANSFER_MODES.PULSED_SPRAY\n ) {\n return transferModes.filter((mode) => {\n if (\n mode.get('transferMode') === ARC_TRANSFER_MODES.SPRAY ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.GLOBULAR ||\n mode.get('transferMode') === ARC_TRANSFER_MODES.PULSED_SPRAY\n ) {\n return true;\n }\n });\n } else {\n return [transferMode];\n }\n } else {\n return [];\n }\n } else if (isStandardAWS(standard)) {\n return [transferMode];\n }\n }\n return [];\n },\n\n isDiameterMaxDisabled(standard, weldType, productType) {\n if (\n isStandardISO(standard) &&\n weldType === WELD_TYPES.OVERLAY_WELD &&\n productType === PRODUCT_TYPE.PLATE\n ) {\n return true;\n }\n return false;\n },\n\n isArcTransferModeDisabled(standard, weldingProcess) {\n let currentProcessName = '';\n if (!isEmpty(weldingProcess)) {\n currentProcessName = weldingProcess.get('shortDesignation');\n }\n let weldingProcessesISO = ['114', '131', '135', '136', '137', '138'];\n if (weldingProcessesISO.indexOf(currentProcessName) > -1) {\n return false;\n }\n let weldingProcessASMEOrAWS = ['GMAW', 'FCAW', 'MCAW', 'FCAW-S'];\n if (weldingProcessASMEOrAWS.indexOf(currentProcessName) > -1) {\n return false;\n }\n return true;\n },\n\n _filterGroups(groupList, groups) {\n let result = A();\n groups.forEach((group) => {\n let groupModel = groupList.findBy('groupName', group);\n if (groupModel) {\n result.push(groupModel);\n }\n });\n return result;\n },\n\n calculateImpactTestRequirements(\n standard,\n largestBaseMaterialThickness,\n weldType,\n hasImpactValues\n ) {\n let result = {\n update: false,\n value: false,\n };\n if (isStandardISO(standard)) {\n if (\n largestBaseMaterialThickness >= 12 &&\n (isButtWeld(weldType) || isPartialPenetrationButtWeld(weldType))\n ) {\n result.update = true;\n result.value = true;\n } else if (!hasImpactValues) {\n result.update = true;\n result.value = false;\n }\n }\n return result;\n },\n\n updateHardnessTestRequirements(pqr) {\n let standard = pqr.get(this.PQR.STANDARD);\n let bm1 = pqr.get(this.PQR.BASE_MATERIAL1_TESTPIECE);\n let bm2 = pqr.get(this.PQR.BASE_MATERIAL2_TESTPIECE);\n let group1 = !isEmpty(bm1) ? bm1.get('materialGroup') : null;\n let group2 = !isEmpty(bm2) ? bm2.get('materialGroup') : null;\n let group1Name = !isEmpty(group1) ? group1.get('groupName') : null;\n let group2Name = !isEmpty(group2) ? group2.get('groupName') : null;\n let result = this.calculateHardnessTestRequirements(standard, group1Name, group2Name);\n if (result !== null) {\n pqr.set(this.PQR.HARDNESS_TEST_REQUIRED, result);\n }\n },\n\n calculateHardnessTestRequirements(standard, group1, group2) {\n if (isStandardISO(standard)) {\n let groups = ['1.1', '8.1', '8.2', '8.3', '41', '42', '43', '44', '45', '46', '47', '48'];\n if (\n (!isEmpty(group1) && groups.indexOf(group1) > -1) ||\n (!isEmpty(group2) && groups.indexOf(group2) > -1)\n ) {\n return false;\n } else {\n return true;\n }\n }\n return null;\n },\n\n isImpactTestRequiredDisabled(standard, thickness, weldType) {\n if (isStandardISO(standard)) {\n if (thickness >= 12 && !isEmpty(weldType) && weldType.get('weldType') === 'BW') {\n return true;\n }\n }\n return false;\n },\n\n isHardnessTestRequirementsDisabled(standard, group1, group2) {\n if (isStandardISO(standard)) {\n let groups = ['1.1', '8.1', '8.2', '8.3', '41', '42', '43', '44', '45', '46', '47', '48'];\n if (\n (!isEmpty(group1) && groups.indexOf(group1) > -1) ||\n (!isEmpty(group2) && groups.indexOf(group2) > -1)\n ) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n },\n\n updateParameterHeatInputMinimum(pqr, pqrParameter, unitSystem = UNIT_SYSTEM.METRIC) {\n let standard = pqr.get('standard');\n let weldingProcess = pqrParameter.get('weldingProcess');\n\n let voltageMin = pqrParameter.get(WELDING.VOLTAGE_MINIMUM);\n let currentMin = pqrParameter.get(WELDING.CURRENT_MINIMUM);\n let travelSpeedMax = pqrParameter.get(WELDING.TRAVEL_SPEED_MAXIMUM);\n let stripOrWire = pqrParameter.get('additionalData.overlayFillerMaterialForm');\n let stripWidth = null;\n if (stripOrWire === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n let materialDiameters = pqrParameter.get(WELDING.FILLER_MATERIAL_DIAMETER);\n if (!isEmpty(materialDiameters)) {\n stripWidth = materialDiameters.get(0);\n }\n }\n\n let result = this.calculateParameterHeatInput(\n standard,\n voltageMin,\n currentMin,\n travelSpeedMax,\n weldingProcess,\n stripWidth,\n unitSystem\n );\n\n if (!isEmpty(result)) {\n result = result.toFixed(2);\n pqrParameter.set(WELDING.HEAT_INPUT_MINIMUM, result);\n }\n\n this.updateHeatInputApprovalRange(pqr, unitSystem);\n },\n\n updateParameterHeatInputMaximum(pqr, pqrParameter, unitSystem = UNIT_SYSTEM.METRIC) {\n let standard = pqr.get('standard');\n let weldingProcess = pqrParameter.get('weldingProcess');\n\n let voltageMax = pqrParameter.get(WELDING.VOLTAGE_MAXIMUM);\n let currentMax = pqrParameter.get(WELDING.CURRENT_MAXIMUM);\n let travelSpeedMin = pqrParameter.get(WELDING.TRAVEL_SPEED_MINIMUM);\n let stripOrWire = pqrParameter.get('additionalData.overlayFillerMaterialForm');\n let stripWidth = null;\n if (stripOrWire === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n let materialDiameters = pqrParameter.get(WELDING.FILLER_MATERIAL_DIAMETER);\n if (!isEmpty(materialDiameters)) {\n stripWidth = materialDiameters.get(0);\n }\n }\n\n let result = this.calculateParameterHeatInput(\n standard,\n voltageMax,\n currentMax,\n travelSpeedMin,\n weldingProcess,\n stripWidth,\n unitSystem\n );\n\n if (!isEmpty(result)) {\n result = result.toFixed(2);\n pqrParameter.set(WELDING.HEAT_INPUT_MAXIMUM, result);\n }\n\n this.updateHeatInputApprovalRange(pqr, unitSystem);\n },\n\n calculateParameterHeatInput(\n standard,\n voltage,\n current,\n travelSpeed,\n weldingProcess,\n stripWidth = 1,\n unitSystem = UNIT_SYSTEM.METRIC\n ) {\n let voltageNum = parseFloat(voltage, 10);\n let currentNum = parseFloat(current, 10);\n let travelSpeedNum = parseFloat(travelSpeed);\n let thermalEfficiency = 0;\n let weldingProcessName = '';\n if (!isEmpty(weldingProcess)) {\n weldingProcessName = weldingProcess.get('shortDesignation');\n }\n\n if (isStandardASME(standard) || isStandardAWS(standard)) {\n thermalEfficiency = 1;\n } else if (isStandardISO(standard)) {\n if (['141', '142', '143', '145', '15'].indexOf(weldingProcessName) > -1) {\n thermalEfficiency = 0.6;\n } else if (['131', '135', '136', '138', '111'].indexOf(weldingProcessName) > -1) {\n thermalEfficiency = 0.8;\n } else if (['121', '122', '123', '125', '72'].indexOf(weldingProcessName) > -1) {\n thermalEfficiency = 1;\n } else {\n thermalEfficiency = 0;\n }\n } else {\n // AWS D1.2, AWS D1.6, ISO15614-2\n thermalEfficiency = 1;\n }\n\n let stripWidthNum = 1;\n if (!isEmpty(stripWidth)) {\n stripWidthNum = parseFloat(stripWidth);\n }\n\n if (!isNaN(voltageNum) && !isNaN(currentNum) && !isNaN(travelSpeedNum)) {\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n return (\n (voltageNum * currentNum * thermalEfficiency) / (travelSpeedNum * stripWidthNum * 1000)\n );\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return formatRangeWith3Decimals(\n (voltageNum * currentNum * (thermalEfficiency * 60)) /\n (travelSpeedNum * stripWidthNum * 1000)\n );\n }\n }\n return null;\n },\n\n hasImpactRequirements(pqr) {\n let temperature = get(pqr, this.PQR.IMPACT_TEST_TEMPERATURE);\n let required = get(pqr, this.PQR.IMPACT_TEST_REQUIRED);\n return (!isEmpty(temperature) && !isNaN(parseFloat(temperature))) || required;\n },\n\n updateBackingGasApprovalRange(pqr, data) {\n let backingGasTestPiece = pqr.get(this.PQR.BACKING_GAS_TESTPIECE);\n pqr.set(this.PQR.BACKING_GAS_APPROVALRANGE, [backingGasTestPiece]);\n },\n};\n","export default {\n WELDING: {\n ORDER_NUM: 'orderNum',\n PASS_NUMBER: 'passNumber',\n WELDING_PROCESS: 'weldingProcess',\n FILLER_MATERIAL_TYPE: 'fillerMaterialType',\n FILLER_MATERIAL_DIAMETER: 'fillerMaterialDiameters',\n CURRENT_MINIMUM: 'currentMinimum',\n CURRENT_MAXIMUM: 'currentMaximum',\n VOLTAGE_MINIMUM: 'voltageMinimum',\n VOLTAGE_MAXIMUM: 'voltageMaximum',\n TYPE_CURRENT: 'typeCurrent',\n WIRE_FEED_SPEED_MINIMUM: 'wireFeedSpeedMinimum',\n WIRE_FEED_SPEED_MAXIMUM: 'wireFeedSpeedMaximum',\n TRAVEL_SPEED_MINIMUM: 'travelSpeedMinimum',\n TRAVEL_SPEED_MAXIMUM: 'travelSpeedMaximum',\n HEAT_INPUT_MINIMUM: 'heatInputMinimum',\n HEAT_INPUT_MAXIMUM: 'heatInputMaximum',\n ARC_TRANSFER_MODE: 'arcTransferMode',\n LAYER: 'layer',\n },\n};\n","import { get } from '@ember/object';\nimport { formatDate } from 'weldnote/helpers/format-date';\nimport Constants from 'weldnote/utils/constants';\n\nconst { WELD_PROGRESS_STATE } = Constants;\n\nexport function createStatesList(weld) {\n let state = parseInt(get(weld, 'state'));\n let stateList = [];\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.waiting',\n date: '',\n });\n if (state >= WELD_PROGRESS_STATE.FIT) {\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.fitted',\n date: formatDate([], { date: get(weld, 'fitDate') }),\n });\n } else {\n stateList.pushObject({\n complete: false,\n labelKey: 'components.model-project-weld/edit.weld-progress.fitted',\n date: '',\n });\n }\n if (state >= WELD_PROGRESS_STATE.WELDED) {\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.welded',\n date: formatDate([], { date: get(weld, 'weldDate') }),\n });\n } else {\n stateList.pushObject({\n complete: false,\n labelKey: 'components.model-project-weld/edit.weld-progress.welded',\n date: '',\n });\n }\n if (get(weld, 'requiresPwht')) {\n if (state >= WELD_PROGRESS_STATE.PWHT_COMPLETED) {\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.pwht-complete',\n date: formatDate([], { date: get(weld, 'pwhtDateCompleted') }),\n });\n } else {\n stateList.pushObject({\n complete: false,\n labelKey: 'components.model-project-weld/edit.weld-progress.pwht-complete',\n date: '',\n });\n }\n }\n if (state >= WELD_PROGRESS_STATE.TESTED) {\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.tested',\n date: formatDate([], { date: get(weld, 'testDate') }),\n });\n } else {\n stateList.pushObject({\n complete: false,\n labelKey: 'components.model-project-weld/edit.weld-progress.tested',\n date: '',\n });\n }\n if (state >= WELD_PROGRESS_STATE.PROCESSED) {\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.processed',\n date: formatDate([], { date: get(weld, 'processedDate') }),\n });\n } else {\n stateList.pushObject({\n complete: false,\n labelKey: 'components.model-project-weld/edit.weld-progress.processed',\n date: '',\n });\n }\n if (state >= WELD_PROGRESS_STATE.SHIPPED) {\n stateList.pushObject({\n complete: true,\n labelKey: 'components.model-project-weld/edit.weld-progress.shipped',\n date: formatDate([], { date: get(weld, 'shippedDate') }),\n });\n } else {\n stateList.pushObject({\n complete: false,\n labelKey: 'components.model-project-weld/edit.weld-progress.shipped',\n date: '',\n });\n }\n return stateList;\n}\n\nexport function calculateCurrentState(weld) {\n let statesList = createStatesList(weld);\n let lastCompletedState;\n statesList.forEach((state) => {\n if (state.complete) {\n lastCompletedState = state;\n }\n });\n return lastCompletedState;\n}\n","import { isEmpty } from '@ember/utils';\n\nexport function inRange(valueRaw: string, minimumRaw: string, maximumRaw: string) {\n if (isEmpty(valueRaw)) {\n return true;\n }\n\n let value = parseFloat(valueRaw);\n let minimum = null;\n if (!isEmpty(minimumRaw)) {\n minimum = parseFloat(minimumRaw);\n }\n let maximum = null;\n if (!isEmpty(maximumRaw)) {\n maximum = parseFloat(maximumRaw);\n }\n\n if (minimum && !isEmpty(minimum) && maximum && !isEmpty(maximum)) {\n return value <= maximum && value >= minimum;\n }\n\n if (minimum && !isEmpty(minimum)) {\n return value >= minimum;\n }\n\n if (maximum && !isEmpty(maximum)) {\n return value <= maximum;\n }\n\n return true;\n}\n\nexport function rangeSerialization(\n min: string | number | null,\n max: string | number | null\n): string {\n if (!isEmpty(min) && !isEmpty(max)) {\n if (min === max) {\n return `${max}`;\n } else {\n return `${min} ≤ X ≤ ${max}`;\n }\n }\n if (!isEmpty(min)) {\n return ` ≥ ${min}`;\n }\n\n if (!isEmpty(max)) {\n return ` ≤ ${max}`;\n }\n\n return '';\n}\n","import { isEmpty } from '@ember/utils';\nimport { isStandardASME, isStandardAWS, isStandardISO } from 'weldnote/utils/standards';\nimport BaseMaterialRulesISO from 'weldnote/utils/pqr-base-material-rules-iso';\nimport { formatRangeWith2Decimals } from 'weldnote/utils/unit-system/format';\nimport Constants from 'weldnote/utils/constants';\nimport { NumericalRange } from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport PqrStandard from 'weldnote/models/pqr-standard';\n\nconst { WELD_TYPES, UNIT_SYSTEM } = Constants;\n\nfunction _fixDecimals(result: NumericalRange, unitSystem = UNIT_SYSTEM.METRIC) {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return result;\n }\n return formatRangeWith2Decimals(result);\n}\n\nfunction calculateISO15614ApprovalRange(\n testPiece: number,\n {\n baseMaterial1Group,\n baseMaterial2Group,\n }: {\n baseMaterial1Group: string;\n baseMaterial2Group: string;\n }\n) {\n let result: NumericalRange = {\n min: null,\n max: null,\n };\n if (!isEmpty(baseMaterial1Group) && !isEmpty(baseMaterial2Group)) {\n if (isCorrectGroupISO15614(baseMaterial1Group) && isCorrectGroupISO15614(baseMaterial2Group)) {\n result.min = 0;\n result.max = testPiece;\n } else {\n result.min = 0;\n result.max = testPiece + 50;\n }\n } else {\n result.min = 0;\n result.max = testPiece;\n }\n return result;\n}\n\nfunction isCorrectGroupISO15614(group: string): boolean {\n return (\n BaseMaterialRulesISO.isGroup8(group) ||\n BaseMaterialRulesISO.isGroupExactly40(group) ||\n BaseMaterialRulesISO.isGroupExactly48(group) ||\n BaseMaterialRulesISO.isGroup10(group)\n );\n}\n\nexport function calculateInterpassApprovalRange(\n interpass: number,\n {\n standard,\n interpassMinimum,\n weldType,\n impactRequirements,\n unitSystem,\n baseMaterial1Group,\n baseMaterial2Group,\n }: {\n standard: PqrStandard;\n interpassMinimum: number;\n weldType: string;\n impactRequirements: boolean;\n unitSystem: string;\n baseMaterial1Group: string;\n baseMaterial2Group: string;\n }\n) {\n let result: NumericalRange = {\n min: null,\n max: null,\n };\n\n let interpassValue = interpass;\n if (isStandardISO(standard)) {\n if (!isNaN(interpassValue)) {\n result = calculateISO15614ApprovalRange(interpassValue, {\n baseMaterial1Group,\n baseMaterial2Group,\n });\n }\n } else if (isStandardASME(standard)) {\n if (!isNaN(interpassValue)) {\n if (interpassValue > 0) {\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n result.min = 0;\n result.max = interpassValue;\n } else {\n result.min = 0;\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n result.max = interpassValue + 55;\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n result.max = interpassValue + 100;\n }\n }\n }\n }\n } else if (isStandardAWS(standard)) {\n if (impactRequirements) {\n result.max = interpassValue + 56;\n }\n }\n\n // Don't update the minimum if there was a previous value there\n if (interpassMinimum > 0 && result.min === 0) {\n result.min = interpassMinimum;\n }\n\n return _fixDecimals(result, unitSystem);\n}\n","import { isStandardISO, isStandardASME, isStandardAWS } from 'weldnote/utils/standards';\nimport { isEmpty } from '@ember/utils';\n\nimport { allGTAW } from 'weldnote/utils/rules/welding-process';\n\nimport Constants from 'weldnote/utils/constants';\n\nimport { formatRangeWith2Decimals } from 'weldnote/utils/unit-system/format';\nimport { NumericalRange } from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport PqrStandard from 'weldnote/models/pqr-standard';\n\nconst { UNIT_SYSTEM } = Constants;\n\nexport function calculatePreHeatApprovalRange(\n preHeat: number,\n {\n standard,\n impactRequirements,\n processes,\n unitSystem = UNIT_SYSTEM.METRIC,\n }: {\n standard: PqrStandard;\n impactRequirements: boolean;\n processes: any;\n unitSystem: string;\n }\n) {\n let result: NumericalRange = {\n min: null,\n max: null,\n };\n\n if (isEmpty(preHeat)) {\n return result;\n }\n\n if (isStandardISO(standard)) {\n result.min = preHeat - 50;\n result.max = null;\n } else if (isStandardASME(standard)) {\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n result.min = Math.max(0, preHeat - 55);\n if (impactRequirements) {\n result.max = preHeat + 55;\n } else {\n result.max = null;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n result.min = Math.max(0, preHeat - 100);\n if (impactRequirements) {\n result.max = preHeat + 55;\n } else {\n result.max = null;\n }\n }\n } else if (isStandardAWS(standard)) {\n let { root, fill, cap } = processes;\n if (allGTAW(root, fill, cap)) {\n result.min = preHeat - 55;\n } else {\n result.min = preHeat - 15;\n }\n if (impactRequirements) {\n result.max = preHeat + 56;\n }\n }\n\n return fixDecimals(result, unitSystem);\n}\n\nfunction fixDecimals(result: NumericalRange, unitSystem = UNIT_SYSTEM.METRIC) {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return result;\n }\n return formatRangeWith2Decimals(result);\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport ProcessMecanization, { ProcessMecanizationType } from 'weldnote/models/process-mecanization';\n\nfunction isMecanization(mecanization: ProcessMecanization, name: ProcessMecanizationType) {\n return get(mecanization, 'name') === name;\n}\n\nexport function isManualMecanization(mecanization: ProcessMecanization): boolean {\n return isMecanization(mecanization, ProcessMecanizationType.MANUAL);\n}\n\nexport function isAutomaticMecanization(mecanization: ProcessMecanization): boolean {\n return isMecanization(mecanization, ProcessMecanizationType.AUTOMATIC);\n}\n\nexport function isMechanizedMecanization(mecanization: ProcessMecanization): boolean {\n return isMecanization(mecanization, ProcessMecanizationType.MECHANIZED);\n}\n\nexport function filterMecanizations(\n allMecanizations: ProcessMecanization[],\n mecanizationNameList: string[]\n): ProcessMecanization[] {\n let result: ProcessMecanization[] = [];\n for (let mecanizationName of mecanizationNameList) {\n let mecanization = allMecanizations.findBy('name', mecanizationName);\n if (mecanization && !isEmpty(mecanization)) {\n result.pushObject(mecanization);\n }\n }\n return result;\n}\n","import { set, get } from '@ember/object';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport WPSRules from 'weldnote/utils/welding-procedure-specification-rules';\n\nconst { PQR } = PQRRules;\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = WPSRules;\n\n// Compares the weld types for PQR and WPS and copies the thickness from the correct fields\nexport function applyThicknessFromPQR(wps, pqr) {\n let applied = false;\n if (wps.isFilletWeld() && !pqr.isFilletWeld()) {\n set(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM,\n get(pqr, PQR.FILLET_WELD_BASE_MATERIAL_THICKNESS_MINIMUM_APPROVALRANGE)\n );\n set(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM,\n get(pqr, PQR.FILLET_WELD_BASE_MATERIAL_THICKNESS_MAXIMUM_APPROVALRANGE)\n );\n applied = true;\n }\n if (wps.isPartialPenetrationButtWeld() && pqr.isCompletePenetrationButtWeld()) {\n set(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM,\n get(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL_THICKNESS_MINIMUM_APPROVAL_RANGE)\n );\n set(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM,\n get(pqr, PQR.PJP_BUTT_WELD_BASE_MATERIAL_THICKNESS_MAXIMUM_APPROVAL_RANGE)\n );\n applied = true;\n }\n if (!applied) {\n set(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MINIMUM,\n get(pqr, PQR.THICKNESS_TOTAL_MINIMUM_APPROVALRANGE)\n );\n set(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.THICKNESS_MAXIMUM,\n get(pqr, PQR.THICKNESS_TOTAL_MAXIMUM_APPROVALRANGE)\n );\n }\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport WeldType from 'weldnote/models/weld-type';\n\nconst { WELD_TYPES } = Constants;\n\nfunction is(weldType: WeldType | null | undefined, toCheck: string): boolean {\n if (weldType && !isEmpty(weldType) && !isEmpty(get(weldType, 'weldType'))) {\n return get(weldType, 'weldType') === toCheck;\n }\n return false;\n}\n\nexport function isFilletWeld(weldType: WeldType | null | undefined): boolean {\n return is(weldType, WELD_TYPES.FILLET_WELD);\n}\n\nexport function isButtWeld(weldType: WeldType): boolean {\n return is(weldType, WELD_TYPES.BUTT_WELD);\n}\n\nexport function isATypeOfButtWeld(weldType: WeldType): boolean {\n return (\n isButtWeld(weldType) ||\n isPartialPenetrationButtWeld(weldType) ||\n isCompleteJointPenetrationButtWeld(weldType) ||\n isPartialJointPenetrationButtWeld(weldType)\n );\n}\n\nexport function isPartialJointPenetrationButtWeld(weldType: WeldType): boolean {\n return is(weldType, WELD_TYPES.PARTIAL_JOINT_PENETRATION_BUTT_WELD);\n}\n\nexport function isCompleteJointPenetrationButtWeld(weldType: WeldType | null | undefined): boolean {\n return is(weldType, WELD_TYPES.COMPLETE_JOINT_PENETRATION_BUTT_WELD);\n}\n\nexport function isBranchConnection(weldType: WeldType): boolean {\n return is(weldType, WELD_TYPES.BRANCH_CONNECTION);\n}\n\nexport function isOverlayWeld(weldType: WeldType): boolean {\n return is(weldType, WELD_TYPES.OVERLAY_WELD);\n}\n\nexport function isPartialPenetrationButtWeldASME(weldType: WeldType | null | undefined): boolean {\n return is(weldType, WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD);\n}\n\nexport function isPartialPenetrationButtWeldISO(weldType: WeldType): boolean {\n return is(weldType, WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD);\n}\n\nexport function isPartialPenetrationButtWeld(weldType: WeldType): boolean {\n return is(weldType, WELD_TYPES.PARTIAL_PENETRATION_BUTT_WELD);\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\nimport WeldingDetail from 'weldnote/models/welding-detail';\nimport Enumerable from '@ember/array/-private/enumerable';\n\nconst { WELDING_DETAILS } = Constants;\n\nexport function isSingleLayer(details: Enumerable): boolean {\n if (!isEmpty(details)) {\n if (details.findBy('shortDesignation', WELDING_DETAILS.SINGLE_LAYER)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isSingleLayerDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.SINGLE_LAYER;\n}\n\nexport function isMultiLayer(details: Enumerable): boolean {\n if (!isEmpty(details)) {\n if (details.findBy('shortDesignation', WELDING_DETAILS.MULTI_LAYER)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isMultiLayerDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.MULTI_LAYER;\n}\n\nexport function isSingleSideNoBacking(details: WeldingDetail[]): boolean {\n if (!isEmpty(details)) {\n if (details.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_NO_BACKING)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isSingleSideNoBackingDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING;\n}\n\nexport function isSingleSideMaterialBacking(details: WeldingDetail[]): boolean {\n if (!isEmpty(details)) {\n if (details.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isSingleSideMaterialBackingDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING;\n}\n\nexport function isSingleSideGasBacking(details: WeldingDetail[]): boolean {\n if (!isEmpty(details)) {\n if (details.findBy('shortDesignation', WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isSingleSideGasBackingDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING;\n}\n\nexport function isSingleOrMultiLayer(details: WeldingDetail[]): boolean {\n return isMultiLayer(details) || isSingleLayer(details);\n}\n\nexport function isBothSides(details: Enumerable): boolean {\n if (!isEmpty(details)) {\n if (details.findBy('shortDesignation', WELDING_DETAILS.BOTH_SIDES)) {\n return true;\n }\n }\n return false;\n}\n\nexport function isBothSidesDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.BOTH_SIDES;\n}\n\nexport function isSingleSideFluxBackingDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING;\n}\n\nexport function isConsumableInsertDetail(detail: WeldingDetail): boolean {\n if (isEmpty(detail)) {\n return false;\n }\n return detail.shortDesignation === WELDING_DETAILS.CONSUMABLE_INSERT;\n}\n\nexport function filterDetailsIncompatibleWithFilletWeld(details: WeldingDetail[]): WeldingDetail[] {\n if (!isEmpty(details)) {\n return details.reject((detail: WeldingDetail) => {\n let name: string = get(detail, 'shortDesignation');\n let result =\n name === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n name === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n name === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING;\n return result;\n });\n }\n return [];\n}\n\nexport function filterDetailsIncompatibleWithOverlayWeld(\n details: WeldingDetail[]\n): WeldingDetail[] {\n if (!isEmpty(details)) {\n return details.reject((item) => {\n let name = get(item, 'shortDesignation');\n let result =\n name === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n name === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING ||\n name === WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING ||\n name === WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING ||\n name === WELDING_DETAILS.BOTH_SIDES ||\n name === WELDING_DETAILS.CONSUMABLE_INSERT;\n return result;\n });\n }\n return [];\n}\n\nexport function filterDetailsIncompatibleWithPartialPenetrationButtWeld(\n details: WeldingDetail[]\n): WeldingDetail[] {\n if (!isEmpty(details)) {\n return details.reject((item) => {\n let name = get(item, 'shortDesignation');\n let result =\n name === WELDING_DETAILS.SINGLE_SIDE_NO_BACKING ||\n name === WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING;\n return result;\n });\n }\n return [];\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport {\n isStandardAWSD11,\n isStandardASME,\n isWelderStandardISO96061,\n isStandardISO,\n isStandardAWSD15,\n} from 'weldnote/utils/standards';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport WPSModel from 'weldnote/models/welding-procedure-specification';\nimport PqrStandard from 'weldnote/models/pqr-standard';\nimport WelderStandard from 'weldnote/models/welder-standard';\n\n// Check if the options only include the provided positions and not any more\nexport function optionsOnlyIncludePositions(options: WeldingPosition[], positions: string[]) {\n if (!isEmpty(options) && !isEmpty(positions)) {\n let wrongPosition = false;\n options.forEach((position) => {\n let code = get(position, 'code');\n if (!positions.includes(code)) {\n wrongPosition = true;\n }\n });\n return !wrongPosition;\n }\n return false;\n}\n\n// Serialize positions from root, fill and cap properties of a model\nexport function serializePositions(model: WPSModel, rootProperty: string, fillProperty: string, capProperty: string) {\n let resultArray: string[] = [];\n let positionsRoot = get(model, rootProperty) as WeldingPosition[];\n if (!isEmpty(positionsRoot)) {\n positionsRoot.forEach((p: WeldingPosition) => {\n resultArray.push(get(p, 'code') as string);\n });\n }\n let positionsFill = get(model, fillProperty) as WeldingPosition[];\n if (!isEmpty(positionsFill)) {\n positionsFill.forEach((p: WeldingPosition) => {\n resultArray.push(get(p, 'code') as string);\n });\n }\n let positionsCap = get(model, capProperty) as WeldingPosition[];\n if (!isEmpty(positionsCap)) {\n positionsCap.forEach((p: WeldingPosition) => {\n resultArray.push(get(p, 'code'));\n });\n }\n return resultArray.uniq().join(', ');\n}\n\nexport function allowedMultiplePositionsPQR(standard: PqrStandard) {\n if (isStandardISO(standard) || isStandardASME(standard)) {\n return [];\n } else if (isStandardAWSD11(standard)) {\n return ['5G+2G'];\n } else if (isStandardAWSD15(standard)) {\n return ['3G+4G', '3F+4F'];\n } else {\n return [];\n }\n}\n\nexport function allowedMultiplePositionsCertificates(standard: WelderStandard) {\n if (isWelderStandardISO96061(standard)) {\n return [];\n } else if (isStandardASME(standard)) {\n return ['3G+4G', '2G+3G+4G', '3F+4F', '5G+2G'];\n } else if (isStandardAWSD11(standard)) {\n return ['5G+2G', '3G+4G', '3F+4F'];\n } else if (isStandardAWSD15(standard)) {\n return ['3G+4G', '3F+4F'];\n } else {\n return [];\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport Const from 'weldnote/utils/constants';\n\nconst { WELDING_PROCESSES } = Const;\n\nconst PROCESS_NAME = 'shortDesignation';\n\n// Returns all processes are the same, and at least one is not empty\nexport function isSameProcess(root: WeldingProcess, fill: WeldingProcess, cap: WeldingProcess) {\n let rootProcess = !isEmpty(root) ? get(root, PROCESS_NAME) : null;\n let fillProcess = !isEmpty(fill) ? get(fill, PROCESS_NAME) : null;\n let capProcess = !isEmpty(cap) ? get(cap, PROCESS_NAME) : null;\n let processes: string[] = [];\n\n if (rootProcess) {\n processes.pushObject(rootProcess);\n }\n if (fillProcess) {\n processes.pushObject(fillProcess);\n }\n if (capProcess) {\n processes.pushObject(capProcess);\n }\n\n return processes.uniq().length === 1;\n}\n\nexport function areAllProcess(\n root: WeldingProcess,\n fill: WeldingProcess,\n cap: WeldingProcess,\n process: string\n) {\n if (isSameProcess(root, fill, cap) && !isEmpty(process)) {\n if (!isEmpty(root)) {\n let processRoot = get(root, PROCESS_NAME);\n if (processRoot === process) {\n return true;\n }\n\n if (!isEmpty(fill)) {\n let processFill = get(fill, PROCESS_NAME);\n if (processFill === process) {\n return true;\n }\n }\n\n if (!isEmpty(cap)) {\n let processCap = get(cap, PROCESS_NAME);\n if (processCap === process) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\nexport function allGTAW(root: WeldingProcess, fill: WeldingProcess, cap: WeldingProcess) {\n return areAllProcess(root, fill, cap, WELDING_PROCESSES.GTAW);\n}\n\nexport function isFCAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.FCAW;\n}\n\nexport function isSMAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.SMAW;\n}\n\nexport function isSAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.SAW;\n}\n\nexport function isGMAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.GMAW;\n}\n\nexport function isPAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.PAW;\n}\n\nexport function isGTAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.GTAW;\n}\n\nexport function isMCAW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.MCAW;\n}\n\nexport function isFCAWS(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.FCAWS;\n}\n\nexport function isESW(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES.ESW;\n}\n\nexport function is111(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['111'];\n}\n\nexport function is15(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['15'];\n}\n\nexport function is131(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['131'];\n}\n\nexport function is135(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['135'];\n}\n\nexport function is136(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['136'];\n}\n\nexport function is137(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['137'];\n}\n\nexport function is138(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['138'];\n}\n\nexport function is121(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['121'];\n}\n\nexport function is122(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['122'];\n}\n\nexport function is123(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['123'];\n}\n\nexport function is124(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['124'];\n}\n\nexport function is125(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['125'];\n}\n\nexport function is141(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['141'];\n}\n\nexport function is142(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['142'];\n}\n\nexport function is143(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['143'];\n}\n\nexport function is145(process: WeldingProcess): boolean {\n return !isEmpty(process) && get(process, PROCESS_NAME) === WELDING_PROCESSES['145'];\n}\n\nexport function isTungstenProcess(process: WeldingProcess): boolean {\n return is141(process) || is142(process) || is143(process) || is145(process) || isGTAW(process)\n || isPAW(process) || is15(process);\n}\n","/**\n * Runtime configuration resolution for shared dev/test Azure builds.\n *\n * Both dev.apps.indusuite.com and test.apps.indusuite.com serve from\n * the same Azure file share. This utility patches the ENV singleton\n * at app boot based on window.location.hostname so that each URL\n * targets the correct backend, MSAL tenant, and analytics tokens.\n */\n\nconst SCALAR_KEYS = [\n 'notesBackendEndpoint',\n 'esabCloudLink',\n 'orgApiUrl',\n 'azureSubscriptionManagementId',\n] as const;\n\nexport function applyRuntimeConfig(ENV: Record, hostname?: string): void {\n const envMap = ENV.runtimeEnvironments;\n if (!envMap) {\n return;\n }\n\n const host = hostname ?? window.location.hostname;\n const overrides = envMap[host];\n if (!overrides) {\n return;\n }\n\n for (const key of SCALAR_KEYS) {\n if (key in overrides) {\n ENV[key] = overrides[key];\n }\n }\n\n if (overrides.msalWeldCloud) {\n Object.assign(ENV.msalWeldCloud, overrides.msalWeldCloud);\n }\n\n if (overrides.apiKeys) {\n Object.assign(ENV.apiKeys, overrides.apiKeys);\n }\n\n if (overrides.sentry) {\n Object.assign(ENV.sentry, overrides.sentry);\n }\n\n // Patch ember-metrics adapter configs (they hold direct references to token values)\n if (overrides.apiKeys && ENV.metricsAdapters) {\n for (const adapter of ENV.metricsAdapters) {\n if (adapter.name === 'Mixpanel' && overrides.apiKeys.mixpanel) {\n adapter.config.token = overrides.apiKeys.mixpanel;\n }\n if (adapter.name === 'GoogleAnalytics' && overrides.apiKeys.googleAnalytics) {\n adapter.config.id = overrides.apiKeys.googleAnalytics;\n }\n }\n }\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport PqrStandard from 'weldnote/models/pqr-standard';\nimport { WeldingStandard } from 'weldnote/config/types/welding-standard';\n\nfunction getStandardName(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n let standardName = get(standard, 'standard');\n if (!isEmpty(standardName)) {\n return standardName.trim();\n }\n }\n return '';\n}\n\nfunction getWelderStandardName(standard: WelderStandard) {\n if (!isEmpty(standard)) {\n let standardName = get(standard, 'standard');\n if (!isEmpty(standardName)) {\n return standardName.trim();\n }\n }\n return '';\n}\n\nexport function isStandardISO(standard: PqrStandard) {\n return (\n isStandardISO15614(standard) ||\n isStandardISO15611(standard) ||\n isStandardISO15612(standard) ||\n isStandardISO15613(standard) ||\n isStandardISO15614Part2(standard)\n );\n}\n\nexport function isStandardISO15614(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ISO 15614-1';\n }\n return false;\n}\n\nexport function isStandardISO15613(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ISO 15613';\n }\n return false;\n}\n\nexport function isStandardISO15611(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ISO 15611';\n }\n return false;\n}\n\nexport function isStandardISO15612(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ISO 15612';\n }\n return false;\n}\n\nexport function isStandardAWSB21(standard: PqrStandard | WelderStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'AWS B2.1';\n }\n return false;\n}\n\nexport function isStandardISO15614Part2(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ISO 15614-2';\n }\n return false;\n}\n\nexport function isStandardISO15614Part5(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ISO 15614-5';\n }\n return false;\n}\n\nexport function isWelderStandardISO96061(standard: WelderStandard) {\n if (!isEmpty(standard)) {\n return getWelderStandardName(standard) === 'ISO 9606-1';\n }\n return false;\n}\n\nexport function isWelderStandardISO14732(standard: WelderStandard) {\n if (!isEmpty(standard)) {\n return getWelderStandardName(standard) === 'ISO 14732';\n }\n return false;\n}\n\nexport function isWelderStandardISO96062(standard: WelderStandard) {\n if (!isEmpty(standard)) {\n return getWelderStandardName(standard) === 'ISO 9606-2';\n }\n return false;\n}\n\nexport function isWelderStandardISO96065(standard: WelderStandard) {\n if (!isEmpty(standard)) {\n return getWelderStandardName(standard) === 'ISO 9606-5';\n }\n return false;\n}\n\nexport function isStandardASME(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'ASME IX';\n }\n return false;\n}\n\nexport function isStandardAWS(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'AWS D1.1';\n }\n return false;\n}\n\nexport function isStandardAWSD15(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'AWS D1.5';\n }\n return false;\n}\n\nexport function isWelderStandardAWSD11(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'AWS D1.1';\n }\n return false;\n}\n\nexport function isStandardAWSD11(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'AWS D1.1';\n }\n return false;\n}\n\nexport function isStandardAWSD143(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'AWS D14.3';\n }\n return false;\n}\n\nexport function isStandardAPI(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard) === 'API 1104';\n }\n return false;\n}\n\nexport function isSameStandard(standard1: WeldingStandard, standard2: WeldingStandard) {\n if (!isEmpty(standard1) && !isEmpty(standard2)) {\n let standard1Name = get(standard1, 'standard');\n let standard2Name = get(standard2, 'standard');\n if (!isEmpty(standard1Name) && !isEmpty(standard2Name)) {\n return standard1Name === standard2Name;\n }\n }\n return false;\n}\n\nexport function isSamePQRAndWelderStandard(\n pqrStandard: PqrStandard,\n welderStandard: WelderStandard\n) {\n if (isWelderStandardISO96062(welderStandard)) {\n return isStandardAnyOfIso1561Type2(pqrStandard);\n }\n\n if (isStandardAnyOfISO1561X(pqrStandard)) {\n return isWelderStandardISO96061(welderStandard);\n } else if (isStandardISO15614Part5(pqrStandard)) {\n return isWelderStandardISO96065(welderStandard);\n } else if (isStandardASME(pqrStandard)) {\n return isStandardASME(welderStandard);\n } else if (isStandardAWS(pqrStandard)) {\n return isStandardAWS(welderStandard);\n } else if (isStandardAPI(pqrStandard)) {\n return isStandardAPI(welderStandard);\n } else {\n return isSameStandard(pqrStandard, welderStandard);\n }\n}\n\nexport function isStandardAnyOfISO1561X(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard).indexOf('ISO 1561') > -1;\n }\n return false;\n}\n\nexport function isStandardAnyOfIso1561Type2(standard: PqrStandard) {\n if (!isEmpty(standard)) {\n return getStandardName(standard).indexOf('ISO 15614-2') > -1;\n }\n return false;\n}\n\nexport function isStandardOfTypeAWS(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n let code = standard?.code?.code;\n return code === 'AWS';\n }\n return false;\n}\n\nexport function isStandardOfTypeISO(standard: WeldingStandard) {\n if (!isEmpty(standard)) {\n let code = standard?.code?.code;\n return code === 'ISO';\n }\n return false;\n}\n","import { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\n\nconst { PERMISSIONS } = Constants;\n\nexport function isAllowedByPlan(activity = '') {\n if (isEmpty(activity)) {\n return false;\n }\n if (activity.indexOf('pwps') > 0) {\n if (activity === PERMISSIONS.PWPS_CREATE_CERTIFICATE) {\n return false;\n }\n return true;\n } else if (activity.indexOf('certificate') > 0) {\n return true;\n }\n return false;\n}\n","import Constants from 'weldnote/utils/constants';\nimport { isAllowedByPlan as wpsPlan } from './wps-plan';\nimport { isAllowedByPlan as certificatePlan } from './certificate-plan';\nimport { isAllowedByPlan as qualityPlan } from './quality-plan';\n\nconst { WELDNOTE_PLANS } = Constants;\n\nexport default function getPlan(currentPlan = '') {\n if (currentPlan === WELDNOTE_PLANS.WPS_ONLY) {\n return wpsPlan;\n } else if (currentPlan === WELDNOTE_PLANS.CERTIFICATES) {\n return certificatePlan;\n } else if (currentPlan === WELDNOTE_PLANS.QUALITY) {\n return qualityPlan;\n }\n return qualityPlan;\n}\n","import { isEmpty } from '@ember/utils';\n\nexport function isAllowedByPlan(activity = '') {\n if (isEmpty(activity)) {\n return false;\n }\n return true;\n}\n","import { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\n\nconst { PERMISSIONS } = Constants;\n\nexport function isAllowedByPlan(activity = '') {\n if (isEmpty(activity)) {\n return false;\n }\n if (activity.indexOf('pwps') > 0) {\n if (\n activity === PERMISSIONS.PWPS_CREATE_CERTIFICATE ||\n activity === PERMISSIONS.PWPS_CREATE_PQR\n ) {\n return false;\n }\n return true;\n }\n return false;\n}\n","import { isEmpty } from '@ember/utils';\nimport Constants from 'weldnote/utils/constants';\nimport { NumericalRange } from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\n\nconst { UNIT_SYSTEM } = Constants;\n\nfunction formatRangeWithNDecimals(result: NumericalRange, decimals = 2): NumericalRange {\n if (result.min && !isEmpty(result.min)) {\n let { min } = result;\n\n if (!isNaN(min) && typeof min === 'number') {\n result.min = parseFloat(min.toFixed(decimals));\n }\n }\n if (result.max && !isEmpty(result.max)) {\n let { max } = result;\n if (!isNaN(max) && typeof max === 'number') {\n result.max = parseFloat(max.toFixed(decimals));\n }\n }\n\n return result;\n}\n\nexport function formatRangeWith2Decimals(result: NumericalRange): NumericalRange {\n return formatRangeWithNDecimals(result, 2);\n}\n\nexport function formatRangeWith3Decimals(result: NumericalRange): NumericalRange {\n return formatRangeWithNDecimals(result, 3);\n}\n\nexport function fixDecimalsForUnitSystem(\n result: NumericalRange,\n unitSystem = UNIT_SYSTEM.METRIC\n): NumericalRange {\n if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return result;\n }\n return formatRangeWith2Decimals(result);\n}\n","import { isEmpty } from '@ember/utils';\n\nexport function fromMilimeterSecondToMilimeterMinute(\n valueInMilimeterSecond: string | number | undefined\n): string {\n if (!isEmpty(valueInMilimeterSecond)) {\n let floatValue = parseFloat(`${valueInMilimeterSecond}`);\n if (!isNaN(floatValue)) {\n return `${parseFloat((floatValue * 60).toFixed(4))}`;\n }\n }\n return '';\n}\n\nexport function fromMilimeterMinuteToMilimeterSecond(\n valueInMilimeterMinute: string | number\n): string {\n if (!isEmpty(valueInMilimeterMinute)) {\n let floatValue = parseFloat(`${valueInMilimeterMinute}`);\n if (!isNaN(floatValue)) {\n return `${floatValue / 60}`;\n }\n }\n return '';\n}\n\nexport function fromMilimeterSecondToMeterMinute(\n valueInMilimeterSecond: string | number | undefined\n): string {\n if (valueInMilimeterSecond && !isEmpty(valueInMilimeterSecond)) {\n let floatValue = parseFloat(`${valueInMilimeterSecond}`);\n if (!isNaN(floatValue)) {\n return `${parseFloat((floatValue * 0.06).toFixed(4))}`;\n }\n }\n return '';\n}\n\nexport function fromMeterMinuteToMilimeterSecond(valueInMeterMinute: string | number): string {\n if (!isEmpty(valueInMeterMinute)) {\n let floatValue = parseFloat(`${valueInMeterMinute}`);\n if (!isNaN(floatValue)) {\n return `${floatValue / 0.06}`;\n }\n }\n return '';\n}\n","import { isEmpty } from '@ember/utils';\n\nconst knownFractions = [\n '1/32',\n '1/16',\n '3/32',\n '1/8',\n '5/32',\n '3/16',\n '7/32',\n '1/4',\n '9/32',\n '5/16',\n '11/32',\n '3/8',\n '13/32',\n '7/16',\n '15/32',\n '1/2',\n '17/32',\n '9/16',\n '19/32',\n '5/8',\n '21/32',\n '11/16',\n '23/32',\n '3/4',\n '25/32',\n '13/16',\n '27/32',\n '7/8',\n '29/32',\n '15/16',\n '31/32',\n '1',\n '1 1/4',\n '1 1/2',\n '1 3/4',\n '2',\n '2 1/4',\n '2 1/2',\n '2 3/4',\n '3',\n '3 1/4',\n '3 1/2',\n '3 3/4',\n];\n\n// Source http://jsfiddle.net/5QrhQ/5/, which came from a Stackoverflow link\nfunction gcd(a, b) {\n if (b < 0.0000001) {\n // Since there is a limited precision we need to limit the value.\n return a;\n }\n return gcd(b, Math.floor(a % b)); // Discard any fractions due to limitations in precision.\n}\n\nfunction toFractionInput(numerator, denominator) {\n return `${numerator}/${denominator}`;\n}\n\nfunction toFractionString(numerator, denominator) {\n return `${numerator}⁄${denominator}`;\n}\n\nexport function toFraction(fraction, type = 'input') {\n let len = fraction.toString().length - 2;\n\n let denominator = Math.pow(10, len);\n let numerator = fraction * denominator;\n\n if (isNaN(numerator) || isNaN(denominator)) {\n return;\n }\n\n let divisor = gcd(numerator, denominator);\n\n numerator /= divisor;\n denominator /= divisor;\n\n if (numerator > denominator) {\n let integer = Math.trunc(numerator / denominator);\n numerator = parseInt(numerator) % parseInt(denominator);\n if (numerator === 0) {\n return `${integer}`;\n } else {\n if (type === 'input') {\n return `${integer} ${toFractionInput(numerator, denominator)}`;\n } else {\n return `${integer} ${toFractionString(numerator, denominator)}`;\n }\n }\n } else {\n if (numerator === denominator) {\n return `${numerator}`;\n } else {\n if (type === 'input') {\n return `${toFractionInput(numerator, denominator)}`;\n } else {\n return `${toFractionString(numerator, denominator)}`;\n }\n }\n }\n}\n\nexport function toNumber(valueFraction, separator = '.') {\n if (isEmpty(valueFraction)) {\n return NaN;\n }\n\n if (separator !== '.') {\n valueFraction = `${valueFraction}`.replace(separator, '.');\n }\n\n let value = valueFraction.trim().split(' ');\n if (value.length > 1) {\n let [integer, fraction] = value;\n let [numerator, denominator] = fraction.split('/');\n let result = parseInt(integer) + parseFloat(numerator) / parseInt(denominator);\n if (result !== Infinity) {\n return result;\n } else {\n return NaN;\n }\n } else {\n let [numerator, denominator] = valueFraction.split('/');\n if (!isEmpty(denominator)) {\n let result = parseFloat(numerator) / parseInt(denominator);\n if (result !== Infinity) {\n return result;\n } else {\n return NaN;\n }\n }\n return parseFloat(numerator);\n }\n}\n\nexport function isKnownFraction(valueDecimal) {\n if (!isEmpty(valueDecimal)) {\n let value = toFraction(valueDecimal);\n return knownFractions.includes(value);\n }\n return false;\n}\n\nexport function isKnownFractionString(fraction) {\n if (!isEmpty(fraction)) {\n return knownFractions.includes(fraction);\n }\n return false;\n}\n\nexport function isFraction(value) {\n if (!isEmpty(value)) {\n let copy = `${value}`.trim();\n if (copy.indexOf('/') > -1) {\n return true;\n }\n }\n return false;\n}\n\nexport function convertMilimetersToInches(value) {\n if (!isEmpty(value)) {\n let valueParsed = parseFloat(value);\n if (!isNaN(valueParsed)) {\n return valueParsed / 25.4;\n }\n }\n return null;\n}\n\nexport function convertInchesToMilimeters(value) {\n if (!isEmpty(value)) {\n let valueParsed = parseFloat(value);\n if (!isNaN(valueParsed)) {\n return valueParsed * 25.4;\n }\n }\n return null;\n}\n","import { isEmpty } from '@ember/utils';\nimport { get } from '@ember/object';\nimport { isStandardAWS } from 'weldnote/utils/standards';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport { isFCAW } from 'weldnote/utils/rules/welding-process';\nimport { FillerMaterialInstance } from './wps-from-pqr';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport PQRModel from 'weldnote/models/pqr';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport PqrStandard from 'weldnote/models/pqr-standard';\n\nconst { PQR } = PQRRules;\n\nexport function validateFillerMaterialAWS(weldingProcessProperty: string) {\n return {\n if(_key: string, _value: any, model: PQRModel) {\n return (\n isFCAW(get(model, weldingProcessProperty) as WeldingProcess) &&\n isStandardAWS(get(model, PQR.STANDARD) as PqrStandard) &&\n model.hasImpactRequirements()\n );\n },\n\n validation(_key: string, value: any) {\n return !isEmpty(value) && !isEmpty(get(value, 'id'));\n },\n\n message(_key: string, _value: string, model: PQRModel) {\n return model.translate('model-validations.pqr.filler-material-aws');\n },\n };\n}\n\nexport function isSpecification51or55(pqrValidationRange: FillerMaterialInstance) {\n let spec = pqrValidationRange.specificationLabel;\n return spec === 'A5.1' || spec === 'A5.5';\n}\n\nexport function isSpecification51or55withFillerMaterial(material: FillerMaterial) {\n let spec = get(material, 'specification.specification');\n return spec === 'A5.1' || spec === 'A5.5';\n}\n\nexport function isSpecification517or523(pqrValidationRange: FillerMaterialInstance) {\n let spec = pqrValidationRange.specificationLabel;\n return spec === 'A5.17' || spec === 'A5.23';\n}\n\nexport function isSpecification517or523withFiller(material: FillerMaterial) {\n let spec = get(material, 'specification.specification');\n return spec === 'A5.17' || spec === 'A5.23';\n}\n\nexport function isSpecification518or528or536(pqrValidationRange: FillerMaterialInstance) {\n let spec = pqrValidationRange.specificationLabel;\n return spec === 'A5.18' || spec === 'A5.28' || spec === 'A5.36';\n}\n\nexport function isSpecification518or528or536withFiller(material: FillerMaterial) {\n let spec = get(material, 'specification.specification') as string;\n return spec === 'A5.18' || spec === 'A5.28' || spec === 'A5.36';\n}\n\nexport function isSpecification520or529or536(pqrValidationRange: FillerMaterialInstance) {\n let spec = pqrValidationRange.specificationLabel;\n return spec === 'A5.20' || spec === 'A5.29' || spec === 'A5.36';\n}\n\nexport function isSpecification520or529or536withFiller(material: FillerMaterial) {\n let spec = get(material, 'specification.specification') as string;\n return spec === 'A5.20' || spec === 'A5.29' || spec === 'A5.36';\n}\n\nexport function isSameSpecification(pqrValidationRange: FillerMaterialInstance, wpsMaterial: FillerMaterial) {\n let spec = get(pqrValidationRange, 'specificationLabel') as string;\n let spec2 = get(wpsMaterial, 'specification.specification') as string;\n return spec === spec2;\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\n\nexport function thicknessValidation(rootProperty, fillProperty, capProperty, totalProperty) {\n return {\n validation(key, value, model) {\n if (!isEmpty(value)) {\n let thicknessRoot = get(model, rootProperty);\n let thicknessFill = get(model, fillProperty);\n let thicknessCap = get(model, capProperty);\n let total = parseFloat(get(model, totalProperty));\n\n let sum = 0;\n if (!isEmpty(thicknessRoot)) {\n sum += parseFloat(thicknessRoot);\n }\n if (!isEmpty(thicknessFill)) {\n sum += parseFloat(thicknessFill);\n }\n if (!isEmpty(thicknessCap)) {\n sum += parseFloat(thicknessCap);\n }\n\n if (!isNaN(sum) && !isNaN(total)) {\n if (sum <= parseFloat(total) * 1.1) {\n return true;\n }\n return false;\n }\n }\n return true;\n },\n\n message(key, value, model) {\n let thicknessRoot = get(model, rootProperty);\n let thicknessFill = get(model, fillProperty);\n let thicknessCap = get(model, capProperty);\n let total = get(model, totalProperty);\n\n let sum = 0;\n if (!isEmpty(thicknessRoot)) {\n sum += parseFloat(thicknessRoot);\n }\n if (!isEmpty(thicknessFill)) {\n sum += parseFloat(thicknessFill);\n }\n if (!isEmpty(thicknessCap)) {\n sum += parseFloat(thicknessCap);\n }\n let unit = get(model, 'distanceUnit');\n if (isEmpty(unit)) {\n unit = get(model, 'userSession.distanceUnit');\n }\n return model.translate('model-validations.thickness-over-limit', {\n sum,\n total,\n unit,\n });\n },\n };\n}\n","import { get } from '@ember/object';\nimport Rules from 'weldnote/utils/welding-procedure-specification-rules';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = Rules;\n\n/**\n * Validates a WPS *and* each of its welding passes, returning whether everything is valid.\n *\n * The WPS declares `weldingParameters: { relations: ['hasMany'] }`, but\n * `ember-model-validator` cascades that through `weldingParameters.content`, which Ember\n * Data 4 no longer exposes on a ManyArray — the loop is silently skipped, so the passes are\n * never validated. Their `errors` collection then stays empty, which is why the pass fields\n * never get the red `has-error` state and `save-invalid-modal` never lists them.\n *\n * Every pass is validated rather than short-circuiting on the first failure, so each one\n * populates its own errors and every offending field is highlighted.\n */\nexport default function validateWpsAndPasses(wps) {\n let isWpsValid = wps.validate();\n let arePassesValid = true;\n let passes = get(wps, WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n if (passes) {\n passes.forEach((pass) => {\n if (!pass.validate()) {\n arePassesValid = false;\n }\n });\n }\n return isWpsValid && arePassesValid;\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { assert } from '@ember/debug';\nimport Constants from 'weldnote/utils/constants';\nimport WeldingDetail from 'weldnote/models/welding-detail';\n\nconst { WELDING_DETAILS } = Constants;\n\nfunction findIn(value: WeldingDetail[], shortDesignation: string): WeldingDetail | null {\n assert(`Must pass a valid attribute - ${shortDesignation}`, !isEmpty(shortDesignation));\n let result: WeldingDetail | undefined = value.findBy('shortDesignation', shortDesignation);\n if (result) {\n return result;\n } else {\n return null;\n }\n}\n\nfunction findInAndGetDesignation(value: WeldingDetail[], shortDesignation: string) {\n let resultDetail = value.findBy('shortDesignation', shortDesignation);\n if (resultDetail) {\n return resultDetail.get('completeDesignation');\n }\n return '';\n}\n\nfunction getCompleteDesignation(value: WeldingDetail | null): string {\n if (value) {\n return `${get(value, 'completeDesignation')}; `;\n }\n return '';\n}\n\n// Custom Validation for WeldingDetails in test piece for Ember-model-validator\nlet weldingDetailValidation = {\n if(_key: string, selectedDetails: WeldingDetail[]): boolean {\n return selectedDetails.length > 1;\n },\n\n validation(_key: string, selectedDetails: WeldingDetail[]) {\n if (\n findIn(selectedDetails, WELDING_DETAILS.SINGLE_LAYER) &&\n findIn(selectedDetails, WELDING_DETAILS.MULTI_LAYER)\n ) {\n return false;\n }\n let ssNb = !isEmpty(findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_NO_BACKING));\n let ssMb = !isEmpty(findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING));\n let ssGb = !isEmpty(findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING));\n let ssFb = !isEmpty(findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING));\n let bs = !isEmpty(findIn(selectedDetails, WELDING_DETAILS.BOTH_SIDES));\n let count = 0;\n let total = [ssNb, ssMb, ssGb, ssFb, bs];\n total.forEach((detail) => {\n if (detail) {\n count++;\n }\n });\n if (count > 1) {\n return false;\n }\n return true;\n },\n\n message(_key: string, selectedDetails: WeldingDetail[], model: any) {\n if (\n findIn(selectedDetails, WELDING_DETAILS.SINGLE_LAYER) &&\n findIn(selectedDetails, WELDING_DETAILS.MULTI_LAYER)\n ) {\n return model.translate('model-validations.welding-details.layer', {\n layer1: findInAndGetDesignation(selectedDetails, WELDING_DETAILS.SINGLE_LAYER),\n layer2: findInAndGetDesignation(selectedDetails, WELDING_DETAILS.MULTI_LAYER),\n });\n }\n let ssNb = findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_NO_BACKING);\n let ssMb = findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_MATERIAL_BACKING);\n let ssGb = findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_GAS_BACKING);\n let ssFb = findIn(selectedDetails, WELDING_DETAILS.SINGLE_SIDE_FLUX_BACKING);\n let bs = findIn(selectedDetails, WELDING_DETAILS.BOTH_SIDES);\n let details = '';\n if (!isEmpty(ssNb)) {\n details += getCompleteDesignation(ssNb);\n }\n if (!isEmpty(ssMb)) {\n details += getCompleteDesignation(ssMb);\n }\n if (!isEmpty(ssGb)) {\n details += getCompleteDesignation(ssGb);\n }\n if (!isEmpty(ssFb)) {\n details += getCompleteDesignation(ssFb);\n }\n if (!isEmpty(bs)) {\n details += getCompleteDesignation(bs);\n }\n return model.translate('model-validations.welding-details.backing', {\n details,\n });\n },\n};\n\nexport { weldingDetailValidation };\n","import { get, getProperties } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport Rules from 'weldnote/utils/welding-procedure-specification-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { rangeSerialization } from 'weldnote/utils/range-utils';\n\nimport { serializeCollection } from 'weldnote/utils/collection-utils';\n\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\n\nimport { isFCAW, isSMAW, isSAW, isGMAW, isGTAW, isESW } from 'weldnote/utils/rules/welding-process';\n\nimport {\n isSpecification51or55,\n isSpecification51or55withFillerMaterial,\n isSpecification517or523,\n isSpecification517or523withFiller,\n isSpecification518or528or536,\n isSpecification518or528or536withFiller,\n isSpecification520or529or536,\n isSpecification520or529or536withFiller,\n isSameSpecification,\n} from 'weldnote/utils/validation/filler-material';\n\nimport {\n optionsOnlyIncludePositions,\n serializePositions,\n} from 'weldnote/utils/rules/welding-position';\n\nimport {\n fromMilimeterSecondToMilimeterMinute,\n fromMilimeterSecondToMeterMinute,\n} from 'weldnote/utils/unit-system/speed';\n\nimport { isFilletWeld, isOverlayWeld } from 'weldnote/utils/rules/weld-type';\nimport WPSModel from 'weldnote/models/welding-procedure-specification';\nimport IntlService from 'ember-intl/services/intl';\nimport WpsValidationType from 'weldnote/src-weldnote/types/wps/wps-validation';\nimport BaseModel from 'weldnote/models/base-model';\nimport WpsWeldingParameter from 'weldnote/models/wps-welding-parameter';\nimport ArcTransferMode from 'weldnote/models/arc-transfer-mode';\nimport WeldingProcess from 'weldnote/models/welding-process';\nimport { NumericalRange } from 'weldnote/src-weldnote/wopq/approval-ranges/wopq-range-interface';\nimport WeldingPosition from 'weldnote/models/welding-position';\nimport FillerMaterial from 'weldnote/models/filler-material';\nimport DS from 'ember-data';\n\nconst { WELDING_PROCEDURE_SPECIFICATION } = Rules;\n\nconst { UNIT_SYSTEM, PRODUCT_TYPE, WELDING_POSITIONS, WELDING_LAYER_OPTIONS, SHIELDING_OPTIONS } =\n Constants;\n\nexport interface IdLabelPair {\n label: string;\n value: string;\n}\n\nexport interface NumericalValidationRange {\n min: string;\n max: string;\n}\n\nexport interface FillerMaterialInstance {\n label: string;\n value: string;\n specificationLabel: string;\n}\n\nexport interface BelongsToApprovalRange { \n value: string;\n serialization: string;\n}\n\nexport type TestPresence = \"CAN_HAVE\" | \"CANNOT_HAVE\" | \"MUST_HAVE\" | \"UNKNOWN\";\n\nexport interface WpsParameterValidationRange {\n travelSpeed: NumericalValidationRange; \n wireFeedSpeed: NumericalValidationRange;\n current: NumericalValidationRange;\n voltage: NumericalValidationRange;\n heatInput: NumericalValidationRange;\n typeCurrent: IdLabelPair;\n arcTransferMode: IdLabelPair;\n weldingProcess: IdLabelPair;\n layer: string;\n}\n\nexport interface ValidationRanges {\n preheat: NumericalValidationRange;\n interpass: NumericalValidationRange;\n postHeatTemperature: NumericalValidationRange;\n postHeatTime: NumericalValidationRange;\n postWeldHeatTreamentTemperature: NumericalValidationRange;\n postWeldHeatTreamentTemperatureForCopy: NumericalValidationRange;\n postWeldHeatTreamentTime: NumericalValidationRange;\n baseMaterial1Group: IdLabelPair[];\n baseMaterial1Instance: IdLabelPair;\n baseMaterial2Group: IdLabelPair[];\n baseMaterial2Instance: IdLabelPair;\n thicknessTotal: NumericalValidationRange;\n throatThickness: NumericalValidationRange;\n baseMaterial1Thickness: NumericalValidationRange;\n baseMaterial2Thickness: NumericalValidationRange;\n thicknessRoot: NumericalValidationRange;\n thicknessFill: NumericalValidationRange;\n thicknessCap: NumericalValidationRange;\n processMecanizationRoot: IdLabelPair[];\n processMecanizationFill: IdLabelPair[];\n processMecanizationCap: IdLabelPair[];\n transferModeRoot: IdLabelPair[];\n transferModeFill: IdLabelPair[];\n transferModeCap: IdLabelPair[];\n weldingProcessRoot: IdLabelPair[];\n weldingProcessFill: IdLabelPair[];\n weldingProcessCap: IdLabelPair[];\n typeCurrentRoot: IdLabelPair[];\n typeCurrentFill: IdLabelPair[];\n typeCurrentCap: IdLabelPair[];\n weldingPositionsRoot: IdLabelPair[];\n weldingPositionsFill: IdLabelPair[];\n weldingPositionsCap: IdLabelPair[];\n weldingDetails: IdLabelPair[];\n weldTypes: IdLabelPair[];\n /** The validation range for the product type */\n productType: string[];\n /** The specific product type in the test piece / source */\n productTypeSource: string;\n diameter: NumericalValidationRange;\n standard: BelongsToApprovalRange;\n fillerMaterialRoot: FillerMaterialInstance;\n fillerMaterialFill: FillerMaterialInstance;\n fillerMaterialCap: FillerMaterialInstance;\n fillerMaterialRootGroup: FillerMaterialInstance;\n fillerMaterialFillGroup: FillerMaterialInstance;\n fillerMaterialCapGroup: FillerMaterialInstance;\n fillerMaterialRootCommercialDesignation: IdLabelPair[];\n fillerMaterialFillCommercialDesignation: IdLabelPair[];\n fillerMaterialCapCommercialDesignation: IdLabelPair[];\n shieldingRoot: string;\n shieldingRootGas: IdLabelPair[];\n shieldingRootFlux: IdLabelPair;\n shieldingRootFluxCommercialDesignation: IdLabelPair[];\n shieldingFill: string;\n shieldingFillGas: IdLabelPair[];\n shieldingFillFlux: IdLabelPair;\n shieldingFillFluxCommercialDesignation: IdLabelPair[];\n shieldingCap: string;\n shieldingCapGas: IdLabelPair[];\n shieldingCapFlux: IdLabelPair;\n shieldingCapFluxCommercialDesignation: IdLabelPair[];\n backing: string;\n backingGas: IdLabelPair[];\n backingFlux: IdLabelPair;\n backingFluxCommercialDesignation: IdLabelPair[];\n numberOfElectrodesRoot: string;\n numberOfElectrodesFill: string;\n numberOfElectrodesCap: string;\n gasNozzleDiameterRoot: string;\n gasNozzleDiameterFill: string;\n gasNozzleDiameterCap: string;\n weldingPositionRootDirection: string;\n weldingPositionFillDirection: string;\n weldingPositionCapDirection: string;\n branchAngle: NumericalValidationRange;\n torchAngle: NumericalValidationRange;\n fillerMaterialElectrodeFormRoot: string;\n fillerMaterialElectrodeFormFill: string;\n fillerMaterialElectrodeFormCap: string;\n fillerMaterialGuideRoot: string;\n fillerMaterialGuideFill: string;\n fillerMaterialGuideCap: string;\n pWHTTimeMinimumPresence: TestPresence;\n pWHTTimeMaximumPresence: TestPresence;\n pWHTTemperatureMinimumPresence: TestPresence;\n pWHTTemperatureMaximumPresence: TestPresence;\n overlayNumberOfLayers: string;\n heatInputRoot: NumericalValidationRange;\n heatInputFill: NumericalValidationRange;\n heatInputCap: NumericalValidationRange;\n parameters: Record;\n impactTestTemperature: string;\n}\n\n\nexport default class WpsValidation implements WpsValidationType {\n private wps: WPSModel;\n\n private intl: IntlService;\n\n private validations: ValidationRanges;\n\n private units: any;\n\n constructor(validations: ValidationRanges, wps: WPSModel, intl: IntlService, units: any) {\n this.validations = validations;\n this.wps = wps;\n this.intl = intl;\n if (!isEmpty(units)) {\n this.units = units;\n } else {\n this.units = getProperties(\n wps,\n 'temperatureUnit',\n 'distanceUnit',\n 'flowUnit',\n 'heatDistanceUnit',\n 'travelSpeedUnit',\n 'wireSpeedUnit',\n 'forceUnit',\n 'areaUnit',\n 'pressureUnit',\n 'unitSystem'\n );\n }\n }\n\n /**\n * Helper method to convert Ember Data SyncHasMany relationships to arrays.\n * This makes working with types much easier and avoids the complex Ember Data type issues.\n */\n private _toArray(relationship: DS.SyncHasMany): T[] {\n return relationship.toArray();\n }\n\n // Thickness\n get isThicknessTotalMinimumValid() {\n let isWPSFilletWeld = get(this.validations, 'meta.isFilletWeld');\n let isPqrButtWeld = get(this.validations, 'meta.isSomeTypeOfButtWeld');\n if (isWPSFilletWeld && isPqrButtWeld) {\n let value = get(this.wps, 'thicknessMinimum');\n return this._rangeValidation('throatThickness', value);\n } else {\n let value = get(this.wps, 'thicknessMinimum');\n return this._rangeValidation('thicknessTotal', value);\n }\n }\n\n get thicknessTotalMinimumInvalidMessage() {\n return this._thicknessTotalInvalidMessage('thicknessTotal', 'thicknessMinimum');\n }\n\n get isThicknessTotalMaximumValid() {\n let isWPSFilletWeld = get(this.validations, 'meta.isFilletWeld');\n let isPqrButtWeld = get(this.validations, 'meta.isSomeTypeOfButtWeld');\n if (isWPSFilletWeld && isPqrButtWeld) {\n let value = get(this.wps, 'thicknessMaximum');\n return this._rangeValidation('throatThickness', value);\n } else {\n let value = get(this.wps, 'thicknessMaximum');\n return this._rangeValidation('thicknessTotal', value);\n }\n }\n\n get thicknessTotalMaximumInvalidMessage() {\n return this._thicknessTotalInvalidMessage('thicknessTotal', 'thicknessMaximum');\n }\n\n get isThicknessRootMinimumValid() {\n let value = get(this.wps, 'thicknessRootMinimum');\n return this._rangeValidation('thicknessRoot', value);\n }\n\n get thicknessRootMinimumInvalidMessage() {\n let value = get(this.wps, 'thicknessRootMinimum');\n return this._rangeMessageValidator(\n get(this.validations, 'thicknessRoot'),\n value,\n this.units.distanceUnit\n );\n }\n\n get isThicknessRootMaximumValid() {\n let value = get(this.wps, 'thicknessRootMaximum');\n return this._rangeValidation('thicknessRoot', value);\n }\n\n get thicknessRootMaximumInvalidMessage() {\n let value = get(this.wps, 'thicknessRootMaximum');\n return this._rangeMessageValidator(\n get(this.validations, 'thicknessRoot'),\n value,\n this.units.distanceUnit\n );\n }\n\n get isThicknessFillMinimumValid() {\n let value = get(this.wps, 'thicknessFillMinimum');\n return this._rangeValidation('thicknessFill', value);\n }\n\n get thicknessFillMinimumInvalidMessage() {\n let value = get(this.wps, 'thicknessFillMinimum');\n return this._rangeMessageValidator(\n get(this.validations, 'thicknessFill'),\n value,\n this.units.distanceUnit\n );\n }\n\n get isThicknessFillMaximumValid() {\n let value = get(this.wps, 'thicknessFillMaximum');\n return this._rangeValidation('thicknessFill', value);\n }\n\n get thicknessFillMaximumInvalidMessage() {\n let value = get(this.wps, 'thicknessFillMaximum');\n return this._rangeMessageValidator(\n get(this.validations, 'thicknessFill'),\n value,\n this.units.distanceUnit\n );\n }\n\n get isThicknessCapMinimumValid() {\n let value = get(this.wps, 'thicknessCapMinimum');\n return this._rangeValidation('thicknessCap', value);\n }\n\n get thicknessCapMinimumInvalidMessage() {\n let value = get(this.wps, 'thicknessCapMinimum');\n return this._rangeMessageValidator(\n get(this.validations, 'thicknessCap'),\n value,\n this.units.distanceUnit\n );\n }\n\n get isThicknessCapMaximumValid() {\n let value = get(this.wps, 'thicknessCapMaximum');\n return this._rangeValidation('thicknessCap', value);\n }\n\n get thicknessCapMaximumInvalidMessage() {\n let value = get(this.wps, 'thicknessCapMaximum');\n return this._rangeMessageValidator(\n get(this.validations, 'thicknessCap'),\n value,\n this.units.distanceUnit\n );\n }\n\n // Diameter\n isDiameterValid(value: string) {\n return this._rangeValidation('diameter', value);\n }\n\n isDiameterValidForPipe(value: string) {\n if (!this._shouldValidateDiameter(value)) {\n return true;\n }\n if (this._isPQRPlateAndWPSPipe()) {\n let diameterMin = parseFloat(`${this.wps.diameterMinimum}`);\n if (this._isISO()) {\n if (!isNaN(diameterMin)) {\n if (diameterMin >= 500) {\n return true;\n } else {\n if (diameterMin >= 150) {\n return true;\n } else {\n return false;\n }\n }\n }\n } else if (this._isAWS()) {\n if (!isNaN(diameterMin)) {\n return diameterMin >= this.maxDistanceForAWSPipe;\n }\n }\n }\n return true;\n }\n\n get maxDistanceForAWSPipe() {\n let unitSystem = get(this.units, 'unitSystem');\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n return 600;\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return 24;\n }\n return 600;\n }\n\n diameterInvalidMessage(value: string) {\n return this._rangeMessageValidator(\n get(this.validations, 'diameter'),\n value,\n this.units.distanceUnit\n );\n }\n\n get diameterForPipeInvalidMessage() {\n if (this._isISO()) {\n return this.intl.t('model-validations.wps.diameter-product-type');\n } else if (this._isAWS()) {\n return this.intl\n .t('model-validations.wps.diameter-product-type-aws', {\n unit: get(this.units, 'distanceUnit'),\n max: this.maxDistanceForAWSPipe,\n })\n .toString();\n }\n return '';\n }\n\n // Number of Electrodes\n get isNumberElectrodesRootValid() {\n if (!isEmpty(get(this.validations, 'numberOfElectrodesRoot'))) {\n return this._singleValueValidation(\n 'numberOfElectrodesRoot',\n get(this.wps, 'numberOfElectrodes')\n );\n }\n return true;\n }\n\n get numberOfElectrodesRootInvalidMessage() {\n return this._singleValueMessage(get(this.validations, 'numberOfElectrodesRoot'));\n }\n\n get isNumberElectrodesFillValid() {\n if (!isEmpty(get(this.validations, 'numberOfElectrodesFill'))) {\n return this._singleValueValidation('numberOfElectrodesFill', this.wps.numberOfElectrodes);\n }\n return true;\n }\n\n get numberOfElectrodesFillInvalidMessage() {\n return this._singleValueMessage(get(this.validations, 'numberOfElectrodesFill'));\n }\n\n get isNumberElectrodesCapValid() {\n if (!isEmpty(get(this.validations, 'numberOfElectrodesCap'))) {\n return this._singleValueValidation('numberOfElectrodesCap', this.wps.numberOfElectrodesFill);\n }\n return true;\n }\n\n get numberOfElectrodesCapInvalidMessage() {\n return this._singleValueMessage(get(this.validations, 'numberOfElectrodesCap'));\n }\n\n // Gas Nozzle Diameter\n get isGasNozzleDiameterRootValid() {\n if (!isEmpty(get(this.validations, 'gasNozzleDiameterRoot'))) {\n return this._singleValueValidation('gasNozzleDiameterRoot', this.wps.gasNozzleDiameterRoot);\n }\n return true;\n }\n\n get gasNozzleDiameterRootInvalidMessage() {\n return this._singleValueMessage(get(this.validations, 'gasNozzleDiameterRoot'));\n }\n\n get gasNozzleDiameterFillInvalidMessage() {\n return this._singleValueMessage(get(this.validations, 'gasNozzleDiameterFill'));\n }\n\n get isGasNozzleDiameterFillValid() {\n if (!isEmpty(get(this.validations, 'gasNozzleDiameterFill'))) {\n return this._singleValueValidation('gasNozzleDiameterFill', this.wps.gasNozzleDiameterFill);\n }\n return true;\n }\n\n get gasNozzleDiameterCapInvalidMessage() {\n return this._singleValueMessage(get(this.validations, 'gasNozzleDiameterCap'));\n }\n\n get isGasNozzleDiameterCapValid() {\n if (!isEmpty(get(this.validations, 'gasNozzleDiameterCap'))) {\n return this._singleValueValidation('gasNozzleDiameterCap', this.wps.gasNozzleDiameterCap);\n }\n return true;\n }\n\n // PWHT Time\n isPwhtTimeValid(value: any) {\n return this._rangeValidation('pwhtTime', value);\n }\n\n pwthTimeInvalidMessage(value: any) {\n return this._pwhtRangeMessage(get(this.validations, 'pwhtTime') as NumericalValidationRange, value, 'h');\n }\n\n // PWHT Temperature\n isPwhtTemperatureValid(value: any) {\n return this._rangeValidation('pwhtTemperature', value);\n }\n\n pwthTemperatureInvalidMessage(value: any) {\n return this._pwhtRangeMessage(\n get(this.validations, 'pwhtTemperature') as NumericalValidationRange,\n value,\n this.units.temperatureUnit\n );\n }\n\n isPWHTMinimumPresenceValid(value: any) {\n return this._presenceMinimumValidation('meta.pwhtTemperatureMinimumPresence', value);\n }\n\n pWHTMinimumPresenceInvalidMessage(value: any) {\n return this._presenceMinimumValidationMessage(\n 'meta.pwhtTemperatureMinimumPresence',\n value,\n 'pwhtTemperature',\n this.units.temperatureUnit\n );\n }\n\n isPWHTMaximumPresenceValid(value: any) {\n return this._presenceMaximumValidation('meta.pwhtTemperatureMaximumPresence', value);\n }\n\n pWHTMaximumPresenceInvalidMessage(value: any) {\n return this._presenceMaximumValidationMessage(\n 'meta.pwhtTemperatureMaximumPresence',\n value,\n 'pwhtTemperature',\n this.units.temperatureUnit\n );\n }\n\n isPWHTTimeMinimumPresenceValid(value: any) {\n return this._presenceMinimumValidation('meta.pwhtTimeMinimumPresence', value);\n }\n\n pWHTTimeMinimumPresenceInvalidMessage(value: any) {\n return this._presenceMinimumValidationMessage(\n 'meta.pwhtTimeMinimumPresence',\n value,\n 'pwhtTime',\n 'h'\n );\n }\n\n isPWHTTimeMaximumPresenceValid(value: any) {\n return this._presenceMaximumValidation('meta.pwhtTimeMaximumPresence', value);\n }\n\n pWHTTimeMaximumPresenceInvalidMessage(value: any) {\n return this._presenceMaximumValidationMessage(\n 'meta.pwhtTimeMaximumPresence',\n value,\n 'pwhtTime',\n 'h'\n );\n }\n\n isInterpassTemperatureMinimumPresenceValid(value: any) {\n let correctValue = get(this.validations, 'meta.interpassMinimumPresence');\n if (correctValue === 'MUST_HAVE') {\n return !isEmpty(value);\n }\n return true;\n }\n\n isInterpassTemperatureMaximumPresenceValid(value: any) {\n let correctValue = get(this.validations, 'meta.interpassMaximumPresence');\n if (correctValue === 'MUST_HAVE') {\n return !isEmpty(value);\n }\n return true;\n }\n\n interpassTemperatureMinimumPresenceInvalidMessage(value: any): string {\n let correctValue = get(this.validations, 'meta.interpassMinimumPresence');\n if (correctValue === 'MUST_HAVE' && isEmpty(value)) {\n let approvalRange = this._getApprovalRange('interpass');\n return this.intl\n .t('model-validations.wps.pqr-with-value-but-wps-empty-pwht', {\n approvalRange,\n unit: this.units.temperatureUnit,\n })\n .toString();\n }\n return '';\n }\n\n interpassTemperatureMaximumPresenceInvalidMessage(value: any): string {\n let correctValue = get(this.validations, 'meta.interpassMaximumPresence');\n if (correctValue === 'MUST_HAVE' && isEmpty(value)) {\n let approvalRange = this._getApprovalRange('interpass');\n return this.intl\n .t('model-validations.wps.pqr-with-value-but-wps-empty-pwht', {\n approvalRange,\n unit: this.units.temperatureUnit,\n })\n .toString();\n }\n return '';\n }\n\n // Branch Angle\n isBranchAngleValid(value: any) {\n if (!isEmpty(get(this.validations, 'branchAngle.max'))) {\n return this._rangeValidation('branchAngle', value);\n }\n return true;\n }\n\n branchAngleInvalidMessage(value: any) {\n return this._rangeMessageValidator(get(this.validations, 'branchAngle'), value, 'º');\n }\n\n // PreHeat\n isPreheatTemperatureValid(value: any) {\n return this._rangeValidation('preheat', value);\n }\n\n preheatTemperatureInvalidMessage(value: any) {\n return this._rangeMessageValidator(\n get(this.validations, 'preheat'),\n value,\n this.units.temperatureUnit\n );\n }\n\n isPreheatMinimumPresenceValid(value: any) {\n return this._presenceMinimumValidation('meta.preHeatMinimumPresence', value);\n }\n\n isPreheatMaximumPresenceValid(value: any) {\n return this._presenceMaximumValidation('meta.preHeatMaximumPresence', value);\n }\n\n preheatMinimumPresenceInvalidMessage(value: any) {\n return this._presenceMinimumValidationMessage(\n 'meta.preHeatMinimumPresence',\n value,\n 'preheat',\n this.units.temperatureUnit\n );\n }\n\n preheatMaximumPresenceInvalidMessage(value: any) {\n return this._presenceMinimumValidationMessage(\n 'meta.preHeatMaximumPresence',\n value,\n 'preheat',\n this.units.temperatureUnit\n );\n }\n\n // Interpass\n isInterpassTemperatureValid(value: any) {\n return this._rangeValidation('interpass', value);\n }\n\n interpassTemperatureInvalidMessage(value: any) {\n return this._rangeMessageValidator(\n get(this.validations, 'interpass'),\n value,\n this.units.temperatureUnit\n );\n }\n\n // Post Heat Temperature\n isPostHeatTemperatureValid(value: any) {\n return this._rangeValidation('postheat', value);\n }\n\n postHeatTemperatureInvalidMessage(value: any) {\n return this._rangeMessageValidator(\n get(this.validations, 'postheat') as NumericalValidationRange,\n value,\n this.units.temperatureUnit\n );\n }\n\n isPostHeatTimeValid(value: any) {\n return this._rangeValidation('postheatTime', value);\n }\n\n postHeatTimeInvalidMessage(value: any) {\n return this._rangeMessageValidator(get(this.validations, 'postheatTime') as NumericalValidationRange, value, 'h');\n }\n\n isPostHeatMinimumPresenceValid(value: any) {\n return this._presenceMinimumValidation('meta.postHeatMinimumPresence', value);\n }\n\n postHeatMinimumPresenceInvalidMessage(value: any) {\n return this._presenceMinimumValidationMessage(\n 'meta.postHeatMinimumPresence',\n value,\n 'postheat',\n this.units.temperatureUnit\n );\n }\n\n isPostHeatMaximumPresenceValid(value: any) {\n return this._presenceMaximumValidation('meta.postHeatMaximumPresence', value);\n }\n\n postHeatMaximumPresenceInvalidMessage(value: any) {\n return this._presenceMaximumValidationMessage(\n 'meta.postHeatMaximumPresence',\n value,\n 'postheat',\n this.units.temperatureUnit\n );\n }\n\n isPostHeatTimeMinimumPresenceValid(value: any) {\n return this._presenceMinimumValidation('meta.postHeatTimeMinimumPresence', value);\n }\n\n postHeatTimeMinimumPresenceInvalidMessage(value: any) {\n return this._presenceMinimumValidationMessage(\n 'meta.postHeatTimeMinimumPresence',\n value,\n 'postheatTime',\n 'h'\n );\n }\n\n isPostHeatTimeMaximumPresenceValid(value: any) {\n return this._presenceMaximumValidation('meta.postHeatTimeMaximumPresence', value);\n }\n\n postHeatTimeMaximumPresenceInvalidMessage(value: any) {\n return this._presenceMaximumValidationMessage(\n 'meta.postHeatTimeMaximumPresence',\n value,\n 'postheatTime',\n 'h'\n );\n }\n\n // Welding Processes\n get isWeldingProcessRootValid() {\n return this._isValidInstance('weldingProcessRoot', 'weldingProcessRoot');\n }\n\n get weldingProcessRootInvalidMessage() {\n return this._invalidMessage('weldingProcessRoot', 'shortDesignation', 'weldingProcessRoot');\n }\n\n get isWeldingProcessFillValid() {\n return this._isValidInstance('weldingProcessFill', 'weldingProcessFill');\n }\n\n get weldingProcessFillInvalidMessage() {\n return this._invalidMessage('weldingProcessFill', 'shortDesignation', 'weldingProcessFill');\n }\n\n get isWeldingProcessCapValid() {\n return this._isValidInstance('weldingProcessCap', 'weldingProcessCap');\n }\n\n get weldingProcessCapInvalidMessage() {\n return this._invalidMessage('weldingProcessCap', 'shortDesignation', 'weldingProcessCap');\n }\n\n // Process Mecanization\n get isProcessMecanizationRootValid() {\n return this._isValidInstance('processMecanizationRoot', 'processMecanizationRoot');\n }\n\n get processMecanizationRootInvalidMessage() {\n return this._invalidMessage('processMecanizationRoot', 'name', 'processMecanizationRoot');\n }\n\n get isProcessMecanizationFillValid() {\n return this._isValidInstance('processMecanizationFill', 'processMecanizationFill');\n }\n\n get processMecanizationFillInvalidMessage() {\n return this._invalidMessage('processMecanizationFill', 'name', 'processMecanizationFill');\n }\n\n get isProcessMecanizationCapValid() {\n return this._isValidInstance('processMecanizationCap', 'processMecanizationCap');\n }\n\n get processMecanizationCapInvalidMessage() {\n return this._invalidMessage('processMecanizationCap', 'name', 'processMecanizationCap');\n }\n\n // Welding Details\n get isWeldingDetailsValid() {\n let details = get(this.wps, 'weldingDetails');\n let approvalRange = get(this.validations, 'weldingDetails');\n return this._collectionInCollectionById(approvalRange, this._toArray(details));\n }\n\n get weldingDetailsInvalidMessage() {\n let values = get(this.wps, 'weldingDetails');\n let approvalRange = get(this.validations, 'weldingDetails');\n let notQualified = this._notInCollection(approvalRange, this._toArray(values));\n let notQualifiedSerialized = serializeCollection(notQualified, 'completeDesignation', '; ');\n let serialized = this._collectionApprovalRange('weldingDetails');\n let message = this.intl.t('model-validations.wps.pqr-validation', {\n value: notQualifiedSerialized,\n approvalRange: serialized,\n });\n return message.toString();\n }\n\n // Type Current\n get isTypeCurrentRootValid() {\n return this._isValidInstance('typeCurrentRoot', 'typeCurrentRoot');\n }\n\n get typeCurrentRootInvalidMessage() {\n return this._invalidMessage('typeCurrentRoot', 'typeCurrent', 'typeCurrentRoot');\n }\n\n get isTypeCurrentFillValid() {\n return this._isValidInstance('typeCurrentFill', 'typeCurrentFill');\n }\n\n get typeCurrentFillInvalidMessage() {\n return this._invalidMessage('typeCurrentFill', 'typeCurrent', 'typeCurrentFill');\n }\n\n get isTypeCurrentCapValid() {\n return this._isValidInstance('typeCurrentCap', 'typeCurrentCap');\n }\n\n get typeCurrentCapInvalidMessage() {\n return this._invalidMessage('typeCurrentCap', 'typeCurrent', 'typeCurrent');\n }\n\n // Arc Transfer Mode\n get isArcTransferModeRootValid() {\n return this._isValidInstance('arcTransferModeRoot', 'arcTransferModeRoot');\n }\n\n get arcTransferModeRootInvalidMessage() {\n return this._invalidMessage('arcTransferModeRoot', 'transferMode', 'arcTransferModeRoot');\n }\n\n get isArcTransferModeFillValid() {\n return this._isValidInstance('arcTransferModeFill', 'arcTransferModeFill');\n }\n\n get arcTransferModeFillInvalidMessage() {\n return this._invalidMessage('arcTransferModeFill', 'transferMode', 'arcTransferModeFill');\n }\n\n get isArcTransferModeCapValid() {\n return this._isValidInstance('arcTransferModeCap', 'arcTransferModeCap');\n }\n\n get arcTransferModeCapInvalidMessage() {\n return this._invalidMessage('arcTransferModeCap', 'transferMode', 'arcTransferModeCap');\n }\n\n // Weld Type\n get isWeldTypeValid() {\n return this._isValidInstance('weldType', 'weldType');\n }\n\n get weldTypeInvalidMessage() {\n return this._invalidMessage('weldType', 'weldType', 'weldType');\n }\n\n // Base Materials\n get isBaseMaterial1Valid() {\n if (!isEmpty(get(this.validations, 'baseMaterial1Instance.value'))) {\n return this._isSameInstance('baseMaterial1Instance', 'baseMaterial1');\n } else {\n return this._isValidInstance('baseMaterial1', 'baseMaterial1', 'materialGroup.id');\n }\n }\n\n get baseMaterial1InvalidMessage() {\n if (!isEmpty(get(this.validations, 'baseMaterial1Instance.value'))) {\n let baseMaterial1 = get(this.wps, 'baseMaterial1');\n let materialLabel = get(baseMaterial1, 'baseMaterialLabel');\n let serialized = get(this.validations, 'baseMaterial1Instance.label');\n let message = this.intl.t('model-validations.wps.base-material-instance-validation', {\n value: materialLabel,\n approvalRange: serialized,\n });\n return message.toString();\n } else {\n let baseMaterial1 = get(this.wps, 'baseMaterial1');\n let baseMaterialGroup = get(baseMaterial1, 'materialGroup');\n let groupName = get(baseMaterialGroup, 'groupName');\n let serialized = this._collectionApprovalRange('baseMaterial1');\n let message = this.intl.t('model-validations.wps.base-material-validation', {\n value: groupName,\n approvalRange: serialized,\n });\n return message.toString();\n }\n }\n\n get isBaseMaterial2Valid() {\n if (!isEmpty(get(this.validations, 'baseMaterial2Instance.value'))) {\n return this._isSameInstance('baseMaterial2Instance', 'baseMaterial2');\n } else {\n return this._isValidInstance('baseMaterial2', 'baseMaterial2', 'materialGroup.id');\n }\n }\n\n get baseMaterial2InvalidMessage() {\n if (!isEmpty(get(this.validations, 'baseMaterial2Instance.value'))) {\n let baseMaterial2 = get(this.wps, 'baseMaterial2');\n let materialLabel = get(baseMaterial2, 'baseMaterialLabel');\n let serialized = get(this.validations, 'baseMaterial2Instance.label');\n let message = this.intl.t('model-validations.wps.base-material-instance-validation', {\n value: materialLabel,\n approvalRange: serialized,\n });\n return message.toString();\n } else {\n let baseMaterial2 = get(this.wps, 'baseMaterial2');\n let baseMaterial2Group = get(baseMaterial2, 'materialGroup');\n let groupName = get(baseMaterial2Group, 'groupName');\n let serialized = this._collectionApprovalRange('baseMaterial2');\n let message = this.intl.t('model-validations.wps.base-material-validation', {\n value: groupName,\n approvalRange: serialized,\n });\n return message.toString();\n }\n }\n\n isBaseMaterial1ThicknessValid(value: any) {\n // Only validate the thickness if we have a base material\n if (this._instanceHasValue('baseMaterial1')) {\n // Check if the BaseMaterial1 and BaseMaterial2 are valid in the correct order\n if (this._isValidInstance('baseMaterial1', 'baseMaterial1', 'materialGroup.id')) {\n return this._rangeValidation('baseMaterial1Thickness', value);\n }\n return true;\n }\n return true;\n }\n\n isBaseMaterial2ThicknessValid(value: any) {\n if (this._instanceHasValue('baseMaterial2')) {\n // Check if the BaseMaterial2 and BaseMaterial1 are valid in the correct order\n if (this._isValidInstance('baseMaterial2', 'baseMaterial2', 'materialGroup.id')) {\n return this._rangeValidation('baseMaterial2Thickness', value);\n }\n return true;\n }\n return true;\n }\n\n baseMaterial1ThicknessInvalidMessage(value: any) {\n if (this._isValidInstance('baseMaterial1', 'baseMaterial1', 'materialGroup.id')) {\n return this._rangeMessageValidator(\n get(this.validations, 'baseMaterial1Thickness'),\n value,\n this.units.distanceUnit\n );\n }\n return '';\n }\n\n baseMaterial2ThicknessInvalidMessage(value: any) {\n if (this._isValidInstance('baseMaterial2', 'baseMaterial2', 'materialGroup.id')) {\n return this._rangeMessageValidator(\n get(this.validations, 'baseMaterial2Thickness'),\n value,\n this.units.distanceUnit\n );\n }\n return '';\n }\n\n // Welding Positions\n get isWeldingPositionRootDirectionValid() {\n return this._isWeldingPositionDirectionValid(\n 'weldingPositionRootDirection',\n 'weldingPositionRootDirection'\n );\n }\n\n get weldingPositionRootDirectionInvalidMessage() {\n return this._weldingPositionDirectionInvalidMessage('weldingPositionRootDirection');\n }\n\n get isWeldingPositionFillDirectionValid() {\n return this._isWeldingPositionDirectionValid(\n 'weldingPositionFillDirection',\n 'weldingPositionFillDirection'\n );\n }\n\n get weldingPositionFillDirectionInvalidMessage() {\n return this._weldingPositionDirectionInvalidMessage('weldingPositionFillDirection');\n }\n\n get isWeldingPositionCapDirectionValid() {\n return this._isWeldingPositionDirectionValid(\n 'weldingPositionCapDirection',\n 'weldingPositionCapDirection'\n );\n }\n\n get weldingPositionCapDirectionInvalidMessage() {\n return this._weldingPositionDirectionInvalidMessage('weldingPositionCapDirection');\n }\n\n // Shielding\n get isShieldingRootValid() {\n return this._isSameLovValue('shieldingRoot', 'shieldingRoot');\n }\n\n get shieldingRootInvalidMessage() {\n return this._lovInvalidMessage('shieldingRoot', 'shielding');\n }\n\n get isShieldingFillValid() {\n return this._isSameLovValue('shieldingFill', 'shieldingFill');\n }\n\n get shieldingFillInvalidMessage() {\n return this._lovInvalidMessage('shieldingFill', 'shielding');\n }\n\n get isShieldingCapValid() {\n return this._isSameLovValue('shieldingCap', 'shieldingCap');\n }\n\n get shieldingCapInvalidMessage() {\n return this._lovInvalidMessage('shieldingCap', 'shielding');\n }\n\n get isShieldingRootValidForProcess() {\n return this._isShieldingValidForProcess('meta.weldingProcessRoot.label', 'shieldingRoot');\n }\n\n get shieldingRootInvalidMessageForProcess() {\n return this._shieldingInvalidMessageForProcess('meta.weldingProcessRoot.label', 'ROOT');\n }\n\n get isShieldingFillValidForProcess() {\n return this._isShieldingValidForProcess('meta.weldingProcessFill.label', 'shieldingFill');\n }\n\n get shieldingFillInvalidMessageForProcess() {\n return this._shieldingInvalidMessageForProcess('meta.weldingProcessFill.label', 'FILL');\n }\n\n get isShieldingCapValidForProcess() {\n return this._isShieldingValidForProcess('meta.weldingProcessCap.label', 'shieldingCap');\n }\n\n get shieldingCapInvalidMessageForProcess() {\n return this._shieldingInvalidMessageForProcess('meta.weldingProcessCap.label', 'CAP');\n }\n\n // Shielding Gas\n\n get isShieldingRootGasValid() {\n return this._isValidInstance('shieldingRootGas', 'shieldingRootGas');\n }\n\n get shieldingRootGasInvalidMessage() {\n return this._invalidMessage('shieldingRootGas', 'symbol', 'shieldingRootGas');\n }\n\n get isShieldingFillGasValid() {\n return this._isValidInstance('shieldingFillGas', 'shieldingFillGas');\n }\n\n get shieldingFillGasInvalidMessage() {\n return this._invalidMessage('shieldingFillGas', 'symbol', 'shieldingFillGas');\n }\n\n get isShieldingCapGasValid() {\n return this._isValidInstance('shieldingCapGas', 'shieldingCapGas');\n }\n\n get shieldingCapGasInvalidMessage() {\n return this._invalidMessage('shieldingCapGas', 'symbol', 'shieldingCapGas');\n }\n\n // Shielding Flux\n get isShieldingRootFluxValid() {\n return this._isSameInstance('shieldingRootFlux', 'shieldingRootFlux');\n }\n\n get shieldingRootFluxInvalidMessage() {\n return this._isSameInstanceInvalidMessage('shieldingRootFlux');\n }\n\n get isShieldingFillFluxValid() {\n return this._isSameInstance('shieldingFillFlux', 'shieldingFillFlux');\n }\n\n get shieldingFillFluxInvalidMessage() {\n return this._isSameInstanceInvalidMessage('shieldingFillFlux');\n }\n\n get isShieldingCapFluxValid() {\n return this._isSameInstance('shieldingCapFlux', 'shieldingCapFlux');\n }\n\n get shieldingCapFluxInvalidMessage() {\n return this._isSameInstanceInvalidMessage('shieldingCapFlux');\n }\n\n get isShieldingRootFluxCommercialDesignationValid() {\n return this._isValidInstance(\n 'shieldingRootFluxCommercialDesignation',\n 'shieldingRootFluxCommercialDesignation'\n );\n }\n\n get shieldingRootFluxCommercialDesignationInvalidMessage() {\n return this._invalidMessage(\n 'shieldingRootFluxCommercialDesignation',\n 'commercialDesignation',\n 'shieldingRootFluxCommercialDesignation'\n );\n }\n\n get isShieldingFillFluxCommercialDesignationValid() {\n return this._isValidInstance(\n 'shieldingFillFluxCommercialDesignation',\n 'shieldingFillFluxCommercialDesignation'\n );\n }\n\n get shieldingFillFluxCommercialDesignationInvalidMessage() {\n return this._invalidMessage(\n 'shieldingFillFluxCommercialDesignation',\n 'commercialDesignation',\n 'shieldingFillFluxCommercialDesignation'\n );\n }\n\n get isShieldingCapFluxCommercialDesignationValid() {\n return this._isValidInstance(\n 'shieldingCapFluxCommercialDesignation',\n 'shieldingCapFluxCommercialDesignation'\n );\n }\n\n get shieldingCapFluxCommercialDesignationInvalidMessage() {\n return this._invalidMessage(\n 'shieldingCapFluxCommercialDesignation',\n 'commercialDesignation',\n 'shieldingCapFluxCommercialDesignation'\n );\n }\n\n // Backing\n get isBackingValid() {\n return this._isSameLovValue('backing', 'backing');\n }\n\n get backingInvalidMessage() {\n return this._lovInvalidMessage('backing', 'shielding');\n }\n\n get isBackingGasValid() {\n return this._isValidInstance('backingGas', 'backingGas');\n }\n\n get backingGasInvalidMessage() {\n return this._invalidMessage('backingGas', 'symbol', 'backingGas');\n }\n\n get isBackingFluxValid() {\n return this._isSameInstance('backingFlux', 'backingFlux');\n }\n\n get backingFluxInvalidMessage() {\n return this._isSameInstanceInvalidMessage('backingFlux');\n }\n\n get isBackingFluxCommercialDesignationValid() {\n return this._isValidInstance(\n 'backingFluxCommercialDesignation',\n 'backingFluxCommercialDesignation'\n );\n }\n\n get backingFluxCommercialDesignationInvalidMessage() {\n return this._invalidMessage(\n 'backingFluxCommercialDesignation',\n 'commercialDesignation',\n 'backingFluxCommercialDesignation'\n );\n }\n\n // Filler Material\n get isFillerMaterialRootValid() {\n return this._isFillerMaterialValid(\n 'fillerMaterialRoot',\n 'fillerMaterialRoot',\n 'pqrRootFillerMaterialAsmeMatchMaterial'\n );\n }\n\n get fillerMaterialRootInvalidMessage() {\n return this._fillerMaterialInvalidMessage(\n 'fillerMaterialRoot',\n 'fillerMaterialRoot',\n 'pqrRootFillerMaterialAsmeMatchMaterial'\n );\n }\n\n get isFillerMaterialFillValid() {\n return this._isFillerMaterialValid(\n 'fillerMaterialFill',\n 'fillerMaterialFill',\n 'pqrFillFillerMaterialAsmeMatchMaterial'\n );\n }\n\n get fillerMaterialFillInvalidMessage() {\n return this._fillerMaterialInvalidMessage(\n 'fillerMaterialFill',\n 'fillerMaterialFill',\n 'pqrFillFillerMaterialAsmeMatchMaterial'\n );\n }\n\n get isFillerMaterialCapValid() {\n return this._isFillerMaterialValid(\n 'fillerMaterialCap',\n 'fillerMaterialCap',\n 'pqrCapFillerMaterialAsmeMatchMaterial'\n );\n }\n\n get fillerMaterialCapInvalidMessage() {\n return this._fillerMaterialInvalidMessage(\n 'fillerMaterialCap',\n 'fillerMaterialCap',\n 'pqrCapFillerMaterialAsmeMatchMaterial'\n );\n }\n\n get isFillerMaterialRootAWSValid() {\n return this._isFillerMaterialValidAWS(\n 'fillerMaterialRoot',\n 'fillerMaterialRoot',\n 'weldingProcessRoot'\n );\n }\n\n get fillerMaterialRootAWSInvalidMessage() {\n return this._fillerMaterialForAWSInvalidMessage('fillerMaterialRoot', 'weldingProcessRoot');\n }\n\n get isFillerMaterialFillAWSValid() {\n return this._isFillerMaterialValidAWS(\n 'fillerMaterialFill',\n 'fillerMaterialFill',\n 'weldingProcessFill'\n );\n }\n\n get fillerMaterialFillAWSInvalidMessage() {\n return this._fillerMaterialForAWSInvalidMessage('fillerMaterialFill', 'weldingProcessFill');\n }\n\n get isFillerMaterialCapAWSValid() {\n return this._isFillerMaterialValidAWS(\n 'fillerMaterialCap',\n 'fillerMaterialCap',\n 'weldingProcessCap'\n );\n }\n\n get fillerMaterialCapAWSInvalidMessage() {\n return this._fillerMaterialForAWSInvalidMessage('fillerMaterialCap', 'weldingProcessCap');\n }\n\n // Filler Material Commercial Designation\n get isFillerMaterialRootCommercialDesignationValid() {\n return this._isFillerMaterialCommercialDesignationValid(\n 'fillerMaterialRootCommercialDesignation',\n 'fillerMaterialRootCommercialDesignation',\n 'meta.pqrRootFillerMaterialAsmeMatchMaterial',\n 'meta.pqrRootImpactRequirements'\n );\n }\n\n get isFillerMaterialFillCommercialDesignationValid() {\n return this._isFillerMaterialCommercialDesignationValid(\n 'fillerMaterialFillCommercialDesignation',\n 'fillerMaterialFillCommercialDesignation',\n 'meta.pqrFillFillerMaterialAsmeMatchMaterial',\n 'meta.pqrFillImpactRequirements'\n );\n }\n\n get isFillerMaterialCapCommercialDesignationValid() {\n return this._isFillerMaterialCommercialDesignationValid(\n 'fillerMaterialCapCommercialDesignation',\n 'fillerMaterialCapCommercialDesignation',\n 'meta.pqrCapFillerMaterialAsmeMatchMaterial',\n 'meta.pqrCapImpactRequirements'\n );\n }\n\n get fillerMaterialRootCommercialDesignationInvalidMessage() {\n return this._fillerMaterialCommercialDesignationInvalidMessage(\n 'fillerMaterialRootCommercialDesignation',\n 'fillerMaterialRootCommercialDesignation'\n );\n }\n\n get fillerMaterialFillCommercialDesignationInvalidMessage() {\n return this._fillerMaterialCommercialDesignationInvalidMessage(\n 'fillerMaterialFillCommercialDesignation',\n 'fillerMaterialFillCommercialDesignation'\n );\n }\n\n get fillerMaterialCapCommercialDesignationInvalidMessage() {\n return this._fillerMaterialCommercialDesignationInvalidMessage(\n 'fillerMaterialCapCommercialDesignation',\n 'fillerMaterialCapCommercialDesignation'\n );\n }\n\n // Filler Material Diameter\n get isFillerMaterialDiameterRootValid() {\n return this._isFillerMaterialDiameterValid(\n 'fillerMaterialRootDiameter',\n 'fillerMaterialRootDiameters',\n 'weldingProcessRoot'\n );\n }\n\n get fillerMaterialDiameterRootInvalidMessage() {\n return this._fillerMaterialDiameterInvalidMessage(\n 'fillerMaterialRootDiameter',\n 'fillerMaterialRootDiameters',\n 'weldingProcessRoot'\n );\n }\n\n get isFillerMaterialDiameterFillValid() {\n return this._isFillerMaterialDiameterValid(\n 'fillerMaterialFillDiameter',\n 'fillerMaterialFillDiameters',\n 'weldingProcessFill'\n );\n }\n\n get fillerMaterialDiameterFillInvalidMessage() {\n return this._fillerMaterialDiameterInvalidMessage(\n 'fillerMaterialFillDiameter',\n 'fillerMaterialFillDiameters',\n 'weldingProcessFill'\n );\n }\n\n get isFillerMaterialDiameterCapValid() {\n return this._isFillerMaterialDiameterValid(\n 'fillerMaterialCapDiameter',\n 'fillerMaterialCapDiameters',\n 'weldingProcessCap'\n );\n }\n\n get fillerMaterialDiameterCapInvalidMessage() {\n return this._fillerMaterialDiameterInvalidMessage(\n 'fillerMaterialCapDiameter',\n 'fillerMaterialCapDiameters',\n 'weldingProcessCap'\n );\n }\n\n // Overlay Type\n get isOverlayTypeValid() {\n if (!isEmpty(get(this.validations, 'overlayType'))) {\n return this._singleValueValidation('overlayType', get(this.wps, 'overlayType'));\n }\n return true;\n }\n\n get overlayTypeInvalidMessage() {\n let value = get(this.wps, 'overlayType');\n let approvalRange = this.intl.t(`lov.overlay-type.${value}`);\n return this.intl\n .t('model-validations.wps.overlay-type', {\n approvalRange,\n })\n .toString();\n }\n\n // Product Type\n get isProductTypeValid() {\n let wpsProductType = get(this.wps, 'productType');\n if (this._isASME() || isEmpty(wpsProductType)) {\n return true;\n }\n\n if (get(this.validations, 'meta.isMultiPQR')) {\n let approvalRange = this.validations.productType;\n if (wpsProductType) {\n return approvalRange.includes(wpsProductType);\n } else {\n return true;\n }\n } else {\n let pqrProductType = get(this.validations, 'productTypeSource');\n if (this._isISO()) {\n if (pqrProductType === PRODUCT_TYPE.PLATE && wpsProductType === PRODUCT_TYPE.PIPE) {\n let diameterMin = get(this.wps, 'diameterMinimum');\n if (diameterMin && !isNaN(diameterMin)) {\n if (diameterMin >= 500) {\n return true;\n } else {\n let allPositions: WeldingPosition[] = [];\n let positionsRoot = this._toArray(get(this.wps, 'weldingPositionsRoot'));\n let positionsFill = this._toArray(get(this.wps, 'weldingPositionsFill'));\n let positionsCap = this._toArray(get(this.wps, 'weldingPositionsCap'));\n positionsRoot.forEach((p: WeldingPosition) => {\n allPositions.push(p);\n });\n positionsFill.forEach((p: WeldingPosition) => {\n allPositions.push(p);\n });\n positionsCap.forEach((p: WeldingPosition) => {\n allPositions.push(p);\n });\n if (\n diameterMin >= 150 &&\n optionsOnlyIncludePositions(allPositions, [\n WELDING_POSITIONS.PA,\n WELDING_POSITIONS.PC,\n ])\n ) {\n return true;\n } else {\n return false;\n }\n }\n } else {\n return false;\n }\n } else {\n let validationRange = this.validations.productType;\n if (wpsProductType) {\n return validationRange.includes(wpsProductType);\n } \n return true;\n }\n } else if (this._isAWS()) {\n if (pqrProductType === PRODUCT_TYPE.PLATE && wpsProductType === PRODUCT_TYPE.PIPE) {\n let diameterMin = this.wps.diameterMinimum;\n if (diameterMin && !isNaN(diameterMin)) {\n return diameterMin >= this.maxDistanceForAWSPipe;\n }\n return false;\n }\n }\n }\n return true;\n }\n\n get productTypeInvalidMessage() {\n let { intl, validations, wps } = this;\n if (get(validations, 'meta.isMultiPQR')) {\n let approvalRange = get(validations, 'productType');\n let productTypes = approvalRange.map((type: any) => {\n return intl.t(`lov.product-type.${type}`);\n });\n return intl\n .t('model-validations.wps.product-type', {\n productType: productTypes,\n })\n .toString();\n } else {\n let pqrProductType = get(validations, 'productTypeSource');\n let wpsProductType = wps.productType;\n if (this._isISO()) {\n if (pqrProductType === PRODUCT_TYPE.PLATE && wpsProductType === PRODUCT_TYPE.PIPE) {\n let weldingPositions = serializePositions(\n wps,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_ROOT,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_FILL,\n WELDING_PROCEDURE_SPECIFICATION.WELDING_POSITIONS_CAP\n );\n return intl\n .t('model-validations.wps.product-type-diameter', {\n diameter: wps.diameterMinimum,\n positions: weldingPositions,\n })\n .toString();\n } else {\n let approvalRange = get(validations, 'productType');\n let productTypes = approvalRange.map((type: any) => {\n return intl.t(`lov.product-type.${type}`);\n });\n return intl\n .t('model-validations.wps.product-type', {\n productType: productTypes,\n })\n .toString();\n }\n } else if (this._isAWS()) {\n if (pqrProductType === PRODUCT_TYPE.PLATE && wpsProductType === PRODUCT_TYPE.PIPE) {\n return intl\n .t('model-validations.wps.product-type-diameter-aws', {\n diameter: wps.diameterMinimum,\n unit: this.units.distanceUnit,\n max: this.maxDistanceForAWSPipe,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n get isWeldingPositionRootValid() {\n let positions = get(this.wps, 'weldingPositionsRoot');\n if (this._isPQRPlateAndWPSPipe() && this._isISO()) {\n return this._isWeldingPositionValid('weldingPositionsRoot');\n }\n\n let approvalRange = get(this.validations, 'weldingPositionsRoot');\n return this._collectionInCollectionById(approvalRange, this._toArray(positions));\n }\n\n get isWeldingPositionFillValid() {\n let positions = get(this.wps, 'weldingPositionsFill');\n if (this._isPQRPlateAndWPSPipe() && this._isISO()) {\n return this._isWeldingPositionValid('weldingPositionsFill');\n }\n\n let approvalRange = get(this.validations, 'weldingPositionsFill');\n return this._collectionInCollectionById(approvalRange, this._toArray(positions));\n }\n\n get isWeldingPositionCapValid() {\n let positions = get(this.wps, 'weldingPositionsCap');\n if (this._isPQRPlateAndWPSPipe() && this._isISO()) {\n return this._isWeldingPositionValid('weldingPositionsCap');\n }\n let approvalRange = get(this.validations, 'weldingPositionsCap');\n return this._collectionInCollectionById(approvalRange, this._toArray(positions));\n }\n\n get weldingPositionRootInvalidMessage() {\n if (this._isPQRPlateAndWPSPipe()) {\n if (!this._isWeldingPositionValid('weldingPositionsRoot')) {\n return this.intl.t('model-validations.wps.welding-position-product-type');\n }\n }\n let values = get(this.wps, 'weldingPositionsRoot');\n let approvalRange = get(this.validations, 'weldingPositionsRoot');\n let notQualified = this._notInCollection(approvalRange, this._toArray(values), 'value', 'id');\n let notQualifiedSerialized = serializeCollection(notQualified, 'code', '; ');\n let serialized = this._collectionApprovalRange('weldingPositionsRoot');\n let message = this.intl.t('model-validations.wps.pqr-validation', {\n value: notQualifiedSerialized,\n approvalRange: serialized,\n });\n return message.toString();\n }\n\n get weldingPositionFillInvalidMessage() {\n if (this._isPQRPlateAndWPSPipe()) {\n if (!this._isWeldingPositionValid('weldingPositionsFill')) {\n return this.intl.t('model-validations.wps.welding-position-product-type');\n }\n }\n let values = get(this.wps, 'weldingPositionsFill');\n let approvalRange = get(this.validations, 'weldingPositionsFill');\n let notQualified = this._notInCollection(approvalRange, this._toArray(values), 'value', 'id');\n let notQualifiedSerialized = serializeCollection(notQualified, 'code', '; ');\n let serialized = this._collectionApprovalRange('weldingPositionsFill');\n let message = this.intl.t('model-validations.wps.pqr-validation', {\n value: notQualifiedSerialized,\n approvalRange: serialized,\n });\n return message.toString();\n }\n\n get weldingPositionCapInvalidMessage() {\n if (this._isPQRPlateAndWPSPipe()) {\n if (!this._isWeldingPositionValid('weldingPositionsCap')) {\n return this.intl.t('model-validations.wps.welding-position-product-type');\n }\n }\n let values = get(this.wps, 'weldingPositionsCap');\n let approvalRange = get(this.validations, 'weldingPositionsCap');\n let notQualified = this._notInCollection(approvalRange, this._toArray(values), 'value', 'id');\n let notQualifiedSerialized = serializeCollection(notQualified, 'code', '; ');\n let serialized = this._collectionApprovalRange('weldingPositionsCap');\n let message = this.intl.t('model-validations.wps.pqr-validation', {\n value: notQualifiedSerialized,\n approvalRange: serialized,\n });\n return message.toString();\n }\n\n get isHardnessRequirementsValid() {\n let hardnessStatus = get(this.validations, 'hardnessRequirements');\n let currentValue = this.wps.hardnessTestRequired;\n\n if (hardnessStatus === 'CANNOT_HAVE' && currentValue) {\n return false;\n }\n\n return true;\n }\n\n get hardnessRequirementsInvalidMessage() {\n return this.intl.t('model-validations.wps.hardness-requirements');\n }\n\n get isImpactTestTemperatureValid() {\n let impactStatus = get(this.validations, 'impactRequirements');\n let currentValue = this.wps.impactTestTemperature;\n\n if (impactStatus === 'CANNOT_HAVE' && !isEmpty(currentValue)) {\n return false;\n }\n\n let approvalRange = parseFloat(this.validations.impactTestTemperature);\n\n if (isNaN(approvalRange)) {\n return true;\n }\n\n let currentValueNumber = parseFloat(`${currentValue}`);\n if (approvalRange > 0 && currentValueNumber < approvalRange) {\n return false;\n } else if (approvalRange < 0 && currentValueNumber < approvalRange) {\n return false;\n }\n\n return true;\n }\n\n get impactTestTemperatureInvalidMessage() {\n let impactStatus = get(this.validations, 'impactRequirements');\n let currentValue: string | number | undefined = get(this.wps, 'impactTestTemperature');\n\n if (impactStatus === 'CANNOT_HAVE' && !isEmpty(currentValue)) {\n return this.intl.t('model-validations.wps.impact-requirements-presence');\n }\n\n let impactTemperature = get(this.validations, 'impactTestTemperature');\n if (currentValue && !isEmpty(currentValue)) {\n currentValue = `${currentValue}`.replace(',', '.');\n }\n if (!isEmpty(impactTemperature)) {\n impactTemperature = `${impactTemperature}`.replace(',', '.');\n }\n let currentValueNumber = parseFloat(`${currentValue}`);\n let approvalRange = parseFloat(impactTemperature);\n if (approvalRange > 0 && currentValueNumber < approvalRange) {\n return this.intl\n .t('model-validations.wps.impact-requirements-temperature', {\n temperature: impactTemperature,\n })\n .toString();\n } else if (approvalRange < 0 && currentValueNumber < approvalRange) {\n return this.intl\n .t('model-validations.wps.impact-requirements-temperature', {\n temperature: impactTemperature,\n })\n .toString();\n }\n\n return '';\n }\n\n get isFillerMaterialElectrodeFormRootValid() {\n if (!isEmpty(get(this.validations, 'fillerMaterialElectrodeFormRoot'))) {\n return this._singleValueValidation(\n 'fillerMaterialElectrodeFormRoot',\n this.wps.fillerMaterialElectrodeFormRoot\n );\n }\n return true;\n }\n\n get fillerMaterialElectrodeFormRootInvalidMessage() {\n let value = get(this.validations, 'fillerMaterialElectrodeFormRoot');\n let valueTranslation = this.intl.t(`lov.filler-material-electrode.${value}`);\n return this._lovMessage(valueTranslation);\n }\n\n get isFillerMaterialElectrodeFormFillValid() {\n if (!isEmpty(get(this.validations, 'fillerMaterialElectrodeFormFill'))) {\n return this._singleValueValidation(\n 'fillerMaterialElectrodeFormFill',\n this.wps.fillerMaterialElectrodeFormFill\n );\n }\n return true;\n }\n\n get fillerMaterialElectrodeFormFillInvalidMessage() {\n let value = get(this.validations, 'fillerMaterialElectrodeFormFill');\n let valueTranslation = this.intl.t(`lov.filler-material-electrode.${value}`);\n return this._lovMessage(valueTranslation);\n }\n\n get isFillerMaterialElectrodeFormCapValid() {\n if (!isEmpty(get(this.validations, 'fillerMaterialElectrodeFormCap'))) {\n return this._singleValueValidation(\n 'fillerMaterialElectrodeFormCap',\n this.wps.fillerMaterialElectrodeFormCap\n );\n }\n return true;\n }\n\n get fillerMaterialElectrodeFormCapInvalidMessage() {\n let value = get(this.validations, 'fillerMaterialElectrodeFormCap');\n let valueTranslation = this.intl.t(`lov.filler-material-electrode.${value}`);\n return this._lovMessage(valueTranslation);\n }\n\n get isFillerMaterialGuideRootValid() {\n if (!isEmpty(get(this.validations, 'fillerMaterialGuideRoot'))) {\n return this._singleValueValidation(\n 'fillerMaterialGuideRoot',\n this.wps.fillerMaterialGuideRoot\n );\n }\n return true;\n }\n\n get fillerMaterialGuideRootInvalidMessage() {\n let value = get(this.validations, 'fillerMaterialGuideRoot');\n let valueTranslation = this.intl.t(`lov.filler-material-guide.${value}`);\n return this._lovMessage(valueTranslation);\n }\n\n get isFillerMaterialGuideFillValid() {\n if (!isEmpty(get(this.validations, 'fillerMaterialGuideFill'))) {\n return this._singleValueValidation(\n 'fillerMaterialGuideFill',\n this.wps.fillerMaterialGuideFill\n );\n }\n return true;\n }\n\n get fillerMaterialGuideFillInvalidMessage() {\n let value = get(this.validations, 'fillerMaterialGuideFill');\n let valueTranslation = this.intl.t(`lov.filler-material-guide.${value}`);\n return this._lovMessage(valueTranslation);\n }\n\n get isFillerMaterialGuideCapValid() {\n if (!isEmpty(get(this.validations, 'fillerMaterialGuideCap'))) {\n return this._singleValueValidation('fillerMaterialGuideCap', this.wps.fillerMaterialGuideCap);\n }\n return true;\n }\n\n get fillerMaterialGuideCapInvalidMessage() {\n let value = get(this.validations, 'fillerMaterialGuideCap');\n let valueTranslation = this.intl.t(`lov.filler-material-guide.${value}`);\n return this._lovMessage(valueTranslation);\n }\n\n get isOverlayNumberOfLayerValid() {\n return true;\n }\n\n get overlayNumberOfLayerInvalidMessage() {\n return '';\n }\n\n isHeatInputValid(value: any, layer: string) {\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n return this._rangeValidation('heatInputRoot', value);\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n return this._rangeValidation('heatInputFill', value);\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n return this._rangeValidation('heatInputCap', value);\n }\n return true;\n }\n\n heatInputInvalidMessage(value: any, layer: string) {\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n return this._rangeMessageWithTranslationKey(\n get(this.validations, 'heatInputRoot'),\n value,\n this.units.heatDistanceUnit,\n 'model-validations.wps-parameter.heat-input'\n );\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n return this._rangeMessageWithTranslationKey(\n get(this.validations, 'heatInputFill'),\n value,\n this.units.heatDistanceUnit,\n 'model-validations.wps-parameter.heat-input'\n );\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n return this._rangeMessageWithTranslationKey(\n get(this.validations, 'heatInputCap'),\n value,\n this.units.heatDistanceUnit,\n 'model-validations.wps-parameter.heat-input'\n );\n }\n return '';\n }\n\n isParameterCurrentMinimumValid(valueRaw: string, parameter: WpsWeldingParameter) {\n let id = get(parameter, 'id');\n let value = parseFloat(valueRaw);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMinimum = parseFloat(wpsWeldingParameter.current.min);\n \n let weldingProcess = get(parameter, 'weldingProcess');\n if (\n get(parameter, 'isLinkedToPass') &&\n !isEmpty(value) &&\n !isNaN(pqrMinimum) &&\n !isNaN(value)\n ) {\n if (this._isAWS() && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.9) {\n return false;\n }\n } else if (isGTAW(weldingProcess)) {\n if (value < pqrMinimum * 0.75) {\n return false;\n }\n }\n } else if (this._isASME() && weldingProcess) {\n if (isESW(weldingProcess)) {\n if (value < pqrMinimum * 0.85) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n parameterCurrentMinimumInvalidMessage(valueRaw: string, parameter: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let id = get(parameter, 'id');\n let weldingProcess = get(parameter, 'weldingProcess');\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMinimum = parseFloat(wpsWeldingParameter.current.min);\n if (\n get(parameter, 'isLinkedToPass') &&\n !isEmpty(value) &&\n !isNaN(pqrMinimum) &&\n weldingProcess\n ) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.9) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 90,\n pqrValue: pqrMinimum,\n })\n .toString();\n }\n } else if (isGTAW(weldingProcess)) {\n if (value < pqrMinimum * 0.75) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 75,\n pqrValue: pqrMinimum,\n })\n .toString();\n }\n } else if (isESW(weldingProcess)) {\n if (value < pqrMinimum * 0.85) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 85,\n pqrValue: pqrMinimum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterCurrentMaximumValid(valueRaw: string, parameter: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(parameter);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMaximum = parseFloat(wpsWeldingParameter.current.max);\n if (\n get(parameter, 'isLinkedToPass') &&\n !isEmpty(value) &&\n !isNaN(pqrMaximum) &&\n !isNaN(value)\n ) {\n if (this._isAWS() && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.1) {\n return false;\n }\n } else if (isGTAW(weldingProcess)) {\n if (value > pqrMaximum * 1.25) {\n return false;\n }\n }\n } else if (this._isASME() && weldingProcess) {\n if (isESW(weldingProcess)) {\n if (value > pqrMaximum * 1.15) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n parameterCurrentMaximumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMaximum = parseFloat(wpsWeldingParameter.current.max);\n if (get(model, 'isLinkedToPass') && !isEmpty(value) && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.1) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 110,\n pqrValue: pqrMaximum,\n })\n .toString();\n }\n } else if (isGTAW(weldingProcess)) {\n if (value > pqrMaximum * 1.25) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 125,\n pqrValue: pqrMaximum,\n })\n .toString();\n }\n } else if (isESW(weldingProcess)) {\n if (value > pqrMaximum * 1.15) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 115,\n pqrValue: pqrMaximum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterVoltageMinimumValid(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMinimum = parseFloat(wpsWeldingParameter.voltage.min);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && !isNaN(pqrMinimum) && weldingProcess) {\n if (this._isAWS()) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.93) {\n return false;\n }\n }\n } else if (this._isASME()) {\n if (isESW(weldingProcess)) {\n if (value < pqrMinimum * 0.85) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n parameterVoltageMinimumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n let pqrMinimum = parseFloat(wpsWeldingParameter.voltage.min);\n if (get(model, 'isLinkedToPass') && !isEmpty(value) && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.93) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 93,\n pqrValue: pqrMinimum,\n })\n .toString();\n }\n } else if (isESW(weldingProcess)) {\n if (value < pqrMinimum * 0.85) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 85,\n pqrValue: pqrMinimum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterVoltageMaximumValid(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMaximum = parseFloat(wpsWeldingParameter.voltage.max);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && !isNaN(pqrMaximum) && weldingProcess) {\n if (this._isAWS()) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.07) {\n return false;\n }\n }\n } else if (this._isASME()) {\n if (isESW(weldingProcess)) {\n if (value > pqrMaximum * 1.15) {\n return false;\n }\n }\n }\n }\n return true;\n }\n\n parameterVoltageMaximumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n let pqrMaximum = parseFloat(wpsWeldingParameter.voltage.max);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.07) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 107,\n pqrValue: pqrMaximum,\n })\n .toString();\n }\n } else if (isESW(weldingProcess)) {\n if (value > pqrMaximum * 1.15) {\n return this.intl\n \n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 115,\n pqrValue: pqrMaximum,\n })\n .toString();\n }\n }\n }\n return true;\n }\n\n isParameterTypeCurrentValid(value: BaseModel, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let currentId = get(this.validations, `parameters.${id}.typeCurrent.value`);\n if (!isEmpty(currentId)) {\n return currentId === get(value, 'id');\n }\n return true;\n }\n\n parameterTypeCurrentInvalidMessage(_value: BaseModel, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let approvalRange = get(this.validations, `parameters.${id}.typeCurrent.label`);\n return this.intl\n .t('model-validations.wps-parameter.same-value', {\n approvalRange,\n })\n .toString();\n }\n\n isParameterWireFeedSpeedMinimumValid(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMinimum = parseFloat(wpsWeldingParameter.wireFeedSpeed.min);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && this._isAWS() && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.9) {\n return false;\n }\n }\n }\n return true;\n }\n\n parameterWireFeedSpeedMinimumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n let pqrMinimum = parseFloat(wpsWeldingParameter.wireFeedSpeed.min);\n let convertedMinimum = `${pqrMinimum}`;\n if (get(model, 'isMetricSystem')) {\n convertedMinimum = fromMilimeterSecondToMeterMinute(pqrMinimum);\n }\n if (get(model, 'isLinkedToPass') && !isNaN(value) && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.9) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 90,\n pqrValue: convertedMinimum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterWireFeedSpeedMaximumValid(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMaximum = parseFloat(wpsWeldingParameter.wireFeedSpeed.max);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.1) {\n return false;\n }\n }\n }\n return true;\n }\n\n parameterWireFeedSpeedMaximumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n let pqrMaximum = parseFloat(wpsWeldingParameter.wireFeedSpeed.max);\n let convertedMaximum = `${pqrMaximum}`;\n if (get(model, 'isMetricSystem')) {\n convertedMaximum = fromMilimeterSecondToMeterMinute(pqrMaximum);\n }\n if (get(model, 'isLinkedToPass') && !isNaN(value) && weldingProcess) {\n if (isSAW(weldingProcess) || isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.1) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 110,\n pqrValue: convertedMaximum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterTravelSpeedMinimumValid(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMinimum = parseFloat(wpsWeldingParameter.travelSpeed.min);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && this._isAWS() && weldingProcess) {\n if (isSAW(weldingProcess)) {\n if (value < pqrMinimum * 0.85) {\n return false;\n }\n } else if (isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.75) {\n return false;\n }\n } else if (isGTAW(weldingProcess)) {\n if (value < pqrMinimum * 0.5) {\n return false;\n }\n }\n }\n return true;\n }\n\n parameterTravelSpeedMinimumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n let pqrMinimum = parseFloat(wpsWeldingParameter.travelSpeed.min);\n let convertedMinimum = `${pqrMinimum}`;\n if (get(model, 'isMetricSystem')) {\n convertedMinimum = fromMilimeterSecondToMilimeterMinute(pqrMinimum);\n }\n if (get(model, 'isLinkedToPass') && !isNaN(value) && weldingProcess) {\n if (isSAW(weldingProcess)) {\n if (value < pqrMinimum * 0.85) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 85,\n pqrValue: convertedMinimum,\n })\n .toString();\n }\n } else if (isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value < pqrMinimum * 0.75) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 75,\n pqrValue: convertedMinimum,\n })\n .toString();\n }\n } else if (isGTAW(weldingProcess)) {\n if (value < pqrMinimum * 0.5) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-minimum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 50,\n pqrValue: convertedMinimum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterTravelSpeedMaximumValid(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n if (!wpsWeldingParameter) {\n return true;\n }\n let pqrMaximum = parseFloat(wpsWeldingParameter.travelSpeed.max);\n if (get(model, 'isLinkedToPass') && !isNaN(value) && weldingProcess) {\n if (isSAW(weldingProcess)) {\n if (value > pqrMaximum * 1.15) {\n return false;\n }\n } else if (isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.25) {\n return false;\n }\n } else if (isGTAW(weldingProcess)) {\n if (value > pqrMaximum * 1.5) {\n return false;\n }\n }\n }\n return true;\n }\n\n parameterTravelSpeedMaximumInvalidMessage(valueRaw: string, model: WpsWeldingParameter) {\n let value = parseFloat(valueRaw);\n let { id, weldingProcess } = this._getParameterProcessId(model);\n let wpsWeldingParameter = get(this.validations, `parameters.${id}`) as WpsParameterValidationRange;\n let pqrMaximum = parseFloat(wpsWeldingParameter.travelSpeed.max);\n let convertedMaximum = `${pqrMaximum}`;\n if (model.isMetricSystem) {\n convertedMaximum = fromMilimeterSecondToMilimeterMinute(pqrMaximum);\n }\n if (!weldingProcess) {\n return '';\n }\n\n if (get(model, 'isLinkedToPass') && !isNaN(value)) {\n if (isSAW(weldingProcess)) {\n if (value > pqrMaximum * 1.15) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 115,\n pqrValue: convertedMaximum,\n })\n .toString();\n }\n } else if (isGMAW(weldingProcess) || isFCAW(weldingProcess)) {\n if (value > pqrMaximum * 1.25) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 125,\n pqrValue: convertedMaximum,\n })\n .toString();\n }\n } else if (isGTAW(weldingProcess)) {\n if (value > pqrMaximum * 1.5) {\n return this.intl\n .t('model-validations.wps.wps-welding-parameter-maximum', {\n process: get(weldingProcess, 'shortDesignation'),\n percentage: 150,\n pqrValue: convertedMaximum,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n isParameterLayerValid(value: string, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let layer = get(this.validations, `parameters.${id}.layer`);\n if (!isEmpty(layer)) {\n return layer === value;\n }\n return true;\n }\n\n parameterLayerInvalidMessage(_value: string, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let pqrLayer = get(this.validations, `parameters.${id}.layer`);\n let approvalRange = '';\n if (this.wps.isBothSides()) {\n approvalRange = this.intl.t(`lov.welding-layer-both-sides.${pqrLayer}`);\n } else {\n approvalRange = this.intl.t(`lov.welding-layer.${pqrLayer}`);\n }\n return this.intl\n .t('model-validations.wps-parameter.same-value', {\n approvalRange,\n })\n .toString();\n }\n\n isParameterArcTransferModeValid(value: ArcTransferMode, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let currentId = get(this.validations, `parameters.${id}.arcTransferMode.value`);\n if (!isEmpty(currentId)) {\n return currentId === get(value, 'id');\n }\n return true;\n }\n\n parameterArcTransferModeInvalidMessage(_value: ArcTransferMode, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let approvalRange = get(this.validations, `parameters.${id}.arcTransferMode.label`);\n return this.intl\n .t('model-validations.wps-parameter.same-value', {\n approvalRange,\n })\n .toString();\n }\n\n isParameterWeldingProcessValid(value: WeldingProcess, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let currentId = get(this.validations, `parameters.${id}.weldingProcess.value`);\n if (!isEmpty(currentId)) {\n return currentId === get(value, 'id');\n }\n return true;\n }\n\n parameterWeldingProcessInvalidMessage(_value: WeldingProcess, model: WpsWeldingParameter) {\n let { id } = this._getParameterProcessId(model);\n let approvalRange = get(this.validations, `parameters.${id}.weldingProcess.label`);\n return this.intl\n .t('model-validations.wps-parameter.same-value', {\n approvalRange,\n })\n .toString();\n }\n\n _getParameterProcessId(model: WpsWeldingParameter) {\n return {\n id: get(model, 'id'),\n weldingProcess: get(model, 'weldingProcess'),\n };\n }\n\n heatInputMinimumSource(parameter: WpsWeldingParameter) {\n let range = get(this.validations, `parameters.${get(parameter, 'id')}`) as WpsParameterValidationRange;\n return parseFloat(range.heatInput.min);\n }\n\n heatInputMaximumSource(parameter: WpsWeldingParameter) {\n let range = get(this.validations, `parameters.${get(parameter, 'id')}`) as WpsParameterValidationRange;\n return parseFloat(range.heatInput.max);\n }\n\n heatInputMinimumSourcePQR(parameter: WpsWeldingParameter) {\n let layer = get(parameter, 'layer');\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n if (this.validations.heatInputRoot.min) {\n return parseFloat(`${this.validations.heatInputRoot.min}`);\n }\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n if (this.validations.heatInputFill.min) {\n return parseFloat(`${this.validations.heatInputFill.min}`);\n }\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n if (this.validations.heatInputCap.min) {\n return parseFloat(`${this.validations.heatInputCap.min}`);\n }\n }\n return null;\n }\n\n heatInputMaximumSourcePQR(parameter: WpsWeldingParameter) {\n let layer = get(parameter, 'layer');\n if (layer === WELDING_LAYER_OPTIONS.ROOT) {\n if (this.validations.heatInputRoot.max) {\n return parseFloat(`${this.validations.heatInputRoot.max}`);\n }\n } else if (layer === WELDING_LAYER_OPTIONS.FILL) {\n if (this.validations.heatInputFill.max) {\n return parseFloat(`${this.validations.heatInputFill.max}`);\n }\n } else if (layer === WELDING_LAYER_OPTIONS.CAP) {\n if (this.validations.heatInputCap.max) {\n return parseFloat(`${this.validations.heatInputCap.max}`);\n }\n }\n return null;\n }\n\n //\n // Helper methods\n //\n _presenceMinimumValidation(property: string, value: any) {\n let correctValue = get(this.validations, property);\n if (correctValue === 'CANNOT_HAVE') {\n return isEmpty(value);\n } else if (correctValue === 'MUST_HAVE') {\n return !isEmpty(value);\n }\n return true;\n }\n\n _presenceMaximumValidation(property: string, value: any) {\n let correctValue = get(this.validations, property);\n if (correctValue === 'MUST_HAVE') {\n return !isEmpty(value);\n } else if (correctValue === 'CANNOT_HAVE') {\n return isEmpty(value);\n }\n return true;\n }\n\n _presenceMinimumValidationMessage(\n property: string,\n value: any,\n rangeProperty: string,\n unit: string\n ) {\n let correctValue = get(this.validations, property);\n if (correctValue === 'CANNOT_HAVE') {\n if (!isEmpty(value)) {\n return this.intl.t('model-validations.wps.pqr-empty-but-wps-have-value-pwht');\n }\n } else if (correctValue === 'MUST_HAVE') {\n if (isEmpty(value)) {\n let approvalRange = this._getApprovalRange(rangeProperty);\n return this.intl\n .t('model-validations.wps.pqr-with-value-but-wps-empty-pwht', {\n approvalRange,\n unit,\n })\n .toString();\n }\n }\n return '';\n }\n\n _presenceMaximumValidationMessage(\n property: string,\n value: any,\n rangeProperty: string,\n unit: string\n ) {\n let correctValue = get(this.validations, property);\n if (correctValue === 'MUST_HAVE') {\n if (isEmpty(value)) {\n let approvalRange = this._getApprovalRange(rangeProperty);\n return this.intl\n .t('model-validations.wps.pqr-with-value-but-wps-empty-pwht', {\n approvalRange,\n unit,\n })\n .toString();\n }\n } else if (correctValue === 'CANNOT_HAVE') {\n if (!isEmpty(value)) {\n return this.intl.t('model-validations.wps.pqr-empty-but-wps-have-value-pwht');\n }\n }\n return '';\n }\n\n _getApprovalRange(rangeProperty: string) {\n let { min, max } = get(this.validations, rangeProperty) as NumericalValidationRange;\n let approvalRange = rangeSerialization(min, max);\n return approvalRange;\n }\n\n _shouldValidateDiameter(value: any) {\n if (\n !isEmpty(value) &&\n get(this.wps, 'isLinkedToPQR') &&\n (this._isISO() || this._isAWS()) &&\n !get(this.validations, 'meta.isMultiPQR')\n ) {\n return true;\n }\n return false;\n }\n\n _isWeldingPositionValid(weldingPositionProperty: keyof WPSModel) {\n let diameterMin = get(this.wps, 'diameterMinimum') || NaN;\n if (!isNaN(diameterMin)) {\n if (diameterMin >= 500) {\n return true;\n } else {\n let allPositions = this._getAllWeldingPositions(this.wps, weldingPositionProperty);\n if (\n !optionsOnlyIncludePositions(allPositions, [WELDING_POSITIONS.PA, WELDING_POSITIONS.PC])\n ) {\n return false;\n }\n }\n }\n return true;\n }\n\n _isPQRPlateAndWPSPipe() {\n let pqrProductType = get(this.validations, 'productTypeSource');\n let wpsProductType = get(this.wps, 'productType');\n return pqrProductType === PRODUCT_TYPE.PLATE && wpsProductType === PRODUCT_TYPE.PIPE;\n }\n\n _getAllWeldingPositions(wps: WPSModel, layer: keyof WPSModel) {\n let allPositions: WeldingPosition[] = [];\n let positions = this._toArray(get(wps, layer));\n positions.forEach((p: WeldingPosition) => {\n allPositions.push(p);\n });\n return allPositions;\n }\n\n _isFillerMaterialValidAWS(\n validationProperty: string,\n wpsProperty: keyof WPSModel,\n wpsWeldingProcessProperty: keyof WPSModel\n ) {\n let isWPSStandardAWS = this._isAWS();\n if (isWPSStandardAWS) {\n let pqrFillerMaterial = get(this.validations, validationProperty) as FillerMaterialInstance;\n let wpsFillerMaterial = get(this.wps, wpsProperty) as FillerMaterial;\n let weldingProcess = get(this.wps, wpsWeldingProcessProperty);\n if (this._hasImpactRequirements()) {\n if (isSAW(weldingProcess)) {\n return this._isSameInstance(validationProperty, wpsProperty);\n } else {\n return isSameSpecification(pqrFillerMaterial, wpsFillerMaterial);\n }\n } else {\n if (isSMAW(weldingProcess)) {\n if (isSpecification51or55(pqrFillerMaterial)) {\n return isSpecification51or55withFillerMaterial(wpsFillerMaterial);\n } else {\n return this._isSameInstance(validationProperty, wpsProperty);\n }\n } else if (isSAW(weldingProcess)) {\n if (isSpecification517or523(pqrFillerMaterial)) {\n return isSpecification517or523withFiller(wpsFillerMaterial);\n } else {\n return this._isSameInstance(validationProperty, wpsProperty);\n }\n } else if (isGMAW(weldingProcess)) {\n if (isSpecification518or528or536(pqrFillerMaterial)) {\n return isSpecification518or528or536withFiller(wpsFillerMaterial);\n } else {\n return this._isSameInstance(validationProperty, wpsProperty);\n }\n } else if (isFCAW(weldingProcess)) {\n if (isSpecification520or529or536(pqrFillerMaterial)) {\n return isSpecification520or529or536withFiller(wpsFillerMaterial);\n } else {\n return this._isSameInstance(validationProperty, wpsProperty);\n }\n }\n }\n }\n return true;\n }\n\n _fillerMaterialForAWSInvalidMessage(\n validationProperty: string,\n wpsWeldingProcessProperty: keyof WPSModel\n ) {\n let pqrFillerMaterial = get(this.validations, validationProperty) as FillerMaterialInstance;\n let approvalRange = get(pqrFillerMaterial, 'label');\n let specification = get(pqrFillerMaterial, 'specificationLabel');\n let weldingProcess = get(this.wps, wpsWeldingProcessProperty);\n if (this._hasImpactRequirements()) {\n if (isSAW(weldingProcess)) {\n return this.intl\n .t('model-validations.wps.same-filler-material', {\n approvalRange: `${approvalRange}`,\n })\n .toString();\n } else {\n return this.intl\n .t('model-validations.wps.same-filler-material-specification', {\n specification,\n })\n .toString();\n }\n } else {\n if (isSMAW(weldingProcess)) {\n if (isSpecification51or55(pqrFillerMaterial)) {\n return this.intl\n .t('model-validations.wps.same-filler-material-specification', {\n specification,\n })\n .toString();\n } else {\n return this.intl\n .t('model-validations.wps.same-filler-material', {\n approvalRange: `${approvalRange}`,\n })\n .toString();\n }\n } else if (isSAW(weldingProcess)) {\n if (isSpecification517or523(pqrFillerMaterial)) {\n return this.intl\n .t('model-validations.wps.same-filler-material-specification', {\n specification,\n })\n .toString();\n } else {\n return this.intl\n .t('model-validations.wps.same-filler-material', {\n approvalRange: `${approvalRange}`,\n })\n .toString();\n }\n } else if (isGMAW(weldingProcess)) {\n if (isSpecification518or528or536(pqrFillerMaterial)) {\n return this.intl\n .t('model-validations.wps.same-filler-material-specification', {\n specification,\n })\n .toString();\n } else {\n return this.intl\n .t('model-validations.wps.same-filler-material', {\n approvalRange: `${approvalRange}`,\n })\n .toString();\n }\n } else if (isFCAW(weldingProcess)) {\n if (isSpecification520or529or536(pqrFillerMaterial)) {\n return this.intl\n .t('model-validations.wps.same-filler-material-specification', {\n specification,\n })\n .toString();\n } else {\n return this.intl\n .t('model-validations.wps.same-filler-material', {\n approvalRange: `${approvalRange}`,\n })\n .toString();\n }\n }\n }\n return '';\n }\n\n _isFillerMaterialDiameterValid(\n validationProperty: string,\n wpsFillerMaterialDiameterProperty: keyof WPSModel,\n wpsWeldingProcessProperty: keyof WPSModel\n ) {\n let unitSystem = get(this.units, 'unitSystem');\n if (this._isAWS()) {\n let weldingProcess = get(this.wps, wpsWeldingProcessProperty);\n let diameterWPS = parseFloat(get(this.wps, wpsFillerMaterialDiameterProperty));\n let diameterPQR = parseFloat(get(this.validations, validationProperty) as string);\n if (isNaN(diameterWPS) || isNaN(diameterPQR)) {\n return true;\n }\n if (isSMAW(weldingProcess)) {\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (diameterWPS - diameterPQR > 0.8) {\n return false;\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (diameterWPS - diameterPQR > 0.03125) {\n return false;\n }\n }\n } else if (isSAW(weldingProcess)) {\n return diameterWPS <= diameterPQR;\n } else if (isGMAW(weldingProcess)) {\n return diameterPQR === diameterWPS;\n } else if (isFCAW(weldingProcess)) {\n return diameterWPS <= diameterPQR;\n } else if (isGTAW(weldingProcess)) {\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n return Math.abs(diameterWPS - diameterPQR) < 1.6 && diameterWPS > 0.6;\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return Math.abs(diameterWPS - diameterPQR) < 0.0625 && diameterWPS > 0.0625;\n }\n }\n }\n return true;\n }\n\n _fillerMaterialDiameterInvalidMessage(\n validationProperty: string,\n wpsFillerMaterialDiameterProperty: keyof WPSModel,\n wpsWeldingProcessProperty: keyof WPSModel\n ) {\n let unitSystem = get(this.units, 'unitSystem');\n let diameterWPS = get(this.wps, wpsFillerMaterialDiameterProperty);\n let diameterPQR = parseFloat(get(this.validations, validationProperty) as string);\n let weldingProcess = get(this.wps, wpsWeldingProcessProperty);\n let unit =\n unitSystem === UNIT_SYSTEM.METRIC ? this.intl.t('lov.units.mm') : this.intl.t('lov.units.in');\n if (this._isAWS()) {\n if (isSMAW(weldingProcess)) {\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-over-specific', {\n distance: 0.8,\n distancePQR: diameterPQR,\n unit,\n process: 'SMAW',\n })\n .toString();\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-over-specific', {\n distance: 0.03125,\n distancePQR: diameterPQR,\n unit,\n process: 'SMAW',\n })\n .toString();\n }\n } else if (isSAW(weldingProcess)) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-over', {\n distance: diameterPQR,\n unit,\n process: 'SAW',\n })\n .toString();\n } else if (isGMAW(weldingProcess)) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-equal', {\n distance: diameterPQR,\n unit,\n process: 'GMAW',\n })\n .toString();\n } else if (isFCAW(weldingProcess)) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-over', {\n distance: diameterPQR,\n unit,\n process: 'FCAW',\n })\n .toString();\n } else if (isGTAW(weldingProcess)) {\n if (unitSystem === UNIT_SYSTEM.METRIC) {\n if (diameterWPS < 0.6) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-minimum', {\n distance: 0.6,\n unit,\n process: 'GTAW',\n })\n .toString();\n }\n if (Math.abs(diameterWPS - diameterPQR) > 1.6) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-above-or-below', {\n distance: 1.6,\n distancePQR: diameterPQR,\n unit,\n process: 'GTAW',\n })\n .toString();\n }\n } else if (unitSystem === UNIT_SYSTEM.IMPERIAL) {\n if (diameterWPS < 0.0625) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-minimum', {\n distance: 0.0625,\n unit,\n process: 'GTAW',\n })\n .toString();\n }\n if (Math.abs(diameterWPS - diameterPQR) > 0.0625) {\n return this.intl\n .t('model-validations.wps.filler-material-diameter-above-or-below', {\n distance: 0.0625,\n distancePQR: diameterPQR,\n unit,\n process: 'GTAW',\n })\n .toString();\n }\n }\n }\n }\n return '';\n }\n\n _thicknessTotalInvalidMessage(validationProperty: string, wpsProperty: keyof WPSModel) {\n let isWPSFilletWeld = get(this.validations, 'meta.isFilletWeld');\n let isPqrButtWeld = get(this.validations, 'meta.isSomeTypeOfButtWeld');\n let value = get(this.wps, wpsProperty);\n let isWPSPartialJointPenetrationButtWeld = get(\n this.validations,\n 'meta.isPartialJointPenetrationWeld'\n );\n if (isWPSFilletWeld) {\n if (isPqrButtWeld) {\n return this._rangeMessageValidator(\n get(this.validations, 'throatThickness'),\n value,\n this.units.distanceUnit\n );\n } else {\n return this._rangeMessageWithTranslationKey(\n get(this.validations, validationProperty) as NumericalValidationRange,\n value,\n this.units.distanceUnit,\n 'model-validations.wps.fillet-numeric-validation'\n );\n }\n } else if (isWPSPartialJointPenetrationButtWeld) {\n return this._rangeMessageWithTranslationKey(\n get(this.validations, validationProperty) as NumericalValidationRange,\n value,\n this.units.distanceUnit,\n 'model-validations.wps.partial-joint-penetration-numeric-validation'\n );\n } else {\n return this._rangeMessageValidator(\n get(this.validations, validationProperty) as NumericalValidationRange,\n value,\n this.units.distanceUnit\n );\n }\n }\n\n _isFillerMaterialCommercialDesignationValid(\n validationProperty: any,\n wpsProperty: keyof WPSModel,\n asmeMatchProperty: string,\n impactRequirementsProperty: string\n ) {\n if (this._isISO()) {\n return this._isValidInstance(wpsProperty, validationProperty);\n } else if (this._isASME() && get(this.validations, asmeMatchProperty)) {\n return this._isValidInstance(wpsProperty, validationProperty);\n } else if (this._isAWS() && get(this.validations, impactRequirementsProperty)) {\n return this._isValidInstance(wpsProperty, validationProperty);\n }\n return true;\n }\n\n _fillerMaterialCommercialDesignationInvalidMessage(\n validationProperty: string,\n wpsProperty: keyof WPSModel\n ) {\n if (this._isISO() || this._isASME()) {\n let commercialDesignation = get(this.wps, wpsProperty);\n let serialized = this._collectionApprovalRange(validationProperty);\n let message = this.intl.t('model-validations.wps.collection-validation', {\n value: get(commercialDesignation, 'commercialDesignation'),\n approvalRange: serialized,\n });\n return message.toString();\n } else if (this._isAWS()) {\n let approvalRange = this._collectionApprovalRange(validationProperty);\n return this.intl\n .t('model-validations.wps.same-filler-material-commercial-designation', {\n approvalRange,\n })\n .toString();\n }\n return '';\n }\n\n _isFillerMaterialValid(\n validationProperty: string,\n wpsProperty: keyof WPSModel,\n metaProperty: string\n ) {\n let value = get(this.wps, wpsProperty);\n let fillerMaterialId = get(this.validations, `${validationProperty}.value`) as string;\n if (!isEmpty(value) && !isEmpty(get(value, 'id')) && !isEmpty(fillerMaterialId)) {\n if (this._isISO()) {\n return this._isEqualId(get(value, 'id'), fillerMaterialId);\n } else if (this._isASME()) {\n if (get(this.validations, `meta.${metaProperty}`)) {\n // In this situation must have the same filler material\n return this._isEqualId(get(value, 'id'), fillerMaterialId);\n } else {\n // In this situation any filler material from the same group is valid\n let currentGroup = get(value, 'group.id');\n return this._isEqualId(currentGroup, fillerMaterialId);\n }\n } else if (this._isAWSD15()) {\n return this._isEqualId(get(value, 'id'), fillerMaterialId);\n } else {\n return true;\n }\n }\n return true;\n }\n\n _fillerMaterialInvalidMessage(\n validationProperty: string,\n wpsProperty: keyof WPSModel,\n metaProperty: string\n ) {\n let value = get(this.wps, wpsProperty);\n let approvalRange = get(this.validations, `${validationProperty}.label`);\n if (this._isISO()) {\n return this.intl\n .t('model-validations.wps.filler-material-iso', {\n approvalRange,\n })\n .toString();\n } else if (this._isASME()) {\n if (get(this.validations, `meta.${metaProperty}`)) {\n // In this situation must have the same filler material\n return this.intl\n .t('model-validations.wps.filler-material-asme-impact-requirements', {\n fillerMaterial: approvalRange,\n })\n .toString();\n } else {\n // In this situation any filler material from the same group is valid\n let approvalRange = get(value, 'group.groupName');\n return this.intl\n .t('model-validations.wps.filler-material-asme', {\n approvalRange,\n })\n .toString();\n }\n } else if (this._isAWSD15()) {\n return this.intl.t('model-validations.wps.aws-d1-5.same-filler-material', {\n approvalRange\n }).toString();\n } else {\n return '';\n }\n }\n\n _isShieldingValidForProcess(weldingProcessProperty: string, valueProperty: keyof WPSModel): boolean {\n let value = get(this.wps, valueProperty);\n let weldingProcess = get(this.validations, weldingProcessProperty) as string;\n if (!isEmpty(value) && !isEmpty(weldingProcess)) {\n let correctShielding = calculateShielding(weldingProcess);\n if (!isEmpty(correctShielding)) {\n // Due to not having FCAW-S (which is the process which can have gas)\n // we now have a check here to allow the WPS to have FCAW with gas\n if (weldingProcess === 'FCAW') {\n return value === SHIELDING_OPTIONS.GAS || value === SHIELDING_OPTIONS.NONE;\n }\n return correctShielding === value;\n }\n }\n return true;\n }\n\n _isISO() {\n return get(this.validations, 'meta.isISO');\n }\n\n _isASME() {\n return get(this.validations, 'meta.isASME');\n }\n\n _isAWSD15() {\n return get(this.validations, 'meta.isAWSD15');\n }\n\n _isAWS() {\n return get(this.validations, 'meta.isAWS');\n }\n\n _hasImpactRequirements() {\n return get(this.validations, 'meta.wpsImpactRequirements');\n }\n\n _shieldingInvalidMessageForProcess(validationProperty: string, layer = 'ROOT') {\n let { intl } = this;\n let process = get(this.validations, validationProperty) as string;\n let correctShielding = calculateShielding(process);\n let shielding = intl.t(`lov.shielding.${correctShielding}`);\n let translationKey = '';\n if (layer === 'ROOT') {\n translationKey = 'model-validations.shielding.root';\n } else if (layer === 'FILL') {\n translationKey = 'model-validations.shielding.fill';\n } else if (layer === 'CAP') {\n translationKey = 'model-validations.shielding.cap';\n }\n return this.intl\n .t(translationKey, {\n process,\n shielding,\n })\n .toString();\n }\n\n _isSameLovValue(validationProperty: string, valueProperty: keyof WPSModel) {\n let approvalRange = get(this.validations, validationProperty);\n if (isEmpty(approvalRange)) {\n return true;\n }\n let value = get(this.wps, valueProperty);\n return approvalRange === value;\n }\n\n _lovInvalidMessage(validationProperty: string, lovKey: string) {\n let lovValue = get(this.validations, validationProperty);\n let approvalRange = this.intl.t(`lov.${lovKey}.${lovValue}`);\n return this.intl\n .t('model-validations.wps.same-value', {\n approvalRange,\n unit: '',\n })\n .toString();\n }\n\n _isWeldingPositionDirectionValid(validationProperty: string, valueProperty: keyof WPSModel) {\n let pqrDirection = get(this.validations, validationProperty);\n let wpsDirection = get(this.wps, valueProperty);\n if (!isEmpty(pqrDirection)) {\n if (isEmpty(wpsDirection)) {\n return true;\n } else {\n return wpsDirection === pqrDirection;\n }\n } else {\n if (!isEmpty(wpsDirection)) {\n return false;\n }\n }\n return true;\n }\n\n _weldingPositionDirectionInvalidMessage(validationProperty: string) {\n let direction = get(this.validations, validationProperty);\n if (!isEmpty(direction)) {\n let approvalRange = this.intl.t(`lov.welding-position-direction.${direction}`);\n return this.intl\n .t('model-validations.wps.same-value', {\n approvalRange,\n unit: '',\n })\n .toString();\n } else {\n return this.intl.t('model-validations.wps.welding-position-direction');\n }\n }\n\n _invalidMessage(wpsProperty: keyof WPSModel, valueProperty: string, validationProperty: string) {\n let instance = get(this.wps, wpsProperty);\n let message = this.intl.t('model-validations.wps.pqr-validation', {\n value: get(instance, valueProperty),\n approvalRange: this._collectionApprovalRange(validationProperty),\n });\n return message.toString();\n }\n\n _isValidInstance(wpsProperty: keyof WPSModel, validationProperty: string, property = 'id') {\n let instance = get(this.wps, wpsProperty);\n if (!isEmpty(instance) && !isEmpty(get(instance, 'id'))) {\n return this._collectionValidation(validationProperty, get(instance, property));\n }\n return true;\n }\n\n _pwhtRangeMessage(range: NumericalValidationRange, value: any, unit = '') {\n let { min, max } = range;\n if (isEmpty(min) && isEmpty(max) && !isEmpty(value)) {\n return this.intl.t('model-validations.wps.pqr-empty-but-wps-have-value-pwht');\n }\n if ((!isEmpty(min) || !isEmpty(max)) && isEmpty(value)) {\n return this.intl.t('model-validations.wps.pqr-with-value-but-wps-empty-pwht');\n }\n return this._rangeMessageValidator(range, value, unit);\n }\n\n _rangeMessageWithTranslationKey(\n range: NumericalValidationRange,\n value: any,\n unit: string,\n messageKey: string\n ) {\n let { min, max } = range;\n let approvalRange = rangeSerialization(min, max);\n let message = this.intl.t(messageKey, {\n value,\n approvalRange,\n unit,\n });\n return message.toString();\n }\n\n _singleValueValidation(property: string, value: string | number | undefined) {\n let current = get(this.validations, property);\n return `${current}` === `${value}`;\n }\n\n _rangeValidation(property: string, value: string | number | undefined) {\n let set = get(this.validations, property) as NumericalRange;\n let isValid = true;\n if (set && set.min) {\n if (parseFloat(`${set.min}`) > parseFloat(`${value}`)) {\n isValid = false;\n }\n }\n if (set && set.max) {\n if (parseFloat(`${set.max}`) < parseFloat(`${value}`)) {\n isValid = false;\n }\n }\n return isValid;\n }\n\n _collectionValidation(property: string, value: string) {\n let collection = get(this.validations, property) as IdLabelPair[];\n if (!isEmpty(collection)) {\n let result = collection.mapBy('value').find((item: string) => {\n // Values come from the server as numbers, but from frontend as string,\n // need to convert them as strings\n return `${item}` === `${value}`;\n });\n return !isEmpty(result);\n }\n return true;\n }\n\n _collectionApprovalRange(property: string) {\n let collection = get(this.validations, property) as IdLabelPair[];\n if (!isEmpty(collection)) {\n return collection.mapBy('label').slice().join(', ');\n }\n return true;\n }\n\n _rangeMessageValidator(range: NumericalValidationRange, value: any, unit: string) {\n return this._rangeMessageWithTranslationKey(\n range,\n value,\n unit,\n 'model-validations.wps.numeric-validation'\n );\n }\n\n _singleValueMessage(value: string) {\n return this.intl\n .t('model-validations.wps.same-value', { approvalRange: value, unit: '' })\n .toString();\n }\n\n _lovMessage(value: string) {\n return this.intl.t('model-validations.wps.same-value-lov', { value });\n }\n\n _angleRangeMessage(range: NumericalValidationRange, value: any) {\n return this._rangeMessageValidator(range, value, 'º');\n }\n\n _notInCollection(\n collection: any,\n values: BaseModel[],\n collectionPropertyId = 'id',\n valueId: keyof BaseModel = 'id'\n ) {\n let notInCollection: any[] = [];\n if (!isEmpty(collection)) {\n values.forEach((v) => {\n let result = collection.findBy(collectionPropertyId, get(v, valueId));\n if (isEmpty(result)) {\n notInCollection.push(v);\n }\n });\n }\n return notInCollection;\n }\n\n _collectionInCollectionById(haystack: IdLabelPair[], needles: Array) {\n let inApprovalRange = true;\n if (!isEmpty(needles)) {\n needles.forEach((needle) => {\n let found = haystack.find((item) => {\n return `${get(item, 'value')}` === `${get(needle, 'id')}`;\n });\n if (isEmpty(found)) {\n inApprovalRange = false;\n }\n });\n }\n return inApprovalRange;\n }\n\n _isSameInstance(validationProperty: string, wpsProperty: keyof WPSModel) {\n let approvalRangeId = get(this.validations, `${validationProperty}.value`);\n let valueId = this.wps.getBelongsToId(wpsProperty);\n if (isEmpty(approvalRangeId)) {\n return true;\n }\n return `${approvalRangeId}` === `${valueId}`;\n }\n\n _isSameInstanceInvalidMessage(validationProperty: string) {\n let approvalRange = get(this.validations, `${validationProperty}.label`);\n return this.intl\n .t('model-validations.wps.same-value', {\n approvalRange,\n unit: '',\n })\n .toString();\n }\n\n _isEqualId(firstId: string, secondId: string) {\n return `${firstId}` === `${secondId}`;\n }\n\n _instanceHasValue(property: keyof WPSModel) {\n let value = get(this.wps, property);\n if (!isEmpty(value)) {\n return !isEmpty(get(value, 'id'));\n }\n return false;\n }\n\n get _wpsFillerMaterialRoot() {\n return get(this.wps, 'fillerMaterialRoot');\n }\n\n get _wpsFillerMaterialFill() {\n return get(this.wps, 'fillerMaterialFill');\n }\n\n get _wpsFillerMaterialCap() {\n return get(this.wps, 'fillerMaterialCap');\n }\n\n get isFilletWeld() {\n return isFilletWeld(this.wps.weldType);\n }\n\n get isOverlayWeld() {\n return isOverlayWeld(this.wps.weldType);\n }\n}\n","export default {\n WELD_LAYER_CONFIGURATION: {\n DESCRIPTION: 'description',\n LONG_DESCRIPTION: 'longDescription',\n UPLOAD: 'upload',\n WELDING_DETAILS: 'weldingDetails',\n WELD_TYPES: 'weldTypes',\n GROOVE_TYPE: 'grooveType',\n JOINT_TYPE: 'jointType',\n },\n};\n","export default {\n isSteelAndNickelAlloys(baseMaterialGroup) {\n return (\n baseMaterialGroup === '1 (1)' ||\n baseMaterialGroup === '1 (2)' ||\n baseMaterialGroup === '1 (3)' ||\n baseMaterialGroup === '1 (4)' ||\n baseMaterialGroup === '3 (1)' ||\n baseMaterialGroup === '3 (2)' ||\n baseMaterialGroup === '3 (3)' ||\n baseMaterialGroup === '4 (1)' ||\n baseMaterialGroup === '4 (2)' ||\n baseMaterialGroup === '5A (1)' ||\n baseMaterialGroup === '5B (1)' ||\n baseMaterialGroup === '5C (1)' ||\n baseMaterialGroup === '5C (3)' ||\n baseMaterialGroup === '5C (4)' ||\n baseMaterialGroup === '5C (5)' ||\n baseMaterialGroup === '6 (1)' ||\n baseMaterialGroup === '6 (2)' ||\n baseMaterialGroup === '6 (3)' ||\n baseMaterialGroup === '6 (4)' ||\n baseMaterialGroup === '7 (1)' ||\n baseMaterialGroup === '7 (2)' ||\n baseMaterialGroup === '8 (1)' ||\n baseMaterialGroup === '8 (2)' ||\n baseMaterialGroup === '8 (3)' ||\n baseMaterialGroup === '8 (4)' ||\n baseMaterialGroup === '9A (1)' ||\n baseMaterialGroup === '9B (1)' ||\n baseMaterialGroup === '9C (1)' ||\n baseMaterialGroup === '10A (1)' ||\n baseMaterialGroup === '10B (1)' ||\n baseMaterialGroup === '10C (1)' ||\n baseMaterialGroup === '10F (1)' ||\n baseMaterialGroup === '10H (1)' ||\n baseMaterialGroup === '10I (1)' ||\n baseMaterialGroup === '10J (1)' ||\n baseMaterialGroup === '10K (1)' ||\n baseMaterialGroup === '11A (1)' ||\n baseMaterialGroup === '11A (2)' ||\n baseMaterialGroup === '11A (3)' ||\n baseMaterialGroup === '11A (4)' ||\n baseMaterialGroup === '11A (5)' ||\n baseMaterialGroup === '11B (1)' ||\n baseMaterialGroup === '11B (2)' ||\n baseMaterialGroup === '11B (3)' ||\n baseMaterialGroup === '11B (4)' ||\n baseMaterialGroup === '11B (6)' ||\n baseMaterialGroup === '11B (8)' ||\n baseMaterialGroup === '11B (9)' ||\n baseMaterialGroup === '11B (10)' ||\n baseMaterialGroup === '11C (1)' ||\n baseMaterialGroup === '15E (1)' ||\n baseMaterialGroup === '15E (2)' ||\n baseMaterialGroup === '15E (3)' ||\n baseMaterialGroup === '15E (4)' ||\n baseMaterialGroup === '15E (5)' ||\n baseMaterialGroup === '15E (6)' ||\n baseMaterialGroup === '15F (1)' ||\n baseMaterialGroup === '15F (2)' ||\n baseMaterialGroup === '15F (3)' ||\n baseMaterialGroup === '15F (4)' ||\n baseMaterialGroup === '15F (5)' ||\n baseMaterialGroup === '15F (6)' ||\n baseMaterialGroup === '34 (N/A)' ||\n baseMaterialGroup === '41 (N/A)' ||\n baseMaterialGroup === '42 (N/A)' ||\n baseMaterialGroup === '43 (N/A)' ||\n baseMaterialGroup === '44 (N/A)' ||\n baseMaterialGroup === '45 (N/A)' ||\n baseMaterialGroup === '46 (N/A)' ||\n baseMaterialGroup === '49 (N/A)'\n );\n },\n\n isAluminiumAlloys(baseMaterialGroup) {\n return (\n baseMaterialGroup === '21 (N/A)' ||\n baseMaterialGroup === '22 (N/A)' ||\n baseMaterialGroup === '23 (N/A)' ||\n baseMaterialGroup === '25 (N/A)' ||\n baseMaterialGroup === '26 (N/A)'\n );\n },\n\n isTitaniumAndZirconiumAlloys(baseMaterialGroup) {\n return (\n baseMaterialGroup === '51 (N/A)' ||\n baseMaterialGroup === '52 (N/A)' ||\n baseMaterialGroup === '53 (N/A)' ||\n baseMaterialGroup === '61 (N/A)' ||\n baseMaterialGroup === '62 (N/A)'\n );\n },\n\n getSteelAndNickelAlloysApprovalRange() {\n return [\n '1 (1)',\n '1 (2)',\n '1 (3)',\n '1 (4)',\n '3 (1)',\n '3 (2)',\n '3 (3)',\n '4 (1)',\n '4 (2)',\n '5A (1)',\n '5B (1)',\n '5C (1)',\n '5C (3)',\n '5C (4)',\n '5C (5)',\n '6 (1)',\n '6 (2)',\n '6 (3)',\n '6 (4)',\n '7 (1)',\n '7 (2)',\n '8 (1)',\n '8 (2)',\n '8 (3)',\n '8 (4)',\n '9A (1)',\n '9B (1)',\n '9C (1)',\n '10A (1)',\n '10B (1)',\n '10C (1)',\n '10F (1)',\n '10H (1)',\n '10I (1)',\n '10J (1)',\n '10K (1)',\n '11A (1)',\n '11A (2)',\n '11A (3)',\n '11A (4)',\n '11A (5)',\n '11B (1)',\n '11B (2)',\n '11B (3)',\n '11B (4)',\n '11B (6)',\n '11B (8)',\n '11B (9)',\n '11B (10)',\n '11C (1)',\n '15E (1)',\n ' 15E (2)',\n '15E (3)',\n '15E (4)',\n '15E (5)',\n '15E (6)',\n '15F (1)',\n '15F (2)',\n '15F (3)',\n '15F (4)',\n '15F (5)',\n '15F (6)',\n '34 (N/A)',\n '41 (N/A)',\n '42 (N/A)',\n '43 (N/A)',\n '44 (N/A)',\n '45 (N/A)',\n '46 (N/A)',\n '49 (N/A)',\n ];\n },\n\n getAluminiumAlloysApprovalRange() {\n return ['21 (N/A)', '22 (N/A)', '23 (N/A)', '25 (N/A)', '26 (N/A)'];\n },\n\n getTitaniumAndZirconiumAlloysApprovalRange() {\n return ['51 (N/A)', '52 (N/A)', '53 (N/A)', '61 (N/A)', '62 (N/A)'];\n },\n};\n","import { isEmpty } from '@ember/utils';\nimport WelderStandard from 'weldnote/models/welder-standard';\nimport { isStandardAWS, isWelderStandardISO96061, isStandardASME } from 'weldnote/utils/standards';\nimport { isStandardAWSB21 } from './standards';\n\nexport default {\n WELDER_CERTIFICATE: {\n CERTIFICATE_NUMBER: 'certificateNumber',\n EXAMINING_BODY: 'examiningBody',\n DESIGNATION: 'designation',\n WELDER: 'welder',\n COMPANY: 'company',\n STANDARD: 'standard',\n CONSTRUCTION_STANDARD: 'constructionStandard',\n JOB_KNOWLEDGE: 'jobKnowledge',\n EMISSION_DATE: 'emissionDate',\n PREVIOUS_EXTERNAL_REQUALIFICATION_DATE: 'previousExternalRequalificationDate',\n INTERNAL_REQUALIFICATION_DATE: 'internalRequalificationDate',\n INTERNAL_REQUALIFICATION_DEADLINE: 'internalRequalificationDeadline',\n EXTERNAL_REQUALIFICATION_DEADLINE: 'externalRequalificationDeadline',\n WELDING_PROCESS_ROOT_TEST_PIECE: 'weldingProcessRootTestPiece',\n WELDING_PROCESS_FILL_TEST_PIECE: 'weldingProcessFillTestPiece',\n WELD_TYPE_TEST_PIECE: 'weldTypeTestPiece',\n SUPPLEMENTARY_FILLET_WELD_TEST: 'supplementaryFilletWeldTest',\n ARC_TRANSFER_MODE_ROOT_TEST_PIECE: 'arcTransferModeRootTestPiece',\n ARC_TRANSFER_MODE_FILL_TEST_PIECE: 'arcTransferModeFillTestPiece',\n WELDING_DETAIL_TEST_PIECE: 'weldingDetailTestPiece',\n WELDING_POSITION_ROOT_TEST_PIECE: 'weldingPositionRootTestPiece',\n WELDING_POSITION_FILL_TEST_PIECE: 'weldingPositionFillTestPiece',\n TYPE_CURRENT_ROOT_TEST_PIECE: 'typeCurrentRootTestPiece',\n TYPE_CURRENT_FILL_TEST_PIECE: 'typeCurrentFillTestPiece',\n BASE_MATERIAL1_TEST_PIECE: 'baseMaterial1TestPiece',\n BASE_MATERIAL2_TEST_PIECE: 'baseMaterial2TestPiece',\n PRODUCT_TYPE_TEST_PIECE: 'productTypeTestPiece',\n THICKNESS_ROOT_TEST_PIECE: 'thicknessRootTestPiece',\n THICKNESS_ROOT_LAYER_TEST_PIECE: 'thicknessRootLayerTestPiece',\n THICKNESS_FILL_TEST_PIECE: 'thicknessFillTestPiece',\n THICKNESS_FILL_LAYER_TEST_PIECE: 'thicknessFillLayerTestPiece',\n THICKNESS_TOTAL_TEST_PIECE: 'thicknessTotalTestPiece',\n DIAMETER_TEST_PIECE: 'diameterTestPiece',\n FILLER_MATERIAL_ROOT_TEST_PIECE: 'fillerMaterialRootTestPiece',\n FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'fillerMaterialRootCommercialDesignationTestPiece',\n\n FILLER_MATERIAL_FILL_TEST_PIECE: 'fillerMaterialFillTestPiece',\n FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'fillerMaterialFillCommercialDesignationTestPiece',\n\n ELECTRODE_TYPE_ROOT_TEST_PIECE: 'electrodeTypeRootTestPiece',\n ELECTRODE_TYPE_FILL_TEST_PIECE: 'electrodeTypeFillTestPiece',\n SHIELDING_ROOT: 'shieldingRoot',\n SHIELDING_ROOT_GAS_TEST_PIECE: 'shieldingRootGasTestPiece',\n SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingRootGasCommercialDesignationTestPiece',\n\n SHIELDING_ROOT_GAS_MIXTURE: 'shieldingRootGasMixture',\n SHIELDING_ROOT_FLUX_TEST_PIECE: 'shieldingRootFluxTestPiece',\n SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingRootFluxCommercialDesignationTestPiece',\n\n FLOW_RATE_ROOT: 'flowRateRoot',\n SHIELDING_FILL: 'shieldingFill',\n SHIELDING_FILL_GAS_TEST_PIECE: 'shieldingFillGasTestPiece',\n SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingFillGasCommercialDesignationTestPiece',\n\n SHIELDING_FILL_GAS_MIXTURE: 'shieldingFillGasMixture',\n SHIELDING_FILL_FLUX_TEST_PIECE: 'shieldingFillFluxTestPiece',\n SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingFillFluxCommercialDesignationTestPiece',\n\n FLOW_RATE_FILL: 'flowRateFill',\n BACKING_TEST_PIECE: 'backingTestPiece',\n BACKING_GAS_TEST_PIECE: 'backingGasTestPiece',\n BACKING_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE: 'backingGasCommercialDesignationTestPiece',\n BACKING_GAS_MIXTURE: 'backingGasMixture',\n BACKING_FLUX_TEST_PIECE: 'backingFluxTestPiece',\n BACKING_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE: 'backingFluxCommercialDesignationTestPiece',\n BACKING_FLOW_RATE_ROOT: 'backingFlowRateRoot',\n BACKING_FLOW_RATE_FILL: 'backingFlowRateFill',\n WELDING_PROCESS_ROOT_APPROVAL_RANGE: 'weldingProcessRootApprovalRange',\n WELDING_PROCESS_FILL_APPROVAL_RANGE: 'weldingProcessFillApprovalRange',\n WELD_TYPE_APPROVAL_RANGE: 'weldTypeApprovalRange',\n ARC_TRANSFER_MODE_ROOT_APPROVAL_RANGE: 'arcTransferModeRootApprovalRange',\n ARC_TRANSFER_MODE_FILL_APPROVAL_RANGE: 'arcTransferModeFillApprovalRange',\n WELDING_DETAILS_APPROVAL_RANGE: 'weldingDetailsApprovalRange',\n WELDING_POSITION_ROOT_APPROVAL_RANGE: 'weldingPositionRootApprovalRange',\n WELDING_POSITION_FILL_APPROVAL_RANGE: 'weldingPositionFillApprovalRange',\n BASE_MATERIAL1_APPROVAL_RANGE: 'baseMaterial1ApprovalRange',\n BASE_MATERIAL2_APPROVAL_RANGE: 'baseMaterial2ApprovalRange',\n THICKNESS_ROOT_MINIMUM_APPROVAL_RANGE: 'thicknessRootMinimumApprovalRange',\n THICKNESS_ROOT_MAXIMUM_APPROVAL_RANGE: 'thicknessRootMaximumApprovalRange',\n THICKNESS_FILL_MINIMUM_APPROVAL_RANGE: 'thicknessFillMinimumApprovalRange',\n THICKNESS_FILL_MAXIMUM_APPROVAL_RANGE: 'thicknessFillMaximumApprovalRange',\n THICKNESS_TOTAL_MINIMUM_APPROVAL_RANGE: 'thicknessTotalMinimumApprovalRange',\n THICKNESS_TOTAL_MAXIMUM_APPROVAL_RANGE: 'thicknessTotalMaximumApprovalRange',\n DIAMETER_MINIMUM_APPROVAL_RANGE: 'diameterMinimumApprovalRange',\n DIAMETER_MAXIMUM_APPROVAL_RANGE: 'diameterMaximumApprovalRange',\n FILLER_MATERIAL_ROOT_APPROVAL_RANGE: 'fillerMaterialRootApprovalRange',\n FILLER_MATERIAL_FILL_APPROVAL_RANGE: 'fillerMaterialFillApprovalRange',\n FILLER_MATERIAL_CAP_APPROVAL_RANGE: 'fillerMaterialCapApprovalRange',\n ELECTRODE_TYPE_ROOT_APPROVAL_RANGE: 'electrodeTypeRootApprovalRange',\n ELECTRODE_TYPE_FILL_APPROVAL_RANGE: 'electrodeTypeFillApprovalRange',\n SUPPLEMENTARY_FILLET_WELD_TEST_REQUIRED: 'supplementaryFilletWeldTestRequired',\n EXPIRED: 'expired',\n REQUALIFICATION_PERIOD: 'requalificationPeriod',\n CERTIFICATE_STATE: 'certificateState',\n WELDING_PROCESS_CAP_TEST_PIECE: 'weldingProcessCapTestPiece',\n WELDING_PROCESS_CAP_APPROVAL_RANGE: 'weldingProcessCapApprovalRange',\n ARC_TRANSFER_MODE_CAP_TEST_PIECE: 'arcTransferModeCapTestPiece',\n ARC_TRANSFER_MODE_CAP_APPROVAL_RANGE: 'arcTransferModeCapApprovalRange',\n WELDING_POSITION_CAP_TEST_PIECE: 'weldingPositionCapTestPiece',\n WELDING_POSITION_CAP_APPROVAL_RANGE: 'weldingPositionCapApprovalRange',\n TYPE_CURRENT_CAP_TEST_PIECE: 'typeCurrentCapTestPiece',\n THICKNESS_CAP_TEST_PIECE: 'thicknessCapTestPiece',\n THICKNESS_CAP_LAYER_TEST_PIECE: 'thicknessCapLayerTestPiece',\n THICKNESS_CAP_MINIMUM_APPROVAL_RANGE: 'thicknessCapMinimumApprovalRange',\n THICKNESS_CAP_MAXIMUM_APPROVAL_RANGE: 'thicknessCapMaximumApprovalRange',\n FILLER_MATERIAL_CAP_TEST_PIECE: 'fillerMaterialCapTestPiece',\n FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'fillerMaterialCapCommercialDesignationTestPiece',\n\n ELECTRODE_TYPE_CAP_TEST_PIECE: 'electrodeTypeCapTestPiece',\n ELECTRODE_TYPE_CAP_APPROVAL_RANGE: 'electrodeTypeCapApprovalRange',\n SHIELDING_CAP: 'shieldingCap',\n SHIELDING_CAP_GAS_TEST_PIECE: 'shieldingCapGasTestPiece',\n SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingCapGasCommercialDesignationTestPiece',\n\n SHIELDING_CAP_GAS_MIXTURE: 'shieldingCapGasMixture',\n SHIELDING_CAP_FLUX_TEST_PIECE: 'shieldingCapFluxTestPiece',\n SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION_TEST_PIECE:\n 'shieldingCapFluxCommercialDesignationTestPiece',\n\n FLOW_RATE_CAP: 'flowRateCap',\n BACKING_FLOW_RATE_CAP: 'backingFlowRateCap',\n BASE_MATERIAL1_THICKNESS: 'baseMaterial1Thickness',\n BASE_MATERIAL1_DIAMETER: 'baseMaterial1Diameter',\n BASE_MATERIAL2_THICKNESS: 'baseMaterial2Thickness',\n BASE_MATERIAL2_DIAMETER: 'baseMaterial2Diameter',\n WELDING_POSITION_ROOT_DIRECTION: 'weldingPositionRootDirection',\n WELDING_POSITION_FILL_DIRECTION: 'weldingPositionFillDirection',\n WELDING_POSITION_CAP_DIRECTION: 'weldingPositionCapDirection',\n SPECIAL_REQUIREMENTS: 'specialRequirements',\n OVERLAY_TYPE: 'overlayType',\n JOINT_TYPE: 'jointType',\n PROCESS_MECANIZATION_ROOT_TEST_PIECE: 'processMecanizationRootTestPiece',\n PROCESS_MECANIZATION_FILL_TEST_PIECE: 'processMecanizationFillTestPiece',\n PROCESS_MECANIZATION_CAP_TEST_PIECE: 'processMecanizationCapTestPiece',\n UNIT_SYSTEM: 'unitSystem'\n },\n\n isArcTransferModeDisabled(standard: WelderStandard, weldingProcess: string): boolean {\n if (isEmpty(weldingProcess)) {\n return false;\n }\n if (isWelderStandardISO96061(standard)) {\n let weldingProcesses = ['114', '131', '135', '136', '138'];\n if (weldingProcesses.includes(weldingProcess)) {\n return false;\n }\n return true;\n } else if (isStandardASME(standard) || isStandardAWS(standard) || isStandardAWSB21(standard)) {\n let weldingProcesses = ['GMAW', 'FCAW', 'MCAW', 'FCAW-S'];\n if (weldingProcesses.includes(weldingProcess)) {\n return false;\n }\n return true;\n }\n return true;\n },\n};\n","export default {\n WELDER_STANDARD: {\n STANDARD: 'standard',\n CODE: 'code',\n },\n};\n","export default {\n WELDING_BOOK: {\n DESIGNATION: 'designation',\n REVISION: 'revision',\n REVISION_STATUS: 'revisionStatus',\n CUSTOMER: 'customer',\n SUPPLIER: 'supplier',\n STANDARD: 'standard',\n WELDER_STANDARD: 'welderStandard',\n REVISION_DATE: 'revisionDate',\n WRITTEN_BY: 'writtenBy',\n VERIFIED_BY: 'verifiedBy',\n APPROVED_BY: 'approvedBy',\n WRITTEN_BY_DATE: 'writtenByDate',\n VERIFIED_BY_DATE: 'verifiedByDate',\n APPROVED_BY_DATE: 'approvedByDate',\n STATUS: 'status',\n NOTES: 'notes',\n INCLUDE_PQRS: 'includePqrs',\n WPS: 'wps',\n PQRS: 'pqrs',\n WELDERS: 'welders',\n BOOK_DRAWINGS: 'bookDrawings',\n COMPONENT_DRAWINGS: 'componentDrawings',\n WELDS: 'welds',\n WELDING_PROJECT: 'weldingProject',\n COMPONENT: 'component',\n TYPE_OF_WPS_INCLUSION: 'typeOfWpsInclusion',\n UNIT_SYSTEM: 'unitSystem'\n },\n};\n","export default {\n WELDING_MAP: {\n DESIGNATION: 'designation',\n COMPANY: 'company',\n MAP_DATE: 'mapDate',\n PIPING_PIECES: 'pipingPieces',\n PLATE_PIECES: 'platePieces',\n PQR_STANDARD: 'pqrStandard',\n PQR_EXAMINING_BODY: 'pqrExaminingBody',\n PQR_WELD_TYPE: 'pqrWeldType',\n PQR_WELDING_PROCESS_ROOT: 'pqrWeldingProcessRoot',\n PQR_WELDING_PROCESS_FILL: 'pqrWeldingProcessFill',\n PQR_WELDING_DETAILS: 'pqrWeldingDetails',\n PQR_BASE_MATERIAL1_GROUP: 'pqrBaseMaterial1Group',\n PQR_BASE_MATERIAL2_GROUP: 'pqrBaseMaterial2Group',\n PQR_FILLER_MATERIAL_ROOT: 'pqrFillerMaterialRoot',\n PQR_FILLER_MATERIAL_FILL: 'pqrFillerMaterialFill',\n PQR_FILLER_MATERIAL_GROUP_ROOT: 'pqrFillerMaterialGroupRoot',\n PQR_FILLER_MATERIAL_GROUP_FILL: 'pqrFillerMaterialGroupFill',\n PQR_HEAT_INPUT: 'pqrHeatInput',\n PQR_PREHEAT_TEMPERATURE: 'pqrPreheatTemperature',\n PQR_POST_WELD_HEAT_TREATMENT_TEMPERATURE: 'pqrPostWeldHeatTreatmentTemperature',\n PQR_IMPACT_TEST_TEMPERATURE: 'pqrImpactTestTemperature',\n PQR_HARDNESS_TEST_REQUIRED: 'pqrHardnessTestRequired',\n CERTIFICATE_STANDARD: 'certificateStandard',\n CERTIFICATE_EXAMINING_BODY: 'certificateExaminingBody',\n CERTIFICATE_WELD_TYPE: 'certificateWeldType',\n CERTIFICATE_WELDING_PROCESS_ROOT: 'certificateWeldingProcessRoot',\n CERTIFICATE_WELDING_PROCESS_FILL: 'certificateWeldingProcessFill',\n CERTIFICATE_WELDING_DETAILS: 'certificateWeldingDetails',\n CERTIFICATE_BASE_MATERIAL1_GROUP: 'certificateBaseMaterial1Group',\n CERTIFICATE_BASE_MATERIAL2_GROUP: 'certificateBaseMaterial2Group',\n CERTIFICATE_FILLER_MATERIAL_GROUP_ROOT: 'certificateFillerMaterialGroupRoot',\n CERTIFICATE_FILLER_MATERIAL_GROUP_FILL: 'certificateFillerMaterialGroupFill',\n CERTIFICATE_FILLER_MATERIAL_GROUP_CAP: 'certificateFillerMaterialGroupCap',\n CERTIFICATE_WELDING_POSITION_ROOT: 'certificateWeldingPositionRoot',\n CERTIFICATE_WELDING_POSITION_FILL: 'certificateWeldingPositionFill',\n CERTIFICATE_WELDERS: 'certificateWelders',\n WPS_STANDARD: 'wpsStandard',\n WPS_WELD_TYPE: 'wpsWeldType',\n WPS_WELDING_PROCESS_ROOT: 'wpsWeldingProcessRoot',\n WPS_WELDING_PROCESS_FILL: 'wpsWeldingProcessFill',\n WPS_WELDING_DETAILS: 'wpsWeldingDetails',\n WPS_BASE_MATERIAL1_GROUP: 'wpsBaseMaterial1Group',\n WPS_BASE_MATERIAL2_GROUP: 'wpsBaseMaterial2Group',\n WPS_FILLER_MATERIAL_ROOT: 'wpsFillerMaterialRoot',\n WPS_FILLER_MATERIAL_FILL: 'wpsFillerMaterialFill',\n WPS_FILLER_MATERIAL_GROUP_ROOT: 'wpsFillerMaterialGroupRoot',\n WPS_FILLER_MATERIAL_GROUP_FILL: 'wpsFillerMaterialGroupFill',\n WPS_HEAT_INPUT: 'wpsHeatInput',\n WPS_PREHEAT_TEMPERATURE: 'wpsPreheatTemperature',\n WPS_POST_WELD_HEAT_TREATMENT_TEMPERATURE: 'wpsPostWeldHeatTreatmentTemperature',\n WPS_WELDING_PROCEDURE_SPECIFICATIONS: 'wpsWeldingProcedureSpecifications',\n PQR_WELDING_PROCESS_CAP: 'pqrWeldingProcessCap',\n PQR_FILLER_MATERIAL_CAP: 'pqrFillerMaterialCap',\n CERTIFICATE_WELDING_PROCESS_CAP: 'certificateWeldingProcessCap',\n CERTIFICATE_WELDING_POSITION_CAP: 'certificateWeldingPositionCap',\n WPS_WELDING_PROCESS_CAP: 'wpsWeldingProcessCap',\n WPS_FILLER_MATERIAL_CAP: 'wpsFillerMaterialCap',\n PQR_SEARCH_FILLER_MATERIAL_ROOT_GROUP: 'pqrSearchFillerMaterialRootGroup',\n PQR_SEARCH_FILLER_MATERIAL_FILL_GROUP: 'pqrSearchFillerMaterialFillGroup',\n PQR_SEARCH_FILLER_MATERIAL_CAP_GROUP: 'pqrSearchFillerMaterialCapGroup',\n WPS_SEARCH_FILLER_MATERIAL_ROOT_GROUP: 'wpsSearchFillerMaterialRootGroup',\n WPS_SEARCH_FILLER_MATERIAL_FILL_GROUP: 'wpsSearchFillerMaterialFillGroup',\n WPS_SEARCH_FILLER_MATERIAL_CAP_GROUP: 'wpsSearchFillerMaterialCapGroup',\n PQR_THROAT_THICKNESS: 'pqrThroatThickness',\n WPS_THROAT_THICKNESS: 'wpsThroatThickness',\n PQR_SPECIAL_REQUIREMENTS: 'pqrSpecialRequirements',\n WPS_SPECIAL_REQUIREMENTS: 'wpsSpecialRequirements',\n CERTIFICATE_SPECIAL_REQUIREMENTS: 'certificateSpecialRequirements',\n PQR_OVERLAY_TYPE: 'pqrOverlayType',\n CERTIFICATE_OVERLAY_TYPE: 'certificateOverlayType',\n WPS_OVERLAY_TYPE: 'wpsOverlayType',\n CERTIFICATE_SEARCH_EXPIRED: 'certificateSearchExpired',\n PQR_WELDING_POSITION_ROOT: 'pqrWeldingPositionRoot',\n PQR_WELDING_POSITION_FILL: 'pqrWeldingPositionFill',\n PQR_WELDING_POSITION_CAP: 'pqrWeldingPositionCap',\n PQR_POST_WELD_HEAT_TREATMENT_PRESENCE: 'pqrPostWeldHeatTreatmentPresence',\n WPS_POST_WELD_HEAT_TREATMENT_PRESENCE: 'wpsPostWeldHeatTreatmentPresence',\n PQR_SEARCH_BY_WELDED_THICKNESS: 'pqrSearchByWeldedThickness',\n WPS_SEARCH_BY_WELDED_THICKNESS: 'wpsSearchByWeldedThickness',\n },\n};\n","import { isEmpty } from '@ember/utils';\nimport { set, get } from '@ember/object';\nimport PQRRules from 'weldnote/utils/pqr-rules';\nimport Rules from 'weldnote/utils/wps-welding-parameter-rules';\nimport Constants from 'weldnote/utils/constants';\nimport { calculateShielding } from 'weldnote/utils/certification-rules';\nimport { isStandardISO, isStandardASME } from 'weldnote/utils/standards';\n\nconst { WPS_WELDING_PARAMETER } = Rules;\n\nconst { WELD_TYPES, UNIT_SYSTEM, OVERLAY_FILLER_MATERIAL_FORM } = Constants;\n\nconst WPS = {\n WPS_NUMBER: 'wpsNumber',\n COMPANY: 'company',\n MAIN_PQR: 'mainPqr',\n STANDARD: 'standard',\n PRODUCT_TYPE: 'productType',\n WELD_TYPE: 'weldType',\n WELDING_PROCESS_ROOT: 'weldingProcessRoot',\n WELDING_PROCESS_FILL: 'weldingProcessFill',\n BASE_MATERIAL1: 'baseMaterial1',\n BASE_MATERIAL2: 'baseMaterial2',\n THICKNESS_MINIMUM: 'thicknessMinimum',\n THICKNESS_MAXIMUM: 'thicknessMaximum',\n DIAMETER_MINIMUM: 'diameterMinimum',\n DIAMETER_MAXIMUM: 'diameterMaximum',\n WELDING_POSITIONS_ROOT: 'weldingPositionsRoot',\n WELDING_POSITIONS_FILL: 'weldingPositionsFill',\n FILLER_MATERIAL_ROOT: 'fillerMaterialRoot',\n FILLER_MATERIAL_ROOT_COMMERCIAL_DESIGNATION: 'fillerMaterialRootCommercialDesignation',\n FILLER_MATERIAL_FILL: 'fillerMaterialFill',\n FILLER_MATERIAL_FILL_COMMERCIAL_DESIGNATION: 'fillerMaterialFillCommercialDesignation',\n SHIELDING_ROOT: 'shieldingRoot',\n SHIELDING_ROOT_GAS: 'shieldingRootGas',\n SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION: 'shieldingRootGasCommercialDesignation',\n SHIELDING_ROOT_GAS_MIXTURE: 'shieldingRootGasMixture',\n SHIELDING_ROOT_FLUX: 'shieldingRootFlux',\n SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION: 'shieldingRootFluxCommercialDesignation',\n FLOW_RATE_ROOT: 'flowRateRoot',\n SHIELDING_FILL: 'shieldingFill',\n SHIELDING_FILL_GAS: 'shieldingFillGas',\n SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION: 'shieldingFillGasCommercialDesignation',\n SHIELDING_FILL_GAS_MIXTURE: 'shieldingFillGasMixture',\n SHIELDING_FILL_FLUX: 'shieldingFillFlux',\n SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION: 'shieldingFillFluxCommercialDesignation',\n FLOW_RATE_FILL: 'flowRateFill',\n BACKING: 'backing',\n BACKING_GAS: 'backingGas',\n BACKING_GAS_COMMERCIAL_DESIGNATION: 'backingGasCommercialDesignation',\n BACKING_GAS_MIXTURE: 'backingGasMixture',\n BACKING_FLUX: 'backingFlux',\n BACKING_FLUX_COMMERCIAL_DESIGNATION: 'backingFluxCommercialDesignation',\n BACKING_FLOW_RATE_ROOT: 'backingFlowRateRoot',\n BACKING_FLOW_RATE_FILL: 'backingFlowRateFill',\n ROOT_FACE_MINIMUM: 'rootFaceMinimum',\n ROOT_FACE_MAXIMUM: 'rootFaceMaximum',\n ROOT_GAP_MINIMUM: 'rootGapMinimum',\n ROOT_GAP_MAXIMUM: 'rootGapMaximum',\n ELECTRODE_TYPE: 'electrodeType',\n NUMBER_OF_ELECTRODES: 'numberOfElectrodes',\n PULSED_WELDING_DETAILS: 'pulsedWeldingDetails',\n WEAVING: 'weaving',\n CONTACT_TUBE_DISTANCE: 'contactTubeDistance',\n BACK_GAUGING_DETAILS: 'backGaugingDetails',\n HEAT_INPUT_MINIMUM: 'heatInputMinimum',\n HEAT_INPUT_MAXIMUM: 'heatInputMaximum',\n POST_WELD_HEAT_TREATMENT_TIME_MINIMUM: 'postWeldHeatTreatmentTimeMinimum',\n POST_WELD_HEAT_TREATMENT_TIME_MAXIMUM: 'postWeldHeatTreatmentTimeMaximum',\n POST_WELD_HEAT_TREATMENT_METHOD: 'postWeldHeatTreatmentMethod',\n POST_WELD_HEAT_TREATMENT_HEATING_RATE: 'postWeldHeatTreatmentHeatingRate',\n POST_WELD_HEAT_TREATMENT_COOLING_RATE: 'postWeldHeatTreatmentCoolingRate',\n REVISION: 'revision',\n WRITTEN_BY: 'writtenBy',\n WRITTEN_BY_DATE: 'writtenByDate',\n VERIFIED_BY: 'verifiedBy',\n VERIFIED_BY_DATE: 'verifiedByDate',\n APPROVED_BY: 'approvedBy',\n APPROVED_BY_DATE: 'approvedByDate',\n STATUS: 'status',\n WELDING_PARAMETERS: 'weldingParameters',\n WPS_DOCUMENT: 'wpsDocument',\n GROOVE_DESIGNS: 'grooveDesigns',\n WELD_LAYER_CONFIGURATIONS: 'weldLayerConfigurations',\n WELDING_DETAILS: 'weldingDetails',\n BRANCH_ANGLE_MINIMUM: 'branchAngleMinimum',\n BRANCH_ANGLE_MAXIMUM: 'branchAngleMaximum',\n GROOVE_ANGLE_MINIMUM: 'grooveAngleMinimum',\n GROOVE_ANGLE_MAXIMUM: 'grooveAngleMaximum',\n POST_WELD_HEAT_TREATMENT_TEMPERATURE_MINIMUM: 'postWeldHeatTreatmentTemperatureMinimum',\n POST_WELD_HEAT_TREATMENT_TEMPERATURE_MAXIMUM: 'postWeldHeatTreatmentTemperatureMaximum',\n THROAT_THICKNESS_MINIMUM: 'throatThicknessMinimum',\n THROAT_THICKNESS_MAXIMUM: 'throatThicknessMaximum',\n IMPACT_TEST_TEMPERATURE: 'impactTestTemperature',\n HARDNESS_TEST_REQUIRED: 'hardnessTestRequired',\n PREHEAT_TEMPERATURE_MINIMUM: 'preheatTemperatureMinimum',\n PREHEAT_TEMPERATURE_MAXIMUM: 'preheatTemperatureMaximum',\n INTERPASS_TEMPERATURE_MINIMUM: 'interpassTemperatureMinimum',\n INTERPASS_TEMPERATURE_MAXIMUM: 'interpassTemperatureMaximum',\n POST_HEAT_TEMPERATURE_MINIMUM: 'postHeatTemperatureMinimum',\n POST_HEAT_TEMPERATURE_MAXIMUM: 'postHeatTemperatureMaximum',\n SECONDARY_PQRS: 'secondaryPqrs',\n NOTES: 'notes',\n PREPARATION_METHODS: 'preparationMethods',\n TORCH_ANGLE_MINIMUM: 'torchAngleMinimum',\n TORCH_ANGLE_MAXIMUM: 'torchAngleMaximum',\n REVISION_STATUS: 'revisionStatus',\n MASTER_WPS: 'masterWps',\n GAS_NOZZLE_DIAMETER_ROOT: 'gasNozzleDiameterRoot',\n GAS_NOZZLE_DIAMETER_FILL: 'gasNozzleDiameterFill',\n PROCESS_MECANIZATION_ROOT: 'processMecanizationRoot',\n PROCESS_MECANIZATION_FILL: 'processMecanizationFill',\n ARC_TRANSFER_MODE_ROOT: 'arcTransferModeRoot',\n ARC_TRANSFER_MODE_FILL: 'arcTransferModeFill',\n ARC_TRANSFER_MODE_CAP: 'arcTransferModeCap',\n WELDING_PROCESS_CAP: 'weldingProcessCap',\n GAS_NOZZLE_DIAMETER_CAP: 'gasNozzleDiameterCap',\n PROCESS_MECANIZATION_CAP: 'processMecanizationCap',\n TYPE_CURRENT_ROOT: 'typeCurrentRoot',\n TYPE_CURRENT_FILL: 'typeCurrentFill',\n TYPE_CURRENT_CAP: 'typeCurrentCap',\n NUMBER_OF_ELECTRODES_FILL: 'numberOfElectrodesFill',\n NUMBER_OF_ELECTRODES_CAP: 'numberOfElectrodesCap',\n WELDING_POSITIONS_CAP: 'weldingPositionsCap',\n SHIELDING_CAP: 'shieldingCap',\n SHIELDING_CAP_GAS: 'shieldingCapGas',\n SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION: 'shieldingCapGasCommercialDesignation',\n SHIELDING_CAP_GAS_MIXTURE: 'shieldingCapGasMixture',\n SHIELDING_CAP_FLUX: 'shieldingCapFlux',\n SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION: 'shieldingCapFluxCommercialDesignation',\n FLOW_RATE_CAP: 'flowRateCap',\n BACKING_FLOW_RATE_CAP: 'backingFlowRateCap',\n FILLER_MATERIAL_CAP: 'fillerMaterialCap',\n FILLER_MATERIAL_CAP_COMMERCIAL_DESIGNATION: 'fillerMaterialCapCommercialDesignation',\n BASE_MATERIAL1_THICKNESS_MINIMUM: 'baseMaterial1ThicknessMinimum',\n BASE_MATERIAL1_THICKNESS_MAXIMUM: 'baseMaterial1ThicknessMaximum',\n BASE_MATERIAL1_DIAMETER: 'baseMaterial1Diameter',\n BASE_MATERIAL2_THICKNESS_MINIMUM: 'baseMaterial2ThicknessMinimum',\n BASE_MATERIAL2_THICKNESS_MAXIMUM: 'baseMaterial2ThicknessMaximum',\n BASE_MATERIAL2_DIAMETER: 'baseMaterial2Diameter',\n WELDING_POSITION_ROOT_DIRECTION: 'weldingPositionRootDirection',\n WELDING_POSITION_FILL_DIRECTION: 'weldingPositionFillDirection',\n WELDING_POSITION_CAP_DIRECTION: 'weldingPositionCapDirection',\n SPECIAL_REQUIREMENTS: 'specialRequirements',\n OVERLAY_TYPE: 'overlayType',\n POST_HEAT_TIME_MINIMUM: 'postHeatTimeMinimum',\n POST_HEAT_TIME_MAXIMUM: 'postHeatTimeMaximum',\n JOINT_TYPE: 'jointType',\n ELECTRODE_TYPE_FILL: 'electrodeTypeFill',\n ELECTRODE_TYPE_CAP: 'electrodeTypeCap',\n CONTACT_TUBE_DISTANCE_FILL: 'contactTubeDistanceFill',\n CONTACT_TUBE_DISTANCE_CAP: 'contactTubeDistanceCap',\n WEAVING_FILL: 'weavingFill',\n WEAVING_CAP: 'weavingCap',\n TUNGSTEN_DIAMETER_ROOT: 'tungstenDiameterRoot',\n TUNGSTEN_DIAMETER_FILL: 'tungstenDiameterFill',\n TUNGSTEN_DIAMETER_CAP: 'tungstenDiameterCap',\n PQR_FILL: 'pqrFill',\n PQR_CAP: 'pqrCap',\n PQR_ROOT_LAYER: 'pqrRootLayer',\n PQR_FILL_LAYER: 'pqrFillLayer',\n PQR_CAP_LAYER: 'pqrCapLayer',\n THICKNESS_ROOT_MINIMUM: 'thicknessRootMinimum',\n THICKNESS_ROOT_MAXIMUM: 'thicknessRootMaximum',\n THICKNESS_FILL_MINIMUM: 'thicknessFillMinimum',\n THICKNESS_FILL_MAXIMUM: 'thicknessFillMaximum',\n THICKNESS_CAP_MINIMUM: 'thicknessCapMinimum',\n THICKNESS_CAP_MAXIMUM: 'thicknessCapMaximum',\n PROJECT_CLIENT: 'projectClient',\n PROJECT: 'project',\n CONSTRUCTION_STANDARD: 'constructionStandard',\n OVERLAY_NUMBER_OF_LAYERS: 'overlayNumberOfLayers',\n FILLER_MATERIAL_ELECTRODE_FORM_ROOT: 'fillerMaterialElectrodeFormRoot',\n FILLER_MATERIAL_ELECTRODE_FORM_FILL: 'fillerMaterialElectrodeFormFill',\n FILLER_MATERIAL_ELECTRODE_FORM_CAP: 'fillerMaterialElectrodeFormCap',\n FILLER_MATERIAL_GUIDE_ROOT: 'fillerMaterialGuideRoot',\n FILLER_MATERIAL_GUIDE_FILL: 'fillerMaterialGuideFill',\n FILLER_MATERIAL_GUIDE_CAP: 'fillerMaterialGuideCap',\n OSCILLATION_WIDTH_ROOT: 'oscillationWidthRoot',\n OSCILLATION_WIDTH_FILL: 'oscillationWidthFill',\n OSCILLATION_WIDTH_CAP: 'oscillationWidthCap',\n OSCILLATION_FREQUENCY_ROOT: 'oscillationFrequencyRoot',\n OSCILLATION_FREQUENCY_FILL: 'oscillationFrequencyFill',\n OSCILLATION_FREQUENCY_CAP: 'oscillationFrequencyCap',\n OSCILLATION_DWELL_TIME_ROOT: 'oscillationDwellTimeRoot',\n OSCILLATION_DWELL_TIME_FILL: 'oscillationDwellTimeFill',\n OSCILLATION_DWELL_TIME_CAP: 'oscillationDwellTimeCap',\n SUPPLEMENTAL_DEVICE_ROOT: 'supplementalDeviceRoot',\n SUPPLEMENTAL_DEVICE_FILL: 'supplementalDeviceFill',\n SUPPLEMENTAL_DEVICE_CAP: 'supplementalDeviceCap',\n ARCHIVAL_STATE: 'archivalState',\n FILLER_MATERIAL_ROOT_DIAMETERS: 'fillerMaterialRootDiameters',\n FILLER_MATERIAL_FILL_DIAMETERS: 'fillerMaterialFillDiameters',\n FILLER_MATERIAL_CAP_DIAMETERS: 'fillerMaterialCapDiameters',\n FLOW_RATE_PROCESS1_MINIMUM: 'flowRateProcess1Minimum',\n FLOW_RATE_PROCESS1_MAXIMUM: 'flowRateProcess1Maximum',\n FLOW_RATE_PROCESS2_MINIMUM: 'flowRateProcess2Minimum',\n FLOW_RATE_PROCESS2_MAXIMUM: 'flowRateProcess2Maximum',\n FLOW_RATE_PROCESS3_MINIMUM: 'flowRateProcess3Minimum',\n FLOW_RATE_PROCESS3_MAXIMUM: 'flowRateProcess3Maximum',\n UNIT_SYSTEM: 'unitSystem',\n};\n\nexport default {\n WELDING_PROCEDURE_SPECIFICATION: WPS,\n\n updateParameterHeatInputMinimum(\n wps,\n wpsParameter,\n callback = null,\n unitSystem = UNIT_SYSTEM.METRIC\n ) {\n let standard = wps.get(this.WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n let weldingProcess = wpsParameter.get(WPS_WELDING_PARAMETER.WELDING_PROCESS);\n\n let voltageMin = wpsParameter.get(WPS_WELDING_PARAMETER.VOLTAGE_MINIMUM);\n let currentMin = wpsParameter.get(WPS_WELDING_PARAMETER.CURRENT_MINIMUM);\n let travelSpeedMax = wpsParameter.get(WPS_WELDING_PARAMETER.TRAVEL_SPEED_MAXIMUM);\n let stripOrWire = wpsParameter.get('additionalData.overlayFillerMaterialForm');\n let stripWidth = null;\n if (stripOrWire === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n let materialDiameters = wpsParameter.get(WPS_WELDING_PARAMETER.FILLER_MATERIAL_DIAMETER);\n if (!isEmpty(materialDiameters)) {\n stripWidth = materialDiameters.get(0);\n }\n }\n\n let result = PQRRules.calculateParameterHeatInput(\n standard,\n voltageMin,\n currentMin,\n travelSpeedMax,\n weldingProcess,\n stripWidth,\n unitSystem\n );\n\n if (!isEmpty(result)) {\n result = result.toFixed(2);\n wpsParameter.set(WPS_WELDING_PARAMETER.HEAT_INPUT_MINIMUM, result);\n }\n\n if (callback) {\n callback(wpsParameter);\n }\n\n this.updateHeatInputApprovalRange(wps);\n },\n\n updateParameterHeatInputMaximum(\n wps,\n wpsParameter,\n callback = null,\n unitSystem = UNIT_SYSTEM.METRIC\n ) {\n let standard = wps.get(this.WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n let weldingProcess = wpsParameter.get(WPS_WELDING_PARAMETER.WELDING_PROCESS);\n\n let voltageMax = wpsParameter.get(WPS_WELDING_PARAMETER.VOLTAGE_MAXIMUM);\n let currentMax = wpsParameter.get(WPS_WELDING_PARAMETER.CURRENT_MAXIMUM);\n let travelSpeedMin = wpsParameter.get(WPS_WELDING_PARAMETER.TRAVEL_SPEED_MINIMUM);\n let stripOrWire = wpsParameter.get('additionalData.overlayFillerMaterialForm');\n let stripWidth = null;\n if (stripOrWire === OVERLAY_FILLER_MATERIAL_FORM.STRIP) {\n let materialDiameters = wpsParameter.get(WPS_WELDING_PARAMETER.FILLER_MATERIAL_DIAMETER);\n if (!isEmpty(materialDiameters)) {\n stripWidth = materialDiameters.get(0);\n }\n }\n\n let result = PQRRules.calculateParameterHeatInput(\n standard,\n voltageMax,\n currentMax,\n travelSpeedMin,\n weldingProcess,\n stripWidth,\n unitSystem\n );\n\n if (!isEmpty(result)) {\n result = result.toFixed(2);\n wpsParameter.set(WPS_WELDING_PARAMETER.HEAT_INPUT_MAXIMUM, result);\n }\n\n if (callback) {\n callback(wpsParameter);\n }\n },\n\n updateHeatInputApprovalRange(wps) {\n let standard = wps.get(this.WELDING_PROCEDURE_SPECIFICATION.STANDARD);\n let parameters = wps.get(this.WELDING_PROCEDURE_SPECIFICATION.WELDING_PARAMETERS);\n let weldType = wps.get(this.WELDING_PROCEDURE_SPECIFICATION.WELD_TYPE);\n let hardnessTestRequired = wps.get(this.WELDING_PROCEDURE_SPECIFICATION.HARDNESS_TEST_REQUIRED);\n let impactTestRequiredRaw = wps.get(\n this.WELDING_PROCEDURE_SPECIFICATION.IMPACT_TEST_TEMPERATURE\n );\n let impactTestRequired = !isEmpty(impactTestRequiredRaw) && !isNaN(impactTestRequiredRaw);\n\n let heatInputMinimum = this.calculateParametersMinimumHeatInput(parameters);\n let heatInputMaximum = this.calculateParametersMaximumHeatInput(parameters);\n\n let weldTypeCode = '';\n if (!isEmpty(weldType)) {\n weldTypeCode = weldType.weldType;\n }\n\n if (isNaN(heatInputMinimum) && isNaN(heatInputMaximum)) {\n wps.set(this.WELDING_PROCEDURE_SPECIFICATION.HEAT_INPUT_MINIMUM, null);\n wps.set(this.WELDING_PROCEDURE_SPECIFICATION.HEAT_INPUT_MAXIMUM, null);\n return;\n }\n\n let result = this.calculateHeatInputApprovalRange(\n standard,\n hardnessTestRequired,\n impactTestRequired,\n heatInputMinimum,\n heatInputMaximum,\n weldTypeCode\n );\n\n if (!isEmpty(result)) {\n if (result.min !== null && !isNaN(parseFloat(result.min))) {\n result.min = parseFloat(result.min).toFixed(2);\n }\n if (result.max !== null && !isNaN(parseFloat(result.max))) {\n result.max = parseFloat(result.max).toFixed(2);\n }\n }\n\n wps.set(this.WELDING_PROCEDURE_SPECIFICATION.HEAT_INPUT_MINIMUM, result.min);\n wps.set(this.WELDING_PROCEDURE_SPECIFICATION.HEAT_INPUT_MAXIMUM, result.max);\n },\n\n calculateParametersMinimumHeatInput(parameters) {\n let minimum = 9999999;\n if (isEmpty(parameters)) {\n return NaN;\n }\n parameters.forEach((p) => {\n let heatInputMin = parseFloat(p.get(WPS_WELDING_PARAMETER.HEAT_INPUT_MINIMUM));\n if (!isNaN(heatInputMin)) {\n if (minimum > heatInputMin) {\n minimum = heatInputMin;\n }\n }\n });\n\n if (minimum === 9999999) {\n return null;\n }\n\n return minimum;\n },\n\n calculateParametersMaximumHeatInput(parameters) {\n let maximum = -1;\n if (isEmpty(parameters)) {\n return NaN;\n }\n parameters.forEach((p) => {\n let heatInputMax = parseFloat(p.get(WPS_WELDING_PARAMETER.HEAT_INPUT_MAXIMUM));\n if (!isNaN(heatInputMax)) {\n if (maximum < heatInputMax) {\n maximum = heatInputMax;\n }\n }\n });\n\n if (maximum === -1) {\n return null;\n }\n\n return maximum;\n },\n\n calculateHeatInputApprovalRange(\n standard,\n hardnessTestRequired,\n impactTestRequired,\n heatInputMin,\n heatInputMax,\n weldType\n ) {\n let result = {\n min: null,\n max: null,\n };\n\n let heatInputMinParsed = parseFloat(heatInputMin, 10);\n let heatInputMaxParsed = parseFloat(heatInputMax, 10);\n\n if (!isEmpty(heatInputMinParsed) && !isNaN(heatInputMinParsed)) {\n result.min = heatInputMinParsed.toFixed(2);\n }\n if (!isEmpty(heatInputMaxParsed) && !isNaN(heatInputMaxParsed)) {\n result.max = heatInputMaxParsed.toFixed(2);\n }\n\n if (isStandardISO(standard)) {\n if (weldType === WELD_TYPES.OVERLAY_WELD) {\n if (!isNaN(heatInputMinParsed)) {\n result.min = heatInputMinParsed * 0.9;\n }\n if (!isNaN(heatInputMaxParsed)) {\n result.max = heatInputMaxParsed * 1.25;\n }\n } else {\n if (!isNaN(heatInputMinParsed) && heatInputMinParsed >= 0 && hardnessTestRequired) {\n result.min = parseFloat((heatInputMinParsed * 0.75).toFixed(2));\n }\n if (!isNaN(heatInputMaxParsed) && impactTestRequired) {\n result.max = parseFloat((heatInputMaxParsed * 1.25).toFixed(2));\n }\n }\n } else if (isStandardASME(standard)) {\n if (!isNaN(heatInputMaxParsed) && impactTestRequired) {\n result.max = heatInputMaxParsed;\n }\n }\n\n return result;\n },\n\n updateShieldingRoot(wps) {\n let weldingProcessRoot = get(wps, this.WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_ROOT);\n if (!isEmpty(weldingProcessRoot)) {\n let weldingProcessCode = weldingProcessRoot.shortDesignation;\n if (!isEmpty(weldingProcessCode)) {\n let shielding = calculateShielding(weldingProcessCode);\n let currentShielding = get(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT);\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT, shielding);\n this.clearShieldingRoot(wps);\n }\n }\n }\n },\n\n updateShieldingFill(wps) {\n let weldingProcessFill = get(wps, this.WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_FILL);\n if (!isEmpty(weldingProcessFill)) {\n let weldingProcessCode = weldingProcessFill.shortDesignation;\n if (!isEmpty(weldingProcessCode)) {\n let shielding = calculateShielding(weldingProcessCode);\n let currentShielding = get(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL);\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL, shielding);\n this.clearShieldingFill(wps);\n }\n }\n }\n },\n\n updateShieldingCap(wps) {\n let weldingProcessCap = get(wps, this.WELDING_PROCEDURE_SPECIFICATION.WELDING_PROCESS_CAP);\n if (!isEmpty(weldingProcessCap)) {\n let weldingProcessCode = weldingProcessCap.shortDesignation;\n if (!isEmpty(weldingProcessCode)) {\n let shielding = calculateShielding(weldingProcessCode);\n let currentShielding = get(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP);\n if (!isEmpty(shielding) && shielding !== currentShielding) {\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP, shielding);\n this.clearShieldingCap(wps);\n }\n }\n }\n },\n\n clearShieldingRoot(wps) {\n // Clear Gas\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_COMMERCIAL_DESIGNATION, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_GAS_MIXTURE, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_ROOT, null);\n // Clear Flux\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_ROOT_FLUX_COMMERCIAL_DESIGNATION, null);\n },\n\n clearShieldingFill(wps) {\n // Clear Gas\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_COMMERCIAL_DESIGNATION, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_GAS_MIXTURE, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_FILL, null);\n // Clear Flux\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_FILL_FLUX_COMMERCIAL_DESIGNATION, null);\n },\n\n clearShieldingCap(wps) {\n // Clear Gas\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_COMMERCIAL_DESIGNATION, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_GAS_MIXTURE, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.FLOW_RATE_CAP, null);\n // Clear Flux\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX, null);\n set(wps, this.WELDING_PROCEDURE_SPECIFICATION.SHIELDING_CAP_FLUX_COMMERCIAL_DESIGNATION, null);\n },\n};\n","import { get } from '@ember/object';\nimport Constants from 'weldnote/utils/constants';\n\nconst { WELDING_LAYER_OPTIONS } = Constants;\n\n// Filters the correct layer from the the allLayers array so that it matches\n// if the document has the fill or cap layer\nexport function calculateLayerOptions(allLayers = [], hasFillLayer = false, hasCapLayer = false) {\n if (hasCapLayer) {\n return allLayers;\n } else if (hasFillLayer) {\n return allLayers.filter((e) => {\n if (get(e, 'key') === WELDING_LAYER_OPTIONS.CAP) {\n return false;\n }\n return true;\n });\n } else {\n return allLayers.filter((e) => {\n if (\n get(e, 'key') === WELDING_LAYER_OPTIONS.CAP ||\n get(e, 'key') === WELDING_LAYER_OPTIONS.FILL\n ) {\n return false;\n }\n return true;\n });\n }\n}\n","import { get } from '@ember/object';\nimport { isEmpty } from '@ember/utils';\nimport { isStandardISO, isStandardASME } from 'weldnote/utils/standards';\nimport Constants from 'weldnote/utils/constants';\n\nconst { WELD_TYPES } = Constants;\n\nexport default {\n WPS_WELDING_PARAMETER: {\n ORDER_NUM: 'orderNum',\n PASS_NUMBER: 'passNumber',\n WELDING_PROCESS: 'weldingProcess',\n FILLER_MATERIAL_TYPE: 'fillerMaterialType',\n FILLER_MATERIAL_DIAMETER: 'fillerMaterialDiameters',\n CURRENT_MINIMUM: 'currentMinimum',\n CURRENT_MAXIMUM: 'currentMaximum',\n VOLTAGE_MINIMUM: 'voltageMinimum',\n VOLTAGE_MAXIMUM: 'voltageMaximum',\n TYPE_CURRENT: 'typeCurrent',\n WIRE_FEED_SPEED_MINIMUM: 'wireFeedSpeedMinimum',\n WIRE_FEED_SPEED_MAXIMUM: 'wireFeedSpeedMaximum',\n TRAVEL_SPEED_MINIMUM: 'travelSpeedMinimum',\n TRAVEL_SPEED_MAXIMUM: 'travelSpeedMaximum',\n HEAT_INPUT_MINIMUM: 'heatInputMinimum',\n HEAT_INPUT_MAXIMUM: 'heatInputMaximum',\n ARC_TRANSFER_MODE: 'arcTransferMode',\n WPS: 'wps',\n LAYER: 'layer',\n SOURCE_PARAMETER: 'sourceParameter',\n WELDING_POSITIONS: 'weldingPositions',\n PROGRAM: 'program',\n },\n\n // Calculates the minimum heat input valid for a wps-welding-parameter instance\n // given that it can be linked to a PQR Pass, only to a PQR or not to anything\n calculateMinimumHeatInput(parameter) {\n let isLinkedToPass = get(parameter, 'isLinkedToPass');\n let isISO =\n !isEmpty(get(parameter, 'wps.standard')) && isStandardISO(get(parameter, 'wps.standard'));\n let isOverlayWeld = get(parameter, 'wps.weldType.weldType') === WELD_TYPES.OVERLAY_WELD;\n if (isLinkedToPass && isISO && isOverlayWeld) {\n let heatInputMinimumPass = parameter.getSourceInputMinimum();\n if (!isEmpty(heatInputMinimumPass)) {\n let result = parseFloat(heatInputMinimumPass) * 0.9;\n return result.toFixed(2);\n }\n } else {\n let hasPQR = get(parameter, 'wps.isLinkedToPQR');\n if (hasPQR) {\n let heatInputMinimum = parameter.getSourcePQRInputMinimum();\n if (!isEmpty(heatInputMinimum) && !isNaN(heatInputMinimum)) {\n let result = parseFloat(heatInputMinimum) * 0.9;\n return result.toFixed(2);\n }\n }\n }\n return null;\n },\n\n calculateMaximumHeatInput(parameter, standard) {\n let standardFactor = 1;\n let isOverlayWeld = get(parameter, 'wps.weldType.weldType') === WELD_TYPES.OVERLAY_WELD;\n if (isStandardISO(standard)) {\n standardFactor = 1.25;\n } else if (isStandardASME(standard) && isOverlayWeld) {\n standardFactor = 1.1;\n }\n let isISO = isStandardISO(standard);\n let isLinkedToPass = get(parameter, 'isLinkedToPass');\n if (isLinkedToPass && isISO && isOverlayWeld) {\n let heatInputMaximumPass = parameter.getSourceInputMaximum();\n if (!isEmpty(heatInputMaximumPass) && !isNaN(parseFloat(heatInputMaximumPass))) {\n let result = parseFloat(heatInputMaximumPass) * standardFactor;\n return result.toFixed(2);\n }\n } else {\n let hasPQR = get(parameter, 'wps.isLinkedToPQR');\n if (hasPQR) {\n let heatInputMaximum = parameter.getSourcePQRInputMaximum();\n if (!isEmpty(heatInputMaximum) && !isNaN(heatInputMaximum)) {\n let result = parseFloat(heatInputMaximum) * standardFactor;\n return result.toFixed(2);\n }\n }\n }\n return null;\n },\n};\n","define('weldnote/config/environment', [], function() {\n var prefix = 'weldnote';\ntry {\n var metaName = prefix + '/config/environment';\n var rawConfig = document.querySelector('meta[name=\"' + metaName + '\"]').getAttribute('content');\n var config = JSON.parse(decodeURIComponent(rawConfig));\n\n var exports = { 'default': config };\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n}\ncatch(err) {\n throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n});\n","\n if (!runningTests) {\n require(\"weldnote/app\")[\"default\"].create({});\n }\n \n"],"mappings":"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GAET,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,WAAVA,GACU,WAAVA,GACU,WAAVA,GACU,YAAVA,EAIJurR,uBAAuBvrR,GAET,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,WAAVA,GACU,WAAVA,GACU,WAAVA,GACU,YAAVA,EAIJyrR,uBAAuBzrR,GAET,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,WAAVA,GACU,WAAVA,GACU,WAAVA,GACU,YAAVA,EAIJ2rR,uBAAuB3rR,GAET,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,UAAVA,GACU,WAAVA,GACU,WAAVA,GACU,WAAVA,GACU,YAAVA,EAIJ6rR,iCAAiC7rR,GAEnB,aAAVA,GACU,aAAVA,GACU,aAAVA,GACU,aAAVA,GACU,aAAVA,GACU,aAAVA,GACU,aAAVA,EAIJ+rR,wBAAwB/rR,GAEV,aAAVA,GACU,aAAVA,GACU,aAAVA,GACU,aAAVA,GACU,aAAVA,EAIJkrR,yBAAwBA,IACf,CACL,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,WAIJE,yBAAwBA,IACf,CACL,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,WAIJE,yBAAwBA,IACf,CACL,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,WAIJE,yBAAwBA,IACf,CACL,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,WAIJE,yBAAwBA,IACf,CACL,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QAC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B,YAAtBA,GACsB,aAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,YAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,EAIJ2kI,kBAAkB3kI,GAEQ,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,EAIJ4kI,6BAA6B5kI,GAEH,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,GACsB,aAAtBA,EAIJiwR,qCAAoCA,IAC3B,CACL,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,SACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,UACA,UACA,WACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,WACA,WACA,WACA,WACA,WACA,WACA,YAIJC,gCAA+BA,IACtB,CAAC,WAAY,WAAY,WAAY,WAAY,YAG1DC,2CAA0CA,IACjC,CAAC,WAAY,WAAY,WAAY,WAAY,YAE3D,G;UC7Kc,CACbngK,mBAAoB,CAClB9pD,mBAAoB,oBACpBnB,eAAgB,gBAChBnJ,YAAa,cACbxwB,OAAQ,SACRx1C,QAAS,UACT8lF,SAAU,WACVlgB,sBAAuB,uBACvB66O,cAAe,eACfx6M,cAAe,eACfy6M,uCAAwC,sCACxCC,8BAA+B,8BAC/BC,kCAAmC,kCACnCC,kCAAmC,kCACnCnuG,gCAAiC,8BACjCC,gCAAiC,8BACjCF,qBAAsB,oBACtBquG,+BAAg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"}