{"version":3,"file":"src_app_requests_requests_module_ts.297310b0dcd056ad.js","mappings":"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","names":["i0","CdkStepHeader","_elementRef","this","nativeElement","focus","ɵfac","ɵdir","selectors","CdkStepLabel","template","nextId","STEPPER_GLOBAL_OPTIONS","InjectionToken","CdkStep","_stepper","stepperOptions","interacted","interactedStream","EventEmitter","_editable","_optional","_completedOverride","_customError","_stepperOptions","_displayDefaultIndicatorType","displayDefaultIndicatorType","value","coerceBooleanProperty","_getDefaultCompleted","stepControl","valid","_getDefaultError","invalid","selected","reset","_stateChanged","emit","_a","showError","forwardRef","CdkStepper","ɵcmp","r","o","t","TemplateRef","ngContentSelectors","encapsulation","_dir","_changeDetectorRef","_document","_destroyed","Subject","steps","QueryList","_sortedHeaders","_linear","_selectedIndex","selectionChange","_orientation","_groupId","index","newIndex","coerceNumberProperty","_steps","_isValidIndex","_markAsInteracted","_anyControlsInvalidOrPending","toArray","editable","_updateSelectedItemIndex","selectedIndex","undefined","step","indexOf","_keyManager","withVerticalOrientation","changes","pipe","startWith","takeUntil","subscribe","filter","notifyOnChanges","_stepHeader","headers","sort","a","b","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","FocusKeyManager","withWrap","withHomeAndEnd","change","of","_layoutDirection","withHorizontalOrientation","direction","updateActiveItem","Math","max","destroy","next","complete","min","length","forEach","i","markForCheck","position","state","arguments","isCurrentStep","_isCurrentStep","_getDefaultIndicatorLogic","_getGuidelineLogic","_showError","hasError","completed","DONE","activeItemIndex","stepsArray","previouslySelectedIndex","selectedStep","previouslySelectedStep","_containsFocus","setActiveItem","event","hasModifier","hasModifierKey","keyCode","manager","SPACE","ENTER","onKeydown","preventDefault","slice","some","control","pending","optional","stepperElement","focusedElement","_getFocusedElementPierceShadowDom","contains","i1","DOCUMENT","CdkStepperModule","ɵmod","ɵinj","BidiModule","predicate","thisArg","TypeError","source","lift","FindValueOperator","yieldIndex","observer","FindValueSubscriber","destination","m","unsubscribe","call","notifyComplete","err","error","n","Subscriber","tmReview2StageDataCreator","name","createAction","props","pendingUpdateRequestCounter","RequestDetailsActions","loadRequestDetails","LoadRequestDetails","resetRequestDetails","ResetRequestDetails","loadRequestDetailsSuccess","LoadRequestDetailsSuccess","loadRequestDetailsFailure","LoadRequestDetailsFailure","updateRequestDetails","UpdateRequestDetails","args","excludeParts","pendingUpdateRequestPointer","updateRequestDetailsFailure","UpdateRequestDetailsFailure","updateRequestDetailsSuccess","UpdateRequestDetailsSuccess","updateRequestDetailsFinalArtDueDateFailure","UpdateFinalArtDueDateFailure","updateRequestDetailsDatesApprovedFailure","UpdateDatesApprovedFailure","deleteRequestDetailsItemFailure","DeleteItemFailure","updateRequestDetailsDesignerChoiceFailure","UpdateDesignerFailure","cdReviewRequiredFailure","CdReviewRequiredFailure","updatePpm","UpdatePpm","updatePpmSuccess","UpdatePpmSuccess","updatePpmFailure","UpdatePpmFailure","changeRequestOwner","ChangeRequestOwner","changeRequestOwnerSuccess","ChangeRequestOwnerSuccess","changeRequestOwnerFailure","ChangeRequestOwnerFailure","requestDetailsActions","updateRequestStatus","UpdateRequestStatus","updateRequestStatusSuccess","UpdateRequestStatusSuccess","updateRequestStatusFailure","UpdateRequestStatusFailure","updateRequestName","UpdateRequestName","refreshProductOwner","RefreshProductOwner","refreshProductOwnerSuccess","RefreshProductOwnerSuccess","refreshProductOwnerFailure","RefreshProductOwnerFailure","changeRequestTrafficManager","ChangeRequestTrafficManager","changeRequestTrafficManagerSuccess","ChangeRequestTrafficManagerSuccess","changeRequestTrafficManagerFailure","ChangeRequestTrafficManagerFailure","addAdditionalOtherContacts","AddAdditionalOtherContacts","addAdditionalOtherContactsSuccess","AddAdditionalOtherContactsSuccess","addAdditionalOtherContactsFailure","AddAdditionalOtherContactsFailure","ThirdPartyActions","thirdPartyActions","updateCardCollateralDetails","UpdateCardCollateralDetails","updateOperationsNotes","UpdateOperationsNotes","updateItemOperationsDetails","UpdateItemOperationsDetails","batchUpdateItemOperationsDetails","BatchUpdateItemOperationsDetails","updateConfirmedPrinters","UpdateConfirmedPrinters","updateConfirmedPrintersSuccess","UpdateConfirmedPrintersSuccess","updateConfirmedPrintersFailure","UpdateConfirmedPrintersFailure","CardProdActions","cardProdActions","requestDetailsFeatureKey","extractAdditionalOtherContacts","details","contacts","combineWithParts","parts","additionalOtherContacts","Object","requestDetailsReducer","createReducer","data","loading","pendingUpdateRequestPointers","pendingItemOperationsUpdates","pendingOperationNotes","on","action","persistedUpdatePointer","operationsNotes","skipLoading","RequestStageState","RequestStageActions","loadRequestSteps","loadRequestStepsSuccess","loadRequestStepsFailure","goToStage","selectStage","activateStage","activateStageSuccess","activateStageFailure","cancelStage","cancelStageSuccess","cancelStageFailure","requestStepsReducer","requestId","stepInProgress","currentStage","notes","find","status","code","stage","requestFeatureKey","requestReducers","requestDetails","requestSteps","selectRequestState","createFeatureSelector","selectRequestDetailsState","createSelector","selectRequestDetails","selectPendingRequestUpdatePointers","selectCardDesignRequestDetails","selectProductionRequestDetails","selectPopDesignRequestDetails","selectPopProductionRequestDetails","selectFinancialServiceRequestDetails","selectBifProductionRequestDetails","selectThirdPartyRequestDetails","selectThirdPartyItemOperationsDetailUpdates","selectThirdPartyPendingOperationNotes","selectIhRequestDetails","selectImageRequestDetails","selectRequestDetailsLoading","selectAdditionalOtherContacts","selectRequestDetailsParts","selectRequestDetailsCombined","LabelHelperService","shipment","address","addressLine1","_b","addressLine2","_c","addressLine3","s","_d","city","c","_e","stateProvince","_f","postalCode","v","_g","country","str","join","toLowerCase","isPPMSelector","selectUserState","selectUserWithSubstitutees","userState","allUsers","requestDetailsState","targetUserName","printProductionManager","userName","user","substitutees","u","trim","isPPMSelectorState","initialized","isPPM","requestFeatureSelector","selectRequestStepsState","selectRequestStepsDetailsState","type","selectRequestSteps","selectRequestDetailsSteps","selectRequestCurrentStage","selectRequestStepInProgress","selectRequestStepLoading","isRequesterSelectorState","creator","isCreator","isProductOwnerSelectorState","resultState","isProductOwner","items","y","reqItem","productOwners","productOwner","currentUser","isAssigneeStepIncludedState","stages","isAssigneeStepIncluded","currentStep","assignees","assignee","designerSelectorState","designer","designerName","currentUserName","isDesigner","AbstractRoleUpdateAwareProvider","rolesUpdateDataSubject","asObservable","map","share","AbstractRoleProvider","factory","Xs","RequestSpecificRoleProvider","store","translateService","select","takeWhile","val","pluck","isPPMResult","timeoutWith","throwError","Error","instant","isCreatorResult","isProductOwnerResult","isAssigneeStepIncludedResult","Promise","all","isUserProductionManager$","toPromise","isDesignerSelectorState$","isUserRequester$","isUserProductOwner$","isUserAssigneeStepIncluded$","isAny$","requestPermissions","p","ReassignPpmFormComponent","dialogData","utilsService","dialogRef","FormGroup","FormControl","form","get","close","firstName","lastName","MAT_DIALOG_DATA","ctx","REQUEST_CONTROLLER","NO_RELOAD_COMPONENT_STAGES","REQUEST_TYPE","RoleProviderAggregator","roleProviderAggregator","roleUpdateProviders","BehaviorSubject","Map","switchMap","merge","EMPTY","provider","roleUpdates","roleProviders","rp","roleUpdates$","takeUntilSubject","takeUntilSubjects","set","existingRoleProvider","getRoles","then","providerRoles","flat","StepActionsService","eventService","actionsReasonService","overlay","PRODUCTION_REQUEST","REQUEST_DETAILS","requestDetailsDeleteButton","requestDetailsSaveButton","requestDetailsSubmitButton","REQUEST_REVIEW","productionReviewRollbackButton","FINANCE_APPROVAL","defaultBackButton","defaultApproveButton","UPLOAD_ARTWORK","defaultCancelButton","uploadArtworkSubmitButton","ART_APPROVAL","approveArtSubmitButton","PO_SOW","poSowSubmitButton","COMMITTEE_APPROVAL","PRINT","atPrinterCloseJobButton","COMPLETED","CARD_DESIGN_REQUEST","TM_REVIEW","tmReviewRollbackButton","tmReviewSaveButton","cdTmReviewSubmitButton","DESIGN_PROCESS","designProcessSubmitButton","TM_REVIEW_2","defaultBackButtonV2","cdTmReview2SubmitButton","CREATIVE_DIRECTOR_REVIEW","cdCreativeReviewSubmitButton","INT_EXT_CLIENT_PROOF","intExtClientProofApproveButton","TM_REVIEW_3","cdTmReview3SubmitButton","PREP_ARTIFACTS","cdPrepArtifactSaveButton","cdPrepArtifactSubmitButton","POST_ARTIFACTS","cdPostArtifactSubmitButton","POP_DESIGN_REQUEST","FINANCIAL_SERVICES_REVIEW","popDesignFinancialServicesRollbackButton","popDesignFinancialServicesSubmitButton","pdTmReviewSubmitButton","defaultSubmitButton","pdTmReview2SubmitButton","FINANCIAL_SERVICES_REVIEW_2","pdFsReview2SubmitButton","pdTmReview3SubmitButton","pdPrepArtifactSaveButton","pdPrepArtifactSubmitButton","pdPostArtifactSubmitButton","POP_PRODUCTION_REQUEST","PRODUCTION_REVIEW","productionReviewSubmitButton","PRINTER_QUOTE_REQUEST","printerQuoteSubmitButton","INTERNAL_REQUESTOR_REVIEW","ppInternalRequesterReviewSubmit","PRINTER_PROOF_REQUEST","ppVendorProofSubmitButton","INTERNAL_PRINTER_PROOF_REVIEW","ppReviewVendorProofApproveButton","FINANCIAL_SERVICES_REQUEST","fsrUploadSubmitButton","PO","ART_REQUEST_APPROVAL","fsrArtworkApproveButton","BIF_PRODUCTION_REQUEST","ARTWORK_UPLOAD_AND_COST_QUOTE_CONFIRMATION","uploadArtworksSubmitButton","uploadPrinterProofSubmitButton","bifInternalReviewPrinterProofApproveButton","PRODUCTION_REQUEST_3RD_PARTY","thirdArtApproveButton","PO_SOW_TPS","CONFIRM_PRINTER","thirdConfirmPrinterButton","INTERNAL_EXTERNAL_OPERATIONS","thirdInternalExternalOperationsSubmitButton","IN_PRODUCTION","IH_PRODUCTION_REQUEST","ihUploadArtworkSubmitButton","ihArtworkApproveButton","IH_QUOTE_PROCESS","ihInternalPrinterProofApproveButton","IMAGE_REQUEST","imageTmReviewSubmitButton","imageDesignProcessSubmitButton","imageTmReview2CloseJobButton","ReplaySubject","actions","currentActionsSubject","requestType","stepCode","isStepDisabled","cloneDeep","REQUESTS","button","disabled","permission","Ce","eventName","currentActionsObject","buttonEventName","newLabel","reqType","reqStageOfChangeButton","buttonObj","label","newDisabled","Events","ngclass","elementRef","addReason","icon","permissionEngineVersion","dataId","isRequired","setIsRequired","setAction","setPosition","offsetX","origin","querySelector","positionStrategy","flexibleConnectedTo","withPositions","originX","originY","overlayX","overlayY","offsetY","overlayRef","create","hasBackdrop","width","scrollStrategy","scrollStrategies","block","reasonPortal","ComponentPortal","RequestActionReasonComponent","attach","reasonDetouchSubscription","getReason","detach","buttonClicked","title","setMainButtonTitle","createOverlayRefCentered","ref","global","centerHorizontally","centerVertically","attachment","CardDesignEvents","PopDesignEvents","PopProductionEvents","FsrEvents","BifEvents","ThirdPartyEvents","IhEvents","ImageEvents","FinalizeStageService","fileUploadService","cancelUploads","StatusLabelComponent","U","HoverDirective","element","renderer","toggleElement","nextSibling","setStyle","$event","AppPopoverComponent","calculatePosition","elementWidth","popover","offsetWidth","shift","il","ctx_r4","RequestStageMenuComponent","userPermissionsService","stepActionsService","cdr","requestController","messageService","translatePipe","abstractRoleUpdateAwareProvider","STATUSES","isActionAvailable","UserRoles","shareReplay","bufferSize","refCount","ngUnsubscribe","from","stageHolder","canActivate","permissionOptions$","combineLatest","isRequestInProgress$","isPPM$","isCardDesignTM$","isPopDesignTM$","isImageTM$","isCreativeDirector$","stageInProgress$","isInProgress","isCardDesignTM","isPopDesignTM","isImageTM","isCreativeDirector","stageInProgress","matButton","take","validateStepChange","stepChangeValid","TPPR","openConfirmationModel","comment","confirmed","stageChangeReady","hasUserPermission","permissions","stepChangePermitted","stageActivationCancelled","dispatch","CDR","PDR","includes","showSystemMessage","transform","createOverlayRefAttached","createReason","finalize","sub","CARD_DESIGN_REQUEST_STAGE_CREATIVE_DIRECTOR_REVIEW","CARD_DESIGN_REQUEST_STAGE_DESIGN_PROCESS","CARD_DESIGN_REQUEST_STAGE_TM_REVIEW_2","POP_DESIGN_REQUEST_STAGE_CREATIVE_DIRECTOR_REVIEW","POP_DESIGN_REQUEST_STAGE_DESIGN_PROCESS","POP_DESIGN_REQUEST_STAGE_TM_REVIEW_2","CPR","PPR","FSR","BPR","IPR","IR","ctx_r51","CustomStepperComponent","dir","changeDetectorRef","date","document","findIndex","goToSelectedStep","isRequestCompleted","setTimeout","onClick","selectedStepChange","currentIndex","topStatus","bottomStatus","format","isStagePassed","completedAt","plannedCompletionDate","provide","useExisting","PopProductionService","errorHandlingHttp","httpClient","fileDownloadService","API","params","nameBeginning","groupKeys","UserGroups","file","createAttachmentUrl","fileType","uploadAndCreateAttachment","attachmentFileType","requestAttachmentUploadLink","uploadFileWithProgress","uploadLink","HttpEventType","createPopProductionAttachment","uploadId","post","reportProgress","observe","attachmentId","url","delete","searchString","HttpParams","append","WPN","wpnDetailsByWpnId","poId","downloadFile","poDetails","observable","callPO","reqObj","assign","put","response","createItemPrinterProofUrl","conversionToProductionRequired","designRequestReference","designRequestFoundInInQueue","inQueueJobReference","fundingTypeCode","fundingCode","selectIsRequester","submitter","isSubmitter","isRequester","FsRequestService","PermissionGroups","createProofOfPayments","BlankStateComponent","FILE_TYPES","CARD_PRODUCTION","ARTWORK","ASN","PROOF_OF_PAYMENT","EXTERNAL_PIN","CARD_DESIGN","ART","POP_DESIGN","FS_FILE","POP_PRODUCTION","OTHER","PARTNER_ART","PRINTER_PROOF","PRINTER_QUOTE","FINANCIAL_SERVICES","FINANCE","BIF_PRODUCTION","THIRD_PARTY_PRODUCTION","OPS","IMAGE","ART_FILE","IH_PRODUCTION","DEFAULT","DEFAULT_DESIGN","UpdateTriggerContainer","ngUnsubscribeField","base","ChangeDetectorRef","updateTriggerListenerChangeDetector","updateFormTrigger","updateTriggerContainer","updateTriggerSubscription","WithCheckControlUpdates","controlAccessor","checkControlUpdatesCd","getCheckControlUpdatesTarget","touched","oldTouched","oldDisabled","oldValue","JSON","stringify","errors","oldErrors","CustomFieldErrorMatcher","customControl","AppCurrencyInputComponent","cd","digitGroupSeparator","decimalCharacter","decimalCharacterAlternative","minimumValue","maximumValue","decimalPlaces","decimalPlacesShownOnBlur","watchExternalChanges","defaultOptions","_required","_readonly","_maxLength","getControlErrorMessage","input","instance","clear","decimals","maxValue","currencyControlOptions","fn","onChange","onTouched","self","AutonumericDirective","NG_VALUE_ACCESSOR","multi","AppInputComponent","fm","elRef","ctrl","currencySymbol","currencySymbolPlacement","roundingMethod","valueAccessor","monitor","focused","isDisabled","_isDisabled","emitEvent","emptyInputBehavior","autoFocus","focusVia","matInput","stopMonitoring","numeric","repeat","statusChanges","MatInput","DndDirective","evt","stopPropagation","fileOver","files","dataTransfer","fileDropped","FileUploadProgressComponent","ctx_r10","ctx_r26","ctx_r32","ctx_r39","FileUploaderComponent","requestService","translate","loaderService","ARTWORK_STATUSES","getFileTypes","fileTypesToAccept","restrictionOptions","initialFiles","currentValue","proof","progress","fileTypeAccepted","exec","fileExtensionAccepted","filtered","bind","filterFileTypes","Array","isRestrictionSizeWarningExist","prepareFilesList","fileName","downloadAttachment","id","fileUrl","getFileUrl","getBlob","blob","Blob","body","link","URL","createObjectURL","window","open","uploadFailed","splice","usePageMaskLoader","showLoader","removeFunction","triggerActionHistoryUpdate","hideLoader","onUpdateFiles","beforeUploadFunction","filesToUploadNumber","item","isValidByRestrictionsOptions","uploaded","uploadFunction","round","loaded","total","progressObject","itemToLinkId","linkFileToReqItem","proceededFilesNumber","fileDropEl","fileValidBySize","fileSize","UtilsService","size","downloadItem","downloadItemFile","_r2","AccordionComponent","DateService","nWeeksFromNow","moment","add","hour","minutes","seconds","milliseconds","isSameOrAfter","isBefore","d","diff","startOf","CountryService","requestsService","getEuropeCountriesList","EUROPE_COUNTRIES","SelectProductUPCDirective","controlContainer","DEFAULT_COMPARATORS","optionValueComparatorFactory","_optionsProductUPC","addWPNListener","setOptionsProductUPCListener","getWPNData","wpnControl","valueChanges","newVal","isEuropeanCheck","checkEuropean","optionsProductUPC","selectProductUPC","clearWpnInfo","productUpcControl","distinctUntilChanged","productUPC","selectProductReminder","patchItemWithData","isInitialLoad","wpn","isWpnLoading","getWPNdata","wpnResponse","product","productUpc","checkMicrosoftIssuer","setWpnError","setErrors","wpnError","patchItem","clearInfo","isMicrosoftCheck","checkMicrosoft","ctx_r7","RadioGroupComponent","_value","changed","defaultSelectedIndex","selectItem","buttonValues","selectedItem","_MatProgressBarBase","mixinColor","MAT_PROGRESS_BAR_LOCATION","providedIn","inject","_location","location","getPathname","pathname","search","MAT_PROGRESS_BAR_DEFAULT_OPTIONS","progressbarId","MatProgressBar","_ngZone","_animationMode","defaults","_isNoopAnimation","_bufferValue","animationEnd","_animationEndSubscription","Subscription","mode","path","split","_rectangleFillValue","color","defaultColor","clamp","bufferValue","runOutsideAngular","_primaryValueBar","fromEvent","e","target","observers","run","ANIMATION_MODULE_TYPE","Am","decls","directives","styles","MatProgressBarModule","CommonModule","MatCommonModule","MerchantFormComponent","merchant","setValidators","onMerchantSelect","formValidationTrigger","markAllAsTouched","keys","controls","key","markAsTouched","isMerchantLoading","getMerchants","merchantSearch","detectChanges","option","getMerchantName","setValue","getMerchantInfo","setMerchantInfo","onRemove","onAddMerchant","merchantData","accountManagers","push","description","fcmsId","ctx_r3","ctx_r5","MerchantDetailsComponent","fb","merchantsArray","group","mdmId","Validators","array","removeAt","FormFactorService","startsWith","MULTIPACK","encodingType","toConcatLower","BARCODE_BEST_BUY","BARCODE_UAB","COSTCO","replace","countryCode","USA","test","FormFactorFormComponent","formFactorService","getRefData","setListenerOnEncodingType","recalcBestBuy","inputFormGroup","recalcUab","selectRefData","redemptionTypes","refData","dielines","substrates","encTypeChangeSubscription","resetAdditionalFields","isBestBuyInputsVisible","clearValidators","isUabInputsVisible","updateValueAndValidity","onlySelf","isBestBuyRelatedFieldVisible","isUabRelatedFieldVisible","ctx_r6","ProductionQuntityFormComponent","selectWarehouses","lazyLoadWarehouses","isShipmentsRequired","validator","required","setQtyValidator","Number","shipTotalQty","reduce","acc","curr","quantity","setAvailableQty","getAvailableQty","subject","currentAvailableQuantity","updateShipmentsValidity","prod","getShipTotalQty","getShipToOptions","shipToItem","warehouse","warehouse$","shipmentsOptions","prodQty","every","availableQty1","availableQty","availableQtyNumber","isLast","shipToGroup","ctx_r13","RequestItemFormComponent","dateService","countryService","FILE_SIZE_RESTRICTIONS","updateRequestDetailsFunction","requestItemIndex","tap","itemDetails","patchValue","uploadExternalPin","deleteExternalPin","artReview","wpnDescription","externalPinFiles","issuer","checkForRushJob","additionalPin","getRequestItemTypes","getDataPinFileTypes","setAdditionalPinListener","setTypeIfEmpty","itemTypes","itemTypeSelected","selectRequestItemTypes","selectDataPinFileTypes","dataPINfileTypes","obj","isEuropean","removeControl","MICROSOFT_DATA","formData","isoAlphaAbbreviation","brand","dcmsId","denom","productClassification","packageDescription","productDescription","encodingId","formFactor","encoding","productId","skuNumber","itemNumber","vendorStockNumber","productionQuantity","bundleSize","caseSize","processorInterface","processorName","processorCompany","processorCompanyName","checkEuropeanCountry","updateMicrosoftIssuer","isMicrosoftIssuer","setMicrosoftSpecificField","removeMicrosoftSpecificField","microsoftSpecific","showRushJob","earlierThanNWeeksFromNow","RUSH_JOB_WEEKS","remove","onCopy","productUpcChangedSubscription","console","checkCountry","addControl","StakeholderDetailsComponent","stakeholderSubscription","contact","userDataLoading","getContacts","stakeholdersSearch","extras","contactIndex","$a","ctx_r12","ctx_r14","PRICE_MAX","PRICE_MIN","ProductionDetailsComponent","router","w","uploadProofOfPayments","deleteProofOfPayment","itemIdx","O","masterForm","setMerchantsDataToControls","requestItemsControls","registerRequestDetailsController","lazyLoadPaymentTypes","lazyLoadDielines","lazyLoadDataPinFileTypes","lazyLoadSubstrates","lazyLoadRedemptionTypes","lazyLoadRequestItemTypes","isUserPPM","setInitialRequestDetails","buildProductionDetailsForm","getPaymentTypes","getRequestDetails","getPrintProductionManagers","addEventSubscriptions","additionalOtherContacts$","updateContacts","formArray","pushStakeholderContact","disable","resolve","toggleFormDisabling","finance","paymentType","rebillAmountPerItem","partnerPoNumber","proofsOfPayment","dataPinFileType","deliveryDate","microsoftData","pidId","pinInfo","dielineType","hardCopyProofRequired","redemptionType","substrateType","upcRequired","merchants","testCardQuantity","shipments","request","setPaymentTypeSubscription","isShowSavedMessage","navigate","PAGES_CONFIG","selectPaymentTypes","types","paymentTypes","getUsers","managersList","printProductionManagers","setInitPPMFromOptions","currentVal","printProductionManagerControl","paymentTypeSubscription","reqDetailsCopy","PRICE_PATTERN","NOTE_MAX_LENGTH","additionalStakeholdersDetailsControls","pushNewRequestItem","pushNewStakeholderContact","rebillAmountPerItemControl","isRebillRequired","INTEGER_PATTERN","QUANTITY_MAX_LENGTH","totalQty","responseItem","Date","INTEGER_PATTERN_EXCEPT_ZERO_VALUE","enable","isReviewStage","pushRequestItem","updateNewItemIndex","getRawValue","itemsIdxs","fg","idx","Set","subscriptions","deleteDraft","saveRequest","submitRequest","actionType","message","getInvalidShipmentsQuantityStr","rebillAmount","BigJs","getAllItemsProductQty","maxRebillTotal","MAX_REBILL_TOTAL","times","gt","showInvalidFormState","sum","plus","logInvalidControls","touchFormControls","pristine","formShipment","shipmentItem","newItemIndex","ctx_r16","ctx_r18","FileDownloaderComponent","MoreDetailsLinkComponent","linkClicked","FinanceApprovalComponent","setRequestDetailsSubscription","dataPinFiles","dataPinFileTypes","redemptions","requestItemsTypes","requestItemTypes","requestData","requestItems","financeDetails","financeItems","folder","getItemName","stageCode","ArtworkFilesAwareModel","PopArtworkFilesAwareModel","AbstractRequestStepComponent","AbstractRequestStepBase","inputs","Base","RequestStepInputs","WithRequestStepInputs","UploadArtworkItemSharedComponent","itemId","uploadArtworkForRequestItem","deleteArtwork","buildUploadArtworkForm","uploadArtworkForm","artworkNotes","artworkPath","toggleForm","finalArtFilePath","artworkFilePath","fileTypes","fileSizeRestrictions","isIhProdRequest","artworks","uploadArtworkControl","artworkRequired","requestTypes","isPopProdRequest","ThirdPartyItemHeaderComponent","PopProdRequestItemHeaderComponent","itemDescription","BifItemHeaderComponent","selectBifComponentTypes","componentTypeCode","lazyLoadBifComponentTypes","FsrItemHeaderComponent","RequestItemFieldsPanelComponent","selectDielines","ThirdPartyItemSubheaderComponent","selectThirdPartyOrderTypes","orderTypeCode","dielineTypeCode","lazyLoadThirdPartyOrderTypes","PopProdRequestItemSubheaderComponent","selectPopProdItemTypes","itemTypeCode","BifItemSubheaderComponent","selectBifFulfillmentTypes","fulfillmentTypeCode","lazyLoadBifFulfillmentTypes","FsrItemSubheaderComponent","convertNamesList","arr","BifItemInfoBodyComponent","ThirdPartyItemChildCardComponent","selectSubstrates","refData$","BifRequestTotalCostComponent","ctx_r31","UploadArtworkSharedComponent","I","MAX_BIF_COST_TOTAL","buildUploadForm","initSubscriptions","calculateCostTotal","uploadForm","itemsForm","eventSubscriptions","subscribeToEvent","initData","subscribeToBifValidation","uploadStepSubmit","isCostTotalMaxError","unitCostSubscriptions","itemGroup","unitCost","orderQuantity","costQuote","itemComponents","populateData","isBifRequest","costTotal","toFixed","getCostTotal","maxBifCostTotal","ctx_r8","ctx_r11","ctx_r24","ctx_r29","FilesApproveComponent","objReviewName","isPrinterProofs","updateAttachmentStatus","openRejectionModal","updateReqItemStatus","rejectionReason","updateItemStatus","reqItemId","fileResponse","updateFileWithResponse","updatedAt","reviewedAt","reviewer","createReasonAndOverlay","isReqItemApprovals","REQUEST_TYPES","ApproveRequestComponent","setStepSubmitSubscription","eventSubscription","statuses","hasUnreviewed","hasRejected","isAllItemsApproved","PoSowManageService","modalService","poItem","openConfirmationModal","number","sowCreated","afterClosed","deletePO","shouldShowSuccessMessage","isConfirmed","confirmDeleteSOW","updatePO","showModal","onCloseSuccess","filesChanged","onCloseSOWSuccess","deleteSOWItem","PoShipToDataService","shipmentInfo","testCardsShipmentInfo","poItemIndex","shipmentIndex","warehouseData","testCardShipmentData","indexValidity","isShipmentValid","flag","existingElement","el","ShipmentsAddressComponent","ctx_r25","SowFormInfoComponent","poShipToDataService","buildShipForm","setShipToListeners","shipForm","itemForm","setTestCardsShipmentData","itemIndex","testCardShipments","availableTestCardsQuantity","prev","attention","cell","email","phone","shipmentQty","res","qty","quantityEaches","Z","_h","_j","_k","k","_l","_m","F","P","_o","_p","J","W","_q","_r","Y","ne","_s","_t","$","re","_u","_v","X","K","_w","_x","le","_y","warehouses$","newValue","resetTestCardsShipmentData","SowFormComponent","modalData","poSowManageService","filesWereChanged","uploadSOWFile","po","deleteSOWFile","setPo","setInitialShipments","sowForm","billingInfo","sowNotes","poCopy","getPreparedForm","sowEncodingSpec","sowPackagingRequirements","poToSave","first","indx","isDataChanged","isEqualWith","obj1","obj2","onCloseSOW","getEmptyShipmentItem","shipmentData","getTestCardsShipmentData","ship","testItem","downloadPoPdf","updateRequestItemsTestCardShipments","updateNotes","MULTI","SelectPrinterProvider","printers","defaultType","allPrinters","printer","updateFilteredPrinters","_type","TYPES","WRAP","MULPIPACK","EXTERNAL","INTERNAL","isWrap","isMulti","filteredPrinters$","getWrapAndMultipackPrinters","getWrapPrinters","getMultipackPrinters","getInternalPrinters","getExternalPrinters","MIXED","printerList","selectedType","getItemType","isItemWrap","isItemMulti","defaultThrottleConfig","leading","trailing","duration","scheduler","async","config","ThrottleTimeOperator","subscriber","ThrottleTimeSubscriber","_hasTrailingValue","_trailingValue","throttled","schedule","dispatchNext","arg","clearThrottle","PoAccountingService","accountingInfoFieldset","unsubscribeSubject","throttleTime","lineOfBusinessField","channelField","company","inventoryType","lineOfBusiness","channel","ButtonDropdownComponent","itemLabel","Function","filteredItemsMulti","dropdownItems","itemsMultiFilterCtrl","_onDestroy","filterItemsMulti","setInitialValue","multiSelect","compareWith","getLabel","opened","onActionSave","itemMultiCtrl","_r0","ItemShipmentComponent","buildShipmentForm","setFormValidity","setShipmentData","removeShipment","ItemInformationComponent","initUnitPriceForItem","setTotals","getDielines","unitPrice","deleteItem","debounceTime","totalQuantity","price","totalPrice","ItemsInformationComponent","setAvailableItems","checkAllItems","onRemoveItem","itemsToAdd","onAddItem","availableItems","allItems","assignedItem","MiscellaneousItemComponent","priceGroup","miscItemGroup","formValues","fractionDigits","l","removeMiscItem","copyMiscItem","MiscellaneousItemsSectionComponent","miscItems","miscItem","getShipment","_z","itemToCopyDetails","addMiscItem","PoAccountingComponent","PoFormComponent","poAccountingService","selectCompanies","selectInventoryTypes","selectChannelTypes","selectPartnerGroups","selectPrinters","dataItem","requestItemsDetails","dropdownRequestItems","initPoDetails","buildPOForm","setPriceChangeListener","copyItemsFromRequestDetails","poForm","getLists","trackAccountingInfo","poDetailsCopy","accountingInfo","printerInfo","accountingSummary","Acct","Amt","CC","CHN","CO","LOB","apSummary","instructions","additionalCosts","freight","rebillRate","rebillTotalAmount","subTotal","taxes","stakeholders","approver1","approver2","approver3","buyer","printerDetails","printerSubscription","printerInfoGroup","fillMiscItemsForm","setBillingInfoListener","shouldRecalculatePrice","miscItemFormGroup","defaultTo","printers$","selectPrinterProvider","checkPOPrinterTypeChanged","setPrinterSubscription","addPrinterListener","setPrinter","companies","inventories","channels","lob","companyList","inventoryTypeList","chnList","lineOfBusinessList","getParentChild","setLOB","getFilteredPrintersSubscription","isPrinterInList","savedLOB","foundLOB","flatMapDeep","children","printerControl","itemsLengthChanged","miscItemsTotal","getSubTotal","getTotalQty","parseFloat","isAllShipmetsValid","saveOrUpdatePO","warehouseInfo","getShipmentData","updateSelectedItems","updateFormWithWarehouseInfo","replacePrinterName","replaceMiscItemShipmentsName","updateFormBillingInfo","updateItemsUnitPrice","getRebillTotalAmount","getTotal","getFormValidity","isPoProcessing","deletePoItem","onClosePO","maxTotal","MAX_PO_TOTAL","poSource","createPO","handlePoAction","newPo","onSuccessPO","PoSowAddComponent","Bl","ctx_r2","ctx_r30","ctx_r35","ctx_r47","ctx_r50","ctx_r53","ctx_r55","PoSowComponent","loadRefData","setPODetailsSubscription","getRefdata","lazyLoadCompanies","lazyLoadInventoryTypes","lazyLoadPartnerGroups","lazyLoadChannelTypes","lazyLoadPrinters","openPO","addNewSOW","openModal","poItemDetails","poType","disableCreatePo","requestItemsLoaded","getPOListener","sortByDate","blankState","poDataLoaded","getCompanies","CommitteeApprovalComponent","AtPrinterService","errorHandlingHttpClient","CardProdAtPrinterService","printerItem","milestone","printerId","milestoneId","createWorkItemMilestoneAsn","BulkChangeComponent","atPrinterService","loadingSubject","errorSubject","payload","bulkUpdateAtPrinter","catchError","getUploadLinkObservable","uploadLinks","ul","floor","ctx_r15","FileSelectorComponent","propagateChange","accept","isRestrictionTypeWarningExist","isFileFitsBySize","bytes","restrictionSizeTypeIndex","sizeType","fileSizeTypeIndex","log","pow","sizeNumber","_r1","$l","CardProductionBulkChangeComponent","shipDate","estimatedArrivalDate","updateOn","validators","validationObject","bulkForm","__rest","getUploadedFiles","uploadedFiles","milestoneIds","selectedItems","sI","asnFileIds","getSubmitRequestObservable","PrinterMilestoneComponent","uploadCardProductionWorkItemMilestoneAsn","deleteCardProductionWorkItemMilestoneAsn","formGroup","milestoneForm","milestoneFormSubscriptions","milestoneValuesChange","asnFiles","isChecked","milestoneCheck","elementId","printerIndex","milestoneIndex","Wl","ctx_r17","ctx_r23","AtPrinterComponent","buildOperationsNotesForm","request$","opsNotesForm","getPrinterData","setControlSubs","operationNotesLoading","printerItems","milestones","printerForm","requestLoading$","timeout","printerIdx","dialogResponse","__awaiter","extendMilestonesWithIsChecked","formPDFArray","buildPrinterForm","milestoneIdx","isCompleted","updateMilestoneDetails","onSuccessMilestoneUpdate","getCheckedMilestones","getCheckableMilestones","checkedMilestones","checkableMilestones","getRequestPrinterWorkItems","printerPDFItems","purchaseOrderReferences","pdfReferences","currentMilestoneForm","compare","x","WithDestroy","ngUnsubscribe$","AmMode","eu","ApprovalManagerService","msalAuth","userService","onRequestChange","requestItemsSubject","requestNameSubject","getArtworkFiles","flatMap","getVersions","af","resolutions","version","getRequestId","Authorization","getAccount","idToken","getVersionDocUrl","customHeaders","getDownloadHeaders","dotIndex","lastIndexOf","substring","filename","downloadUrl","responseType","saveAs","resp","selectedArtwork","versions","result","reviewFinalized","active","artworkFiles","getLatestResolution","getActiveVersionForFile","artworkFilesStatuses","isAnyArtworkFileInProgress","ARTWORK_SUMMARY_STATUSES","areAllArtworkFilesApproved","getValue","Dr","CardDesignApprovalManagerService","http","getUserRoles","requestItemId","artworkFileId","versionId","updateSingleItem","requestItem","getName","freeFormProductDescription","isTrafficManager","final","requestCurrentStageCode$","isRequester$","isDesigner$","view","design","xfdfString","overwriteFile","commentFileUrl","getArtworkFileStatuses","tu","ASSIGNED_TM_FIELD_NAME","CardDesignHostComponent","distinctUntilKeyChanged","removeRoleProvider","addRoleProvider","getUserDetails$","UserService","isAssigned","SpecificRoles","trafficManagerAssigned","specificRole","CardDesignService","uploadArtworkAttachment","csJob","dates","cdReviewRequired","quantityOfFiles","createArtwork","CardDesignPartnerDetailsComponent","selectRegions","selectDesignLineOfBusiness","RadioGroupFormComponent","errorMessage","CardDesignArtworkComponent","cardDesignService","selectArtLocationTypes","selectDesignSourceTypes","deleteArtworkAttachment","_request","attachments","artFiles","isArtworkReplacesExisting","artworkReplacesExisting","CUSTOMER_ARTWORK","onUpdateAttachments","designLineOfBusiness","artLocations","designSourceTypes","regionsList","designLineOfBusinessList","artLocationList","designSourceTypesList","CdItemComponent","setProductUpcSubscription","setMerchantSpecificSubscription","setMerchantSubscription","eventSub","oldStatus","removeItem","copyItem","getProductUPC","clearProductUPCInfo","isProductUpcLoading","getProductUpc","currencyType","currency","upcError","Tt","ctx_r9","DesignDetailsComponent","activatedRoute","masterFormStream","lazyLoadRegions","lazyLoadDesignLineOfBusiness","lazyLoadArtLocationsTypes","lazyLoadDesignSourceTypes","buildMasterForm","isAnotherRequest","isArtworkChangesRequired","artworkChangesNeeded","minFinalDate","firstRoundArtDeliveryDate","now","toDate","finalArtDueDate","regionCode","incommPrinting","designSourceTypeCode","artworkLocationTypeCode","artworkDescription","artworkChangesDescription","artworkReplacementFilename","artworkReplacementDescription","artworkAddedToExisting","artworkAdditionDescription","datesApproved","merchantSpecific","fscLogoRequiredInArt","formSubscriptions","detailsForm","setChoiceSubscriptions","selectedDesignSourceType","isArtworkLocationRequired","minDate","detailsItem","at","waitForRequestSave","saved","toISOString","WithTmAssignment","_loaderService","LoaderService","_store","Store","_actions","Actions","_fb","FormBuilder","_userPermissionsService","UserPermissionsService","_userService","canAssignTm$","canClearTm$","trafficManager","scan","assignedTm","assignTmForm","assignTmControl","isStepDisabledSubject","CAN_ASSIGN_TM","TM_AUTO_ASSIGN","mixinTmAssignment","expandedPanelsInitialized","panels","expandedPanels","panelExpandInitializationStrategy","expanded","WithPanelExpanded","mixinHasPanelExpandState","CardDesignFormService","wv","UserPermissionsV2Directive","viewContainer","roleProvider","templateRef","userPermissionsSubject","roles","isAllowed$","exhaustMap","arrayPermission","updateContainerRef","isAllowed","allowedChanged","createEmbeddedView","UsersService","userSearch","queryParams","normalizedGroups","groupKey","valueAs","getUsers$","users","makeLabel","makeValue","UserAssignmentComponent","usersService","userNameComparator","selectSearchDropdown","ItemsAssignSelect","writeValue","registerOnChange","registerOnTouched","setDisabledState","users$","getUserOptions$","userRoles","touchedOld","SelectSearchDropdownComponent","ArtworkItemStatusHeaderComponent","fileStatuses","approvalManager","getOverallArtworkFilesStatus","ctx_r21","ctx_r43","AppArtworkItemComponent","getNormalizedArtworks","defaultFilesUpdateHandler","requestTypeService","setValuesStrategy","_fileUpdateHandler","handler","fileUpdateSubscription","subscribeFileUpdateHandler","fileUpdateHandler","approvalManagerClick","artworkFile","currentVersion","removeArtworksFileFunction","itemCopy","markAsUntouched","approvalManagerService","latestResolution","AppDesignerAssignmentComponent","buildForm","getDesigners","setDesignerListener","designerControlTouched","designerControl","designerValue","getDesignerList","designers","getFullUserName","designerChange","aa","ctx_r22","TmReviewComponentBase","TmReviewComponent","cardDesignFormService","TrafficManagers","itemsControl","deleteArtworkItem","initForm","toggleControlsDisabling","setEventsSubs","getStakeholderContact","setControl","createFormItems","initExpandedPanels","toggleFirstRoundArtDeliveryDate","csJobId","onRequestItemsChange","itemControl","getRequestItem","onAddRequestItem","isValidated","approved","itemFieldset","openCloseModal","ei","openApprovalManager","selectedArtworkFileId","selectedRequestItemId","createDetailsForm","apply","getFormSubscriptions","toDisable","isDatesApproved","draft","ofType","regions","ArtworkDetailsComponent","pg","aggregate","altItem","dstItem","done","prototype","return","throw","G_","reject","ou","Ni","defineProperty","Response","DataView","ArrayBuffer","Uint8Array","buffer","TextEncoder","encode","String","File","lastModified","stream","isNaN","ReadableStream","isView","Symbol","asyncIterator","pull","V_","X0","desiredSize","enqueue","byteLength","A","match","pop","decodeURIComponent","f","WebAssembly","Instance","Module","atob","charCodeAt","exports","W_","subarray","getSeconds","getMinutes","getHours","getDate","getMonth","getFullYear","setUint16","setUint32","getReader","read","isInteger","metadata","sa","medias","initialNames","media","initialName","currentName","has","Infinity","ext","numberOfOccurences","previousInitialNames","concat","values","Pv","FilesProvider","checkCopies","allVersions","accAf","downloadVersion","catch","copyStrategy","Ei","PdfProvider","env","pdftronLicenseKey","fullAPI","licenseKey","enableAzureWorkaround","userDetails","results","hasErrorFiles","downloadFromViewer","artworkResults","compareWvInstance","docViewer","closeDocument","dispose","viewer","parentElement","removeChild","cvInstancePromise","WebViewer","webViewerConfig","createElement","style","display","appendChild","annotationManager","setCurrentUser","setReadOnly","getCompareViewerInstance","docLoaderListenerBase","onDownloadedSubj","initAnnotationUser","annotManager","j","getComments","comments","importAnnotations","doc","getDocument","options","getFileData","hasErrors","versions_1_1","downloadedSubj","firstChild","contentWindow","onerror","msg","addEventListener","callback","off","loadDoc","delay","versions_1","wvInstance","getDownloadRequest","downloadRequest","extension","getVersionFileExtension","loadDocument","PDFNet","runWithoutCleanup","PDFDoc","newDoc","initSecurityHandler","lock","Filter","createURLFilter","Convert","fromTiff","tiffFile","unlock","Zo","DownloadAllComponent","pdfProvider","filesProvider","showAnnotations","getAnnotatedFiles","getFiles","downloadZip","getUserDetails","fileProvider","href","download","click","useClass","ArtworkItemHeaderComponent","ctx_r20","_DesignProcessComponentBase","DesignProcessComponent","formBuilder","req","pgItem","CardDesignActions","cardDesignActions","updateTmReview2Stage","TmReview2Stage","TmReview2Component","initEventHandlers","initControlsSubs","updateForm","expandedItems","initFilesValidationHandler","initSubmitHandler","validateFilesStatus","completeStep","initFormItems","CreativeReviewComponentBase","CreativeReviewComponent","setEventSubscriptions","ClientProofComponentBase","ClientProofComponent","initRequestItemsFilesData","ri","initItemArtworkFilesData","getRequestArtworkFilesStatuses","artworkFilesStatus","requestItemToFilesStatus","TM_REVIEW_3_REQUEST_SELECTOR","TM_REVIEW_3_SUBMIT_EVENT_NAME","TmReview3BaseComponentPanelStateAwareAncestor","TmReview3BaseComponent","requestSelector","submitEventName","EXPANSION_PANEL_ANIMATION_TIMING","loading$","getArtworkFilesByStatus","TmReview3Component","useValue","xv","ASSIGNER_DESIGNER_FIELD_NAME","PREP_ARTIFACT_REQUEST_SELECTOR","REQUEST_TYPE_TO_ROLE_MAP","qd","PREP_ARTIFACT_SAVE_EVENT_NAME","PREP_ARTIFACT_VALIDATED_EVENT_NAME","PREP_ARTIFACT_SUBMIT_EVENT_NAME","ASSIGN_PREP_DESIGNER_SERVICE","PrepArtifactRoleProvider","rd","substitutedUsers","prepArtifactDesignerAssigned","PrepArtifactBaseComponentPanelStateAwareAncestor","PrepArtifactBaseComponent","prepArtifactRoleProvider","assignPrepDesignerService","saveEventName","validatedEventName","requestDetailsSnapshot","designerForm","buildDesignerForm","assignedDesigner","designerFormSubscriptions","stageName","designerCanAssign$","designerCanClear$","artworkItemNotes","prepArtifactsDesigner","mapTo","artPathNotesDto","updateArtPathNotes","PrepArtifactComponent","POST_ARTIFACT_REQUEST_SELECTOR","POST_ARTIFACT_SUBMIT_EVENT_NAME","UPDATE_ART_PATH_NOTES_SERVICE","PostArtifactBaseComponentPanelStateAwareAncestor","PostArtifactBaseComponent","updateArtPathNotesService","PostArtifactComponent","au","PopDesignApprovalManagerService","selectPopItemTypes","FsReviewPopDesignApprovalManagerService","itemDisplayed","financialServicesIncluded","Lv","PopDesignHostComponent","RandomUtilsService","abs","random","PopDesignFormService","jobDetails","additionalDetails","getContactControl","productionRequestRequired","promotionAssociated","promotionBankApproved","bleed","colorTypeCode","dimensionTypeCode","cmyk","cmykC","cmykM","cmykY","cmykK","pantoneDetails","height","fsProductLines","PopDesignArtworkFieldsetComponent","attachmentsChange","ItemTypeSelectComponent","entries","ColorTypes","ColorTypeSelectComponent","updateTriggerAware","cmykGroup","pantoneControl","colorTypeControl","colorTypesEnum","pms","PopItemComponent","_item","itemReplaySubject","toggleFsValidator","itemDescriptionRequired","fsProductLinesEnabled","getFsProductLines","oldValid","Rv","PopDetailsComponent","popDesignFormService","selectPopChannelTypes","selectColorTypes","selectDimensionTypes","selectFinancialTypes","lazyLoadPopChannelTypes","lazyLoadPopItemTypes","lazyLoadColorTypes","lazyLoadDimensionTypes","lazyLoadFinancialTypes","setInitialDetails","popItemTypes","colorTypes","dimensionTypes","financialTypes","createDetailsFieldset","shouldCreatePopProductionControl","productionRequestReference","request_id_name","isCopy","itemFormGroup","getItemFormGroup","fspl","checked","FINANCIAL_SERVICE_STATUSES","UNREVIEWED","APPROVED","REJECTED","PopDesignService","createFinancialServicesArtwork","createPopDesignArtworkAttachment","SkipWhileOperator","SkipWhileSubscriber","skipping","tryCallPredicate","Boolean","PopRequestChannelComponent","skipWhile","PopDatesSectionComponent","PopArtworkDetailsComponent","PopRequestItemInfoHeaderComponent","model","PopRequestItemFsProductLinesComponent","fs","fsi","PopRequestItemInfoBodyComponent","colorType","PopRequestItemComponent","PopProductionAssociationComponent","SUBMITTION_FS_PRODUCT_LINE_STATUSES","PopFinancialReviewComponent","eventsService","popDesignService","datePipe","UNAPPROVEAD","AVAILABLE","SUBMITTED_BY_ME","SUBMITTED_BY_ANOTHER","UNAVAILABLE","fsAttachments","submitted","fsProductLine","offerDetailsAcceptable","disclaimersCorrect","disclaimersCorrectDetails","conditionalRequiredValidatorFactory","cardsArtCorrect","cardsArtCorrectDetails","artFilePath","submissionAvailable","memoize","createFinancialServicesArtworkFile","attchmentId","attchment","fsAttachment","username","createdAt","deleteFinancialServicesArtworkFile","field","ac","parent","onSubmit","form$","itemIdMap","submittedCodes","fsProductLinesMap","financialTypes$","itemHasChangeMessage","hasItemChange","hasItemChangeMessage","fs_product_lines","updateRequestItemWithFinancialServicesProductLines","warning","successLines","failedLines","codes","failedCodes","successCodes","responsedItem","responsedItemIndex","productLine","getCurrentUserName","sc","fc","successfully_sent","submission_failed","fsProductLineStatuses","fsProductLineStatus","ITEM_STATUS_ICONS","reduced","fieldName","PopRequestItemFsProductLinesFormComponent","Mi","ctx_r34","ctx_r40","PopTmReviewComponentBase","PopTmReviewComponent","fsTypes","fsType","setControlsSubs","deliveryDateStateChangeOptions","createDetailsFeildset","fieldset","getFinancialTypes","initFormItem","getItemFieldset","enabledArr","disableItemFieldset","financialServicesDisabledFields","handleDatesApprovedChange","initFormValidationHandler","_PopDesignProcessComponent","PopDesignProcessComponent","PopDesignActions","popDesignActions","PopRequestItemTypeHeaderComponent","PopTmReview2Component","setIsTrafficManager","PopFinancialReview2ComponentBase","PopFinancialReview2Component","filterRequestItems","PopClientProofComponentBase","PopClientProofComponent","PopTmReview3Component","PopPrepArtifactComponent","PopPostArtifactComponent","UniqueNameValidator","reverse","unique","FUNDING_CODE_REQUIRED","QUOTE_ONLY","PopFinanceDetailsComponent","selectPopProdFundingTypes","fts","ft","mask","tooltip","formGroupSubscriptions","fgs","fundingTypeMasks$","fundingTypeHints$","masks","hints","fundingTypeHint","fundingCodePlaceholder","fundingCodeRequired","fundingCodeField","removeValidators","fundingCodeMinLengthValidator","addValidators","_oldControl","setUpFormGroups","lazyLoadPopProdFundingTypes","ctx_r19","ctx_r41","ctx_r44","AUTOPOPULATE_BY_ITEM_TYPE","materialTypeCode","INSTRUCTION_SHEET","PopProdItemCommonFormComponent","material","tape","cutting","selectPopProdUsageDurationTypes","selectPopProdCuttingTypes","selectPopProdMaterialTypes","selectPopProdTapeTypes","_requestItem","requestItemExtraLogic","checkSideNumberTypeCode","versionsControls","clearShipmentQtyValidators","setShipmentQtyValidator","setControlListeners","setVersionsQtyCalculation","refdata$","cuttingTypes","materialTypes","tapeTypes","usageDurationList","itemTypeList","warehouses","availableShipmentQtyHintSubject","versionsQtySubject","maxVersionsQty","availableVersionsQty","maxValueLimit","getShipmentsTotalQty","initCheckOtherCodes","formDisabledTrigger","valueMap","setFormItemsState","sideNumberTypeCode","kitLabellingComments","shippingInstructions","materialNotes","tapeNotes","cuttingNotes","packingTypeCode","kitLabeling","directShipments","checkOtherCode","displayNotesInputs","productionQuantityStream","versionsControlsStream","isInfoMode","versionItem","setParent","PopProdItemComponent","popProdService","setControlsSubscriptions","kitShippingTypeCode","Vv","PopProdDetailsComponent","popProductionService","selectPopProdEventTypes","uploadAttachments","removeAttachments","lazyLoadPopProdEventTypes","lazyLoadPopProdUsageDurationTypes","lazyLoadPopProdItemTypes","lazyLoadPopProdCuttingTypes","lazyLoadPopProdMaterialTypes","lazyLoadPopProdTapeTypes","getPopPPMList","fundingTypes","events","setPPM","setPrinterQuoteListener","setArtTypeCodeListener","isArtTypeDisabled","partnerAttachmentControl","isPopDesignIdLoading","additionalAttachments","partnerArtAttachments","channelTypeCode","eventTypeCode","promoTypeCode","promoDateRange","artTypeCode","printQuoteOnly","startDate","endDate","DATE_SERIALIZE_PATTERN","kitLabelingComments","usageDuration","usageDurationTypeCode","tapeTypeCode","cuttingTypeCode","versionQuantities","directToStoreShipments","versionName","versionNumber","merchantsControls","pushNewMerchant","detailsFormSubscriptions","setPartnerArtAttachmentError","miscCostEstimate","getItemDescription","getDateRange","costEstimate","range","promoTypeCodeName","dateRange","getPPMList","ppmList","ppm","designRequestReferenceControl","partnerRequired","MIN_VERSIONS_QTY","itemVersionsControls","itemShipmentsControls","getItemShipment","getItemVersion","merchantFormGroup","getMerchantFormGroup","merchantName","getPopDesignId","popDesignIdSearch","documents","isVisible","inQueueJobReferenceControl","PopProdRequestDetailsBlockComponent","event$","getCodeNameItemFromStore","channel$","selector","codeNameValues","PopProdFinanceDetailsBlockComponent","PopProdArtworkDetailsBlockComponent","PopProdMerchantDetailsBlockComponent","PopProdProductionReviewComponent","initValidationHandler","initStepSubmitHandler","initStepRollbackHandler","routeBack","controlsConfig","reqItemControls","PopProdItemCommonComponent","usageDurationTypes","PopProdPrinterQuoteComponent","isSubTotalMax","isTotalCostEstimateMax","MAX_POP_PROD_COST_TOTAL","printerQuoteAttachments","subtotal","totalCostEstimate","maxPopProdCostTotal","toString","notQuoteOnlyValidator","quoteOnlyRestricted","PopFinanceDetailsRequestorReviewComponent","restrictQuoteOnlySubject","restrictQuoteOnly","codeName","isDisabledSubject","fundingTypeField","PopProdRequesterReviewComponent","convertToForm","isDesignRequestReferenceVisible","buildConvertToForm","setSubmitStepListener","convertToFormValue","designRequestReferenceValue","updateConversionToProduction","convertFormSubscriptions","convertToProd","setConvertToListener","initLabel","changeButtonLabelOfStage","PopProdFinanceApprovalComponent","PpPoSowManageService","PopProdVersionListComponent","ItemShipmentFormComponent","PopProdPoFormComponent","itemsArr","getShipmentsGroup","isTotalMaxError","itemQuantity","newItem","shipmentIdx","newShipment","PopProdSowFormInfoComponent","initRefData","dimensions","colors","cuttings","materials","tapes","durationType","dimensionType","cuttingType","materialType","tapeType","itemType","PopProdSowFormComponent","initRefdata","h","g","_0","_1","PopProdPoSowItemInfoComponent","ctx_r52","ctx_r54","PopProdPoSowComponent","selectPopProdInventoryTypes","lazyLoadPopProdInventoryTypes","inventoryList","fundingList","emptyPo","isBlankState","PopProdVendorProofComponent","uploadItemPrinterProofForRequestItem","deletePrinterProof","toggleform","stepSubmit","printerProofNotes","printerProofs","PopProdVendorProofIntComponent","printerProofReview","_map","review","isAllPrinterProofsApproved","PopProdAtPrinterService","n_","PopBulkChangeComponent","isEqual","noChanges","PopProdPrinterMilestoneComponent","it","itItem","uploadWorkItemMilestoneAsn","deleteWorkItemMilestoneAsn","cu","ctx_r36","PopProdPrintComponentBase","_PopProdPrintComponentBase","PopProdPrintComponent","updateQueueSubject","printerItemsSubject","pi","printerItems$","uncompletedRequests","ms","setPrinterItems","updateQueue$","checkedMilestones$","checkableMilestones$","printerForm$","pIdx","FsrRequestItemFormComponent","i_","FsrDetailsComponent","fsRequestService","lazyLoadFSPaymentTypes","setRequestDetails","reqDetails","requestDetailsForm","getEmptyItemDetails","setPaymentProofsError","isPaymentTypeRebill","paymentProofsRequired","innerKey","itemKey","shimpment","pushNewItemFormGroup","componentType","pkid","artworkItems","PKID_MAX_LENGTH","selectFSPaymentTypes","isPrintProductionManagerLoading","FsrFinanceApprovalComponent","FsrPoManageService","fsService","FsPoService","projectTotal","existingInventory","poNumber","componentDetails","initItemComponentDetails","getFormitemShipments","getFormItemComponentDetails","isItemOrderQtyAllocated","getFormItemShipment","getEmptyFormComponentDetails","getQtyEaches","ctx_r1","FsrPoFormItemDetailsComponent","enabled","togglePoNumberInput","qtyInEaches","componentTotalPrice","updateFormFieldsValidity","deleteItemDetails","detailsIndex","RequestItemShipmentComponent","isShipmentRequired","checkShipmentRequired","setShipToListener","handleQtyChange","changeQty","RequestItemShipmentsComponent","shipmentOptions","getShipmentOption","initShipmentOptions","emptyShipmentControl","usedQty","cur","FsrPoFormItemComponent","fsPoService","currControls","itemTotalPrice","div","emptyForm","getEmptyComponentDetails","FsrPoFormComponent","poManageService","fsrService","initDialogData","initItemsArr","initPrinter","initAvailableItems","setPoDetailsCopy","T","S","isProjectTotalMaxError","getFormItem","checkIfDataChanged","componentTotals","acc1","mistTotals","getProjectTotal","dataCheckCustomizer","initDialogPrinterList","initialPoForm","getMiscItemControl","isItemsOrdersQtyAllocated","FsrPoItemComponent","ctx_r27","FsrPoComponent","poService","selectComponentTypes","initRequestData","initPODetailsSubscription","initUserData","lazyLoadComponentTypes","componentTypes","componentTypesList","submitStep","poItems","confirmStepSubmit","FsrApproveRequestComponent","subs","FsrAtPrinterService","s_","FsrBulkChangeComponent","fullyCompletedPoIssued","isFullyCompletedPoIssuedChecked","filesUploadLinks$","FsrPrinterMilestoneComponent","du","FsrAtPrinterComponent","BifProductionService","createUploadItemPrinterProofUrl","createBifAttachment","pu","BifDetailsComponent","bifProductionService","isBifPpm","getBifPpmList","getData","proofsOfPaymentAttachments","emptyItemForm","emptyShipmentForm","_isRebillTypeRequired","_isRebillAmountRequired","amountControl","percentageControl","_isRebillPercentageRequired","monthlyBilling","lobTypeCode","partner","rebillTypeCode","rebillPercentage","partnerInvoiceNumber","artworkLocation","replenishWithArtChanges","skuCode","oversIncludedInQty","packageId","componentDescription","packingNotes","toggleMonthlyRelatedControlsDisabling","monthlyBillingControl","monthlyRelatedControls","shipmentGroup","data$","lobList","fulfillmentTypes","isRebillTypeRequired","isRebillAmountRequired","rebillTypeCodeControl","isRebillPercentageRequired","updateRebillTypeRequired","partnerPOControl","rebillPercentageControl","rebillAmountControl","updateAmountPercentageRequired","BifProdItemComponent","bifDetailsComponent","isComponentDescriptionRequired","isComponentTypeOther","isMonthlyBilling","isReplenishRequired","isTypeReplenishment","isRushJobVisible","_isReplenishRequired","_isComponentDescriptionRequired","orderQuantityControl","mixinHasUpdateTriggerListener","WithUpdateTriggerListener","STAGE_ALLOWED_ITEM_FIELDS","BifUploadArtworkComponent","multicast","requestSubect","notNull","toggleItemsForm","skip","formItem","formItemIndex","BifFinanceApprovalComponent","BifPoManageService","bifService","BifPoService","isMonthly","channelForMonthly","discount","credit","rebillRateAmount","rebillRatePercentage","rushFee","packageIdSetupFee","programming","other","batchFee","subtotalByItem","BifPoAccountingService","companyField","presetMonthlyBillingChannelSelection","BifPoFeesComponent","AppPercentInputComponent","BifPoFormItemSubheaderComponent","BifPoFormItemComponent","bifPoService","BifPoFormComponent","MAX_PO_SUB_TOTAL","MAX_BIF_REBILL_TOTAL","isSubTotalMaxError","isRebillTotalMaxError","onItemsChange","fees","discountAmount","minus","maxBifTotal","maxSubTotal","sumSubtotalByItems","getInitialPoForm","componentTypeMap","BifPoMonthlyFormItemComponent","BifPoMonthlyFormComponent","getMonthlyFormItem","BifPoItemComponent","d_","BifPoComponent","getEmptyPo","BifPrinterProofComponent","uploadPrinterProofForRequestItem","printerProofForm","isFilesUploaded","BifInternalPrinterProofComponent","printerProof","setValidationSubscription","setSubmitSubscription","BifAtPrinterService","m_","BifBulkChangeComponent","bulkFormTemplate","initFormChangeSubscription","BifPrinterMilestoneComponent","hu","BifPrintComponent","conditionalParentRequiredValidator","condition","rebillRateValidator","root","incommPurchaseYRequired","conditionalRequiredValidator","ThirdPartyFormBuilderService","isCostco","isUSA","childCard","isNew","childNumber","dieline","denomType","substrateTypeCode","openDenomRange","warhouse","redemptionTestingRequired","dataPinFileTypeCode","emptyMerchant","emptyShipment","itemShipmentFormGroup","specialProjectNumber","masterCaseSize","upcRequiredInArt","pidIdNumber","costcoItemNumber","costcoRequired","bestBuyRequired","uabRequired","printerFormControl","childCards","emptyChildCard","childCardFormGroup","cc","whiteProdCardQuantity","cardCollateralDetails","finishedProdCardQuantity","whiteDevCardQuantity","incommPurchased","contactsFormGroup","printOwnerTypeCode","externalContactName","externalContactEmail","externalContactAdditionalDetails","paymentTypeCode","financeProofsOfPayment","financeNotes","ThirdPartyProductionService","actions$","createOperationsAttachment","operationsDetails","ngUnsubsribe","saveAction","pointers","tps","dielineTypeCodes","tpsReturnFileTypeCodes","tpsDetails","tpsId","createSowAttachment","ThirdPrinterOwnerComponent","thirdPartyService","isIncommPurchased","firstChange","resetIncommPurchasedValidators","getIssuers","issuerList","ThirdFinanceDetailsComponent","isPartnerPoNumberVisible","DelayWhenOperator","delayDurationSelector","DelayWhenSubscriber","delayNotifierSubscriptions","outerValue","_innerValue","_outerIndex","_innerIndex","innerSub","removeSubscription","tryComplete","_error","delayNotifier","tryDelay","subscription","subscriptionIdx","notifierSubscription","subscribeToResult","closed","OuterSubscriber","SubscriptionDelayObservable","subscriptionDelay","SubscriptionDelaySubscriber","Observable","sourceSubscribed","unused","subscribeToSource","ThirdPartyItemShipmentsComponent","thirdPartyFormBuilderService","productionQtyControl","ThirdPartyProductionQtyComponent","ThirdPartyItemFormFactorComponent","checkPrinterTypeChanged","setFormSubscriptions","resetIsEuropeanControls","resetMicrosoftControls","encodingSubscription","dielineSubscription","newDieline","isMultipackTipVisible","ThirdPartyChildCardComponent","itemProductionQty","itemProductionQtySubject","ThirdPartyChildCardsComponent","h_","ctx_r28","ThirdPartyItemComponent","fromFactorService","thirdPartyFb","selectThirdPartyDataPinFileTypes","scheduled","animationFrameScheduler","delayWhen","timer","resetIncommPurchasedControls","lazyLoadThirdPartyDataPinFileTypes","isEuropean$","countryList","wpnData","multipackTrigger$","checkIsMicrosoftIssuer","getFormattedItemData","sleeveSize","ThirdDetailsComponent","thirdPartyProductionService","selectThirdPartyPrintOwnerTypes","emptyReqItemObject","formSource","stepActiveSubject","emptyItem","asyncScheduler","setPrintOwner","normalizeFormData","lazyLoadThirdPartyPrintOwnerTypes","setInitEssentialReqData","getPpmList","onRequestDetailsValidation","getSumRebillAmount","getAllItemsOrderQty","currentData","itemData","printOwnerTypes","printOwnerTypesOriginal","filterPrintOwnerList","isPurchased","ThirdPartyItemBodyComponent","ThirdFinanceApprovalComponent","ThirdArtApprovalComponent","ThirdPartyPoSowManageService","checkShipmentQuantityValidatorFn","sowItem","totalQuantityGte","ThirdPoService","quantityInEaches","getSowItemShipment","testCardShipment","_name","_2","ThirdPoManageService","thirdService","isSowStandalone","header","descriptopn","deleteTps","ThirdPoFormItemComponent","setSubtotalByItemCalculation","shipmentsFormArr","priceDecimal","ThirdPoFormComponent","thirdPoService","thirdProductionService","getPoItemForm","itemsTotal","maxPoTotal","formItems","dialogItems","itemRebillAmount","ctx_r56","ctx_r58","ThirdSowFormItemComponent","shipToSubscriptions","shipmentsControlsArray","addShipment","ThirdSowFormComponent","sow","createSowFromPo","sowCopy","clonedPo","sowAttachments","sowPackagingSpec","encodingTypes","itemShipment","mergeWith","objValue","srcValue","isArray","sv","sk","arrayComparrator","ov","debug","ngOnInit","activeValue","persistedValue","object","isObject","difference","itemComponent","rxjsMerge","itemsControlsArray","typedControls","testCardShipmentControl","typedControl","ThirdSowStandaloneFormItemComponent","setListeners","ThirdSowFormStandaloneComponent","createSowFromRequest","onPrintersRecieved","clonedStandaloneSow","sowStandaloneForm","getInitialSowStandaloneForm","getSowStandaloneItemForm","sowOnly","onSuccessSowStandalone","deleteSowStandaloneItem","saveOrUpdateSowStandalone","EmailTpsService","b_","EmailTpsComponent","emailTpsService","userSettingsService","to","bcc","loadSignatureSubject","emailTpsTemplates$","getEmailTpsTemplates","signature$","getEmailSignature$","emailTpsTemplateOptions$","templates","emailForm","createForm","sign","html","arrayRequiredValidator","arrayEmailValidator","defaultSubject","emailTemplate","sendEmail","emailOptions","tpsData","emails","chipInput","inputElement","section","SETTINGS_GROUPS","TpsItemComponent","tpsItemForm","tpsReturnFileTypeCode","childsReturnFile","card","tpsPrinterName","tpsPrinters","TpsBulkChangeComponent","itemsIds","itemIds","TpsComponent","initSelectedItemsArr","tpsForm","additionalComments","deletedItem","selectedBulkItems","isBulkDisabled","getBulkStatus","downloadTpsReport","dielineTypes","isTpsProcessing","callTps","isTpsItemsValid","tpsItems","tpsFormValue","prepareDataForSave","tpsSource","createTps","handleTpsAction","onCloseTps","property","getSelectedItems","prop","onSuccessTps","currentItemFormValues","childCardIndex","CcBulkChangeComponent","isZeroDevQtyWarningVisible","bulkUpdateCCItems","ThirdCardCollateralConfirmationComponent","initSelectedCCArray","groupedItems","orderBy","groupBy","patchForm","processorGroupedRequestItems","buildProcessorGroupedRequestItems","ccd","elementName","itemsArray","devCardRanges","isModalConfirmed","updateCardCollateral","itemCardCollateralDetailsFormGroup","selectedCC","resultStr","selectedCc","selectedCcIndex","markAsPristine","processorGroup","ThirdPoSowItemInfoComponent","fa","ctx_r68","ctx_r72","ctx_r75","ctx_r110","ctx_r115","ctx_r123","ctx_r128","ctx_r134","ctx_r139","ctx_r161","ThirdPoSowTpsComponent","thirdPoManageService","thirdPartyPoSowManageService","envService","selectReturnFileTypes","initStageListeners","initTpsSubscription","lazyLoadReturnFileTypes","openTps","openSowStandalone","openSow","returnFileTypes","getRequestTpsListener","isTpsBlankState","tpsDataLoaded","requestName","emptySowStandalone","sowStandalone","poOrSow","sowStandaloneDetails","isBlankStateSow","createDocumentGroups","documentGroups","incommPurchasedType","itemsLength","isEveryCardCollateralConfirmed","showCollateralRequiredMessage","showPoRequiredMessage","showTpsRequiredMessage","getItemPrinters","totalPrintQuantity","ThirdConfirmPrinterComponent","filterListedItems","setPrintersForListedItems","buildItemsForm","listedItems","isPrinterConfirmed","confirmedPrinters","relatedItem","storedItem","stepData$","cachedPrinters","getFilteredPrintersForItem","ThirdBulkChangeComponent","artApprovedDate","devReturnFileReceivedDate","devReturnFileLoadedDate","prodReturnFileReceivedDate","prodReturnFileLoadedDate","devTestCardsReceivedDate","whiteProdCardsReceivedDate","prodCardsActivatedForPartnerDate","prodCardsSentToPartnerDate","prodCardsRedeemedSuccessfullyDate","approvedDataProofToPrinterDate","approvedLabelProofToPrinterDate","inCommDataFileUploadedToCfsDate","bulkUpdateItems","ManageCardFilterComponent","CardRangeTableHeaderComponent","element_r22","CardRangesTableComponent","formDirective","addRange","startRange","endRange","dateReceived","rangeLoadRequestDate","launchManager","rangeLoadCompleteDate","binLoadRequired","snowTicket","DatePickerHeaderComponent","rangeDelete","rangeType","currentRangeType","optionRangeType","q_","ManageCardRangedBulkComponent","THIRD_MAX_RANGES_PER_ITEM","initFilterForm","initItemsForm","cr","cardRangesRequired","whiteDevCardQuantityIsZeroItem","cardRangeToCardRow","prodCardRanges","whiteDevCardQuantityIsZeroCard","tableForm","ranges","cards","rangeFactory","rangeFormGroup","rowListeners","activateListener","cardRanges","initialFormValue","rowId","listeners","listenerRegistry","listener","cardIndex","whiteDevCardQuantityIsZero","blankRangeFactory","rangesRow","rangeFormGroupIndex","rl","rangeGroup","disableFieldsObservable","startRangeObservable","endRangeObservable","observables","filterForm","bulk","confirmAction","bulkFieldName","bulkFieldValue","cardFormGroup","cardRange","hasChanges","differenceWith","isValid","formValue","rowToCardRange","bulkUpdateCardRanges","MAT_RADIO_GROUP_INTERCEPT_CONTROL_VALUE_ACCESSOR","AppInterceptableRadioGroupDirective","shouldConfirm","confirmDialog","_controlValueAccessorChangeFnReal","MatRadioGroup","MAT_RADIO_GROUP","RadioGroupFormConfirmComponent","ThirdOperationsRangeDetailsComponent","isProdRange","ThirdOperationsCardInfoComponent","prodCardRangesArray","devCardRangesArray","emptyDevRangeForm","emptyProdRangeForm","setChildFlagValidators","isItChildCard","returnFileTypeCode","isChildFlagBlockVisible","returnFileTypeControl","rangeIndex","cardRangeRemove","ThirdOperationsItemFormComponent","operationsDetailsForm","childIdx","childCardsArray","devDataRequestControl","prodDataRequestControl","isLoading","devDataRequestControlValue","devDataRequestRelatedControls","childForm","prodDataRequestControlValue","prodDataRequestRelatedControls","mr","ThirdIntExtOperationsComponent","uploadOperationsAttachment","deleteOperationsAttachment","pendingItemUpdates","pendingUpdates","hasPendingUpdates","pendingNotesUpdates","pendingNoteUpdates","hasPendingNotesUpdates","getPrintersCached","printerEntries","itemPrinters","openedState","validatePendingItemsSaved","maxWidth","minWidth","childFlagRequired","populateItemArrays","rdLoading","renewFromServer","inCommDevDataRequest","inCommDevDataRequestDate","inCommDevIdmsFfid","inCommDevDataPostedToPrinterDate","inCommProdDataRequest","inCommProdDataRequestDate","inCommProdIdmsFfid","inCommProdDataPostedToPrinterDate","devRangeForm","rangeItem","prodRangeForm","addProdRangeFormListener","emptyChildForm","childDevCardRanges","childProdCardRanges","enabledItemsCount","prodRangeListeners","ThirdAtPrinterService","I_","ThirdInProductionBulkChangeComponent","finishedProdCardsReceivedDate","bigBoxSamplesProvided","isBigBoxSamplesChecked","ThirdPrinterMilestoneComponent","isBigBoxSamplesAvailable","bu","ThirdInProductionComponent","milestoneItem","productItem","UniqueComponentCodeValidator","IhProdItemComponentDetailComponent","selectIhComponents","IH_LABELS_QUANTITY_MULTIPLIER","updateQtyValidators","componentCodeControl","componentForm","quantityControl","IhProdItemComponent","IH_MAX_PACKAGES","IH_MAX_COMPONENTS_PER_ITEM","selectIhPrioritiesPrioterized","isFulfillmentTypeRequired","isPackageIdNew","isPriorityCodeRequired","isRushOrder","packages","emptyPackageForm","_isFulfillmentTypeRequired","_isPriorityCodeRequired","isBeforeToday","w_","IhDetailsComponent","selectIhHealthPlans","selectIhHealthPrograms","MAX_ITEMS_PER_REQUEST","lazyLoadIhComponents","lazyLoadIhHealthPlans","lazyLoadIhPriorities","getRequest","clearIhHealthPrograms","pushItemForm","componentCode","packageIdTypeCode","expirationDateOnCard","nameOnCard","rushOrder","priorityCode","healthPlanCode","healthProgramCode","loadIhHealthPrograms","formComponent","componentIdx","getLabelForCode","healthPlans$","healthPlanName","healthPrograms$","healthProgramName","options$","targetCode","components","packageForm","packageItem","emptyComponentDetailsForm","componentItem","IhArtworkFilesAwareModel","UploadArtworkDetailsSharedComponent","parentForm","requestModel","IhItemComponentComponent","isUploadArtworkStep","IhItemHeaderComponent","IhItemSubheaderComponent","selectIhPriorities","IhItemBodyComponent","IhUploadArtworkItemComponentComponent","IhUploadArtworkComponent","uploadArtworkIhForm","uploadArtworkArray","componentDetailsItem","checkIsFileUploaded","limitsExceeded","isLimitExceed","uploadArtworkItemComponents","uploadArtworkItem","setErrorAndMarkArtworkControlAsTouched","uploadArtworkDetailsComponents","uploadArtworkDetailsComponent","ihItemComponents","ihItem","runChangeDetection","packageIndex","shouldSetErrors","fileUploaded","isLimitExceededForCostQuote","isLimitExceededForCostTotal","getEstimatedCostTotal","isFileUploaded","uploadArtworkItemComponent","IhCostTotalComponent","IhRequesterReviewComponent","flatten","isAllArtworkItemsApproved","AbstractUnsubscribableRequestStepComponent","IhProductionRequestService","IhPoManageService","ihRequestsService","IhPoFormService","otherFee","getSubtotalByComponent","IhPoFormComponentDetailsComponent","ihPoFormService","detailIndex","IhPoFormItemComponent","isComponentDescriptionExist","isOneComponentDescriptionExist","IhPoFormComponent","ihProductionRequestService","initItem","getTotalQtyByItem","maxIhProdCostTotal","IhPoItemComponent","yu","ctx_r33","IhPoComponent","componentTypes$","poDetails$","resetPO","isRequestor","IhQuoteProcessComponent","IhProductionService","createIhAttachment","IhPrinterProofComponent","ihProductionService","uploadPrinterProofForRequest","uploadPrinterProofControlsArray","showMatErrorForUpload","printerProofRequired","IhInternalPrinterProofComponent","printerProofFile","IhAtPrinterService","A_","IhBulkChangeComponent","IhPrinterMilestoneComponent","typeNameMap","qu","IhPrintComponent","k_","ImageHostComponent","ImageRequestService","createArtFile","ImageFormatService","BUY_ONLINE","TOKENIZATION","ImageBrandComponent","imageRequestService","brandName","brandDataLoading","getBrands","brandList","ImageItemFormComponent","setWpnSubscriptions","isWpnExistInMDM","maxDcmsIdItem","Iu","ImageDetailsComponent","imageFormatService","MAX_ITEMS_PER_IMAGE_REQUEST","selectImageFormatTypes","uploadArtFile","deleteArtFile","lazyLoadImageFormatTypes","existingPartner","imageFormatTypeCode","getItemForm","emptyItemDetails","imageFormatTypes","artLocationTypes","isBuyOnlineTipVisible","isTokenizationTipVisible","IMAGE_DENOM_PATTERN","ImageActions","imageActions","updateDesignerChoice","UpdateDesigner","ImageDetailsBlockComponent","$refData","ImageItemBlockComponent","completedControl","ImageTmReviewComponentBase","ImageTmReviewComponent","buildTmForm","tmForm","setStepSubmitListeners","handleDesignerChange","updateFinalArtFilePath","ImageDetailsAccordionComponent","ImageDesignProcessComponent","updateItemCompletedFlag","ImageTmReview2Component","S_","ctx_r45","ctx_r60","ctx_r80","ctx_r100","ctx_r116","ctx_r127","ctx_r153","ctx_r160","RequestStepDetailsComponent","injector","isRequesterState","selectValueOfPPM","downloadPrinterQuoteStagePdf","isPpm","downloadFsrDetailsStagePdf","print","isNotInProgress","RequestActionButtonFilterPipe","pure","RequestActionsComponent","actionButton","ActionsNotesService","actionNotesSubscription","RequestActionNoteComponent","actionsNotesService","stepperSubscription","getActionNotesSubscription","submittedAt","ActionHistoryService","RequestCommentsTabComponent","actionHistoryService","REQUEST_CREATED","REQUEST_COMPLETED","REQUEST_ACTIVATED","REQUEST_TERMINATED","STAGE_ROUTE_BACK","STAGE_PERFORMED","STAGE_CANCELED","FILE_APPROVED","FILE_REJECTED","FILE_UPLOADED","FILE_REMOVED","PRINTER_MILESTONE_COMPLETED","PRINTER_MILESTONE_COMPLETION_CANCELED","PRINTER_WORKITEM_COMPLETED","STAGE_ACTIVATED","FS_PRODUCT_LINE_REJECTED","FS_PRODUCT_LINE_APPROVED","REQUEST_REASSIGNED","TPS_CREATED","TPS_DELETED","REQUEST_OWNER_CHANGED","PRODUCT_OWNERS_REFRESHED","PO_CREATED","SOW_CREATED","PO_EDITED","PO_AND_SOW_EDITED","SOW_EDITED","PO_DELETED","PO_AND_SOW_DELETED","SOW_DELETED","STAGE_ASSIGNED","STAGE_UNASSIGNED","REQUEST_ASSIGNED","REQUEST_UNASSIGNED","CONTACTS_UPDATED","updateActionHistory","getRequestActionHistory","historyEntries","errorState","entry","actionData","iconMapping","MatMenuProxy","matMenu","matMenuItem","_getHostElement","_hovered","_focused","AddAdditionalOtherContactsFormComponent","FormArray","AddAdditionalOtherContactsButtonComponent","matMenuProxy","parentMenu","setMatMenu","setMatMenuItem","MatMenuItem","RefreshProductOwnerButtonComponent","success","ChangeOwnerFormComponent","ChangeOwnerButtonComponent","_parentMenu","oldUserName","ChangeTrafficManagerFormComponent","selectedTM","assigned","userControl","ChangeTrafficManagerButtonComponent","withLatestFrom","changedBy","ga","ctx_r62","RequestDetailsComponent","route","finalizeStageService","titleService","requestSpecificRoleProvider","DUPLICATE_SUPPORTED_REQUEST_TYPES","changeRequestOwnerInfo","isMenuItemVisible","visible","REQUEST_STATUSES","IN_PROGRESS","DRAFT","isRequestInProgress","itSupportedRequestType","labelId","DAR","TERMINATED","selectionRoles","requestDetailsController","requestDetailsStageController","fromStage","toStage","validate","setRequestActionButtonsListeners","setTitle","cachedStepsSet","getRequestNameListener","changeCurrentState","fireStepChangeEvent","commentCount","designDeliveryDate","calculateDeliveryDate","currentAction","updateCurrentStepActions","requestDetailsCombined","openRequestNameModal","reassignPpmInfo","ppmSearchGroup","ppmName","linkedProductionRequestReferences","getTerminationModalReasoned","confirmResult","getLinkedItem","external","requestActionsActive","getActionsButtons","requestActionButtons","findCurrentStep","performAction","finalizePendingOperations","associatedPopDesign","ppmGroup","stepIndex","currentStepIndex","requestIsBifProductionMonthlyBilling","deleteRequest","duplicateRequest","duplicatedRequest","REQUEST_LIST_SEARCH_MODES","my","DEFAULT_REQUEST_LIST","order","RequestSearchItemDataSource","firstPage","totalCount","pageSize","requestListService","cachedData","dataStream","collectionViewer","viewChange","startPage","getPageForIndex","start","endPage","end","fetchPage","page","fetchedPages","fetchRequestList","DataSource","MapShim","__entries__","class_1","enumerable","configurable","getIndex","_i","isBrowser","global$1","requestAnimationFrame$1","requestAnimationFrame","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","leadingCall","trailingCall","lastCallTime","proxy","resolvePending","timeStamp","timeoutCallback","throttle","REFRESH_DELAY","addObserver","connect_","removeObserver","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","RV","attributes","childList","characterData","subtree","removeEventListener","disconnect","propertyName","getInstance","instance_","defineConfigurable","writable","getWindowOf","ownerDocument","defaultView","emptyRect","createRectInit","positions","toFloat","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","bbox","getSVGContentRect","clientWidth","clientHeight","getComputedStyle","paddings","positions_1","getPaddings","horizPad","left","right","vertPad","top","bottom","boxSizing","getBordersSize","documentElement","isDocumentElement","vertScrollbar","horizScrollbar","getHTMLElementContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","rect","getContentRect","broadcastRect","ResizeObserverEntry","rectInit","contentRect","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","Element","observations","unobserve","clearActive","_this","observation","WeakMap","ResizeObserver","method","HV","REQUEST_LIST_ORDER_DIRECTIONS","asc","desc","REQUEST_LIST_SORT_BY","deadline","RequestListService","httpParams","PAGE_SIZE","MODE_FILTERS","FilterMenuComponent","storedFilter","activeSort","columnFilters","requestTypeOptions","requestStageTypes","stageOptions","stageType","searchStageName","requestTypeCode","uniqBy","stOptions","currentSort","DEFAULT_INITIAL_SORT","filterChange","REQUEST_ACTIONS","ClickPreventDefaultDirective","listen","defaultPrevented","F_","RequestItemActionsComponent","hasActionsSubject","canDuplicate","checkActions","STATUS_DEFAULT","defaultDeadlineRequests","daysTillDelivery","RequestItemComponent","isMenuVisible","getDeadlineIcon","deadlineStatus","getDaysTillDeadline","valueOf","STATUS_DUE","ClickNoSelectionDirective","selection","getSelection","clickNoSelection","U_","AssigneeRequestListDataSource","assigneeService","loadValues","query","searchValues","ItemListProvider","RequestsListComponent","parse","localStorage","getItem","defaultListFilter","defaultStoredFilter","checkFromContainerWidth","requestListFilterSubject","createRequest","requestListFilter","filterObj","objectFromStorage","last","setItem","getElementsByTagName","overflow","scheduleRouterNavigate","serializeFilterParams","isEmpty","restoreFilterParams","requestListDataSource$","scheduleUpdateData","pairwise","totalDocuments","warn","currentFilterValue","defaultFilterValue","stringValue","dateRanges","sort_by","compareDefaultFilterValues","sort_direction","filter_stages","filter_types","filter_assignees","filter_statuses","filter_submitters","date_range","restoreTopFilter","formContainer","scrollContentWrapper","viewportElement","resizeObserver$","omit","openNewRequestModal","redirect","postCreateNewRequest","MIN_LENGTH","initialFilterData$","CdkVirtualScrollViewport","MatSort","ElementRef","REQUESTS_ROUTES","component","MsalGuard","AuthGuard","RequestsRoutingModule","RouterModule","RequestDetailsEffects","createEffect","partsToInclude","concatMap","userUpdated","requestUpdated","updatedRequest","RequestStepsEffects","PopDesignEffects","CardDesignEffects","ThirdPartyEffects","updateConfirmPrinters","requestItemUpdates","update","operationNotes","batchedItems","batchedOperationNotes","operationDetailUpdateResults","ImageEffects","updateDesigner","deleteDesigner","CardProdEffects","RequestsModule","TranslatePipe","HTTP_INTERCEPTORS","UsernameHeaderInterceptor","imports","SharedModule","ScrollingModule","ReactiveFormsModule","FormsModule","OverlayModule","StoreModule","EffectsModule","module","setter","iteratee","accumulator","arrayAggregator","baseIndexOf","require","arrayIncludes","comparator","arrayIncludesWith","baseAssignValue","eq","assignMergeValue","baseEach","collection","baseAggregator","fromIndex","fromRight","baseFindIndex","baseIsNaN","strictIndexOf","Stack","baseFor","baseMergeDeep","keysIn","safeGet","srcIndex","customizer","stack","baseMerge","cloneBuffer","cloneTypedArray","copyArray","initCloneObject","isArguments","isArrayLikeObject","isBuffer","isFunction","isPlainObject","isTypedArray","toPlainObject","mergeFunc","stacked","isCommon","isArr","isBuff","isTyped","oo","et","Vo","kn","fe","Pe","baseSlice","trimmedEndIndex","reTrimStart","string","baseTrim","SetCache","cacheHas","createSet","setToArray","seen","outer","computed","seenIndex","baseUniq","castPath","toKey","baseUnset","arrayMap","baseValues","identity","castFunction","baseIteratee","initializer","func","createAggregator","baseRest","isIterateeCall","assigner","sources","guard","createAssigner","isArrayLike","findIndexFunc","iterable","createFind","noop","customOmitClone","baseGet","reWhitespace","charAt","defaultValue","toInteger","nativeMax","baseFlatten","INFINITY","arrayEach","hasOwnProperty","isString","isObjectLike","baseIsEqual","baseGetTag","getPrototype","funcToString","objectCtorString","proto","Ctor","constructor","stringTag","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","MAX_SAFE_INTEGER","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsModifier","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","parseInt","freeGlobal","freeSelf","freeExports","Ge","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","resIndex","offset","initAccum","asciiSize","baseProperty","eachFunc","baseSum","NAN","current","cache","strSymbols","chrSymbols","placeholder","deburrLetter","basePropertyOf","escapeHtmlChar","chr","hasUnicode","lastIndex","unicodeSize","unicodeToArray","asciiToArray","unescapeHtmlChar","_","context","uid","pick","arrayProto","objectProto","coreJsData","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","oldDash","reIsNative","Buffer","allocUnsafe","overArg","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","toStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","ctxSetTimeout","nativeCeil","ceil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","__data__","MapCache","ListCache","inherited","isArg","isType","skipIndexes","baseTimes","isIndex","baseRandom","shuffleSelf","baseClamp","copyObject","paths","lower","upper","bitmask","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","getSymbolsIn","copySymbolsIn","baseAssignIn","getSymbols","copySymbols","baseAssign","cloneArrayBuffer","dataView","byteOffset","cloneDataView","regexp","cloneRegExp","symbol","cloneSymbol","initCloneByTag","Kc","subValue","baseClone","getAllKeysIn","getAllKeys","assignValue","wait","valuesLength","baseUnary","R","valuesIndex","lodash","templateSettings","escape","evaluate","interpolate","variable","baseLodash","Hash","assocIndexOf","hash","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","isSymbol","depth","isStrict","isFlattenable","q","arrayPush","createBaseFor","baseForRight","arrayFilter","keysFunc","symbolsFunc","isOwn","unmasked","getRawTag","objectToString","arrays","othLength","othIndex","caches","maxLength","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","mapToArray","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","isPartial","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","matchData","noCustomizer","COMPARE_PARTIAL_FLAG","isMasked","baseMatchesProperty","baseMatches","isPrototype","getMatchData","matchesStrictComparable","baseIsMatch","isKey","isStrictComparable","hasIn","COMPARE_UNORDERED_FLAG","Ee","hn","$e","ct","oa","ur","iteratees","orders","getIteratee","comparer","baseSortBy","baseMap","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","baseSet","baseIndexOfWith","indexes","previous","setToString","overRest","arraySample","nested","baseSetData","Ri","baseSetToString","Ua","constant","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","se","de","MAX_ARRAY_INDEX","baseToString","updater","isDrop","arrayReduce","baseDifference","assignFunc","valsLength","stringToPath","castRest","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","B","methodName","stringToArray","castSlice","words","deburr","thisBinding","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","isLaziable","WRAP_ARY_FLAG","plant","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","WRAP_CURRY_FLAG","isFlip","createCtor","getHolder","holdersCount","countHolders","composeArgs","composeArgsRight","newHolders","replaceHolders","createRecurry","createHybrid","reorder","toIteratee","baseInverter","operator","baseToNumber","arrayFunc","chars","charsLength","baseRepeat","stringSize","toFinite","baseRange","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","precision","pair","Gr","setToPairs","baseToPairs","srcBitmask","newBitmask","WRAP_BIND_FLAG","mergeData","createCurry","createPartial","createBind","customDefaultsMerge","arrLength","arrStacked","arrValue","arraySome","baseGetAllKeys","otherFunc","isKeyable","baseIsNative","Ea","stubArray","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoizeCapped","quote","subString","clone","differenceBy","intersection","mapped","castArrayLikeObject","baseIntersection","intersectionBy","intersectionWith","pullAll","basePullAll","pullAt","baseAt","basePullAt","union","unionBy","unionWith","unzip","without","xor","baseXor","xorBy","xorWith","zip","zipWith","unzipWith","interceptor","wrapperAt","countBy","findLast","findLastIndex","arrayEachRight","invokeMap","baseInvoke","keyBy","partition","sortBy","baseOrderBy","createWrap","WRAP_PARTIAL_FLAG","bindKey","lastArgs","lastThis","maxWait","timerId","lastInvokeTime","maxing","time","timerExpired","invokeFunc","timeSinceLastCall","shouldInvoke","trailingEdge","timeWaiting","remainingWait","isInvoking","leadingEdge","debounced","cancel","flush","defer","baseDelay","resolver","memoized","Cache","overArgs","transforms","funcsLength","partial","partialRight","rearg","createRelationalOperation","baseGt","gte","baseIsArguments","proxyTag","lt","baseLt","lte","iteratorToArray","remainder","isBinary","assignIn","assignInWith","assignWith","propsIndex","propsLength","defaultsDeep","hasPath","baseHasIn","invert","createInverter","invertBy","Gt","invoke","arrayLikeKeys","baseKeys","nativeKeysIn","isProto","baseKeysIn","CLONE_DEEP_FLAG","basePickBy","basePick","toPairs","createToPairs","toPairsIn","camelCase","createCompounder","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","createCaseFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","isError","bindAll","methodNames","flow","createFlow","flowRight","methodOf","baseFunctions","chain","over","createOver","overEvery","arrayEvery","overSome","basePropertyDeep","createRange","rangeRight","createMathOperation","augend","addend","createRound","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","after","before","castArray","chunk","compact","cond","conforms","baseConformsTo","baseConforms","properties","curry","curryRight","debounce","drop","dropRight","dropRightWhile","baseWhile","dropWhile","fill","toLength","baseFill","baseFilter","flatMapDepth","flattenDeep","flattenDepth","flip","WRAP_FLIP_FLAG","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","mixin","negate","nthArg","baseNth","omitBy","pickBy","once","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","arraySampleSize","baseSampleSize","setWith","shuffle","arrayShuffle","baseShuffle","sortedUniq","baseSortedUniq","sortedUniqBy","separator","limit","spread","tail","takeRight","takeRightWhile","toPath","isArrLike","pn","unary","uniq","uniqWith","unset","baseUpdate","updateWith","valuesIn","wrap","zipObject","baseZipObject","zipObjectDeep","entriesIn","extend","extendWith","CLONE_SYMBOLS_FLAG","cloneDeepWith","cloneWith","conformsTo","endsWith","escapeRegExp","baseEvery","findKey","baseFindKey","findLastKey","forEachRight","forIn","forInRight","forOwn","forOwnRight","baseHas","head","inRange","baseInRange","isBoolean","isElement","isMatch","isMatchWith","isNumber","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","weakSetTag","strictLastIndexOf","baseExtremum","maxBy","mean","baseMean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","createPadding","padEnd","padStart","radix","floating","temp","baseReduce","reduceRight","arrayReduceRight","runInContext","sample","baseSample","baseSome","sortedIndex","baseSortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sumBy","settings","customDefaultsAssignIn","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","escapeStringChar","toLower","toSafeInteger","toUpper","charsStartIndex","charsEndIndex","trimEnd","trimStart","truncate","omission","newEnd","unescape","uniqueId","prefix","each","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","baseWrapperValue","iterIndex","commit","wrapped","toJSON","define"],"sourceRoot":"webpack:///","sources":["./node_modules/@angular/cdk/fesm2015/stepper.mjs","./node_modules/rxjs/_esm2015/internal/operators/find.js","./src/app/requests/reducers/request-details/request-details.utils.ts","./src/app/requests/reducers/request-details/request-details.actions.ts","./src/app/requests/reducers/request-details/third-party.actions.ts","./src/app/requests/reducers/request-details/card-prod.actions.ts","./src/app/requests/reducers/request-details/request-details.reducer.ts","./src/app/shared/services/request-stages.enum.ts","./src/app/requests/reducers/request-steps/request-steps.actions.ts","./src/app/requests/reducers/request-steps/request-steps.reducer.ts","./src/app/requests/reducers/index.ts","./src/app/requests/reducers/request-details/request-details.selectors.ts","./src/app/requests/services/label-helper.service.ts","./src/app/reducers/ppm/ppm.selectors.ts","./src/app/requests/reducers/selectors.ts","./src/app/requests/reducers/request-steps/request-steps.selectors.ts","./src/app/reducers/creator/creator.selectors.ts","./src/app/reducers/product-owner/product-owner.selectors.ts","./src/app/reducers/assignee-step-included/assignee-step-included.selectors.ts","./src/app/reducers/designer/designer.selectors.ts","./src/app/requests/classes/role-update-aware-provider.ts","./src/app/requests/services/request-specific-role.provider.ts","./src/app/requests/components/request-details/reassign-ppm-form/reassign-ppm-form.component.ts","./src/app/requests/components/request-details/reassign-ppm-form/reassign-ppm-form.component.html","./src/app/requests/components/request-details/request-details.constants.ts","./src/app/requests/classes/role-provider-aggregator.ts","./src/app/requests/services/step-actions.service.ts","./src/app/requests/services/finalize-stage.service.ts","./src/app/requests/components/status-label/status-label.component.html","./src/app/requests/components/status-label/status-label.component.ts","./src/app/shared/components/app-popover/toggle-popover.directive.ts","./src/app/shared/components/app-popover/app-popover.component.ts","./src/app/shared/components/app-popover/app-popover.component.html","./src/app/requests/components/request-stage-menu/request-stage-menu.component.ts","./src/app/requests/components/request-stage-menu/request-stage-menu.component.html","./src/app/requests/components/custom-stepper/custom-stepper.component.html","./src/app/requests/components/custom-stepper/custom-stepper.component.ts","./src/app/requests/services/pop-production.service.ts","./src/app/reducers/submitter/submitter.selectors.ts","./src/app/requests/services/fs-request.service.ts","./src/app/requests/components/request-types/common/blank-state/blank-state.component.ts","./src/app/requests/components/request-types/common/blank-state/blank-state.component.html","./src/app/shared/constants/upload-restrictions.constants.ts","./src/app/shared/constants/form-field.constant.ts","./src/app/shared/components/app-currency-input/app-currency-input.component.html","./src/app/shared/components/app-currency-input/app-currency-input.component.ts","./src/app/shared/components/app-input/app-input.component.html","./src/app/shared/components/app-input/app-input.component.ts","./src/app/shared/directives/dnd.directive.ts","./src/app/shared/components/file-upload-progress/file-upload-progress.component.html","./src/app/shared/components/file-upload-progress/file-upload-progress.component.ts","./src/app/shared/components/file-uploader/file-uploader.component.html","./src/app/shared/components/file-uploader/file-uploader.component.ts","./src/app/shared/components/accordion/accordion.component.html","./src/app/shared/components/accordion/accordion.component.ts","./src/app/shared/services/date-service.service.ts","./src/app/shared/services/country-service.service.ts","./src/app/requests/directives/select-product-upc.directive.ts","./src/app/shared/components/radio-group/radio-group.component.html","./src/app/shared/components/radio-group/radio-group.component.ts","./node_modules/@angular/material/fesm2015/progress-bar.mjs","./src/app/requests/components/request-types/card-production/production-details/merchant-form/merchant-form.component.html","./src/app/requests/components/request-types/card-production/production-details/merchant-form/merchant-form.component.ts","./src/app/requests/components/request-types/card-production/production-details/merchant-details/merchant-details.component.html","./src/app/requests/components/request-types/card-production/production-details/merchant-details/merchant-details.component.ts","./src/app/shared/services/form-factor.service.ts","./src/app/requests/components/request-types/card-production/production-details/form-factor-form/form-factor-form.component.html","./src/app/requests/components/request-types/card-production/production-details/form-factor-form/form-factor-form.component.ts","./src/app/requests/components/request-types/card-production/production-details/production-quntity-form/production-quntity-form.component.html","./src/app/requests/components/request-types/card-production/production-details/production-quntity-form/production-quntity-form.component.ts","./src/app/requests/components/request-types/card-production/production-details/request-item-form/request-item-form.component.html","./src/app/requests/components/request-types/card-production/production-details/request-item-form/request-item-form.component.ts","./src/app/requests/components/request-types/card-production/production-details/stakeholder-details/stakeholder-details.component.ts","./src/app/requests/components/request-types/card-production/production-details/stakeholder-details/stakeholder-details.component.html","./src/app/requests/components/request-types/card-production/production-details/production-details.component.ts","./src/app/requests/components/request-types/card-production/production-details/production-details.component.html","./src/app/shared/components/file-downloader/file-downloader.component.html","./src/app/shared/components/file-downloader/file-downloader.component.ts","./src/app/shared/components/more-details-link/more-details-link.component.ts","./src/app/shared/components/more-details-link/more-details-link.component.html","./src/app/requests/components/request-types/card-production/finance-approval/finance-approval.component.html","./src/app/requests/components/request-types/card-production/finance-approval/finance-approval.component.ts","./src/app/requests/models/card-design-request.model.ts","./src/app/requests/models/pop-production-request.model.ts","./src/app/requests/components/request-step-details/abstract-request-step.class.ts","./src/app/requests/components/shared/upload-artwork-shared/upload-artwork-item-shared/upload-artwork-item-shared.component.html","./src/app/requests/components/shared/upload-artwork-shared/upload-artwork-item-shared/upload-artwork-item-shared.component.ts","./src/app/requests/components/request-types/third-party/common/third-party-item-header/third-party-item-header.component.ts","./src/app/requests/components/request-types/third-party/common/third-party-item-header/third-party-item-header.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-request-item-header/pop-prod-request-item-header.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-request-item-header/pop-prod-request-item-header.component.ts","./src/app/requests/components/request-types/bif-production/common/bif-item-header/bif-item-header.component.ts","./src/app/requests/components/request-types/bif-production/common/bif-item-header/bif-item-header.component.html","./src/app/requests/components/request-types/financial-services/common/fsr-item-header/fsr-item-header.component.ts","./src/app/requests/components/request-types/financial-services/common/fsr-item-header/fsr-item-header.component.html","./src/app/requests/components/request-types/card-production/request-item-fields-panel/request-item-fields-panel.component.ts","./src/app/requests/components/request-types/card-production/request-item-fields-panel/request-item-fields-panel.component.html","./src/app/requests/components/request-types/third-party/common/third-party-item-subheader/third-party-item-subheader.component.html","./src/app/requests/components/request-types/third-party/common/third-party-item-subheader/third-party-item-subheader.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-request-item-subheader/pop-prod-request-item-subheader.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-request-item-subheader/pop-prod-request-item-subheader.component.ts","./src/app/requests/components/request-types/bif-production/common/bif-item-subheader/bif-item-subheader.component.html","./src/app/requests/components/request-types/bif-production/common/bif-item-subheader/bif-item-subheader.component.ts","./src/app/requests/components/request-types/financial-services/common/fsr-item-subheader/fsr-item-subheader.component.html","./src/app/requests/components/request-types/financial-services/common/fsr-item-subheader/fsr-item-subheader.component.ts","./src/app/requests/components/request-types/bif-production/common/bif-item-info-body/bif-item-info-body.component.html","./src/app/requests/components/request-types/bif-production/common/bif-item-info-body/bif-item-info-body.component.ts","./src/app/requests/components/request-types/third-party/common/third-party-item-child-card/third-party-item-child-card.component.html","./src/app/requests/components/request-types/third-party/common/third-party-item-child-card/third-party-item-child-card.component.ts","./src/app/requests/components/request-types/bif-production/common/bif-request-total-cost/bif-request-total-cost.component.html","./src/app/requests/components/request-types/bif-production/common/bif-request-total-cost/bif-request-total-cost.component.ts","./src/app/requests/components/shared/upload-artwork-shared/upload-artwork-shared.component.html","./src/app/requests/components/shared/upload-artwork-shared/upload-artwork-shared.component.ts","./src/app/shared/components/files-approve/files-approve.component.html","./src/app/shared/components/files-approve/files-approve.component.ts","./src/app/requests/components/request-types/card-production/approve-request/approve-request.component.html","./src/app/requests/components/request-types/card-production/approve-request/approve-request.component.ts","./src/app/requests/services/po-sow-manage.service.ts","./src/app/requests/services/po-ship-to-data.service.ts","./src/app/requests/components/shipments-address/shipments-address.component.ts","./src/app/requests/components/shipments-address/shipments-address.component.html","./src/app/requests/components/request-types/card-production/po-sow/sow-form-info/sow-form-info-component.html","./src/app/requests/components/request-types/card-production/po-sow/sow-form-info/sow-form-info-component.ts","./src/app/requests/components/request-types/card-production/po-sow/sow-form/sow-form.component.html","./src/app/requests/components/request-types/card-production/po-sow/sow-form/sow-form.component.ts","./src/app/requests/classes/select-printer-provider.ts","./node_modules/rxjs/_esm2015/internal/operators/throttle.js","./node_modules/rxjs/_esm2015/internal/operators/throttleTime.js","./src/app/requests/services/po-accounting.service.ts","./src/app/shared/components/button-dropdown/button-dropdown.component.html","./src/app/shared/components/button-dropdown/button-dropdown.component.ts","./src/app/requests/components/request-types/card-production/po-sow/item-shipment/item-shipment.component.html","./src/app/requests/components/request-types/card-production/po-sow/item-shipment/item-shipment.component.ts","./src/app/requests/components/request-types/card-production/po-sow/item-information/item-information.component.html","./src/app/requests/components/request-types/card-production/po-sow/item-information/item-information.component.ts","./src/app/requests/components/request-types/card-production/po-sow/items-information/items-information.component.html","./src/app/requests/components/request-types/card-production/po-sow/items-information/items-information.component.ts","./src/app/requests/components/request-types/common/miscellaneous-item/miscellaneous-item.component.html","./src/app/requests/components/request-types/common/miscellaneous-item/miscellaneous-item.component.ts","./src/app/requests/components/request-types/common/miscellaneous-items-section/miscellaneous-items-section.component.html","./src/app/requests/components/request-types/common/miscellaneous-items-section/miscellaneous-items-section.component.ts","./src/app/requests/components/request-types/common/po-accounting/po-accounting.component.html","./src/app/requests/components/request-types/common/po-accounting/po-accounting.component.ts","./src/app/requests/components/request-types/card-production/po-sow/po-form/po-form.component.html","./src/app/requests/components/request-types/card-production/po-sow/po-form/po-form.component.ts","./src/app/requests/components/request-types/common/po-sow-add/po-sow-add.component.html","./src/app/requests/components/request-types/common/po-sow-add/po-sow-add.component.ts","./src/app/requests/components/request-types/card-production/po-sow/po-sow.component.ts","./src/app/requests/components/request-types/card-production/po-sow/po-sow.component.html","./src/app/requests/components/request-types/card-production/committee-approval/committee-approval.component.html","./src/app/requests/components/request-types/card-production/committee-approval/committee-approval.component.ts","./src/app/requests/services/at-printer.service.ts","./src/app/requests/services/cp-prod-at-printer.service.ts","./src/app/requests/components/request-types/common/bulk-change/bulk-change.component.ts","./src/app/shared/components/file-selector/file-selector.component.html","./src/app/shared/components/file-selector/file-selector.component.ts","./src/app/requests/components/request-types/card-production/at-printer/cp-bulk-change/cp-bulk-change.component.ts","./src/app/requests/components/request-types/card-production/at-printer/cp-bulk-change/cp-bulk-change.component.html","./src/app/requests/components/request-types/card-production/at-printer/printer-milestone/printer-milestone.component.html","./src/app/requests/components/request-types/card-production/at-printer/printer-milestone/printer-milestone.component.ts","./src/app/requests/components/request-types/card-production/at-printer/at-printer.component.ts","./src/app/requests/components/request-types/card-production/at-printer/at-printer.component.html","./node_modules/rxjs/_esm2015/internal/operators/distinctUntilKeyChanged.js","./src/app/shared/components/with-destroy/with-destroy.mixin.ts","./src/app/shared/models/am-mode.model.ts","./src/app/shared/services/approval-manager/approval-manager.service.ts","./src/app/shared/services/approval-manager/card-design/card-design-approval-manager.service.ts","./src/app/requests/components/request-types/card-design/card-design-host/card-design-host.component.ts","./src/app/requests/services/card-design.service.ts","./src/app/requests/components/request-types/card-design/common/card-design-partner-details/card-design-partner-details.component.html","./src/app/requests/components/request-types/card-design/common/card-design-partner-details/card-design-partner-details.component.ts","./src/app/shared/components/radio-group-form/radio-group-form.component.html","./src/app/shared/components/radio-group-form/radio-group-form.component.ts","./src/app/requests/components/request-types/card-design/common/card-design-artwork/card-design-artwork.component.html","./src/app/requests/components/request-types/card-design/common/card-design-artwork/card-design-artwork.component.ts","./src/app/requests/components/request-types/card-design/design-details/cd-item/cd-item.component.html","./src/app/requests/components/request-types/card-design/design-details/cd-item/cd-item.component.ts","./src/app/requests/components/request-types/card-design/design-details/design-details.component.ts","./src/app/requests/components/request-types/card-design/design-details/design-details.component.html","./src/app/requests/components/shared/tm-assignment/tm-assignment.mixin.ts","./src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state.ts","./src/app/requests/services/card-design-form.service.ts","./src/app/shared/directives/user-permissions-v2.directive.ts","./src/app/requests/services/users.service.ts","./src/app/shared/components/app-user-assignment/app-user-assignment.component.html","./src/app/shared/components/app-user-assignment/app-user-assignment.component.ts","./src/app/shared/components/app-artwork-item/artwork-item-status-header/artwork-item-status-header.component.html","./src/app/shared/components/app-artwork-item/artwork-item-status-header/artwork-item-status-header.component.ts","./src/app/shared/components/app-artwork-item/app-artwork-item.component.html","./src/app/shared/components/app-artwork-item/app-artwork-item.component.ts","./src/app/shared/components/app-designer-assignment/app-designer-assignment.component.html","./src/app/shared/components/app-designer-assignment/app-designer-assignment.component.ts","./src/app/requests/components/request-types/card-design/tm-review/tm-review.component.ts","./src/app/requests/components/request-types/card-design/tm-review/tm-review.component.html","./src/app/requests/components/request-types/card-design/common/artwork-details/artwork-details.component.html","./src/app/requests/components/request-types/card-design/common/artwork-details/artwork-details.component.ts","./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","./node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js","./node_modules/@babel/runtime/helpers/esm/asyncIterator.js","./node_modules/@babel/runtime/helpers/esm/AwaitValue.js","./node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js","./node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js","./node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js","./node_modules/client-zip/index.js","./src/app/requests/components/download-all/providers/copy.strategy.ts","./src/app/requests/components/download-all/providers/files.provider.ts","./src/app/requests/components/download-all/providers/pdf.provider.ts","./src/app/requests/components/download-all/download-all.component.ts","./src/app/requests/components/download-all/download-all.component.html","./src/app/requests/components/request-types/card-design/design-process/artwork-item-header/artwork-item-header.component.html","./src/app/requests/components/request-types/card-design/design-process/artwork-item-header/artwork-item-header.component.ts","./src/app/requests/components/request-types/card-design/design-process/design-process.component.html","./src/app/requests/components/request-types/card-design/design-process/design-process.component.ts","./src/app/requests/reducers/request-details/card-design.actions.ts","./src/app/requests/components/request-types/card-design/tm-review2/tm-review2.component.html","./src/app/requests/components/request-types/card-design/tm-review2/tm-review2.component.ts","./src/app/requests/components/request-types/card-design/creative-review/creative-review.component.html","./src/app/requests/components/request-types/card-design/creative-review/creative-review.component.ts","./src/app/requests/components/request-types/card-design/client-proof/client-proof.component.html","./src/app/requests/components/request-types/card-design/client-proof/client-proof.component.ts","./src/app/requests/components/shared/tm-review-3-base/tm-review-3-base.service.ts","./src/app/requests/components/shared/tm-review-3-base/tm-review-3-base.component.ts","./src/app/requests/components/request-types/card-design/tm-review3/tm-review3.component.html","./src/app/requests/components/request-types/card-design/tm-review3/tm-review3.component.ts","./src/app/requests/components/shared/prep-artifact-base/prep-artifact-role.provider.ts","./src/app/requests/components/shared/prep-artifact-base/prep-artifact-base.component.ts","./src/app/requests/components/request-types/card-design/prep-artifact/prep-artifact.component.html","./src/app/requests/components/request-types/card-design/prep-artifact/prep-artifact.component.ts","./src/app/requests/components/shared/post-artifact-base/post-artifact-base.service.ts","./src/app/requests/components/shared/post-artifact-base/post-artifact-base.component.ts","./src/app/requests/components/request-types/card-design/post-artifact/post-artifact.component.html","./src/app/requests/components/request-types/card-design/post-artifact/post-artifact.component.ts","./src/app/shared/services/approval-manager/pop-design/pop-design-approval-manager.service.ts","./src/app/shared/services/approval-manager/pop-design/fs-review-pop-design-approval-manager.service.ts","./src/app/requests/components/request-types/pop-design/pop-design-host/pop-design-host.component.ts","./src/app/shared/services/random-utils.service.ts","./src/app/requests/services/pop-design-form.service.ts","./src/app/requests/components/request-types/pop-design/common/pop-design-artwork-fieldset/pop-design-artwork-fieldset.component.html","./src/app/requests/components/request-types/pop-design/common/pop-design-artwork-fieldset/pop-design-artwork-fieldset.component.ts","./src/app/requests/components/request-types/pop-design/common/item-type-select/item-type-select.component.ts","./src/app/requests/components/request-types/pop-design/common/item-type-select/item-type-select.component.html","./src/app/requests/constants/color-types.constant.ts","./src/app/requests/components/request-types/pop-design/common/color-type-select/color-type-select.component.html","./src/app/requests/components/request-types/pop-design/common/color-type-select/color-type-select.component.ts","./src/app/requests/components/request-types/pop-design/pop-details/pop-item/pop-item.component.html","./src/app/requests/components/request-types/pop-design/pop-details/pop-item/pop-item.component.ts","./src/app/requests/components/request-types/pop-design/pop-details/pop-details.component.ts","./src/app/requests/components/request-types/pop-design/pop-details/pop-details.component.html","./src/app/requests/models/pop-design-request.model.ts","./src/app/requests/services/pop-design.service.ts","./node_modules/rxjs/_esm2015/internal/operators/skipWhile.js","./src/app/requests/components/request-types/pop-design/common/pop-request-channel/pop-request-channel.component.html","./src/app/requests/components/request-types/pop-design/common/pop-request-channel/pop-request-channel.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-dates-section/pop-dates-section.component.html","./src/app/requests/components/request-types/pop-design/common/pop-dates-section/pop-dates-section.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-artwork-details/pop-artwork-details.component.html","./src/app/requests/components/request-types/pop-design/common/pop-artwork-details/pop-artwork-details.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item-info-header/pop-request-item-info-header.component.html","./src/app/requests/components/request-types/pop-design/common/pop-request-item-info-header/pop-request-item-info-header.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item-fs-product-lines/pop-request-item-fs-product-lines.component.html","./src/app/requests/components/request-types/pop-design/common/pop-request-item-fs-product-lines/pop-request-item-fs-product-lines.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item-info-body/pop-request-item-info-body.component.html","./src/app/requests/components/request-types/pop-design/common/pop-request-item-info-body/pop-request-item-info-body.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item/pop-request-item.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item/pop-request-item.component.html","./src/app/requests/components/request-types/pop-design/common/pop-production-association/pop-production-association.component.html","./src/app/requests/components/request-types/pop-design/common/pop-production-association/pop-production-association.component.ts","./src/app/requests/components/request-types/pop-design/pop-financial-review/pop-financial-review.component.html","./src/app/requests/components/request-types/pop-design/pop-financial-review/pop-financial-review.component.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item-fs-product-lines-form/pop-request-item-fs-product-lines-form.component.html","./src/app/requests/components/request-types/pop-design/common/pop-request-item-fs-product-lines-form/pop-request-item-fs-product-lines-form.component.ts","./src/app/requests/components/request-types/pop-design/pop-tm-review/pop-tm-review.component.ts","./src/app/requests/components/request-types/pop-design/pop-tm-review/pop-tm-review.component.html","./src/app/requests/components/request-types/pop-design/pop-design-process/pop-design-process.component.html","./src/app/requests/components/request-types/pop-design/pop-design-process/pop-design-process.component.ts","./src/app/requests/reducers/request-details/pop-design.actions.ts","./src/app/requests/components/request-types/pop-design/common/pop-request-item-type-header/pop-request-item-type-header.component.html","./src/app/requests/components/request-types/pop-design/common/pop-request-item-type-header/pop-request-item-type-header.component.ts","./src/app/requests/components/request-types/pop-design/pop-tm-review2/pop-tm-review2.component.html","./src/app/requests/components/request-types/pop-design/pop-tm-review2/pop-tm-review2.component.ts","./src/app/requests/components/request-types/pop-design/pop-financial-review2/pop-financial-review2.component.html","./src/app/requests/components/request-types/pop-design/pop-financial-review2/pop-financial-review2.component.ts","./src/app/requests/components/request-types/pop-design/pop-client-proof/pop-client-proof.component.html","./src/app/requests/components/request-types/pop-design/pop-client-proof/pop-client-proof.component.ts","./src/app/requests/components/request-types/pop-design/pop-tm-review3/pop-tm-review3.component.html","./src/app/requests/components/request-types/pop-design/pop-tm-review3/pop-tm-review3.component.ts","./src/app/requests/components/request-types/pop-design/pop-prep-artifact/pop-prep-artifact.component.html","./src/app/requests/components/request-types/pop-design/pop-prep-artifact/pop-prep-artifact.component.ts","./src/app/requests/components/request-types/pop-design/pop-post-artifact/pop-post-artifact.component.html","./src/app/requests/components/request-types/pop-design/pop-post-artifact/pop-post-artifact.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-details/version-name.validator.ts","./src/app/requests/components/request-types/pop-production/common/pop-finance-details/pop-finance-details.component.html","./src/app/requests/components/request-types/pop-production/common/pop-finance-details/pop-finance-details.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-item-common-form/pop-prod-item-common-form.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-item-common-form/pop-prod-item-common-form.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-details/pop-prod-item/pop-prod-item.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-details/pop-prod-item/pop-prod-item.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-details/pop-prod-details.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-details/pop-prod-details.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-request-details-block/pop-prod-request-details-block.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-request-details-block/pop-prod-request-details-block.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-finance-details-block/pop-prod-finance-details-block.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-finance-details-block/pop-prod-finance-details-block.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-artwork-details-block/pop-prod-artwork-details-block.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-artwork-details-block/pop-prod-artwork-details-block.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-merchant-details-block/pop-prod-merchant-details-block.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-merchant-details-block/pop-prod-merchant-details-block.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-production-review/pop-prod-production-review.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-production-review/pop-prod-production-review.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-item-common/pop-prod-item-common.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-item-common/pop-prod-item-common.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-printer-quote/pop-prod-printer-quote.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-printer-quote/pop-prod-printer-quote.component.ts","./src/app/requests/components/request-types/pop-production/common/pop-finance-details-requestor-review/pop-finance-details-requestor-review.component.html","./src/app/requests/components/request-types/pop-production/common/pop-finance-details-requestor-review/pop-finance-details-requestor-review.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-requester-review/pop-prod-requester-review.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-requester-review/pop-prod-requester-review.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-finance-approval/pop-prod-finance-approval.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-finance-approval/pop-prod-finance-approval.component.ts","./src/app/requests/services/pp-po-sow-manage.service.ts","./src/app/requests/components/request-types/pop-production/common/pop-prod-version-list/pop-prod-version-list.component.html","./src/app/requests/components/request-types/pop-production/common/pop-prod-version-list/pop-prod-version-list.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/item-shipment-form/item-shipment-form.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/item-shipment-form/item-shipment-form.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-form/pop-prod-po-form.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-form/pop-prod-po-form.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-sow-form-info/pop-prod-sow-form-info.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-sow-form-info/pop-prod-sow-form-info.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-sow-form/pop-prod-sow-form.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-sow-form/pop-prod-sow-form.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-sow-item-info/pop-prod-po-sow-item-info.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-sow-item-info/pop-prod-po-sow-item-info.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-sow.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-sow.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-vendor-proof/pop-prod-vendor-proof.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-vendor-proof/pop-prod-vendor-proof.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-vendor-proof-int/pop-prod-vendor-proof-int.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-vendor-proof-int/pop-prod-vendor-proof-int.component.ts","./src/app/requests/services/pop-prod-at-printer.service.ts","./src/app/requests/components/request-types/pop-production/pop-prod-print/pop-bulk-change/pop-bulk-change.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-print/pop-bulk-change/pop-bulk-change.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-print/pop-prod-printer-milestone/pop-prod-printer-milestone.component.html","./src/app/requests/components/request-types/pop-production/pop-prod-print/pop-prod-printer-milestone/pop-prod-printer-milestone.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-print/pop-prod-print.component.ts","./src/app/requests/components/request-types/pop-production/pop-prod-print/pop-prod-print.component.html","./src/app/requests/components/request-types/financial-services/fsr-details/fsr-request-item-form/fsr-request-item-form.component.html","./src/app/requests/components/request-types/financial-services/fsr-details/fsr-request-item-form/fsr-request-item-form.component.ts","./src/app/requests/components/request-types/financial-services/fsr-details/fsr-details.component.ts","./src/app/requests/components/request-types/financial-services/fsr-details/fsr-details.component.html","./src/app/requests/components/request-types/financial-services/fsr-finance-approval/fsr-finance-approval.component.html","./src/app/requests/components/request-types/financial-services/fsr-finance-approval/fsr-finance-approval.component.ts","./src/app/requests/services/fsr-po-manage.service.ts","./src/app/requests/services/fs-po.service.ts","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form-item/fsr-po-form-item-details/fsr-po-form-item-details.component.html","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form-item/fsr-po-form-item-details/fsr-po-form-item-details.component.ts","./src/app/requests/components/request-types/common/request-item-shipments/request-item-shipment/request-item-shipment.component.html","./src/app/requests/components/request-types/common/request-item-shipments/request-item-shipment/request-item-shipment.component.ts","./src/app/requests/components/request-types/common/request-item-shipments/request-item-shipments.component.html","./src/app/requests/components/request-types/common/request-item-shipments/request-item-shipments.component.ts","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form-item/fsr-po-form-item.component.html","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form-item/fsr-po-form-item.component.ts","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form.component.html","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form.component.ts","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-item/fsr-po-item.component.html","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po-item/fsr-po-item.component.ts","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po.component.html","./src/app/requests/components/request-types/financial-services/fsr-po/fsr-po.component.ts","./src/app/requests/components/request-types/financial-services/fsr-approve-request/fsr-approve-request.component.html","./src/app/requests/components/request-types/financial-services/fsr-approve-request/fsr-approve-request.component.ts","./src/app/requests/services/fsr-at-printer.service.ts","./src/app/requests/components/request-types/financial-services/fsr-at-printer/fsr-bulk-change/fsr-bulk-change.component.ts","./src/app/requests/components/request-types/financial-services/fsr-at-printer/fsr-bulk-change/fsr-bulk-change.component.html","./src/app/requests/components/request-types/financial-services/fsr-at-printer/fsr-printer-milestone/fsr-printer-milestone.component.html","./src/app/requests/components/request-types/financial-services/fsr-at-printer/fsr-printer-milestone/fsr-printer-milestone.component.ts","./src/app/requests/components/request-types/financial-services/fsr-at-printer/fsr-at-printer.component.ts","./src/app/requests/components/request-types/financial-services/fsr-at-printer/fsr-at-printer.component.html","./src/app/requests/services/bif-production.service.ts","./src/app/requests/components/request-types/bif-production/bif-details/bif-details.component.ts","./src/app/requests/components/request-types/bif-production/bif-details/bif-details.component.html","./src/app/requests/components/request-types/bif-production/bif-details/bif-prod-item/bif-prod-item.component.html","./src/app/requests/components/request-types/bif-production/bif-details/bif-prod-item/bif-prod-item.component.ts","./src/app/requests/components/request-types/bif-production/bif-upload-artwork/bif-upload-artwork.component.html","./src/app/requests/components/request-types/bif-production/bif-upload-artwork/bif-upload-artwork.component.ts","./src/app/shared/utils/rxjs.utils.ts","./src/app/requests/components/request-types/bif-production/bif-finance-approval/bif-finance-approval.component.html","./src/app/requests/components/request-types/bif-production/bif-finance-approval/bif-finance-approval.component.ts","./src/app/requests/services/bif-po-manage.service.ts","./src/app/requests/services/bif-po.service.ts","./src/app/requests/services/bif-po-accounting.service.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-fees/bif-po-fees.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-fees/bif-po-fees.component.html","./src/app/shared/components/app-percent-input/app-percent-input.component.html","./src/app/shared/components/app-percent-input/app-percent-input.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item-subheader/bif-po-form-item-subheader.component.html","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item-subheader/bif-po-form-item-subheader.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item/bif-po-form-item.component.html","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item/bif-po-form-item.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-form.component.html","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-form/bif-po-form.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-monthly-form/bif-po-monthly-form-item/bif-po-monthly-form-item.component.html","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-monthly-form/bif-po-monthly-form-item/bif-po-monthly-form-item.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-monthly-form/bif-po-monthly-form.component.html","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-monthly-form/bif-po-monthly-form.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-item/bif-po-item.component.html","./src/app/requests/components/request-types/bif-production/bif-po/bif-po-item/bif-po-item.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po.component.ts","./src/app/requests/components/request-types/bif-production/bif-po/bif-po.component.html","./src/app/requests/components/request-types/bif-production/bif-printer-proof/bif-printer-proof.component.html","./src/app/requests/components/request-types/bif-production/bif-printer-proof/bif-printer-proof.component.ts","./src/app/requests/components/request-types/bif-production/bif-internal-printer-proof/bif-internal-printer-proof.component.html","./src/app/requests/components/request-types/bif-production/bif-internal-printer-proof/bif-internal-printer-proof.component.ts","./src/app/requests/services/bif-at-printer.service.ts","./src/app/requests/components/request-types/bif-production/bif-print/bif-bulk-change/bif-bulk-change.component.ts","./src/app/requests/components/request-types/bif-production/bif-print/bif-bulk-change/bif-bulk-change.component.html","./src/app/requests/components/request-types/bif-production/bif-print/bif-printer-milestone/bif-printer-milestone.component.ts","./src/app/requests/components/request-types/bif-production/bif-print/bif-printer-milestone/bif-printer-milestone.component.html","./src/app/requests/components/request-types/bif-production/bif-print/bif-print.component.ts","./src/app/requests/components/request-types/bif-production/bif-print/bif-print.component.html","./src/app/requests/services/third-party-form-builder.service.ts","./src/app/requests/services/third-party-production.service.ts","./src/app/requests/components/request-types/third-party/third-details/third-printer-owner/third-printer-owner.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-printer-owner/third-printer-owner.component.html","./src/app/requests/components/request-types/third-party/third-details/third-finance-details/third-finance-details.component.html","./src/app/requests/components/request-types/third-party/third-details/third-finance-details/third-finance-details.component.ts","./node_modules/rxjs/_esm2015/internal/operators/delayWhen.js","./src/app/requests/components/request-types/third-party/third-details/third-party-item-shipments/third-party-item-shipments.component.html","./src/app/requests/components/request-types/third-party/third-details/third-party-item-shipments/third-party-item-shipments.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-party-production-qty/third-party-production-qty.component.html","./src/app/requests/components/request-types/third-party/third-details/third-party-production-qty/third-party-production-qty.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-party-item-form-factor/third-party-item-form-factor.component.html","./src/app/requests/components/request-types/third-party/third-details/third-party-item-form-factor/third-party-item-form-factor.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-party-child-card/third-party-child-card.component.html","./src/app/requests/components/request-types/third-party/third-details/third-party-child-card/third-party-child-card.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-party-child-cards/third-party-child-cards.component.html","./src/app/requests/components/request-types/third-party/third-details/third-party-child-cards/third-party-child-cards.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-party-item/third-party-item.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-party-item/third-party-item.component.html","./src/app/requests/components/request-types/third-party/third-details/third-details.component.ts","./src/app/requests/components/request-types/third-party/third-details/third-details.component.html","./src/app/requests/components/request-types/third-party/common/third-party-item-body/third-party-item-body.component.html","./src/app/requests/components/request-types/third-party/common/third-party-item-body/third-party-item-body.component.ts","./src/app/requests/components/request-types/third-party/third-finance-approval/third-finance-approval.component.html","./src/app/requests/components/request-types/third-party/third-finance-approval/third-finance-approval.component.ts","./src/app/requests/components/request-types/third-party/third-art-approval/third-art-approval.component.html","./src/app/requests/components/request-types/third-party/third-art-approval/third-art-approval.component.ts","./src/app/requests/services/third-party-sow-manage.service.ts","./src/app/requests/services/third-po.service.ts","./src/app/requests/services/third-po-manage.service.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-form-item/third-po-form-item.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-form-item/third-po-form-item.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-form/third-po-form.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-form/third-po-form.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-form-item/third-sow-form-item.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-form-item/third-sow-form-item.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-form/third-sow-form.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-form/third-sow-form.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-standalone-form-item/third-sow-standalone-form-item.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-standalone-form-item/third-sow-standalone-form-item.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-standalone-form/third-sow-form-standalone.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-sow-standalone-form/third-sow-form-standalone.component.ts","./src/app/requests/services/email-tps.service.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/email-tps/email-tps.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/email-tps/email-tps.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/tps-item/tps-item.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/tps-item/tps-item.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/tps-bulk-change/tps-bulk-change.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/tps-bulk-change/tps-bulk-change.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/tps.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/tps/tps.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/cc-bulk-change/cc-bulk-change.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/cc-bulk-change/cc-bulk-change.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-card-collateral-confirmation/third-card-collateral-confirmation.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-card-collateral-confirmation/third-card-collateral-confirmation.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-sow-item-info/third-po-sow-item-info.component.html","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-sow-item-info/third-po-sow-item-info.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-sow-tps.component.ts","./src/app/requests/components/request-types/third-party/third-po-sow-tps/third-po-sow-tps.component.html","./src/app/requests/components/request-types/third-party/third-confirm-printer/third-confirm-printer.component.html","./src/app/requests/components/request-types/third-party/third-confirm-printer/third-confirm-printer.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-bulk-change/third-bulk-change.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-bulk-change/third-bulk-change.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/manage-card-filter/manage-card-filter.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/manage-card-filter/manage-card-filter.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/card-range-table-header/card-range-table-header.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/card-range-table-header/card-range-table-header.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/card-ranges-table/card-ranges-table.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/card-ranges-table/card-ranges-table.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/manage-card-ranges-bulk.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/manage-card-ranges-bulk.component.html","./src/app/shared/directives/interceptable-radio-group.directive.ts","./src/app/shared/components/radio-group-form-confirm/radio-group-form-confirm.component.html","./src/app/shared/components/radio-group-form-confirm/radio-group-form-confirm.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-operations-range-details/third-operations-range-details.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-operations-range-details/third-operations-range-details.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-operations-card-info/third-operations-card-info.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-operations-card-info/third-operations-card-info.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-operations-item-form/third-operations-item-form.component.html","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-operations-item-form/third-operations-item-form.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-int-ext-operations.component.ts","./src/app/requests/components/request-types/third-party/third-int-ext-operations/third-int-ext-operations.component.html","./src/app/requests/services/third-at-printer.service.ts","./src/app/requests/components/request-types/third-party/third-in-production/third-in-production-bulk-change/third-in-production-bulk-change.component.ts","./src/app/requests/components/request-types/third-party/third-in-production/third-in-production-bulk-change/third-in-production-bulk-change.component.html","./src/app/requests/components/request-types/third-party/third-in-production/third-printer-milestone/third-printer-milestone.component.html","./src/app/requests/components/request-types/third-party/third-in-production/third-printer-milestone/third-printer-milestone.component.ts","./src/app/requests/components/request-types/third-party/third-in-production/third-in-production.component.ts","./src/app/requests/components/request-types/third-party/third-in-production/third-in-production.component.html","./src/app/requests/components/request-types/ih-production/ih-details/component-code.validator.ts","./src/app/requests/components/request-types/ih-production/ih-details/ih-prod-item-component-detail/ih-prod-item-component-detail.component.html","./src/app/requests/components/request-types/ih-production/ih-details/ih-prod-item-component-detail/ih-prod-item-component-detail.component.ts","./src/app/requests/components/request-types/ih-production/ih-details/ih-prod-item/ih-prod-item.component.html","./src/app/requests/components/request-types/ih-production/ih-details/ih-prod-item/ih-prod-item.component.ts","./src/app/requests/components/request-types/ih-production/ih-details/ih-details.component.ts","./src/app/requests/components/request-types/ih-production/ih-details/ih-details.component.html","./src/app/requests/models/ih-production-request.model.ts","./src/app/requests/components/shared/upload-artwork-shared/upload-artwork-shared/upload-artwork-details-shared.component.html","./src/app/requests/components/shared/upload-artwork-shared/upload-artwork-shared/upload-artwork-details-shared.component.ts","./src/app/requests/components/request-types/ih-production/common/ih-item-component/ih-item-component.component.html","./src/app/requests/components/request-types/ih-production/common/ih-item-component/ih-item-component.component.ts","./src/app/requests/components/request-types/ih-production/common/ih-item-header/ih-item-header.component.html","./src/app/requests/components/request-types/ih-production/common/ih-item-header/ih-item-header.component.ts","./src/app/requests/components/request-types/ih-production/common/ih-item-subheader/ih-item-subheader.component.html","./src/app/requests/components/request-types/ih-production/common/ih-item-subheader/ih-item-subheader.component.ts","./src/app/requests/components/request-types/ih-production/common/ih-item-body/ih-item-body.component.html","./src/app/requests/components/request-types/ih-production/common/ih-item-body/ih-item-body.component.ts","./src/app/requests/components/request-types/ih-production/ih-upload-artwork/ih-upload-artwork-item-component/ih-upload-artwork-item-component.component.html","./src/app/requests/components/request-types/ih-production/ih-upload-artwork/ih-upload-artwork-item-component/ih-upload-artwork-item-component.component.ts","./src/app/requests/components/request-types/ih-production/ih-upload-artwork/ih-upload-artwork.component.html","./src/app/requests/components/request-types/ih-production/ih-upload-artwork/ih-upload-artwork.component.ts","./src/app/requests/components/request-types/ih-production/common/ih-cost-total/ih-cost-total.component.html","./src/app/requests/components/request-types/ih-production/common/ih-cost-total/ih-cost-total.component.ts","./src/app/requests/components/request-types/ih-production/ih-requester-review/ih-requester-review.component.html","./src/app/requests/components/request-types/ih-production/ih-requester-review/ih-requester-review.component.ts","./src/app/requests/components/request-step-details/abstract-unsubscribable-request-step.class.ts","./src/app/requests/services/ih-production-requests.service.ts","./src/app/requests/services/ih-po-manage.service.ts","./src/app/requests/services/ih-po-form.service.ts","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-form/ih-po-form-item/ih-po-form-component-details/ih-po-form-component-details.component.html","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-form/ih-po-form-item/ih-po-form-component-details/ih-po-form-component-details.component.ts","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-form/ih-po-form-item/ih-po-form-item.component.html","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-form/ih-po-form-item/ih-po-form-item.component.ts","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-form/ih-po-form.component.html","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-form/ih-po-form.component.ts","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-item/ih-po-item.component.html","./src/app/requests/components/request-types/ih-production/ih-po/ih-po-item/ih-po-item.component.ts","./src/app/requests/components/request-types/ih-production/ih-po/ih-po.component.ts","./src/app/requests/components/request-types/ih-production/ih-po/ih-po.component.html","./src/app/requests/components/request-types/ih-production/ih-quote-process/ih-quote-process.component.html","./src/app/requests/components/request-types/ih-production/ih-quote-process/ih-quote-process.component.ts","./src/app/requests/services/ih-production.service.ts","./src/app/requests/components/request-types/ih-production/ih-printer-proof/ih-printer-proof.component.html","./src/app/requests/components/request-types/ih-production/ih-printer-proof/ih-printer-proof.component.ts","./src/app/requests/components/request-types/ih-production/ih-internal-printer-proof/ih-internal-printer-proof.component.html","./src/app/requests/components/request-types/ih-production/ih-internal-printer-proof/ih-internal-printer-proof.component.ts","./src/app/requests/services/ih-at-printer.service.ts","./src/app/requests/components/request-types/ih-production/ih-print/ih-bulk-change/ih-bulk-change.component.ts","./src/app/requests/components/request-types/ih-production/ih-print/ih-bulk-change/ih-bulk-change.component.html","./src/app/requests/components/request-types/ih-production/ih-print/ih-printer-milestone/ih-printer-milestone.component.html","./src/app/requests/components/request-types/ih-production/ih-print/ih-printer-milestone/ih-printer-milestone.component.ts","./src/app/requests/components/request-types/ih-production/ih-print/ih-print.component.ts","./src/app/requests/components/request-types/ih-production/ih-print/ih-print.component.html","./src/app/requests/components/request-types/image/image-host/image-host.component.ts","./src/app/requests/services/image-request.service.ts","./src/app/shared/services/image-format.service.ts","./src/app/requests/components/request-types/image/image-details/image-brand/image-brand.component.ts","./src/app/requests/components/request-types/image/image-details/image-brand/image-brand.component.html","./src/app/requests/components/request-types/image/image-details/image-item-form/image-item-form.component.html","./src/app/requests/components/request-types/image/image-details/image-item-form/image-item-form.component.ts","./src/app/requests/components/request-types/image/image-details/image-details.component.ts","./src/app/requests/components/request-types/image/image-details/image-details.component.html","./src/app/requests/reducers/request-details/image.actions.ts","./src/app/requests/components/request-types/image/common/image-details-block/image-details-block.component.html","./src/app/requests/components/request-types/image/common/image-details-block/image-details-block.component.ts","./src/app/requests/components/request-types/image/common/image-item-block/image-item-block.component.html","./src/app/requests/components/request-types/image/common/image-item-block/image-item-block.component.ts","./src/app/requests/components/request-types/image/image-tm-review/image-tm-review.component.html","./src/app/requests/components/request-types/image/image-tm-review/image-tm-review.component.ts","./src/app/requests/components/request-types/image/common/image-details-accordion/image-details-accordion.component.html","./src/app/requests/components/request-types/image/common/image-details-accordion/image-details-accordion.component.ts","./src/app/requests/components/request-types/image/image-design-process/image-design-process.component.html","./src/app/requests/components/request-types/image/image-design-process/image-design-process.component.ts","./src/app/requests/components/request-types/image/image-tm-review2/image-tm-review2.component.html","./src/app/requests/components/request-types/image/image-tm-review2/image-tm-review2.component.ts","./src/app/requests/components/request-step-details/request-step-details.component.ts","./src/app/requests/components/request-step-details/request-step-details.component.html","./src/app/requests/components/request-actions/request-action-button-filter.pipe.ts","./src/app/requests/components/request-actions/request-actions.component.html","./src/app/requests/components/request-actions/request-actions.component.ts","./src/app/requests/services/actions-notes.service.ts","./src/app/requests/components/request-action-note/request-action-note.component.html","./src/app/requests/components/request-action-note/request-action-note.component.ts","./src/app/requests/services/action-history.service.ts","./src/app/requests/components/request-comments-tab/request-comments-tab.component.html","./src/app/requests/components/request-comments-tab/request-comments-tab.component.ts","./src/app/shared/directives/mat-menu-item-proxy.directive.ts","./src/app/requests/components/request-details/add-additional-other-contacts-form/add-additional-other-contacts-form.component.html","./src/app/requests/components/request-details/add-additional-other-contacts-form/add-additional-other-contacts-form.component.ts","./src/app/requests/components/request-details/add-additional-other-contacts-button/add-additional-other-contacts-button.component.ts","./src/app/requests/components/request-details/add-additional-other-contacts-button/add-additional-other-contacts-button.component.html","./src/app/requests/components/request-details/refresh-product-owner-button/refresh-product-owner-button.component.ts","./src/app/requests/components/request-details/refresh-product-owner-button/refresh-product-owner-button.component.html","./src/app/requests/components/request-details/change-owner-form/change-owner-form.component.ts","./src/app/requests/components/request-details/change-owner-form/change-owner-form.component.html","./src/app/requests/components/request-details/change-owner-button/change-owner-button.component.ts","./src/app/requests/components/request-details/change-owner-button/change-owner-button.component.html","./src/app/requests/components/request-details/change-traffic-manager-form/change-traffic-manager-form.component.ts","./src/app/requests/components/request-details/change-traffic-manager-form/change-traffic-manager-form.component.html","./src/app/requests/components/request-details/change-traffic-manager-button/change-traffic-manager-button.component.ts","./src/app/requests/components/request-details/change-traffic-manager-button/change-traffic-manager-button.component.html","./src/app/requests/components/request-details/request-details.component.ts","./src/app/requests/components/request-details/request-details.component.html","./src/app/requests/models/list-filter.model.ts","./src/app/requests/components/requests-list/request-list.data-source.ts","./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","./src/app/requests/models/list-sort.model.ts","./src/app/requests/services/request-list.service.ts","./src/app/requests/components/filter-menu/filter-menu.component.html","./src/app/requests/components/filter-menu/filter-menu.component.ts","./src/app/requests/constants/request-actions.constants.ts","./src/app/shared/directives/click-prevent-default.directive.ts","./src/app/requests/components/request-item/request-item-actions/request-item-actions.component.ts","./src/app/requests/components/request-item/request-item-actions/request-item-actions.component.html","./src/app/requests/components/request-item/request-item.component.html","./src/app/requests/components/request-item/request-item.component.ts","./src/app/shared/directives/click-no-selection.directive.ts","./src/app/requests/components/requests-list/requests-list.component.ts","./src/app/requests/components/requests-list/requests-list.component.html","./src/app/requests/requests-routing.module.ts","./src/app/requests/constants/pages.constants.ts","./src/app/requests/reducers/request-details/request-details.effects.ts","./src/app/requests/reducers/request-steps/request-steps.effects.ts","./src/app/requests/reducers/request-details/pop-design.effects.ts","./src/app/requests/reducers/request-details/card-design.effects.ts","./src/app/requests/reducers/request-details/third-party.effects.ts","./src/app/requests/reducers/request-details/image.effects.ts","./src/app/requests/reducers/request-details/card-prod.effects.ts","./src/app/requests/requests.module.ts","./node_modules/lodash/_arrayAggregator.js","./node_modules/lodash/_arrayIncludes.js","./node_modules/lodash/_arrayIncludesWith.js","./node_modules/lodash/_assignMergeValue.js","./node_modules/lodash/_baseAggregator.js","./node_modules/lodash/_baseFindIndex.js","./node_modules/lodash/_baseIndexOf.js","./node_modules/lodash/_baseIsNaN.js","./node_modules/lodash/_baseMerge.js","./node_modules/lodash/_baseMergeDeep.js","./node_modules/lodash/_baseSlice.js","./node_modules/lodash/_baseTrim.js","./node_modules/lodash/_baseUniq.js","./node_modules/lodash/_baseUnset.js","./node_modules/lodash/_baseValues.js","./node_modules/lodash/_castFunction.js","./node_modules/lodash/_createAggregator.js","./node_modules/lodash/_createAssigner.js","./node_modules/lodash/_createFind.js","./node_modules/lodash/_createSet.js","./node_modules/lodash/_customOmitClone.js","./node_modules/lodash/_parent.js","./node_modules/lodash/_safeGet.js","./node_modules/lodash/_strictIndexOf.js","./node_modules/lodash/_trimmedEndIndex.js","./node_modules/lodash/defaultTo.js","./node_modules/lodash/find.js","./node_modules/lodash/findIndex.js","./node_modules/lodash/flatMapDeep.js","./node_modules/lodash/forEach.js","./node_modules/lodash/groupBy.js","./node_modules/lodash/includes.js","./node_modules/lodash/isArrayLikeObject.js","./node_modules/lodash/isEqualWith.js","./node_modules/lodash/isPlainObject.js","./node_modules/lodash/isString.js","./node_modules/lodash/last.js","./node_modules/lodash/lodash.js","./node_modules/lodash/map.js","./node_modules/lodash/mergeWith.js","./node_modules/lodash/noop.js","./node_modules/lodash/omit.js","./node_modules/lodash/toFinite.js","./node_modules/lodash/toInteger.js","./node_modules/lodash/toNumber.js","./node_modules/lodash/toPlainObject.js","./node_modules/lodash/transform.js","./node_modules/lodash/uniqBy.js","./node_modules/lodash/values.js"],"sourcesContent":["import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, EventEmitter, forwardRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, ContentChild, ViewChild, Input, Output, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { Subject, of } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepHeader {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n /** Focuses the step header. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n}\nCdkStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepHeader, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepHeader, selector: \"[cdkStepHeader]\", host: { attributes: { \"role\": \"tab\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepHeader, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepHeader]',\n host: {\n 'role': 'tab',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepLabel {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepLabel, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepLabel, selector: \"[cdkStepLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepLabel]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each stepper component. */\nlet nextId = 0;\n/** Change event emitted on selection changes. */\nclass StepperSelectionEvent {\n}\n/** Enum to represent the different states of the steps. */\nconst STEP_STATE = {\n NUMBER: 'number',\n EDIT: 'edit',\n DONE: 'done',\n ERROR: 'error',\n};\n/** InjectionToken that can be used to specify the global stepper options. */\nconst STEPPER_GLOBAL_OPTIONS = new InjectionToken('STEPPER_GLOBAL_OPTIONS');\nclass CdkStep {\n constructor(_stepper, stepperOptions) {\n this._stepper = _stepper;\n /** Whether user has attempted to move away from the step. */\n this.interacted = false;\n /** Emits when the user has attempted to move away from the step. */\n this.interactedStream = new EventEmitter();\n this._editable = true;\n this._optional = false;\n this._completedOverride = null;\n this._customError = null;\n this._stepperOptions = stepperOptions ? stepperOptions : {};\n this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;\n }\n /** Whether the user can return to this step once it has been marked as completed. */\n get editable() {\n return this._editable;\n }\n set editable(value) {\n this._editable = coerceBooleanProperty(value);\n }\n /** Whether the completion of step is optional. */\n get optional() {\n return this._optional;\n }\n set optional(value) {\n this._optional = coerceBooleanProperty(value);\n }\n /** Whether step is marked as completed. */\n get completed() {\n return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;\n }\n set completed(value) {\n this._completedOverride = coerceBooleanProperty(value);\n }\n _getDefaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n /** Whether step has an error. */\n get hasError() {\n return this._customError == null ? this._getDefaultError() : this._customError;\n }\n set hasError(value) {\n this._customError = coerceBooleanProperty(value);\n }\n _getDefaultError() {\n return this.stepControl && this.stepControl.invalid && this.interacted;\n }\n /** Selects this step component. */\n select() {\n this._stepper.selected = this;\n }\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset() {\n this.interacted = false;\n if (this._completedOverride != null) {\n this._completedOverride = false;\n }\n if (this._customError != null) {\n this._customError = false;\n }\n if (this.stepControl) {\n this.stepControl.reset();\n }\n }\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n _markAsInteracted() {\n if (!this.interacted) {\n this.interacted = true;\n this.interactedStream.emit(this);\n }\n }\n /** Determines whether the error state can be shown. */\n _showError() {\n var _a;\n // We want to show the error state either if the user opted into/out of it using the\n // global options, or if they've explicitly set it through the `hasError` input.\n return (_a = this._stepperOptions.showError) !== null && _a !== void 0 ? _a : this._customError != null;\n }\n}\nCdkStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStep, deps: [{ token: forwardRef(() => CdkStepper) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStep, selector: \"cdk-step\", inputs: { stepControl: \"stepControl\", label: \"label\", errorMessage: \"errorMessage\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], state: \"state\", editable: \"editable\", optional: \"optional\", completed: \"completed\", hasError: \"hasError\" }, outputs: { interactedStream: \"interacted\" }, queries: [{ propertyName: \"stepLabel\", first: true, predicate: CdkStepLabel, descendants: true }], viewQueries: [{ propertyName: \"content\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"cdkStep\"], usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStep, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-step',\n exportAs: 'cdkStep',\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: function () {\n return [{ type: CdkStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => CdkStepper)]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }];\n }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [CdkStepLabel]\n }], content: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], stepControl: [{\n type: Input\n }], interactedStream: [{\n type: Output,\n args: ['interacted']\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], state: [{\n type: Input\n }], editable: [{\n type: Input\n }], optional: [{\n type: Input\n }], completed: [{\n type: Input\n }], hasError: [{\n type: Input\n }] } });\nclass CdkStepper {\n constructor(_dir, _changeDetectorRef, _elementRef, \n /**\n * @deprecated No longer in use, to be removed.\n * @breaking-change 13.0.0\n */\n _document) {\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** List of step headers sorted based on their DOM order. */\n this._sortedHeaders = new QueryList();\n this._linear = false;\n this._selectedIndex = 0;\n /** Event emitted when the selected step has changed. */\n this.selectionChange = new EventEmitter();\n /**\n * @deprecated To be turned into a private property. Use `orientation` instead.\n * @breaking-change 13.0.0\n */\n this._orientation = 'horizontal';\n this._groupId = nextId++;\n }\n /** Whether the validity of previous steps should be checked or not. */\n get linear() {\n return this._linear;\n }\n set linear(value) {\n this._linear = coerceBooleanProperty(value);\n }\n /** The index of the selected step. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(index) {\n var _a;\n const newIndex = coerceNumberProperty(index);\n if (this.steps && this._steps) {\n // Ensure that the index can't be out of bounds.\n if (!this._isValidIndex(newIndex) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n (_a = this.selected) === null || _a === void 0 ? void 0 : _a._markAsInteracted();\n if (this._selectedIndex !== newIndex &&\n !this._anyControlsInvalidOrPending(newIndex) &&\n (newIndex >= this._selectedIndex || this.steps.toArray()[newIndex].editable)) {\n this._updateSelectedItemIndex(newIndex);\n }\n }\n else {\n this._selectedIndex = newIndex;\n }\n }\n /** The step that is selected. */\n get selected() {\n return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;\n }\n set selected(step) {\n this.selectedIndex = step && this.steps ? this.steps.toArray().indexOf(step) : -1;\n }\n /** Orientation of the stepper. */\n get orientation() {\n return this._orientation;\n }\n set orientation(value) {\n // This is a protected method so that `MatSteppter` can hook into it.\n this._orientation = value;\n if (this._keyManager) {\n this._keyManager.withVerticalOrientation(value === 'vertical');\n }\n }\n ngAfterContentInit() {\n this._steps.changes\n .pipe(startWith(this._steps), takeUntil(this._destroyed))\n .subscribe((steps) => {\n this.steps.reset(steps.filter(step => step._stepper === this));\n this.steps.notifyOnChanges();\n });\n }\n ngAfterViewInit() {\n // If the step headers are defined outside of the `ngFor` that renders the steps, like in the\n // Material stepper, they won't appear in the `QueryList` in the same order as they're\n // rendered in the DOM which will lead to incorrect keyboard navigation. We need to sort\n // them manually to ensure that they're correct. Alternatively, we can change the Material\n // template to inline the headers in the `ngFor`, but that'll result in a lot of\n // code duplciation. See #23539.\n this._stepHeader.changes\n .pipe(startWith(this._stepHeader), takeUntil(this._destroyed))\n .subscribe((headers) => {\n this._sortedHeaders.reset(headers.toArray().sort((a, b) => {\n const documentPosition = a._elementRef.nativeElement.compareDocumentPosition(b._elementRef.nativeElement);\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n }));\n this._sortedHeaders.notifyOnChanges();\n });\n // Note that while the step headers are content children by default, any components that\n // extend this one might have them as view children. We initialize the keyboard handling in\n // AfterViewInit so we're guaranteed for both view and content children to be defined.\n this._keyManager = new FocusKeyManager(this._sortedHeaders)\n .withWrap()\n .withHomeAndEnd()\n .withVerticalOrientation(this._orientation === 'vertical');\n (this._dir ? this._dir.change : of())\n .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))\n .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n this._keyManager.updateActiveItem(this._selectedIndex);\n // No need to `takeUntil` here, because we're the ones destroying `steps`.\n this.steps.changes.subscribe(() => {\n if (!this.selected) {\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n });\n // The logic which asserts that the selected index is within bounds doesn't run before the\n // steps are initialized, because we don't how many steps there are yet so we may have an\n // invalid index on init. If that's the case, auto-correct to the default so we don't throw.\n if (!this._isValidIndex(this._selectedIndex)) {\n this._selectedIndex = 0;\n }\n }\n ngOnDestroy() {\n this.steps.destroy();\n this._sortedHeaders.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Selects and focuses the next step in list. */\n next() {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);\n }\n /** Selects and focuses the previous step in list. */\n previous() {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset() {\n this._updateSelectedItemIndex(0);\n this.steps.forEach(step => step.reset());\n this._stateChanged();\n }\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i) {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n /** Returns unique id for each step content element. */\n _getStepContentId(i) {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index) {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n }\n else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index, state = STEP_STATE.NUMBER) {\n const step = this.steps.toArray()[index];\n const isCurrentStep = this._isCurrentStep(index);\n return step._displayDefaultIndicatorType\n ? this._getDefaultIndicatorLogic(step, isCurrentStep)\n : this._getGuidelineLogic(step, isCurrentStep, state);\n }\n _getDefaultIndicatorLogic(step, isCurrentStep) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (!step.completed || isCurrentStep) {\n return STEP_STATE.NUMBER;\n }\n else {\n return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;\n }\n }\n _getGuidelineLogic(step, isCurrentStep, state = STEP_STATE.NUMBER) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (step.completed && !isCurrentStep) {\n return STEP_STATE.DONE;\n }\n else if (step.completed && isCurrentStep) {\n return state;\n }\n else if (step.editable && isCurrentStep) {\n return STEP_STATE.EDIT;\n }\n else {\n return state;\n }\n }\n _isCurrentStep(index) {\n return this._selectedIndex === index;\n }\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n _updateSelectedItemIndex(newIndex) {\n const stepsArray = this.steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex],\n });\n // If focus is inside the stepper, move it to the next header, otherwise it may become\n // lost when the active step content is hidden. We can't be more granular with the check\n // (e.g. checking whether focus is inside the active step), because we don't have a\n // reference to the elements that are rendering out the content.\n this._containsFocus()\n ? this._keyManager.setActiveItem(newIndex)\n : this._keyManager.updateActiveItem(newIndex);\n this._selectedIndex = newIndex;\n this._stateChanged();\n }\n _onKeydown(event) {\n const hasModifier = hasModifierKey(event);\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n if (manager.activeItemIndex != null &&\n !hasModifier &&\n (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = manager.activeItemIndex;\n event.preventDefault();\n }\n else {\n manager.onKeydown(event);\n }\n }\n _anyControlsInvalidOrPending(index) {\n if (this._linear && index >= 0) {\n return this.steps\n .toArray()\n .slice(0, index)\n .some(step => {\n const control = step.stepControl;\n const isIncomplete = control\n ? control.invalid || control.pending || !step.interacted\n : !step.completed;\n return isIncomplete && !step.optional && !step._completedOverride;\n });\n }\n return false;\n }\n _layoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Checks whether the stepper contains the focused element. */\n _containsFocus() {\n const stepperElement = this._elementRef.nativeElement;\n const focusedElement = _getFocusedElementPierceShadowDom();\n return stepperElement === focusedElement || stepperElement.contains(focusedElement);\n }\n /** Checks whether the passed-in index is a valid step index. */\n _isValidIndex(index) {\n return index > -1 && (!this.steps || index < this.steps.length);\n }\n}\nCdkStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepper, deps: [{ token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepper, selector: \"[cdkStepper]\", inputs: { linear: \"linear\", selectedIndex: \"selectedIndex\", selected: \"selected\", orientation: \"orientation\" }, outputs: { selectionChange: \"selectionChange\" }, queries: [{ propertyName: \"_steps\", predicate: CdkStep, descendants: true }, { propertyName: \"_stepHeader\", predicate: CdkStepHeader, descendants: true }], exportAs: [\"cdkStepper\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepper, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepper]',\n exportAs: 'cdkStepper',\n }]\n }], ctorParameters: function () {\n return [{ type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { _steps: [{\n type: ContentChildren,\n args: [CdkStep, { descendants: true }]\n }], _stepHeader: [{\n type: ContentChildren,\n args: [CdkStepHeader, { descendants: true }]\n }], linear: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], selected: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], orientation: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Button that moves to the next step in a stepper workflow. */\nclass CdkStepperNext {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n this.type = 'submit';\n }\n}\nCdkStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperNext, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepperNext, selector: \"button[cdkStepperNext]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.next()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperNext]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.next()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n/** Button that moves to the previous step in a stepper workflow. */\nclass CdkStepperPrevious {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n this.type = 'button';\n }\n}\nCdkStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperPrevious, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepperPrevious, selector: \"button[cdkStepperPrevious]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.previous()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperPrevious]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.previous()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepperModule {\n}\nCdkStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, declarations: [CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious], imports: [BidiModule], exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious] });\nCdkStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, imports: [[BidiModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [BidiModule],\n exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],\n declarations: [\n CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent };\n","import { Subscriber } from '../Subscriber';\nexport function find(predicate, thisArg) {\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate is not a function');\n }\n return (source) => source.lift(new FindValueOperator(predicate, source, false, thisArg));\n}\nexport class FindValueOperator {\n constructor(predicate, source, yieldIndex, thisArg) {\n this.predicate = predicate;\n this.source = source;\n this.yieldIndex = yieldIndex;\n this.thisArg = thisArg;\n }\n call(observer, source) {\n return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));\n }\n}\nexport class FindValueSubscriber extends Subscriber {\n constructor(destination, predicate, source, yieldIndex, thisArg) {\n super(destination);\n this.predicate = predicate;\n this.source = source;\n this.yieldIndex = yieldIndex;\n this.thisArg = thisArg;\n this.index = 0;\n }\n notifyComplete(value) {\n const destination = this.destination;\n destination.next(value);\n destination.complete();\n this.unsubscribe();\n }\n _next(value) {\n const { predicate, thisArg } = this;\n const index = this.index++;\n try {\n const result = predicate.call(thisArg || this, value, index, this.source);\n if (result) {\n this.notifyComplete(this.yieldIndex ? index : value);\n }\n }\n catch (err) {\n this.destination.error(err);\n }\n }\n _complete() {\n this.notifyComplete(this.yieldIndex ? -1 : undefined);\n }\n}\n","import { createAction, props } from '@ngrx/store';\nimport { RequestModel } from '../../models/request.model';\nimport { UserModel } from '../../../shared/models/user.model';\n\nexport const updateRequestDetailsSuccessCreator = (name: string) => createAction(\n name,\n props<{ data: R ; pendingUpdateRequestPointer?: number}>()\n);\n\nexport const updateRequestDetailsFinalArtDueDateCreator = (name: string) => createAction(\n name,\n props<{ request: R; finalArtDueDate: string }>(),\n);\n\nexport const updateRequestDetailsDatesApprovedCreator = (name: string) => createAction(\n name,\n props<{ request: R; datesApproved: boolean; firstRoundArtDeliveryDate: string }>(),\n);\n\nexport const deleteRequestDetailsItemCreator = (name: string) => createAction(\n name,\n props<{request: R; requestItemId: number}>(),\n);\n\nexport const updateRequestDetailsDesignerChoiceCreator = (name: string) => createAction(\n name,\n props<{ designer: UserModel|null }>(),\n);\n\nexport const tmReview2StageDataCreator = (name: string) => createAction(\n name,\n props<{ cdReviewRequired: boolean; quantityOfFiles: number }>(),\n);\n","import {createAction, props} from '@ngrx/store';\nimport {RequestModel} from '../../models/request.model';\nimport {updateRequestDetailsSuccessCreator} from './request-details.utils';\nimport {UserModel} from '../../../shared/models/user.model';\nimport { RequestDetailsPartType } from './request-details.reducer';\n\nlet pendingUpdateRequestCounter = 0;\n\nexport enum RequestDetailsActions {\n LoadRequestDetails = '[RequestDetails] Load RequestDetails',\n ResetRequestDetails = '[RequestDetails] Reset RequestDetails',\n LoadRequestDetailsSuccess = '[RequestDetails] Load RequestDetails Success',\n LoadRequestDetailsFailure = '[RequestDetails] Load RequestDetails Failure',\n UpdateRequestDetails = '[RequestDetails] Update RequestDetails',\n UpdateRequestDetailsSuccess = '[RequestDetails] Update RequestDetails Success',\n UpdateRequestDetailsFailure = '[RequestDetails] Update RequestDetails Failure',\n UpdateFinalArtDueDateFailure = '[RequestDetails] Update final art due date Failure',\n UpdateDatesApproved = '[RequestDetails] Update dates approved',\n UpdateDatesApprovedFailure = '[RequestDetails] Update dates approved Failure',\n DeleteItem = '[RequestDetails] Delete item',\n DeleteItemFailure = '[RequestDetails] Delete item Failure',\n UpdateDesigner = '[RequestDetails] Update designer',\n UpdateDesignerFailure = '[RequestDetails] Update designer Failure',\n CdReviewRequiredFailure = '[RequestDetails] Creative director review Failure',\n UpdatePpm = '[RequestDetails] Update PPM',\n UpdatePpmSuccess = '[RequestDetails] Update PPM Success',\n UpdatePpmFailure = '[RequestDetails] Update PPM Failure',\n\n ChangeRequestOwner = '[RequestDetails] Update Request Owner',\n ChangeRequestOwnerSuccess = '[RequestDetails] Update Request Owner Success',\n ChangeRequestOwnerFailure = '[RequestDetails] Update Request Owner Failure',\n\n RefreshProductOwner = '[RequestDetails] Refresh Product Owner',\n RefreshProductOwnerSuccess = '[RequestDetails] Refresh Product Owner Success',\n RefreshProductOwnerFailure = '[RequestDetails] Refresh Product Owner Failure',\n\n ChangeRequestTrafficManager = '[RequestDetails] Change TrafficManager',\n ChangeRequestTrafficManagerSuccess = '[RequestDetails] Change TrafficManager Success',\n ChangeRequestTrafficManagerFailure = '[RequestDetails] Change TrafficManager Failure',\n\n AddAdditionalOtherContacts = '[RequestDetails] Add additional other contacts',\n AddAdditionalOtherContactsSuccess = '[RequestDetails] Add additional other contacts Success',\n AddAdditionalOtherContactsFailure = '[RequestDetails] Add additional other contacts Failure',\n\n UpdateRequestStatus = '[RequestDetails] Update UpdateRequestStatus',\n UpdateRequestStatusSuccess = '[RequestDetails] Update RequestDetailsStatus Success',\n UpdateRequestStatusFailure = '[RequestDetails] Update RequestDetailsStatus Failure',\n UpdateRequestName = '[RequestDetails] Update RequestName'\n}\n\nconst loadRequestDetails = createAction(RequestDetailsActions.LoadRequestDetails, props<{requestId: string}>());\n\nconst resetRequestDetails = createAction(RequestDetailsActions.ResetRequestDetails);\n\nconst loadRequestDetailsSuccess = createAction(RequestDetailsActions.LoadRequestDetailsSuccess, props<{data: RequestModel}>());\n\nconst loadRequestDetailsFailure = createAction(RequestDetailsActions.LoadRequestDetailsFailure, props<{error: any}>());\n\n\nconst updateRequestDetails = createAction(\n RequestDetailsActions.UpdateRequestDetails,\n (args: {\n draft?: boolean;\n requestId: string | number;\n excludeParts?: false | Array;\n details: any;\n }): {\n requestId: string | number;\n details: any;\n pendingUpdateRequestPointer?: number;\n draft?: boolean;\n excludeParts: false | Array;\n } => ({\n ...args,\n excludeParts: args.excludeParts ?? false,\n pendingUpdateRequestPointer: pendingUpdateRequestCounter++\n })\n);\nconst updateRequestDetailsFailure = createAction(\n RequestDetailsActions.UpdateRequestDetailsFailure,\n props<{error: any; pendingUpdateRequestPointer?: number}>()\n);\n\nconst updateRequestDetailsSuccess = updateRequestDetailsSuccessCreator(RequestDetailsActions.UpdateRequestDetailsSuccess);\n\nconst updateRequestDetailsFinalArtDueDateFailure = createAction(\n RequestDetailsActions.UpdateFinalArtDueDateFailure,\n props<{error: any; pendingUpdateRequestPointer?: number}>()\n);\n\nconst updateRequestDetailsDatesApprovedFailure = createAction(RequestDetailsActions.UpdateDatesApprovedFailure, props<{error: any}>());\n\nconst deleteRequestDetailsItemFailure = createAction(RequestDetailsActions.DeleteItemFailure, props<{error: any}>());\n\nconst updateRequestDetailsDesignerChoiceFailure = createAction(RequestDetailsActions.UpdateDesignerFailure, props<{error: any}>());\n\nconst cdReviewRequiredFailure = createAction(RequestDetailsActions.CdReviewRequiredFailure, props<{error: any}>());\n\nconst updatePpm = createAction(RequestDetailsActions.UpdatePpm, props<{request: RequestModel; user: UserModel}>());\n\nconst updatePpmSuccess = createAction(RequestDetailsActions.UpdatePpmSuccess, props<{data: RequestModel}>());\n\nconst updatePpmFailure = createAction(RequestDetailsActions.UpdatePpmFailure, props<{error: any}>());\n\nconst changeRequestOwner = createAction(RequestDetailsActions.ChangeRequestOwner, props<{request: RequestModel; user: UserModel}>());\n\nconst changeRequestOwnerSuccess = createAction(RequestDetailsActions.ChangeRequestOwnerSuccess, props<{data: RequestModel}>());\n\nconst changeRequestOwnerFailure = createAction(RequestDetailsActions.ChangeRequestOwnerFailure, props<{error: any}>());\n\nconst updateRequestStatus = createAction(\n RequestDetailsActions.UpdateRequestStatus,\n props<{request: RequestModel; status: string; comment?: string}>()\n);\n\nconst updateRequestStatusSuccess = createAction(RequestDetailsActions.UpdateRequestStatusSuccess, props<{data: RequestModel}>());\n\nconst updateRequestStatusFailure = createAction(RequestDetailsActions.UpdateRequestStatusFailure, props<{error: any}>());\n\nconst updateRequestName = createAction(RequestDetailsActions.UpdateRequestName, props<{requestId: string; name: string}>());\n\nconst refreshProductOwner = createAction(RequestDetailsActions.RefreshProductOwner, props<{request: RequestModel}>());\n\nconst refreshProductOwnerSuccess = createAction(RequestDetailsActions.RefreshProductOwnerSuccess);\n\nconst refreshProductOwnerFailure = createAction(RequestDetailsActions.RefreshProductOwnerFailure, props<{error: any}>());\n\nconst changeRequestTrafficManager = createAction(\n RequestDetailsActions.ChangeRequestTrafficManager,\n props<{trafficManager: UserModel; skipLoading?: boolean}>()\n);\n\nconst changeRequestTrafficManagerSuccess = createAction(\n RequestDetailsActions.ChangeRequestTrafficManagerSuccess,\n props<{data: RequestModel; skipLoading?: boolean}>()\n);\n\nconst changeRequestTrafficManagerFailure = createAction(\n RequestDetailsActions.ChangeRequestTrafficManagerFailure,\n props<{error: any; skipLoading?: boolean}>()\n);\n\nconst addAdditionalOtherContacts = createAction(\n RequestDetailsActions.AddAdditionalOtherContacts,\n props<{request: RequestModel; additionalOtherContacts: UserModel[]; skipLoading?: boolean}>()\n);\n\nconst addAdditionalOtherContactsSuccess = createAction(\n RequestDetailsActions.AddAdditionalOtherContactsSuccess,\n props<{additionalOtherContacts: UserModel[]; skipLoading?: boolean}>()\n);\n\nconst addAdditionalOtherContactsFailure = createAction(\n RequestDetailsActions.AddAdditionalOtherContactsFailure,\n props<{error: any; skipLoading?: boolean}>()\n);\n\nexport const requestDetailsActions = {\n loadRequestDetails,\n loadRequestDetailsSuccess,\n loadRequestDetailsFailure,\n resetRequestDetails,\n updateRequestDetails,\n updateRequestDetailsSuccess,\n updateRequestDetailsFailure,\n updateRequestDetailsFinalArtDueDateFailure,\n updateRequestDetailsDatesApprovedFailure,\n updateRequestDetailsDesignerChoiceFailure,\n deleteRequestDetailsItemFailure,\n cdReviewRequiredFailure,\n updatePpm,\n updatePpmSuccess,\n updatePpmFailure,\n updateRequestStatus,\n updateRequestStatusSuccess,\n updateRequestStatusFailure,\n updateRequestName,\n changeRequestOwner,\n changeRequestOwnerSuccess,\n changeRequestOwnerFailure,\n refreshProductOwner,\n refreshProductOwnerSuccess,\n refreshProductOwnerFailure,\n // Traffic manager change\n changeRequestTrafficManager,\n changeRequestTrafficManagerSuccess,\n changeRequestTrafficManagerFailure,\n // Traffic manager change\n addAdditionalOtherContacts,\n addAdditionalOtherContactsSuccess,\n addAdditionalOtherContactsFailure\n};\n","import { createAction, props } from '@ngrx/store';\nimport {\n ThirdPartyCardCollateralDetails,\n ThirdPartyConfirmedPrinterItems, ThirdPartyRequestItemModel,\n} from '../../models/third-party-request.model';\n\nexport type PendingItemOperationUpdate = { requestId: string; itemId: number; operationsDetails: Partial };\n\nexport enum ThirdPartyActions {\n UpdateCardCollateralDetails = '[RequestDetails ThirdParty] Update card collateral details',\n UpdateOperationsNotes = '[RequestDetails ThirdParty] Update operations notes',\n UpdateItemOperationsDetails = '[RequestDetails ThirdParty] Update item operations details',\n BatchUpdateItemOperationsDetails = '[RequestDetails ThirdParty] Batch Update item operations details',\n UpdateConfirmedPrinters = '[RequestDetails ThirdParty] Update confirmed printers',\n UpdateConfirmedPrintersSuccess = '[RequestDetails ThirdParty] Update confirmed printers success',\n UpdateConfirmedPrintersFailure = '[RequestDetails ThirdParty] Update confirmed printers failure',\n}\n\nconst updateCardCollateralDetails = createAction(\n ThirdPartyActions.UpdateCardCollateralDetails,\n props<{ requestId: string; itemId: number; details: ThirdPartyCardCollateralDetails }>(),\n);\n\nexport type UpdateOperationNotesProps = { requestId: string; operationsNotes: string };\n\nconst updateOperationsNotes = createAction(\n ThirdPartyActions.UpdateOperationsNotes,\n props(),\n);\n\nconst updateItemOperationsDetails = createAction(\n ThirdPartyActions.UpdateItemOperationsDetails,\n props(),\n);\n\nconst batchUpdateItemOperationsDetails = createAction(\n ThirdPartyActions.BatchUpdateItemOperationsDetails,\n props<{items: PendingItemOperationUpdate[]; operationNotes: string}>(),\n);\n\nconst updateConfirmedPrinters = createAction(\n ThirdPartyActions.UpdateConfirmedPrinters,\n props<{ requestId: string; items: ThirdPartyConfirmedPrinterItems }>(),\n);\n\nconst updateConfirmedPrintersSuccess = createAction(\n ThirdPartyActions.UpdateConfirmedPrintersSuccess,\n props<{ data: any }>(),\n);\n\nconst updateConfirmedPrintersFailure = createAction(\n ThirdPartyActions.UpdateConfirmedPrintersFailure,\n props<{ error: any }>(),\n);\n\nexport const thirdPartyActions = {\n updateCardCollateralDetails,\n updateOperationsNotes,\n updateItemOperationsDetails,\n batchUpdateItemOperationsDetails,\n updateConfirmedPrinters,\n updateConfirmedPrintersSuccess,\n updateConfirmedPrintersFailure,\n};\n","import {createAction, props} from '@ngrx/store';\n\nexport enum CardProdActions {\n UpdateOperationsNotes = '[RequestDetails CardProduction] Update operations notes'\n}\n\nconst updateOperationsNotes = createAction(\n CardProdActions.UpdateOperationsNotes,\n props<{ requestId: string; operationsNotes: string }>(),\n);\n\nexport const cardProdActions = {\n updateOperationsNotes\n};\n","import {createReducer, on} from '@ngrx/store';\nimport {RequestModel} from '../../models/request.model';\nimport {requestDetailsActions} from './request-details.actions';\nimport {PendingItemOperationUpdate, thirdPartyActions} from './third-party.actions';\nimport {cardProdActions} from './card-prod.actions';\nimport {UserModel} from '../../../shared/models/user.model';\n\nexport const requestDetailsFeatureKey = 'requestDetails';\n\nexport interface RequestDetailsState {\n data: RequestModel;\n loading: boolean;\n error: string;\n pendingUpdateRequestPointers: number[];\n pendingItemOperationsUpdates: PendingItemOperationUpdate[];\n pendingOperationNotes: string;\n additionalOtherContacts: UserModel[];\n}\n\nexport interface RequestDetailsParts {\n additionalOtherContacts?: UserModel[];\n}\n\nexport type RequestDetailsPartType = 'contacts';\n\nexport const requestDetailsInitialState: RequestDetailsState = {\n data: null,\n error: null,\n loading: false,\n pendingUpdateRequestPointers: [],\n pendingItemOperationsUpdates: [],\n pendingOperationNotes: null,\n additionalOtherContacts: null\n};\n\nconst extractAdditionalOtherContacts = (r: RequestModel) => r?.details?.contacts;\n\nexport const combineWithParts = (r: RequestModel, parts: RequestDetailsParts): RequestModel => {\n const contacts = 'additionalOtherContacts' in parts ? parts.additionalOtherContacts : r.details.contacts;\n return {\n ...r,\n details: {\n ...r.details,\n contacts\n }\n } as RequestModel;\n};\nexport const requestDetailsReducer = createReducer(\n requestDetailsInitialState,\n\n on(requestDetailsActions.loadRequestDetails, state => ({...state, loading: true})),\n on(requestDetailsActions.resetRequestDetails, state => ({\n ...state,\n data: null,\n additionalOtherContacts: null,\n loading: false,\n error: null\n })),\n\n on(requestDetailsActions.loadRequestDetailsSuccess, (state, action) => ({\n ...state,\n data: action.data,\n additionalOtherContacts: extractAdditionalOtherContacts(action.data),\n loading: false\n })),\n on(requestDetailsActions.loadRequestDetailsFailure, (state, action) => ({\n ...state,\n data: null,\n additionalOtherContacts: null,\n error: action.error,\n loading: false,\n pendingItemOperationsUpdates: [],\n pendingOperationNotes: null\n })),\n\n on(requestDetailsActions.updateRequestDetails, (state, action) => ({\n ...state,\n loading: true,\n pendingUpdateRequestPointers: [...state.pendingUpdateRequestPointers, action.pendingUpdateRequestPointer]\n })),\n on(requestDetailsActions.updateRequestDetailsSuccess, (state, action) => ({\n ...state,\n data: action.data,\n additionalOtherContacts: extractAdditionalOtherContacts(action.data),\n loading: false,\n pendingUpdateRequestPointers: state.pendingUpdateRequestPointers.filter(\n persistedUpdatePointer => persistedUpdatePointer !== action.pendingUpdateRequestPointer\n ),\n pendingItemOperationsUpdates: [],\n pendingOperationNotes: null\n })),\n on(requestDetailsActions.updateRequestDetailsFailure, (state, action) => ({...state, error: action.error, loading: false})),\n\n on(requestDetailsActions.updateRequestStatus, state => ({...state, loading: true})),\n on(requestDetailsActions.updateRequestStatusSuccess, (state, action) => ({\n ...state,\n data: action.data,\n additionalOtherContacts: extractAdditionalOtherContacts(action.data),\n loading: false\n })),\n on(requestDetailsActions.updateRequestStatusFailure, (state, action) => ({...state, error: action.error, loading: false})),\n\n on(requestDetailsActions.updateRequestName, state => ({...state, loading: true})),\n\n on(thirdPartyActions.batchUpdateItemOperationsDetails, state => ({...state, loading: true})),\n on(thirdPartyActions.updateItemOperationsDetails, (state, action) => ({\n ...state,\n pendingItemOperationsUpdates: [...state.pendingItemOperationsUpdates, action]\n })),\n on(thirdPartyActions.updateOperationsNotes, (state, action) => ({...state, pendingOperationNotes: action.operationsNotes})),\n\n on(cardProdActions.updateOperationsNotes, state => ({...state, loading: true})),\n on(requestDetailsActions.changeRequestTrafficManager, (state, action) => ({...state, loading: action?.skipLoading ? true : false})),\n on(requestDetailsActions.changeRequestTrafficManagerSuccess, (state, action) => ({\n ...state,\n ...(action.skipLoading ? {loading: false} : {}),\n data: action.data,\n additionalOtherContacts: extractAdditionalOtherContacts(action.data)\n })),\n on(requestDetailsActions.changeRequestTrafficManagerFailure, (state, action) => ({\n ...state,\n error: action.error,\n ...(action.skipLoading ? {loading: false} : {})\n })),\n on(requestDetailsActions.addAdditionalOtherContacts, (state, action) => ({...state, loading: action?.skipLoading ? true : false})),\n on(requestDetailsActions.addAdditionalOtherContactsSuccess, (state, action) => ({\n ...state,\n ...(action.skipLoading ? {loading: false} : {}),\n additionalOtherContacts: action.additionalOtherContacts\n })),\n on(requestDetailsActions.addAdditionalOtherContactsFailure, (state, action) => ({\n ...state,\n\n error: action.error,\n ...(action.skipLoading ? {loading: false} : {})\n }))\n);\n","export enum RequestStageState {\n InProgress = 'IN_PROGRESS',\n Completed = 'COMPLETED',\n Planned = 'PLANNED',\n Canceled = 'CANCELED',\n CanceledBySystem = 'CANCELED_BY_SYSTEM',\n}\n\nexport enum RequestStageActions {\n Complete = 'COMPLETE',\n Cancel = 'CANCEL',\n RouteBack = 'ROUTE_BACK',\n Activate = 'ACTIVATE'\n}\n","import { createAction, props } from '@ngrx/store';\nimport { RequestStage } from '../../models/request-stage.model';\n\nexport const loadRequestSteps = createAction(\n '[RequestSteps] Load RequestSteps',\n props<{ requestId: string }>()\n);\n\nexport const loadRequestStepsSuccess = createAction(\n '[RequestSteps] Load RequestSteps Success',\n props<{ data: Array }>()\n);\n\nexport const loadRequestStepsFailure = createAction(\n '[RequestSteps] Load RequestSteps Failure',\n props<{ error: any }>()\n);\n\n\n/**\n * Selects stage in stepper\n */\nexport const goToStage = createAction(\n '[RequestSteps] Select Stage By Code',\n props<{ stageCode: string }>()\n);\n\n/**\n * Selects stage in stepper\n */\nexport const selectStage = createAction(\n '[RequestSteps] Select Stage',\n props<{ stage: RequestStage }>()\n);\n\n/**\n * Activates stage in system\n */\nexport const activateStage = createAction(\n '[RequestSteps] Activate Stage',\n props<{ stage: RequestStage; requestId: string; comment?: string }>()\n);\n\nexport const activateStageSuccess = createAction(\n '[RequestSteps] Activate Stage Success',\n props<{ data: any }>()\n);\n\nexport const activateStageFailure = createAction(\n '[RequestSteps] Activate Step Failure',\n props<{ error: any }>()\n);\n\nexport const cancelStage = createAction(\n '[RequestSteps] Cancel Stage',\n props<{ stage: RequestStage; requestId: string }>()\n);\n\nexport const cancelStageSuccess = createAction(\n '[RequestSteps] Cancel Stage Success',\n props<{ data: any }>()\n);\n\nexport const cancelStageFailure = createAction(\n '[RequestSteps] Cancel Step Failure',\n props<{ error: any }>()\n);\n","import { createReducer, on } from '@ngrx/store';\n\nimport { RequestStageState } from '../../../shared/services/request-stages.enum';\nimport { RequestStage } from '../../models/request-stage.model';\nimport { loadRequestSteps, loadRequestStepsFailure, loadRequestStepsSuccess, selectStage } from './request-steps.actions';\n\nexport const requestStepsFeatureKey = 'requestSteps';\n\nexport interface RequestStepsState {\n loading: boolean;\n data: Array;\n requestId: string;\n stepInProgress: RequestStage;\n currentStage: RequestStage;\n notes: RequestStage['action'];\n}\n\nexport const requestStepsInitialState: RequestStepsState = {\n loading: false,\n data: [],\n requestId: null,\n stepInProgress: null,\n currentStage: null,\n notes: null\n};\n\nexport const requestStepsReducer = createReducer(\n requestStepsInitialState,\n\n on(loadRequestSteps, (state, {requestId}) => ({\n ...state,\n loading: true,\n requestId,\n data: [],\n stepInProgress: null,\n currentStage: state.requestId === requestId ? state.currentStage : null // reset current stage on request change\n })),\n on(loadRequestStepsSuccess, (state, {data}) => {\n const stepInProgress = data.find(step => step?.status === RequestStageState.InProgress);\n const currentStage = stepInProgress || (data.length > 1 ? data[data.length - 1] : null);\n\n return {\n ...state,\n loading: false,\n data,\n stepInProgress,\n // keep current selected stage\n currentStage: state.currentStage ? data.find(stage => state.currentStage.code === stage.code) : currentStage,\n notes: currentStage?.action\n };\n }),\n on(selectStage, (state, {stage}) => ({...state, currentStage: stage})),\n on(loadRequestStepsFailure, (state, {error}) => ({...state, loading: false, data: []}))\n);\n","import { ActionReducerMap } from '@ngrx/store';\nimport {\n requestDetailsInitialState,\n requestDetailsReducer,\n RequestDetailsState,\n} from 'src/app/requests/reducers/request-details/request-details.reducer';\n\nimport { requestStepsInitialState, requestStepsReducer, RequestStepsState } from './request-steps/request-steps.reducer';\n\nexport const requestFeatureKey = 'request';\n\nexport interface RequestState {\n requestDetails: RequestDetailsState;\n requestSteps: RequestStepsState;\n}\n\nexport const requestInitialState = {\n requestDetails: requestDetailsInitialState,\n requestSteps: requestStepsInitialState\n};\n\nexport const requestReducers: ActionReducerMap = {\n requestDetails: requestDetailsReducer,\n requestSteps: requestStepsReducer\n};\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { requestFeatureKey, RequestState } from 'src/app/requests/reducers';\nimport { UserModel } from 'src/app/shared/models/user.model';\n\nimport { BifProductionRequestModel } from '../../models/bif-production-request.model';\nimport { CardDesignRequestModel } from '../../models/card-design-request.model';\nimport { FinancialServiceRequestModel } from '../../models/financial-service-request.model';\nimport { IhProductionRequestModel } from '../../models/ih-production-request.model';\nimport { ImageRequestModel } from '../../models/image-request.model';\nimport { PopDesignRequestModel } from '../../models/pop-design-request.model';\nimport { PopProductionRequestModel } from '../../models/pop-production-request.model';\nimport { ProductionRequestModel } from '../../models/production-request.model';\nimport { RequestModel } from '../../models/request.model';\nimport { ThirdPartyRequestModel } from '../../models/third-party-request.model';\nimport { combineWithParts, RequestDetailsParts } from './request-details.reducer';\n\nexport const selectRequestState = createFeatureSelector(requestFeatureKey);\n\nexport const selectRequestDetailsState = createSelector(\n selectRequestState,\n\n state => state.requestDetails\n);\n\nexport const selectRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as RequestModel\n);\n\nexport const selectPendingRequestUpdatePointers = createSelector(\n selectRequestDetailsState,\n\n state => state.pendingUpdateRequestPointers\n);\n\nexport const selectCardDesignRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as CardDesignRequestModel\n);\n\nexport const selectProductionRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as ProductionRequestModel\n);\n\nexport const selectPopDesignRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as PopDesignRequestModel\n);\n\nexport const selectPopProductionRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as PopProductionRequestModel\n);\n\nexport const selectFinancialServiceRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as FinancialServiceRequestModel\n);\n\nexport const selectBifProductionRequestDetails = createSelector(\n selectRequestDetailsState,\n\n state => state.data as unknown as BifProductionRequestModel\n);\n\nexport const selectThirdPartyRequestDetails = createSelector(\n selectRequestDetailsState,\n state => state.data as unknown as ThirdPartyRequestModel\n);\nexport const selectThirdPartyItemOperationsDetailUpdates = createSelector(\n selectRequestDetailsState,\n state => state.pendingItemOperationsUpdates\n);\nexport const selectThirdPartyPendingOperationNotes = createSelector(selectRequestDetailsState, state => state.pendingOperationNotes);\n\nexport const selectIhRequestDetails = createSelector(selectRequestDetailsState, state => state.data as unknown as IhProductionRequestModel);\n\nexport const selectImageRequestDetails = createSelector(selectRequestDetailsState, state => state.data as unknown as ImageRequestModel);\n\nexport const selectRequestDetailsLoading = createSelector(selectRequestDetailsState, state => state.loading);\n\nexport const selectAdditionalOtherContacts = createSelector(\n selectRequestDetailsState,\n state => state.additionalOtherContacts as unknown as UserModel[]\n);\n\nexport const selectRequestDetailsParts = createSelector(\n selectRequestDetailsState,\n state =>\n ({\n additionalOtherContacts: state.additionalOtherContacts as unknown as UserModel[]\n } as RequestDetailsParts)\n);\n\ntype DetailsCombinedSelector = {\n (state: object): ProductionRequestModel;\n (state: object): CardDesignRequestModel;\n (state: object): PopDesignRequestModel;\n (state: object): PopProductionRequestModel;\n (state: object): FinancialServiceRequestModel;\n (state: object): ThirdPartyRequestModel;\n (state: object): ImageRequestModel;\n (state: object): BifProductionRequestModel;\n (state: object): RequestModel;\n};\n\n/**\n * In order to use with type specific request models please use\n * this.store.select(selectRequestDetailsCombined as any)\n */\nexport const selectRequestDetailsCombined: DetailsCombinedSelector = createSelector(\n selectRequestDetails,\n selectRequestDetailsParts,\n (requestDetails, parts) => (requestDetails ? combineWithParts(requestDetails, parts) : null) as any\n);\n","import {Warehouse} from '../models/warehouse.model';\n\nexport class LabelHelperService {\n\n static getWarehouseLabel(shipment: Warehouse): string {\n if (!shipment) {\n return '';\n }\n return [\n shipment.name,\n shipment.address?.addressLine1,\n shipment.address?.addressLine2,\n shipment.address?.addressLine3,\n shipment.address?.city,\n shipment.address?.stateProvince,\n shipment.address?.postalCode,\n shipment.address?.country\n ].filter(str => !!str && !!str.length)\n .join(', ');\n }\n\n static isEqualIgnoreCase(a: string, b: string): boolean {\n return a?.toLowerCase() === b?.toLowerCase();\n }\n}\n","import { createSelector } from '@ngrx/store';\n\nimport { RequestDetailsState } from '../../requests/reducers/request-details/request-details.reducer';\nimport { selectRequestDetailsState } from '../../requests/reducers/request-details/request-details.selectors';\nimport { LabelHelperService } from '../../requests/services/label-helper.service';\nimport { UserState } from '../user/user.reducer';\nimport { selectUserState, selectUserWithSubstitutees } from '../user/user.selector';\n\nexport const isPPMSelector = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetailsState,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = requestDetailsState?.data?.details?.printProductionManager?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return initialized && allUsers.some((u) => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim()));\n }\n);\n\nexport const isPPMSelectorState = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetailsState,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = requestDetailsState?.data?.details?.printProductionManager?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return {\n isPPM:\n initialized && allUsers.some((u) => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim())),\n initialized\n };\n }\n);\n","import { createFeatureSelector } from '@ngrx/store';\nimport { requestFeatureKey, RequestState } from './index';\n\nexport const requestFeatureSelector = createFeatureSelector(\n requestFeatureKey\n);\n\n","import {createSelector} from '@ngrx/store';\n\nimport {requestFeatureSelector} from '../selectors';\n\nexport const selectRequestStepsState = createSelector(requestFeatureSelector, state => state.requestSteps);\nexport const selectRequestStepsDetailsState = createSelector(\n requestFeatureSelector,\n state => [state.requestSteps, state.requestDetails?.data?.type] as const\n);\n\nexport const selectRequestSteps = createSelector(selectRequestStepsState, state => state.data);\n\nexport const selectRequestDetailsSteps = createSelector(selectRequestStepsDetailsState, ([stepsState, detailsState]) =>\n detailsState ? stepsState.data : null\n);\n\nexport const selectRequestCurrentStage = createSelector(selectRequestStepsState, state => state.currentStage);\n\nexport const selectRequestStepInProgress = createSelector(selectRequestStepsState, state => state.stepInProgress);\n\nexport const selectRequestStepLoading = createSelector(selectRequestStepsState, state => state.loading);\n","import {createSelector} from '@ngrx/store';\n\nimport {requestFeatureKey} from '../../requests/reducers';\nimport {requestDetailsFeatureKey, RequestDetailsState} from '../../requests/reducers/request-details/request-details.reducer';\nimport {LabelHelperService} from '../../requests/services/label-helper.service';\nimport {UserState} from '../user/user.reducer';\nimport { selectUserState, selectUserWithSubstitutees } from '../user/user.selector';\n\nexport const selectRequestDetails = (state): RequestDetailsState => state[requestFeatureKey][requestDetailsFeatureKey];\n\nexport const isRequesterSelectorState = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = requestDetailsState?.data?.creator?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return {\n isCreator:\n initialized && allUsers.some((u) => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim())),\n initialized: requestDetailsState.loading === false && userState.substitutees !== null\n };\n }\n);\n","import {requestDetailsFeatureKey, RequestDetailsState} from '../../requests/reducers/request-details/request-details.reducer';\nimport {createSelector} from '@ngrx/store';\nimport {UserState} from '../user/user.reducer';\nimport {requestFeatureKey} from '../../requests/reducers/index';\nimport {UserModel} from '../../shared/models/user.model';\nimport {LabelHelperService} from '../../requests/services/label-helper.service';\nimport { selectUserState, selectUserWithSubstitutees } from '../user/user.selector';\n\nexport const selectRequestDetails = (state): RequestDetailsState => state[requestFeatureKey][requestDetailsFeatureKey];\n\nexport const isProductOwnerSelectorState = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n const resultState = {\n isProductOwner: false,\n initialized\n };\n\n\n requestDetailsState?.data?.items?.forEach(reqItem => {\n (reqItem as {productOwners?: UserModel[]})?.productOwners?.forEach(productOwner => {\n allUsers.forEach(currentUser => {\n if (LabelHelperService.isEqualIgnoreCase(productOwner.userName.trim(), currentUser.trim())) {\n resultState.isProductOwner = true;\n return true;\n }\n return false;\n });\n });\n });\n\n return resultState;\n }\n);\n","import {State} from '../index';\nimport {requestDetailsFeatureKey, RequestDetailsState} from '../../requests/reducers/request-details/request-details.reducer';\nimport {createSelector} from '@ngrx/store';\nimport {UserState} from '../user/user.reducer';\nimport {requestFeatureKey} from '../../requests/reducers';\nimport {selectRequestSteps} from '../../requests/reducers/request-steps/request-steps.selectors';\nimport {RequestStage} from '../../requests/models/request-stage.model';\nimport {LabelHelperService} from '../../requests/services/label-helper.service';\nimport {selectUserState, selectUserWithSubstitutees} from '../user/user.selector';\n\nexport const selectRequestDetails = (state: State): RequestDetailsState => state[requestFeatureKey][requestDetailsFeatureKey];\n\nexport const isAssigneeStepIncludedState = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n selectRequestSteps,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState, stages: RequestStage[]): {\n isAssigneeStepIncluded: boolean;\n initialized: boolean;\n} => {\n const {user, substitutees} = userState;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n const resultState = {\n isAssigneeStepIncluded: false,\n initialized\n };\n\n const currentStep = stages.find(stage => stage.code === requestDetailsState?.data?.stage);\n\n resultState.isAssigneeStepIncluded = allUsers.some(\n currentUser => !!currentStep?.assignees?.find(assignee => LabelHelperService.isEqualIgnoreCase(assignee, currentUser))\n );\n\n return resultState;\n }\n);\n","import {createSelector} from '@ngrx/store';\n\nimport {DesignerAwareRequestModel} from '../../requests/models/request.model';\nimport {requestFeatureKey} from '../../requests/reducers';\nimport {requestDetailsFeatureKey, RequestDetailsState} from '../../requests/reducers/request-details/request-details.reducer';\nimport {LabelHelperService} from '../../requests/services/label-helper.service';\nimport {UserState} from '../user/user.reducer';\nimport { selectUserState, selectUserWithSubstitutees } from '../user/user.selector';\n\nexport const selectRequestDetails = (state): RequestDetailsState => state[requestFeatureKey][requestDetailsFeatureKey];\n\nexport const isDesignerSelector = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = (requestDetailsState?.data as DesignerAwareRequestModel)?.details?.designer?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return initialized && allUsers.some(u => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim()));\n }\n);\n\nexport const designerSelectorState = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = (requestDetailsState?.data as DesignerAwareRequestModel)?.details?.designer?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return {\n designerName: (requestDetailsState.data as DesignerAwareRequestModel)?.details?.designer?.userName,\n currentUserName: userState.user,\n initialized,\n isDesigner: initialized && allUsers.some(u => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim()))\n };\n }\n);\n","import {Subject, Observable} from 'rxjs';\nimport {map, share} from 'rxjs/operators';\nimport {AbstractRoleProvider} from './role-provider';\nimport {Injectable} from '@angular/core';\n\nexport interface RoleUpdateEvent {\n source: AbstractRoleUpdateAwareProvider;\n data: any;\n}\n\n@Injectable()\nexport abstract class AbstractRoleUpdateAwareProvider extends AbstractRoleProvider {\n protected rolesUpdateDataSubject = new Subject();\n public roleUpdates$: Observable = this.rolesUpdateDataSubject.asObservable().pipe(\n map(data => ({source: this, data})),\n share()\n );\n}\n","import { Injectable } from '@angular/core';\nimport { isPPMSelectorState } from '../../reducers/ppm/ppm.selectors';\nimport { takeWhile, pluck, timeoutWith, map } from 'rxjs/operators';\nimport { throwError, of } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { isRequesterSelectorState } from '../../reducers/creator/creator.selectors';\nimport { isProductOwnerSelectorState } from '../../reducers/product-owner/product-owner.selectors';\nimport { isAssigneeStepIncludedState } from '../../reducers/assignee-step-included/assignee-step-included.selectors';\nimport { designerSelectorState } from 'src/app/reducers/designer/designer.selectors';\nimport { AbstractRoleUpdateAwareProvider } from '../classes/role-update-aware-provider';\n\n@Injectable()\nexport class RequestSpecificRoleProvider extends AbstractRoleUpdateAwareProvider {\n private isUserProductionManager$ = this.store.select(isPPMSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isPPM'),\n map(isPPMResult => isPPMResult ? 'PRINT_PRODUCTION_MANAGER' : null ),\n timeoutWith(7000,\n throwError(new Error(this.translateService.instant('common.errors.data-not-initialized')))\n )\n );\n\n private isDesignerSelectorState$ = this.store.select(designerSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n map(({isDesigner}) => {\n if (isDesigner) {\n return 'DESIGNER';\n }\n\n return null;\n }),\n timeoutWith(7000,\n throwError(new Error(this.translateService.instant('common.errors.data-not-initialized')))\n )\n );\n\n private isUserRequester$ = this.store.select(isRequesterSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isCreator'),\n map(isCreatorResult => isCreatorResult ? 'REQUESTER' : null),\n timeoutWith(7000,\n throwError(new Error(this.translateService.instant('common.errors.data-not-initialized')))\n )\n );\n\n private isUserProductOwner$ = this.store.select(isProductOwnerSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isProductOwner'),\n map(isProductOwnerResult => isProductOwnerResult ? 'PRODUCT_OWNER' : null),\n timeoutWith(7000,\n throwError(new Error(this.translateService.instant('common.errors.data-not-initialized')))\n )\n );\n\n private isUserAssigneeStepIncluded$ = this.store.select(isAssigneeStepIncludedState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isAssigneeStepIncluded'),\n map(isAssigneeStepIncludedResult => isAssigneeStepIncludedResult ? 'ASSIGNEE_STEP_INCLUDED' : null),\n timeoutWith(7000,\n throwError(new Error(this.translateService.instant('common.errors.data-not-initialized')))\n )\n );\n\n private isAny$ = of('ANY');\n\n constructor(private store: Store,\n private translateService: TranslateService) {\n super();\n }\n\n async getRoles() {\n const requestPermissions = await Promise.all([\n this.isUserProductionManager$.toPromise(),\n this.isDesignerSelectorState$.toPromise(),\n this.isUserRequester$.toPromise(),\n this.isUserProductOwner$.toPromise(),\n this.isUserAssigneeStepIncluded$.toPromise(),\n this.isAny$.toPromise()\n ]);\n\n return requestPermissions.filter(p => p !== null);\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { UtilsService } from '../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-reassign-ppm-form',\n templateUrl: './reassign-ppm-form.component.html',\n styleUrls: ['./reassign-ppm-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ReassignPpmFormComponent {\n public form = new FormGroup({\n user: new FormControl(),\n });\n public userControl: AbstractControl = this.form.get('user');\n readonly testId = 'print_production_manager';\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public dialogData,\n public utilsService: UtilsService,\n private dialogRef: MatDialogRef,\n ) {}\n\n public onClose(): void {\n this.dialogRef.close();\n }\n\n public onSubmit(): void {\n const { firstName, lastName, userName } = this.form.value.user;\n this.dialogRef.close({ firstName, lastName, userName });\n }\n}\n","
\n \n\n

\n {{ 'module.requests.text.reassign-ppm' | translate }}\n

\n\n
\n \n
\n\n \n
\n
\n \n {{ 'common.button.reassign' | translate }}\n \n
\n
\n \n
\n
\n
\n\n","import { InjectionToken } from '@angular/core';\n\nimport { REQUEST_TYPE } from '../../constants/request-types.constant';\nimport { RequestController } from './request-details.model';\n\nexport const REQUEST_CONTROLLER = new InjectionToken('REQUEST_CONTROLLER');\n\nexport const NO_RELOAD_COMPONENT_STAGES = [\n [REQUEST_TYPE.CDR, 'TM_REVIEW_3'].join('.'),\n [REQUEST_TYPE.CDR, 'PREP_ARTIFACTS'].join('.'),\n [REQUEST_TYPE.CDR, 'POST_ARTIFACTS'].join('.'),\n [REQUEST_TYPE.PDR, 'TM_REVIEW_3'].join('.'),\n [REQUEST_TYPE.PDR, 'PREP_ARTIFACTS'].join('.'),\n [REQUEST_TYPE.PDR, 'POST_ARTIFACTS'].join('.'),\n [REQUEST_TYPE.BPR, 'ARTWORK_UPLOAD_AND_COST_QUOTE_CONFIRMATION'].join('.'),\n [REQUEST_TYPE.IPR, 'ARTWORK_UPLOAD_AND_COST_QUOTE_CONFIRMATION'].join('.'),\n];\n","import {Injectable, Optional, SkipSelf} from '@angular/core';\nimport {BehaviorSubject, EMPTY, merge, Observable, Subject} from 'rxjs';\nimport {share, switchMap, takeUntil} from 'rxjs/operators';\n\nimport {AbstractRoleUpdateAwareProvider, RoleUpdateEvent} from './role-update-aware-provider';\n\n@Injectable()\nexport class RoleProviderAggregator extends AbstractRoleUpdateAwareProvider {\n constructor(@SkipSelf() @Optional() roleProviderAggregator: RoleProviderAggregator) {\n super();\n if (roleProviderAggregator) {\n throw new Error(\n 'RoleProviderAggregator was defined in upper scope. This might be an issue, case for the moment RoleProviderAggregator does not support calling parent provider. Please remove `providers: [...,RoleProviderAggregator,...]` in you component/module definition.'\n );\n }\n }\n private roleUpdateProviders = new BehaviorSubject[]>([]);\n private roleProviders: Array = [];\n private takeUntilSubjects = new Map>();\n public addRoleProvider(provider: AbstractRoleUpdateAwareProvider) {\n const roleUpdates = this.roleProviders.map(rp => rp.roleUpdates$);\n this.roleProviders = [...this.roleProviders, provider];\n const takeUntilSubject = new Subject();\n this.takeUntilSubjects.set(provider, takeUntilSubject);\n\n this.roleUpdateProviders.next([...roleUpdates, provider.roleUpdates$.pipe(takeUntil(takeUntilSubject))]);\n }\n public removeRoleProvider(provider: AbstractRoleUpdateAwareProvider) {\n this.takeUntilSubjects.get(provider).next();\n this.takeUntilSubjects.get(provider).complete();\n this.roleProviders = this.roleProviders.filter(existingRoleProvider => provider !== existingRoleProvider);\n this.roleUpdateProviders.next(this.roleProviders.map(rp => rp.roleUpdates$));\n }\n public getRoles(): Promise> {\n return Promise.all([...this.roleProviders.map(rp => rp.getRoles())]).then(providerRoles => providerRoles.flat());\n }\n roleUpdates$: Observable = this.roleUpdateProviders.asObservable().pipe(\n switchMap(roleUpdateProviders => (roleUpdateProviders.length ? (merge(...roleUpdateProviders) as Observable) : EMPTY)),\n share()\n );\n}\n","import {ComponentRef, ElementRef, Injectable} from '@angular/core';\nimport {RequestActionButton} from '../models/request-actions.model';\nimport {\n BifEvents,\n CardDesignEvents,\n Events,\n EventService,\n FsrEvents,\n PopDesignEvents,\n PopProductionEvents,\n ThirdPartyEvents,\n IhEvents,\n ImageEvents,\n RequestEvents\n} from '../../shared/services/event-service.service';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {RequestActionReasonComponent} from '../components/request-action-reason/request-action-reason.component';\nimport {ActionsReasonService} from './actions-reason.service';\nimport {ConnectedPosition, Overlay} from '@angular/cdk/overlay';\nimport {UserRoles} from '../../shared/constants/user-roles.constant';\nimport {Observable, ReplaySubject} from 'rxjs';\nimport {OverlayRef} from '@angular/cdk/overlay/overlay-ref';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StepActionsService {\n\n private REQUESTS: { [key: string]: { [key: string]: Array } } = {\n PRODUCTION_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n REQUEST_REVIEW: [\n this.productionReviewRollbackButton(), this.requestDetailsSubmitButton()\n ],\n FINANCE_APPROVAL: [\n this.defaultBackButton(), this.defaultApproveButton()\n ],\n UPLOAD_ARTWORK: [\n this.defaultBackButton(), this.defaultCancelButton(), this.uploadArtworkSubmitButton()\n ],\n ART_APPROVAL: [\n this.defaultBackButton(), this.defaultCancelButton(), this.approveArtSubmitButton()\n ],\n PO_SOW: [\n this.defaultBackButton(), this.defaultCancelButton(), this.poSowSubmitButton()\n ],\n COMMITTEE_APPROVAL: [\n this.defaultBackButton(), this.defaultCancelButton(), this.defaultApproveButton()\n ],\n PRINT: [\n this.defaultBackButton(), this.atPrinterCloseJobButton()\n ],\n COMPLETED: [],\n },\n CARD_DESIGN_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n TM_REVIEW: [\n this.tmReviewRollbackButton(), this.tmReviewSaveButton(), this.cdTmReviewSubmitButton(),\n ],\n DESIGN_PROCESS: [\n this.defaultBackButton(), this.designProcessSubmitButton(),\n ],\n TM_REVIEW_2: [\n this.defaultBackButtonV2(), this.cdTmReview2SubmitButton(),\n ],\n CREATIVE_DIRECTOR_REVIEW: [\n this.defaultBackButton(), this.defaultCancelButton(), this.cdCreativeReviewSubmitButton(),\n ],\n INT_EXT_CLIENT_PROOF: [\n this.defaultBackButton(), this.intExtClientProofApproveButton(),\n ],\n TM_REVIEW_3: [\n this.defaultBackButtonV2(), this.cdTmReview3SubmitButton(),\n ],\n PREP_ARTIFACTS: [\n this.defaultBackButtonV2(),\n this.cdPrepArtifactSaveButton(),\n this.cdPrepArtifactSubmitButton(),\n ],\n POST_ARTIFACTS: [\n this.defaultBackButton(),\n this.cdPostArtifactSubmitButton(),\n ],\n COMPLETED: [],\n },\n POP_DESIGN_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n FINANCIAL_SERVICES_REVIEW: [\n this.popDesignFinancialServicesRollbackButton(), this.popDesignFinancialServicesSubmitButton()\n ],\n TM_REVIEW: [\n this.defaultBackButtonV2(), this.tmReviewSaveButton(), this.pdTmReviewSubmitButton()\n ],\n DESIGN_PROCESS: [\n this.defaultBackButton(), this.defaultSubmitButton()\n ],\n TM_REVIEW_2: [\n this.defaultBackButtonV2(), this.pdTmReview2SubmitButton()\n ],\n CREATIVE_DIRECTOR_REVIEW: [\n this.defaultBackButton(), this.defaultCancelButton(), this.pdTmReview2SubmitButton()\n ],\n FINANCIAL_SERVICES_REVIEW_2: [\n this.defaultBackButton(), this.pdFsReview2SubmitButton()\n ],\n INT_EXT_CLIENT_PROOF: [\n this.defaultBackButton(), this.defaultSubmitButton()\n ],\n TM_REVIEW_3: [\n this.defaultBackButtonV2(), this.pdTmReview3SubmitButton(),\n ],\n PREP_ARTIFACTS: [\n this.defaultBackButtonV2(),\n this.pdPrepArtifactSaveButton(),\n this.pdPrepArtifactSubmitButton(),\n ],\n POST_ARTIFACTS: [\n this.defaultBackButton(),\n this.pdPostArtifactSubmitButton(),\n ],\n COMPLETED: [],\n },\n POP_PRODUCTION_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n PRODUCTION_REVIEW: [\n this.productionReviewRollbackButton(), this.defaultCancelButton(), this.productionReviewSubmitButton()\n ],\n PRINTER_QUOTE_REQUEST: [\n this.defaultBackButton(), this.printerQuoteSubmitButton()\n ],\n INTERNAL_REQUESTOR_REVIEW: [\n this.defaultBackButton(), this.ppInternalRequesterReviewSubmit()\n ],\n FINANCE_APPROVAL: [\n this.defaultBackButton(), this.defaultApproveButton()\n ],\n UPLOAD_ARTWORK: [\n this.defaultBackButton(), this.uploadArtworkSubmitButton()\n ],\n PO_SOW: [\n this.defaultBackButton(), this.poSowSubmitButton()\n ],\n PRINTER_PROOF_REQUEST: [\n this.defaultBackButton(), this.defaultCancelButton(), this.ppVendorProofSubmitButton()\n ],\n INTERNAL_PRINTER_PROOF_REVIEW: [\n this.defaultBackButton(), this.ppReviewVendorProofApproveButton()\n ],\n PRINT: [\n this.defaultBackButton(), this.atPrinterCloseJobButton()\n ],\n COMPLETED: []\n },\n FINANCIAL_SERVICES_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n FINANCE_APPROVAL: [\n this.defaultBackButton(), this.defaultApproveButton()\n ],\n UPLOAD_ARTWORK: [\n this.defaultBackButton(), this.defaultCancelButton(), this.fsrUploadSubmitButton()\n ],\n PO: [\n this.defaultBackButton(), this.poSowSubmitButton()\n ],\n ART_REQUEST_APPROVAL: [\n this.defaultBackButton(), this.fsrArtworkApproveButton()\n ],\n PRINT: [\n this.defaultBackButton(), this.atPrinterCloseJobButton()\n ],\n COMPLETED: [],\n },\n BIF_PRODUCTION_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n ARTWORK_UPLOAD_AND_COST_QUOTE_CONFIRMATION: [\n this.defaultBackButton(), this.uploadArtworksSubmitButton()\n ],\n FINANCE_APPROVAL: [\n this.defaultBackButton(), this.defaultApproveButton()\n ],\n PO: [\n this.defaultBackButton(), this.poSowSubmitButton()\n ],\n PRINTER_PROOF_REQUEST: [\n this.defaultBackButton(), this.uploadPrinterProofSubmitButton()\n ],\n INTERNAL_PRINTER_PROOF_REVIEW: [\n this.defaultBackButton(), this.bifInternalReviewPrinterProofApproveButton()\n ],\n PRINT: [\n this.defaultBackButton(), this.atPrinterCloseJobButton()\n ],\n COMPLETED: []\n },\n PRODUCTION_REQUEST_3RD_PARTY: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton()\n ],\n FINANCE_APPROVAL: [\n this.defaultBackButton(), this.defaultApproveButton()\n ],\n UPLOAD_ARTWORK: [\n this.defaultBackButton(), this.defaultCancelButton(), this.uploadArtworkSubmitButton()\n ],\n ART_REQUEST_APPROVAL: [\n this.defaultBackButton(), this.thirdArtApproveButton()\n ],\n PO_SOW_TPS: [\n this.defaultBackButton(), this.poSowSubmitButton()\n ],\n COMMITTEE_APPROVAL: [\n this.defaultBackButton(), this.defaultApproveButton()\n ],\n CONFIRM_PRINTER: [\n this.defaultBackButton(), this.thirdConfirmPrinterButton()\n ],\n INTERNAL_EXTERNAL_OPERATIONS: [\n this.defaultBackButton(), this.thirdInternalExternalOperationsSubmitButton()\n ],\n IN_PRODUCTION: [\n this.defaultBackButton(), this.atPrinterCloseJobButton()\n ],\n COMPLETED: []\n },\n IH_PRODUCTION_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton(),\n ],\n ARTWORK_UPLOAD_AND_COST_QUOTE_CONFIRMATION: [\n this.defaultBackButton(), this.defaultCancelButton(), this.ihUploadArtworkSubmitButton()\n ],\n INTERNAL_REQUESTOR_REVIEW: [\n this.defaultBackButton(), this.ihArtworkApproveButton()\n ],\n PO: [\n this.defaultBackButton(), this.poSowSubmitButton()\n ],\n IH_QUOTE_PROCESS: [\n this.defaultBackButton(), this.defaultSubmitButton()\n ],\n PRINTER_PROOF_REQUEST: [\n this.defaultBackButton(), this.uploadPrinterProofSubmitButton()\n ],\n INTERNAL_PRINTER_PROOF_REVIEW: [\n this.defaultBackButton(), this.ihInternalPrinterProofApproveButton()\n ],\n PRINT: [\n this.defaultBackButton(), this.atPrinterCloseJobButton()\n ],\n COMPLETED: [],\n },\n IMAGE_REQUEST: {\n REQUEST_DETAILS: [\n this.requestDetailsDeleteButton(), this.requestDetailsSaveButton(), this.requestDetailsSubmitButton(),\n ],\n TM_REVIEW: [\n this.defaultBackButtonV2(), this.imageTmReviewSubmitButton()\n ],\n DESIGN_PROCESS: [\n this.defaultBackButton(), this.imageDesignProcessSubmitButton()\n ],\n TM_REVIEW_2: [\n this.defaultBackButtonV2(), this.imageTmReview2CloseJobButton()\n ],\n COMPLETED: [],\n },\n };\n\n private currentActionsSubject: ReplaySubject = new ReplaySubject(1);\n private currentActionsObject: { actions: RequestActionButton[]; currentStage: string } = {\n actions: [],\n currentStage: ''\n };\n\n constructor(private eventService: EventService,\n private actionsReasonService: ActionsReasonService,\n private overlay: Overlay) {\n }\n\n\n public getActionsButtons(): Observable {\n return this.currentActionsSubject.asObservable();\n }\n\n public updateCurrentStepActions(requestType: string, stepCode: string, isStepDisabled: boolean): void {\n if (requestType) {\n const actions = cloneDeep(this.REQUESTS[requestType][stepCode]);\n\n actions?.forEach((button) => {\n button.disabled = isStepDisabled;\n\n button.permission = UserRoles?.[requestType]?.[stepCode]?.[button.eventName];\n });\n\n this.currentActionsObject.actions = actions;\n this.currentActionsObject.currentStage = stepCode;\n\n this.currentActionsSubject.next(actions);\n }\n }\n\n public changeButtonLabelOfStage(buttonEventName: string, newLabel: string, reqType: string, reqStageOfChangeButton: string): void {\n this.REQUESTS[reqType][reqStageOfChangeButton].find(buttonObj => buttonObj.eventName === buttonEventName).label = newLabel;\n\n if (reqStageOfChangeButton === this.currentActionsObject.currentStage) {\n this.currentActionsObject.actions.find(buttonObj => buttonObj.eventName === buttonEventName).label = newLabel;\n this.currentActionsSubject.next(this.currentActionsObject.actions);\n }\n }\n\n public changeButtonDisabledOfStage(buttonEventName: string, newDisabled: boolean, reqType: string, reqStageOfChangeButton: string): void {\n this.REQUESTS[reqType][reqStageOfChangeButton].find(buttonObj => buttonObj.eventName === buttonEventName).disabled = newDisabled;\n\n if (reqStageOfChangeButton === this.currentActionsObject.currentStage) {\n this.currentActionsObject.actions.find(buttonObj => buttonObj.eventName === buttonEventName).disabled = newDisabled;\n this.currentActionsSubject.next(this.currentActionsObject.actions);\n }\n }\n\n private defaultBackButton(): RequestActionButton {\n return {\n eventName: Events.StepBack,\n ngclass: 'secondary-button d-flex ai-center medium',\n position: 'left',\n label: 'common.button.step-back',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-back', 'step-back', Events.StepBack, 'left', true);\n },\n icon: 'icon-route-back'\n };\n }\n\n private defaultBackButtonV2(): RequestActionButton {\n return {\n eventName: Events.StepBack,\n ngclass: 'secondary-button d-flex ai-center medium',\n position: 'left',\n label: 'common.button.step-back',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-back', 'step-back', Events.StepBack, 'left', true);\n },\n icon: 'icon-route-back'\n };\n }\n\n private defaultCancelButton(): RequestActionButton {\n return {\n eventName: Events.StepCancel,\n ngclass: 'link-secondary d-flex ai-center',\n position: 'left',\n label: 'common.button.step-cancel',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-cancel', 'step-cancel', Events.StepCancel, 'left', true);\n },\n icon: 'icon-close'\n };\n }\n\n private defaultApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-approve', 'step-approve', Events.StepApprove, 'right');\n }\n };\n }\n\n private defaultSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-submit', 'step-submit', Events.StepSubmit, 'right');\n }\n };\n }\n\n public addReason(\n elementRef: ElementRef,\n dataId: string,\n label: string,\n eventName: RequestEvents,\n position: string,\n isRequired?: boolean,\n ): void {\n this.actionsReasonService.setIsRequired(isRequired);\n this.actionsReasonService.setAction(label);\n this.actionsReasonService.setPosition(position);\n\n let offsetX: number;\n\n const origin: HTMLButtonElement =\n elementRef.nativeElement.querySelector(`[data-test-id=\"button_${dataId}\"]`);\n\n if (position === 'right') {\n offsetX = -239;\n } else {\n offsetX = -30;\n }\n const positionStrategy = this.overlay.position().flexibleConnectedTo(origin).withPositions(\n [\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX,\n offsetY: -16\n }\n ]);\n const overlayRef = this.overlay.create({\n hasBackdrop: true,\n positionStrategy,\n width: 380,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n const reasonPortal = new ComponentPortal(RequestActionReasonComponent);\n\n overlayRef.attach(reasonPortal);\n\n const reasonDetouchSubscription = this.actionsReasonService.getReason()\n .subscribe(data => {\n overlayRef.detach();\n reasonDetouchSubscription?.unsubscribe();\n if (data.buttonClicked === 'confirm') {\n this.eventService.emit({eventName, value: data});\n }\n });\n }\n\n public createReasonAndOverlay(action: string, isRequired: boolean, title?: string):\n { ref: ComponentRef; overlayRef: OverlayRef } {\n this.actionsReasonService.setAction(action);\n this.actionsReasonService.setMainButtonTitle(title);\n this.actionsReasonService.setIsRequired(isRequired);\n this.actionsReasonService.setPosition('center');\n const overlayRef = this.createOverlayRefCentered();\n const reasonPortal = new ComponentPortal(RequestActionReasonComponent);\n return {ref: overlayRef.attach(reasonPortal), overlayRef};\n }\n\n public createOverlayRefCentered(): OverlayRef {\n const positionStrategy = this.overlay.position().global().centerHorizontally().centerVertically();\n // overlayRef\n return this.overlay.create({\n hasBackdrop: true,\n positionStrategy,\n width: 380,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n }\n\n public createOverlayRefAttached(origin: HTMLElement, position: string = 'right', hasBackdrop = true): OverlayRef {\n let attachment: ConnectedPosition;\n if (position === 'right') {\n const offsetX = -239;\n\n attachment = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX,\n offsetY: -16\n };\n } else if(position === 'right middle') {\n const offsetX = 30;\n\n attachment = {\n originX: 'start',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX,\n offsetY: 0\n };\n\n } else {\n const offsetX = -30;\n\n attachment = {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX,\n offsetY: -16\n };\n }\n const positionStrategy = this.overlay.position().flexibleConnectedTo(origin).withPositions([\n attachment\n ]);\n\n return this.overlay.create({\n hasBackdrop,\n positionStrategy,\n width: 380,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n }\n\n public createReason(overlayRef: OverlayRef, position: string, action: string, isRequired: boolean, title?: string):\n { ref: ComponentRef; overlayRef: OverlayRef } {\n this.actionsReasonService.setAction(action);\n this.actionsReasonService.setMainButtonTitle(title);\n this.actionsReasonService.setIsRequired(isRequired);\n this.actionsReasonService.setPosition(position || 'center');\n const reasonPortal = new ComponentPortal(RequestActionReasonComponent);\n return {ref: overlayRef.attach(reasonPortal), overlayRef};\n }\n\n private requestDetailsDeleteButton(): RequestActionButton {\n return {\n eventName: 'step-delete',\n disabled: false,\n ngclass: 'link-secondary d-flex ai-center pl-0',\n position: 'left',\n action: () => {\n this.eventService.emit({eventName: Events.RequestDetailsDelete});\n },\n label: 'common.button.step-delete',\n icon: 'icon-delete'\n };\n }\n\n private requestDetailsSaveButton(): RequestActionButton {\n return {\n eventName: 'step-save',\n disabled: true,\n ngclass: 'secondary-button mr-h medium',\n position: 'right',\n action: () => {\n this.eventService.emit({eventName: Events.RequestDetailsSave});\n },\n label: 'common.button.step-save'\n };\n }\n\n\n private tmReviewSaveButton(): RequestActionButton {\n return {\n eventName: 'step-save',\n disabled: true,\n ngclass: 'secondary-button mr-h medium',\n position: 'right',\n permissionEngineVersion: 2,\n action: () => {\n this.eventService.emit({eventName: Events.TmReviewSave});\n },\n label: 'common.button.save'\n };\n }\n\n private requestDetailsSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: true,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.RequestDetailsValidation, value: elementRef});\n }\n };\n }\n\n private designProcessSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.DesignProcessValidation, value: elementRef});\n }\n };\n }\n\n private popDesignFinancialServicesSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.PopFinancialServicesSubmitValidation, value: elementRef});\n }\n };\n }\n\n private popDesignFinancialServicesRollbackButton(): RequestActionButton {\n return {\n eventName: Events.StepBack,\n ngclass: 'secondary-button d-flex ai-center medium',\n position: 'left',\n label: 'common.button.step-back',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.PopFinancialServicesRollbackValidation, value: elementRef});\n },\n icon: 'icon-route-back'\n };\n }\n\n private uploadArtworkSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n disabled: false,\n ngclass: 'primary-button medium',\n label: 'common.button.step-submit',\n position: 'right',\n action: (elementRef) => {\n this.addReason(elementRef, 'step-submit', 'step-submit', Events.UploadArtworkSubmit, 'right');\n }\n };\n }\n\n private approveArtSubmitButton(): RequestActionButton {\n return {\n disabled: false,\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.ApproveSubmitValidated, value: elementRef});\n }\n };\n }\n\n private poSowSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.PoSowSubmitValidated, value: elementRef});\n }\n };\n }\n\n private cdTmReviewSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.eventService.emit({eventName: CardDesignEvents.TmReviewSubmitValidated, value: elementRef});\n }\n };\n }\n\n private cdTmReview2SubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n permissionEngineVersion: 2,\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: CardDesignEvents.TmReview2SubmitValidated, value: elementRef});\n }\n };\n }\n\n\n private cdCreativeReviewSubmitButton(): RequestActionButton {\n\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: CardDesignEvents.CreativeReviewSubmitValidated, value: elementRef});\n }\n };\n }\n\n private intExtClientProofApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: CardDesignEvents.IntExtClientProofApproveValidated, value: elementRef});\n }\n };\n }\n\n private atPrinterCloseJobButton(): RequestActionButton {\n return {\n eventName: Events.StepClose,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-close',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.AtPrinterSubmitValidated, value: elementRef});\n }\n };\n }\n\n private pdTmReviewSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n permissionEngineVersion: 2,\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopDesignEvents.TmReviewSubmitValidated, value: elementRef});\n }\n };\n }\n\n private pdTmReview2SubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n permissionEngineVersion: 2,\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopDesignEvents.TmReview2SubmitValidated, value: elementRef});\n }\n };\n }\n\n private pdFsReview2SubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopDesignEvents.FinancialServicesReview2Validation, value: elementRef});\n }\n };\n }\n\n private cdTmReview3SubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-submit', 'step-submit', CardDesignEvents.TmReview3Submit, 'right');\n }\n };\n }\n\n private cdPrepArtifactSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.eventService.emit({eventName: CardDesignEvents.PrepArtifactValidated, value: elementRef});\n }\n };\n }\n\n private cdPrepArtifactSaveButton(): RequestActionButton {\n return {\n eventName: 'step-save',\n disabled: true,\n ngclass: 'secondary-button mr-h medium',\n position: 'right',\n action: () => {\n this.eventService.emit({eventName: CardDesignEvents.PrepArtifactSave});\n },\n permissionEngineVersion: 2,\n // icon:'icon-action-approved',\n label: 'common.button.save'\n };\n }\n\n private cdPostArtifactSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepClose,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-close',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: CardDesignEvents.PostArtifactSubmit, value: elementRef});\n }\n };\n }\n\n\n private pdTmReview3SubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n permissionEngineVersion: 2,\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-submit', 'step-submit', PopDesignEvents.TmReview3Submit, 'right');\n }\n };\n }\n\n private pdPrepArtifactSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopDesignEvents.PrepArtifactValidated, value: elementRef});\n }\n };\n }\n\n private pdPrepArtifactSaveButton(): RequestActionButton {\n return {\n eventName: 'step-save',\n disabled: true,\n ngclass: 'secondary-button mr-h medium',\n position: 'right',\n action: () => {\n this.eventService.emit({eventName: PopDesignEvents.PrepArtifactSave});\n },\n permissionEngineVersion: 2,\n label: 'common.button.save'\n };\n }\n\n private pdPostArtifactSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepClose,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-close',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopDesignEvents.PostArtifactSubmit, value: elementRef});\n }\n };\n }\n\n private productionReviewSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.ProductionReviewValidation, value: elementRef});\n }\n };\n }\n\n private productionReviewRollbackButton(): RequestActionButton {\n return {\n eventName: Events.StepBack,\n ngclass: 'secondary-button d-flex ai-center medium',\n position: 'left',\n label: 'common.button.step-back',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-back', 'step-back', Events.ProductionReviewRollback, 'left', true);\n },\n icon: 'icon-route-back'\n };\n }\n\n\n private tmReviewRollbackButton(): RequestActionButton {\n return {\n eventName: Events.StepBack,\n ngclass: 'secondary-button d-flex ai-center medium',\n position: 'left',\n label: 'common.button.step-back',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-back', 'step-back', Events.TmReviewRollback, 'left', true);\n },\n icon: 'icon-route-back'\n };\n }\n\n private ppVendorProofSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-submit', 'step-submit', Events.PpVendorProofSubmit, 'right', false);\n }\n };\n }\n\n private printerQuoteSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopProductionEvents.PrinterQuoteSubmitValidated, value: elementRef});\n }\n };\n }\n\n private ppInternalRequesterReviewSubmit(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({\n eventName: PopProductionEvents.InternalRequesterReviewSubmitValidation,\n value: elementRef\n });\n }\n };\n }\n\n private ppReviewVendorProofApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: PopProductionEvents.ReviewPrinterProofApproveValidation, value: elementRef});\n }\n };\n }\n\n private fsrArtworkApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: FsrEvents.ArtworkApproveValidation, value: elementRef});\n }\n };\n }\n\n private fsrUploadSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-submit', 'step-submit', FsrEvents.UploadSubmit, 'right');\n }\n };\n }\n\n private uploadArtworksSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: true,\n action: (elementRef) => {\n this.eventService.emit({eventName: BifEvents.UploadArtworkValidation, value: elementRef});\n },\n };\n }\n\n private uploadPrinterProofSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: true,\n action: (elementRef) => {\n this.eventService.emit({eventName: Events.UploadPrinterProofValidation, value: elementRef});\n },\n };\n }\n\n private bifInternalReviewPrinterProofApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: BifEvents.InternalReviewPrinterProofValidated, value: elementRef});\n },\n };\n }\n\n private thirdArtApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: ThirdPartyEvents.ArtworkApproveValidation, value: elementRef});\n },\n };\n }\n\n private thirdInternalExternalOperationsSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: ThirdPartyEvents.InternalExternalOperationsValidation, value: elementRef});\n },\n };\n }\n\n private thirdConfirmPrinterButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: ThirdPartyEvents.ConfirmPrinterValidation, value: elementRef});\n },\n };\n }\n\n private ihUploadArtworkSubmitButton(): RequestActionButton {\n return {\n eventName: 'step-submit',\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: true,\n action: (elementRef) => {\n this.eventService.emit({eventName: IhEvents.UploadArtworkValidation, value: elementRef});\n },\n };\n }\n\n private ihArtworkApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: IhEvents.ArtworkApproveValidation, value: elementRef});\n }\n };\n }\n\n private ihInternalPrinterProofApproveButton(): RequestActionButton {\n return {\n eventName: Events.StepApprove,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-approve',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: IhEvents.InternalPrinterProofValidation, value: elementRef});\n }\n };\n }\n\n private imageTmReviewSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n permissionEngineVersion: 2,\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: ImageEvents.TmReviewSubmitValidated, value: elementRef});\n }\n };\n }\n\n private imageTmReview2CloseJobButton(): RequestActionButton {\n return {\n eventName: Events.StepClose,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-close',\n disabled: false,\n permissionEngineVersion: 2,\n action: (elementRef) => {\n this.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n }\n };\n }\n\n private imageDesignProcessSubmitButton(): RequestActionButton {\n return {\n eventName: Events.StepSubmit,\n ngclass: 'primary-button medium',\n position: 'right',\n label: 'common.button.step-submit',\n disabled: false,\n action: (elementRef) => {\n this.eventService.emit({eventName: ImageEvents.DesignProcessSubmitValidated, value: elementRef});\n }\n };\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FileUploadService} from './file-upload.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FinalizeStageService {\n\n constructor(private fileUploadService: FileUploadService) {\n }\n\n finalizePendingOperations() {\n this.fileUploadService.cancelUploads();\n }\n}\n","{{'module.requests.status.'+item.status | translate | uppercase}}\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-status-label',\n templateUrl: './status-label.component.html',\n styleUrls: ['./status-label.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StatusLabelComponent {\n @Input() public item: any;\n}\n","import {Directive, ElementRef, HostListener, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[appHover]'\n})\nexport class HoverDirective {\n constructor(private element: ElementRef,\n private renderer: Renderer2) {}\n\n @HostListener('mouseenter')\n // tslint:disable-next-line:no-unused-variable\n private onMouseEnter(): void {\n const toggleElement = this.element.nativeElement.nextSibling.querySelector('.popover-wrapper');\n this.renderer.setStyle(toggleElement, 'visibility', 'visible');\n\n }\n\n @HostListener('mouseleave')\n // tslint:disable-next-line:no-unused-variable\n private onMouseLeave($event: Array): void {\n const toggleElement = this.element.nativeElement.nextSibling.querySelector('.popover-wrapper');\n this.renderer.setStyle(toggleElement, 'visibility', 'hidden');\n }\n\n}\n","import {Component, Input, ViewChild, AfterViewInit, Renderer2} from '@angular/core';\n\n@Component({\n selector: 'app-popover',\n templateUrl: './app-popover.component.html',\n styleUrls: ['./app-popover.component.scss']\n})\nexport class AppPopoverComponent implements AfterViewInit {\n @Input() public type: string;\n @Input() public position: string;\n\n @ViewChild('popover') public popover;\n\n constructor(private renderer: Renderer2) { }\n\n ngAfterViewInit(): void {\n this.calculatePosition();\n }\n\n private calculatePosition(): void {\n const elementWidth: number = this.popover.nativeElement.offsetWidth;\n if (this.type === 'wpn' && this.position === 'right') {\n this.renderer.setStyle(this.popover.nativeElement, 'right', '-190px');\n }\n if (this.type !== 'wpn' && this.position === 'right') {\n const shift: string = -elementWidth - 10 + 'px';\n this.renderer.setStyle(this.popover.nativeElement, 'right', shift);\n }\n }\n\n}\n","
\n
\n
\n \n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { select, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { combineLatest, from, merge, Observable, of, Subject } from 'rxjs';\nimport { filter, finalize, map, pluck, shareReplay, switchMap, take, takeUntil } from 'rxjs/operators';\n\nimport { isPPMSelectorState } from '../../../reducers/ppm/ppm.selectors';\nimport {\n CARD_DESIGN_REQUEST_STAGE_CREATIVE_DIRECTOR_REVIEW,\n CARD_DESIGN_REQUEST_STAGE_DESIGN_PROCESS,\n CARD_DESIGN_REQUEST_STAGE_TM_REVIEW_2,\n POP_DESIGN_REQUEST_STAGE_CREATIVE_DIRECTOR_REVIEW,\n POP_DESIGN_REQUEST_STAGE_DESIGN_PROCESS,\n POP_DESIGN_REQUEST_STAGE_TM_REVIEW_2,\n UserRoles,\n} from '../../../shared/constants/user-roles.constant';\nimport { MessageService } from '../../../shared/services/message-service.service';\nimport { RequestStageState } from '../../../shared/services/request-stages.enum';\nimport { UserPermissionsService } from '../../../shared/services/user-permissions.service';\nimport { AbstractRoleUpdateAwareProvider } from '../../classes/role-update-aware-provider';\nimport { STATUSES } from '../../constants/request-statuses.constant';\nimport { REQUEST_TYPE } from '../../constants/request-types.constant';\nimport { RequestStage } from '../../models/request-stage.model';\nimport { selectRequestDetails } from '../../reducers/request-details/request-details.selectors';\nimport { activateStage, cancelStage } from '../../reducers/request-steps/request-steps.actions';\nimport { selectRequestStepInProgress } from '../../reducers/request-steps/request-steps.selectors';\nimport { ActionsReasonService } from '../../services/actions-reason.service';\nimport { StepActionsService } from '../../services/step-actions.service';\nimport { REQUEST_CONTROLLER } from '../request-details/request-details.constants';\nimport { RequestController } from '../request-details/request-details.model';\n\ntype PermissionOptions = {\n isInProgress: boolean | null;\n isPPM: boolean | null;\n isCardDesignTM: boolean | null;\n isPopDesignTM: boolean | null;\n isImageTM: boolean | null;\n isCreativeDirector: boolean | null;\n stageInProgress: any;\n};\n\n@Component({\n selector: 'app-request-stage-menu',\n templateUrl: './request-stage-menu.component.html',\n styleUrls: ['./request-stage-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestStageMenuComponent implements OnDestroy, OnInit {\n private ngUnsubscribe = new Subject();\n @Input() public requestId: string;\n private stageHolder: RequestStage;\n\n @Input()\n public set stage(stage: RequestStage) {\n this.stageHolder = stage;\n\n this.canActivate = RequestStageState.InProgress !== this.stage.status;\n }\n\n public get stage() {\n return this.stageHolder;\n }\n\n public canActivate: boolean;\n public requestType: string;\n\n public isRequestInProgress$ = this.store.pipe(\n select(selectRequestDetails),\n filter(v => v !== null),\n map(requestDetails => {\n this.requestType = requestDetails.type;\n return requestDetails.status === STATUSES.IN_PROGRESS;\n })\n );\n\n public isPPM$ = this.store.pipe(\n select(isPPMSelectorState),\n filter(val => val.initialized),\n pluck('isPPM')\n );\n\n public isCardDesignTM$ = merge(of(null), this.abstractRoleUpdateAwareProvider.roleUpdates$).pipe(\n switchMap(() =>\n this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGER, this.abstractRoleUpdateAwareProvider)\n ),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n\n public isPopDesignTM$ = merge(of(null), this.abstractRoleUpdateAwareProvider.roleUpdates$).pipe(\n switchMap(() =>\n this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGER, this.abstractRoleUpdateAwareProvider)\n ),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n\n public isImageTM$ = merge(of(null), this.abstractRoleUpdateAwareProvider.roleUpdates$).pipe(\n switchMap(() =>\n this.userPermissionsService.isActionAvailable(UserRoles.IMAGE_REQUEST.TRAFFIC_MANAGER, this.abstractRoleUpdateAwareProvider)\n ),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n\n public isCreativeDirector$ = from(\n this.userPermissionsService.isActionAvailable([\n UserRoles.POP_DESIGN_REQUEST.CREATIVE_DIRECTOR,\n UserRoles.CARD_DESIGN_REQUEST.CREATIVE_DIRECTOR\n ])\n );\n\n public stageInProgress$ = this.store.select(selectRequestStepInProgress).pipe(takeUntil(this.ngUnsubscribe));\n\n private REQUEST_TYPE = REQUEST_TYPE;\n\n permissionOptions$!: Observable;\n\n constructor(\n private store: Store,\n private userPermissionsService: UserPermissionsService,\n private stepActionsService: StepActionsService,\n private actionsReasonService: ActionsReasonService,\n private cdr: ChangeDetectorRef,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController,\n private messageService: MessageService,\n private translatePipe: TranslatePipe,\n private abstractRoleUpdateAwareProvider: AbstractRoleUpdateAwareProvider\n ) {}\n\n ngOnInit(): void {\n this.permissionOptions$ = combineLatest([\n this.isRequestInProgress$,\n this.isPPM$,\n this.isCardDesignTM$,\n this.isPopDesignTM$,\n this.isImageTM$,\n this.isCreativeDirector$,\n this.stageInProgress$ as Observable\n ]).pipe(\n map(([isInProgress, isPPM, isCardDesignTM, isPopDesignTM, isImageTM, isCreativeDirector, stageInProgress]) => ({\n isInProgress,\n isPPM,\n isCardDesignTM,\n isPopDesignTM,\n isImageTM,\n isCreativeDirector,\n stageInProgress\n })),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n async activateStage(stage: RequestStage, matButton: MatButton): Promise {\n const stageInProgress = await this.stageInProgress$.pipe(take(1), takeUntil(this.ngUnsubscribe)).toPromise();\n const stepChangeValid = await this.requestController.validateStepChange(stageInProgress, stage);\n if (!stepChangeValid) {\n return undefined;\n }\n if (this.requestType === this.REQUEST_TYPE.TPPR) {\n const [confirmed, comment] = await this.openConfirmationModel(true).toPromise();\n if (confirmed) {\n const stageChangeReady = await this.requestController.stageChangeReady(stageInProgress, stage);\n const permissions = await this.permissionOptions$.pipe(take(1)).toPromise();\n const stepChangePermitted = this.hasUserPermission(permissions);\n\n if (!stepChangePermitted) {\n return this.stageActivationCancelled();\n }\n if (stageChangeReady) {\n this.store.dispatch(activateStage({stage: this.stage, requestId: this.requestId, comment}));\n }\n }\n } else if ([this.REQUEST_TYPE.CDR as string, this.REQUEST_TYPE.PDR as string].includes(this.requestType)) {\n const [confirmed, comment] = await this.openConfirmationModel(false, (matButton as any)._elementRef).toPromise();\n if (confirmed) {\n const stageChangeReady = await this.requestController.stageChangeReady(stageInProgress, stage);\n const permissions = await this.permissionOptions$.pipe(take(1)).toPromise();\n const stepChangePermitted = this.hasUserPermission(permissions);\n if (!stepChangePermitted) {\n return this.stageActivationCancelled();\n }\n if (stageChangeReady) {\n this.store.dispatch(activateStage({stage: this.stage, requestId: this.requestId, comment}));\n }\n }\n } else {\n const stageChangeReady = await this.requestController.stageChangeReady(stageInProgress, stage);\n const permissions = await this.permissionOptions$.pipe(take(1)).toPromise();\n const stepChangePermitted = this.hasUserPermission(permissions);\n if (!stepChangePermitted) {\n return this.stageActivationCancelled();\n }\n if (stageChangeReady) {\n this.store.dispatch(activateStage({stage, requestId: this.requestId}));\n }\n }\n }\n\n private stageActivationCancelled() {\n this.messageService.showSystemMessage('error', this.translatePipe.transform('common.message.stage-activation-cancelled'));\n }\n\n private openConfirmationModel(isRequired = true, elementRef?: ElementRef): Observable<[boolean, string | null]> {\n const overlayRef = elementRef\n ? this.stepActionsService.createOverlayRefAttached(elementRef.nativeElement, 'right middle')\n : this.stepActionsService.createOverlayRefCentered();\n const {ref} = this.stepActionsService.createReason(overlayRef, elementRef ? 'middle-left' : 'center', 'step-activate', isRequired);\n return this.actionsReasonService.getReason().pipe(\n take(1),\n finalize(() => {\n ref.destroy();\n overlayRef.detach();\n this.cdr.markForCheck();\n }),\n map((data: {buttonClicked: string; comment: string | null}) => [data.buttonClicked === 'confirm', data.comment ? data.comment : null])\n );\n }\n\n cancelStage(stage: RequestStage) {\n this.store.dispatch(cancelStage({stage, requestId: this.requestId}));\n }\n\n public hasUserPermission(sub: PermissionOptions): boolean {\n switch (this.requestType) {\n case this.REQUEST_TYPE.CDR:\n if (sub.isInProgress && sub.isCardDesignTM) {\n return true;\n }\n if (\n sub.stageInProgress?.code === CARD_DESIGN_REQUEST_STAGE_CREATIVE_DIRECTOR_REVIEW &&\n [CARD_DESIGN_REQUEST_STAGE_DESIGN_PROCESS, CARD_DESIGN_REQUEST_STAGE_TM_REVIEW_2].includes(this.stage.code)\n ) {\n return sub.isInProgress && sub.isCreativeDirector;\n }\n return false;\n case this.REQUEST_TYPE.PDR:\n if (sub.isInProgress && sub.isPopDesignTM) {\n return true;\n }\n if (\n sub.stageInProgress?.code === POP_DESIGN_REQUEST_STAGE_CREATIVE_DIRECTOR_REVIEW &&\n [POP_DESIGN_REQUEST_STAGE_DESIGN_PROCESS, POP_DESIGN_REQUEST_STAGE_TM_REVIEW_2].includes(this.stage.code)\n ) {\n return sub.isInProgress && sub.isCreativeDirector;\n }\n return false;\n case this.REQUEST_TYPE.CPR:\n case this.REQUEST_TYPE.PPR:\n case this.REQUEST_TYPE.FSR:\n case this.REQUEST_TYPE.BPR:\n case this.REQUEST_TYPE.TPPR:\n case this.REQUEST_TYPE.IPR:\n return sub.isInProgress && sub.isPPM;\n case this.REQUEST_TYPE.IR:\n return sub.isInProgress && sub.isImageTM;\n default:\n return false;\n }\n }\n}\n","\n \n \n \n \n \n \n {{ 'module.requests.text.activate-stage' | translate }}\n \n \n\n","
\n
\n
\n\n \n \n \n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n \n
\n
\n
\n \n \n \n = 0 && !isRequestCompleted()\">\n \n \n
\n
\n
\n
\n \n
\n
\n
\n\n
\n\n
\n\n
\n
\n \n
\n
\n\n
\n\n :\n {{date | uppercase}}\n\n\n\n
\n
\n\n\n
\n
{{stage.name}}
\n {{stage.assignees.join(', ') | lowercase}}\n
\n
\n\n\n \n\n\n\n \n\n\n\n
\n
\n
\n {{'module.requests.status.'\n + stage.status | translate | uppercase}}\n
\n
\n \n \n \n \n {{ getFormattedDate(stage) | uppercase }}\n \n \n \n

= 0\">\n \n

\n

\n \n

\n

\n \n

\n
\n
\n
\n
\n \n
\n
\n
\n\n\n \n \n \n {{ stage.startedAt | date : 'dd MMM' | uppercase }}\n \n \n \n

= 0\">\n \n

\n
\n
\n\n\n \n \n \n {{ stepsArray[index- 1].plannedCompletionDate | date : 'dd MMM' : 'UTC' | uppercase }}\n \n \n \n

\n \n

\n
\n
\n","/* eslint-disable no-underscore-dangle */\nimport { Directionality } from '@angular/cdk/bidi';\nimport { CdkStepper } from '@angular/cdk/stepper';\nimport { DatePipe, DOCUMENT } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, EventEmitter, Inject, Input, OnDestroy, Output } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { RequestStageState } from '../../../shared/services/request-stages.enum';\nimport { STATUSES } from '../../constants/request-statuses.constant';\nimport { RequestStage } from '../../models/request-stage.model';\nimport { RequestModel } from '../../models/request.model';\n\n@Component({\n selector: 'app-custom-stepper',\n templateUrl: './custom-stepper.component.html',\n styleUrls: ['./custom-stepper.component.scss'],\n providers: [{provide: CdkStepper, useExisting: CustomStepperComponent}],\n exportAs: 'appCustomStepper'\n})\nexport class CustomStepperComponent extends CdkStepper implements OnDestroy {\n public readonly STAGE_STATUSES = RequestStageState;\n\n @Input() public stepsArray: Array;\n @Input() public requestId: string;\n\n @Input() public set selectedStep(selectedStep: RequestStage) {\n if (this.stepsArray) {\n const selectedIndex = this.stepsArray.findIndex(requestStage => requestStage?.code === selectedStep?.code);\n this.goToSelectedStep(selectedIndex);\n }\n }\n public get selectedStep(): RequestStage {\n return this.stepsArray[this.selectedIndex];\n }\n @Output() selectedStepChange = new EventEmitter();\n\n @Input() public requestDetails: RequestModel;\n private ngUnsubscribe = new Subject();\n\n constructor(\n public dir: Directionality,\n public changeDetectorRef: ChangeDetectorRef,\n public date: DatePipe,\n elementRef: ElementRef,\n @Inject(DOCUMENT) document: Document\n ) {\n super(dir, changeDetectorRef, elementRef, document);\n }\n\n private goToSelectedStep(selectedIndex) {\n if (selectedIndex > -1 && selectedIndex !== this.selectedIndex) {\n const length = this.stepsArray.length;\n if (this.isRequestCompleted() && selectedIndex === length - 1) {\n // omitting last step - going to the previous one\n setTimeout(() => this.onClick(selectedIndex - 1));\n } else {\n setTimeout(() => this.onClick(selectedIndex));\n }\n }\n }\n\n public onClick(index: number): void {\n if((this as any)._selectedIndex >= this.steps.length) {\n (this as any)._selectedIndex = 0;\n }\n this.selectedIndex = index;\n this.selectedStepChange.next(this.stepsArray[index]);\n }\n\n public setGradientStatusColor(currentIndex: number): string {\n let topStatus: string;\n let bottomStatus: string;\n\n switch (this.stepsArray[currentIndex].status) {\n case RequestStageState.InProgress:\n topStatus = 'in_progress';\n break;\n case RequestStageState.Completed:\n topStatus = 'completed';\n break;\n case RequestStageState.Canceled:\n topStatus = 'canceled';\n break;\n default:\n topStatus = 'default';\n }\n\n if (this.stepsArray.length > currentIndex + 1) {\n switch (this.stepsArray[currentIndex + 1].status) {\n case RequestStageState.InProgress:\n bottomStatus = 'in_progress';\n break;\n case RequestStageState.Completed:\n bottomStatus = 'completed';\n break;\n default:\n bottomStatus = 'default';\n }\n } else {\n bottomStatus = 'default';\n }\n\n return `${topStatus}-to-${bottomStatus}`;\n }\n\n public isRequestCompleted() {\n return this.requestDetails && this.requestDetails.status === STATUSES.COMPLETED;\n }\n\n public isStagePassed(stage: RequestStage) {\n return stage.status === RequestStageState.Completed\n || stage.status === RequestStageState.Canceled\n || stage.status === RequestStageState.CanceledBySystem;\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getFormattedDate(stage: RequestStage, format?: string): string {\n return this.date.transform(\n this.isStagePassed(stage) ? stage.completedAt : stage.plannedCompletionDate,\n format ? format : 'dd MMM',\n this.isStagePassed(stage) ? 'America/New_York' : ''\n );\n }\n\n}\n","import { HttpClient, HttpEvent, HttpEventType, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Observable, of, ReplaySubject, Subject } from 'rxjs';\nimport { map, shareReplay, switchMap } from 'rxjs/operators';\n\nimport { API } from '../../shared/constants/api.constants';\nimport { UserGroups } from '../../shared/constants/user-groups.enum';\nimport { UserModel } from '../../shared/models/user.model';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\nimport { Events, EventService } from '../../shared/services/event-service.service';\nimport { STATUSES } from '../constants/request-statuses.constant';\nimport { POP_DESIGN_REQUEST } from '../constants/request-types.constant';\nimport { CardDesignRequestItemModel } from '../models/card-design-request.model';\nimport { PopProductionRequestModel } from '../models/pop-production-request.model';\nimport { ProductionPoModel } from '../models/production-po.model';\nimport { FileDownloadService } from './file-download.service';\nimport { FileUploadService } from './file-upload.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PopProductionService {\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private httpClient: HttpClient,\n private fileUploadService: FileUploadService,\n private fileDownloadService: FileDownloadService,\n private eventService: EventService\n ) {}\n\n private wpnDetailsByWpnId = {};\n private poDetails: ReplaySubject = new ReplaySubject(1);\n\n public getPPMList(): Observable> {\n return this.errorHandlingHttp.get(`${API.getUsers}`, {params: {nameBeginning: '', groupKeys: UserGroups.POP_PPM}}).pipe(\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n map(data => cloneDeep(data))\n );\n }\n\n public uploadAttachments(requestId: number | string, file: File, type: 'partner' | 'printerQuote' | 'additional'): Observable {\n let createAttachmentUrl: string;\n let fileType: string;\n\n switch (type) {\n case 'partner':\n fileType = 'partner-art';\n createAttachmentUrl = API.createPopProductionPartnerAttachments(requestId);\n break;\n case 'printerQuote':\n fileType = 'printer-quote';\n createAttachmentUrl = API.createPopProductionPrinterQuoteAttachments(requestId);\n break;\n case 'additional':\n fileType = 'other';\n createAttachmentUrl = API.createPopProductionAdditionalAttachments(requestId);\n break;\n }\n\n return this.uploadAndCreateAttachment(file, requestId, createAttachmentUrl, fileType);\n }\n\n private uploadAndCreateAttachment(file: File, requestId: number | string, createAttachmentUrl: string, attachmentFileType: string) {\n return this.fileUploadService\n .requestAttachmentUploadLink(requestId, attachmentFileType, file)\n .pipe(\n switchMap(uploadLink =>\n this.fileUploadService\n .uploadFileWithProgress(uploadLink, file)\n .pipe(\n switchMap(event =>\n event.type === HttpEventType.Response\n ? this.createPopProductionAttachment(createAttachmentUrl, uploadLink.uploadId)\n : of(event)\n )\n )\n )\n );\n }\n\n private createPopProductionAttachment(createAttachmentUrl: string, uploadId: string): Observable {\n return this.errorHandlingHttp.post(createAttachmentUrl, null, {\n reportProgress: true,\n observe: 'events',\n params: {uploadId}\n });\n }\n\n public removeAttachments(\n requestId: number | string,\n attachmentId: number,\n type: 'partner' | 'printerQuote' | 'additional'\n ): Observable {\n let url: string;\n\n switch (type) {\n case 'partner':\n url = API.ppRemovePartnerAttachments(requestId, attachmentId);\n break;\n case 'printerQuote':\n url = API.ppRemovePrinterQuoteAttachments(requestId, attachmentId);\n break;\n case 'additional':\n url = API.ppRemoveAdditionalAttachments(requestId, attachmentId);\n break;\n }\n return this.errorHandlingHttp.delete(url);\n }\n\n public getPopDesignId(searchString: string): Observable {\n const params = new HttpParams()\n .append('requestId', searchString)\n .append('types', POP_DESIGN_REQUEST)\n .append('statuses', STATUSES.IN_PROGRESS)\n .append('statuses', STATUSES.COMPLETED);\n return this.errorHandlingHttp.get(API.searchRequests, {params});\n }\n\n public getWPNdata(WPN: number): Observable {\n if (!this.wpnDetailsByWpnId[WPN]) {\n /**\n * Important to use http client in order to catch errors\n */\n this.wpnDetailsByWpnId[WPN] = this.httpClient.get(`${API.getWPNdetails(WPN)}`).pipe(\n shareReplay({\n bufferSize: 1,\n refCount: false,\n }),\n map(data => cloneDeep(data))\n );\n }\n return this.wpnDetailsByWpnId[WPN];\n }\n\n public downloadPoPdf(requestId: string | number, poId: number, type: string): void {\n this.fileDownloadService.downloadFile(API.ppPoPdfDownload(requestId, poId, type));\n }\n\n public downloadPrinterQuoteStagePdf(requestId: string | number): void {\n this.fileDownloadService.downloadFile(API.ppPrinterQuoteStageDownload(requestId));\n }\n\n public getPOListener(): Observable {\n return this.poDetails.asObservable();\n }\n\n public callPO(requestId: number | string): void {\n this.errorHandlingHttp.get(`${API.ppPO(requestId)}`).subscribe((data: ProductionPoModel) => {\n this.poDetails.next(data);\n });\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n\n public deletePO(requestId: number | string, poId: number): Observable {\n const observable = new Subject();\n\n this.errorHandlingHttp.delete(`${API.ppUpdatePO(requestId, poId)}`).subscribe(\n () => {\n this.callPO(requestId);\n observable.next();\n },\n err => observable.error(err)\n );\n\n return observable.asObservable();\n }\n\n public updatePO(requestId: number | string, poId: number, data: any): Observable {\n const observable = new Subject();\n\n const reqObj = Object.assign(data);\n this.errorHandlingHttp.put(`${API.ppUpdatePO(requestId, poId)}`, reqObj).subscribe(\n response => {\n this.callPO(requestId);\n observable.next(response);\n },\n error => observable.error(error)\n );\n return observable.asObservable();\n }\n\n public uploadItemPrinterProofForRequestItem(file: File, requestId: string | number): Observable> {\n const createItemPrinterProofUrl = API.createPopProductionPrinterProof(requestId as string);\n return this.uploadAndCreateAttachment(file, requestId, createItemPrinterProofUrl, 'printer-proof');\n }\n\n public deletePrinterProof(requestId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(`${API.ppDeletePrinterProof(requestId, attachmentId)}`);\n }\n\n public createPO(requestId: number | string, data: any): Observable {\n const reqObj = Object.assign(data);\n return this.errorHandlingHttp.post(`${API.ppPO(requestId)}`, reqObj);\n }\n\n public updateConversionToProduction(\n requestId: string | number,\n conversionToProductionRequired: boolean,\n designRequestReference: {id: number; name: string},\n designRequestFoundInInQueue: boolean,\n inQueueJobReference: string,\n fundingTypeCode: string,\n fundingCode: string\n ): Observable {\n return this.errorHandlingHttp\n .put(`${API.ppUpdateConversionToProduction(requestId as string)}`, {\n conversionToProductionRequired,\n designRequestReference,\n designRequestFoundInInQueue,\n inQueueJobReference,\n fundingTypeCode,\n fundingCode\n })\n .pipe(\n shareReplay({\n bufferSize: 1,\n refCount: false,\n }),\n map(data => cloneDeep(data))\n );\n }\n}\n","import { createSelector } from '@ngrx/store';\n\nimport { requestFeatureKey } from '../../requests/reducers';\nimport {\n requestDetailsFeatureKey,\n RequestDetailsState,\n} from '../../requests/reducers/request-details/request-details.reducer';\nimport { LabelHelperService } from '../../requests/services/label-helper.service';\nimport { UserState } from '../user/user.reducer';\nimport { selectUserState, selectUserWithSubstitutees } from '../user/user.selector';\n\nexport const selectRequestDetails = (state): RequestDetailsState => state[requestFeatureKey][requestDetailsFeatureKey];\n\nexport const selectIsRequestSubmitter = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = requestDetailsState?.data?.submitter?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return {\n isSubmitter: initialized && allUsers.some(u => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim()), false),\n initialized\n };\n }\n);\n\nexport const selectIsRequester = createSelector(\n selectUserState,\n selectUserWithSubstitutees,\n selectRequestDetails,\n\n (userState: UserState, allUsers: string[], requestDetailsState: RequestDetailsState) => {\n const {user, substitutees} = userState;\n const targetUserName = requestDetailsState?.data?.creator?.userName;\n const initialized = user && substitutees !== null && requestDetailsState.loading === false;\n\n return {\n isRequester: initialized && allUsers.some(u => LabelHelperService.isEqualIgnoreCase(targetUserName?.trim(), u.trim()), false),\n initialized\n };\n }\n);\n","import { HttpEventType } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, of, ReplaySubject, Subject } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\nimport { API } from '../../shared/constants/api.constants';\nimport { PermissionGroups } from '../../shared/constants/user-roles.constant';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\nimport { Events, EventService } from '../../shared/services/event-service.service';\nimport { UserPermissionsService } from '../../shared/services/user-permissions.service';\nimport { BasePoModel } from '../models/po.model';\nimport { FileDownloadService } from './file-download.service';\nimport { FileUploadService } from './file-upload.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsRequestService {\n private poDetails: ReplaySubject = new ReplaySubject(1);\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private fileUploadService: FileUploadService,\n private fileDownloadService: FileDownloadService,\n private eventService: EventService,\n private userPermissionsService: UserPermissionsService,\n ) {\n }\n\n public isPpm(): Promise {\n return this.userPermissionsService.isActionAvailable(PermissionGroups.FSR_PRODUCTION_MANAGER);\n }\n\n public uploadProofOfPayments(requestId: string | number, file: File): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'finance', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createProofOfPayments(requestId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n public deleteProofOfPayment(requestId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(`${API.fsDeleteProofOfPayment(requestId, attachmentId)}`);\n }\n\n private createProofOfPayments(requestId: string | number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(`${API.fsCreateProofOfPayment(requestId)}`, null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public downloadPoPdf(requestId: string | number, poId: number, type: string): void {\n this.fileDownloadService.downloadFile(API.fsrPoPdfDownload(requestId, poId, type));\n }\n\n public getPOListener(): Observable {\n return this.poDetails.asObservable();\n }\n\n public createPO(requestId: number | string, data: any): Observable {\n const reqObj = Object.assign(data);\n return this.errorHandlingHttp.post(`${API.fsrPO(requestId)}`, reqObj);\n }\n\n public callPO(requestId: number | string): void {\n this.errorHandlingHttp.get(`${API.fsrPO(requestId)}`).subscribe((data: BasePoModel) => {\n this.poDetails.next(data);\n });\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n\n public deletePO(requestId: number | string, poId: number): Observable {\n const observable = new Subject();\n\n this.errorHandlingHttp.delete(`${API.fsrUpdatePO(requestId, poId)}`)\n .subscribe(() => {\n this.callPO(requestId);\n observable.next();\n }, err => observable.error(err));\n\n return observable.asObservable();\n }\n\n public updatePO(requestId: number | string, poId: number, data: any): Observable {\n const observable = new Subject();\n\n const reqObj = Object.assign(data);\n this.errorHandlingHttp.put(`${API.fsrUpdatePO(requestId, poId)}`, reqObj)\n .subscribe(response => {\n this.callPO(requestId);\n observable.next(response);\n }, error => observable.error(error));\n return observable.asObservable();\n }\n\n public downloadFsrDetailsStagePdf(requestId: string | number): void {\n this.fileDownloadService.downloadFile(API.fsrDetailsStageDownload(requestId));\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-blank-state',\n templateUrl: './blank-state.component.html',\n styleUrls: [],\n})\nexport class BlankStateComponent {}\n","
\n \n

{{ 'module.requests.text.empty-stage' | translate }}

\n
\n\n","export interface FileTypes {\n CARD_PRODUCTION: {\n ARTWORK: string;\n ASN: string;\n PROOF_OF_PAYMENT: string;\n EXTERNAL_PIN: string;\n PO_SOW: string;\n };\n CARD_DESIGN: {\n ART: string;\n ARTWORK: string;\n };\n DEFAULT: string;\n DEFAULT_DESIGN: string;\n POP_DESIGN: {\n ART: string;\n ARTWORK: string;\n FS_FILE: string;\n };\n POP_PRODUCTION: {\n ARTWORK: string;\n ASN: string;\n OTHER: string;\n PARTNER_ART: string;\n PRINTER_PROOF: string;\n PRINTER_QUOTE: string;\n };\n FINANCIAL_SERVICES: {\n ARTWORK: string;\n ASN: string;\n FINANCE: string;\n };\n BIF_PRODUCTION: {\n FINANCE: string;\n ARTWORK: string;\n PRINTER_PROOF: string;\n ASN: string;\n };\n THIRD_PARTY_PRODUCTION: {\n FINANCE: string;\n ARTWORK: string;\n OPS: string;\n ASN: string;\n PO_SOW: string;\n EXTERNAL_PIN: string;\n };\n IH_PRODUCTION: {\n ARTWORK: string;\n PRINTER_PROOF: string;\n };\n IMAGE: {\n ART_FILE: string;\n };\n}\n\nexport const FILE_TYPES: FileTypes = {\n CARD_PRODUCTION: {\n ARTWORK: 'card-production-artwork',\n ASN: 'card-production-asn',\n PROOF_OF_PAYMENT: 'card-production-finances',\n EXTERNAL_PIN: 'card-production-external-pin',\n PO_SOW: 'card-production-po-sow',\n },\n CARD_DESIGN: {\n ART: 'card-design-art-file',\n ARTWORK: 'card-design-artwork-file'\n },\n POP_DESIGN: {\n ART: 'pop-design-art-file',\n ARTWORK: 'pop-design-artwork-file',\n FS_FILE: 'pop-design-fs-review-file'\n },\n POP_PRODUCTION: {\n ARTWORK: 'pop-production-artwork',\n ASN: 'pop-production-asn',\n OTHER: 'pop-production-other',\n PARTNER_ART: 'pop-production-partner-art',\n PRINTER_PROOF: 'pop-production-printer-proof',\n PRINTER_QUOTE: 'pop-production-printer-quote'\n },\n FINANCIAL_SERVICES: {\n ARTWORK: 'financial-services-artwork',\n ASN: 'financial-services-asn',\n FINANCE: 'financial-services-finance',\n },\n BIF_PRODUCTION: {\n FINANCE: 'bif-production-finance',\n ARTWORK: 'bif-production-artwork',\n PRINTER_PROOF: 'bif-production-printer-proof',\n ASN: 'bif-production-asn'\n },\n THIRD_PARTY_PRODUCTION: {\n FINANCE: 'third-party-production-finance',\n ARTWORK: 'third-party-production-artwork',\n OPS: 'third-party-production-ops',\n ASN: 'third-party-production-asn',\n PO_SOW: 'third-party-production-po-sow',\n EXTERNAL_PIN: 'third-party-production-external-pin'\n },\n IMAGE: {\n ART_FILE: 'image-art-file',\n },\n IH_PRODUCTION: {\n ARTWORK: 'ih-production-artwork',\n PRINTER_PROOF: 'ih-production-printer-proof'\n },\n DEFAULT: 'default',\n DEFAULT_DESIGN: 'default.design'\n};\n","import { AfterViewInit, ChangeDetectorRef, DoCheck, Injectable, OnDestroy } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { AbstractConstructor, Constructor } from '@angular/material/core/common-behaviors/constructor';\nimport { Subject, Subscribable, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n/**\n * Don't forget to add providers in your component\n *\n * @example\n * providers: [\n * {\n * provide: UpdateTriggerContainer,\n * useExisting: forwardRef(() => PopItemComponent )\n * }\n * ],\n */\nexport interface UpdateTriggerContainerInterface {\n updateFormTrigger: Subscribable;\n}\n@Injectable()\nexport abstract class UpdateTriggerContainer implements UpdateTriggerContainerInterface {\n updateFormTrigger = new Subject();\n}\n\nexport interface HasUpdateTriggerListener {\n ngAfterViewInit(): void;\n ngOnDestroy(): void;\n}\n\nexport type CanUpdateTriggerListener = object;\n\nexport type HasUpdateTriggerListenerCtor = Constructor &\n AbstractConstructor &\n (new (...args: any[]) => HasUpdateTriggerListener);\n\nexport function mixinHasUpdateTriggerListener<\n T extends Constructor | AbstractConstructor\n>(ngUnsubscribeField = 'ngUnsubscribe$', base?: T): HasUpdateTriggerListenerCtor & T {\n return class extends base implements AfterViewInit, OnDestroy {\n protected updateTriggerSubscription: Subscription;\n protected updateTriggerListenerChangeDetector: ChangeDetectorRef;\n protected updateTriggerContainer: UpdateTriggerContainer;\n constructor(...args: any[]) {\n super(...args);\n args.forEach(a => {\n if (a instanceof ChangeDetectorRef || a?.markForCheck) {\n this.updateTriggerListenerChangeDetector = a;\n }\n if (a instanceof UpdateTriggerContainer || a?.updateFormTrigger) {\n this.updateTriggerContainer = a;\n }\n });\n }\n ngAfterViewInit(): void {\n if (super.ngAfterViewInit) {\n super.ngAfterViewInit && super.ngAfterViewInit();\n }\n if (this.updateTriggerContainer && this.updateTriggerListenerChangeDetector) {\n this.updateTriggerSubscription = this.updateTriggerContainer.updateFormTrigger\n .pipe(takeUntil(this[ngUnsubscribeField] || new Subject()))\n .subscribe(() => {\n this.updateTriggerListenerChangeDetector.markForCheck();\n });\n }\n }\n\n ngOnDestroy(): void {\n if (super.ngOnDestroy) {\n super.ngOnDestroy();\n }\n if (this.updateTriggerSubscription) {\n this.updateTriggerSubscription.unsubscribe();\n }\n }\n };\n}\nconst defaultClass = class {\n constructor(...args: any[]) {}\n};\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/ban-types\ntype WithUpdateTriggerListenerFn = | AbstractConstructor = typeof defaultClass>(\n ngUnsubscribeField?: string,\n base?: T\n) => HasUpdateTriggerListenerCtor & T;\n\nexport const WithUpdateTriggerListener: WithUpdateTriggerListenerFn = (ngUnsubscribeField = 'ngUnsubscribe$', base?) =>\n (base\n ? mixinHasUpdateTriggerListener(ngUnsubscribeField, base)\n : mixinHasUpdateTriggerListener(ngUnsubscribeField, class {})) as unknown as any;\n\n\nexport interface HasCheckControlUpdates {\n ngDoCheck(): void;\n}\n\nexport type CanCheckControlUpdates = object;\n\nexport type HasCheckControlUpdatesCtor = Constructor &\n AbstractConstructor &\n (new (...args: any[]) => HasCheckControlUpdates & T);\n\nexport type mixinHasCheckControlUpdatesFn<\n T extends Constructor | AbstractConstructor,\n R = any\n> = (base: T, controlAccessor?: (self: R) => AbstractControl) => Omit & HasCheckControlUpdatesCtor;\n\nexport function mixinHasCheckControlUpdates(base, controlAccessor) {\n return class extends base implements DoCheck {\n private checkControlUpdatesCd: ChangeDetectorRef;\n private oldTouched;\n private oldValue;\n private oldDisabled;\n private oldErrors;\n\n constructor(...args: any[]) {\n super(...args);\n args.forEach(a => {\n if (a instanceof ChangeDetectorRef || a?.markForCheck) {\n this.checkControlUpdatesCd = a;\n }\n });\n }\n private getCheckControlUpdatesTarget() {\n return controlAccessor(this as any);\n }\n ngDoCheck(): void {\n const control = this.getCheckControlUpdatesTarget();\n if (control?.touched !== this.oldTouched) {\n this.oldTouched = control.touched;\n return this.checkControlUpdatesCd.markForCheck();\n }\n if (control?.disabled !== this.oldDisabled) {\n this.oldDisabled = control?.disabled;\n return this.checkControlUpdatesCd.markForCheck();\n }\n if (control?.value && control.value !== this.oldValue) {\n this.oldValue = control.value;\n return this.checkControlUpdatesCd.markForCheck();\n }\n if (JSON.stringify(control?.errors) !== JSON.stringify(this.oldErrors)) {\n this.oldErrors = control.errors;\n return this.checkControlUpdatesCd.markForCheck();\n }\n }\n };\n}\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/ban-types\ntype WithCheckControlUpdatesFn = | AbstractConstructor = typeof defaultClass>(\n controlAccessor?: (self: R) => AbstractControl,\n base?: T\n) => ReturnType>;\n\nexport const WithCheckControlUpdates: WithCheckControlUpdatesFn = (controlAccessor, base?) =>\n (base ? mixinHasCheckControlUpdates(base, controlAccessor) : mixinHasCheckControlUpdates(class {}, controlAccessor)) as unknown as any;\n","\n $\n −\n \n {{inputLabel}}\n *:\n \n \n \n {{inputHint}}\n\n \n \n {{warningMessage}}\n \n \n {{getErrorMessage()}}\n\n","/* eslint-disable no-underscore-dangle */\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\n\nimport { WithCheckControlUpdates } from '../../constants/form-field.constant';\nimport { AutonumericDirective } from '../../directives/autonumeric.directive';\nimport { MessageService } from '../../services/message-service.service';\n\nclass CustomFieldErrorMatcher implements ErrorStateMatcher {\n constructor(private customControl: FormControl) {}\n isErrorState(): boolean {\n return this.customControl && this.customControl.touched && this.customControl.invalid;\n }\n}\n\n@Component({\n selector: 'app-currency-input',\n templateUrl: './app-currency-input.component.html',\n styleUrls: ['./app-currency-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AppCurrencyInputComponent),\n multi: true\n }\n ]\n})\nexport class AppCurrencyInputComponent\n extends WithCheckControlUpdates(self => self.control)\n implements ControlValueAccessor, OnChanges\n{\n readonly defaultOptions = {\n digitGroupSeparator: ',',\n decimalCharacter: '.',\n decimalCharacterAlternative: '.',\n minimumValue: '0',\n maximumValue: 999999.9999,\n decimalPlaces: 4,\n decimalPlacesShownOnBlur: 4,\n watchExternalChanges: true\n };\n\n @ViewChild(AutonumericDirective) input: AutonumericDirective;\n @Input()\n get isRequired(): boolean {\n return this._required;\n }\n set isRequired(value: boolean) {\n this._required = value;\n }\n @Input()\n get readonly(): boolean {\n return this._readonly;\n }\n set readonly(value: boolean) {\n this._readonly = value;\n }\n @Input()\n get maxLength(): number {\n return this._maxLength || null;\n }\n set maxLength(value: number) {\n this._maxLength = value;\n }\n\n constructor(private messageService: MessageService, cd: ChangeDetectorRef) {\n super(cd);\n }\n @Input() public placeholder: string;\n @Input() public testId: string;\n @Input() public hideLabel?: boolean;\n @Input() public inputLabel?: string;\n @Input() public inputHint?: string;\n @Input() public warningMessage?: string;\n @Input() public isWarningVisible?: boolean;\n @Input() public shouldShowCurrencySign = true;\n @Input() public shouldShowMinusSign = false;\n @Input() public inputClass?: string;\n @Input() public isTouched: string;\n\n // tslint:disable-next-line:no-input-rename\n @Input('formControl') public control: FormControl;\n @Input() public maxValue = 999999.9999;\n @Input() public decimals = 4;\n @Input() public useRequiredProperty = true;\n\n // tslint:disable-next-line:variable-name\n private _required: boolean;\n private _readonly: boolean;\n private _maxLength: number;\n\n currencyControlOptions = Object.assign(this.defaultOptions);\n\n onChange: any = () => {};\n onTouched: any = () => {};\n\n public errorMatcher() {\n return new CustomFieldErrorMatcher(this.control);\n }\n\n public getErrorMessage(): string {\n return this.control && this.control.errors ? this.messageService.getControlErrorMessage(this.control.errors) : '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.control && this.input) {\n if (this.control && this.control.value) {\n this.input.instance.set(this.control.value);\n } else {\n this.input.instance.clear();\n }\n }\n if (changes.decimals || changes.maxValue) {\n this.currencyControlOptions = Object.assign(this.defaultOptions);\n this.currencyControlOptions.decimalPlaces = this.decimals;\n this.currencyControlOptions.decimalPlacesShownOnBlur = this.decimals;\n this.currencyControlOptions.maximumValue = this.maxValue;\n }\n }\n\n writeValue(value: any): void {}\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","\n \n {{inputLabel}}\n *:\n \n \n \n \n \n \n \n \n\n \n \n {{warningMessage}}\n \n\n \n {{getErrorMessage()}}\n \n\n","/* eslint-disable @angular-eslint/no-conflicting-lifecycle */\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInput } from '@angular/material/input';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { AutonumericDirective, AutonumericUpdateTriggerEventType } from '../../directives/autonumeric.directive';\nimport { MessageService } from '../../services/message-service.service';\nimport { Options as AutonumericOptions, EmptyInputBehaviorOption } from 'autonumeric';\n\nclass CustomFieldErrorMatcher implements ErrorStateMatcher {\n constructor(private customControl: FormControl) { }\n isErrorState(): boolean {\n return this.customControl && this.customControl.touched && (this.customControl.invalid);\n }\n}\n\n// tslint:disable-next-line:no-conflicting-lifecycle\n@Component({\n selector: 'app-input',\n templateUrl: './app-input.component.html',\n styleUrls: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppInputComponent implements ControlValueAccessor, OnChanges, OnInit, AfterViewInit, DoCheck, OnDestroy {\n @ViewChild(AutonumericDirective) input: AutonumericDirective;\n @ViewChild(MatInput) matInput: ElementRef;\n @Input() public placeholder: string;\n @Input() public inputType: string;\n @Input() public testId: string;\n @Input() public hideLabel?: boolean;\n @Input() public showLabel?: boolean;\n @Input() public inputLabel?: string;\n @Input() public inputHint?: string;\n @Input() public inputHintIcon?: boolean;\n @Input() public inputClass?: string;\n @Input() public inputHintClass?: string;\n @Input() public warningMessage?: string;\n @Input() public isWarningVisible?: boolean;\n @Input() public shouldShowErrorMessage = true;\n @Input() public numeric = false;\n @Input() public decimals = 0;\n // tslint:disable-next-line:no-input-rename\n @Input() public isTouched: boolean;\n @Input() public autoFocus?: boolean;\n @Input() useRequiredProperty = true;\n private _isDisabled = null;\n @Input() set isDisabled(isDisabled: boolean) {\n this._isDisabled = isDisabled;\n this.ctrl?.control?.[isDisabled ? 'disable' : 'enable']({emitEvent: false});\n }\n @Input() set emptyInputBehavior(emptyInputBehavior: EmptyInputBehaviorOption) {\n this.currencyControlOptions = {\n ...this.currencyControlOptions,\n emptyInputBehavior\n };\n }\n\n\n @Input()\n get isRequired(): boolean { return this._required; }\n set isRequired(value: boolean) { this._required = value; }\n @Input()\n get readonly(): boolean { return this._readonly; }\n set readonly(value: boolean) { this._readonly = value; }\n\n @Input()\n get maxLength(): number { return this._maxLength || null; }\n set maxLength(value: number) { this._maxLength = value; }\n /**\n * By default we have based our autonumeric update tracking by it's raw value update event, which is not correct\n * for the case when we update autonumeric value from outside the component (by form.patchValue, ...)\n * In order to skip extra model update event please use 'change' that only covers the cases when update came from user input.\n */\n @Input() autonumericUpdateTriggerEventType: AutonumericUpdateTriggerEventType = 'raw';\n // tslint:disable-next-line:variable-name\n private _required: boolean; private _readonly: boolean; private _maxLength: number;\n private ngUnsubscribe = new Subject();\n\n public focused = false;\n\n public currencyControlOptions: AutonumericOptions & {[k: string]: any} = {\n digitGroupSeparator: '',\n decimalCharacter: '.',\n decimalCharacterAlternative: '.',\n currencySymbol: '',\n currencySymbolPlacement: 's',\n roundingMethod: 'U',\n minimumValue: '0',\n maximumValue: undefined,\n decimalPlaces: 0,\n decimalPlacesShownOnBlur: 0,\n watchExternalChanges: true,\n };\n\n private oldTouched = null;\n private oldValue = null;\n private oldDisabled = null;\n private oldErrors = null;\n\n onChange: any = () => { };\n onTouched: any = () => { };\n\n constructor(private messageService: MessageService, private cd: ChangeDetectorRef,\n private fm: FocusMonitor, private elRef: ElementRef,\n @Self() @Optional() public ctrl: NgControl) {\n if (this.ctrl) {\n this.ctrl.valueAccessor = this;\n }\n\n fm.monitor(elRef.nativeElement, true).pipe(takeUntil(this.ngUnsubscribe)).subscribe(origin => {\n this.focused = !!origin;\n this.cd.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n if (this.autoFocus) {\n setTimeout(() => {\n this.fm.focusVia(this.matInput, 'program');\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }, 0);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.decimals) {\n this.currencyControlOptions.decimalPlaces = this.decimals;\n this.currencyControlOptions.decimalPlacesShownOnBlur = this.decimals;\n }\n\n if (this.numeric && this._maxLength) {\n this.currencyControlOptions.maximumValue = this.currencyControlOptions.decimalPlaces ?\n '9'.repeat(\n this._maxLength - this.currencyControlOptions.decimalPlaces - 1) + '.' + '9'.repeat(this.currencyControlOptions.decimalPlaces) :\n '9'.repeat(this._maxLength);\n } else {\n this.currencyControlOptions.maximumValue = undefined;\n }\n\n if (changes.ctrl && this.input) {\n if (this.ctrl?.control?.value) {\n this.input.instance.set(this.ctrl.control.value);\n } else {\n this.input.instance.clear();\n }\n }\n }\n\n ngOnInit() {\n this.ctrl?.control?.statusChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n ngDoCheck() {\n if (this.ctrl?.touched !== this.oldTouched) {\n this.oldTouched = this.ctrl.touched;\n return this.cd.markForCheck();\n }\n if (this.ctrl?.disabled !== this.oldDisabled) {\n this.oldDisabled = this.ctrl?.disabled;\n return this.cd.markForCheck();\n }\n if (this.ctrl?.value && this.ctrl.value !== this.oldValue) {\n this.oldValue = this.ctrl.value;\n return this.cd.markForCheck();\n }\n if(JSON.stringify(this.ctrl?.errors) !== JSON.stringify(this.oldErrors)) {\n this.oldErrors = this.ctrl.errors;\n return this.cd.markForCheck();\n }\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n }\n\n public errorMatcher() {\n return new CustomFieldErrorMatcher(this.ctrl.control as FormControl);\n }\n\n public getErrorMessage(): string {\n if (this.ctrl?.invalid) {\n return this.messageService.getControlErrorMessage(this.ctrl.errors);\n } return null;\n }\n\n writeValue(value: any): void {\n }\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","import {\n Directive,\n Output,\n EventEmitter,\n HostBinding,\n HostListener\n} from '@angular/core';\n\n@Directive({\n selector: '[appDnd]'\n})\nexport class DndDirective {\n @HostBinding('class.fileover') fileOver: boolean;\n @Output() fileDropped = new EventEmitter();\n\n // Dragover listener\n @HostListener('dragover', ['$event']) onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.fileOver = true;\n }\n\n // Dragleave listener\n @HostListener('dragleave', ['$event']) public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.fileOver = false;\n }\n\n // Drop listener\n @HostListener('drop', ['$event']) public ondrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.fileOver = false;\n const files = evt.dataTransfer.files;\n if (files.length > 0) {\n this.fileDropped.emit(files);\n }\n }\n}\n","
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\n\n@Component({\n selector: 'app-file-upload-progress',\n templateUrl: './file-upload-progress.component.html',\n styleUrls: ['./file-upload-progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class FileUploadProgressComponent {\n\n @Input() file: {\n progress: number;\n };\n}\n","
\n
\n
\n
\n \n {{uploaderLabel}}\n *:\n {{files.length}}\n
\n
\n
\n \n
\n
\n
\n \n \n \n \n or drag and drop them here\n \n
\n
\n
\n \n
\n \n {{ file?.name || file?.fileName }}\n \n

\n \n {{ utilsService.getFormattedBytes(file.size !== undefined ? file.size : file.fileSize) }}\n \n \n {{file?.progress + '%'}}\n \n

\n

\n {{file.status}}\n \n {{file.reviewer.firstName}} {{file.reviewer.lastName}}\n {{file.updatedAt | date : 'MM/dd/yyyy, hh:mm a'}}\n \n

\n

\n {{'module.requests.upload.rejection-reason' | translate | uppercase}}:\n {{file.rejectionReason}}\n

\n \n
\n
\n \n
\n
\n \n
\n
\n Upload failed\n \n
\n
\n \n
\n
\n \n {{'common.restrictions.file-size-exceeded' | translate : {size: (restrictionOptions.fileSize.sizeNumber + restrictionOptions.fileSize.sizeType)} }}\n
\n
\n\n","import { HttpErrorResponse, HttpEventType } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Observable, of, Subject, throwError } from 'rxjs';\nimport { finalize, map, takeUntil } from 'rxjs/operators';\n\nimport { ARTWORK_STATUSES } from '../../../requests/constants/artwork-file-statuses.constants';\nimport { File } from '../../../requests/models/file.model';\nimport { RequestsService } from '../../../requests/services/requests.service';\nimport { FILE_TYPES } from '../../constants/upload-restrictions.constants';\nimport { RestrictionOptionsObject } from '../../models/upload-file-restrictions.model';\nimport { Events, EventService } from '../../services/event-service.service';\nimport { LoaderService } from '../../services/loader.service';\nimport { MessageService } from '../../services/message-service.service';\nimport { UtilsService } from '../../services/utils.service';\n\n@Component({\n selector: 'app-file-uploader',\n templateUrl: './file-uploader.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileUploaderComponent implements OnInit, OnDestroy, OnChanges {\n @Input() public uploadFunction: (file: any) => Observable;\n @Input() public beforeUploadFunction?: () => Observable;\n @Input() public removeFunction: (idWrapper: any, fileItem?: File) => Observable;\n @Input() public uploaderLabel: string;\n @Input() public moreLabel: string;\n @Input() public isDisabled: boolean;\n @Input() public initialFiles: any = [];\n @Input() public restrictionOptions?: RestrictionOptionsObject;\n // tslint:disable-next-line:no-unused-variable\n @Input() private type: string;\n @Input() public requestId: string | number;\n @Input() public itemToLinkId: string | number;\n @Input() public testId?: string;\n // tslint:disable-next-line:no-output-on-prefix\n @Output() public onUpdateFiles: EventEmitter = new EventEmitter();\n @Input() public usePageMaskLoader = true;\n @Input() public isRequired = false;\n @Input() public isPreviewEnabled = false;\n @Input() showDownloadAll = false;\n\n @ViewChild('fileDropRef', {static: false}) fileDropEl: ElementRef;\n\n public files: any = [];\n public ARTWORK_STATUSES = ARTWORK_STATUSES;\n public isRestrictionSizeWarningExist: boolean;\n public fileTypesToAccept: string[] = [];\n\n private filesToUploadNumber = 0;\n private proceededFilesNumber = 0;\n protected ngUnsubscribe = new Subject();\n\n constructor(protected requestService: RequestsService,\n public utilsService: UtilsService,\n protected cd: ChangeDetectorRef,\n private messageService: MessageService,\n private translate: TranslatePipe,\n protected loaderService: LoaderService,\n protected eventService: EventService) {\n }\n\n public ngOnInit() {\n this.requestService.getFileTypes()\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ?\n data[this.restrictionOptions?.fileType] :\n data[FILE_TYPES.DEFAULT];\n this.cd.markForCheck();\n }\n });\n }\n\n public ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.initialFiles?.currentValue) {\n this.files = this.initialFiles.map(proof => ({ ...proof, progress: 100 }));\n }\n }\n\n private fileTypeAccepted(file: any) {\n if (!this.fileTypesToAccept || this.fileTypesToAccept.length === 0) {\n return true;\n }\n const fileTypeAccepted = this.fileTypesToAccept.indexOf(file.type) > -1;\n const [,fileExtension] = /(?:\\.([^.]+))?$/.exec(file.name);\n const fileExtensionAccepted = this.fileTypesToAccept.indexOf(`.${fileExtension.toLowerCase()}`) > -1;\n\n return fileTypeAccepted || fileExtensionAccepted;\n }\n\n private filterFileTypes(files: Array): Array {\n const filtered = files.filter(this.fileTypeAccepted.bind(this));\n\n if (filtered.length !== files.length) {\n this.messageService.showSystemMessage('error',\n this.translate.transform('common.errors.file-not-supported'));\n }\n\n return filtered;\n }\n\n /**\n * on file drop handler\n */\n onFileDropped($event: FileList) {\n const filtered = this.filterFileTypes(Array.from($event));\n\n if (!this.isDisabled) {\n this.isRestrictionSizeWarningExist = false;\n this.prepareFilesList(filtered);\n }\n }\n\n /**\n * handle file from browsing\n */\n fileBrowseHandler(files: FileList) {\n const filtered = this.filterFileTypes(Array.from(files));\n this.isRestrictionSizeWarningExist = false;\n this.prepareFilesList(Array.from(filtered));\n }\n\n /**\n * Download file from server\n *\n * @param index (File index)\n */\n public downloadFile(index: number) {\n if (this.files[index].url) {\n const fileUrl = this.files[index].url;\n this.requestService.downloadFile(fileUrl, this.files[index].fileName);\n } else {\n const attachmentId = this.files[index].attachmentId || this.files[index].id;\n this.requestService.downloadAttachment(this.requestId, attachmentId);\n }\n }\n\n /**\n * Download and open file for preview in a separate browser tab\n *\n * @param index (File index)\n */\n public openFileForPreview(index: number): void {\n const file = this.files[index];\n const fileUrl = file?.url || this.requestService.getFileUrl(file, this.requestId);\n this.requestService.getBlob(fileUrl).subscribe(data => {\n const blob = new Blob([data.body], {type: data.headers.get('content-type') || 'application/pdf'});\n const link = URL.createObjectURL(blob);\n window.open(link, '_blank');\n });\n }\n\n /**\n * Delete file from files list. Using for currently uploaded files\n *\n * @param index (File index)\n */\n deleteFile(index: number) {\n if (this.files[index].progress < 100) {\n return; // Upload in progress.\n }\n\n if (this.files[index].uploadFailed) {\n this.files.splice(index, 1);\n return;\n }\n if (this.usePageMaskLoader) {\n this.loaderService.showLoader();\n }\n const attachmentId = this.files[index].attachmentId || this.files[index].id;\n this.removeFunction(attachmentId, this.files[index])\n .pipe(\n this.triggerActionHistoryUpdate()\n )\n .subscribe(() => {\n this.files.splice(index, 1);\n if (this.usePageMaskLoader) {\n this.loaderService.hideLoader();\n }\n\n this.onUpdateFiles.emit({action: 'delete', data: attachmentId});\n this.cd.markForCheck();\n });\n }\n\n /**\n * Convert Files list to normal array list\n *\n * @param files (Files List)\n */\n prepareFilesList(files: Array) {\n const beforeUploadFunction = this.beforeUploadFunction || (() => of(true));\n\n if (!files.length) {\n return;\n }\n\n if (this.usePageMaskLoader) {\n this.loaderService.showLoader();\n }\n this.filesToUploadNumber = files.length;\n\n beforeUploadFunction().subscribe(() => {\n for (const item of files) {\n if (this.isValidByRestrictionsOptions(item)) {\n item.progress = 0;\n this.files = [...this.files, item];\n if (!item.uploaded) {\n const uploadObservable = this.uploadFunction(item);\n\n uploadObservable.pipe(map((event) => {\n this.cd.markForCheck();\n switch (event.type) {\n case HttpEventType.UploadProgress:\n const progress = Math.round(100 * event.loaded / event.total);\n return {progress, data: null};\n case HttpEventType.Response:\n return {progress: 100, data: event.body};\n default:\n return `Unhandled event: ${event.type}`;\n }\n }),\n this.triggerActionHistoryUpdate()\n )\n .subscribe((progressObject: string | { progress: number; data: any }) => {\n if (!progressObject || typeof progressObject === 'string') {\n return;\n }\n item.progress = progressObject.progress;\n item.uploaded = item.progress === 100;\n\n if (typeof progressObject === 'object' && progressObject.data) {\n item.attachmentId = progressObject.data.id || progressObject.data.attachmentId;\n item.url = progressObject.data.url;\n\n if (this.itemToLinkId) {\n this.requestService.linkFileToReqItem(this.requestId, this.itemToLinkId, progressObject.data.id)\n .subscribe(() => {\n this.proceededFilesNumber ++;\n this.hideLoader();\n this.messageService.showSystemMessage('success',\n item.name + ' ' + this.translate.transform('module.requests.upload.success-upload'));\n }, error => throwError(error));\n } else {\n this.proceededFilesNumber ++;\n this.hideLoader();\n this.messageService.showSystemMessage('success',\n item.name + ' ' + this.translate.transform('module.requests.upload.success-upload'));\n }\n\n this.onUpdateFiles.emit({action: 'add', data: progressObject.data});\n this.cd.markForCheck();\n }\n }, (error: HttpErrorResponse) => {\n this.proceededFilesNumber ++;\n this.hideLoader();\n item.uploadFailed = true;\n this.cd.markForCheck();\n });\n }\n } else {\n this.proceededFilesNumber ++;\n this.hideLoader();\n }\n }\n });\n\n this.fileDropEl.nativeElement.value = '';\n }\n\n private hideLoader(): void {\n if (this.proceededFilesNumber === this.filesToUploadNumber) {\n if (this.usePageMaskLoader) {\n this.loaderService.hideLoader();\n }\n this.proceededFilesNumber = 0;\n this.filesToUploadNumber = 0;\n }\n }\n\n protected triggerActionHistoryUpdate() {\n return finalize(() => {\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n private isValidByRestrictionsOptions(file): boolean {\n let fileValidBySize = true;\n\n if (this.restrictionOptions?.fileSize) {\n fileValidBySize = UtilsService.isFileFitsBySize(file.size, this.restrictionOptions.fileSize);\n this.isRestrictionSizeWarningExist = this.isRestrictionSizeWarningExist ? true : !fileValidBySize;\n }\n\n return fileValidBySize;\n }\n\n public downloadAll(): void {\n this.files.forEach(item => this.downloadItem(item));\n }\n\n public downloadItem(item): void {\n this.requestService.downloadItemFile(item, this.requestId);\n }\n}\n","\n \n \n
\n
\n \n
\n \n {{ panelTitle }}\n \n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n \n \n \n
\n\n \n \n \n
\n","import {Component, EventEmitter, Input, Output, ViewEncapsulation} from '@angular/core';\n\n@Component({\n selector: 'app-accordion',\n templateUrl: './accordion.component.html',\n styleUrls: ['./accordion.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AccordionComponent {\n @Input() public panelTitle: string;\n @Input() public panelTestId: string;\n @Input() public hasActionButtons?: string;\n @Input() public hasBottomPanel?: boolean;\n @Input() public hideToggleMark?: boolean;\n @Input() public isInnerAccordion?: boolean;\n @Input() public resetMatBodyPadding?: boolean;\n @Input() public panelHeaderClass: string;\n @Input() public panelTitleClass?: string;\n @Input() public bodyClass: string;\n @Input() public isExpanded?: boolean;\n @Input() public hidePanelTitle = false;\n @Input() public toggleEnabled = true;\n @Output() openedChanged = new EventEmitter();\n\n public isPanelOpened = false;\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DateService {\n\n public earlierThanNWeeksFromNow(date: Date, n: number): boolean {\n const nWeeksFromNow = moment()\n .add(n, 'w')\n .hour(0)\n .minutes(0)\n .seconds(0)\n .milliseconds(0);\n\n return !moment(date).isSameOrAfter(nWeeksFromNow);\n }\n\n /** @method isBeforeToday\n * checks if today date is more than provided date\n * for ex today = '2010-10-20'\n * isBeforeToday('2010-10-21'); // true\n * @return boolean\n */\n public isBeforeToday(date: Date): boolean {\n return !moment(date).isBefore(moment());\n }\n\n public dateFilter(d?: Date): boolean {\n return moment(d).diff(moment().startOf('day')) >= 0;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { RequestsService } from '../../requests/services/requests.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CountryService {\n private EUROPE_COUNTRIES: string[] = [];\n\n constructor(public requestsService: RequestsService) {\n this.requestsService.getEuropeCountriesList().subscribe(data => {\n this.EUROPE_COUNTRIES = data.length ? data : [];\n });\n }\n\n public checkCountry(country: string): boolean {\n if (this.EUROPE_COUNTRIES.length) {\n return this.EUROPE_COUNTRIES.includes(country);\n }\n return false;\n }\n}\n","import {Directive, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {ControlContainer} from '@angular/forms';\nimport {WpnResponse} from '../models/wpn-response';\nimport { takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {RequestsService} from '../services/requests.service';\nimport {\n DEFAULT_COMPARATORS,\n optionValueComparatorFactory\n} from '../../shared/components/select-search-dropdown/select-search-dropdown.component';\n\n@Directive({\n selector: '[appSelectProductUPC]',\n exportAs: 'appSelectProductUPC'\n})\nexport class SelectProductUPCDirective implements OnInit, OnDestroy {\n @Input() isMicrosoftCheck = false;\n @Input() isEuropeanCheck = false;\n @Output() patchItem = new EventEmitter();\n @Output() clearInfo = new EventEmitter();\n @Output() checkMicrosoft = new EventEmitter();\n @Output() checkEuropean = new EventEmitter();\n isWpnLoading = false;\n\n private _optionsProductUPC: WpnResponse[] = [];\n private get wpnControl() {\n return this.controlContainer?.control?.get('wpn');\n }\n private get productUpcControl() {\n return this.controlContainer?.control?.get('productUpc');\n }\n private ngUnsubscribe = new Subject();\n\n public selectProductUPC = false;\n public selectProductReminder = false;\n public get optionsProductUPC() {\n return this._optionsProductUPC;\n }\n public set optionsProductUPC(value) {\n this._optionsProductUPC = [...value];\n }\n public productUpcComparators = [...DEFAULT_COMPARATORS, optionValueComparatorFactory('productUpc')];\n\n constructor(private controlContainer: ControlContainer,\n private requestService: RequestsService) {\n }\n\n ngOnInit() {\n this.addWPNListener();\n this.setOptionsProductUPCListener();\n this.getWPNData(true);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private addWPNListener(): void {\n this.wpnControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(newVal => {\n if (newVal && this.wpnControl.valid) {\n if (this.isEuropeanCheck) { this.checkEuropean.emit(); }\n this.getWPNData();\n } else {\n this.optionsProductUPC = [];\n this.selectProductUPC = false;\n this.clearWpnInfo();\n }\n });\n }\n\n private setOptionsProductUPCListener(): void {\n this.productUpcControl.valueChanges\n .pipe(\n distinctUntilChanged(),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe((productUPC: WpnResponse) => {\n if (productUPC === null) {\n this.clearWpnInfo();\n this.selectProductReminder = true;\n return;\n }\n if (productUPC && typeof productUPC !== 'string') {\n this.patchItemWithData(productUPC);\n this.selectProductReminder = false;\n }\n });\n }\n\n private getWPNData(isInitialLoad = false): void {\n const wpn = this.wpnControl.value;\n if (!wpn) {\n if (!isInitialLoad) {\n this.setWpnError();\n }\n return;\n }\n this.isWpnLoading = true;\n this.requestService.getWPNdata(wpn)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((wpnResponse: WpnResponse[]) => {\n this.optionsProductUPC = [...wpnResponse];\n switch(true) {\n case wpnResponse.length > 1:\n this.selectProductUPC = true;\n if (!isInitialLoad) {\n this.selectProductReminder = true;\n if(!wpnResponse\n .filter(product => product.productUpc === this.productUpcControl.value)\n .length) {\n this.clearWpnInfo();\n }\n this.checkMicrosoftIssuer(wpnResponse.find(product => product.productUpc === this.productUpcControl.value));\n }\n break;\n case wpnResponse.length === 1:\n if (!isInitialLoad) {\n this.selectProductUPC = false;\n this.selectProductReminder = false;\n this.patchItemWithData(wpnResponse[0]);\n this.checkMicrosoftIssuer(wpnResponse[0]);\n }\n break;\n case wpnResponse.length === 0:\n if (!isInitialLoad) {\n this.setWpnError();\n }\n break;\n }\n }, () => {\n if (!isInitialLoad) {\n this.setWpnError();\n }\n }, () => {\n this.isWpnLoading = false;\n });\n }\n\n private setWpnError() {\n this.selectProductUPC = false;\n this.selectProductReminder = false;\n this.wpnControl.setErrors({wpnError: true});\n this.clearWpnInfo();\n this.checkMicrosoftIssuer([]);\n }\n\n private patchItemWithData(data: WpnResponse): void {\n this.patchItem.emit(data);\n }\n\n private clearWpnInfo(): void {\n this.clearInfo.emit();\n }\n\n private checkMicrosoftIssuer(data) {\n if (this.isMicrosoftCheck) {\n this.checkMicrosoft.emit(data);\n }\n }\n}\n","
\n \n \n {{item.name}}\n \n\n \n {{inputHint}}\n\n \n \n {{warningMessage}}\n \n\n \n {{errorMessage}}\n \n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n forwardRef,\n Input,\n OnChanges, OnInit, Output,\n ViewEncapsulation\n} from '@angular/core';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nimport {RadioGroupInputValue} from '../../models/radioGroupInputValue';\n\n@Component({\n selector: 'app-radio-group',\n templateUrl: './radio-group.component.html',\n styleUrls: ['./radio-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioGroupComponent),\n multi: true\n }\n ]\n})\nexport class RadioGroupComponent implements ControlValueAccessor, OnChanges, OnInit {\n @Input() public buttonValues: RadioGroupInputValue[];\n @Input() public isErrorExist: boolean;\n @Input() public label?: string;\n @Input() public inputHint?: string;\n @Input() public hintIconExist?: boolean;\n @Input() public errorMessage?: string;\n @Input() public isDisabled?: boolean;\n @Input() public testId?: string;\n @Input() public warningMessage?: string;\n @Input() public isWarningVisible?: boolean;\n @Input() public isRequired?: boolean;\n @Input() private defaultSelectedIndex?: number;\n // tslint:disable-next-line:no-input-rename variable-name\n @Input('selectedItem') _value = false;\n\n // tslint:disable-next-line:no-output-native\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() private change = new EventEmitter();\n\n onChange: any = (event) => {\n this.change.emit(event);\n };\n onTouched: any = () => {};\n\n get selectedItem() {\n return this._value;\n }\n\n set selectedItem(val) {\n const changed = this._value !== val;\n this._value = val;\n if (changed) {\n this.onChange(val);\n }\n this.onTouched();\n }\n\n ngOnInit(): void {\n if (this.defaultSelectedIndex !== undefined && typeof this.defaultSelectedIndex === 'number') {\n this.selectItem(this.buttonValues[this.defaultSelectedIndex].code);\n }\n }\n\n ngOnChanges(changes): void {\n if (changes.buttonValues && changes.buttonValues.currentValue && this.defaultSelectedIndex) {\n this.selectItem(this.buttonValues[this.defaultSelectedIndex].code);\n }\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n writeValue(value) {\n if (value) {\n this.selectedItem = value;\n }\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n selectItem(value) {\n if (!this.isDisabled) {\n this.selectedItem = value;\n }\n }\n}\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, Input, ViewChild, Output, NgModule } from '@angular/core';\nimport * as i1 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatProgressBar.\n/** @docs-private */\nconst _MatProgressBarBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}, 'primary');\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_PROGRESS_BAR_LOCATION = new InjectionToken('mat-progress-bar-location', { providedIn: 'root', factory: MAT_PROGRESS_BAR_LOCATION_FACTORY });\n/** @docs-private */\nfunction MAT_PROGRESS_BAR_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => (_location ? _location.pathname + _location.search : ''),\n };\n}\n/** Injection token to be used to override the default options for `mat-progress-bar`. */\nconst MAT_PROGRESS_BAR_DEFAULT_OPTIONS = new InjectionToken('MAT_PROGRESS_BAR_DEFAULT_OPTIONS');\n/** Counter used to generate unique IDs for progress bars. */\nlet progressbarId = 0;\n/**\n * `` component.\n */\nclass MatProgressBar extends _MatProgressBarBase {\n constructor(elementRef, _ngZone, _animationMode, \n /**\n * @deprecated `location` parameter to be made required.\n * @breaking-change 8.0.0\n */\n location, defaults, \n /**\n * @deprecated `_changeDetectorRef` parameter to be made required.\n * @breaking-change 11.0.0\n */\n _changeDetectorRef) {\n super(elementRef);\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n this._changeDetectorRef = _changeDetectorRef;\n /** Flag that indicates whether NoopAnimations mode is set to true. */\n this._isNoopAnimation = false;\n this._value = 0;\n this._bufferValue = 0;\n /**\n * Event emitted when animation of the primary progress bar completes. This event will not\n * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n * animations (indeterminate and query).\n */\n this.animationEnd = new EventEmitter();\n /** Reference to animation end subscription to be unsubscribed on destroy. */\n this._animationEndSubscription = Subscription.EMPTY;\n /**\n * Mode of the progress bar.\n *\n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\n this.mode = 'determinate';\n /** ID of the progress bar. */\n this.progressbarId = `mat-progress-bar-${progressbarId++}`;\n // We need to prefix the SVG reference with the current path, otherwise they won't work\n // in Safari if the page has a `` tag. Note that we need quotes inside the `url()`,\n // because named route URLs can contain parentheses (see #12338). Also we don't use `Location`\n // since we can't tell the difference between whether the consumer is using the hash location\n // strategy or not, because `Location` normalizes both `/#/foo/bar` and `/foo/bar` to\n // the same thing.\n const path = location ? location.getPathname().split('#')[0] : '';\n this._rectangleFillValue = `url('${path}#${this.progressbarId}')`;\n this._isNoopAnimation = _animationMode === 'NoopAnimations';\n if (defaults) {\n if (defaults.color) {\n this.color = this.defaultColor = defaults.color;\n }\n this.mode = defaults.mode || this.mode;\n }\n }\n /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n get value() {\n return this._value;\n }\n set value(v) {\n var _a;\n this._value = clamp(coerceNumberProperty(v) || 0);\n // @breaking-change 11.0.0 Remove null check for _changeDetectorRef.\n (_a = this._changeDetectorRef) === null || _a === void 0 ? void 0 : _a.markForCheck();\n }\n /** Buffer value of the progress bar. Defaults to zero. */\n get bufferValue() {\n return this._bufferValue;\n }\n set bufferValue(v) {\n var _a;\n this._bufferValue = clamp(v || 0);\n // @breaking-change 11.0.0 Remove null check for _changeDetectorRef.\n (_a = this._changeDetectorRef) === null || _a === void 0 ? void 0 : _a.markForCheck();\n }\n /** Gets the current transform value for the progress bar's primary indicator. */\n _primaryTransform() {\n // We use a 3d transform to work around some rendering issues in iOS Safari. See #19328.\n const scale = this.value / 100;\n return { transform: `scale3d(${scale}, 1, 1)` };\n }\n /**\n * Gets the current transform value for the progress bar's buffer indicator. Only used if the\n * progress mode is set to buffer, otherwise returns an undefined, causing no transformation.\n */\n _bufferTransform() {\n if (this.mode === 'buffer') {\n // We use a 3d transform to work around some rendering issues in iOS Safari. See #19328.\n const scale = this.bufferValue / 100;\n return { transform: `scale3d(${scale}, 1, 1)` };\n }\n return null;\n }\n ngAfterViewInit() {\n // Run outside angular so change detection didn't get triggered on every transition end\n // instead only on the animation that we care about (primary value bar's transitionend)\n this._ngZone.runOutsideAngular(() => {\n const element = this._primaryValueBar.nativeElement;\n this._animationEndSubscription = fromEvent(element, 'transitionend')\n .pipe(filter((e) => e.target === element))\n .subscribe(() => {\n if (this.animationEnd.observers.length === 0) {\n return;\n }\n if (this.mode === 'determinate' || this.mode === 'buffer') {\n this._ngZone.run(() => this.animationEnd.next({ value: this.value }));\n }\n });\n });\n }\n ngOnDestroy() {\n this._animationEndSubscription.unsubscribe();\n }\n}\nMatProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatProgressBar, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_PROGRESS_BAR_LOCATION, optional: true }, { token: MAT_PROGRESS_BAR_DEFAULT_OPTIONS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatProgressBar, selector: \"mat-progress-bar\", inputs: { color: \"color\", value: \"value\", bufferValue: \"bufferValue\", mode: \"mode\" }, outputs: { animationEnd: \"animationEnd\" }, host: { attributes: { \"role\": \"progressbar\", \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\", \"tabindex\": \"-1\" }, properties: { \"attr.aria-valuenow\": \"(mode === \\\"indeterminate\\\" || mode === \\\"query\\\") ? null : value\", \"attr.mode\": \"mode\", \"class._mat-animation-noopable\": \"_isNoopAnimation\" }, classAttribute: \"mat-progress-bar\" }, viewQueries: [{ propertyName: \"_primaryValueBar\", first: true, predicate: [\"primaryValueBar\"], descendants: true }], exportAs: [\"matProgressBar\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n\", styles: [\".mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-background{display:none}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\\\"\\\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition-duration:1ms}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}\\n\"], directives: [{ type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatProgressBar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-progress-bar', exportAs: 'matProgressBar', host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n // set tab index to -1 so screen readers will read the aria-label\n // Note: there is a known issue with JAWS that does not read progressbar aria labels on FireFox\n 'tabindex': '-1',\n '[attr.aria-valuenow]': '(mode === \"indeterminate\" || mode === \"query\") ? null : value',\n '[attr.mode]': 'mode',\n 'class': 'mat-progress-bar',\n '[class._mat-animation-noopable]': '_isNoopAnimation',\n }, inputs: ['color'], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n\", styles: [\".mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-background{display:none}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\\\"\\\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition-duration:1ms}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PROGRESS_BAR_LOCATION]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PROGRESS_BAR_DEFAULT_OPTIONS]\n }] }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { value: [{\n type: Input\n }], bufferValue: [{\n type: Input\n }], _primaryValueBar: [{\n type: ViewChild,\n args: ['primaryValueBar']\n }], animationEnd: [{\n type: Output\n }], mode: [{\n type: Input\n }] } });\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatProgressBarModule {\n}\nMatProgressBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatProgressBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatProgressBarModule, declarations: [MatProgressBar], imports: [CommonModule, MatCommonModule], exports: [MatProgressBar, MatCommonModule] });\nMatProgressBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatProgressBarModule, imports: [[CommonModule, MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatProgressBarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatProgressBar, MatCommonModule],\n declarations: [MatProgressBar],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_BAR_DEFAULT_OPTIONS, MAT_PROGRESS_BAR_LOCATION, MAT_PROGRESS_BAR_LOCATION_FACTORY, MatProgressBar, MatProgressBarModule };\n","
\n
\n \n \n
\n \n \n
\n
\n
\n \n {{'module.requests.finance.merchant-country' | translate}}\n *:\n \n {{this.merchant?.get('country')?.value}}\n
\n
\n {{'module.requests.finance.merchant-am' | translate}}:\n \n \n {{AM?.firstName}} {{AM?.lastName}}\n , \n \n \n
\n
\n \n {{'module.requests.details.fcms-id' | translate}}\n *:\n \n {{merchant?.get('fcmsId')?.value}}\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { RequestsService } from '../../../../../services/requests.service';\n\n@Component({\n selector: 'app-merchant-form',\n templateUrl: './merchant-form.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MerchantFormComponent implements OnInit, OnDestroy {\n @Input() public merchant: FormGroup;\n @Input() public merchantIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public shouldShowAccountManagers = true;\n @Input() public formValidationTrigger?: Subject;\n @Input() public isFcmsIdVisible = true;\n @Input() public merchantLength: number;\n private ngUnsubscribe = new Subject();\n\n // tslint:disable-next-line:no-output-on-prefix no-output-rename\n @Output('delete') private onRemove: EventEmitter = new EventEmitter();\n // tslint:disable-next-line: no-output-rename no-output-on-prefix\n @Output('addMerchant') public onAddMerchant = new EventEmitter();\n\n public merchantSearch: Array<{id: number; name: string; nameId: string}> = [];\n public isMerchantLoading: Subject = new Subject();\n\n constructor(private requestsService: RequestsService, private utilsService: UtilsService, private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.merchant.get('name').setValidators(UtilsService.merchantValidator());\n\n this.merchant.get('name').valueChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(data => {\n if (data?.id && data?.name) {\n this.onMerchantSelect(data);\n } else {\n this.merchant.get('mdmId')?.reset();\n this.merchant.get('fcmsId')?.reset();\n this.merchant.get('country')?.reset();\n (this.merchant.get('accountManagers') as FormArray).clear();\n }\n this.cd.markForCheck();\n });\n\n this.formValidationTrigger?.subscribe(() => {\n this.merchant.markAllAsTouched();\n Object.keys(this.merchant.controls).forEach(key => {\n const control = this.merchant.get(key);\n control.markAsTouched();\n });\n this.cd.markForCheck();\n });\n }\n\n public getMerchants(name: string): void {\n this.isMerchantLoading.next(true);\n this.requestsService.getMerchants(name).subscribe((data: Array<{id: number; name: string}>) => {\n this.merchantSearch = Object.assign(data);\n this.cd.detectChanges();\n this.isMerchantLoading.next(false);\n }, error => {\n this.isMerchantLoading.next(false);\n });\n }\n\n public getMerchantLabel(option): string {\n return this.utilsService.getMerchantName(option, this.merchant);\n }\n\n public onMerchantSelect(event): void {\n this.merchant.get('mdmId')?.setValue(event.id);\n this.merchant.get('fcmsId')?.reset();\n this.merchant.get('country')?.reset();\n (this.merchant.get('accountManagers') as FormArray).clear();\n this.requestsService\n .getMerchantInfo(event.id)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n this.setMerchantInfo(data);\n this.cd.markForCheck();\n });\n }\n\n public remove(index: number): void {\n this.onRemove.emit(index);\n }\n\n public addMerchant(): void {\n this.onAddMerchant.emit();\n }\n\n private setMerchantInfo(merchantData): void {\n merchantData.accountManagers?.forEach(item => (this.merchant.get('accountManagers') as FormArray).push(new FormControl(item)));\n this.merchant.get('country').setValue(merchantData.country.description);\n this.merchant.get('mdmId')?.setValue(merchantData.id);\n this.merchant.get('fcmsId')?.setValue(merchantData.fcmsId);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
{{'module.requests.finance.merchant-details' | translate}}:
\n
\n
\n \n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit} from '@angular/core';\nimport {FormArray, FormBuilder, Validators} from '@angular/forms';\nimport {Subject} from 'rxjs';\n\n@Component({\n selector: 'app-merchant-details',\n templateUrl: './merchant-details.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MerchantDetailsComponent implements OnInit {\n @Input() public merchantsArray: FormArray;\n @Input() public isDisabled: boolean;\n @Input() public shouldShowAccountManagers = true;\n @Input() public isFcmsIdVisible = true;\n @Input() wrapperClass?: string;\n @Input() formValidationTrigger?: Subject;\n\n constructor(private fb: FormBuilder, private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.formValidationTrigger?.subscribe(() => {\n this.merchantsArray.markAllAsTouched();\n this.cd.markForCheck();\n });\n }\n\n public onAddMerchant(): void {\n const merchant = this.fb.group({\n name: this.fb.control({name: '', id: ''}),\n id: this.fb.control(null),\n mdmId: this.fb.control('', Validators.required),\n fcmsId: this.fb.control('', Validators.required),\n country: this.fb.control('', Validators.required),\n accountManagers: this.fb.array([])\n });\n this.merchantsArray.push(merchant);\n this.cd.markForCheck();\n }\n\n public onRemoveMerchant(index: number): void {\n if (this.merchantsArray.controls?.length > 1) {\n this.merchantsArray.removeAt(index);\n this.cd.markForCheck();\n }\n }\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormFactorService {\n\n readonly BARCODE_BEST_BUY = 'barcodebestbuy';\n readonly BARCODE_UAB = 'barcodeuab';\n readonly COSTCO = 'costco';\n readonly MULTIPACK = 'MULTIPACK';\n readonly USA = /USA/i;\n\n public isMultipackTipVisible(value: string): boolean {\n return value?.startsWith(this.MULTIPACK);\n }\n\n public isBestBuyRelatedFieldVisible(encodingType: string): boolean {\n return !!encodingType && this.toConcatLower(encodingType) === this.BARCODE_BEST_BUY;\n }\n\n public isUabRelatedFieldVisible(encodingType: string): boolean {\n return !!encodingType && this.toConcatLower(encodingType) === this.BARCODE_UAB;\n }\n\n public isCostco(encodingType: string): boolean {\n return !! encodingType && encodingType?.toLowerCase().includes(this.COSTCO);\n }\n\n private toConcatLower(value: string): string {\n return value.replace(/ /g, '').replace(/-/g, '').toLowerCase();\n }\n\n public isUSA(countryCode: string): boolean {\n return !! countryCode && this.USA.test(countryCode?.toLowerCase());\n }\n}\n","
\n {{'module.requests.finance.form-factor' | translate}}\n
\n \n \n
\n\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n
\n \n \n
\n\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { RadioGroupInputValue } from '../../../../../../shared/models/radioGroupInputValue';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject, Subscription } from 'rxjs';\nimport { FormFactorService } from '../../../../../../shared/services/form-factor.service';\nimport { Store } from '@ngrx/store';\nimport { selectRefData } from '../../../../../../reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-form-factor-form',\n templateUrl: './form-factor-form.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FormFactorFormComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() public inputFormGroup: FormGroup;\n @Input() public isDisabled: boolean;\n\n public redemptionTypes: RadioGroupInputValue[];\n public dielines: RadioGroupInputValue[];\n public substrates: RadioGroupInputValue[];\n public isBestBuyInputsVisible = false;\n public isUabInputsVisible = false;\n private encTypeChangeSubscription: Subscription;\n private ngUnsubscribe = new Subject();\n\n constructor(\n private cd: ChangeDetectorRef,\n private formFactorService: FormFactorService,\n private store: Store,\n ) {}\n\n ngOnInit(): void {\n this.getRefData();\n this.setListenerOnEncodingType();\n }\n\n ngOnChanges() {\n this.recalcBestBuy(this.inputFormGroup?.get('encodingType')?.value);\n this.recalcUab(this.inputFormGroup?.get('encodingType')?.value);\n this.setListenerOnEncodingType();\n }\n\n private getRefData(): void {\n this.store.select(selectRefData)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(refData => {\n this.redemptionTypes = refData.redemptionTypes || [];\n this.dielines = refData.dielines || [];\n this.substrates = refData.substrates || [];\n this.cd.markForCheck();\n });\n }\n\n private setListenerOnEncodingType(): void {\n this.encTypeChangeSubscription?.unsubscribe();\n this.encTypeChangeSubscription = this.inputFormGroup.get('encodingType').valueChanges.subscribe(value => {\n this.recalcBestBuy(value);\n this.recalcUab(value);\n this.resetAdditionalFields();\n });\n }\n\n private resetAdditionalFields(): void {\n if (!this.isBestBuyInputsVisible) {\n this.inputFormGroup.get('productId')?.clearValidators();\n this.inputFormGroup.get('skuNumber')?.clearValidators();\n }\n\n if (!this.isUabInputsVisible) {\n this.inputFormGroup.get('itemNumber')?.clearValidators();\n this.inputFormGroup.get('vendorStockNumber')?.clearValidators();\n }\n this.inputFormGroup.updateValueAndValidity({onlySelf: true, emitEvent: true});\n this.cd.markForCheck();\n }\n\n private recalcBestBuy(encodingType) {\n this.isBestBuyInputsVisible = this.formFactorService.isBestBuyRelatedFieldVisible(encodingType);\n }\n\n private recalcUab(encodingType) {\n this.isUabInputsVisible = this.formFactorService.isUabRelatedFieldVisible(encodingType);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.encTypeChangeSubscription?.unsubscribe();\n }\n\n}\n","
\n {{'module.requests.finance.production-quantity' | translate}}\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n {{ 'module.requests.finance.production-quantity-validation' | translate }}\n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n\n
\n
\n
\n
\n 0 ? ' ' + (index + 1) : '')\"\n [itemsList]=\"shipmentsOptions | toSelectDropdownOptions: 'value': getWarehouseLabel: true\"\n [isRequired]=\"isShipmentsRequired\"\n >\n
\n
\n \n \n
\n
1\">\n \n
\n
\n
\n
\n
\n\n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {filter, startWith, takeUntil} from 'rxjs/operators';\nimport {Warehouse} from '../../../../../models/warehouse.model';\nimport {LabelHelperService} from '../../../../../services/label-helper.service';\nimport {BehaviorSubject, combineLatest, Subject} from 'rxjs';\nimport {TranslateService} from '@ngx-translate/core';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {select, Store} from '@ngrx/store';\nimport {lazyLoadWarehouses} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {selectWarehouses} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-production-quntity-form',\n templateUrl: './production-quntity-form.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductionQuntityFormComponent implements OnInit, OnDestroy {\n @Input() public inputFormGroup: FormGroup;\n @Input() public isDisabled: boolean;\n @Input() public firstQtyInputLabel = 'module.requests.finance.production-qty';\n @Input() public secondQtyInputLabel = 'module.requests.finance.test-card-qty';\n @Input() public firstQtyTotalHint = 'module.requests.finance.test-card-qty-short';\n @Input() public secondQtyTotalHint = 'module.requests.finance.production-qty-short';\n @Input() formValidationTrigger?: Subject;\n\n public shipmentsOptions: any[] = [];\n public availableQty: string | number = 0;\n public isShipmentsRequired: boolean;\n\n private subject: BehaviorSubject = new BehaviorSubject(0);\n private ngUnsubscribe = new Subject();\n private warehouse$ = this.store.pipe(\n select(selectWarehouses),\n filter((v) => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(private fb: FormBuilder,\n public cd: ChangeDetectorRef,\n private store: Store,\n private translateService: TranslateService) {}\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadWarehouses());\n this.formValidationTrigger?.subscribe(() => {\n this.inputFormGroup.markAllAsTouched();\n this.cd.markForCheck();\n });\n\n this.isShipmentsRequired = (this.inputFormGroup.get('shipments') as FormArray).controls[0].get('warehouse').validator\n && (this.inputFormGroup.get('shipments') as FormArray).controls[0].get('warehouse').validator(new FormControl()).required;\n\n this.setQtyValidator();\n if (this.inputFormGroup.get('productionQuantity').value !== null &&\n this.inputFormGroup.get('testCardQuantity').value !== null) {\n this.inputFormGroup.get('totalQty').setValue(\n Number(this.inputFormGroup.get('productionQuantity').value) +\n Number(this.inputFormGroup.get('testCardQuantity').value)\n );\n }\n\n this.inputFormGroup.get('caseSize').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => this.inputFormGroup.get('productionQuantity').updateValueAndValidity({\n onlySelf: true,\n emitEvent: true\n }));\n\n (this.inputFormGroup.get('shipments') as FormArray).valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n const shipTotalQty = value.reduce((acc, curr) => acc + Number(curr.quantity), 0);\n this.setAvailableQty(this.getAvailableQty(shipTotalQty, this.inputFormGroup.get('productionQuantity').value));\n });\n\n this.subject.asObservable().pipe(takeUntil(this.ngUnsubscribe)).subscribe(currentAvailableQuantity => {\n if (currentAvailableQuantity === 0) {\n this.updateShipmentsValidity();\n }\n });\n\n /**\n * Setup total quantity calculator\n */\n combineLatest([\n this.inputFormGroup.get('productionQuantity').valueChanges\n .pipe(\n startWith(this.inputFormGroup.get('productionQuantity').value),\n filter(v => v !== null)\n ),\n this.inputFormGroup.get('testCardQuantity').valueChanges.pipe(\n startWith(this.inputFormGroup.get('testCardQuantity').value),\n filter(v => v !== null)\n )\n ]).pipe(takeUntil(this.ngUnsubscribe)).subscribe(([prod, test]) => {\n this.inputFormGroup.get('totalQty').setValue(Number(prod) + Number(test));\n this.cd.markForCheck();\n });\n\n this.inputFormGroup.get('productionQuantity').valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((prod) => {\n const shipTotalQty = this.getShipTotalQty();\n this.setAvailableQty(shipTotalQty === 0 ? Number(prod) : this.getAvailableQty(shipTotalQty, prod));\n });\n\n this.setAvailableQty(this.getAvailableQty(this.getShipTotalQty(), this.inputFormGroup.get('productionQuantity').value));\n\n this.getShipToOptions();\n }\n\n public splitShipments(): void {\n const shipToItem = this.fb.group({\n id: this.fb.control(null),\n warehouse: this.fb.control(null),\n quantity: this.fb.control(null)\n });\n\n if (this.isShipmentsRequired) {\n shipToItem.get('warehouse').setValidators([Validators.required]);\n shipToItem.get('quantity').setValidators([Validators.required]);\n }\n\n (this.inputFormGroup.get('shipments') as FormArray).push(shipToItem);\n\n this.setQtyValidator();\n }\n\n public deleteCurrentShipment(index: number): void {\n (this.inputFormGroup.get('shipments') as FormArray).removeAt(index);\n this.updateShipmentsValidity();\n }\n\n private getShipToOptions(): void {\n this.warehouse$.subscribe(data => {\n if (data) {\n this.shipmentsOptions = [];\n data.forEach((shipment: Warehouse) => {\n this.shipmentsOptions.push({value: cloneDeep(shipment)});\n });\n this.cd.markForCheck();\n }\n });\n }\n\n private getAvailableQty(shipTotalQty: number, prodQty: number): number | string {\n const isQuantitiesEmpty = (this.inputFormGroup.get('shipments') as FormArray).controls\n .every((control: FormGroup) => (\n control.controls.quantity.value === null ||\n control.controls.quantity.value === '') &&\n !this.inputFormGroup.get('totalQty').value);\n return isQuantitiesEmpty ? '' : prodQty - shipTotalQty;\n }\n\n private getShipTotalQty(): number {\n return (this.inputFormGroup.get('shipments') as FormArray).controls\n .reduce((acc, control: FormGroup) => acc + Number(control.controls.quantity.value), 0);\n }\n\n public getWarehouseLabel(warehouse: Warehouse) {\n return LabelHelperService.getWarehouseLabel(warehouse);\n }\n\n private setAvailableQty(availableQty1: number | string) {\n this.availableQty = !availableQty1 ? 0 : availableQty1;\n const availableQtyNumber = !this.availableQty ? 0 : Number(this.availableQty);\n this.subject.next(availableQtyNumber);\n }\n\n public getQuantityHint(isLast: boolean): string {\n return isLast ? `${this.translateService.instant('module.requests.finance.ship-quantity-hint')}: ${this.availableQty}` : '';\n }\n\n private setQtyValidator(): void {\n (this.inputFormGroup.get('shipments') as FormArray)\n .controls.forEach((shipToGroup: FormGroup) => {\n if (this.isShipmentsRequired) {\n shipToGroup.get('quantity').setValidators([\n UtilsService.availableQtyValidationFn(\n this.inputFormGroup.get('productionQuantity') as FormControl,\n this.inputFormGroup.get('shipments') as FormArray), Validators.required]);\n }\n });\n }\n\n private updateShipmentsValidity(): void {\n (this.inputFormGroup.get('shipments') as FormArray).controls.forEach((shipToGroup: FormGroup) => {\n shipToGroup.get('quantity').updateValueAndValidity({onlySelf: true, emitEvent: true});\n shipToGroup.updateValueAndValidity({onlySelf: true, emitEvent: true});\n });\n this.inputFormGroup.get('shipments').updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.cd.detectChanges();\n }\n}\n","
\n \n
\n \n \n
\n\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n \n {{'module.requests.details.select-upc' | translate}}\n \n
\n
\n \n {{'module.requests.finance.product-owner' | translate}}\n *:\n \n \n \n {{PO?.firstName}} {{PO?.lastName}}\n , \n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n \n\n \n\n
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport {AbstractControl, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {RequestsService} from '../../../../../services/requests.service';\nimport {RadioGroupInputValue} from '../../../../../../shared/models/radioGroupInputValue';\nimport {WpnResponse} from '../../../../../models/wpn-response';\nimport {DateService} from '../../../../../../shared/services/date-service.service';\nimport {CountryService} from '../../../../../../shared/services/country-service.service';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport {Store} from '@ngrx/store';\nimport {\n selectDataPinFileTypes,\n selectRequestItemTypes\n} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {takeUntil, tap} from 'rxjs/operators';\nimport { DEFAULT_COMPARATORS, optionValueComparatorFactory } from '../../../../../../shared/components/select-search-dropdown/select-search-dropdown.component';\nimport {RequestItemModel} from '../../../../../models/production-request.model';\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\nimport {REQUEST_TYPE} from '../../../../../constants/request-types.constant';\n\n@Component({\n selector: 'app-request-item-form',\n templateUrl: './request-item-form.component.html',\n styleUrls: ['./request-item-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestItemFormComponent implements OnInit, OnChanges, OnDestroy {\n\n private readonly MICROSOFT_DATA = 'microsoftData';\n readonly RUSH_JOB_WEEKS = 6;\n\n @Input() public item: FormGroup;\n @Input() public itemDetails: RequestItemModel;\n @Input() public requestItemIndex: number;\n @Input() public requestId: number | string;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public updateRequestDetailsFunction: (itemIdx: number) => Observable;\n @Input() public isExpanded: boolean;\n\n @Output() public remove: EventEmitter = new EventEmitter();\n // tslint:disable-next-line:no-output-native no-output-on-prefix no-output-rename\n @Output() public onCopy: EventEmitter = new EventEmitter();\n\n public itemTypes: RadioGroupInputValue[];\n public itemTypeSelected: string;\n public dataPINfileTypes: RadioGroupInputValue[];\n public showRushJob: boolean;\n public isEuropean = false;\n public selectProductUPC = false;\n public selectProductReminder = false;\n public additionalPin = false;\n public microsoftSpecific = false;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n isWpnLoading = false;\n\n private productUpcChangedSubscription: Subscription;\n private ngUnsubscribe = new Subject();\n\n public productUpcComparators = [...DEFAULT_COMPARATORS, optionValueComparatorFactory('productUpc')];\n\n constructor(private requestService: RequestsService,\n public dateService: DateService,\n private countryService: CountryService,\n private cd: ChangeDetectorRef,\n private store: Store) { }\n\n ngOnInit(): void {\n if (!this.itemDetails) {\n this.itemDetails = {\n wpn: null,\n artReview: null,\n wpnDescription: null,\n notes: null,\n productUpc: null,\n externalPinFiles: [],\n issuer: null\n };\n }\n\n if (this.item.get('deliveryDate').value) {\n this.checkForRushJob(this.item.get('deliveryDate').value);\n }\n\n if (this.item.get('dataPinFileType').value === 'EXTERNAL_PIN') {\n this.additionalPin = true;\n }\n\n this.getRequestItemTypes();\n this.getDataPinFileTypes();\n this.setAdditionalPinListener(this.item);\n this.checkMicrosoftIssuer();\n }\n\n ngOnChanges() {\n this.setTypeIfEmpty();\n this.checkMicrosoftIssuer();\n }\n\n private setTypeIfEmpty() {\n if (!this.item.get('type').value && this.itemTypes?.length) {\n this.item.get('type').setValue(this.itemTypes[0]?.code);\n }\n this.itemTypeSelected = this.item.get('type').value;\n this.cd.detectChanges();\n }\n\n public setType(value: string): void {\n this.itemTypeSelected = value;\n }\n private getRequestItemTypes(): void {\n this.store.select(selectRequestItemTypes)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.itemTypes = Object.assign(data);\n }\n this.setTypeIfEmpty();\n this.cd.markForCheck();\n });\n }\n\n private getDataPinFileTypes(): void {\n this.store.select(selectDataPinFileTypes)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.dataPINfileTypes = Object.assign(data);\n }\n this.cd.markForCheck();\n });\n }\n\n private setAdditionalPinListener(form: FormGroup): void {\n form.get('dataPinFileType')\n .valueChanges.subscribe(data => {\n if (data === 'EXTERNAL_PIN') {\n this.additionalPin = true;\n } else if (form.get('pinInfo')) {\n this.additionalPin = false;\n form.get('pinInfo').reset();\n }\n this.cd.markForCheck();\n });\n }\n\n public updatePinFilesFunction(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n this.itemDetails.externalPinFiles.push(obj.data);\n } else {\n const index = this.itemDetails.externalPinFiles.findIndex(item => item?.id === obj.data);\n this.itemDetails.externalPinFiles.splice(index, 1);\n }\n }\n\n public resetEuropeRelatedInputs() {\n this.isEuropean = false;\n this.item.removeControl('pidId');\n this.item.removeControl('encodingId');\n this.cd.markForCheck();\n }\n\n public clearWpnInfo(): void {\n [\n this.item.get('countryCode'),\n this.item.get('wpnDescription'),\n this.item.get('productUpc'),\n this.item.get('productDescription'),\n this.item.get('productOwners'),\n this.item.get('processorInterface'),\n this.item.get('processorCompany'),\n this.item.get('dcmsId'),\n this.item.get('denom'),\n this.item.get('encodingId'),\n this.item.get('brand'),\n this.item.get(this.MICROSOFT_DATA), // this one might be absent in the form\n this.item.get('productClassification'),\n this.item.get('formFactor.encodingType'),\n this.item.get('issuer'),\n ]\n .forEach((control: AbstractControl) => control?.reset());\n this.cd.markForCheck();\n }\n\n public patchItemWithData(data: WpnResponse): void {\n const formData = {\n countryCode: data.country?.isoAlphaAbbreviation,\n brand: data.brand ? data.brand.name : null,\n dcmsId: data.dcmsId,\n denom: data.denom,\n productClassification: data.productClassification ? data.productClassification.description : null,\n wpnDescription: data.packageDescription,\n productUpc: data.productUpc,\n productDescription: data.productDescription,\n encodingId: null,\n formFactor: {\n encodingType: data.encoding ? data.encoding.description : null,\n productId: null,\n skuNumber: null,\n itemNumber: null,\n vendorStockNumber: null\n },\n productionQuantity: {\n bundleSize: data.bundleSize,\n caseSize: data.caseSize\n },\n productOwners: data.productOwners,\n processorInterface: data.processorName,\n processorCompany: data.processorCompanyName,\n issuer: data.issuer?.name\n };\n this.item.patchValue(formData);\n this.checkEuropeanCountry(data);\n\n this.updateMicrosoftIssuer(data);\n this.cd.markForCheck();\n }\n\n public updateMicrosoftIssuer(data) {\n if (this.isMicrosoftIssuer(data)) {\n this.setMicrosoftSpecificField();\n } else {\n this.removeMicrosoftSpecificField();\n }\n }\n\n public removeMicrosoftSpecificField(): void {\n this.microsoftSpecific = false;\n this.item.get('microsoftData').clearValidators();\n this.item.get('microsoftData').updateValueAndValidity();\n this.cd.markForCheck();\n }\n\n\n private setMicrosoftSpecificField(): void {\n this.microsoftSpecific = true;\n this.item.get('microsoftData').setValidators(Validators.required);\n this.cd.markForCheck();\n }\n\n public checkForRushJob(date: Date): void {\n this.showRushJob = this.dateService.earlierThanNWeeksFromNow(date, this.RUSH_JOB_WEEKS);\n }\n\n public removeItem(): void {\n this.remove.emit(this.requestItemIndex);\n }\n\n public copyItem(): void {\n this.onCopy.emit(this.requestItemIndex);\n }\n\n public beforeUploadFunction = () => this.updateRequestDetailsFunction(this.requestItemIndex).pipe(\n tap(id => {\n this.itemDetails.id = id;\n this.item.patchValue({ id });\n }),\n );\n\n public uploadExternalPin = (file) => this.requestService.uploadExternalPin(this.requestId, file, this.itemDetails.id, REQUEST_TYPE.CPR);\n\n public removeExternalPin = (attachmentId) => this.requestService.deleteExternalPin(this.requestId, attachmentId, this.itemDetails.id, REQUEST_TYPE.CPR);\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.productUpcChangedSubscription?.unsubscribe();\n }\n\n private checkMicrosoftIssuer() {\n const wpn = this.item?.get('wpn')?.value;\n const productUpc = this.item?.get('productUpc')?.value;\n if (!wpn || !productUpc) {\n this.removeMicrosoftSpecificField();\n return;\n }\n this.requestService.getWPNdata(wpn)\n .subscribe((data: WpnResponse[]) => {\n const product = data?.find(item => item.productUpc === productUpc);\n if (this.isMicrosoftIssuer(product)) {\n this.setMicrosoftSpecificField();\n } else {\n this.removeMicrosoftSpecificField();\n }\n this.checkEuropeanCountry(product);\n }, () => {\n console.error('could not retrieve issuer, considering non-microsoft specific data');\n this.removeMicrosoftSpecificField();\n });\n\n }\n\n private isMicrosoftIssuer(product): boolean {\n if (!product || !product.issuer || !product.issuer.name) {\n return false;\n }\n return product.issuer.name.indexOf('Microsoft') > -1;\n }\n\n private checkEuropeanCountry(product): void {\n if (!product?.country?.isoAlphaAbbreviation) {\n return undefined;\n }\n this.isEuropean = this.countryService.checkCountry(product.country.isoAlphaAbbreviation);\n if (this.isEuropean && !this.item.get('pidId') && !this.item.get('encodingId')) {\n this.item.addControl('pidId', new FormControl(null, [Validators.required]));\n this.item.addControl('encodingId', new FormControl(null));\n }\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {Subject, Subscription} from 'rxjs';\nimport {RequestsService} from '../../../../../services/requests.service';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-stakeholder-details',\n templateUrl: './stakeholder-details.component.html',\n styleUrls: ['./stakeholder-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StakeholderDetailsComponent implements OnInit, OnDestroy {\n @Input() public contact: FormControl;\n @Input() public contactIndex: number;\n @Input() public isDisabled: boolean;\n @Input() columns = 6;\n\n @Output() public remove: EventEmitter = new EventEmitter();\n\n private stakeholderSubscription: Subscription;\n public userDataLoading: Subject = new Subject();\n public stakeholdersSearch: Array<{firstName: number; lastName: string; userName: string; fullName: string}> = [];\n\n constructor(public utilsService: UtilsService, private requestsService: RequestsService, private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.stakeholderSubscription = this.contact.statusChanges.subscribe(() => {\n this.cd.detectChanges();\n });\n }\n\n public getUserData(userName: string) {\n this.userDataLoading.next(true);\n this.contact.updateValueAndValidity();\n this.requestsService.getContacts(userName).subscribe(data => {\n this.stakeholdersSearch = data.map(s => ({...s, label: [s.firstName, s.lastName].join(' '), value: s, extras: [s.userName]}));\n this.cd.detectChanges();\n this.userDataLoading.next(false);\n });\n }\n\n public removeContact(): void {\n this.remove.emit(this.contactIndex);\n }\n\n ngOnDestroy() {\n this.stakeholderSubscription?.unsubscribe();\n }\n}\n","
\n
\n 0 ? ' ' + (contactIndex + 1) : '' }}\"\n >\n
\n \n \n \n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, EventEmitter,\n Inject,\n Input, OnChanges,\n OnDestroy,\n OnInit, Optional, Output, SimpleChanges\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { RequestsService } from '../../../../services/requests.service';\nimport {\n INTEGER_PATTERN, MAX_REBILL_TOTAL,\n NOTE_MAX_LENGTH,\n INTEGER_PATTERN_EXCEPT_ZERO_VALUE,\n PaymentType,\n PRICE_PATTERN,\n QUANTITY_MAX_LENGTH\n} from '../../../../constants/request-details.constants';\nimport { Router } from '@angular/router';\nimport { PAGES_CONFIG } from '../../../../../shared/constants/pages.constants';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport {filter, takeUntil, map, takeWhile, pluck, tap, find} from 'rxjs/operators';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport forEach from 'lodash/forEach';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {Action, ActionsSubject, Store} from '@ngrx/store';\nimport {\n selectAdditionalOtherContacts,\n selectRequestDetails,\n} from '../../../../reducers/request-details/request-details.selectors';\nimport {selectPaymentTypes} from '../../../../../reducers/ref-data/refdata.selectors';\nimport BigJs from 'big.js';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {UserGroups} from '../../../../../shared/constants/user-groups.enum';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {\n lazyLoadDataPinFileTypes,\n lazyLoadDielines,\n lazyLoadPaymentTypes, lazyLoadRedemptionTypes, lazyLoadRequestItemTypes, lazyLoadSubstrates,\n} from 'src/app/reducers/ref-data/refdata.actions';\nimport {ProductionRequestModel} from '../../../../models/production-request.model';\nimport {isPPMSelectorState} from '../../../../../reducers/ppm/ppm.selectors';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { UserModel } from 'src/app/shared/models/user.model';\n\nconst PRICE_MAX = 1000000;\nconst PRICE_MIN = 0.000001;\n\n@Component({\n selector: 'app-production-details',\n templateUrl: './production-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductionDetailsComponent implements OnInit, OnDestroy, OnChanges, RequestDetailsStageController {\n @Input() public isDisabled: boolean;\n @Input() private requestId;\n @Input() private isReviewStage = false;\n @Output() public deleteDraft = new EventEmitter();\n\n public masterForm: FormGroup;\n public requestDetails: any = {};\n public requestItemsControls: FormArray;\n public printProductionManagerControl: FormControl;\n public additionalStakeholdersDetailsControls: FormArray;\n public paymentTypes: PaymentType[];\n public printProductionManagers: any[] = [];\n public isRebillRequired = false;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public newItemIndex: number;\n\n private isShowSavedMessage = false;\n private subscriptions: Array = [];\n private paymentTypeSubscription: Subscription;\n private ngUnsubscribe = new Subject();\n private isUserPPM: boolean;\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n\n constructor(public utilsService: UtilsService,\n private fb: FormBuilder,\n private requestsService: RequestsService,\n private router: Router,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private store: Store,\n private actions: ActionsSubject,\n private translate: TranslatePipe,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {}\n\n public ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadPaymentTypes());\n this.store.dispatch(lazyLoadDielines());\n this.store.dispatch(lazyLoadDataPinFileTypes());\n this.store.dispatch(lazyLoadSubstrates());\n this.store.dispatch(lazyLoadRedemptionTypes());\n this.store.dispatch(lazyLoadRequestItemTypes());\n\n this.store.select(isPPMSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isPPM')\n ).subscribe((isUserPPM) => {\n this.isUserPPM = isUserPPM;\n });\n\n this.setInitialRequestDetails({});\n this.buildProductionDetailsForm();\n this.getPaymentTypes();\n this.getRequestDetails();\n this.getPrintProductionManagers();\n this.addEventSubscriptions();\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.masterForm.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n public async validate(): Promise {\n if(this.masterForm.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n this.masterForm.markAllAsTouched();\n this.cd.markForCheck();\n return Promise.resolve(this.masterForm.valid);\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public uploadPaymentProofFunction = (file) => this.requestsService.uploadProofOfPayments(this.requestId, file);\n\n public removePaymentProofFunction = (attachmentId: any) => this.requestsService.deleteProofOfPayment(this.requestId, attachmentId);\n\n private setInitialRequestDetails(data?: any): void {\n this.requestDetails = cloneDeep(data);\n\n if (!data.country) {\n this.requestDetails.country = null;\n }\n if (!data.finance) {\n this.requestDetails.finance = {\n paymentType: null, rebillAmountPerItem: null, partnerPoNumber: null,\n notes: null, proofsOfPayment: [], id: null\n };\n }\n if (!data.details) {\n this.requestDetails.details = {\n contacts: [], printProductionManager: null, id: null\n };\n }\n if (!data.items?.length) {\n this.requestDetails.items = [{\n brand: null, dataPinFileType: null, dcmsId: null, deliveryDate: null,\n denom: null, encodingId: null, microsoftData: null, notes: null, pidId: null, countryCode: null,\n pinInfo: null, productClassification: null, productOwners: [], processorInterface: null, processorCompany: null,\n productUpc: null, productDescription: null, type: null, wpn: null, wpnDescription: null, id: null,\n issuer: null,\n formFactor: {\n dielineType: null, encodingType: null, hardCopyProofRequired: false,\n itemNumber: null, productId: null, redemptionType: null, skuNumber: null,\n substrateType: null, upcRequired: false, vendorStockNumber: null, id: null\n },\n merchants: [{\n name: null, mdmId: null, fcmsId: null, country: null, accountManagers: [], id: null\n }],\n productionQuantity: {\n testCardQuantity: null, productionQuantity: null, bundleSize: null,\n caseSize: null, id: null,\n shipments: [{ warehouse: null, quantity: null }]\n },\n externalPinFiles: [],\n }];\n }\n }\n\n private getRequestDetails(): void {\n this.store.select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .pipe(filter(request => request !== null && request?.type === 'PRODUCTION_REQUEST'))\n .subscribe(requestDetails => {\n if (requestDetails) {\n this.setInitialRequestDetails(requestDetails);\n this.buildProductionDetailsForm();\n this.setPaymentTypeSubscription();\n this.masterForm.get('finance.paymentType').updateValueAndValidity();\n this.cd.markForCheck();\n }\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', 'The request was successfully saved', '');\n this.isShowSavedMessage = false;\n }\n }, () => {\n this.router.navigate([`${PAGES_CONFIG.REQUESTS}`]);\n });\n }\n\n private getPaymentTypes(): void {\n this.store.select(selectPaymentTypes)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((types: PaymentType[]) => {\n if (types.length) {\n this.paymentTypes = Object.assign(types);\n this.setPaymentTypeSubscription();\n this.cd.markForCheck();\n }\n });\n }\n\n private getPrintProductionManagers(): void {\n this.requestsService.getUsers('', [UserGroups.PPM])\n .pipe(\n filter(managersList => managersList?.length > 0),\n map(managersList => managersList.map(item => ({value: item}))),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(managersList => {\n this.printProductionManagers = managersList;\n this.setInitPPMFromOptions();\n this.cd.detectChanges();\n });\n }\n\n private setInitPPMFromOptions(): void {\n const currentVal = this.printProductionManagers?.find(\n manager => manager?.value?.userName === this.printProductionManagerControl?.value?.userName\n );\n\n if (currentVal?.value) {\n this.printProductionManagerControl.patchValue(currentVal.value);\n }\n }\n\n private buildProductionDetailsForm(): void {\n this.paymentTypeSubscription?.unsubscribe();\n const reqDetailsCopy = cloneDeep(this.requestDetails);\n\n this.masterForm = this.fb.group({\n details: this.fb.group({\n id: this.fb.control(this.requestDetails.details.id),\n printProductionManager: this.fb.control(\n this.requestDetails.details.printProductionManager,\n [Validators.required, UtilsService.userValidationFn()]),\n contacts: this.fb.array([])\n }),\n finance: this.fb.group({\n id: this.fb.control(this.requestDetails.finance.id),\n paymentType: this.fb.control(\n this.requestDetails.finance.paymentType, [Validators.required]),\n rebillAmountPerItem: this.fb.control(\n this.requestDetails.finance.rebillAmountPerItem,\n [Validators.max(PRICE_MAX), Validators.min(PRICE_MIN), Validators.pattern(PRICE_PATTERN)]),\n partnerPoNumber: this.fb.control(this.requestDetails.finance.partnerPoNumber),\n notes: this.fb.control(\n this.requestDetails.finance.notes, [Validators.maxLength(NOTE_MAX_LENGTH)]),\n proofsOfPayment: this.fb.control(this.requestDetails.finance.proofsOfPayment)\n }),\n items: this.fb.array([]),\n country: this.fb.control(null)\n });\n\n this.requestItemsControls = this.masterForm.get('items') as FormArray;\n this.additionalStakeholdersDetailsControls =\n this.masterForm.get('details').get('contacts') as FormArray;\n\n this.printProductionManagerControl = this.masterForm.get('details').get('printProductionManager') as FormControl;\n\n this.setInitPPMFromOptions();\n\n reqDetailsCopy.items.forEach(item => {\n this.pushNewRequestItem(item);\n });\n if (this.requestDetails.details.contacts.length) {\n this.requestDetails.details.contacts.forEach(item => {\n this.pushNewStakeholderContact(item);\n });\n } else {\n this.pushStakeholderContact();\n }\n\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n\n private setPaymentTypeSubscription(): void {\n this.paymentTypeSubscription = this.masterForm.get('finance.paymentType').valueChanges\n .subscribe(newVal => {\n const financeDetailsForm = this.masterForm.get('finance');\n const rebillAmountPerItemControl = financeDetailsForm.get('rebillAmountPerItem');\n\n if (newVal === 'PREPAYMENT' || newVal === 'REBILL') {\n rebillAmountPerItemControl.setValidators([\n Validators.required, Validators.max(PRICE_MAX), Validators.min(PRICE_MIN), Validators.pattern(PRICE_PATTERN)\n ]);\n rebillAmountPerItemControl.updateValueAndValidity();\n this.isRebillRequired = true;\n\n return;\n }\n\n rebillAmountPerItemControl.setValidators([\n Validators.max(PRICE_MAX), Validators.min(PRICE_MIN), Validators.pattern(PRICE_PATTERN)\n ]);\n rebillAmountPerItemControl.updateValueAndValidity();\n this.isRebillRequired = false;\n });\n }\n\n private pushRequestItem(): void {\n const item = this.fb.group({\n countryCode: this.fb.control(null),\n type: this.fb.control(null, [Validators.required]),\n deliveryDate: this.fb.control(null, Validators.required),\n wpn: this.fb.control(null,\n [Validators.required, Validators.minLength(12),\n Validators.maxLength(13), Validators.pattern(INTEGER_PATTERN)]),\n wpnDescription: this.fb.control(null, Validators.required),\n issuer: this.fb.control(null),\n productOwners: this.fb.control([], Validators.required),\n processorInterface: this.fb.control(null),\n processorCompany: this.fb.control(null),\n productUpc: this.fb.control(null, Validators.required),\n productDescription: this.fb.control(null),\n dcmsId: this.fb.control(null, Validators.required),\n denom: this.fb.control(null, Validators.required),\n dataPinFileType: this.fb.control(null, Validators.required),\n pinInfo: this.fb.control(null, Validators.maxLength(280)),\n brand: this.fb.control(null, Validators.required),\n productClassification: this.fb.control(null, Validators.required),\n encodingId: this.fb.control(null, Validators.maxLength(25)),\n pidId: this.fb.control(null),\n notes: this.fb.control(null),\n merchants: this.fb.array([\n this.fb.group({\n name: this.fb.control({name: null, id: null}),\n mdmId: this.fb.control(null, Validators.required),\n fcmsId: this.fb.control(null, Validators.required),\n country: this.fb.control(null, Validators.required),\n accountManagers: this.fb.array([])\n })\n ]),\n microsoftData: this.fb.control(null),\n formFactor: this.fb.group({\n upcRequired: this.fb.control(false, Validators.required),\n dielineType: this.fb.control(null, Validators.required),\n encodingType: this.fb.control(null),\n productId: this.fb.control(null),\n skuNumber: this.fb.control(null),\n itemNumber: this.fb.control(null),\n vendorStockNumber: this.fb.control(null),\n substrateType: this.fb.control(null, Validators.required),\n redemptionType: this.fb.control(null, Validators.required),\n hardCopyProofRequired: this.fb.control(false)\n }),\n productionQuantity: this.fb.group({\n testCardQuantity: this.fb.control(null, [Validators.required,\n Validators.maxLength(QUANTITY_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n productionQuantity: this.fb.control(null, [Validators.required,\n Validators.maxLength(QUANTITY_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n totalQty: this.fb.control(null),\n bundleSize: this.fb.control(null, Validators.required),\n caseSize: this.fb.control(null, Validators.required),\n shipments: this.fb.array([this.fb.group({\n warehouse: this.fb.control(null, Validators.required),\n quantity: this.fb.control(null, Validators.required)\n })]),\n })\n });\n\n this.requestItemsControls.push(item);\n }\n\n private pushNewRequestItem(responseItem): void {\n const deliveryDate = responseItem.deliveryDate ? new Date(responseItem.deliveryDate) : null;\n const item = this.fb.group({\n id: this.fb.control(responseItem.id),\n countryCode: this.fb.control(responseItem?.countryCode || null),\n type: this.fb.control(\n responseItem.type, [Validators.required]),\n deliveryDate: this.fb.control(\n deliveryDate, Validators.required),\n wpn: this.fb.control(\n responseItem.wpn,\n [Validators.required, Validators.minLength(12),\n Validators.maxLength(13), Validators.pattern(INTEGER_PATTERN)]),\n wpnDescription: this.fb.control(\n responseItem.wpnDescription, Validators.required),\n issuer: this.fb.control(responseItem?.issuer),\n productOwners: this.fb.control(\n responseItem.productOwners, Validators.required),\n processorInterface: this.fb.control(responseItem.processorInterface),\n processorCompany: this.fb.control(responseItem.processorCompany),\n productUpc: this.fb.control(\n responseItem.productUpc, Validators.required),\n productDescription: this.fb.control(responseItem.productDescription),\n dcmsId: this.fb.control(\n responseItem.dcmsId, Validators.required),\n denom: this.fb.control(\n responseItem.denom, Validators.required),\n dataPinFileType: this.fb.control(\n responseItem.dataPinFileType, Validators.required),\n pinInfo: this.fb.control(responseItem.pinInfo, Validators.maxLength(280)),\n brand: this.fb.control(\n responseItem.brand, Validators.required),\n productClassification: this.fb.control(\n responseItem.productClassification, Validators.required),\n encodingId: this.fb.control(responseItem.encodingId),\n pidId: this.fb.control(responseItem.pidId),\n notes: this.fb.control(responseItem.notes),\n merchants: this.fb.array([]),\n microsoftData: this.fb.control(responseItem.microsoftData),\n formFactor: this.fb.group({\n id: this.fb.control(responseItem.formFactor.id),\n upcRequired: this.fb.control(\n responseItem.formFactor.upcRequired, Validators.required),\n dielineType: this.fb.control(\n responseItem.formFactor.dielineType, Validators.required),\n encodingType: this.fb.control(responseItem.formFactor.encodingType),\n productId: this.fb.control(responseItem.formFactor.productId),\n skuNumber: this.fb.control(responseItem.formFactor.skuNumber),\n itemNumber: this.fb.control(responseItem.formFactor.itemNumber),\n vendorStockNumber: this.fb.control(responseItem.formFactor.vendorStockNumber),\n substrateType: this.fb.control(\n responseItem.formFactor.substrateType, Validators.required),\n redemptionType: this.fb.control(\n responseItem.formFactor.redemptionType, Validators.required),\n hardCopyProofRequired: this.fb.control(responseItem.formFactor.hardCopyProofRequired)\n }),\n productionQuantity: this.fb.group({\n id: this.fb.control(responseItem.productionQuantity.id),\n testCardQuantity: this.fb.control(\n responseItem.productionQuantity.testCardQuantity, [Validators.required,\n Validators.maxLength(QUANTITY_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n productionQuantity: this.fb.control(\n responseItem.productionQuantity.productionQuantity, [Validators.required,\n Validators.maxLength(QUANTITY_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN_EXCEPT_ZERO_VALUE),\n UtilsService.cardProductionQtyValidationFn()]),\n totalQty: this.fb.control(null),\n bundleSize: this.fb.control(\n responseItem.productionQuantity.bundleSize, Validators.required),\n caseSize: this.fb.control(\n responseItem.productionQuantity.caseSize, Validators.required),\n shipments: this.fb.array([]),\n })\n });\n\n responseItem.merchants.forEach(merchant => {\n (item.get('merchants') as FormArray).push(this.fb.group({\n id: this.fb.control(merchant.id),\n mdmId: this.fb.control(merchant.mdmId),\n name: this.fb.control({name: merchant.name, id: merchant.fcmsId ? merchant.fcmsId : merchant.mdmId}),\n fcmsId: this.fb.control(merchant.fcmsId, Validators.required),\n country: this.fb.control(merchant.country, Validators.required),\n accountManagers: this.fb.array(merchant.accountManagers)\n }));\n });\n\n responseItem.productionQuantity.shipments.forEach(shipment => {\n (item.get('productionQuantity').get('shipments') as FormArray)\n .push(this.fb.group({\n id: this.fb.control(shipment.id),\n warehouse: this.fb.control(shipment.warehouse, Validators.required),\n quantity: this.fb.control(shipment.quantity, Validators.required)\n }));\n });\n\n this.requestItemsControls.push(item);\n }\n\n private pushNewStakeholderContact(contact): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.masterForm?.disable({emitEvent: false});\n } else {\n this.masterForm?.enable({emitEvent: false});\n\n if (this.isReviewStage && this.isUserPPM) {\n this.masterForm.get('details.printProductionManager').disable({emitEvent: false});\n }\n }\n\n this.cd.detectChanges();\n }\n\n private pushStakeholderContact(contact?: UserModel): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n public onAddRequestItem(): void {\n this.pushRequestItem();\n this.updateNewItemIndex();\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.controls[index] as FormGroup).getRawValue());\n item.id = null;\n item.formFactor.id = null;\n item.productionQuantity.id = null;\n item.merchants?.forEach((merchant) => {\n merchant.id = null;\n merchant.name = merchant.name?.name || null;\n });\n item.productionQuantity?.shipments?.forEach(shipment => {\n if (!shipment) {\n return;\n }\n shipment.id = null;\n if (!shipment.warehouse) {\n return;\n }\n shipment.warehouse.id = null;\n });\n this.pushNewRequestItem(item);\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(index);\n this.requestDetails.items.splice(index, 1);\n }\n }\n\n public updateRequestDetailsFunction: (itemIdx: number) => Observable = (itemIdx: number) => this.requestsService.updateRequestDetails(this.requestId, this.updateRequestDetails()).pipe(\n tap(({ items, details }) => {\n this.masterForm.get('details.id').setValue(details.id);\n this.utilsService.setMerchantsDataToControls(items, this.requestItemsControls);\n }),\n map(v => v.items[itemIdx].id),\n );\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact();\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n public getInvalidShipmentsQuantityStr(): string {\n const itemsIdxs: number[] = [];\n\n (this.masterForm.get('items') as FormArray).controls.forEach((fg: FormGroup, idx) => {\n const shipTotalQty = (fg.get('productionQuantity.shipments') as FormArray).controls\n .reduce((acc, control: FormGroup) => acc + Number(control.controls.quantity.value), 0);\n const availableQty = fg.get('productionQuantity.productionQuantity').value - shipTotalQty;\n\n (fg.get('productionQuantity.shipments') as FormArray).controls.forEach(() => {\n if (availableQty !== 0) {\n itemsIdxs.push(idx);\n }\n });\n });\n\n return [...new Set(itemsIdxs)]\n .map(idx => `Item #${idx + 1}`)\n .join(', ');\n }\n\n public addEventSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n if (this.isDisabled) {\n return;\n }\n\n this.deleteDraft.emit();\n }),\n this.eventService.on(Events.RequestDetailsSave, () => {\n if (this.isDisabled) {\n return;\n }\n\n this.isShowSavedMessage = true;\n this.saveRequest();\n }),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n if (this.isDisabled) {\n return;\n }\n\n this.submitRequest(event.comment);\n }),\n this.eventService.on(Events.ProductionReviewRollback, ({comment}) => {\n if (this.isDisabled) {\n return;\n }\n\n this.saveRequest();\n\n this.actions.pipe(\n find(a => [\n requestDetailsActions.updateRequestDetailsSuccess.type,\n requestDetailsActions.updateRequestDetailsFailure.type\n ].includes(a.type)\n ),\n takeUntil(this.ngUnsubscribe)\n ).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.RouteBack,\n comment,\n },\n });\n }\n });\n }),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n if (this.isDisabled) {\n return;\n }\n\n const message = this.getInvalidShipmentsQuantityStr();\n if (this.masterForm.valid && message) {\n this.messageService.showSystemMessage(\n 'error', 'Invalid quantity',\n `Cannot submit. Please recheck available quantity in ${message}`\n );\n return;\n }\n\n if (this.masterForm.valid) {\n const rebillAmount = new BigJs(Number(this.masterForm.get('finance.rebillAmountPerItem').value));\n const totalQty = this.getAllItemsProductQty();\n const maxRebillTotal = new BigJs(MAX_REBILL_TOTAL);\n\n if (rebillAmount.times(totalQty).gt(maxRebillTotal)) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.details.max-rebill-header'),\n this.translate.transform('module.requests.details.max-rebill-desc')\n );\n return;\n }\n\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n } else {\n this.showInvalidFormState();\n }\n }));\n }\n\n private getAllItemsProductQty(): number {\n const form = this.masterForm.getRawValue();\n\n return form.items.reduce((sum, item) => sum.plus(Number(item.productionQuantity.productionQuantity) || 0), new BigJs(0));\n }\n\n public saveRequest(): void {\n const requestDetails = this.updateRequestDetails();\n\n this.store.dispatch(\n requestDetailsActions.updateRequestDetails({requestId: this.requestId, details: requestDetails, excludeParts: ['contacts']})\n );\n }\n\n private submitRequest(comment?: string): void {\n this.isShowSavedMessage = false;\n this.saveRequest();\n // Do not use stor here, just make http put call from requests.service\n this.actions.pipe(takeUntil(this.ngUnsubscribe)).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n });\n }\n\n private showInvalidFormState(): void {\n this.utilsService.logInvalidControls(this.masterForm);\n this.messageService.showSystemMessage('error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message')\n );\n this.touchFormControls(this.masterForm);\n this.cd.detectChanges();\n }\n\n private touchFormControls(form: FormGroup): void {\n Object.keys(form.controls).forEach(key => {\n const control = form.get(key);\n if ((control as FormGroup).controls?.length) {\n forEach((control as FormGroup).controls, (item) => {\n if ((item as FormGroup).controls) {\n this.touchFormControls((item as FormGroup));\n } else if (item.pristine) {\n item.markAsTouched();\n item.updateValueAndValidity({onlySelf: true, emitEvent: true});\n }\n });\n }\n if ((control as FormGroup).controls) {\n this.touchFormControls((control as FormGroup));\n } else if (control.pristine) {\n control.markAsTouched();\n if ((key !== 'wpn' && key !== 'name') || (control.invalid && (key === 'wpn' || key === 'name'))) {\n control.updateValueAndValidity({onlySelf: true, emitEvent: true});\n }\n }\n });\n }\n private updateRequestDetails(): ProductionRequestModel {\n this.masterForm.get('country').setValue(this.masterForm.get('items.0.countryCode').value);\n\n const form = cloneDeep({ ...(this.requestDetails), ...this.masterForm.getRawValue() });\n\n if (form.details.contacts[0] === null) {\n form.details.contacts = [];\n }\n\n if (typeof form.details.printProductionManager === 'string') {\n form.details.printProductionManager = null;\n }\n\n form.details.contacts = form.details.contacts.filter(contact => typeof(contact) !== 'string');\n\n form.items.forEach((item) => {\n item.merchants.forEach(merchant => {\n merchant.name = merchant?.name?.name;\n });\n\n item.productionQuantity.shipments.forEach((formShipment) => {\n if(formShipment.warehouse && !formShipment.warehouse.id){\n const shipment = (this.requestDetails.items.find(i => i.id === item.id))\n ?.productionQuantity.shipments.find(shipmentItem => shipmentItem.id === formShipment.id);\n formShipment.warehouse.id = shipment?.warehouse ? shipment.warehouse.id : null;\n }\n });\n });\n\n return form;\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n this.paymentTypeSubscription?.unsubscribe();\n this.setInitialRequestDetails({});\n }\n\n}\n","
\n
\n
\n {{'module.requests.details.print-production-manager' | translate}}\n
\n \n \n
\n
\n \n
\n {{'module.requests.details.finance-details' | translate}}\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n\n
\n \n
\n
\n \n
\n {{'module.requests.text.request-items' | translate}}\n \n\n \n\n
\n \n
\n\n
\n\n \n
\n \n
\n {{'module.requests.details.stakeholder-details' | translate}}\n
\n
{{'module.requests.details.stakeholder-details' | translate}}
\n
\n \n
\n \n
\n
\n
\n
\n","
\n \n
\n {{label}}\n {{items.length}}\n
\n
\n
\n \n
\n
\n
\n \n
\n {{item.fileName}}\n \n {{ utilsService.getFormattedBytes(item.fileSize) }}\n

\n {{item.status}}\n \n {{item.reviewer.firstName}} {{item.reviewer.lastName}}\n {{(item.updatedAt || item.reviewedAt) | date : 'MM/dd/yyyy, hh:mm a'}}\n \n

\n

\n {{'module.requests.upload.rejection-reason' | translate | uppercase}}:\n {{item.rejectionReason}}\n

\n
\n
\n \n
\n \n \n
\n
\n
\n","import { Component, ContentChild, Input, TemplateRef } from '@angular/core';\nimport { ARTWORK_STATUSES } from '../../../requests/constants/artwork-file-statuses.constants';\nimport { RequestsService } from '../../../requests/services/requests.service';\nimport { UtilsService } from '../../services/utils.service';\n\n@Component({\n selector: 'app-file-downloader',\n templateUrl: './file-downloader.component.html',\n styleUrls: ['./file-downloader.component.scss'],\n})\nexport class FileDownloaderComponent {\n\n @Input() public label: string;\n @Input() public items;\n @Input() public requestId;\n @Input() public hideDownloadAll?: boolean;\n @Input() public hidePreview?: boolean;\n @Input() public showBadge?: boolean;\n\n @ContentChild('actionItems') actionItemsRef: TemplateRef;\n @ContentChild('customLabel') customLabel!: TemplateRef;\n\n public ARTWORK_STATUSES = ARTWORK_STATUSES;\n\n constructor(\n public utilsService: UtilsService,\n private requestService: RequestsService,\n ) { }\n\n public downloadAll(): void {\n this.items.forEach(item => this.downloadItem(item));\n }\n\n public downloadItem(item): void {\n this.requestService.downloadItemFile(item, this.requestId);\n }\n\n public openLink(item): void {\n this.requestService.getBlob(item?.url || this.requestService.getFileUrl(item, this.requestId)).subscribe(data => {\n const blob = new Blob([data.body], {type: data.headers.get('content-type') || 'application/pdf'});\n const link = URL.createObjectURL(blob);\n window.open(link, '_blank');\n });\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'app-more-details-link',\n templateUrl: './more-details-link.component.html',\n styleUrls: [],\n})\nexport class MoreDetailsLinkComponent {\n @Input() public displayName: string;\n @Input() public isDisabled: boolean;\n\n @Output() linkClicked = new EventEmitter();\n\n public doClick(): void {\n this.linkClicked.emit();\n }\n}\n","{{'module.requests.text.more-details' | translate}}\n
\n {{'module.requests.text.open' | translate}} \n \n
\n","
\n
\n
\n {{'module.requests.text.finance-items' | translate}}\n \n
\n \n
\n
\n {{'module.requests.text.payment-type' | translate}}:\n {{getItemName(paymentTypes, financeDetails?.paymentType)}}\n
\n
\n {{'module.requests.text.rebill-amount' | translate}}:\n {{financeDetails?.rebillAmountPerItem}}\n
\n
\n
\n \n
\n
\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n
\n\n \n \n \n
\n \n
\n
\n {{'module.requests.finance.wpn-description' | translate}}:\n {{item.wpnDescription}}\n
\n
\n
\n
\n
\n {{'module.requests.finance.product-upc' | translate}}\n {{item.productUpc}}\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{item.wpn}}\n
\n
\n {{'module.requests.finance.production-qty' | translate}}\n {{item.productionQuantity?.productionQuantity}}\n
\n
\n {{'module.requests.finance.delivery-date' | translate}}\n {{item.deliveryDate | date : 'MM/dd/yyyy'}}\n
\n
\n {{'module.requests.finance.brand' | translate}}\n {{item.brand}}\n
\n
\n {{'module.requests.finance.product-classification' | translate}}\n {{item.productClassification}}\n
\n
\n
\n
\n
\n
\n
\n {{'module.requests.finance.item-type' | translate}}\n {{getItemName(requestItemsTypes, item.type)}}\n
\n
\n {{'module.requests.finance.product-owner' | translate}}\n {{PO.firstName}} {{PO.lastName}}\n
\n
\n
\n
\n
\n {{'module.requests.finance.dcms-id' | translate}}\n {{item.dcmsId}}\n
\n
\n {{'module.requests.finance.denom' | translate}}\n {{item.denom}}\n
\n
\n {{'module.requests.finance.data-pin-file' | translate}}\n {{getItemName(dataPinFiles, item?.dataPinFileType)}}\n
\n
\n
\n {{'module.requests.finance.pid-id' | translate}}\n {{item.pidId}}\n
\n
\n
\n
\n {{'module.requests.finance.encoding-identifier' | translate}}\n {{item.encodingId}}\n
\n
\n
\n
\n\n
\n
\n

{{'module.requests.finance.merchant-details' | translate}}:

\n
\n {{'module.requests.finance.merchant-name' | translate}}\n {{merchant.name}} - {{merchant.fcmsId}}\n
\n
\n {{'module.requests.finance.merchant-country' | translate}}\n {{merchant.country}}\n
\n
\n {{'module.requests.finance.merchant-am' | translate}}\n \n \n {{manager.firstName}} {{manager.lastName}}\n \n \n \n
\n
\n
\n\n
\n
\n

{{'module.requests.finance.form-factor' | translate}}

\n
\n {{'module.requests.finance.upc-required' | translate}}\n {{item.formFactor.upcRequired ? 'Yes' : 'No'}}\n
\n
\n {{'module.requests.finance.dieline' | translate}}\n {{getItemName(dielines,\n item.formFactor.dielineType)}}\n
\n
\n {{'module.requests.finance.encoding-type' | translate}}\n {{item.formFactor.encodingType}}\n
\n
\n {{'module.requests.finance.product-id' | translate}}\n {{'module.requests.finance.item-number' | translate}}\n {{item.formFactor.productId}}\n {{item.formFactor.itemNumber}}\n
\n
\n {{'module.requests.finance.sku' | translate}}\n {{'module.requests.finance.vendor-stock' | translate}}\n {{item.formFactor.skuNumber}}\n {{item.formFactor.vendorStockNumber}}\n
\n
\n
\n
\n {{'module.requests.finance.substrate' | translate}}\n {{getItemName(substrates,\n item.formFactor.substrateType)}}\n
\n
\n {{'module.requests.finance.redemption' | translate}}\n {{getItemName(redemptions,\n item.formFactor.redemptionType)}}\n
\n
\n
\n
\n
\n
\n {{'module.requests.finance.hardcopy-required' | translate}}\n {{item.formFactor.hardCopyProofRequired ? 'Yes' : 'No'}}\n \n \n {{'module.requests.finance.hardcopy-note' | translate}}\n \n
\n
\n
\n\n
\n
\n

{{'module.requests.finance.production-quantity' | translate}}

\n
\n {{'module.requests.finance.production-qty' | translate}}\n {{item.productionQuantity.productionQuantity}}\n
\n
\n {{'module.requests.finance.test-card-qty' | translate}}\n {{item.productionQuantity.testCardQuantity}}\n
\n
\n {{'module.requests.finance.total-qty' | translate}}\n {{item.productionQuantity.testCardQuantity + item.productionQuantity.productionQuantity}}\n
\n
\n
\n
\n
\n {{'module.requests.finance.bundle-size' | translate}}\n {{item.productionQuantity.bundleSize}}\n
\n
\n {{'module.requests.finance.case-size' | translate}}\n {{item.productionQuantity.caseSize}}\n
\n
\n
\n
\n
\n
\n {{'module.requests.finance.ship-to' | translate}}\n {{getWarehouseLabel(ship?.warehouse)}}\n
\n
\n
\n {{'module.requests.finance.quantity' | translate}}\n {{ship.quantity}}\n
\n
\n
\n
\n\n
\n
\n {{'common.label.note' | translate}}:\n {{item.notes}}\n
\n
\n\n
\n
\n
\n {{'common.label.note' | translate}}:\n

{{financeDetails?.notes}}

\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {LabelHelperService} from '../../../../services/label-helper.service';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {RequestItemModel} from '../../../../models/production-request.model';\nimport {FormFactorService} from '../../../../../shared/services/form-factor.service';\nimport {CountryService} from '../../../../../shared/services/country-service.service';\nimport {Store} from '@ngrx/store';\nimport {selectRefData} from '../../../../../reducers/ref-data/refdata.selectors';\nimport {selectRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {takeUntil} from 'rxjs/operators';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {goToStage} from '../../../../reducers/request-steps/request-steps.actions';\n\n@Component({\n selector: 'app-finance-approval',\n templateUrl: './finance-approval.component.html',\n styleUrls: ['./finance-approval.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FinanceApprovalComponent implements OnInit, OnDestroy {\n @Input() public requestId;\n @Input() public isDisabled: boolean;\n\n public financeItems = [];\n public financeDetails = {notes: '', paymentType: '', rebillAmountPerItem: '', proofsOfPayment: []};\n public requestItems: RequestItemModel[] = [];\n public paymentTypes: Array;\n public dataPinFiles: Array;\n public dielines: Array;\n public substrates: Array;\n public redemptions: Array;\n public requestItemsTypes: Array;\n\n private ngUnsubscribe = new Subject();\n\n constructor(\n private utilsService: UtilsService,\n private formFactorService: FormFactorService,\n private countryService: CountryService,\n private cd: ChangeDetectorRef,\n private store: Store\n ) {}\n\n ngOnInit(): void {\n this.setRequestDetailsSubscription();\n }\n\n isBestBuyFieldVisible(item: RequestItemModel): boolean {\n return this.formFactorService.isBestBuyRelatedFieldVisible(item?.formFactor?.encodingType);\n }\n\n isUabFieldVisible(item: RequestItemModel): boolean {\n return this.formFactorService.isUabRelatedFieldVisible(item?.formFactor?.encodingType);\n }\n\n private setRequestDetailsSubscription(): void {\n this.store\n .select(selectRefData)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(refData => {\n this.paymentTypes = refData?.paymentTypes || [];\n this.dielines = refData?.dielines || [];\n this.dataPinFiles = refData?.dataPinFileTypes || [];\n this.substrates = refData?.substrates || [];\n this.redemptions = refData?.redemptionTypes || [];\n this.requestItemsTypes = refData?.requestItemTypes || [];\n\n this.cd.markForCheck();\n });\n\n this.store\n .select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length && requestData.finance) {\n this.requestItems = cloneDeep(requestData.items as RequestItemModel[]);\n this.financeDetails = cloneDeep(requestData.finance);\n this.financeItems = this.financeDetails?.proofsOfPayment?.map(item => ({\n attachmentId: item.id,\n folder: item.folder,\n fileName: item.fileName,\n fileSize: item.fileSize,\n url: item.url\n }));\n\n this.cd.markForCheck();\n }\n });\n }\n\n public isEuropean(countryCode: string): boolean {\n return this.countryService.checkCountry(countryCode);\n }\n\n getItemName(array, code) {\n return this.utilsService.getItemName(array, code);\n }\n\n getWarehouseLabel(warehouse) {\n return LabelHelperService.getWarehouseLabel(warehouse);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n toProductionDetails() {\n this.store.dispatch(goToStage({stageCode: 'REQUEST_DETAILS'}));\n }\n}\n","import { File } from './file.model';\nimport { UserModel } from '../../shared/models/user.model';\nimport { ARTWORK_STATUSES } from '../constants/artwork-file-statuses.constants';\nimport { BaseRequestDetails, BaseRequestModel } from './request.model';\n\nexport interface CardDesignRequestModel extends BaseRequestModel {\n items: Array;\n details: CardDesignRequestDetails;\n}\n\nexport interface CardDesignRequestDetails extends BaseRequestDetails {\n firstRoundArtDeliveryDate?: string;\n finalArtDueDate?: string;\n tmApprovedDates?: boolean;\n datesApproved?: boolean;\n partnerGroupCode?: string;\n regionCode?: string;\n incommPrinting?: boolean;\n designSourceTypeCode?: string;\n artworkLocationTypeCode?: string;\n artworkDescription?: string;\n artworkChangesNeeded?: boolean;\n artworkChangesDescription?: string;\n artworkReplacesExisting?: boolean;\n artworkReplacementDescription?: string;\n artworkAddedToExisting?: boolean;\n artworkAdditionDescription?: string;\n designer?: UserModel;\n artFiles?: File[];\n items?: CardDesignRequestItemModel[];\n cdReviewRequired?: boolean;\n prepArtifactsDesigner?: UserModel;\n trafficManager?: UserModel;\n quantityOfFiles?: number;\n}\n\nexport interface ArtworkFileResolution {\n status: typeof ARTWORK_STATUSES[keyof typeof ARTWORK_STATUSES];\n createdAt: string;\n comment?: string;\n reviewer?: any;\n stageType?: any;\n}\n\nexport interface ArtworkFileAttachment {\n id: number;\n fileName: string;\n fileSize: number;\n folder: string;\n url?: string;\n creator?: any;\n createdAt?: any;\n}\n\nexport interface ArtworkFileVersion {\n id: number;\n active: boolean;\n attachment: ArtworkFileAttachment;\n createdAt: string;\n resolutions: ArtworkFileResolution[];\n reviewFinalized: boolean;\n commentFileUrl?: string;\n commentFileUrlExpiryTime?: string;\n}\n\nexport interface ArtworkFile {\n id: number;\n name: string;\n status: string;\n versions: ArtworkFileVersion[];\n attachmentId?: number;\n updatedAt?: string;\n reviewedAt?: string;\n rejectionReason?: string;\n reviewer?: string;\n}\n\ntype NoteProperty = 'artworkNotes';\ntype PathProperty = 'artworkPath' | 'finalArtFilePath' | 'artworkFilePath';\ntype FileProperty = 'artworkFiles' | 'artworks';\n\nexport type ArtworkFilesAware<\n N extends NoteProperty = 'artworkNotes',\n P extends PathProperty = 'artworkPath',\n F extends FileProperty = 'artworkFiles'\n> = {\n [key in N | P | F]?: key extends N ? string: key extends P ? string : key extends F ? ArtworkFileAttachment[] : never;\n};\n\ntype PropType = TObj[TProp];\n\nexport type ArtworkFilesAwareFromModel = ArtworkFilesAware<\n PropType,\n PropType,\n PropType\n>;\n\nexport class ArtworkFilesAwareModel {\n public notes?: NoteProperty;\n public path?: PathProperty;\n public files: FileProperty;\n}\n\nexport interface ArtifactFile {\n attachmentId: number;\n fileName: string;\n status: string;\n}\n\nexport type VersionAwareArtworkFile = ArtworkFile & {\n currentVersion: ArtworkFileVersion & {\n latestResolution: ArtworkFileResolution;\n };\n};\n\nexport interface CardDesignRequestItemModel {\n id?: number;\n currencyType?: string;\n denom?: string;\n dielineType?: string;\n freeFormProductDescription?: string;\n merchantSpecific?: boolean;\n productDescription?: string;\n productUpc?: string;\n upcRequired?: boolean;\n fscLogoRequiredInArt?: boolean;\n merchant?: any;\n productOwners?: UserModel[];\n finalArtFilePath?: string;\n notes?: string;\n artworkFiles?: ArtworkFile[];\n}\n","import {UserModel} from '../../shared/models/user.model';\nimport {BaseRequestDetails, BaseRequestModel} from './request.model';\nimport {File} from './file.model';\nimport { ArtworkFile, ArtworkFilesAwareModel } from './card-design-request.model';\nimport { BaseRequestItemModel, ItemShipments, Merchant } from './request-item.model';\n\nexport interface PopProductionRequestDetails extends BaseRequestDetails {\n id: number;\n channelTypeCode: string;\n conversionToProductionRequired?: boolean;\n eventTypeCode: string;\n promoTypeCode: string;\n promoDateRange: {\n startDate?: string;\n endDate?: string;\n };\n fundingTypeCode: string;\n fundingCode: string;\n artTypeCode: string;\n printQuoteOnly: boolean;\n designRequestReference: {\n id: number;\n status?: string;\n name: string;\n };\n printProductionManager?: UserModel;\n additionalAttachments: File[];\n partnerArtAttachments: File[];\n printerQuoteAttachments?: File[];\n merchants: Merchant[];\n subtotal?: string;\n totalCostEstimate?: string;\n miscCostEstimate?: string;\n designRequestFoundInInQueue?: boolean;\n inQueueJobReference?: string;\n}\n\nexport interface PopProductionRequestItemModel extends BaseRequestItemModel {\n id?: number;\n deliveryDate?: string;\n wpn?: string;\n wpnDescription?: string;\n itemDescription?: string;\n packingTypeCode?: string;\n kitShippingTypeCode?: string;\n kitLabeling?: boolean;\n kitLabelingComments?: string;\n usageDuration?: number;\n usageDurationTypeCode?: string;\n itemTypeCode?: string;\n dimensionTypeCode?: string;\n width?: number;\n height?: number;\n colorTypeCode?: string;\n cmykC?: number;\n cmykK?: number;\n cmykM?: number;\n cmykY?: number;\n bleed?: boolean;\n pantoneDetails?: string;\n sideNumberTypeCode?: string;\n materialTypeCode?: string;\n materialNotes?: string;\n tapeTypeCode?: string;\n tapeNotes?: string;\n cuttingTypeCode?: string;\n cuttingNotes?: string;\n versionQuantities?: PopProdItemVersion[];\n directToStoreShipments?: boolean;\n shipments?: ItemShipments[];\n shippingInstructions?: string;\n notes?: string;\n costEstimate?: string;\n itemQuantity?: number;\n artworks?: ArtworkFile[];\n artworkNotes?: string;\n finalArtFilePath?: string;\n versionName?: string;\n versionNumber?: number;\n productionQuantity?: number;\n}\n\ninterface PopProdItemVersion {\n id: number;\n name: string;\n quantity: number;\n}\n\nexport interface PopProductionRequestModel extends BaseRequestModel {\n items: Array;\n details: PopProductionRequestDetails;\n}\n\nexport class PopArtworkFilesAwareModel extends ArtworkFilesAwareModel {\n public files = 'artworks' as const;\n notes = 'artworkNotes' as const;\n path = 'finalArtFilePath' as const;\n constructor() {\n super();\n }\n}\n","import {Component, Directive, Input} from '@angular/core';\nimport {Constructor} from '@angular/material/core/common-behaviors/constructor';\n\n@Component({template: ''})\nexport abstract class AbstractRequestStepComponent {\n @Input() requestId: string;\n @Input() isDisabled: boolean;\n}\n\n@Directive()\nexport abstract class AbstractRequestStepBase {\n @Input() requestId: string = null;\n @Input() isDisabled: boolean = null;\n}\n\nexport function WithRequestStepInputs>(Base: T = class {} as any) {\n @Directive()\n class RequestStepInputs extends Base {\n @Input() requestId: string = null;\n @Input() isDisabled: boolean = null;\n }\n\n return RequestStepInputs;\n}\nWithRequestStepInputs.inputs = ['requestId', 'isDisabled'];\n","
\n
\n {{'module.requests.upload.upload-artwork-files' | translate}}\n
\n
\n \n \n \n \n {{ 'module.requests.ih.messages.upload-control-error' | translate }}\n \n
\n\n
\n \n \n
\n\n
\n \n
\n
\n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {RequestItemModel} from '../../../../models/production-request.model';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {FILE_TYPES} from '../../../../../shared/constants/upload-restrictions.constants';\nimport {\n FILE_SIZE_RESTRICTIONS,\n RestrictionOptionsObject\n} from '../../../../../shared/models/upload-file-restrictions.model';\nimport {Subscription} from 'rxjs';\nimport {EventService} from '../../../../../shared/services/event-service.service';\nimport {UserRoles} from '../../../../../shared/constants/user-roles.constant';\nimport {REQUEST_TYPE} from '../../../../constants/request-types.constant';\nimport {BifProductionRequestItemModel} from '../../../../models/bif-production-request.model';\nimport {FinancialServiceRequestItemModel} from '../../../../models/financial-service-request.model';\nimport {PopProductionRequestItemModel} from '../../../../models/pop-production-request.model';\nimport {ThirdPartyRequestItemModel} from '../../../../models/third-party-request.model';\nimport {BaseRequestItemModel} from '../../../../models/request-item.model';\nimport {FileUploadService} from '../../../../services/file-upload.service';\nimport {IhProductionRequestItemModel} from '../../../../models/ih-production-request.model';\n\n@Component({\n selector: 'app-upload-artwork-item-shared',\n templateUrl: './upload-artwork-item-shared.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadArtworkItemSharedComponent implements OnInit, OnChanges, OnDestroy {\n @Input() public item:\n RequestItemModel |\n BifProductionRequestItemModel |\n FinancialServiceRequestItemModel |\n PopProductionRequestItemModel |\n ThirdPartyRequestItemModel |\n IhProductionRequestItemModel;\n @Input() public requestId: number;\n @Input() public isDisabled: boolean;\n @Input() public requestType: REQUEST_TYPE;\n @Input() public itemIndex: number;\n @Input() public showFiles = true;\n @Output() costQuoteValueChange?: EventEmitter = new EventEmitter();\n public requestTypes = REQUEST_TYPE;\n public uploadArtworkForm: FormGroup;\n public UserRoles = UserRoles;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n private subscriptions: Subscription[] = [];\n public uploadArtworkControl = new FormControl(null);\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private fileUploadService: FileUploadService,\n private eventService: EventService\n ) {\n }\n\n ngOnInit(): void {\n this.buildUploadArtworkForm();\n this.subscriptions.push(\n this.eventService.on('upload-form-update', () => {\n this.uploadArtworkForm.patchValue({\n artworkNotes: this.item.artworkNotes,\n artworkPath: this.item.artworkPath\n });\n this.cd.markForCheck();\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n private buildUploadArtworkForm(): void {\n this.uploadArtworkForm = this.fb.group({\n artworkNotes: this.fb.control(this.item?.artworkNotes),\n artworkPath: this.fb.control(\n (this.item as RequestItemModel | FinancialServiceRequestItemModel)?.artworkPath ||\n (this.item as PopProductionRequestItemModel)?.finalArtFilePath ||\n (this.item as BifProductionRequestItemModel).artworkFilePath),\n });\n\n this.toggleForm();\n }\n\n private toggleForm(): void {\n if (this.isDisabled) {\n this.uploadArtworkForm?.disable();\n } else {\n this.uploadArtworkForm?.enable();\n }\n\n this.cd.markForCheck();\n }\n\n public getPermissions(): string | string[] {\n switch (this.requestType) {\n case REQUEST_TYPE.PPR : {\n return UserRoles.POP_PRODUCTION_REQUEST.UPLOAD_ARTWORK['step-submit'];\n }\n default : {\n return '';\n }\n }\n }\n\n public getFileRestrictions(): RestrictionOptionsObject {\n switch (this.requestType) {\n case REQUEST_TYPE.PPR : {\n return {\n fileType: this.fileTypes.POP_PRODUCTION.ARTWORK,\n fileSize: this.fileSizeRestrictions.POP_PRODUCTION.ARTWORK\n };\n }\n case REQUEST_TYPE.BPR : {\n return {\n fileType: this.fileTypes.BIF_PRODUCTION.ARTWORK,\n fileSize: this.fileSizeRestrictions.BIF_PRODUCTION.ARTWORK\n };\n }\n case REQUEST_TYPE.IPR : {\n return {\n fileType: this.fileTypes.IH_PRODUCTION.ARTWORK,\n fileSize: this.fileSizeRestrictions.IH_PRODUCTION.ARTWORK\n };\n }\n }\n }\n\n public uploadArtworkFunction = (itemId: number, file) => {\n const type = 'artwork';\n return this.fileUploadService.uploadArtworkForRequestItem(file, this.requestId, this.requestType, type, itemId);\n };\n\n public removeArtworkFunction = (itemId: number, attachmentId: string | number) => this.fileUploadService.deleteArtwork(this.requestId, itemId, attachmentId, this.requestType);\n\n public updateAttachments({action, data}: { action: string; data: any }) {\n if (this.isIhProdRequest(this.item)) {\n if (action === 'add') {\n this.item.artworks = [...this.item.artworks, data];\n this.uploadArtworkControl.setErrors({artworkRequired: null});\n } else {\n const index = this.item.artworks.findIndex(item => item?.attachmentId === data);\n this.item.artworks.splice(index, 1);\n }\n }\n }\n\n private isPopProdRequest(item: BaseRequestItemModel): item is PopProductionRequestItemModel {\n return this.requestType === this.requestTypes.PPR;\n }\n\n private isIhProdRequest(item: BaseRequestItemModel): item is IhProductionRequestItemModel {\n return this.requestType === this.requestTypes.IPR;\n }\n\n public populateData(): void {\n const form = this.uploadArtworkForm.getRawValue();\n this.item.artworkNotes = form.artworkNotes;\n\n if (this.isPopProdRequest(this.item)) {\n this.item.finalArtFilePath = form.artworkPath;\n }\n }\n\n public markControlsAsTouched(): void {\n this.uploadArtworkForm.markAllAsTouched();\n this.cd.markForCheck();\n }\n\n public setErrorAndMarkArtworkControlAsTouched(): void {\n this.uploadArtworkControl.setErrors({artworkRequired: true});\n this.uploadArtworkControl.markAsTouched();\n this.cd.markForCheck();\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n}\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {ThirdPartyRequestItemModel} from 'src/app/requests/models/third-party-request.model';\n\n@Component({\n selector: 'app-third-party-item-header',\n templateUrl: './third-party-item-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdPartyItemHeaderComponent {\n @Input() item: ThirdPartyRequestItemModel;\n @Input() itemIndex: number;\n @Input() isError?: boolean;\n @Input() headerClass?: string;\n}\n","
\n {{ 'module.requests.third-party.items.wpn-description' | translate }}: \n {{ item?.wpnDescription }}\n
\n","
\n \n \n {{ 'module.requests.pop-prod.details.item-description' | translate }}:\n \n\n \n {{ 'module.requests.pop-prod.details.wpn-description' | translate }}:\n \n \n {{ getHeader() }}\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { PopProductionRequestItemModel } from 'src/app/requests/models/pop-production-request.model';\n\n@Component({\n selector: 'app-pop-prod-request-item-header',\n templateUrl: './pop-prod-request-item-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdRequestItemHeaderComponent {\n\n @Input() item: PopProductionRequestItemModel;\n\n getHeader() {\n return this.item?.wpnDescription || this.item?.itemDescription;\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { filter, map } from 'rxjs/operators';\nimport { lazyLoadBifComponentTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { selectBifComponentTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { BifProductionRequestItemModel } from 'src/app/requests/models/bif-production-request.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-bif-item-header',\n templateUrl: './bif-item-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifItemHeaderComponent implements OnInit{\n @Input() item: BifProductionRequestItemModel;\n\n componentType$ = this.store.select(selectBifComponentTypes).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.componentTypeCode))\n );\n\n constructor(private utilsService: UtilsService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadBifComponentTypes());\n }\n\n}\n","
\n {{ item?.packageDescription }} - {{ componentType$ | async }}\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FinancialServiceRequestItemModel } from '../../../../../models/financial-service-request.model';\n\n@Component({\n selector: 'app-fsr-item-header',\n templateUrl: './fsr-item-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrItemHeaderComponent {\n @Input() item: FinancialServiceRequestItemModel;\n}\n","
\n {{ 'module.requests.pop-prod.details.wpn-description' | translate }}: \n {{ item?.wpnDescription }}\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {Store} from '@ngrx/store';\nimport {selectDielines} from '../../../../../reducers/ref-data/refdata.selectors';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-request-item-fields-panel',\n templateUrl: './request-item-fields-panel.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestItemFieldsPanelComponent implements OnInit, OnDestroy {\n\n @Input() public item: any;\n\n public dielines: any;\n private ngUnsubscribe = new Subject();\n\n constructor(private cd: ChangeDetectorRef,\n private utilsService: UtilsService,\n private store: Store) {\n }\n\n ngOnInit(): void {\n this.store.select(selectDielines)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((data) => {\n this.dielines = data || [];\n this.cd.markForCheck();\n });\n }\n\n getItemName(array, code) {\n return this.utilsService.getItemName(array, code);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n {{'module.requests.upload.upc-required' | translate}}\n {{item?.formFactor?.upcRequired ? 'Yes' : 'No'}}\n
\n
\n {{'module.requests.finance.product-upc' | translate}}\n {{item?.productUpc}}\n
\n
\n \n \n {{'module.requests.upload.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n \n {{item?.wpn}}\n
\n
\n {{'module.requests.finance.encoding-type' | translate}}\n {{item?.formFactor?.encodingType}}\n
\n
\n {{'module.requests.finance.dieline' | translate}}\n {{getItemName(dielines, item?.formFactor?.dielineType)}}\n
\n
\n","
\n
\n \n
\n {{ 'module.requests.third-party.items.upc-required' | translate }}\n {{ (item.upcRequiredInArt ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ item.productUpc }}\n
\n\n
\n {{ 'module.requests.third-party.items.wpn' | translate }}\n {{ item.wpn }}\n
\n\n \n
\n {{ 'module.requests.third-party.items.production-qty' | translate }}\n {{ item.productionQuantity }}\n
\n\n
\n {{ 'module.requests.third-party.items.delivery-date' | translate }}\n {{ item.deliveryDate | date: 'M/d/yyyy' }}\n
\n\n
\n {{ 'module.requests.third-party.items.order-type' | translate }}\n {{ orderType$ | async }}\n
\n
\n\n \n
\n {{ 'module.requests.third-party.items.encoding-type' | translate }}\n {{ item.encodingType }}\n
\n\n
\n {{ 'module.requests.third-party.items.dieline' | translate }}\n {{ dieline$ | async }}\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { filter, map } from 'rxjs/operators';\nimport { lazyLoadDielines, lazyLoadThirdPartyOrderTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { selectDielines, selectThirdPartyOrderTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { ThirdPartyRequestItemModel } from 'src/app/requests/models/third-party-request.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-third-party-item-subheader',\n templateUrl: './third-party-item-subheader.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdPartyItemSubheaderComponent implements OnInit{\n @Input() item: ThirdPartyRequestItemModel;\n @Input() isFinanceApproval?: boolean;\n\n orderType$ = this.store.select(selectThirdPartyOrderTypes).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.orderTypeCode))\n );\n dieline$ = this.store.select(selectDielines).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.dielineTypeCode))\n );\n\n constructor(private utilsService: UtilsService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadThirdPartyOrderTypes());\n this.store.dispatch(lazyLoadDielines());\n }\n\n}\n","
\n
\n {{ 'module.requests.pop-prod.details.wpn' | translate }}\n {{ wpn }}\n
\n
\n {{ 'module.requests.pop-prod.details.delivery-date' | translate }}\n {{ getFormattedDeliveryDate(deliveryDate) }}\n
\n
\n {{ 'module.requests.pop-prod.details.packing-type' | translate }}\n \n {{ 'module.requests.pop-prod.details.kit-type' | translate }}\n {{ 'module.requests.pop-prod.details.bulk-type' | translate }}\n \n
\n \n
\n {{ 'module.requests.pop-prod.details.kit-shipping' | translate }}\n \n {{ 'module.requests.pop-prod.details.direct-shipping' | translate }}\n {{ 'module.requests.pop-prod.details.bulk-shipping' | translate }}\n \n
\n
\n {{ 'module.requests.pop-prod.details.kit-labeling' | translate }}\n \n {{ (item.kitLabeling ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n
\n
\n {{ 'module.requests.pop-prod.details.item-type' | translate }}\n \n {{ itemType$ | async }}\n \n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport moment from 'moment';\nimport { combineLatest } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { PopProductionRequestItemModel } from '../../../../../models/pop-production-request.model';\nimport { selectPopProdItemTypes } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-pop-prod-request-item-subheader',\n templateUrl: './pop-prod-request-item-subheader.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdRequestItemSubheaderComponent {\n @Input() item: PopProductionRequestItemModel;\n\n itemType$ = combineLatest([\n this.store.pipe(\n select(selectPopProdItemTypes),\n filter(types => types.length > 0),\n map(types => this.utilsService.getItemName(types, this.item.itemTypeCode)),\n ),\n ]);\n\n constructor(\n private store: Store,\n public utilsService: UtilsService,\n ) { }\n\n public getFormattedDeliveryDate(deliveryDate: string): string {\n return moment(deliveryDate).format('l');\n }\n}\n","
\n
\n
\n {{ 'module.requests.bif.items.item-type' | translate }}\n {{ requestItemType$ | async }}\n
\n\n
\n {{ 'module.requests.bif.items.delivery-date' | translate }}\n {{ item.deliveryDate | date: 'M/d/yyyy' }}\n
\n\n
\n {{ 'module.requests.bif.items.fulfillment-type' | translate }}\n {{ fulfillmentType$ | async }}\n
\n\n
\n {{ 'module.requests.bif.items.sku-form-code' | translate }}\n {{ item.skuCode }}\n
\n\n
\n {{ 'module.requests.bif.items.package-id' | translate }}\n {{ item.packageId }}\n
\n\n
\n {{ 'module.requests.bif.items.cost-quote' | translate }}\n {{ item.costQuote | currency }}\n
\n
\n\n
\n\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { filter, map } from 'rxjs/operators';\nimport { lazyLoadBifFulfillmentTypes, lazyLoadRequestItemTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { selectBifFulfillmentTypes, selectRequestItemTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { BifProductionRequestItemModel } from 'src/app/requests/models/bif-production-request.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-bif-item-subheader',\n templateUrl: './bif-item-subheader.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifItemSubheaderComponent implements OnInit {\n @Input() item: BifProductionRequestItemModel;\n @Input() shouldHideCostQuote?: boolean;\n\n fulfillmentType$ = this.store.select(selectBifFulfillmentTypes).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.fulfillmentTypeCode))\n );\n requestItemType$ = this.store.select(selectRequestItemTypes).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.type))\n );\n\n constructor(private utilsService: UtilsService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadBifFulfillmentTypes());\n this.store.dispatch(lazyLoadRequestItemTypes());\n }\n\n}\n","
\n
\n
\n {{ 'module.requests.pop-prod.details.delivery-date' | translate }}\n {{ item.deliveryDate | date: 'M/d/yyyy' }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.item-type' | translate }}\n \n {{ 'module.requests.fs.details.new' | translate }}\n {{ 'module.requests.fs.details.replenishment' | translate }}\n \n
\n\n
\n {{ 'module.requests.pop-prod.details.wpn' | translate }}\n {{ item.wpn }}\n
\n\n
\n {{ 'module.requests.finance.product-upc' | translate }}\n {{ item.productUpc }}\n
\n\n
\n {{ 'module.requests.finance.encoding-type' | translate }}\n {{ item.encodingType }}\n
\n\n
\n {{ 'module.requests.finance.product-classification' | translate }}\n {{ item.productClassification }}\n
\n
\n\n
\n
\n {{ 'module.requests.fs.details.component-type' | translate }}:\n {{ item.componentType }}\n
\n\n
\n {{ 'module.requests.fs.item.product-owner' | translate }}\n {{ getProductOwners(productOwners) }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { WpnProductOwners } from 'src/app/requests/models/wpn-response';\nimport { FinancialServiceRequestItemModel } from '../../../../../models/financial-service-request.model';\n\n@Component({\n selector: 'app-fsr-item-subheader',\n templateUrl: './fsr-item-subheader.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrItemSubheaderComponent {\n @Input() item: FinancialServiceRequestItemModel;\n @Input() productOwners?: WpnProductOwners[];\n\n getProductOwners(productOwners) {\n return this.convertNamesList(productOwners);\n }\n\n convertNamesList(arr) {\n return arr.map(({firstName, lastName}) => `${firstName} ${lastName}`).join(', ');\n }\n\n}\n","
\n
\n
\n {{ 'module.requests.bif.items.replenish' | translate }}\n {{ (item.replenishWithArtChanges ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n\n
\n {{ 'module.requests.bif.items.package-description' | translate }}\n {{ item.packageDescription }}\n
\n\n
\n {{ 'module.requests.bif.items.component-type' | translate }}\n {{ componentType$ | async }}\n
\n\n
\n {{ 'module.requests.bif.items.component-description' | translate }}\n {{ item.componentDescription }}\n
\n
\n\n
\n
\n {{ 'module.requests.bif.items.order-qty' | translate }}\n {{ item.orderQuantity }}\n
\n\n
\n {{ 'module.requests.bif.items.are-overs-included' | translate }}\n {{ (item.oversIncludedInQty ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n\n
\n {{ 'module.requests.bif.items.artwork-location' | translate }}\n {{ item.artworkLocation }}\n
\n
\n\n \n
\n
\n {{ 'module.requests.bif.items.ship-to' | translate}}\n \n {{address}}\n \n - \n \n \n
\n
\n {{ 'module.requests.bif.items.qty' | translate}}\n \n {{qty}}\n \n - \n \n \n
\n
\n
\n\n
\n
\n {{ 'module.requests.bif.items.packing-notes' | translate }}\n {{ item.packingNotes }}\n
\n
\n\n
\n
\n {{ 'module.requests.bif.items.notes' | translate }}\n {{ item.notes }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { filter, map } from 'rxjs/operators';\nimport { lazyLoadBifComponentTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { selectBifComponentTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { BifProductionRequestItemModel } from 'src/app/requests/models/bif-production-request.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-bif-item-info-body',\n templateUrl: './bif-item-info-body.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifItemInfoBodyComponent implements OnInit {\n @Input() item: BifProductionRequestItemModel;\n\n componentType$ = this.store.select(selectBifComponentTypes).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.componentTypeCode))\n );\n\n\n constructor(private utilsService: UtilsService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadBifComponentTypes());\n }\n\n}\n","
\n
{{ 'module.requests.details.child-card-item-details' | translate }}
\n
\n
\n
\n {{ 'module.requests.third-party.items.product-description' | translate }}\n {{ childCard.productDescription }}{{'module.requests.third-party.items.child-label'|translate}}\n
\n
\n\n
\n
\n {{ 'module.requests.third-party.items.no-of-child-cards' | translate }}\n {{ childCard.childNumber }}\n
\n\n
\n {{ 'module.requests.third-party.items.production-quantity' | translate }}\n {{ childCard.productionQuantity }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ childCard.productUpc }}\n
\n\n
\n {{ 'module.requests.third-party.items.dieline' | translate }}\n {{ childCard.dieline }}\n
\n\n
\n {{ 'module.requests.third-party.items.encoding-type' | translate }}\n {{ childCard.encodingType }}\n
\n\n
\n {{ 'module.requests.third-party.items.denom' | translate }}\n {{ childCard.denom }}\n
\n
\n\n \n
\n
\n {{ 'module.requests.third-party.items.substrate' | translate }}\n {{ utilsService.getItemName(substrates, childCard.substrateTypeCode) }}\n
\n
\n\n
\n
\n {{ 'module.requests.third-party.items.child-card-notes' | translate }}\n {{ childCard.notes }}\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { selectSubstrates } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { ThirdPartyRequestItemModel } from 'src/app/requests/models/third-party-request.model';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-third-party-item-child-card',\n templateUrl: './third-party-item-child-card.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdPartyItemChildCardComponent implements OnInit, OnDestroy {\n @Input() item: ThirdPartyRequestItemModel;\n @Input() isFinanceApproval?: boolean;\n private ngUnsubscribe = new Subject();\n public substrates: CodeNameModel[] = [];\n\n refData$ = this.store.pipe(select(selectSubstrates), filter(v => v?.length > 0)).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n private store: Store) { }\n\n ngOnInit(): void {\n this.refData$.subscribe((substrates) => {\n this.substrates = substrates;\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","
\n
\n {{ 'module.requests.bif.details.cost-total' | translate }}:\n {{ totalCost | currency }}\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-bif-request-total-cost',\n templateUrl: './bif-request-total-cost.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifRequestTotalCostComponent {\n @Input() totalCost: number;\n @Input() isCostTotalWarning: boolean;\n}\n","\n
\n
\n
\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n
\n
\n \n
\n \n
\n {{'module.requests.upload.wpn-description' | translate}}:\n {{item.wpnDescription}}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n \n \n
\n
\n \n
\n\n
\n {{ 'module.requests.bif.items.cost-quote' | translate }}\n {{\n itemsForm.controls[index].get('costQuote').value || 0 | currency : 'USD' }}\n
\n
\n
\n \n \n \n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n QueryList,\n SimpleChanges,\n ViewChildren,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Action, ActionsSubject, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n selectBifProductionRequestDetails,\n selectFinancialServiceRequestDetails,\n selectPopProductionRequestDetails,\n selectThirdPartyRequestDetails,\n} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { FILE_TYPES } from '../../../../shared/constants/upload-restrictions.constants';\nimport { UserRoles } from '../../../../shared/constants/user-roles.constant';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../shared/models/upload-file-restrictions.model';\nimport { BifEvents, Events, EventService, FsrEvents } from '../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../shared/services/request-stages.enum';\nimport { MAX_BIF_COST_TOTAL } from '../../../constants/request-details.constants';\nimport { REQUEST_TYPE } from '../../../constants/request-types.constant';\nimport { BifPoItemModel } from '../../../models/bif-po.model';\nimport { BifProductionRequestModel } from '../../../models/bif-production-request.model';\nimport { FinancialServiceRequestModel } from '../../../models/financial-service-request.model';\nimport { PopArtworkFilesAwareModel, PopProductionRequestModel } from '../../../models/pop-production-request.model';\nimport { ProductionRequestModel } from '../../../models/production-request.model';\nimport { BaseRequestModel } from '../../../models/request.model';\nimport { ThirdPartyRequestModel } from '../../../models/third-party-request.model';\nimport { requestDetailsActions } from '../../../reducers/request-details/request-details.actions';\nimport { selectProductionRequestDetails } from '../../../reducers/request-details/request-details.selectors';\nimport { FileUploadService } from '../../../services/file-upload.service';\nimport { StepActionsService } from '../../../services/step-actions.service';\nimport { AbstractRequestStepComponent } from '../../request-step-details/abstract-request-step.class';\nimport { UploadArtworkItemSharedComponent } from './upload-artwork-item-shared/upload-artwork-item-shared.component';\n\n@Component({\n selector: 'app-upload-artwork-shared',\n templateUrl: './upload-artwork-shared.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadArtworkSharedComponent extends AbstractRequestStepComponent implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n @Input() public requestType: REQUEST_TYPE;\n public requestTypes = REQUEST_TYPE;\n public requestItems = [];\n public UserRoles = UserRoles;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public requestDetails: any;\n public uploadForm: FormGroup;\n public itemsForm?: FormArray;\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n private maxBifCostTotal = MAX_BIF_COST_TOTAL;\n private eventSubscriptions: Array = [];\n private PRICE_MAX = 10000000;\n private PRICE_MIN = 0.01;\n public uploadRequestDetailsModel = new PopArtworkFilesAwareModel();\n\n @ViewChildren(UploadArtworkItemSharedComponent) itemComponents: QueryList;\n\n constructor(private eventService: EventService,\n private cd: ChangeDetectorRef,\n private messageService: MessageService,\n public store: Store,\n private fb: FormBuilder,\n private actions: ActionsSubject,\n private stepActionsService: StepActionsService,\n private translateService: TranslateService,\n private fileUploadService: FileUploadService) {\n super();\n }\n\n ngOnInit(): void {\n if (this.requestType === REQUEST_TYPE.CPR ||\n this.requestType === REQUEST_TYPE.TPPR ||\n this.requestType === REQUEST_TYPE.FSR ||\n this.requestType === REQUEST_TYPE.PPR ||\n this.requestType === REQUEST_TYPE.BPR) {\n this.buildUploadForm();\n }\n\n this.initSubscriptions();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n ngAfterViewInit(): void {\n this.calculateCostTotal();\n }\n\n private toggleForm(): void {\n if (this.isDisabled) {\n this.uploadForm?.disable();\n this.itemsForm?.disable();\n } else {\n this.uploadForm?.enable();\n this.itemsForm?.enable();\n }\n\n this.cd.markForCheck();\n }\n\n private buildUploadForm(): void {\n this.uploadForm = this.fb.group({\n finalArtFilePath: this.fb.control(this.requestDetails?.details.finalArtFilePath || ''),\n artworkNotes: this.fb.control(this.requestDetails?.details.artworkNotes || '')\n });\n\n this.toggleForm();\n }\n\n private initSubscriptions(): void {\n this.eventSubscriptions.forEach(s => s.unsubscribe());\n this.eventSubscriptions = [];\n\n switch (this.requestType) {\n case this.requestTypes.PPR: {\n this.subscribeToEvent(Events.UploadArtworkSubmit);\n this.store.select(selectPopProductionRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n }\n });\n break;\n }\n case this.requestTypes.FSR: {\n this.subscribeToEvent(FsrEvents.UploadSubmit);\n this.store.select(selectFinancialServiceRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n }\n });\n break;\n }\n case this.requestTypes.TPPR: {\n this.subscribeToEvent(Events.UploadArtworkSubmit);\n this.store.select(selectThirdPartyRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n }\n });\n break;\n }\n case this.requestTypes.CPR: {\n this.subscribeToEvent(Events.UploadArtworkSubmit);\n this.store.select(selectProductionRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n }\n });\n break;\n }\n case this.requestTypes.BPR: {\n this.subscribeToEvent(BifEvents.UploadArtworkSubmit);\n this.subscribeToBifValidation();\n this.store.select(selectBifProductionRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n this.calculateCostTotal();\n }\n });\n break;\n }\n }\n }\n\n private subscribeToEvent(event: FsrEvents | Events | BifEvents) {\n this.eventSubscriptions.push(\n this.eventService.on(event, (action) => {\n this.uploadStepSubmit(action.comment);\n })\n );\n }\n\n private subscribeToBifValidation() {\n this.subscriptions.push(\n this.eventService.on(BifEvents.UploadArtworkValidation, (elementRef) => {\n if (!this.itemsForm.valid) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'),\n );\n\n this.itemsForm.markAllAsTouched();\n } else {\n if (this.isCostTotalMaxError) {\n this.messageService.showSystemMessage('warning',\n this.translateService.instant('module.requests.bif.po.max-rebill-header'),\n this.translateService.instant('module.requests.bif.po.max-rebill-desc4'));\n return;\n }\n this.stepActionsService.addReason(\n elementRef, 'step-submit', 'step-submit', BifEvents.UploadArtworkSubmit, 'right');\n }\n\n this.cd.markForCheck();\n })\n );\n }\n private unitCostSubscriptions: Subscription[] = [];\n\n private initData(requestData: T): void {\n this.requestItems = cloneDeep(requestData.items);\n this.requestDetails = cloneDeep(requestData);\n this.uploadForm?.patchValue({\n finalArtFilePath: this.requestDetails?.details.finalArtFilePath,\n artworkNotes: this.requestDetails?.details.artworkNotes,\n });\n\n if (this.requestType === this.requestTypes.BPR) {\n this.unitCostSubscriptions.forEach(s => s.unsubscribe());\n this.unitCostSubscriptions = [];\n this.itemsForm = this.fb.array(this.requestDetails?.items.map((item: BifPoItemModel) => {\n const itemGroup = this.fb.group({\n unitCost: this.fb.control(item?.unitCost,\n [Validators.required,\n UtilsService.maxCalculationValidator((v) => (v || 0) * item.orderQuantity,\n this.PRICE_MAX, this.translateService.instant('module.requests.bif.items.cost-quote'))\n ]),\n costQuote: this.fb.control({\n value: item.costQuote != null ? item.costQuote : null,\n disabled: false\n }, [Validators.required,\n // Validators.min(this.PRICE_MIN),\n ])\n });\n this.unitCostSubscriptions.push( itemGroup.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe)).subscribe(({unitCost, costQuote}) => {\n if(costQuote && !unitCost) {\n itemGroup.get('unitCost').setValue(costQuote/item.orderQuantity, {\n emitEvent: false,\n });\n }\n if(unitCost) {\n itemGroup.get('costQuote').setValue(unitCost*item.orderQuantity, {\n emitEvent: false,\n });\n }\n })\n );\n return itemGroup;\n })\n );\n\n this.toggleForm();\n\n this.itemsForm.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.calculateCostTotal();\n });\n }\n\n this.eventService.emit({eventName: 'upload-form-update'});\n this.cd.markForCheck();\n }\n\n public uploadStepSubmit(comment?: string): void {\n if (this.requestType !== this.requestTypes.TPPR &&\n this.requestType !== this.requestTypes.CPR &&\n this.requestType !== this.requestTypes.FSR &&\n this.requestType !== this.requestTypes.BPR) {\n this.itemComponents.forEach(item => item.populateData());\n }\n this.requestDetails.items = this.requestItems;\n\n\n if (this.requestType === this.requestTypes.BPR) {\n this.requestDetails.items.forEach((item, index) => {\n item.costQuote = this.itemsForm.controls[index].get('costQuote').value;\n item.unitCost = this.itemsForm.controls[index].get('unitCost').value;\n });\n }\n\n const requestData = {\n ...this.requestDetails,\n details: {\n ...this.requestDetails.details,\n ...this.uploadForm?.getRawValue()\n }\n };\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({\n requestId: this.requestId,\n details: requestData\n }));\n this.actions.pipe(takeUntil(this.ngUnsubscribe)).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.messageService.showSystemMessage('success', 'Step data was successfully saved', '');\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n });\n }\n\n public uploadFileForRequest = (file) => {\n const type = 'artwork';\n return this.fileUploadService.uploadArtworkForRequestItem(file, this.requestId, this.requestType, type);\n };\n\n public removeFileFromRequest = (attachmentId: string | number) => this.fileUploadService.deleteArtwork(this.requestId, '', attachmentId, this.requestType);\n\n private isBifRequest(): boolean {\n return this.requestType === this.requestTypes.BPR;\n }\n\n public getCostTotal(): number {\n return this.isBifRequest()\n ? Number(this.requestDetails?.details.costTotal || 0)\n : 0;\n }\n\n public calculateCostTotal(): void {\n if (this.isBifRequest() && this.requestDetails) {\n this.requestDetails.details.costTotal = this.itemsForm.controls.reduce((sum, item) => sum.plus(Number(item.get('costQuote').value)), new BigJs(0)).toFixed();\n }\n }\n\n public get isCostTotalMaxError(): boolean {\n return new BigJs(this.getCostTotal()).gt(this.maxBifCostTotal);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n this.eventSubscriptions.forEach(sub => sub?.unsubscribe());\n }\n}\n","\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n \n
\n
\n

\n {{item[objReviewName]?.status}}\n \n {{item[objReviewName]?.reviewer.firstName}} {{item[objReviewName]?.reviewer.lastName}}\n {{(item[objReviewName]?.reviewedAt) | date : 'MM/dd/yyyy, hh:mm a'}}\n \n

\n

\n {{'module.requests.upload.rejection-reason' | translate | uppercase}}:\n {{item[objReviewName]?.rejectionReason}}\n

\n
\n
\n
\n
\n {{'module.requests.upload.final-art-file-path' | translate}}:\n {{getPath()}}\n
\n
\n {{'common.label.note' | translate}}:\n {{isPrinterProofs ? item.printerProofNotes : item.artworkNotes}}\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnInit,\n} from '@angular/core';\nimport {ARTWORK_STATUSES} from '../../../requests/constants/artwork-file-statuses.constants';\nimport {finalize, take} from 'rxjs/operators';\nimport {Events, EventService} from '../../services/event-service.service';\nimport {RequestsService} from '../../../requests/services/requests.service';\nimport {MessageService} from '../../services/message-service.service';\nimport {ActionsReasonService} from '../../../requests/services/actions-reason.service';\nimport {UserRoles} from '../../constants/user-roles.constant';\nimport {ArtworkFile} from '../../../requests/models/card-design-request.model';\nimport {REQUEST_TYPE} from '../../../requests/constants/request-types.constant';\nimport {StepActionsService} from '../../../requests/services/step-actions.service';\n\n@Component({\n selector: 'app-files-approve',\n templateUrl: './files-approve.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilesApproveComponent implements OnInit {\n @Input() public isDisabled: boolean;\n @Input() public files?: ArtworkFile[];\n @Input() public requestId: number | string;\n @Input() public item: any;\n @Input() public requestType: string;\n @Input() public isPrinterProofs?: boolean;\n @Input() public isReqItemApprovals?: boolean;\n\n public ARTWORK_STATUSES = ARTWORK_STATUSES;\n public userRoles = UserRoles;\n public REQUEST_TYPES = REQUEST_TYPE;\n public objReviewName = '';\n\n constructor(private requestsService: RequestsService,\n private eventService: EventService,\n private cd: ChangeDetectorRef,\n private messageService: MessageService,\n private actionsReasonService: ActionsReasonService,\n private stepActionsService: StepActionsService,\n ) {}\n\n ngOnInit() {\n this.objReviewName = this.isPrinterProofs ? 'printerProofReview' : 'artReview';\n }\n\n public updateFileStatus(status: string, reqItem, file): void {\n switch (status) {\n case ARTWORK_STATUSES.approved:\n this.updateAttachmentStatus(reqItem.id, file, status);\n break;\n case ARTWORK_STATUSES.rejected:\n this.openRejectionModal(reqItem.id, file);\n break;\n case ARTWORK_STATUSES.unreviewed:\n this.updateAttachmentStatus(reqItem.id, file, status);\n break;\n default:\n this.messageService.showSystemMessage('error', `Something went wrong with ${status} action`);\n }\n }\n\n public updateItemStatus(status: string, reqItem): void {\n switch (status) {\n case ARTWORK_STATUSES.approved:\n case ARTWORK_STATUSES.unreviewed:\n this.updateReqItemStatus(reqItem.id, status);\n break;\n case ARTWORK_STATUSES.rejected:\n this.openRejectionModal(reqItem.id, status);\n break;\n default:\n this.messageService.showSystemMessage('error', `Something went wrong with ${status} action`);\n }\n }\n\n private updateReqItemStatus(itemId, status, rejectionReason?: string): void {\n this.requestsService.updateItemStatus(this.requestType, this.requestId, itemId, status, rejectionReason, this.isPrinterProofs)\n .pipe(\n finalize(() => this.eventService.emit({eventName: Events.UpdateActionHistory}))\n )\n .subscribe(response => {\n this.item[this.objReviewName] = response;\n this.cd.detectChanges();\n });\n }\n\n private updateAttachmentStatus(reqItemId, file, status: string, comment?: string) {\n this.requestsService\n .updateAttachmentStatus(this.requestType,\n this.requestId,\n reqItemId,\n (file.attachmentId || file.id),\n status, comment, this.isPrinterProofs)\n .pipe(\n finalize(() => this.eventService.emit({eventName: Events.UpdateActionHistory}))\n )\n .subscribe(fileResponse => {\n fileResponse.id = file.id;\n this.updateFileWithResponse(fileResponse);\n });\n }\n\n private updateFileWithResponse(data) {\n this.files.forEach((file) => {\n if ((file.attachmentId && file.attachmentId === data.attachmentId) ||\n (file.id && file.id === data.id)) {\n file.status = data.status;\n file.updatedAt = data.updatedAt;\n file.reviewedAt = data.reviewedAt;\n file.rejectionReason = data.rejectionReason;\n file.reviewer = data.reviewer;\n }\n\n return file;\n });\n\n this.cd.markForCheck();\n }\n\n private openRejectionModal(reqItemId, file): void {\n const {ref, overlayRef} = this.stepActionsService.createReasonAndOverlay('reject', true, 'reject');\n ref.instance.fileName = file.fileName;\n\n this.actionsReasonService.getReason()\n .pipe(take(1))\n .subscribe(data => {\n if (data.comment) {\n this.isReqItemApprovals ?\n this.updateReqItemStatus(reqItemId, ARTWORK_STATUSES.rejected, data.comment) :\n this.updateAttachmentStatus(reqItemId, file, ARTWORK_STATUSES.rejected, data.comment);\n }\n\n overlayRef.detach();\n this.cd.markForCheck();\n });\n }\n\n public getPath(): string {\n if (this.requestType === this.REQUEST_TYPES.IPR) {\n return this.item.finalArtFilePath;\n }\n\n return '';\n }\n}\n","
\n
\n
\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n
\n\n \n \n \n
\n \n
\n
\n {{'module.requests.upload.wpn-description' | translate}}:\n {{item.wpnDescription}}\n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n \n\n
\n
\n {{'module.requests.upload.artwork-files' | translate}}\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n {{'module.requests.upload.final-art-file-path' | translate}}:\n {{requestDetails?.details.finalArtFilePath}}\n
\n
\n {{'common.label.note' | translate}}:\n {{requestDetails?.details.artworkNotes}}\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit, ViewEncapsulation\n} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {ARTWORK_STATUSES} from '../../../../constants/artwork-file-statuses.constants';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport includes from 'lodash/includes';\nimport map from 'lodash/map';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {selectRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {Store} from '@ngrx/store';\nimport {takeUntil} from 'rxjs/operators';\nimport { goToStage } from '../../../../reducers/request-steps/request-steps.actions';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {ProductionRequestModel, RequestItemModel} from '../../../../models/production-request.model';\n\n@Component({\n selector: 'app-approve-request',\n templateUrl: './approve-request.component.html',\n styleUrls: ['./approve-request.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ApproveRequestComponent implements OnInit, OnDestroy {\n @Input() public isDisabled: boolean;\n public requestItems: RequestItemModel[] = [];\n public requestDetails: ProductionRequestModel;\n public requestId: string | number;\n public userRoles = UserRoles;\n public requestType: string;\n public ARTWORK_STATUSES = ARTWORK_STATUSES;\n\n private eventSubscription: Subscription;\n private ngUnsubscribe = new Subject();\n\n constructor(private cd: ChangeDetectorRef,\n private messageService: MessageService,\n private eventService: EventService,\n private translate: TranslatePipe,\n private stepActionsService: StepActionsService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.setRequestDetailsSubscription();\n this.setStepSubmitSubscription();\n }\n\n private setRequestDetailsSubscription(): void {\n this.store.select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((requestDetails: ProductionRequestModel) => {\n if (requestDetails?.items?.length) {\n this.requestItems = cloneDeep(requestDetails.items);\n this.requestDetails = requestDetails;\n this.requestType = requestDetails.type;\n this.requestId = requestDetails.id;\n this.cd.markForCheck();\n }\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.eventSubscription?.unsubscribe();\n }\n\n public getFilesStatus(files): string {\n return UtilsService.getFilesAggregatedStatus(files);\n }\n\n toProductionDetails() {\n this.store.dispatch(goToStage({stageCode: 'REQUEST_DETAILS'}));\n }\n\n private isAllItemsApproved(): boolean {\n const statuses = map(this.requestItems, (item) => item.artReview?.status);\n const hasUnreviewed = includes(statuses, ARTWORK_STATUSES.unreviewed);\n const hasRejected = includes(statuses, ARTWORK_STATUSES.rejected);\n\n return !(hasUnreviewed || hasRejected);\n }\n\n private setStepSubmitSubscription(): void {\n this.eventSubscription = this.eventService.on(Events.ApproveSubmitValidated, (elementRef) => {\n if (this.isAllItemsApproved()) {\n this.stepActionsService.addReason(elementRef,\n 'step-approve', 'step-approve', Events.StepApprove, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.transform('module.requests.approve.item-approve-required'),\n this.translate.transform('module.requests.approve.approve-items-stage-error'));\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Store } from '@ngrx/store';\nimport { switchMap, tap} from 'rxjs/operators';\nimport { RequestsService } from './requests.service';\nimport { MessageService } from '../../shared/services/message-service.service';\nimport { ProductionPoModel, BaseSowModel } from '../models/production-po.model';\nimport { ModalService } from '../../shared/services/modal-service.service';\nimport { requestDetailsActions } from '../reducers/request-details/request-details.actions';\nimport {EMPTY, Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PoSowManageService {\n\n constructor(protected requestsService: RequestsService,\n protected messageService: MessageService,\n protected modalService: ModalService,\n protected translate: TranslatePipe,\n protected store: Store) { }\n\n public deletePoItem(requestId: string | number,\n poItem: T): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.transform('module.requests.po.modal.delete-po-header', {number: poItem.id}),\n this.translate.transform(\n poItem.sowCreated ? 'module.requests.po.modal.delete-po-desc' : 'module.requests.po.modal.delete-po-desc2'\n ),\n this.translate.transform('common.button.delete'),\n this.translate.transform('common.button.cancel'),\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.requestsService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.transform('module.requests.po.po-deleted', {id: poItem.id}));\n })\n );\n }\n\n public deleteSOWItem(\n requestId: string | number, poItem: T,\n dialogRef?: MatDialogRef,\n shouldShowSuccessMessage: boolean = true,\n ): void {\n if (shouldShowSuccessMessage) {\n this.modalService.openConfirmationModal(\n this.translate.transform('module.requests.sow.modal.delete-sow-header', {number: poItem.id}),\n this.translate.transform('module.requests.sow.modal.delete-sow-desc'),\n this.translate.transform('common.button.delete'),\n this.translate.transform('common.button.cancel'),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.confirmDeleteSOW(requestId, poItem, dialogRef, shouldShowSuccessMessage);\n }\n });\n } else {\n this.confirmDeleteSOW(requestId, poItem, dialogRef, shouldShowSuccessMessage);\n }\n }\n\n protected confirmDeleteSOW(\n requestId: string | number, poItem: T,\n dialogRef?: MatDialogRef,\n shouldShowSuccessMessage: boolean = true): void {\n const item = {...poItem, sowCreated: false};\n this.requestsService.updatePO(requestId, item.id, item)\n .subscribe(() => {\n if (dialogRef) {\n dialogRef.close();\n }\n\n if (shouldShowSuccessMessage) {\n this.messageService.showSystemMessage('success', null,\n this.translate.transform('common.message.sow-deleted'));\n }\n });\n }\n\n public onClosePO(dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number): void {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.transform('common.modal.close-header'),\n this.translate.transform('common.modal.close-desc', {type: 'PO'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSuccess(dialogRef, requestId);\n }\n });\n } else {\n this.onCloseSuccess(dialogRef, requestId);\n }\n }\n\n protected onCloseSuccess(dialogRef: MatDialogRef, requestId: string | number): void {\n dialogRef.close();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: requestId as string}));\n this.requestsService.callPO(requestId);\n }\n\n public onCloseSOW(\n dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number,\n filesChanged: boolean,\n poItem: T): void {\n if (showModal || (filesChanged && !poItem.sowCreated)) {\n this.modalService.openConfirmationModal(\n this.translate.transform('common.modal.close-header'),\n this.translate.transform('common.modal.close-desc', {type: 'SOW'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSOWSuccess(poItem, dialogRef, filesChanged, requestId);\n }\n });\n } else {\n this.onCloseSOWSuccess(poItem, dialogRef, filesChanged, requestId);\n }\n }\n\n protected onCloseSOWSuccess(\n poItem: T, dialogRef: MatDialogRef, filesChanged: boolean, requestId: string | number): void {\n if (poItem.sowCreated) {\n dialogRef.close();\n if (filesChanged) {\n this.requestsService.callPO(requestId);\n }\n } else {\n this.deleteSOWItem(requestId, poItem, dialogRef, false);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ItemShipments } from '../models/request-item.model';\nimport { Warehouse } from '../models/warehouse.model';\n\n@Injectable()\nexport class PoShipToDataService {\n\n private shipmentInfo = [];\n private testCardsShipmentInfo = [];\n private isShipmentValid = [];\n\n public getShipmentData(): any {\n return this.shipmentInfo;\n }\n\n public getTestCardsShipmentData(): any[] {\n return this.testCardsShipmentInfo;\n }\n\n public setShipmentData(poItemIndex: number, shipmentIndex: number, warehouseData: Warehouse): void {\n this.shipmentInfo.push({\n poItemIndex,\n shipmentIndex,\n warehouseData\n });\n }\n\n public setTestCardsShipmentData(requestItemIndex: number, testCardShipmentData: ItemShipments): void {\n this.testCardsShipmentInfo.push({\n requestItemIndex,\n testCardShipmentData,\n });\n }\n\n public removeShipment(poItemIndex: number, shipmentIndex: number): void {\n const index = this.shipmentInfo.findIndex(element => element.poItemIndex === poItemIndex &&\n element.shipmentInfo === shipmentIndex);\n const indexValidity = this.isShipmentValid.findIndex(element => element.poItemIndex === poItemIndex &&\n element.shipmentInfo === shipmentIndex);\n\n this.shipmentInfo.splice(index, 1);\n this.isShipmentValid.splice(indexValidity, 1);\n }\n\n public resetTestCardsShipmentData(): void {\n this.testCardsShipmentInfo = [];\n }\n\n public setFormValidity(poItemIndex: number, shipmentIndex: number, flag: boolean): void {\n const existingElement = this.isShipmentValid.find(el => el.poItemIndex === poItemIndex && el.shipmentIndex === shipmentIndex);\n\n if (existingElement) {\n existingElement.valid = flag;\n } else {\n this.isShipmentValid.push({\n poItemIndex,\n shipmentIndex,\n valid: flag\n });\n }\n\n }\n\n public getFormValidity(): any {\n return this.isShipmentValid;\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'app-shipments-address',\n templateUrl: './shipments-address.component.html',\n styleUrls: [\n './shipments-address.component.scss'\n ]\n})\nexport class ShipmentsAddressComponent {\n @Input() public warehouse: FormGroup;\n @Input() public warehouseIndex ? = 0;\n\n}\n","
\n
\n \n
\n\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","\n
\n {{'module.requests.finance.wpn-description' | translate}}:\n {{item.wpnDescription}}\n
\n\n
\n
\n
\n
\n {{ 'module.requests.text.delivery-date' | translate }}:\n {{ item?.deliveryDate | date : 'MM/dd/yyyy' }}\n
\n\n
\n {{ 'module.requests.po.merchant' | translate }}:\n \n {{ merchant.name }}\n , \n \n
\n\n
\n {{ 'module.requests.finance.denom' | translate }}:\n {{ item.denom }}\n
\n\n
\n {{ 'module.requests.finance.encoding-type' | translate }}:\n {{ item.formFactor.encodingType }}\n
\n\n
\n {{ 'module.requests.finance.product-upc' | translate }}:\n {{ item.productUpc }}\n
\n
\n\n
\n
\n \n {{ 'module.requests.finance.wpn' | translate }}:\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ item.wpn }}\n
\n\n
\n {{ 'module.requests.sow.test-cards' | translate }}:\n {{ item.productionQuantity.testCardQuantity }}\n
\n\n
\n {{ 'module.requests.po.total-qty' | translate }}:\n {{ getTotalQty(item) }}\n
\n\n
\n
\n {{ 'module.requests.sow.pid-id' | translate }}:\n {{ pidId }}\n
\n
\n\n
\n
\n {{ 'module.requests.sow.encoding-identifier' | translate }}:\n {{ encodingId }}\n
\n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.finance.bundle-size' | translate }}:\n {{ item.productionQuantity.bundleSize }}\n
\n\n
\n {{ 'module.requests.finance.case-size' | translate }}\n {{ item.productionQuantity.caseSize }}\n
\n\n
\n {{ 'module.requests.finance.dieline' | translate }}:\n {{ utilsService.getItemName(dielines, item.formFactor.dielineType) }}\n
\n\n
\n {{ 'module.requests.finance.substrate' | translate }}:\n {{ utilsService.getItemName(substrates, item.formFactor.substrateType) }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.redemption' | translate }}:\n {{ utilsService.getItemName(redemptions, item.formFactor.redemptionType) }}\n
\n\n
\n
\n {{ 'module.requests.finance.product-id' | translate }}:\n {{productId}}\n
\n\n
\n\n
\n
\n {{ 'module.requests.finance.sku' | translate }}:\n {{skuNumber}}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.item-number' | translate }}:\n {{ itemNumber }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.vendor-stock' | translate }}:\n {{ vendorStockNumber }}\n
\n
\n
\n
\n\n
\n
\n {{ 'module.requests.po.unit-price' | translate }}:\n ${{ item.productionQuantity.unitPrice || 0 | number : '1.4-4' }}\n
\n\n
\n {{ 'module.requests.po.item-subtotal' | translate }}:\n ${{ item.productionQuantity.totalPrice | number : '1.2-2' }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.finance.ship-to' | translate }}:\n {{ shipmentItem.warehouse.name }}\n
\n\n
\n {{ 'module.requests.po.qty' | translate }}:\n {{ shipmentItem.quantity }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.po.address1' | translate }}:\n {{ shipmentItem.warehouse.address.addressLine1 }}\n
\n\n
\n {{ 'module.requests.po.address2' | translate }}:\n {{ shipmentItem.warehouse.address.addressLine2 }}\n
\n\n
\n {{ 'module.requests.po.city' | translate }}:\n {{ shipmentItem.warehouse.address.city }}\n
\n
\n
\n
\n {{ 'module.requests.po.state' | translate }}:\n {{ shipmentItem.warehouse.address.stateProvince }}\n
\n\n
\n {{ 'module.requests.po.zip' | translate }}:\n {{ shipmentItem.warehouse.address.postalCode }}\n
\n\n
\n {{ 'module.requests.po.country' | translate }}:\n {{ shipmentItem.warehouse.address.country }}\n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.po.attention' | translate }}:\n {{ shipmentItem.warehouse.contact.attention }}\n
\n\n
\n {{ 'module.requests.po.email' | translate }}:\n {{ shipmentItem.warehouse.contact.email }}\n
\n\n
\n {{ 'module.requests.po.phone' | translate }}:\n {{ shipmentItem.warehouse.contact.phone }}\n
\n
\n
\n
\n {{ 'module.requests.po.cell' | translate }}:\n {{ shipmentItem.warehouse.contact.cell }}\n
\n
\n
\n
\n\n
\n\n
\n
\n 0 ? idx + 1 : ''}}\"\n [itemsList]=\"shipmentsOptions | toSelectDropdownOptions: 'value': getWarehouseLabel: true\"\n >\n
\n
\n \n \n
\n
1\">\n \n
\n
\n
\n \n \n
\n\n
\n\n \n\n
\n
\n \n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input, OnDestroy,\n OnInit\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { ProductionPoModel } from '../../../../../models/production-po.model';\nimport { RequestModel } from '../../../../../models/request.model';\nimport { RequestItemModel } from '../../../../../models/production-request.model';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {Warehouse} from '../../../../../models/warehouse.model';\nimport {Events, EventService} from '../../../../../../shared/services/event-service.service';\nimport {PoShipToDataService} from '../../../../../services/po-ship-to-data.service';\nimport {Subject, Subscription} from 'rxjs';\nimport {select, Store} from '@ngrx/store';\nimport {lazyLoadWarehouses} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {selectWarehouses} from '../../../../../../reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-sow-form-info',\n templateUrl: './sow-form-info-component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SowFormInfoComponent implements OnInit, OnDestroy {\n @Input() public request: RequestModel;\n @Input() public po: ProductionPoModel;\n @Input() public item: RequestItemModel;\n @Input() public dielines: { code: string; name: string }[];\n @Input() public substrates: { code: string; name: string }[];\n @Input() public redemptions: { code: string; name: string }[];\n @Input() public itemIndex: number;\n @Input() public itemForm: FormGroup;\n @Input() isDisabled: boolean;\n\n public shipForm: FormGroup;\n public availableTestCardsQuantity: number;\n public shipmentsOptions: any[] = [];\n\n private res: number[] = [];\n private eventSubscription: Subscription;\n private ngUnsubscribe = new Subject();\n private warehouses$ = this.store.pipe(\n select(selectWarehouses),\n filter((v) => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(public utilsService: UtilsService,\n private fb: FormBuilder,\n private poShipToDataService: PoShipToDataService,\n private eventService: EventService,\n private store: Store,\n private cd: ChangeDetectorRef) {\n }\n\n public ngOnInit(): void {\n this.store.dispatch(lazyLoadWarehouses());\n this.buildShipForm();\n this.getShipToOptions();\n this.setShipToListeners();\n this.setAvailableQty();\n\n if (this.isDisabled) {\n this.shipForm.disable();\n this.itemForm.disable();\n }\n\n this.shipForm.get('testCardShipments').valueChanges.subscribe(() => {\n this.setAvailableQty();\n this.cd.markForCheck();\n });\n\n this.cd.markForCheck();\n\n this.eventSubscription = this.eventService.on(Events.SowSubmit, () => {\n this.poShipToDataService.setTestCardsShipmentData(\n this.itemIndex,\n this.shipForm.getRawValue().testCardShipments\n );\n });\n }\n\n private setAvailableQty(): void {\n this.availableTestCardsQuantity =\n this.item.productionQuantity.testCardQuantity - (this.shipForm.get('testCardShipments') as FormArray).controls\n .map(v => Number(v.value.quantity))\n .reduce((prev, curr) => prev + curr, 0);\n }\n\n public onAddShipment(): void {\n (this.shipForm?.get('testCardShipments') as FormArray).push(this.fb.group({\n quantity: this.fb.control(null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null),\n }),\n name: this.fb.control(null),\n mdmId: this.fb.control(null)\n })\n }));\n this.setShipToListeners();\n }\n\n public onQtyChange(shipmentQty: { qty: number; shipmentIndex: number }): void {\n this.res[shipmentQty.shipmentIndex] = shipmentQty.qty;\n this.availableTestCardsQuantity = this.item.productionQuantity.testCardQuantity - this.res.reduce((prev, curr) => prev + curr);\n }\n\n public getTotalQty(item: RequestItemModel): number {\n return item.productionQuantity.quantityEaches ?\n item.productionQuantity.quantityEaches :\n item.productionQuantity.testCardQuantity + item.productionQuantity.productionQuantity;\n }\n\n private buildShipForm(): void {\n this.shipForm = this.fb.group({\n testCardShipments: this.fb.array([]),\n });\n\n this.item.productionQuantity.testCardShipments.forEach(item => {\n (this.shipForm.get('testCardShipments') as FormArray).push(\n this.fb.group({\n quantity: this.fb.control(item?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(item?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(item?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(item?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(item?.warehouse?.address?.city || null),\n country: this.fb.control(item?.warehouse?.address?.country || null),\n postalCode: this.fb.control(item?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(item?.warehouse?.address?.stateProvince || null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(item?.warehouse?.contact?.attention || null),\n cell: this.fb.control(item?.warehouse?.contact?.cell || null),\n email: this.fb.control(item?.warehouse?.contact?.email || null),\n phone: this.fb.control(item?.warehouse?.contact?.phone || null),\n }),\n name: this.fb.control(item?.warehouse || null),\n mdmId: this.fb.control(item?.warehouse?.mdmId || null)\n })\n })\n );\n });\n }\n\n public deleteCurrentShipment(index: number): void {\n (this.shipForm?.get('testCardShipments') as FormArray).removeAt(index);\n }\n\n private getShipToOptions(): void {\n this.warehouses$.subscribe(data => {\n if (data?.length) {\n this.shipmentsOptions = [];\n data.forEach((shipment: Warehouse) => {\n this.shipmentsOptions.push({value: shipment, name: shipment.name});\n });\n this.cd.markForCheck();\n }\n });\n }\n\n private setShipToListeners(): void {\n const shipmentsControlsArray = (this.shipForm?.get('testCardShipments') as FormArray).controls as any[];\n shipmentsControlsArray.forEach((shipment) => {\n shipment.get('warehouse').get('name').valueChanges\n .subscribe(newValue => {\n shipment.get('warehouse').patchValue({\n mdmId: newValue?.mdmId,\n address: {\n addressLine1: newValue?.address?.addressLine1 || null,\n addressLine2: newValue?.address?.addressLine2 || null,\n addressLine3: newValue?.address?.addressLine3 || null,\n city: newValue?.address?.city || null,\n country: newValue?.address?.country || null,\n postalCode: newValue?.address?.postalCode || null,\n stateProvince: newValue?.address?.stateProvince || null\n },\n contact: {\n email: newValue?.contact?.email || null,\n phone: newValue?.contact?.phone || null,\n cell: newValue?.contact?.cell || null,\n attention: newValue?.contact?.attention || null\n }\n });\n });\n });\n }\n\n public getWarehouseLabel(warehouse: Warehouse) {\n return warehouse.name;\n }\n\n ngOnDestroy() {\n this.eventSubscription?.unsubscribe();\n this.poShipToDataService.resetTestCardsShipmentData();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n

SOW â„–{{ po.id }}

\n\n
\n \n\n \n\n \n\n \n
\n
\n\n \n\n \n
\n
\n {{ 'module.requests.sow.request' | translate }}:\n {{ 'module.requests.sow.production-manager' | translate }}:\n {{'module.requests.po.printer' | translate}}:\n
\n
\n {{ po.requestName }}\n \n {{ po.stakeholders.buyer.firstName }} {{ po.stakeholders.buyer.lastName }}\n \n {{ po.printerInfo.name }}\n
\n
\n\n \n\n
\n
\n {{ 'module.requests.sow.sow-information' | translate }}\n\n \n
\n\n
\n
\n \n
\n
\n
\n\n \n\n
\n \n \n\n
\n
\n \n
\n
\n
\n {{'module.requests.po.item-description' | translate}}:\n {{ miscItem.description }}\n
\n
\n\n
\n
\n
\n {{'module.requests.po.qty-each' | translate}}:\n {{ miscItem.productionQuantity.quantityEaches }}\n
\n\n
\n {{'module.requests.po.unit-price-pure' | translate}}:\n ${{ miscItem.productionQuantity.unitPrice || 0 | number : '1.4-4' }}\n
\n\n
\n {{'module.requests.po.total-price-pure' | translate}}:\n ${{ miscItem.productionQuantity.totalPrice | number : '1.2-2' }}\n
\n
\n
\n\n
\n
\n
\n {{'module.requests.finance.ship-to' | translate}}:\n {{ shipment.warehouse.name }}\n
\n
\n {{'module.requests.finance.quantity' | translate}}:\n {{ shipment.quantity }}\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n\n
\n
\n {{ 'module.requests.sow.total-cost' | translate }}:\n\n
\n \n
\n
\n
\n\n
\n
\n
{{'module.requests.sow.packaging-requirements' | translate}}
\n\n \n \n\n
{{'module.requests.sow.additional-specs' | translate}}
\n\n
\n
{{'module.requests.sow.encoding-format' | translate}}:
\n
\n \n {{encodingType}}, \n \n
\n
\n\n \n \n\n \n \n\n \n \n {{'common.restrictions.upload-pdf-only' | translate}}\n \n
\n
\n\n
\n
\n \n\n

{{'module.requests.sow.notice1' | translate}}

\n\n

{{'module.requests.sow.notice2' | translate}}

\n

{{'module.requests.sow.invoice' | translate | uppercase}}

\n

\n {{'module.requests.sow.notice3' | translate}}\n
\n {{'module.requests.sow.notice4' | translate}}\n

\n

\n {{'module.requests.sow.address1' | translate}}\n {{'module.requests.sow.address2' | translate}}\n {{'module.requests.sow.address3' | translate}}\n

\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { finalize, first } from 'rxjs/operators';\nimport { ItemShipments } from '../../../../../models/request-item.model';\nimport { ProductionPoModel } from '../../../../../models/production-po.model';\nimport { RequestModel } from '../../../../../models/request.model';\nimport { RequestsService } from '../../../../../services/requests.service';\nimport { Events, EventService } from '../../../../../../shared/services/event-service.service';\nimport { PoShipToDataService } from '../../../../../services/po-ship-to-data.service';\nimport { RequestItemModel } from '../../../../../models/production-request.model';\nimport { MessageService } from '../../../../../../shared/services/message-service.service';\nimport {PoSowManageService} from '../../../../../services/po-sow-manage.service';\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\n\n@Component({\n selector: 'app-po-form',\n templateUrl: './sow-form.component.html',\n styleUrls: ['./sow-form.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PoShipToDataService, PoSowManageService],\n})\nexport class SowFormComponent implements OnInit {\n public request: RequestModel;\n public po: ProductionPoModel;\n public poCopy: ProductionPoModel;\n public dielines: { code: string; name: string }[];\n public substrates: { code: string; name: string }[];\n public redemptions: { code: string; name: string }[];\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public sowForm: FormGroup;\n public filesWereChanged: boolean;\n public isDisabled = false;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private modalData: any,\n private dialogRef: MatDialogRef,\n private cd: ChangeDetectorRef,\n private requestsService: RequestsService,\n private eventService: EventService,\n private poShipToDataService: PoShipToDataService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private fb: FormBuilder,\n private poSowManageService: PoSowManageService\n ) {\n }\n\n public ngOnInit(): void {\n this.setPo(this.modalData.po);\n this.request = {...this.modalData.request};\n this.dielines = [...this.modalData.dielines];\n this.substrates = [...this.modalData.substrates];\n this.redemptions = [...this.modalData.redemptions];\n\n this.setInitialShipments();\n\n this.sowForm = this.fb.group({\n total: this.fb.control({ value: this.po.billingInfo.total, disabled: true }),\n sowNotes: this.fb.control(this.po.sowNotes),\n items: this.fb.array(\n this.po.items.map(item => this.fb.group(\n {\n sowNotes: this.fb.control(item.sowNotes),\n }\n )),\n ),\n });\n\n this.filesWereChanged = false;\n this.poCopy = cloneDeep({...this.po, ...this.getPreparedForm()});\n\n if (this.modalData.type === 'view') {\n this.isDisabled = true;\n this.sowForm.disable();\n }\n }\n\n public setPo(po: any) {\n this.po = {\n ...this.po,\n ...po,\n sowEncodingSpec: {\n ...po?.sowEncodingSpec,\n files: po?.sowEncodingSpec.files.map(file => ({ ...file, type: 'file' }))\n },\n sowPackagingRequirements: {\n ...po?.sowPackagingRequirements,\n files: po?.sowPackagingRequirements?.files.map(file => ({ ...file, type: 'file' }))\n },\n };\n // BE do not return nulls in response, so set it manually\n this.po.items.forEach(item => {\n item.productionQuantity.testCardShipments.forEach(shipment => {\n shipment.quantity = shipment.quantity || null;\n shipment.warehouse.mdmId = shipment.warehouse.mdmId || null;\n shipment.warehouse.name = shipment.warehouse.name || null;\n shipment.warehouse.address.addressLine1 = shipment.warehouse.address.addressLine1 || null;\n shipment.warehouse.address.addressLine2 = shipment.warehouse.address.addressLine2 || null;\n shipment.warehouse.address.addressLine3 = shipment.warehouse.address.addressLine3 || null;\n shipment.warehouse.address.city = shipment.warehouse.address.city || null;\n shipment.warehouse.address.country = shipment.warehouse.address.country || null;\n shipment.warehouse.address.postalCode = shipment.warehouse.address.postalCode || null;\n shipment.warehouse.address.stateProvince = shipment.warehouse.address.stateProvince || null;\n shipment.warehouse.contact.attention = shipment.warehouse.contact.attention || null;\n shipment.warehouse.contact.cell = shipment.warehouse.contact.cell || null;\n shipment.warehouse.contact.email = shipment.warehouse.contact.email || null;\n shipment.warehouse.contact.phone = shipment.warehouse.contact.phone || null;\n });\n });\n }\n\n public uploadSowFileFunction = (file) => {\n this.filesWereChanged = true;\n return this.requestsService.uploadSOWFile(this.request.id, this.po.id, file);\n };\n\n public removeSowFileFunction = (attachmentId) => {\n this.filesWereChanged = true;\n return this.requestsService.deleteSOWFile(this.request.id, this.po.id, attachmentId);\n };\n\n public deleteSOW(shouldShowSuccessMessage?: boolean): void {\n this.poSowManageService.deleteSOWItem(this.request.id, this.po, this.dialogRef, shouldShowSuccessMessage);\n }\n\n public onSave(): void {\n const poToSave = this.getPreparedForm();\n this.filesWereChanged = false;\n\n this.requestsService.updatePO(this.request.id, poToSave.id, poToSave)\n .pipe(\n first(),\n finalize(() => this.cd.markForCheck())\n )\n .subscribe((data) => {\n this.setPo(data);\n this.poCopy = cloneDeep({\n ...this.po,\n sowNotes: poToSave.sowNotes,\n items: this.po.items.map((item, indx) => ({...item, sowNotes: poToSave.items[indx].sowNotes}))\n });\n this.messageService.showSystemMessage('success', null, this.translate.transform('common.message.sow-saved'));\n });\n }\n\n public onClose(): void {\n const isDataChanged =\n !isEqualWith({ ...this.po, ...this.getPreparedForm() }, this.poCopy, (obj1, obj2) => {\n if (obj1 === null && obj2 === '' || obj1 === '' && obj2 === null) {\n return true;\n }\n });\n this.poSowManageService.onCloseSOW(this.dialogRef, isDataChanged, this.request.id, this.filesWereChanged, this.po);\n }\n\n public onAddShipment(item: RequestItemModel): void {\n item.productionQuantity.testCardShipments.push(this.getEmptyShipmentItem());\n }\n\n public onDeleteShipment(item: RequestItemModel, idx: number): void {\n if (item.productionQuantity.testCardShipments.length === 1) {\n this.po.items[0].productionQuantity.testCardShipments = [\n this.getEmptyShipmentItem(),\n ];\n return;\n }\n\n item.productionQuantity.testCardShipments.splice(idx, 1);\n }\n\n private getEmptyShipmentItem(): ItemShipments {\n return {\n quantity: null,\n warehouse: {\n mdmId: null,\n name: null,\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n postalCode: null,\n stateProvince: null,\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null,\n },\n },\n };\n }\n\n private setInitialShipments(): void {\n this.po.items.forEach(item => {\n if (!item.productionQuantity?.testCardShipments.length) {\n item.productionQuantity.testCardShipments = [\n this.getEmptyShipmentItem(),\n ];\n }\n });\n }\n\n private updateRequestItemsTestCardShipments(po) {\n const shipmentData = this.poShipToDataService.getTestCardsShipmentData();\n po.sowCreated = true;\n po.items.forEach((item, idx) => {\n shipmentData\n .forEach(ship => {\n if (ship.requestItemIndex === idx) {\n item.productionQuantity.testCardShipments = ship.testCardShipmentData;\n }\n });\n\n item.productionQuantity.testCardShipments.forEach(testItem => {\n testItem.warehouse.name =\n typeof testItem.warehouse.name === 'string' || testItem.warehouse.name === null ?\n testItem.warehouse.name : testItem.warehouse.name?.name;\n testItem.warehouse.address.addressLine3 = testItem.warehouse.address.addressLine3 || null;\n });\n });\n\n }\n\n private updateNotes({ sowNotes, items }, po): void {\n po.items = po.items.map((item, idx) => ({ ...item, sowNotes: items[idx].sowNotes }));\n po.sowNotes = sowNotes;\n }\n\n public printSOW(requestId: string | number, poId: number, type: string): void {\n this.requestsService.downloadPoPdf(requestId, poId, type);\n }\n\n private getPreparedForm(): any {\n const poToSave = cloneDeep({...this.po});\n\n this.eventService.emit({eventName: Events.SowSubmit});\n this.updateRequestItemsTestCardShipments(poToSave);\n this.updateNotes(this.sowForm.value, poToSave);\n\n return poToSave;\n }\n}\n","/* eslint-disable no-underscore-dangle */\nimport {Observable, ReplaySubject} from 'rxjs';\nimport {ThirdPartyRequestItemModel} from '../models/third-party-request.model';\nimport {BaseRequestItemModel} from '../models/request-item.model';\n\nconst WRAP = 'wrap';\nconst MULTI = 'multipack';\n\nexport abstract class AbstractSelectPrinterProvider {\n protected readonly TYPES = {\n MULPIPACK: 'CERTIFIED_MULTIPACK',\n WRAP: 'CERTIFIED_WRAP',\n EXTERNAL: 'EXTERNAL',\n INTERNAL: 'INTERNAL',\n MIXED: 'MIXED'\n };\n abstract getFilteredPrintersSubscription(): Observable;\n}\n\nexport class SelectPrinterProvider extends AbstractSelectPrinterProvider{\n private filteredPrinters$ = new ReplaySubject(1);\n private allPrinters = [];\n private _type: string;\n private get type() {\n return this._type;\n }\n private set type(val) {\n this._type = val;\n }\n constructor(private printers: any[], private defaultType: string) {\n super();\n this.type = defaultType;\n printers.forEach(printer => this.allPrinters.push({value: printer, name: printer.name}));\n this.updateFilteredPrinters(false, false);\n }\n\n private getWrapPrinters(): any[] {\n return this.allPrinters.filter(item => item.value.types.includes(this.TYPES.WRAP));\n }\n\n private getMultipackPrinters(): any[] {\n return this.allPrinters.filter(item => item.value.types.includes(this.TYPES.MULPIPACK));\n }\n\n private getExternalPrinters(): any[] {\n return this.allPrinters.filter(item => item.value.types.includes(this.TYPES.EXTERNAL));\n }\n\n private getInternalPrinters(): any[] {\n return this.allPrinters.filter(item => item.value.types.includes(this.TYPES.INTERNAL));\n }\n\n private getWrapAndMultipackPrinters(): any[] {\n return this.allPrinters.filter(item => item.value.types.includes(this.TYPES.WRAP) || item.value.types.includes(this.TYPES.MULPIPACK));\n }\n\n private isItemWrap(item: ThirdPartyRequestItemModel|BaseRequestItemModel): boolean {\n return (item as ThirdPartyRequestItemModel)?.dielineTypeCode?.toLowerCase().indexOf(WRAP) >= 0 ||\n (item as BaseRequestItemModel)?.formFactor?.dielineType?.toLowerCase().indexOf(WRAP) >= 0;\n }\n\n private isItemMulti(item: ThirdPartyRequestItemModel|BaseRequestItemModel): boolean {\n return (item as ThirdPartyRequestItemModel)?.dielineTypeCode?.toLowerCase().indexOf(MULTI) >= 0 ||\n (item as BaseRequestItemModel)?.formFactor?.dielineType?.toLowerCase().indexOf(MULTI) >= 0;\n }\n\n private updateFilteredPrinters(isWrap: boolean, isMulti: boolean): any[] {\n if (isMulti && isWrap) {\n this.filteredPrinters$.next(this.getWrapAndMultipackPrinters());\n return this.getWrapAndMultipackPrinters();\n }\n if (isWrap) {\n this.filteredPrinters$.next(this.getWrapPrinters());\n return this.getWrapPrinters();\n }\n if (isMulti) {\n this.filteredPrinters$.next(this.getMultipackPrinters());\n return this.getMultipackPrinters();\n }\n if (this.defaultType === this.TYPES.INTERNAL) {\n this.filteredPrinters$.next(this.getInternalPrinters());\n return this.getInternalPrinters();\n }\n\n this.filteredPrinters$.next(this.getExternalPrinters());\n return this.getExternalPrinters();\n }\n\n private getItemType(isWrap: boolean, isMulti: boolean): string {\n if (isMulti && isWrap) {\n return this.TYPES.MIXED;\n }\n if (isWrap) {\n return this.TYPES.WRAP;\n }\n if (isMulti) {\n return this.TYPES.MULPIPACK;\n }\n if (this.defaultType === this.TYPES.INTERNAL) {\n return this.TYPES.INTERNAL;\n }\n return this.TYPES.INTERNAL;\n }\n\n getFilteredPrintersSubscription(): Observable {\n return this.filteredPrinters$.asObservable();\n }\n\n isPrinterInList(printer, printerList: any[]): boolean {\n return printerList.some(item => item.value.mdmId === printer?.mdmId);\n }\n\n checkPrinterTypeChanged(item: ThirdPartyRequestItemModel|BaseRequestItemModel): void {\n const selectedType = this.getItemType(this.isItemWrap(item), this.isItemMulti(item));\n if (this.type !== selectedType) {\n this.updateFilteredPrinters(this.isItemWrap(item), this.isItemMulti(item));\n this.type = selectedType;\n }\n }\n\n checkPOPrinterTypeChanged(items: ThirdPartyRequestItemModel[]|BaseRequestItemModel[]): void {\n const isWrap =\n items?.some(item => this.isItemWrap(item));\n const isMulti =\n items?.some(item => this.isItemMulti(item));\n const selectedType = this.getItemType(isWrap, isMulti);\n if (this.type !== selectedType) {\n this.updateFilteredPrinters(isWrap, isMulti);\n this.type = selectedType;\n }\n }\n\n getFilteredPrintersForItem(item: ThirdPartyRequestItemModel|BaseRequestItemModel): any[] {\n return this.updateFilteredPrinters(this.isItemWrap(item), this.isItemMulti(item));\n }\n}\n","import { SimpleOuterSubscriber, innerSubscribe, SimpleInnerSubscriber } from '../innerSubscribe';\nexport const defaultThrottleConfig = {\n leading: true,\n trailing: false\n};\nexport function throttle(durationSelector, config = defaultThrottleConfig) {\n return (source) => source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing));\n}\nclass ThrottleOperator {\n constructor(durationSelector, leading, trailing) {\n this.durationSelector = durationSelector;\n this.leading = leading;\n this.trailing = trailing;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));\n }\n}\nclass ThrottleSubscriber extends SimpleOuterSubscriber {\n constructor(destination, durationSelector, _leading, _trailing) {\n super(destination);\n this.destination = destination;\n this.durationSelector = durationSelector;\n this._leading = _leading;\n this._trailing = _trailing;\n this._hasValue = false;\n }\n _next(value) {\n this._hasValue = true;\n this._sendValue = value;\n if (!this._throttled) {\n if (this._leading) {\n this.send();\n }\n else {\n this.throttle(value);\n }\n }\n }\n send() {\n const { _hasValue, _sendValue } = this;\n if (_hasValue) {\n this.destination.next(_sendValue);\n this.throttle(_sendValue);\n }\n this._hasValue = false;\n this._sendValue = undefined;\n }\n throttle(value) {\n const duration = this.tryDurationSelector(value);\n if (!!duration) {\n this.add(this._throttled = innerSubscribe(duration, new SimpleInnerSubscriber(this)));\n }\n }\n tryDurationSelector(value) {\n try {\n return this.durationSelector(value);\n }\n catch (err) {\n this.destination.error(err);\n return null;\n }\n }\n throttlingDone() {\n const { _throttled, _trailing } = this;\n if (_throttled) {\n _throttled.unsubscribe();\n }\n this._throttled = undefined;\n if (_trailing) {\n this.send();\n }\n }\n notifyNext() {\n this.throttlingDone();\n }\n notifyComplete() {\n this.throttlingDone();\n }\n}\n","import { Subscriber } from '../Subscriber';\nimport { async } from '../scheduler/async';\nimport { defaultThrottleConfig } from './throttle';\nexport function throttleTime(duration, scheduler = async, config = defaultThrottleConfig) {\n return (source) => source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));\n}\nclass ThrottleTimeOperator {\n constructor(duration, scheduler, leading, trailing) {\n this.duration = duration;\n this.scheduler = scheduler;\n this.leading = leading;\n this.trailing = trailing;\n }\n call(subscriber, source) {\n return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));\n }\n}\nclass ThrottleTimeSubscriber extends Subscriber {\n constructor(destination, duration, scheduler, leading, trailing) {\n super(destination);\n this.duration = duration;\n this.scheduler = scheduler;\n this.leading = leading;\n this.trailing = trailing;\n this._hasTrailingValue = false;\n this._trailingValue = null;\n }\n _next(value) {\n if (this.throttled) {\n if (this.trailing) {\n this._trailingValue = value;\n this._hasTrailingValue = true;\n }\n }\n else {\n this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));\n if (this.leading) {\n this.destination.next(value);\n }\n else if (this.trailing) {\n this._trailingValue = value;\n this._hasTrailingValue = true;\n }\n }\n }\n _complete() {\n if (this._hasTrailingValue) {\n this.destination.next(this._trailingValue);\n this.destination.complete();\n }\n else {\n this.destination.complete();\n }\n }\n clearThrottle() {\n const throttled = this.throttled;\n if (throttled) {\n if (this.trailing && this._hasTrailingValue) {\n this.destination.next(this._trailingValue);\n this._trailingValue = null;\n this._hasTrailingValue = false;\n }\n throttled.unsubscribe();\n this.remove(throttled);\n this.throttled = null;\n }\n }\n}\nfunction dispatchNext(arg) {\n const { subscriber } = arg;\n subscriber.clearThrottle();\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PoAccountingService {\n\n public trackAccountingInfo(accountingInfoFieldset: FormGroup, unsubscribeSubject: Subject): Subscription {\n return merge(of(accountingInfoFieldset.value), accountingInfoFieldset.valueChanges)\n .pipe(throttleTime(0), takeUntil(unsubscribeSubject))\n .subscribe(accountingInfo => {\n if (accountingInfoFieldset.disabled) {\n return;\n }\n const lineOfBusinessField = accountingInfoFieldset.get('lineOfBusiness');\n const channelField = accountingInfoFieldset.get('channel');\n\n if (accountingInfo?.company === 'INC_DIGS' && accountingInfo?.inventoryType === 'BFR_FMON') {\n accountingInfoFieldset.patchValue(\n {\n lineOfBusiness: 'TPG',\n channel: 'IDS'\n },\n {\n emitEvent: false\n }\n );\n lineOfBusinessField.disable({\n emitEvent: false\n });\n channelField.disable({\n emitEvent: false\n });\n } else {\n lineOfBusinessField.enable({\n emitEvent: false\n });\n channelField.enable({\n emitEvent: false\n });\n }\n });\n }\n}\n","\n\n \n \n \n \n \n {{getLabel(item)}}\n \n \n\n\n","import {\n AfterViewInit,\n Component,\n Input,\n OnDestroy,\n ViewChild,\n OnChanges,\n ViewEncapsulation,\n Output, EventEmitter\n} from '@angular/core';\nimport {MatSelect} from '@angular/material/select';\nimport {FormControl} from '@angular/forms';\nimport {ReplaySubject, Subject} from 'rxjs';\nimport {take, takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-button-dropdown',\n templateUrl: './button-dropdown.component.html',\n styleUrls: ['./button-dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ButtonDropdownComponent implements AfterViewInit, OnDestroy, OnChanges {\n @Input() public isDisabled: boolean;\n @Input() public buttonLabel: boolean;\n @Input() public dropdownItems: Array;\n @Input() public itemLabel: string | ((item: any) => string);\n @Input() public panelClass: string;\n\n // tslint:disable-next-line:no-output-on-prefix\n @Output() private onActionSave: EventEmitter = new EventEmitter();\n\n @ViewChild('multiSelect', { static: true }) multiSelect: MatSelect;\n\n // tslint:disable-next-line:variable-name\n protected _onDestroy = new Subject();\n\n public itemMultiCtrl: FormControl = new FormControl();\n public itemsMultiFilterCtrl: FormControl = new FormControl();\n public filteredItemsMulti: ReplaySubject = new ReplaySubject(1);\n\n ngOnChanges() {\n this.filteredItemsMulti.next(this.dropdownItems.slice());\n this.itemsMultiFilterCtrl.valueChanges\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => {\n this.filterItemsMulti();\n });\n }\n\n ngAfterViewInit() {\n this.setInitialValue();\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n protected setInitialValue() {\n this.filteredItemsMulti\n .pipe(take(1), takeUntil(this._onDestroy))\n .subscribe(() => {\n this.multiSelect.compareWith = (a: any, b: any) => this.getLabel(a) === this.getLabel(b);\n });\n }\n\n public getLabel = (item: any): string => {\n switch(true) {\n case item == null:\n return null;\n case typeof this.itemLabel === 'string':\n return item?.[this.itemLabel as string];\n case this.itemLabel instanceof Function:\n const itemLabel = this.itemLabel as ((item: any) => string);\n return itemLabel(item);\n }\n };\n\n protected filterItemsMulti() {\n if (!this.dropdownItems) {\n return;\n }\n // get the search keyword\n let search = this.itemsMultiFilterCtrl.value;\n if (!search) {\n this.filteredItemsMulti.next(this.dropdownItems.slice());\n return;\n }\n search = search.toLowerCase();\n\n // filter the banks\n this.filteredItemsMulti.next(\n this.dropdownItems.filter(item => this.getLabel(item).toLowerCase().indexOf(search) > -1)\n );\n }\n\n public openedChange(opened: boolean) {\n if (!opened) {\n this.onActionSave.emit(this.itemMultiCtrl.value);\n this.itemMultiCtrl.reset();\n }\n }\n\n}\n","
\n
\n
\n \n {{'module.requests.finance.ship-to' | translate}}\n 1\"> {{shipmentIndex+1}}:\n {{shipment.warehouse.name}}\n
\n
\n {{'module.requests.po.qty' | translate}}:\n {{shipment.quantity}}\n
\n
\n
\n
\n
\n address\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n contact\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {PoShipToDataService} from '../../../../../services/po-ship-to-data.service';\nimport {Events, EventService} from '../../../../../../shared/services/event-service.service';\nimport {Subscription} from 'rxjs';\n\n@Component({\n selector: 'app-item-shipment',\n templateUrl: './item-shipment.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ItemShipmentComponent implements OnInit, OnDestroy {\n @Input() public shipment;\n @Input() public shipmentIndex: number;\n @Input() public poItemIndex: number;\n @Input() isDisabled: boolean;\n\n public shipmentItem: FormGroup;\n\n private eventSubscription: Subscription;\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private poShipToDataService: PoShipToDataService\n ) {}\n\n ngOnInit(): void {\n this.buildShipmentForm();\n this.eventSubscription = this.eventService.on(Events.PoSubmit, () => {\n if (this.shipmentItem.invalid) {\n this.poShipToDataService.setFormValidity(this.poItemIndex, this.shipmentIndex, false);\n this.touchFormControls(this.shipmentItem);\n this.cd.markForCheck();\n } else {\n this.poShipToDataService.setFormValidity(this.poItemIndex, this.shipmentIndex, true);\n this.poShipToDataService.setShipmentData(this.poItemIndex, this.shipmentIndex, this.shipmentItem.getRawValue());\n }\n });\n }\n\n private touchFormControls(form: FormGroup): void {\n Object.keys(form.controls).forEach(key => {\n const control = form.get(key);\n if ((control as FormGroup).controls) {\n this.touchFormControls(control as FormGroup);\n } else if (control.pristine) {\n control.markAsTouched();\n control.updateValueAndValidity({onlySelf: true, emitEvent: true});\n }\n });\n }\n\n private buildShipmentForm(): void {\n this.shipmentItem = this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(this.shipment.warehouse.address.addressLine1),\n addressLine2: this.fb.control(this.shipment.warehouse.address.addressLine2),\n city: this.fb.control(this.shipment.warehouse.address.city),\n country: this.fb.control(this.shipment.warehouse.address.country),\n postalCode: this.fb.control(this.shipment.warehouse.address.postalCode),\n stateProvince: this.fb.control(this.shipment.warehouse.address.stateProvince)\n }),\n contact: this.fb.group({\n email: this.fb.control(this.shipment.warehouse.contact.email),\n phone: this.fb.control(this.shipment.warehouse.contact.phone),\n cell: this.fb.control(this.shipment.warehouse.contact.cell),\n attention: this.fb.control(this.shipment.warehouse.contact.attention)\n })\n });\n if (this.isDisabled) {\n this.shipmentItem.disable();\n } else {\n this.shipmentItem.enable();\n }\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n this.eventSubscription?.unsubscribe();\n this.poShipToDataService.removeShipment(this.poItemIndex, this.shipmentIndex);\n }\n}\n","\n
\n {{'module.requests.finance.wpn-description' | translate}}:\n {{item.wpnDescription}}\n \n
\n
\n
\n
\n {{'module.requests.finance.product-upc' | translate}}:\n {{item.productUpc}}\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{item.wpn}}\n
\n
\n
\n
\n
\n {{'module.requests.po.merchant' | translate}}:\n \n {{merchant.name}}\n , \n \n
\n
\n {{'module.requests.finance.denom' | translate}}:\n {{item.denom}}\n
\n
\n
\n {{'module.requests.finance.dieline' | translate}}:\n {{getItemName(dielines, item.formFactor.dielineType)}}\n
\n
\n {{'module.requests.finance.encoding-type' | translate}}:\n {{item.formFactor.encodingType}}\n
\n
\n {{'module.requests.finance.bundle-size' | translate}}:\n {{item.productionQuantity.bundleSize}}\n
\n
\n {{'module.requests.po.qty-each' | translate}}:\n \n {{item.productionQuantity.productionQuantity}}\n
\n
\n {{'module.requests.po.unit-price' | translate}}:\n
\n \n
\n
\n
\n {{'module.requests.po.item-subtotal' | translate}}:\n ${{item.productionQuantity.totalPrice | number : '1.2-2'}}\n
\n
\n
\n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input, OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport {RequestItemModel} from '../../../../../models/production-request.model';\nimport BigJs from 'big.js';\nimport {FormControl, Validators} from '@angular/forms';\nimport {debounceTime, takeUntil} from 'rxjs/operators';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {EventService, Events} from '../../../../../../shared/services/event-service.service';\nimport {Store} from '@ngrx/store';\nimport {selectDielines} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {Subject} from 'rxjs';\n\n@Component({\n selector: 'app-item-information',\n templateUrl: './item-information.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ItemInformationComponent implements OnInit, OnDestroy {\n @Input() public item: RequestItemModel; // items added to PO\n @Input() public itemIndex: number;\n @Input() public itemsLength: number;\n @Input() isDisabled: boolean;\n\n // tslint:disable-next-line:no-output-on-prefix no-output-rename\n @Output('onDelete') public deleteItem: EventEmitter = new EventEmitter();\n public unitPrice: FormControl;\n public dielines: Array;\n private ngUnsubscribe = new Subject();\n\n constructor(private cd: ChangeDetectorRef,\n private utilsService: UtilsService,\n private eventService: EventService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.initUnitPriceForItem();\n this.setTotals();\n this.getDielines();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public delete(): void {\n this.item.productionQuantity.unitPrice = 0;\n this.cd.markForCheck();\n this.deleteItem.emit(this.itemIndex);\n }\n\n private initUnitPriceForItem(): void {\n const unitPrice = this.item.productionQuantity.unitPrice ? this.item.productionQuantity.unitPrice : 0;\n this.unitPrice = new FormControl({value: unitPrice, disabled: this.isDisabled},\n [Validators.required]);\n this.unitPrice.valueChanges\n .pipe(debounceTime(1000))\n .subscribe(newVal => {\n this.item.productionQuantity.unitPrice = newVal;\n this.setTotals();\n this.cd.markForCheck();\n this.eventService.emit({eventName: Events.StartRecalculatePoTotalPrice});\n });\n }\n\n private setTotals(): void {\n let totalQuantity: number;\n if (this.item.productionQuantity.quantityEaches) {\n totalQuantity = this.item.productionQuantity.quantityEaches;\n } else {\n totalQuantity = this.item.productionQuantity.productionQuantity;\n this.item.productionQuantity.quantityEaches = totalQuantity;\n }\n\n const unitPrice = this.unitPrice.value;\n const price = new BigJs(Number(unitPrice));\n this.item.productionQuantity.totalPrice = price.times(totalQuantity).toFixed(4);\n }\n\n private getDielines(): void {\n this.store.select(selectDielines)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.dielines = Object.assign([], data);\n }\n });\n }\n\n getItemName(array, code) {\n return this.utilsService.getItemName(array, code);\n }\n}\n","\n
\n
\n

\n {{'module.requests.po.item-info' | translate}}\n \n

\n \n \n
\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {RequestItemModel} from '../../../../../models/production-request.model';\nimport find from 'lodash/find';\n\n@Component({\n selector: 'app-items-information',\n templateUrl: './items-information.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ItemsInformationComponent implements OnInit {\n @Input() public items: RequestItemModel[]; // items added to PO\n // tslint:disable-next-line:no-input-rename\n @Input('requestItems') public allItems: RequestItemModel[]; // all items in request\n // tslint:disable-next-line:no-input-rename\n @Input('unitPrice') public price: string;\n @Input() isDisabled: boolean;\n\n // tslint:disable-next-line:no-output-on-prefix\n @Output() private onAddItem: EventEmitter = new EventEmitter();\n // tslint:disable-next-line:no-output-on-prefix\n @Output() private onRemoveItem: EventEmitter = new EventEmitter();\n\n public availableItems: Array = [];\n\n constructor(private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.setAvailableItems();\n }\n\n public deleteItem(index): void {\n this.checkAllItems(index);\n this.items.splice(index, 1);\n this.setAvailableItems();\n this.onRemoveItem.emit();\n this.cd.markForCheck();\n }\n\n public addItem(itemsToAdd): void {\n if (itemsToAdd?.length) {\n itemsToAdd.forEach(item => this.items.push(item));\n this.setAvailableItems();\n this.onAddItem.emit();\n this.cd.markForCheck();\n }\n }\n\n private setAvailableItems(): void {\n this.availableItems = [];\n this.availableItems = this.allItems.filter(item => !this.items.find(assignedItem => assignedItem.id === item.id));\n }\n\n private checkAllItems(index): void {\n const isIncludes = find(this.allItems, {id: this.items[index].id});\n if (!isIncludes) {\n this.allItems.push(this.items[index]);\n }\n }\n}\n","
\n \n
\n {{'module.requests.po.miscellaneous-items' | translate}}:\n #{{itemIndex + 1}}\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n 0 ? ' ' + (i + 1) : ''}}\"\n [itemsFormCtrl]=\"shipment?.get('warehouse.name')\"\n [itemsList]=\"shipmentsOptions | toSelectDropdownOptions: 'value': getWarehouseLabel: true\"\n [testId]=\"'ship_to_'+i\">\n
\n
\n \n \n\n
\n
1\">\n \n
\n
\n
\n \n \n
\n
\n\n
\n \n
\n\n\n
\n
\n
\n \n \n
\n
\n
\n\n
\n \n \n
\n
\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport BigJs from 'big.js';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { lazyLoadWarehouses } from '../../../../../reducers/ref-data/refdata.actions';\nimport { selectWarehouses } from '../../../../../reducers/ref-data/refdata.selectors';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { Warehouse } from '../../../../models/warehouse.model';\n\n@Component({\n selector: 'app-miscellaneous-item',\n templateUrl: './miscellaneous-item.component.html',\n styleUrls: ['./miscellaneous-item.component.scss']\n})\nexport class MiscellaneousItemComponent implements OnInit, OnDestroy {\n @Input() public itemIndex: number;\n @Input() public itemsLength: number;\n @Input() public miscItemGroup: FormGroup;\n @Input() isDisabled: boolean;\n @Input() fractionDigits = 4;\n @Input() keyForTotal: 'string';\n @Input() keyForDescription: 'string';\n\n @Output() public removeMiscItem: EventEmitter = new EventEmitter();\n @Output() public copyMiscItem: EventEmitter = new EventEmitter();\n\n public shipmentsOptions: any[] = [];\n public priceGroup: FormGroup;\n\n private ngUnsubscribe = new Subject();\n private warehouses$ = this.store.pipe(\n select(selectWarehouses),\n filter((v) => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(private cd: ChangeDetectorRef,\n private eventService: EventService,\n private store: Store,\n private fb: FormBuilder) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadWarehouses());\n this.getShipToOptions();\n this.setShipToListeners();\n\n this.priceGroup = this.fb.group({\n quantityEaches: this.miscItemGroup?.get('productionQuantity')?.get('quantityEaches'),\n unitPrice: this.miscItemGroup?.get('productionQuantity')?.get('unitPrice'),\n totalPrice: this.miscItemGroup?.get('productionQuantity')?.get('totalPrice'),\n });\n\n\n this.priceGroup?.valueChanges\n .subscribe(formValues => {\n if (formValues.quantityEaches === '') {\n this.miscItemGroup?.get('productionQuantity')?.get('quantityEaches').setValue(null);\n }\n\n if (formValues.unitPrice === '') {\n this.miscItemGroup?.get('productionQuantity')?.get('unitPrice').setValue(null);\n }\n\n const totalQuantity = new BigJs(Number(formValues.quantityEaches) * Number(formValues.unitPrice)).toFixed(this.fractionDigits);\n\n const totalPrice = this.miscItemGroup?.get('productionQuantity')?.get('totalPrice');\n if ( totalPrice ) {\n totalPrice.setValue(totalQuantity, {\n emitEvent: false\n });\n totalPrice.markAllAsTouched();\n }\n this.cd.markForCheck();\n this.eventService.emit({eventName: Events.StartRecalculatePoTotalPrice});\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private getShipToOptions(): void {\n this.warehouses$.subscribe(data => {\n if (data?.length) {\n this.shipmentsOptions = [];\n data.forEach((shipment: Warehouse) => {\n this.shipmentsOptions.push({value: shipment, name: shipment.name});\n });\n this.cd.markForCheck();\n }\n });\n }\n\n private setShipToListeners(): void {\n const shipmentsControlsArray = (this.miscItemGroup?.get('productionQuantity')?.get('shipments') as FormArray).controls as any[];\n shipmentsControlsArray.forEach((shipment) => {\n shipment.get('warehouse').get('name').valueChanges\n .subscribe(newValue => {\n shipment.get('warehouse').patchValue({\n id: newValue?.id ?? null,\n mdmId: newValue?.mdmId,\n address: {\n addressLine1: newValue?.address?.addressLine1 ?? null,\n addressLine2: newValue?.address?.addressLine2 ?? null,\n addressLine3: newValue?.address?.addressLine3 ?? null,\n city: newValue?.address?.city ?? null,\n country: newValue?.address?.country ?? null,\n postalCode: newValue?.address?.postalCode ?? null,\n stateProvince: newValue?.address?.stateProvince ?? null\n },\n contact: {\n email: newValue?.contact?.email ?? null,\n phone: newValue?.contact?.phone ?? null,\n cell: newValue?.contact?.cell ?? null,\n attention: newValue?.contact?.attention ?? null\n }\n });\n });\n });\n }\n\n public getWarehouseLabel(warehouse: Warehouse) {\n return warehouse.name;\n }\n\n public addShipToItem(): void {\n (this.miscItemGroup?.get('productionQuantity')?.get('shipments') as FormArray).push(this.fb.group({\n quantity: this.fb.control(null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null),\n }),\n name: this.fb.control(null),\n mdmId: this.fb.control(null),\n id: this.fb.control(null)\n })\n }));\n this.setShipToListeners();\n }\n\n public deleteCurrentShipment(index: number): void {\n (this.miscItemGroup?.get('productionQuantity')?.get('shipments') as FormArray).removeAt(index);\n }\n\n public deleteMiscItem(): void {\n this.removeMiscItem.emit(this.itemIndex);\n }\n\n public onCopyMiscItem(): void {\n this.copyMiscItem.emit(this.itemIndex);\n }\n}\n","\n
\n
\n

\n {{'module.requests.po.miscellaneous-items' | translate}}\n

\n
\n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
\n
\n","import {Component, Input, OnInit} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\n\n@Component({\n selector: 'app-miscellaneous-items-section',\n templateUrl: './miscellaneous-items-section.component.html',\n styleUrls: [],\n})\nexport class MiscellaneousItemsSectionComponent implements OnInit {\n @Input() public miscItems: FormArray;\n @Input() isDisabled: boolean;\n @Input() fractionDigits = 4;\n @Input() miscTotalKey = 'module.requests.po.total-price-pure';\n @Input() miscDescriptionKey = 'module.requests.po.item-description';\n\n constructor(private fb: FormBuilder, private eventService: EventService) {}\n\n ngOnInit(): void {\n if (this.isDisabled) {\n this.miscItems?.disable();\n }\n }\n\n public addMiscItem(item?: any) {\n const miscItem = this.fb.group({\n description: this.fb.control(item?.description || null),\n productionQuantity: this.fb.group({\n quantityEaches: this.fb.control(item?.productionQuantity?.quantityEaches || null, [Validators.max(999999)]),\n unitPrice: this.fb.control(item?.productionQuantity?.unitPrice || null),\n totalPrice: this.fb.control(item?.productionQuantity?.totalPrice || null, [Validators.max(999999999.9999)]),\n shipments: this.fb.array([])\n })\n });\n\n if (item?.productionQuantity?.shipments?.length) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n item?.productionQuantity?.shipments?.forEach(shipment => {\n (miscItem.get('productionQuantity.shipments') as FormArray).push(this.getShipment(shipment));\n });\n } else {\n (miscItem.get('productionQuantity.shipments') as FormArray).push(this.getShipment());\n }\n\n this.miscItems.push(miscItem);\n }\n\n private getShipment(shipment?: any): FormGroup {\n return this.fb.group({\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(shipment?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(shipment?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(shipment?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(shipment?.warehouse?.address?.city || null),\n country: this.fb.control(shipment?.warehouse?.address?.country || null),\n postalCode: this.fb.control(shipment?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(shipment?.warehouse?.address?.stateProvince || null)\n }),\n contact: this.fb.group({\n attention: this.fb.control(shipment?.warehouse?.contact?.attention || null),\n cell: this.fb.control(shipment?.warehouse?.contact?.cell || null),\n email: this.fb.control(shipment?.warehouse?.contact?.email || null),\n phone: this.fb.control(shipment?.warehouse?.contact?.phone || null)\n }),\n name: this.fb.control(shipment?.warehouse?.name || null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n id: this.fb.control(null)\n })\n });\n }\n\n public removeMiscItem(index: number): void {\n this.miscItems.removeAt(index);\n }\n\n public copyMiscItem(index: number): void {\n const itemToCopyDetails = (this.miscItems.controls[index] as FormGroup).getRawValue();\n\n this.addMiscItem(itemToCopyDetails);\n this.eventService.emit({eventName: Events.StartRecalculatePoTotalPrice});\n }\n}\n","
\n
\n
\n
\n {{'module.requests.po.requestor-approver' | translate}}\n {{'module.requests.po.signature' | translate}}\n {{'module.requests.po.date' | translate}}
\n
\n
\n
\n {{'module.requests.po.buyer' | translate}}\n {{poDetails.stakeholders.buyer.firstName+' '+poDetails.stakeholders.buyer.lastName}}\n -\n
\n
\n {{'module.requests.po.approval1' | translate}}\n {{poDetails.stakeholders.approver1}}\n -\n
\n
\n {{'module.requests.po.approval2' | translate}}\n {{poDetails.stakeholders.approver2}}\n -\n
\n
\n {{'module.requests.po.approval3' | translate}}\n
\n \n
\n
\n
\n
\n
\n
\n \n \n\n \n
\n
\n
{{label | translate}}
\n
\n
\n \n \n \n \n \n \n \n \n\n \n
\n {{label | translate}}\n \n \n {{property}}\n \n {{property | currency}}\n -\n
\n
\n
\n
\n
\n
\n
\n {{ glCode }}\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\nimport { BasePoModel } from '../../../../models/po.model';\n\n@Component({\n selector: 'app-po-accounting',\n templateUrl: './po-accounting.component.html',\n styleUrls: ['./po-accounting.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PoAccountingComponent {\n @Input() poDetails: BasePoModel;\n @Input() glCode: string;\n}\n","
\n
\n

\n PO â„–{{poDetails?.id}}\n {{'module.requests.po.new-po' | translate}}\n

\n
\n \n \n \n \n \n
\n
\n \n
\n \n
\n {{'module.requests.po.accounting-info' | translate}}\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n {{'module.requests.po.printer-info' | translate}}:\n
\n \n
\n \n \n
\n \n
\n {{'module.requests.po.item-info' | translate}}\n \n
\n \n
\n {{'module.requests.po.miscellaneous-items' | translate}}\n \n \n
\n \n
\n {{'module.requests.po.special' | translate}}\n
\n
\n \n
\n
\n
\n
{{'module.requests.po.total-quantity' | translate}}:
\n
\n {{getTotalQty()}}
\n
\n
\n
{{'module.requests.po.sub-total' | translate}}:
\n
\n {{getSubTotal() | currency }}
\n
\n
\n
{{'module.requests.po.additional-costs' | translate}}:
\n
\n \n
\n
\n
\n
{{'module.requests.po.freight' | translate}}:
\n
\n \n
\n
\n
\n
{{'module.requests.po.taxes' | translate}}:
\n
\n \n
\n
\n
\n
{{'module.requests.po.total' | translate}}:
\n
\n {{getTotal() | currency}}
\n
\n
\n
{{'module.requests.po.rebill-rate' | translate}}:
\n
\n {{poDetails.billingInfo.rebillRate|currency:'USD':'symbol':'1.4-4'}}\n {{price|currency:'USD':'symbol':'1.4-4'}}\n
\n
\n
\n
{{'module.requests.po.rebill-total' | translate}}:
\n
\n {{getRebillTotalAmount() | currency}}\n
\n
\n
\n
\n
\n
\n stakeholders\n
\n \n \n \n

{{'module.requests.po.notice' | translate}}

\n
\n
\n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport defaultTo from 'lodash/defaultTo';\nimport cloneDeep from 'lodash/cloneDeep';\nimport flatMapDeep from 'lodash/flatMapDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport { combineLatest, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, take, takeUntil } from 'rxjs/operators';\nimport { PoAccountingService } from 'src/app/requests/services/po-accounting.service';\n\nimport {\n selectChannelTypes,\n selectCompanies,\n selectInventoryTypes,\n selectPartnerGroups,\n selectPrinters,\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport { Events, EventService } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { UtilsService } from 'src/app//shared/services/utils.service';\nimport { SelectPrinterProvider } from 'src/app/requests/classes/select-printer-provider';\nimport { MAX_PO_TOTAL } from 'src/app/requests/constants/request-details.constants';\nimport { PoModel } from 'src/app/requests/models/po.model';\nimport { ProductionPoModel } from 'src/app/requests/models/production-po.model';\nimport { RequestItemModel } from 'src/app/requests/models/production-request.model';\nimport { PoShipToDataService } from 'src/app/requests/services/po-ship-to-data.service';\nimport { PoSowManageService } from 'src/app/requests/services/po-sow-manage.service';\nimport { RequestsService } from 'src/app/requests/services/requests.service';\n\n@Component({\n selector: 'app-po-form',\n templateUrl: './po-form.component.html',\n styleUrls: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n PoShipToDataService,\n PoSowManageService\n ]\n})\nexport class PoFormComponent implements OnInit, OnDestroy {\n\n public poForm: FormGroup;\n public poDetails: ProductionPoModel;\n public poDetailsCopy: ProductionPoModel;\n public requestItemsDetails: RequestItemModel[];\n public companyList: any[] = [];\n public inventoryTypeList: any[] = [];\n public lineOfBusinessList: any[] = [];\n public chnList: any[] = [];\n public printerList: any[] = [];\n public price: string;\n public itemsLengthChanged = false;\n public requestId: string;\n public dataItem: any;\n public dropdownRequestItems: any[];\n public isPoProcessing = false;\n testId = 'po';\n\n private shouldRecalculatePrice = false;\n private printerInfoGroup: FormGroup;\n public accountingInfo: FormGroup;\n private printerSubscription: Subscription;\n private eventSubscription: Subscription;\n private ngUnsubscribe = new Subject();\n private selectPrinterProvider;\n private refData$ = combineLatest([\n this.store.select(selectCompanies).pipe(filter(v => v.length > 0)),\n this.store.select(selectInventoryTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n private printers$ = this.store.select(selectPrinters)\n .pipe(\n filter(v => v.length > 0),\n take(1)\n );\n\n constructor(private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private requestsService: RequestsService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private eventService: EventService,\n private poShipToDataService: PoShipToDataService,\n private poSowManageService: PoSowManageService,\n private dialogRef: MatDialogRef,\n private utilsService: UtilsService,\n private store: Store,\n @Inject(MAT_DIALOG_DATA) data: any,\n private poAccountingService?: PoAccountingService\n ) {\n this.dataItem = cloneDeep(data);\n }\n\n ngOnInit(): void {\n if (this.dataItem.type === 'new') {\n this.requestItemsDetails = cloneDeep(this.dataItem.request);\n } else {\n this.requestItemsDetails = cloneDeep(this.dataItem.po.items);\n }\n this.dropdownRequestItems = [ ...this.dataItem.request ];\n\n this.initPoDetails();\n this.buildPOForm();\n this.setPriceChangeListener();\n\n this.price = this.dataItem.unitPrice || 0;\n this.requestId = this.dataItem.requestId;\n\n if (this.dataItem.type === 'new') {\n this.copyItemsFromRequestDetails();\n }\n if (this.dataItem.type === 'view') {\n this.poForm.disable();\n }\n\n this.getLists();\n\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe);\n\n this.cd.detectChanges();\n this.poDetailsCopy = cloneDeep({...this.poDetails, ...this.getPreparedForm()});\n }\n\n private initPoDetails(): void {\n this.poDetails = {\n accountingInfo: this.dataItem.po.accountingInfo ?\n cloneDeep(this.dataItem.po.accountingInfo) :\n {channel: null, company: null, inventoryType: null, lineOfBusiness: null},\n printerInfo: this.dataItem.po.printerInfo ?\n cloneDeep(this.dataItem.po.printerInfo) :\n { address: {\n addressLine1: null, addressLine2: null, addressLine3: null, city: null,\n country: null, stateProvince: null, postalCode: null\n },\n contact: {\n attention: null, cell: null, email: null, phone: null\n },\n name: null, mdmId: null, id: null },\n sowCreated: this.dataItem.po.sowCreated,\n sowNotes: this.dataItem.po.sowNotes,\n items: this.dataItem.po.items?.length ?\n cloneDeep(\n this.requestItemsDetails.filter(item => this.dataItem.po.items.find(poItem => poItem.id === item.id))\n ) : [],\n miscItems: this.dataItem.po.miscItems ? cloneDeep(this.dataItem.po.miscItems) : [],\n id: this.dataItem.po.id,\n accountingSummary: this.dataItem.po.accountingSummary ?\n cloneDeep(this.dataItem.po.accountingSummary) :\n {Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null},\n apSummary: this.dataItem.po.apSummary ?\n cloneDeep(this.dataItem.po.apSummary) :\n {Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null},\n instructions: this.dataItem.po.instructions ? this.dataItem.po.instructions : null,\n billingInfo: this.dataItem.po.billingInfo ?\n cloneDeep(this.dataItem.po.billingInfo) :\n { additionalCosts: 0, freight: 0, rebillRate: 0, rebillTotalAmount: 0,\n subTotal: 0, taxes: 0, total: 0, totalQuantity: 0},\n stakeholders: this.dataItem.po.stakeholders ?\n cloneDeep(this.dataItem.po.stakeholders) :\n {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n }\n };\n }\n\n private setPrinter(): void {\n const printerDetails = this.poDetails?.printerInfo || this.dataItem.po.printerInfo;\n if (printerDetails?.name && this.printerList.length) {\n const printer =\n this.printerList.find(item => item.value.mdmId === printerDetails.mdmId);\n if (printer) {\n this.poForm.get('printerInfo').get('name').setValue({...printer?.value, ...this.poDetails.printerInfo});\n }\n }\n }\n\n private buildPOForm(): void {\n this.printerSubscription?.unsubscribe();\n\n this.poForm = this.fb.group({\n accountingInfo: this.fb.group({\n channel: this.fb.control(this.poDetails.accountingInfo.channel, Validators.required),\n company: this.fb.control(this.poDetails.accountingInfo.company, Validators.required),\n inventoryType: this.fb.control(this.poDetails.accountingInfo.inventoryType, Validators.required),\n lineOfBusiness: this.fb.control(this.poDetails.accountingInfo.lineOfBusiness, Validators.required)\n }),\n items: this.fb.array([]),\n miscItems: this.fb.array([]),\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(this.poDetails.printerInfo.address.addressLine1),\n addressLine2: this.fb.control(this.poDetails.printerInfo.address.addressLine2),\n addressLine3: this.fb.control(this.poDetails.printerInfo.address.addressLine3),\n city: this.fb.control(this.poDetails.printerInfo.address.city),\n country: this.fb.control(this.poDetails.printerInfo.address.country),\n postalCode: this.fb.control(this.poDetails.printerInfo.address.postalCode ),\n stateProvince: this.fb.control(this.poDetails.printerInfo.address.stateProvince),\n }),\n contact: this.fb.group({\n attention: this.fb.control(this.poDetails.printerInfo.contact.attention),\n cell: this.fb.control(this.poDetails.printerInfo.contact.cell),\n email: this.fb.control(this.poDetails.printerInfo.contact.email),\n phone: this.fb.control(this.poDetails.printerInfo.contact.phone),\n }),\n name: this.fb.control(this.poDetails.printerInfo.name, Validators.required),\n mdmId: this.fb.control(this.poDetails.printerInfo.mdmId),\n id: this.fb.control(this.poDetails.printerInfo.id)\n }),\n instructions: this.fb.control(this.poDetails.instructions),\n billingInfo: this.fb.group({\n additionalCosts: this.fb.control(\n this.poDetails.billingInfo.additionalCosts, [Validators.min(0)]),\n freight: this.fb.control(\n this.poDetails.billingInfo.freight, [Validators.min(0)]),\n taxes: this.fb.control(this.poDetails.billingInfo.taxes, [Validators.min(0)])\n }),\n stakeholders: this.fb.group({\n approver3: this.fb.control(this.poDetails.stakeholders.approver3)\n })\n });\n this.accountingInfo = this.poForm.get('accountingInfo') as FormGroup;\n this.printerInfoGroup = this.poForm.get('printerInfo') as FormGroup;\n this.fillMiscItemsForm();\n this.setBillingInfoListener();\n this.cd.markForCheck();\n }\n\n private setPriceChangeListener(): void {\n this.eventSubscription = this.eventService.on(Events.StartRecalculatePoTotalPrice, () => {\n this.shouldRecalculatePrice = true;\n this.cd.markForCheck();\n });\n }\n\n private setBillingInfoListener(): void {\n this.poForm.get('billingInfo').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => this.shouldRecalculatePrice = true);\n }\n\n private fillMiscItemsForm(): void {\n this.poDetails.miscItems.forEach((miscItem) => {\n const miscItemFormGroup = this.fb.group({\n description: this.fb.control(defaultTo(miscItem.description, null)),\n productionQuantity: this.fb.group({\n quantityEaches: this.fb.control(defaultTo(miscItem.productionQuantity.quantityEaches, null)),\n unitPrice: this.fb.control(defaultTo(miscItem.productionQuantity.unitPrice, null)),\n totalPrice: this.fb.control(defaultTo(miscItem.productionQuantity.totalPrice, null)),\n shipments: this.fb.array([])\n })\n });\n\n miscItem.productionQuantity.shipments.forEach((shipment) => {\n (miscItemFormGroup.get('productionQuantity').get('shipments') as FormArray).push(\n this.fb.group({\n quantity: this.fb.control(defaultTo(shipment.quantity, null)),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(defaultTo(shipment.warehouse.address.addressLine1, null)),\n addressLine2: this.fb.control(defaultTo(shipment.warehouse.address.addressLine2, null)),\n addressLine3: this.fb.control(defaultTo(shipment.warehouse.address.addressLine3, null)),\n city: this.fb.control(defaultTo(shipment.warehouse.address.city, null)),\n country: this.fb.control(defaultTo(shipment.warehouse.address.country, null)),\n postalCode: this.fb.control(defaultTo(shipment.warehouse.address.postalCode, null)),\n stateProvince: this.fb.control(defaultTo(shipment.warehouse.address.stateProvince, null)),\n }),\n contact: this.fb.group({\n attention: this.fb.control(defaultTo(shipment.warehouse.contact.attention, null)),\n cell: this.fb.control(defaultTo(shipment.warehouse.contact.cell, null)),\n email: this.fb.control(defaultTo(shipment.warehouse.contact.email, null)),\n phone: this.fb.control(defaultTo(shipment.warehouse.contact.phone, null)),\n }),\n name: this.fb.control(shipment.warehouse?.name ? shipment.warehouse : null),\n mdmId: this.fb.control(defaultTo(shipment.warehouse.mdmId, null)),\n id: this.fb.control(defaultTo(shipment.warehouse.id, null))\n })\n })\n );\n });\n (this.poForm.get('miscItems') as FormArray).push(miscItemFormGroup);\n });\n }\n\n private getLists(): void {\n\n this.printers$\n .subscribe(printers => {\n this.selectPrinterProvider = new SelectPrinterProvider(printers, 'INTERNAL');\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.poDetails.items);\n this.setPrinterSubscription();\n this.addPrinterListener();\n this.setPrinter();\n });\n\n this.refData$.subscribe(([companies, inventories, channels, lob]) => {\n this.companyList = cloneDeep(companies);\n this.inventoryTypeList = cloneDeep(inventories);\n this.chnList = cloneDeep(channels);\n this.lineOfBusinessList = this.utilsService.getParentChild(cloneDeep(lob));\n this.setLOB();\n this.cd.markForCheck();\n });\n }\n\n private setPrinterSubscription() {\n this.selectPrinterProvider.getFilteredPrintersSubscription().pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(printers => {\n this.printerList = printers;\n if (!this.selectPrinterProvider.isPrinterInList(this.poForm.get('printerInfo').value, this.printerList)) {\n this.poForm.get('printerInfo').reset();\n }\n });\n }\n\n private setLOB(): void {\n const savedLOB = this.poDetails?.accountingInfo?.lineOfBusiness ||\n this.dataItem.po?.accountingInfo?.lineOfBusiness;\n if (savedLOB) {\n const foundLOB =\n this.lineOfBusinessList.find(item => item.code === savedLOB) ||\n flatMapDeep(this.lineOfBusinessList\n .filter(item => !!item.children?.length), item => item.children)\n .find(item => item.code === savedLOB);\n this.poForm.get('accountingInfo.lineOfBusiness').setValue(foundLOB?.code);\n }\n }\n\n private addPrinterListener(): void {\n this.printerSubscription?.unsubscribe();\n\n const printerControl = this.printerInfoGroup.controls.name;\n this.printerSubscription = printerControl.statusChanges\n .subscribe(status => {\n if (status === 'VALID') {\n this.printerInfoGroup.patchValue({\n address: {\n addressLine1: printerControl.value.address?.addressLine1,\n addressLine2: printerControl.value.address?.addressLine2,\n addressLine3: printerControl.value.address?.addressLine3,\n city: printerControl.value.address?.city,\n country: printerControl.value.address?.country,\n postalCode: printerControl.value.address?.postalCode,\n stateProvince: printerControl.value.address?.stateProvince,\n },\n contact: {\n attention: printerControl.value.contact?.attention,\n cell: printerControl.value.contact?.cell,\n email: printerControl.value.contact?.email,\n phone: printerControl.value.contact?.phone,\n },\n mdmId: printerControl.value.mdmId,\n id: printerControl.value.id\n });\n this.cd.markForCheck();\n }\n });\n }\n\n public getTotalQty(): number {\n if (this.poDetails?.billingInfo?.totalQuantity && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return this.poDetails?.billingInfo?.totalQuantity;\n }\n let total = 0;\n if (this.poDetails.items?.length) {\n this.poDetails.items.forEach(item => {\n total += item.productionQuantity.productionQuantity;\n });\n }\n return total;\n }\n\n public getSubTotal(): number {\n if (this.poDetails?.billingInfo?.subTotal && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.poDetails?.billingInfo?.subTotal).toFixed(4);\n }\n let price = new BigJs(0);\n this.poDetails.items.forEach(item => {\n price = price.add(Number(item.productionQuantity.totalPrice ?? 0));\n });\n const miscItemsTotal: any = (this.poForm.get('miscItems') as FormArray).controls.reduce(\n (sum, item) => sum.plus(item.get('productionQuantity').get('totalPrice').value || 0),\n new BigJs(0)\n );\n return price.plus(miscItemsTotal).toFixed(4);\n }\n\n public getTotal(): number {\n if (this.poDetails?.billingInfo?.total && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.poDetails?.billingInfo?.total).toFixed(4);\n }\n\n const total = new BigJs(this.getSubTotal());\n const additionalCosts = Number(this.poForm.get('billingInfo').get('additionalCosts').value);\n const freight = Number(this.poForm.get('billingInfo').get('freight').value);\n const taxes = Number(this.poForm.get('billingInfo').get('taxes').value);\n\n return total.plus(additionalCosts).plus(freight).plus(taxes).toFixed(4);\n }\n\n public getRebillTotalAmount(): number {\n if (this.poDetails?.billingInfo?.rebillTotalAmount &&\n !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.poDetails?.billingInfo?.rebillTotalAmount).toFixed(4);\n }\n const totalQty = this.getTotalQty();\n const price = new BigJs(parseFloat(this.price));\n return price.times(totalQty).toFixed(4);\n }\n\n public onPrintPo(requestId: string, poId: number, type: string): void {\n this.requestsService.downloadPoPdf(requestId, poId, type);\n }\n\n public onSave(): void {\n this.eventService.emit({eventName: Events.PoSubmit});\n if (this.poForm.valid && this.isAllShipmetsValid()) {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.messageService.showSystemMessage('warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation'));\n }\n\n }\n\n private getPreparedForm(): any {\n const warehouseInfo = this.poShipToDataService.getShipmentData();\n const form = this.poForm.getRawValue();\n this.updateSelectedItems(form);\n this.updateFormWithWarehouseInfo(warehouseInfo, form);\n this.replacePrinterName(form);\n this.replaceMiscItemShipmentsName(form);\n this.updateFormBillingInfo(form);\n this.updateItemsUnitPrice(form);\n\n return form;\n }\n\n private updateItemsUnitPrice(form): void {\n form.items.forEach(item =>\n item.productionQuantity.unitPrice = item.productionQuantity.unitPrice ? item.productionQuantity.unitPrice : '0');\n }\n\n private updateFormBillingInfo(form): void {\n form.billingInfo.rebillRate = new BigJs(parseFloat(this.price)).toFixed(4);\n form.billingInfo.rebillTotalAmount = this.getRebillTotalAmount();\n form.billingInfo.subTotal = this.getSubTotal();\n form.billingInfo.total = this.getTotal();\n form.billingInfo.totalQuantity = this.getTotalQty();\n }\n\n private isAllShipmetsValid(): boolean {\n const shipments = this.poShipToDataService.getFormValidity();\n return !shipments.find(item => item.valid === false);\n }\n\n public deletePO(): void {\n this.isPoProcessing = true;\n this.poSowManageService.deletePoItem(this.requestId, this.poDetails)\n .subscribe({\n next: () => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n });\n }\n\n public closePO(): void {\n let isDataChanged = false;\n if (this.dataItem.type !== 'view') {\n isDataChanged =\n !isEqualWith({ ...this.poDetails, ...this.getPreparedForm() }, this.poDetailsCopy, (obj1, obj2) => {\n if (obj1 === null && obj2 === '' || obj1 === '' && obj2 === null) {\n return true;\n }\n if (typeof obj1 === 'number' && typeof obj2 === 'string' ||\n typeof obj1 === 'string' && typeof obj2 === 'number') {\n return Number(obj1) === Number(obj2);\n }\n });\n }\n\n this.poSowManageService.onClosePO(this.dialogRef, isDataChanged, this.requestId);\n }\n\n private saveOrUpdatePO(form): void {\n const total = new BigJs(this.getTotal());\n const maxTotal = new BigJs(MAX_PO_TOTAL);\n\n if (total.gt(maxTotal)) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-total-desc')\n );\n return;\n }\n\n const poSource = this.poDetails.id\n ? this.requestsService.updatePO(this.requestId, this.poDetails.id, { ...this.poDetails, ...form })\n : this.requestsService.createPO(this.requestId, form);\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable): void {\n this.isPoProcessing = true;\n poSource.pipe(take(1)).subscribe({\n next: (newPo: PoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n });\n }\n\n private onSuccessPO(data): void {\n this.messageService.showSystemMessage('success',\n this.translate.transform('common.message.po-saved'), null);\n this.poDetails = cloneDeep(data);\n this.buildPOForm();\n this.addPrinterListener();\n this.setPrinter();\n\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe);\n\n if (data?.printerInfo) {\n this.poForm.get('printerInfo').get('name').setValue(data.printerInfo);\n }\n this.poDetailsCopy = cloneDeep({...this.poDetails, ...this.getPreparedForm()});\n this.cd.markForCheck();\n }\n\n public onItemsChange(): void {\n this.itemsLengthChanged = true;\n\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.poDetails.items);\n this.cd.markForCheck();\n }\n\n private updateSelectedItems(form: any): void {\n this.poDetails.items.forEach(item => {\n form.items.push(item);\n });\n }\n\n private updateFormWithWarehouseInfo(warehouseInfo, form): void {\n warehouseInfo.forEach(warehouse => {\n form.items[warehouse.poItemIndex].productionQuantity.shipments[warehouse.shipmentIndex].warehouse.address =\n warehouse.warehouseData.address;\n form.items[warehouse.poItemIndex].productionQuantity.shipments[warehouse.shipmentIndex].warehouse.contact =\n warehouse.warehouseData.contact;\n });\n }\n\n private replacePrinterName(form: any): void {\n form.printerInfo.name = form.printerInfo.name?.name || form.printerInfo.name;\n form.printerInfo.id = this.poDetails.printerInfo.id ?? null;\n }\n\n private replaceMiscItemShipmentsName(form: any): void {\n form.miscItems.forEach((miscItem) => {\n miscItem.productionQuantity.shipments.forEach((shipment) => {\n shipment.warehouse.name = shipment.warehouse.name?.name || shipment.warehouse.name;\n });\n });\n }\n\n private copyItemsFromRequestDetails(): void {\n this.poDetails.items = cloneDeep(this.requestItemsDetails);\n }\n\n public getPrinterLabel(printer: any): string {\n return printer.name;\n }\n\n ngOnDestroy() {\n this.printerSubscription?.unsubscribe();\n this.eventSubscription?.unsubscribe();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","\n
\n \n

{{ noPoText || ('module.requests.text.no-po-sow' | translate) }}

\n
\n \n \n {{'module.requests.text.add-po-sow' | translate}}\n \n {{'module.requests.text.to-create-one' | translate}}\n
\n
\n\n
\n \n

{{'module.requests.third-party.tps.no-tps' | translate}}

\n
\n \n \n {{'module.requests.third-party.tps.add-tps' | translate}}\n \n {{'module.requests.text.to-create-one' | translate}}\n
\n
\n
\n \n

{{'module.requests.text.no-sow-standalone' | translate}}

\n
\n \n {{'module.requests.text.to-create-one' | translate}}\n
\n
\n\n
\n \n

{{'module.requests.text.no-sow' | translate}}

\n
\n \n {{'module.requests.text.to-create-one' | translate}}\n
\n
\n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n\n@Component({\n selector: 'app-po-sow-add',\n templateUrl: './po-sow-add.component.html',\n styleUrls: ['./po-sow-add.component.scss']\n})\nexport class PoSowAddComponent {\n @Input() type: 'po'|'sow'|'sow_standalone';\n @Input() isDisabled: boolean;\n @Input() noPoText: string;\n\n @Output() addNew = new EventEmitter();\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { RequestsService } from '../../../../services/requests.service';\nimport {combineLatest, Subject, Subscription} from 'rxjs';\nimport { ProductionPoModel } from '../../../../models/production-po.model';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { STATUSES } from '../../../../constants/request-statuses.constant';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport {RequestModel} from '../../../../models/request.model';\nimport {PoSowManageService} from '../../../../services/po-sow-manage.service';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {SowFormComponent} from './sow-form/sow-form.component';\nimport {PoFormComponent} from './po-form/po-form.component';\nimport {Store} from '@ngrx/store';\nimport {selectRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, pluck, take, takeUntil, takeWhile} from 'rxjs/operators';\nimport {\n selectChannelTypes,\n selectCompanies,\n selectInventoryTypes, selectPartnerGroups,\n selectPrinters,\n selectRefData\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {isPPMSelectorState} from '../../../../../reducers/ppm/ppm.selectors';\nimport {\n lazyLoadChannelTypes,\n lazyLoadCompanies,\n lazyLoadInventoryTypes, lazyLoadPartnerGroups,\n lazyLoadPrinters\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {UserRoles} from '../../../../../shared/constants/user-roles.constant';\n\nconst VIEW_MODE = 'view';\nconst EDIT_MODE = 'edit';\n\n@Component({\n selector: 'app-po-sow',\n templateUrl: './po-sow.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PoSowManageService]\n})\nexport class PoSowComponent implements OnInit, OnDestroy {\n @Input() public requestId: string;\n @Input() public isDisabled: boolean;\n\n public blankState = true;\n public requestItemsLoaded = false;\n public poDataLoaded = false;\n public disableCreatePo = true;\n public poDetails: ProductionPoModel[] = [];\n public companies: { code: string; name: string }[];\n public dielines: {code: string; name: string}[];\n public isUserPPM = false;\n public userRoles = UserRoles;\n testId = 'pow_sow';\n\n private request: RequestModel;\n private requestItems = [];\n private unitPrice = '';\n private substrates: {code: string; name: string}[];\n private redemptions: { code: string; name: string }[];\n private subscriptions: Subscription [] = [];\n private ngUnsubscribe = new Subject();\n\n private refData$ = combineLatest([\n this.store.select(selectPrinters).pipe(filter(v => v.length > 0)),\n this.store.select(selectCompanies).pipe(filter(v => v.length > 0)),\n this.store.select(selectInventoryTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0))\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(private eventService: EventService,\n private translate: TranslatePipe,\n private stepActionsService: StepActionsService,\n private modalService: ModalService,\n private requestsService: RequestsService,\n private cd: ChangeDetectorRef,\n private utilsService: UtilsService,\n private messageService: MessageService,\n private poSowManageService: PoSowManageService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.loadRefData();\n this.setRequestDetailsSubscription();\n this.setPODetailsSubscription();\n this.getRefdata();\n this.setStepSubmitSubscription();\n\n this.store.select(isPPMSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isPPM')\n ).subscribe((isUserPPM) => {\n this.isUserPPM = isUserPPM;\n });\n }\n\n private loadRefData(): void {\n this.store.dispatch(lazyLoadCompanies());\n this.store.dispatch(lazyLoadInventoryTypes());\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadChannelTypes());\n this.store.dispatch(lazyLoadPrinters());\n }\n\n public onEdit(item: ProductionPoModel, type: string): void {\n if (type === 'po') {\n this.openPO(item);\n } else {\n this.addNewSOW(item);\n }\n }\n\n public onPrint(requestId: string, poId: number, type: string): void {\n this.requestsService.downloadPoPdf(requestId, poId, type);\n }\n\n public onDelete(item: ProductionPoModel, type: string): void {\n if (type === 'po') {\n this.poSowManageService.deletePoItem(this.requestId, item).subscribe();\n } else {\n this.poSowManageService.deleteSOWItem(this.requestId, item);\n }\n }\n\n public addNewPO(): void {\n this.openPO({}, 'new');\n }\n\n public addNewSOW(po: ProductionPoModel): void {\n const data = {\n request: this.request,\n po,\n dielines: this.dielines,\n substrates: this.substrates,\n redemptions: this.redemptions,\n type: this.isDisabled && this.isUserPPM ? VIEW_MODE : EDIT_MODE\n };\n\n this.modalService.openModal(SowFormComponent, data, 'sow-form-dialog');\n }\n\n public trackByPoItemFn(index: number, poItemDetails: ProductionPoModel) {\n return poItemDetails.id;\n }\n\n public async openPO(poItem, poType?) {\n await this.refData$.pipe(take(1)).toPromise(); // wait for all refdata to be loaded\n const data = {\n po: poItem,\n request: Object.assign([], this.requestItems),\n unitPrice: this.unitPrice,\n requestId: this.requestId,\n type: poType ? poType : this.isDisabled && this.isUserPPM ? VIEW_MODE : EDIT_MODE };\n this.modalService.openModal(PoFormComponent, data, 'po-form-dialog', false);\n }\n\n public getItemName(array, code: string): string {\n return this.utilsService.getItemName(array, code);\n }\n\n private setRequestDetailsSubscription(): void {\n this.store.select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(request => {\n this.request = cloneDeep(request);\n\n if (request?.items?.length) {\n this.requestItems = cloneDeep(request.items);\n this.disableCreatePo = request.status === STATUSES.DRAFT;\n this.unitPrice = request.finance?.rebillAmountPerItem;\n this.requestItemsLoaded = true;\n this.cd.markForCheck();\n }\n });\n }\n private setPODetailsSubscription(): void {\n this.subscriptions.push(\n this.requestsService.getPOListener()\n .subscribe(data => {\n if (data?.length) {\n this.poDetails = cloneDeep( data);\n this.poDetails.sort(this.utilsService.sortByDate);\n this.blankState = false;\n } else {\n this.poDetails = [];\n this.blankState = true;\n }\n this.poDataLoaded = true;\n this.cd.markForCheck();\n }));\n\n this.requestsService.callPO(this.requestId);\n }\n\n private getRefdata(): void {\n this.store.select(selectRefData)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(refData => {\n this.dielines = refData.dielines || [];\n this.substrates = refData.substrates || [];\n this.redemptions = refData.redemptionTypes || [];\n });\n\n this.requestsService.getCompanies().subscribe(data => {\n this.companies = data;\n });\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(Events.PoSowSubmitValidated, (elementRef) => {\n if (this.poDetails.length) {\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.StepApprove, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.transform('module.requests.po.po-required'),\n this.translate.transform('module.requests.po.po-stage-error'));\n }\n }));\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n}\n","
\n
\n {{'module.requests.text.purchase-orders' | translate}}\n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n {{label | translate}}\n
\n \n \n\n \n \n \n \n \n
\n
\n
\n
\n
\n {{'common.button.printer' | translate}}:\n {{'module.requests.po.company' | translate}}:\n
\n
\n {{poItemDetails.printerInfo?.name}}\n {{getItemName(companies, poItemDetails.accountingInfo?.company)}}\n
\n
\n {{'module.requests.po.date' | translate}}:\n {{'module.requests.po.total-qty' | translate}}:\n
\n
\n {{poItemDetails?.sowCreatedAt | date : 'MM/dd/yyyy' | uppercase}}\n {{poItemDetails?.createdAt | date : 'MM/dd/yyyy' | uppercase}}\n {{poItemDetails?.billingInfo?.totalQuantity}}\n
\n
\n
\n
\n \n
\n
\n {{'module.requests.finance.wpn-description' | translate}}:\n {{reqItem?.wpnDescription}}\n
\n
\n
\n {{'module.requests.finance.product-upc' | translate}}\n {{reqItem?.productUpc}}\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{reqItem?.wpn}}\n
\n
\n {{'module.requests.finance.dieline' | translate}}\n {{getItemName(dielines, reqItem?.formFactor?.dielineType)}}\n
\n
\n
\n
\n {{'module.requests.finance.ship-to' | translate}}:\n
\n
\n {{'module.requests.po.qty' | translate}}\n
\n
\n
\n
\n {{shipmentItem?.warehouse?.name}}\n
\n
\n {{shipmentItem?.quantity}}\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n\n
\n","\n
\n
\n \"\"/\n
\n

{{'module.requests.text.committee-review1' | translate}}

\n

{{'module.requests.text.committee-review2' | translate}}

\n
\n
\n\n \n\n\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'app-committee-approval',\n templateUrl: './committee-approval.component.html',\n styleUrls: []\n})\nexport class CommitteeApprovalComponent {\n public blankState = false;\n}\n","import {Injectable} from '@angular/core';\nimport {ErrorHandlingHttpClient} from '../../shared/services/error-handling-http-client.service';\nimport {PrinterItemModel, MilestoneItem} from '../models/printer-item.model';\nimport {Observable} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\nimport {FileUploadService} from './file-upload.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport abstract class AtPrinterService {\n constructor(\n protected errorHandlingHttpClient: ErrorHandlingHttpClient,\n protected httpClient: HttpClient,\n protected fileUploadService: FileUploadService\n ) {}\n public abstract getRequestPrinterWorkItems(requestId: string | number): Observable;\n public abstract updateMilestoneDetails(requestId: number | string, printerItem: PI, milestone: MI, data: any): Observable;\n public abstract deleteWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n attachmentId: number\n ): Observable;\n\n public abstract uploadWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n file: File\n ): Observable;\n\n protected abstract createWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n uploadId: string\n ): Observable;\n\n public abstract bulkUpdateAtPrinter(requestId: string, printerId: number, itemId: number, data: any): Observable;\n}\n\n","import {Injectable} from '@angular/core';\nimport {AtPrinterService} from './at-printer.service';\nimport {PrinterItemModel, MilestoneItem} from '../models/printer-item.model';\nimport {Observable, of} from 'rxjs';\nimport {API} from 'src/app/shared/constants/api.constants';\nimport {switchMap} from 'rxjs/operators';\nimport {HttpEventType} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CardProdAtPrinterService extends AtPrinterService {\n public getRequestPrinterWorkItems(requestId: string | number) {\n return this.errorHandlingHttpClient.get(`${API.getRequestPrinterWorkItems(requestId)}`);\n }\n public updateMilestoneDetails(\n requestId: number | string,\n printerItem: PrinterItemModel,\n milestone: MilestoneItem,\n data: any\n ): Observable {\n return this.errorHandlingHttpClient.put(\n API.updateMilestoneDetails(requestId, printerItem.printerDetails.id, printerItem.id, milestone.id),\n data\n );\n }\n\n public uploadWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n file: File\n ): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n protected createWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n uploadId: string\n ): Observable {\n return this.errorHandlingHttpClient.post(\n `${API.createCardProductionWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId)}`,\n null,\n {\n reportProgress: true,\n observe: 'events',\n params: {uploadId}\n }\n );\n }\n\n public deleteWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n attachmentId: number\n ): Observable {\n return this.errorHandlingHttpClient.delete(\n `${API.deleteCardProductionWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, attachmentId)}`\n );\n }\n\n public bulkUpdateAtPrinter(requestId: string, printerId: number, itemId: number, data: any): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.put(`${API.doCardProductionBulkWorkItemMilestoneUpdate(requestId, printerId, itemId)}`, data);\n }\n}\n","import { HttpEventType } from '@angular/common/http';\nimport { ChangeDetectorRef, Component, OnDestroy } from '@angular/core';\nimport { Observable, combineLatest, of, EMPTY, BehaviorSubject, Subject, throwError } from 'rxjs';\nimport { catchError, finalize, shareReplay, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { PrinterItemModel } from 'src/app/requests/models/printer-item.model';\nimport { UploadLinkModel } from 'src/app/requests/models/upload-link.model';\nimport { AtPrinterService } from 'src/app/requests/services/at-printer.service';\nimport { FileUploadService } from 'src/app/requests/services/file-upload.service';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from 'src/app/shared/models/upload-file-restrictions.model';\nimport { MilestoneDetailsPayload } from '../../card-production/at-printer/cp-bulk-change/bulk-change.interface';\n\n@Component({\n selector: 'app-bulk-change',\n template: '',\n})\nexport class BulkChangeComponent implements OnDestroy {\n protected loadingSubject = new BehaviorSubject(false);\n protected errorSubject = new BehaviorSubject(null);\n protected ngUnsubscribe = new Subject();\n\n fileTypes = FILE_TYPES;\n fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n loading$ = this.loadingSubject.asObservable();\n error$: Observable = this.errorSubject.asObservable();\n\n constructor(\n protected cd: ChangeDetectorRef,\n protected atPrinterService: AtPrinterService,\n protected fileUploadService: FileUploadService,\n ) {\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n protected getSubmitRequestObservable(\n payload: MilestoneDetailsPayload,\n requestId: string,\n printerId: number,\n itemId: number,\n ): Observable {\n return of(true)\n .pipe(\n tap(() => {\n this.loadingSubject.next(true);\n }),\n switchMap(() => this.atPrinterService\n .bulkUpdateAtPrinter(requestId, printerId, itemId, payload)\n .pipe(\n catchError(err => {\n this.errorSubject.next(err);\n return throwError(err);\n })\n ))\n )\n .pipe(\n takeUntil(this.ngUnsubscribe),\n finalize(() => {\n this.loadingSubject.next(false);\n }),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n }\n\n protected getUploadedFiles(\n files: (File & { progress: number })[],\n requestId: string,\n ): Promise {\n return this.getUploadLinkObservable(files, requestId)\n .toPromise()\n .then((uploadLinks: UploadLinkModel[]) => (uploadLinks || []).map(ul => ul.uploadId));\n }\n\n private getUploadLinkObservable(\n files: (File & { progress: number })[],\n requestId: string,\n ): Observable {\n return combineLatest(\n files.map(file => this.fileUploadService.requestAttachmentUploadLink(requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => {\n if (event.type === HttpEventType.UploadProgress) {\n const progress = Math.floor((event.loaded / event.total) * 100);\n file.progress = progress;\n }\n this.cd.markForCheck();\n return event.type === HttpEventType.Response ? of(uploadLink) : EMPTY;\n })\n ))\n ))\n ).pipe(\n // for the case someone close modal before upload process finishes.\n takeUntil(this.ngUnsubscribe)\n );\n }\n\n}\n","
\n
\n {{selectorLabel}}:\n {{files.length}}\n
\n
\n \n \n \n \n or drag and drop them here\n \n
\n
\n
\n \n
\n \n {{ file?.name }}\n \n

\n \n {{ utilsService.getFormattedBytes(file.size) }}\n \n \n {{file?.progress + '%'}}\n \n

\n \n
\n
\n \n
\n
\n \n
\n
\n \n {{'common.restrictions.file-size-exceeded' | translate : {size: (restrictionOptions.fileSize.sizeNumber + restrictionOptions.fileSize.sizeType)} }}\n
\n
\n \n {{'common.restrictions.file-type-mismatch' | translate : {fileTypes: accept} }}\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n forwardRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { RequestsService } from '../../../requests/services/requests.service';\nimport { FILE_TYPES } from '../../constants/upload-restrictions.constants';\nimport { RestrictionOptionsObject } from '../../models/upload-file-restrictions.model';\nimport { MessageService } from '../../services/message-service.service';\nimport { UtilsService } from '../../services/utils.service';\n\ninterface ProgressAwareFile extends File {\n progress: number;\n}\n\n@Component({\n selector: 'app-file-selector',\n templateUrl: './file-selector.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.Default,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => FileSelectorComponent),\n multi: true\n }\n ]\n})\nexport class FileSelectorComponent implements OnChanges, ControlValueAccessor, OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n get files() {\n return this.value;\n }\n\n set files(files: ProgressAwareFile[]) {\n this.value = files;\n\n this.propagateChange(this.value);\n this.onTouched();\n }\n\n constructor(\n public utilsService: UtilsService,\n private requestService: RequestsService,\n private cd: ChangeDetectorRef,\n private messageService: MessageService,\n private translate: TranslatePipe,\n ) {}\n @Input() public selectorLabel: string;\n @Input() public moreLabel: string;\n @Input() public isDisabled = false;\n @Input() public testId = null;\n @Input() public value: ProgressAwareFile[] = [];\n\n @Input() public restrictionOptions?: RestrictionOptionsObject;\n\n @ViewChild('fileDropRef', {static: false}) fileDropEl: ElementRef;\n\n public isRestrictionSizeWarningExist: boolean;\n public isRestrictionTypeWarningExist: boolean;\n public accept: string[] = [];\n\n private propagateChange: (data: ProgressAwareFile[]) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(obj: any): void {\n if (obj) {\n this.value = obj;\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n this.isDisabled = isDisabled;\n }\n\n public ngOnInit() {\n this.requestService.getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.accept = this.restrictionOptions?.fileType ?\n data[this.restrictionOptions?.fileType] :\n data[FILE_TYPES.DEFAULT];\n this.cd.markForCheck();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n\n public ngOnChanges(changes: SimpleChanges): void {\n // update the form\n this.propagateChange(this.value);\n }\n\n private fileTypeAccepted(file: any) {\n if (!this.accept || this.accept.length === 0) {\n return true;\n }\n const fileTypeAccepted = this.accept.indexOf(file.type) > -1;\n const [,fileExtension] = /(?:\\.([^.]+))?$/.exec(file.name);\n const fileExtensionAccepted = this.accept.indexOf(`.${fileExtension.toLowerCase()}`) > -1;\n\n return fileTypeAccepted || fileExtensionAccepted;\n }\n\n private filterFileTypes(files: Array): Array {\n const filtered = files.filter(this.fileTypeAccepted.bind(this));\n\n if (filtered.length !== files.length) {\n this.messageService.showSystemMessage('error',\n this.translate.transform('common.errors.file-not-supported'));\n }\n\n return filtered;\n }\n\n /**\n * on file drop handler\n */\n onFileDropped($event) {\n const filtered = this.filterFileTypes(Array.from($event));\n\n if (!this.isDisabled) {\n this.isRestrictionSizeWarningExist = false;\n this.prepareFilesList(filtered);\n }\n }\n\n /**\n * handle file from browsing\n */\n fileBrowseHandler(files) {\n const filtered = this.filterFileTypes(Array.from(files));\n this.isRestrictionSizeWarningExist = false;\n this.isRestrictionTypeWarningExist = false;\n this.prepareFilesList(filtered);\n }\n\n /**\n * Delete file from files list\n *\n * @param index (File index)\n */\n deleteFile(index: number) {\n this.files = this.files.filter((v, k) => k !== index);\n }\n\n /**\n * Convert Files list to normal array list\n *\n * @param files (Files List)\n */\n prepareFilesList(files: Array) {\n for (const item of files) {\n if (this.isValidByRestrictionsOptions(item)) {\n item.progress = null;\n this.files = [...this.value, item];\n }\n }\n\n this.fileDropEl.nativeElement.value = '';\n }\n\n /**\n * @todo Use validators instead\n */\n private isValidByRestrictionsOptions(file): boolean {\n let fileValidBySize = true;\n\n if (this.restrictionOptions?.fileSize) {\n fileValidBySize = this.isFileFitsBySize(file.size);\n this.isRestrictionSizeWarningExist = this.isRestrictionSizeWarningExist ? true : !fileValidBySize;\n }\n\n return fileValidBySize;\n }\n\n private isFileFitsBySize(bytes): boolean {\n if (bytes === 0) {\n return true;\n }\n const k = 1024;\n const dm = 2;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const restrictionSizeTypeIndex = sizes.indexOf(this.restrictionOptions.fileSize.sizeType);\n\n const fileSizeTypeIndex = Math.floor(Math.log(bytes) / Math.log(k));\n\n if (fileSizeTypeIndex < restrictionSizeTypeIndex) {\n return true;\n }\n\n if (fileSizeTypeIndex > restrictionSizeTypeIndex) {\n return false;\n }\n\n if (fileSizeTypeIndex === restrictionSizeTypeIndex) {\n const revertedSize = parseFloat((bytes / Math.pow(k, fileSizeTypeIndex)).toFixed(dm));\n return revertedSize <= this.restrictionOptions.fileSize.sizeNumber;\n }\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { takeUntil } from 'rxjs/operators';\nimport { MilestoneItem, PrinterItemModel } from 'src/app/requests/models/printer-item.model';\nimport { AtPrinterService } from 'src/app/requests/services/at-printer.service';\nimport { CardProdAtPrinterService } from 'src/app/requests/services/cp-prod-at-printer.service';\n\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { FileUploadService } from '../../../../../services/file-upload.service';\nimport { BulkChangeComponent } from '../../../common/bulk-change/bulk-change.component';\nimport { BulkChangeComponentData, MilestoneDetailsPayload } from './bulk-change.interface';\n\nconst requiredIfCheckedValidator = (ac: AbstractControl) => {\n if (ac?.parent?.get('completed').value) {\n return Validators.required(ac);\n }\n return null;\n};\n\n@Component({\n selector: 'app-bulk-change',\n templateUrl: './cp-bulk-change.component.html',\n styleUrls: ['./cp-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: CardProdAtPrinterService\n }\n ]\n})\nexport class CardProductionBulkChangeComponent extends BulkChangeComponent implements OnInit {\n protected validationObject = {\n shipDate: null,\n estimatedArrivalDate: null,\n completed: false,\n files: []\n };\n\n public bulkForm: FormGroup = this.fb.group(\n {\n shipDate: this.fb.control(null, []),\n estimatedArrivalDate: this.fb.control(null, []),\n completed: this.fb.control(false),\n files: this.fb.control([])\n },\n {\n updateOn: 'change',\n validators: UtilsService.bulkFormValidationFn(this.validationObject)\n }\n );\n\n public resetErrorOnFormChange = this.bulkForm\n .valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.errorSubject.next(null);\n });\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: BulkChangeComponentData,\n private fb: FormBuilder,\n protected fileUploadService: FileUploadService,\n protected cd: ChangeDetectorRef,\n protected atPrinterService: AtPrinterService\n ) {\n super(cd, null, fileUploadService);\n }\n\n public ngOnInit(): void {\n this.bulkForm\n .get('completed')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.bulkForm.get('shipDate').updateValueAndValidity();\n this.bulkForm.get('estimatedArrivalDate').updateValueAndValidity();\n });\n }\n\n public onClose(): void {\n this.dialogRef.close(false);\n }\n\n public onCancel(): void {\n this.dialogRef.close(false);\n }\n\n public async onSubmit(): Promise {\n this.bulkForm.markAllAsTouched();\n this.bulkForm.updateValueAndValidity();\n\n if (!this.bulkForm.valid) {\n return;\n }\n\n const {files, ...details}: {files: (File & {progress: number})[]} & MilestoneDetailsPayload['details'] = this.bulkForm.getRawValue();\n\n this.loadingSubject.next(true);\n\n const uploadedFiles = await this.getUploadedFiles(files, this.dialogData.requestId);\n\n const payload: MilestoneDetailsPayload = {\n milestoneIds: this.dialogData.selectedItems.map(sI => sI.id),\n details,\n asnFileIds: uploadedFiles\n };\n\n\n\n this.getSubmitRequestObservable(payload, this.dialogData.requestId, this.dialogData.printerId, this.dialogData.itemId)\n .subscribe(response => {\n // lest skip response data and just simply trigger reload in the parent element\n this.dialogRef.close(response);\n });\n }\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n\n \n\n \n
\n \n {{ error?.error?.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
\n \n {{ 'common.button.step-submit' | translate }}\n \n \n \n
\n
\n
\n","
\n
\n
\n \n \n
\n
\n {{'module.requests.finance.wpn-description' | translate}}:\n {{milestone.productItem.wpnDescription}}\n
\n
\n \n
\n
\n
\n
\n\n \n \n \n\n \n
\n \n {{label | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{data}}\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n
\n\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input, OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\n\nimport {STATUSES} from '../../../../../constants/request-statuses.constant';\nimport {MilestoneItem} from '../../../../../models/printer-item.model';\nimport {RequestsService} from '../../../../../services/requests.service';\nimport {Store} from '@ngrx/store';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\n\n@Component({\n selector: 'app-printer-milestone',\n templateUrl: './printer-milestone.component.html',\n styleUrls: ['./printer-milestone.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PrinterMilestoneComponent implements OnInit, OnDestroy {\n @Input() public milestone: MilestoneItem;\n @Input() public requestId: string;\n @Input() public printerId: number;\n @Input() public itemId: number;\n @Input() public milestoneIndex: number;\n @Input() public printerIndex: number;\n\n private formGroup: FormGroup;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n private milestoneFormSubscriptions: Subscription[] = [];\n @Input() public set milestoneForm(milestoneForm: FormGroup) {\n this.formGroup = milestoneForm;\n this.milestoneFormSubscriptions.forEach(s => s.unsubscribe());\n this.milestoneFormSubscriptions = [];\n\n this.milestoneFormSubscriptions.push(combineLatest([\n milestoneForm.get('estimatedArrivalDate').valueChanges,\n milestoneForm.get('estimatedArrivalDate').statusChanges\n .pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value, status]) => {\n\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: value,\n completed: this.milestone.details.completed\n });\n }));\n\n this.milestoneFormSubscriptions.push(combineLatest([\n milestoneForm.get('shipDate').valueChanges,\n milestoneForm.get('shipDate').statusChanges\n .pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value, status]) => {\n this.milestoneValuesChange.emit({\n shipDate: value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n completed: this.milestone.details.completed\n });\n })\n );\n }\n public get milestoneForm(): FormGroup {\n return this.formGroup;\n }\n\n @Input() public isDisabled: boolean;\n\n @Output() private milestoneCheck = new EventEmitter();\n @Output() private milestoneValuesChange = new EventEmitter();\n\n public status: { status: string };\n private ngUnsubscribe = new Subject();\n\n constructor(private requestsService: RequestsService,\n private store: Store) {}\n\n public ngOnInit(): void {\n this.status = {\n status: this.milestone.details.completed ? STATUSES.COMPLETED : 'IN_PROGRESS',\n };\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public uploadFileFunction = (file: File) => this.requestsService.uploadCardProductionWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n file\n );\n\n public removeFileFunction = (attachmentId: number) => this.requestsService.deleteCardProductionWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n attachmentId\n );\n\n public updateMilestoneWithUploadedFile(obj: {action: string; data: any}): void {\n if (obj.action === 'add') {\n this.milestone.asnFiles.push(obj.data);\n } else {\n const index = this.milestone.asnFiles.findIndex(item => item?.id === obj.data);\n this.milestone.asnFiles.splice(index, 1);\n }\n }\n\n public onMilestoneCheck(isChecked: boolean): void {\n this.milestoneCheck.emit(isChecked);\n }\n\n public get isSelectDisabled(): boolean {\n return this.status.status === STATUSES.COMPLETED;\n }\n\n public getTestId(elementId: string): string {\n return `printer_${this.printerIndex}_milestone_${this.milestoneIndex}_${elementId}`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, filter, takeUntil, takeWhile, tap, timeout } from 'rxjs/operators';\n\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { MilestoneItem, PrinterItemModel } from '../../../../models/printer-item.model';\nimport { ProductionRequestModel } from '../../../../models/production-request.model';\nimport { cardProdActions } from '../../../../reducers/request-details/card-prod.actions';\nimport {\n selectProductionRequestDetails,\n selectRequestDetailsLoading,\n} from '../../../../reducers/request-details/request-details.selectors';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { BulkChangeComponentData, BulkChangeComponentResponse } from './cp-bulk-change/bulk-change.interface';\nimport { CardProductionBulkChangeComponent } from './cp-bulk-change/cp-bulk-change.component';\n\n/**\n * Generic printer item model, used in current component\n */\ninterface PrinterItemModelView extends PrinterItemModel {\n isChecked: boolean;\n}\n\n@Component({\n selector: 'app-at-printer',\n templateUrl: './at-printer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AtPrinterComponent implements OnInit, OnDestroy, OnChanges {\n constructor(\n private store: Store,\n private requestsService: RequestsService,\n private cd: ChangeDetectorRef,\n private translate: TranslatePipe,\n private fb: FormBuilder,\n private modalService: ModalService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n ) { }\n\n @Input() public requestId: string;\n @Input() public isDisabled: boolean;\n\n public blankState = true;\n public printerItems: PrinterItemModelView[] = [];\n public printerForm: FormGroup;\n public opsNotesForm: FormGroup;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private operationNotesLoading = false;\n public request: ProductionRequestModel;\n private request$ = this.store.pipe(\n select(selectProductionRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n );\n private requestLoading$ = this.store.pipe(\n select(selectRequestDetailsLoading),\n takeUntil(this.ngUnsubscribe),\n );\n\n public ngOnInit(): void {\n this.buildOperationsNotesForm();\n\n this.request$.subscribe(request => {\n this.request = cloneDeep(request);\n\n this.opsNotesForm.get('operationsNotes').patchValue(request.details.operationsNotes, { emitEvent: false });\n this.toggleFormDisabling();\n });\n this.getPrinterData();\n this.setControlSubs();\n\n this.subscriptions.push(\n this.eventService.on(Events.AtPrinterSubmitValidated, (elementRef) => {\n if (this.isDisabled) {\n return;\n }\n if (this.operationNotesLoading) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.at-printer.operation-notes-unsaved'),\n this.translate.transform('module.requests.at-printer.operation-notes-unsaved-description')\n );\n return;\n }\n const isAllMilestonesCompleted =\n this.printerItems.every(printer => printer.milestones.every(milestone => milestone.details.completed));\n\n if (isAllMilestonesCompleted) {\n this.stepActionsService.addReason(elementRef,\n 'step-close', 'step-close', Events.StepClose, 'right');\n return;\n }\n\n this.messageService.showSystemMessage('error',\n this.translate.transform('module.requests.at-printer.mark-complete-required'),\n this.translate.transform('module.requests.at-printer.mark-complete-error')\n );\n\n })\n );\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.opsNotesForm?.disable({ emitEvent: false });\n this.printerForm?.disable({ emitEvent: false });\n } else {\n this.opsNotesForm?.enable({ emitEvent: false });\n this.printerForm?.enable({ emitEvent: false });\n }\n }\n\n private setControlSubs(): void {\n this.opsNotesForm?.get('operationsNotes').valueChanges\n .pipe(\n tap(() => {\n this.operationNotesLoading = true;\n }),\n debounceTime(1500),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(operationsNotes => {\n this.store.dispatch(cardProdActions.updateOperationsNotes({ requestId: this.requestId, operationsNotes }));\n this.requestLoading$.pipe(\n takeWhile((v) => v === true, true),\n timeout(30000),\n ).subscribe({\n complete: () => {\n this.operationNotesLoading = false;\n }\n });\n });\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onBulkClick(printerIdx: number): void {\n const selectedItems: MilestoneItem[] = this.printerItems[printerIdx].milestones.filter(value => value.isChecked);\n\n const dialogRef = this.modalService.openModal(\n CardProductionBulkChangeComponent,\n {\n requestId: this.requestId,\n itemId: this.printerItems[printerIdx].id,\n printerId: this.printerItems[printerIdx].printerDetails.id,\n selectedItems\n },\n 'bulk-change-modal'\n );\n\n dialogRef.afterClosed().subscribe(async dialogResponse => {\n // reload the data if the dialog was not just simply closed\n if (dialogResponse !== false) {\n const data = this.printerItems.map((p, i) => {\n if (i === printerIdx) {\n return dialogResponse;\n }\n return p;\n });\n this.blankState = !data.length;\n this.printerItems = [...this.extendMilestonesWithIsChecked(data)];\n\n this.formPDFArray();\n this.buildPrinterForm();\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.cd.markForCheck();\n }\n });\n }\n\n public onMarkComplete(printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n this.requestsService.updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n { completed: isCompleted ,\n shipDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.shipDate || null,\n estimatedArrivalDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.estimatedArrivalDate || null },\n ).subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, isCompleted);\n });\n }\n\n public getBulkLabel(printerIdx: number): string {\n if (this.printerItems[printerIdx].milestones.some(milestone => milestone.isChecked)) {\n return this.translate.transform('common.label.selected-of', {\n selected: this.getCheckedMilestones(printerIdx).length,\n all: this.getCheckableMilestones(printerIdx).length\n });\n }\n return this.translate.transform('common.label.select-all');\n }\n\n public isBulkDisabled(printerIdx: number): boolean {\n return this.getCheckedMilestones(printerIdx).length <= 1;\n }\n\n public isMarkAsCompletedDisabled(printerIdx: number, milestoneIdx: number): boolean {\n const shipDate = this.printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.shipDate`);\n const estimatedArrivalDate =\n this.printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.estimatedArrivalDate`);\n\n return !(shipDate.value && shipDate.valid) ||\n !(estimatedArrivalDate.value && estimatedArrivalDate.valid);\n }\n\n public onSelectAllChange(isChecked: boolean, printerIdx: number): void {\n this.printerItems[printerIdx].isChecked = isChecked;\n this.printerItems[printerIdx].milestones = this.printerItems[printerIdx].milestones.map(milestone => ({\n ...milestone,\n isChecked: !milestone?.details?.completed ? isChecked : false,\n }));\n }\n public getCheckableMilestones(printerIndex: number) {\n return this.printerItems[printerIndex].milestones.filter(milestone => !milestone.details.completed);\n }\n\n public onMilestoneCheck(isChecked: boolean, printerIdx: number, milestoneIdx: number): void {\n this.printerItems[printerIdx].milestones[milestoneIdx].isChecked = isChecked;\n\n const checkedMilestones = this.getCheckedMilestones(printerIdx);\n const checkableMilestones = this.getCheckableMilestones(printerIdx);\n if (checkedMilestones.length < checkableMilestones.length) {\n this.printerItems[printerIdx].isChecked = false;\n } else {\n // assume that checked number could not be greater than available.\n this.printerItems[printerIdx].isChecked = true;\n }\n }\n\n public onMilestoneValuesChange(details: any, printerIdx: number, milestoneIdx: number): void {\n this.printerForm.get('printerItems.' + printerIdx + '.milestones.' + milestoneIdx).get('shipDate').disable({\n emitEvent: false\n });\n this.printerForm.get('printerItems.' + printerIdx + '.milestones.' + milestoneIdx).get('estimatedArrivalDate').disable({\n emitEvent: false\n });\n this.requestsService.updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n details,\n ).subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, details.completed);\n });\n }\n\n private getPrinterData(): void {\n this.subscriptions.push(\n this.requestsService.getRequestPrinterWorkItems(this.requestId).subscribe(data => {\n this.blankState = !data.length;\n this.printerItems = Object.assign([], this.extendMilestonesWithIsChecked(data));\n\n this.formPDFArray();\n this.buildPrinterForm();\n\n this.cd.markForCheck();\n })\n );\n }\n\n private buildPrinterForm(): void {\n this.printerForm = this.fb.group({\n printerItems: this.fb.array(this.printerItems.map(printer =>\n this.fb.group({\n milestones: this.fb.array(printer.milestones.map(milestone =>\n this.fb.group({\n shipDate: this.fb.control({\n value: milestone.details.shipDate || null,\n disabled: this.isDisabled || milestone.details.completed}, {updateOn: 'blur'}\n ),\n estimatedArrivalDate: this.fb.control({\n value: milestone.details.estimatedArrivalDate || null,\n disabled: this.isDisabled || milestone.details.completed}, {updateOn: 'blur'}\n ),\n })))\n }))),\n });\n }\n\n private buildOperationsNotesForm(): void {\n this.opsNotesForm = this.fb.group({\n operationsNotes: null,\n });\n }\n\n private extendMilestonesWithIsChecked(printerItems: PrinterItemModel[]): PrinterItemModelView[] {\n return printerItems.map(value => ({\n ...value,\n isChecked: false,\n milestones: value.milestones.map(milestone => {\n milestone.isChecked = false;\n return milestone;\n })\n }));\n }\n\n private formPDFArray(): void {\n this.printerItems.forEach(printer => {\n const printerPDFItems: {fileName: string; id: number; type: string}[] = [];\n printer.purchaseOrderReferences.forEach(ref => {\n printerPDFItems.push({\n type: 'printer',\n id: ref.id,\n fileName: `PO #${ref.id}.pdf`\n });\n if (ref.sowCreated) {\n printerPDFItems.push({\n type: 'sow',\n id: ref.id,\n fileName: `SOW #${ref.id}.pdf`\n });\n }\n });\n printer.pdfReferences = printerPDFItems;\n });\n }\n\n private getCheckedMilestones(printerIdx: number): MilestoneItem[] {\n return this.printerItems[printerIdx].milestones.filter(milestone => milestone.isChecked);\n }\n\n private onSuccessMilestoneUpdate(data: any, printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n // Restrict updating with invalid data\n const currentMilestoneForm = this.printerForm.get('printerItems.' + printerIdx).get('milestones.' + milestoneIdx);\n\n if (!currentMilestoneForm.valid && !currentMilestoneForm.disabled) {\n return;\n }\n const milestone = this.printerItems[printerIdx].milestones[milestoneIdx];\n this.printerItems[printerIdx].milestones[milestoneIdx] = {\n ...milestone,\n details: data,\n isChecked: isCompleted ? false : milestone.isChecked\n };\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.buildPrinterForm();\n this.cd.markForCheck();\n }\n}\n","\n \n\n\n
\n \n
\n {{ 'module.requests.at-printer.printer' | translate }}:\n {{ printerItem.printerDetails.name }}\n
\n
\n
\n

{{ 'module.requests.at-printer.files' | translate }}

\n \n
\n
\n

{{ 'module.requests.at-printer.milestones' | translate }}

\n
\n \n \n
\n
\n \n \n\n \n \n
\n
\n
\n
\n\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n","import { distinctUntilChanged } from './distinctUntilChanged';\nexport function distinctUntilKeyChanged(key, compare) {\n return distinctUntilChanged((x, y) => compare ? compare(x[key], y[key]) : x[key] === y[key]);\n}\n","import {AbstractConstructor, Constructor} from '@angular/material/core/common-behaviors/constructor';\nimport {Subject, Observable} from 'rxjs';\nimport {OnDestroy} from '@angular/core';\n\nexport interface HasWithDestory {\n ngUnsubscribe$: Observable;\n ngOnDestroy(): void;\n}\n\nexport type CanWithDestroy = object;\n\nexport type HasWithDestroyCtor = Constructor & AbstractConstructor;\n\n// export function mixinHasDestroy>(base: T): HasWithDestroyCtor & T;\n\nexport function mixinHasDestroy | AbstractConstructor>(\n base: T\n): HasWithDestroyCtor & T {\n return class extends base implements OnDestroy {\n protected ngUnsubscribe: Subject;\n ngUnsubscribe$: Observable;\n\n constructor(...args: any[]) {\n super(...args);\n this.ngUnsubscribe = new Subject();\n this.ngUnsubscribe$ = this.ngUnsubscribe.asObservable();\n }\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n };\n}\nconst defaultClass = class {};\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/ban-types\ntype WithDestroyFn = | AbstractConstructor = typeof defaultClass>(\n base?: T\n) => HasWithDestroyCtor & T;\n\nexport const WithDestroy: WithDestroyFn = (base?) => (base ? mixinHasDestroy(base) : mixinHasDestroy(class {})) as unknown as any;\n","export type AmModeType = AmMode.design | AmMode.approval | AmMode.view | AmMode.final;\n\nexport enum AmMode {\n design = 'design',\n approval = 'approval',\n view = 'view',\n final = 'final-approval'\n}\n","import { HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { saveAs } from 'file-saver';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ARTWORK_STATUSES, ARTWORK_SUMMARY_STATUSES } from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport { RequestItemModel } from 'src/app/requests/models/production-request.model';\n\nimport { ArtworkFile } from '../../../requests/models/card-design-request.model';\nimport { selectRequestDetails } from '../../../requests/reducers/request-details/request-details.selectors';\nimport { API } from '../../constants/api.constants';\nimport { AmMode, AmModeType } from '../../models/am-mode.model';\nimport { ErrorHandlingHttpClient } from '../error-handling-http-client.service';\nimport { PitMsalService } from '../pit-msal.service';\nimport { UserService } from '../user.service';\nimport { UtilsService } from '../utils.service';\n\nexport interface ArtworkDownloadRequest {\n url: string;\n customHeaders?: any;\n}\n@Injectable()\nexport abstract class ApprovalManagerService {\n protected requestItemsSubject = new BehaviorSubject>([]);\n protected requestNameSubject = new BehaviorSubject('');\n\n protected constructor(\n protected store: Store,\n protected errorHandlingHttp: ErrorHandlingHttpClient,\n protected msalAuth: PitMsalService,\n protected userService: UserService\n ) {\n this.store.select(selectRequestDetails).subscribe(request => {\n try {\n this.onRequestChange(request);\n } catch (e) {\n setTimeout(() => {\n throw e;\n });\n }\n });\n }\n\n public abstract uploadVersion(requestItemId, artworkFileId, file: File): void;\n\n public abstract addVersionResolution(requestItemId, artworkFileId, versionId, status: string, comment?: string): void;\n\n abstract onRequestChange(request);\n\n public onRequestItemsChange(): Observable> {\n return this.requestItemsSubject.asObservable();\n }\n\n public onRequestNameChange(): Observable {\n return this.requestNameSubject.asObservable();\n }\n\n public abstract getRequestItemLabel(item: any): string;\n\n public abstract getArtworkFiles(item: any): Array;\n\n public abstract canApprove(...params: any): Promise;\n\n public abstract canUpload(...params: any): Promise;\n\n public abstract canAnnotate(...params: any): Promise;\n\n public getArtworkFilesByStatus(item: any, mode: AmModeType, status: typeof ARTWORK_STATUSES[keyof typeof ARTWORK_STATUSES]): Array {\n return this.getArtworkFiles(item).flatMap(af => {\n const finalVersion = this.getVersions(af, mode).filter(file => file.resolutions[0].status === status);\n return finalVersion.map(file => file?.attachment);\n });\n }\n\n getVersionDocUrl(version: any) {\n return API.attachmentDownload(this.getRequestId(), version.attachment.id);\n }\n\n getDownloadHeaders(version: any): {[key: string]: string} {\n // headers\n return {\n Authorization: 'Bearer ' + this.msalAuth.getAccount().idToken\n };\n }\n\n async getDownloadRequest(version: any): Promise {\n if (version.attachment.url) {\n return {\n url: version.attachment.url\n };\n }\n return {\n url: this.getVersionDocUrl(version),\n customHeaders: this.getDownloadHeaders(version)\n };\n }\n\n getVersionFileExtension(version: any): string {\n const fileName = version.attachment.fileName;\n const dotIndex = fileName.lastIndexOf('.');\n return dotIndex !== -1 ? fileName.substring(dotIndex + 1, fileName.length) : null;\n }\n\n downloadVersion(version: any, filename?: string) {\n const downloadUrl = version.attachment?.url || this.getVersionDocUrl(version);\n\n this.errorHandlingHttp\n .get>(downloadUrl, {\n observe: 'response',\n responseType: 'blob' as 'json'\n }).subscribe(resp => saveAs(resp.body, filename || UtilsService.getFileNameFromHeaders(resp.headers)));\n }\n\n public abstract saveComments(version: any, xfdfString: string): Observable;\n\n public abstract getComments(version: any): Observable;\n\n public abstract getRequestId();\n\n getVersions(selectedArtwork: ArtworkFile, mode: AmModeType = AmMode.design) {\n const versions = selectedArtwork.versions;\n let result = versions || [];\n if (mode === AmMode.final) {\n result = versions.filter(version => version.reviewFinalized || version.active);\n }\n return result;\n }\n\n getLatestResolution(version: any) {\n return version.resolutions[0];\n }\n\n public getArtworkFileStatuses(artworkFiles: any[]) {\n return artworkFiles.map(file => this.getLatestResolution(this.getActiveVersionForFile(file)).status);\n }\n\n public getOverallArtworkFilesStatus(artworkFilesStatuses: string[]): ARTWORK_SUMMARY_STATUSES {\n if (this.isAnyArtworkFileInProgress(artworkFilesStatuses)) {\n return ARTWORK_SUMMARY_STATUSES.inProgress;\n }\n if (this.areAllArtworkFilesApproved(artworkFilesStatuses)) {\n return ARTWORK_SUMMARY_STATUSES.approved;\n }\n return ARTWORK_SUMMARY_STATUSES.rejected;\n }\n\n private areAllArtworkFilesApproved(artworkFilesStatuses: string[]): boolean {\n return artworkFilesStatuses.every(status => status === ARTWORK_STATUSES.approved);\n }\n\n private isAnyArtworkFileInProgress(artworkFilesStatuses: string[]): boolean {\n return artworkFilesStatuses.some(status => status === ARTWORK_STATUSES.unreviewed);\n }\n\n private getActiveVersionForFile(file) {\n return this.getVersions(file).find(version => version.active);\n }\n\n public getRequestItems() {\n return this.requestItemsSubject.getValue();\n }\n\n public getRequestName() {\n return this.requestNameSubject.getValue();\n }\n}\n","import {HttpClient, HttpEventType} from '@angular/common/http';\nimport {Injectable, Optional} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {EMPTY, Observable} from 'rxjs';\nimport {filter, finalize, map, switchMap, take, takeWhile} from 'rxjs/operators';\nimport {isRequesterSelectorState} from 'src/app/reducers/creator/creator.selectors';\nimport {designerSelectorState} from 'src/app/reducers/designer/designer.selectors';\nimport {CardDesignRequestItemModel} from 'src/app/requests/models/card-design-request.model';\nimport {selectRequestCurrentStage} from 'src/app/requests/reducers/request-steps/request-steps.selectors';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\n\nimport {CARD_DESIGN_REQUEST} from '../../../../requests/constants/request-types.constant';\nimport {FileUploadService} from '../../../../requests/services/file-upload.service';\nimport {API} from '../../../constants/api.constants';\nimport {AmMode, AmModeType} from '../../../models/am-mode.model';\nimport {ErrorHandlingHttpClient} from '../../error-handling-http-client.service';\nimport {LoaderService} from '../../loader.service';\nimport {UserPermissionsService} from '../../user-permissions.service';\nimport {UserService} from '../../user.service';\nimport {ApprovalManagerService} from '../approval-manager.service';\nimport { PitMsalService } from '../../pit-msal.service';\nimport { RoleProviderAggregator } from 'src/app/requests/classes/role-provider-aggregator';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CardDesignApprovalManagerService extends ApprovalManagerService {\n private requestId: number;\n private requestItems: any[];\n\n private isDesigner$ = this.store.select(designerSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n map(({designerName, isDesigner}) => {\n if (\n isDesigner ||\n (!designerName && this.userPermissionsService.getUserRoles().includes(UserRoles.CARD_DESIGN_REQUEST.DESIGNER_GROUP))\n ) {\n return true;\n }\n\n return null;\n })\n );\n\n private isRequester$ = this.store.select(isRequesterSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n map(({isCreator}) => isCreator)\n );\n\n private requestCurrentStageCode$ = this.store.select(selectRequestCurrentStage).pipe(\n filter(v => v !== null),\n map(s => s.code)\n );\n\n constructor(\n protected http: HttpClient,\n protected store: Store,\n protected msalAuth: PitMsalService,\n protected userService: UserService,\n errorHandlingHttp: ErrorHandlingHttpClient,\n private loaderService: LoaderService,\n private fileUploadService: FileUploadService,\n private userPermissionsService: UserPermissionsService,\n @Optional() protected roleProviderAggregator: RoleProviderAggregator\n ) {\n super(store, errorHandlingHttp, msalAuth, userService);\n if(!roleProviderAggregator) {\n throw new Error('Role provider is not provided');\n }\n\n }\n\n public addVersionResolution(requestItemId, artworkFileId, versionId, status: string, comment?: string): void {\n this.loaderService.showLoader();\n\n const payload = comment ? {status, comment} : {status};\n\n this.errorHandlingHttp\n .post(API.cdAddVersionResolution(this.requestId, requestItemId, artworkFileId, versionId), payload)\n .pipe(finalize(() => this.loaderService.hideLoader()))\n .subscribe(requestItem => this.updateSingleItem(requestItem));\n }\n\n public uploadVersion(requestItemId, artworkFileId, file: File): void {\n this.loaderService.showLoader();\n this.fileUploadService\n .requestAttachmentUploadLink(this.requestId, 'artwork', file)\n .pipe(\n switchMap(uploadLink =>\n this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event =>\n event.type === HttpEventType.Response\n ? this.errorHandlingHttp.post(API.createCardDesignArtworkVersion(this.requestId, requestItemId, artworkFileId), null, {\n params: {uploadId: uploadLink.uploadId}\n })\n : EMPTY\n )\n )\n )\n )\n .pipe(finalize(() => this.loaderService.hideLoader()))\n .subscribe(requestItem => this.updateSingleItem(requestItem));\n }\n\n private updateSingleItem(requestItem) {\n const index = (this.requestItems || []).findIndex(item => item.id === requestItem.id);\n this.requestItems.splice(index, 1, requestItem);\n\n this.requestItemsSubject.next(this.requestItems);\n }\n\n onRequestChange(request) {\n if (request == null || request.type !== CARD_DESIGN_REQUEST) {\n return;\n }\n const requestItems = request.items.filter(item => item.artworkFiles?.length) || [];\n this.requestItems = requestItems;\n this.requestId = request.id;\n this.requestItemsSubject.next(requestItems);\n this.requestNameSubject.next(this.getName(request));\n }\n\n public getRequestItemLabel(requestItem: any): string {\n return requestItem.productDescription || requestItem.freeFormProductDescription;\n }\n\n public getArtworkFiles(requestItem: any): any[] {\n return (requestItem.artworkFiles || []).filter(file => !!file);\n }\n\n private getName(request: any) {\n return `${request.id} - ${request.name}`;\n }\n\n private isTrafficManager: boolean = null;\n setIsTrafficManager(isTrafficManager: boolean): void {\n this.isTrafficManager = isTrafficManager;\n }\n getIsTrafficManager(): boolean {\n return this.isTrafficManager;\n }\n\n async canApprove(mode: AmModeType): Promise {\n if (!(mode === AmMode.approval || mode === AmMode.final)) {\n return false;\n }\n const currentStage = await this.requestCurrentStageCode$.pipe(take(1)).toPromise();\n switch (currentStage) {\n case 'TM_REVIEW_2':\n // only traffic manager on tm-review-2\n return this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator);\n case 'CREATIVE_DIRECTOR_REVIEW':\n // only designer or designer group\n return this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.CREATIVE_DIRECTOR, this.roleProviderAggregator);\n case 'INT_EXT_CLIENT_PROOF':\n // only requested can approve\n return this.isRequester$.pipe(take(1)).toPromise();\n }\n return false;\n }\n\n async canUpload(mode: AmModeType): Promise {\n const isDesigner = await this.isDesigner$.pipe(take(1)).toPromise();\n const currentStage = await this.requestCurrentStageCode$.pipe(take(1)).toPromise();\n // Allow TMs to upload new versions in TM Review stages\n if(mode === AmMode.approval || mode === AmMode.view) {\n switch (currentStage) {\n case 'TM_REVIEW_2':\n // only traffic manager on tm-review\n return this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator);\n case 'TM_REVIEW':\n // only traffic manager on tm-review-2\n return this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator);\n }\n }\n if (mode !== AmMode.design) {\n return false;\n }\n return !!isDesigner && currentStage === 'DESIGN_PROCESS';\n }\n\n canAnnotate(): Promise {\n return this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.APPROVAL_MANAGER_ANNOTATE, this.roleProviderAggregator);\n }\n\n getRequestId() {\n return this.requestId;\n }\n\n saveComments(version: any, xfdfString: string): Observable {\n const blob = new Blob([xfdfString], {type: 'plain/text'});\n return this.fileUploadService.overwriteFile(version.commentFileUrl, blob as File);\n }\n\n getComments(version: any): Observable {\n return this.errorHandlingHttp\n .get(version.commentFileUrl, {\n responseType: 'text',\n observe: 'response'\n })\n .pipe(map(res => res.body));\n }\n\n public getRequestArtworkFilesStatuses(requestItem: CardDesignRequestItemModel): string[] {\n const artworkFiles = this.getArtworkFiles(requestItem);\n return this.getArtworkFileStatuses(artworkFiles);\n }\n}\n","import {Component, OnDestroy, OnInit, Optional, SkipSelf} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {combineLatest, Observable} from 'rxjs';\nimport {distinctUntilKeyChanged, map, pluck, take, takeUntil} from 'rxjs/operators';\nimport {RoleProviderAggregator} from 'src/app/requests/classes/role-provider-aggregator';\nimport {AbstractRoleUpdateAwareProvider} from 'src/app/requests/classes/role-update-aware-provider';\nimport {WithDestroy} from 'src/app/shared/components/with-destroy/with-destroy.mixin';\nimport {SpecificRoles} from 'src/app/shared/constants/user-roles.constant';\nimport { CardDesignApprovalManagerService } from 'src/app/shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport {UserService} from 'src/app/shared/services/user.service';\n\nimport {selectCardDesignRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\n\nexport const ASSIGNED_TM_FIELD_NAME = 'trafficManager';\n\n@Component({\n selector: 'app-card-design-host',\n template: `\n \n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `\n ],\n providers: [\n CardDesignApprovalManagerService\n ]\n})\nexport class CardDesignHostComponent extends WithDestroy(AbstractRoleUpdateAwareProvider) implements OnInit, OnDestroy {\n constructor(\n private roleProviderAggregator: RoleProviderAggregator,\n private store: Store,\n private userService: UserService,\n @Optional() @SkipSelf() private self: CardDesignHostComponent\n ) {\n super();\n }\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.roleProviderAggregator.removeRoleProvider(this);\n }\n ngOnInit(): void {\n this.roleProviderAggregator.addRoleProvider(this);\n }\n\n private trafficManagerAssigned(): Observable {\n return combineLatest([this.store.select(selectCardDesignRequestDetails), this.userService.getUserDetails$()]).pipe(\n map(([rd, u]) => UserService.userApplicable(u, rd.details[ASSIGNED_TM_FIELD_NAME])),\n map(isAssigned => (isAssigned ? SpecificRoles.ASSIGNED_TM : null))\n );\n }\n\n public async getRoles(): Promise {\n const specificRole = await this.trafficManagerAssigned().pipe(take(1)).toPromise();\n return [specificRole].filter(s => !!s);\n }\n\n roleUpdates$ = this.store.select(selectCardDesignRequestDetails).pipe(\n pluck('details'),\n distinctUntilKeyChanged(ASSIGNED_TM_FIELD_NAME),\n map(details => ({\n source: this,\n data: details[ASSIGNED_TM_FIELD_NAME]\n })),\n takeUntil(this.ngUnsubscribe$)\n );\n}\n","import { Injectable } from '@angular/core';\nimport { HttpEvent, HttpEventType, HttpClient } from '@angular/common/http';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\nimport { Observable, of } from 'rxjs';\nimport { API } from '../../shared/constants/api.constants';\nimport { UserModel } from '../../shared/models/user.model';\nimport { RequestModel } from '../models/request.model';\nimport { CardDesignRequestDetails, CardDesignRequestItemModel, CardDesignRequestModel } from '../models/card-design-request.model';\nimport { RequestsService } from './requests.service';\nimport { FileUploadService } from './file-upload.service';\nimport { switchMap } from 'rxjs/operators';\nimport { AssignPrepDesignerService } from '../components/shared/prep-artifact-base/prep-artifact-role.provider';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CardDesignService implements AssignPrepDesignerService{\n\n constructor(private errorHandlingHttp: ErrorHandlingHttpClient,\n private httpClient: HttpClient,\n private fileUploadService: FileUploadService,\n private requestService: RequestsService) {}\n\n public uploadArtworkAttachment(requestId: number | string, file: File): Observable {\n return this.requestService.uploadArtworkAttachment(requestId, file);\n }\n\n public deleteArtworkAttachment(requestId: number | string, attachmentId: number): Observable {\n return this.errorHandlingHttp.delete(API.requestDeleteArtworkAttachment(requestId, attachmentId));\n }\n\n public getProductUpc(productUpc: string): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.get(API.getProductUpc(productUpc));\n }\n\n public updateDesigner(requestId: number, designer: UserModel): Observable {\n return this.errorHandlingHttp.put(API.cdUpdateDesigner(requestId), designer);\n }\n\n public updateCsJob(requestId: number, csJob: string): Observable {\n return this.errorHandlingHttp.put(API.cdUpdateCsJobs(requestId), {value: csJob});\n }\n\n public deleteDesigner(requestId: number): Observable {\n return this.errorHandlingHttp.delete(API.cdUpdateDesigner(requestId));\n }\n\n public updateTmDatesApproval(requestId: number, dates: Partial): Observable> {\n return this.errorHandlingHttp.put>(API.cdUpdateTmDatesApproval(requestId), dates);\n }\n\n public updateFinalArtDueDate(requestId: number, date: string): Observable {\n return this.errorHandlingHttp.put(API.cdUpdateFinalArtDueDate(requestId), { value: date });\n }\n\n public deleteItem(requestId: number, requestItemId: number): Observable {\n return this.errorHandlingHttp.delete(API.cdDeleteItem(requestId, requestItemId));\n }\n\n public updateArtPathNotes(requestId: number, data: any): Observable {\n return this.errorHandlingHttp.put(API.updateArtPathNotes(requestId), data);\n }\n\n public updateTmReview2Stage(\n requestId: number,\n cdReviewRequired: boolean,\n quantityOfFiles: number\n ): Observable {\n return this.errorHandlingHttp.put(\n API.cdTmReview2StageData(requestId),\n { value: cdReviewRequired, cdReviewRequired, quantityOfFiles},\n );\n }\n\n public uploadArtworkForRequestItem(\n file: File,\n requestId: string,\n requestItemId: number\n ): Observable> {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'artwork', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createArtwork(requestId, requestItemId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n private createArtwork(requestId: string, requestItemId: number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(API.createCardDesignItemArtwork(requestId, requestItemId), null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public deleteArtworkItem(requestId: number | string, itemId: string | number, attachmentId: number): Observable {\n return this.errorHandlingHttp.delete(API.deleteArtworkItem(requestId, itemId, attachmentId));\n }\n\n prepArtifactsDesigner(requestId: number, data: UserModel): Observable {\n return this.errorHandlingHttp.put(API.cardDesignPrepArtifactsDesigner(requestId), data);\n }\n}\n","\n {{ 'module.requests.card-design.details.partner-details' | translate }}\n
\n
\n \n
\n
\n \n
\n
\n\n","import { Component, OnDestroy } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { selectDesignLineOfBusiness, selectRegions } from '../../../../../../reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-card-design-partner-details',\n templateUrl: './card-design-partner-details.component.html',\n styleUrls: ['./card-design-partner-details.component.scss']\n})\nexport class CardDesignPartnerDetailsComponent implements OnDestroy {\n private ngUnsubscribe = new Subject();\n\n regions$ = this.store.select(selectRegions).pipe(filter(v => v.length > 0)).pipe(\n takeUntil(this.ngUnsubscribe)\n );\n designLineOfBusiness$ = this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)).pipe(\n takeUntil(this.ngUnsubscribe)\n );\n\n get form() {\n return this.controlContainer.control;\n }\n\n constructor(\n private controlContainer: ControlContainer,\n private store: Store,\n ) {}\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n \n \n {{item.name}}\n \n
\n\n \n \n {{inputHint}}\n \n\n \n \n {{warningMessage}}\n \n\n \n \n {{getErrorMessage()}}\n \n
\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component, DoCheck,\n Input,\n OnInit,\n Optional,\n Self,\n ViewEncapsulation\n} from '@angular/core';\nimport {RadioGroupInputValue} from '../../models/radioGroupInputValue';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MessageService } from '../../services/message-service.service';\n\n@Component({\n selector: 'app-radio-group-form',\n templateUrl: './radio-group-form.component.html',\n styleUrls: ['./radio-group-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class RadioGroupFormComponent implements ControlValueAccessor, OnInit, DoCheck {\n\n @Input() public buttonValues: RadioGroupInputValue[];\n @Input() public label?: string;\n @Input() public inputHint?: string;\n @Input() public hintIconExist?: boolean;\n @Input() public errorMessage?: string;\n @Input() public testId?: string;\n @Input() public warningMessage?: string;\n @Input() public isWarningVisible?: boolean;\n @Input() public isRequired?: boolean;\n @Input() private defaultSelectedIndex?: number;\n @Input() public isLabelInColumn = true;\n public isDisabled: boolean;\n\n private oldTouched = null;\n\n onChange: any = (event) => {\n this.ctrl?.control.setValue(event);\n };\n onTouched: any = () => {};\n\n constructor(@Self() @Optional() public ctrl: NgControl,\n private cd: ChangeDetectorRef, private messageService: MessageService) {\n if (this.ctrl) {\n this.ctrl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n if (\n typeof this.ctrl.value !== 'boolean' &&\n typeof this.defaultSelectedIndex === 'number' &&\n this.buttonValues?.length\n ) {\n this.selectItem(this.buttonValues[this.defaultSelectedIndex].code);\n }\n }\n\n ngDoCheck() {\n if (this.ctrl.touched !== this.oldTouched) {\n this.oldTouched = this.ctrl.touched;\n }\n this.cd.markForCheck();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n writeValue(value) {}\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n selectItem(value) {\n if (!this.isDisabled) {\n this.ctrl?.control.setValue(value);\n }\n }\n\n setDisabledState?(disabled: boolean) {\n this.isDisabled = disabled;\n }\n\n\n public getErrorMessage(): string {\n if (!this.errorMessage) {\n if (this.ctrl?.invalid) {\n return this.messageService.getControlErrorMessage(this.ctrl.errors);\n } return null;\n }\n return this.errorMessage;\n }\n}\n","
\n {{ 'module.requests.card-design.details.artwork' | translate }}\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n {{ 'module.requests.card-design.details.art-addition-details' | translate }}\n *\n :\n \n
\n \n
\n
\n
\n
\n","import {Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {ControlContainer} from '@angular/forms';\nimport {Store} from '@ngrx/store';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {combineLatest, Subject} from 'rxjs';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {\n selectArtLocationTypes,\n selectDesignSourceTypes,\n selectDesignLineOfBusiness,\n selectRegions\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {CardDesignService} from 'src/app/requests/services/card-design.service';\nimport {FILE_TYPES} from 'src/app/shared/constants/upload-restrictions.constants';\nimport {CodeNameModel} from 'src/app/shared/models/code-name.model';\nimport {FILE_SIZE_RESTRICTIONS} from 'src/app/shared/models/upload-file-restrictions.model';\n\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {CardDesignRequestModel} from '../../../../../models/card-design-request.model';\n\n@Component({\n selector: 'app-card-design-artwork',\n templateUrl: './card-design-artwork.component.html',\n styleUrls: ['./card-design-artwork.component.scss']\n})\nexport class CardDesignArtworkComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n public regionsList: CodeNameModel[] = [];\n public designLineOfBusinessList: CodeNameModel[] = [];\n public artLocationList: CodeNameModel[] = [];\n public designSourceTypesList: CodeNameModel[] = [];\n\n private _request: CardDesignRequestModel;\n @Input() set request(request: CardDesignRequestModel) {\n this._request = request;\n\n this.attachments = request?.details?.artFiles ? request?.details?.artFiles : [];\n this.isArtworkReplacesExisting = request?.details?.artworkReplacesExisting || false;\n }\n\n get request(): CardDesignRequestModel {\n return this._request;\n }\n\n @Input() isDisabled: boolean;\n\n get form() {\n return this.controlContainer.control;\n }\n private refData$ = combineLatest([\n this.store.select(selectRegions).pipe(filter(v => v.length > 0)),\n this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)),\n this.store.select(selectArtLocationTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectDesignSourceTypes).pipe(filter(v => v.length > 0))\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n @Input() public isArtworkLocationRequired = false;\n @Input() isArtworkChangesRequired: boolean;\n @Input() isArtworkReplacesExisting: boolean;\n @Output() public onUpdateAttachments = new EventEmitter();\n\n public attachments: any[] = [];\n public CUSTOMER_ARTWORK = {\n add: 'add',\n replace: 'replace'\n };\n\n constructor(\n private controlContainer: ControlContainer,\n private utilsService: UtilsService,\n private store: Store,\n private cardDesignService: CardDesignService\n ) {}\n\n public updateAttachements(obj: {action: string; data: any}): void {\n if (obj.action === this.CUSTOMER_ARTWORK.add) {\n this.attachments.push(obj.data);\n } else {\n const index = this.attachments.findIndex(item => item?.id === obj.data);\n this.attachments.splice(index, 1);\n }\n this.onUpdateAttachments.next(this.attachments);\n\n this.form.get('designSourceTypeCode').updateValueAndValidity({onlySelf: true, emitEvent: true});\n }\n\n ngOnInit(): void {\n this.refData$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(([regions, designLineOfBusiness, artLocations, designSourceTypes]) => {\n this.regionsList = regions;\n this.designLineOfBusinessList = this.utilsService.getParentChild(cloneDeep(designLineOfBusiness));\n this.artLocationList = artLocations;\n this.designSourceTypesList = designSourceTypes;\n });\n }\n\n public uploadArtwork = (file: File) => this.cardDesignService.uploadArtworkAttachment(this.request.id, file);\n\n public removeArtwork = (attachmentId: number) => this.cardDesignService.deleteArtworkAttachment(this.request.id, attachmentId);\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n \n \n \n {{ 'Item #' + (requestItemIndex + 1) }}\n \n \n \n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{\n item.get('productDescription')?.value || item.get('freeFormProductDescription').value\n }}\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n \n {{'module.requests.finance.product-owner' | translate}}:\n \n \n \n {{PO?.firstName}} {{PO?.lastName}}\n , \n \n \n
\n
\n
\n
\n {{'module.requests.card-design.details.product-description' | translate}}*:\n {{item?.get('productDescription').value}}\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n\n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { debounceTime, filter, takeUntil } from 'rxjs/operators';\nimport { CardDesignEvents } from 'src/app/shared/services/event-service.service';\n\nimport { selectDielines } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from '../../../../../../shared/models/code-name.model';\nimport { Events, EventService } from '../../../../../../shared/services/event-service.service';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { CardDesignService } from '../../../../../services/card-design.service';\nimport { RequestsService } from '../../../../../services/requests.service';\n\n@Component({\n selector: 'app-cd-item',\n templateUrl: './cd-item.component.html',\n styleUrls: ['./cd-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CdItemComponent implements OnInit, OnDestroy, DoCheck {\n @Input() canDuplicate = true;\n @Input() public requestItemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public isExpanded: boolean;\n // tslint:disable-next-line:no-unused-variable\n @Input() private itemTouched: boolean;\n @Output() public removeItem: EventEmitter = new EventEmitter();\n @Output() public copyItem: EventEmitter = new EventEmitter();\n @Output() public openedChanged: EventEmitter = new EventEmitter();\n\n public get item() {\n return this.controlContainer.control;\n }\n\n public dielines: CodeNameModel[] = [];\n public isMerchantLoading: Subject = new Subject();\n public merchantSearch: Array<{id: number; name: string; fcmsId?: string}> = [];\n isProductUpcLoading = false;\n\n private ngUnsubscribe = new Subject();\n private eventSub: Subscription;\n\n constructor(\n public controlContainer: ControlContainer,\n private utilsService: UtilsService,\n private cardDesignService: CardDesignService,\n private cd: ChangeDetectorRef,\n private store: Store,\n private requestsService: RequestsService,\n private eventService: EventService\n ) {}\n\n public ngOnInit(): void {\n this.setProductUpcSubscription(this.item as FormGroup);\n this.setMerchantSpecificSubscription();\n this.setMerchantSubscription();\n this.store\n .select(selectDielines)\n .pipe(filter(v => !!v.length))\n .subscribe(data => {\n this.dielines = data;\n this.cd.markForCheck();\n });\n\n this.eventSub = this.eventService.on(Events.RequestDetailsValidation, () => {\n this.cd.markForCheck();\n });\n this.eventService.on(CardDesignEvents.TmReviewSubmitValidated, () => {\n this.cd.markForCheck();\n });\n }\n\n private oldTouched: boolean;\n private oldDisabled: boolean;\n private oldValue: boolean;\n private oldStatus: string;\n\n ngDoCheck(): void {\n if (this.controlContainer?.status !== this.oldStatus) {\n this.oldStatus = this.controlContainer?.status;\n return this.cd.markForCheck();\n }\n if (this.controlContainer?.touched !== this.oldTouched) {\n this.oldTouched = this.controlContainer.touched;\n return this.cd.markForCheck();\n }\n if (this.controlContainer?.disabled !== this.oldDisabled) {\n this.oldDisabled = this.controlContainer?.disabled;\n return this.cd.markForCheck();\n }\n if (this.controlContainer.value !== this.oldValue) {\n this.oldValue = this.controlContainer?.value;\n return this.cd.markForCheck();\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.eventSub.unsubscribe();\n }\n\n public onRemove(): void {\n this.removeItem.emit(this.requestItemIndex);\n }\n\n public onCopy(): void {\n this.copyItem.emit(this.requestItemIndex);\n }\n\n public getMerchants(name: string): void {\n this.isMerchantLoading.next(true);\n this.requestsService.getMerchants(name).subscribe(\n (data: Array<{id: number; name: string}>) => {\n this.merchantSearch = [...data];\n this.cd.detectChanges();\n this.isMerchantLoading.next(false);\n },\n error => {\n this.isMerchantLoading.next(false);\n }\n );\n }\n\n private setProductUpcSubscription(form: FormGroup): void {\n form\n ?.get('productUpc')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .pipe(debounceTime(1000))\n .subscribe({\n next: (val) => {\n if (val) {\n this.getProductUPC(val);\n } else {\n this.clearProductUPCInfo();\n this.cd.markForCheck();\n }\n },\n complete: () => {\n this.isProductUpcLoading = false;\n this.cd.markForCheck();\n }\n });\n }\n\n private getProductUPC(value: string): void {\n this.isProductUpcLoading = true;\n this.cd.markForCheck();\n this.cardDesignService.getProductUpc(value).subscribe(\n data => {\n const item = {\n productOwners: data?.productOwners || [],\n productDescription: data?.productDescription || null,\n denom: data?.denom || null,\n currencyType: data?.currency || null\n };\n this.item.patchValue(item);\n this.cd.markForCheck();\n },\n () => {\n this.item.get('productUpc').setErrors({upcError: true});\n this.cd.markForCheck();\n this.clearProductUPCInfo();\n },\n () => {\n this.isProductUpcLoading = false;\n this.cd.markForCheck();\n }\n );\n }\n\n private clearProductUPCInfo(): void {\n this.isProductUpcLoading = false;\n this.cd.markForCheck();\n [this.item.get('productOwners'), this.item.get('productDescription'), this.item.get('denom'), this.item.get('currencyType')].forEach(\n (control: AbstractControl) => control?.reset()\n );\n }\n\n private setMerchantSubscription(): void {\n this.item\n .get('merchant')\n .get('name')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data?.id && data?.name) {\n this.onMerchantSelect(data);\n } else {\n this.item.get('merchant').get('mdmId')?.reset();\n this.item.get('merchant').get('fcmsId')?.reset();\n this.item.get('merchant').get('country')?.reset();\n (this.item.get('merchant').get('accountManagers') as FormArray).clear();\n }\n this.cd.markForCheck();\n });\n }\n\n public onMerchantSelect(event): void {\n this.item.get('merchant').get('mdmId')?.setValue(event.id);\n this.item.get('merchant').get('fcmsId')?.reset();\n this.item.get('merchant').get('country')?.reset();\n (this.item.get('merchant').get('accountManagers') as FormArray).clear();\n this.requestsService\n .getMerchantInfo(event.id)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n this.setMerchantInfo(data);\n this.cd.markForCheck();\n });\n }\n private setMerchantInfo(merchantData): void {\n merchantData.accountManagers?.forEach(item =>\n (this.item.get('merchant').get('accountManagers') as FormArray).push(new FormControl(item))\n );\n this.item.get('merchant').get('country').setValue(merchantData.country.description);\n this.item.get('merchant').get('mdmId').setValue(merchantData.id);\n this.item.get('merchant').get('fcmsId').setValue(merchantData.fcmsId);\n }\n\n public getMerchantLabel(option): string {\n return this.utilsService.getMerchantName(option, this.item.get('merchant') as FormGroup);\n }\n\n private setMerchantSpecificSubscription(): void {\n merge(of(this.item.get('merchantSpecific').value), this.item.get('merchantSpecific').valueChanges)\n .pipe(takeUntil(this.ngUnsubscribe))\n .pipe(filter(v => v !== null))\n .subscribe(value => {\n if (value) {\n this.item.get('merchant.name').setValidators(UtilsService.merchantValidator());\n } else {\n this.item.get('merchant.name').clearValidators();\n }\n this.item.get('merchant.name').updateValueAndValidity();\n this.cd.markForCheck();\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { ActionsSubject, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport moment from 'moment';\nimport { BehaviorSubject, combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\n\nimport {\n lazyLoadArtLocationsTypes,\n lazyLoadDesignLineOfBusiness,\n lazyLoadDesignSourceTypes,\n lazyLoadDielines,\n lazyLoadRegions,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectArtLocationTypes,\n selectDesignLineOfBusiness,\n selectDesignSourceTypes,\n selectRegions,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { DateService } from '../../../../../shared/services/date-service.service';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { INTEGER_PATTERN } from '../../../../constants/request-details.constants';\nimport { selectCardDesignRequestDetails, selectAdditionalOtherContacts } from '../../../../reducers/request-details/request-details.selectors';\nimport { CardDesignService } from '../../../../services/card-design.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { UserModel } from '../../../../../shared/models/user.model';\n\n@Component({\n selector: 'app-design-details',\n templateUrl: './design-details.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DesignDetailsComponent implements OnInit, OnChanges, OnDestroy, RequestDetailsStageController {\n @Input() public requestId: string | number;\n @Input() public isDisabled: boolean;\n\n @Output() private deleteDraft = new EventEmitter();\n\n private masterFormStream = new BehaviorSubject(null);\n public set masterForm(masterForm: FormGroup) {\n this.masterFormStream.next(masterForm);\n }\n public get masterForm() {\n return this.masterFormStream.getValue();\n }\n public detailsForm: FormGroup;\n public requestDetails: any = {};\n public minFinalDate: Date;\n public regionsList: CodeNameModel[] = [];\n public designLineOfBusinessList: any[] = [];\n public artLocationList: CodeNameModel[] = [];\n public designSourceTypesList: CodeNameModel[] = [];\n public isArtworkLocationRequired = false;\n public isArtworkChangesRequired = false;\n public isArtworkReplacesExisting: boolean;\n public CUSTOMER_ARTWORK = {\n add: 'add',\n replace: 'replace'\n };\n public additionalStakeholdersDetailsControls: FormArray;\n public requestItemsControls: FormArray;\n public attachments: any[] = [];\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public newItemIndex: number;\n private isShowSavedMessage = false;\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private formSubscriptions: Subscription[] = [];\n private refData$ = combineLatest([\n this.store.select(selectRegions).pipe(filter(v => v.length > 0)),\n this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)),\n this.store.select(selectArtLocationTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectDesignSourceTypes).pipe(filter(v => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n\n constructor(\n private utilsService: UtilsService,\n private fb: FormBuilder,\n private store: Store,\n private actions: ActionsSubject,\n private translate: TranslatePipe,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private cardDesignService: CardDesignService,\n private activatedRoute: ActivatedRoute,\n public dateService: DateService,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {}\n\n public ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadRegions());\n this.store.dispatch(lazyLoadDesignLineOfBusiness());\n this.store.dispatch(lazyLoadArtLocationsTypes());\n this.store.dispatch(lazyLoadDielines());\n this.store.dispatch(lazyLoadDesignSourceTypes());\n\n this.activatedRoute.params.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.setInitialRequestDetails();\n this.buildMasterForm();\n this.addEventSubscriptions();\n this.getRefData();\n });\n\n this.store.select(selectCardDesignRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .pipe(filter(request => request !== null && request?.type === 'CARD_DESIGN_REQUEST'))\n .subscribe(details => {\n this.setInitialRequestDetails(details);\n this.buildMasterForm();\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', 'The request was successfully saved', '');\n this.isShowSavedMessage = false;\n }\n });\n\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.masterForm.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n public async validate(): Promise {\n if(this.masterForm.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n this.masterForm.markAllAsTouched();\n this.cd.markForCheck();\n return Promise.resolve(this.masterForm.valid);\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n if (this.isDisabled) {\n this.masterForm?.disable();\n } else {\n this.masterForm?.enable();\n }\n this.cd.markForCheck();\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private setInitialRequestDetails(requestDetails?: any): void {\n const isAnotherRequest = this.requestDetails?.id !== requestDetails?.id;\n this.requestDetails = requestDetails ? cloneDeep(requestDetails) : {};\n\n this.attachments = this.attachments && !isAnotherRequest ? this.attachments\n : (requestDetails?.details?.artFiles ? cloneDeep(requestDetails?.details?.artFiles) : []);\n if(this.requestDetails?.details) {\n this.requestDetails.details.artFiles = this.attachments;\n }\n this.isArtworkChangesRequired = requestDetails?.details?.artworkChangesNeeded || false;\n this.isArtworkReplacesExisting = requestDetails?.details?.artworkReplacesExisting || false;\n this.minFinalDate = moment(requestDetails?.details?.firstRoundArtDeliveryDate || Date.now())\n .add(1, 'day').toDate();\n\n\n if (!requestDetails?.details) {\n this.requestDetails.details = {\n id: null,\n firstRoundArtDeliveryDate: null,\n finalArtDueDate: null,\n lineOfBusiness: null,\n regionCode: null,\n incommPrinting: null,\n designSourceTypeCode: null,\n artworkLocationTypeCode: null,\n artworkDescription: null,\n artworkChangesNeeded: null,\n artworkChangesDescription: null,\n artworkReplacesExisting: this.isArtworkReplacesExisting,\n artworkReplacementFilename: null,\n artworkReplacementDescription: null,\n artworkAddedToExisting: !this.isArtworkReplacesExisting,\n artworkAdditionDescription: null,\n datesApproved: false,\n contacts: []\n };\n }\n if (!requestDetails?.items?.length) {\n this.requestDetails.items = [{\n id: null, name: null, status: null,\n currencyType: null, denom: null, dielineType: null,\n finalArtFilePath: null, freeFormProductDescription: null,\n merchant: {name: null, mdmId: null, fcmsId: null, country: null, accountManagers: [], id: null},\n merchantSpecific: null, notes: null, productDescription: null, productOwners: [],\n productUpc: null, upcRequired: null, fscLogoRequiredInArt: null,\n }];\n }\n }\n\n private buildMasterForm(): void {\n this.formSubscriptions.forEach(sub => sub.unsubscribe());\n\n this.masterForm = this.fb.group({\n details: this.fb.group({\n id: this.fb.control(this.requestDetails.details.id),\n firstRoundArtDeliveryDate: this.fb.control(this.requestDetails.details.firstRoundArtDeliveryDate, Validators.required),\n finalArtDueDate: this.fb.control(this.requestDetails.details.finalArtDueDate),\n lineOfBusiness: this.fb.control(this.requestDetails.details.lineOfBusiness, Validators.required),\n regionCode: this.fb.control(this.requestDetails.details.regionCode, Validators.required),\n incommPrinting: this.fb.control(this.requestDetails.details.incommPrinting, Validators.required),\n designSourceTypeCode: this.fb.control(this.requestDetails.details.designSourceTypeCode, Validators.required),\n artworkLocationTypeCode: this.fb.control(this.requestDetails.details.artworkLocationTypeCode),\n artworkDescription: this.fb.control(this.requestDetails.details.artworkDescription),\n artworkChangesNeeded: this.fb.control(this.requestDetails.details.artworkChangesNeeded),\n artworkChangesDescription: this.fb.control(this.requestDetails.details.artworkChangesDescription),\n artworkReplacesExisting: this.fb.control(this.requestDetails.details.artworkReplacesExisting),\n artworkReplacementFilename: this.fb.control(this.requestDetails.details.artworkReplacementFilename),\n artworkReplacementDescription: this.fb.control(this.requestDetails.details.artworkReplacementDescription),\n artworkAddedToExisting: this.fb.control(!this.requestDetails.details.artworkReplacesExisting),\n artworkAdditionDescription: this.fb.control(this.requestDetails.details.artworkAdditionDescription),\n datesApproved: this.fb.control(this.requestDetails.details.datesApproved),\n contacts: this.fb.array([])\n }),\n items: this.fb.array([])\n });\n\n this.detailsForm = this.masterForm.get('details') as FormGroup;\n this.additionalStakeholdersDetailsControls = this.detailsForm.get('contacts') as FormArray;\n this.requestItemsControls = this.masterForm.get('items') as FormArray;\n\n if (this.requestDetails?.details?.contacts?.length) {\n this.requestDetails.details.contacts.forEach(item => {\n this.pushStakeholderContact(item);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n\n cloneDeep(this.requestDetails.items).forEach(item => {\n this.pushNewRequestItem(item);\n });\n\n this.setChoiceSubscriptions();\n\n if (this.isDisabled) {\n this.masterForm?.disable();\n } else {\n this.masterForm?.enable();\n }\n }\n\n private getRefData(): void {\n this.refData$.subscribe(([regions, designLineOfBusiness, artLocations, designSourceTypes]) => {\n this.regionsList = regions;\n this.designLineOfBusinessList = this.utilsService.getParentChild(cloneDeep(designLineOfBusiness));\n this.artLocationList = artLocations;\n this.designSourceTypesList = designSourceTypes;\n this.cd.markForCheck();\n });\n\n combineLatest([\n this.refData$,\n this.masterFormStream.pipe(filter(v => v !== null)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(([[, , , designSourceTypes], masterForm]) => {\n if (this.requestDetails?.details?.designSourceTypeCode) {\n const selectedDesignSourceType = designSourceTypes.find(\n item => item.code.toLowerCase() === this.requestDetails.details.designSourceTypeCode.toLowerCase());\n if (selectedDesignSourceType) {\n masterForm.get('details').get('designSourceTypeCode').setValue(selectedDesignSourceType.code);\n }\n } else {\n masterForm.get('details').get('designSourceTypeCode').setValue(designSourceTypes[0].code);\n }\n\n this.cd.markForCheck();\n });\n }\n\n private setChoiceSubscriptions(): void {\n this.formSubscriptions.push(\n this.detailsForm.get('designSourceTypeCode').valueChanges\n .pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(value => {\n if (value.toLowerCase() === 'client') {\n if (!this.attachments.length) {\n this.detailsForm.get('artworkLocationTypeCode').setValidators(Validators.required);\n } else {\n this.detailsForm.get('artworkLocationTypeCode').clearValidators();\n }\n\n this.detailsForm.get('artworkDescription').setValidators(Validators.required);\n this.isArtworkLocationRequired = true;\n } else {\n this.detailsForm.get('artworkLocationTypeCode').clearValidators();\n this.detailsForm.get('artworkDescription').clearValidators();\n this.isArtworkLocationRequired = false;\n }\n this.detailsForm.get('artworkLocationTypeCode').updateValueAndValidity({emitEvent: false});\n this.detailsForm.updateValueAndValidity();\n this.cd.markForCheck();\n }),\n\n this.detailsForm.get('artworkChangesNeeded').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n if (value) {\n this.detailsForm.get('artworkChangesDescription').setValidators(Validators.required);\n this.isArtworkChangesRequired = true;\n } else {\n this.detailsForm.get('artworkChangesDescription').clearValidators();\n this.isArtworkChangesRequired = false;\n }\n\n this.detailsForm.get('artworkChangesDescription').updateValueAndValidity();\n this.cd.markForCheck();\n }),\n\n this.detailsForm.get('artworkReplacesExisting').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.isArtworkReplacesExisting = value;\n if (this.detailsForm.get('artworkAddedToExisting').value !== !value) {\n this.detailsForm.get('artworkAddedToExisting').setValue(!value);\n }\n if (value) {\n this.detailsForm.get('artworkReplacementFilename').setValidators(Validators.required);\n this.detailsForm.get('artworkAdditionDescription').clearValidators();\n }\n\n this.detailsForm.get('artworkAdditionDescription').updateValueAndValidity();\n this.detailsForm.get('artworkReplacementFilename').updateValueAndValidity();\n this.cd.markForCheck();\n }),\n\n this.detailsForm.get('artworkAddedToExisting').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.isArtworkReplacesExisting = !value;\n if (this.detailsForm.get('artworkReplacesExisting').value !== !value) {\n this.detailsForm.get('artworkReplacesExisting').setValue(!value);\n }\n if (value) {\n this.detailsForm.get('artworkAdditionDescription').setValidators(Validators.required);\n this.detailsForm.get('artworkReplacementFilename').clearValidators();\n }\n\n this.detailsForm.get('artworkAdditionDescription').updateValueAndValidity();\n this.detailsForm.get('artworkReplacementFilename').updateValueAndValidity();\n this.cd.markForCheck();\n })\n );\n }\n\n public finalDateFilter(d: Date | null): boolean {\n const minDate = moment(this.masterForm.get('details.firstRoundArtDeliveryDate').value ||\n this.requestDetails.details.firstRoundArtDeliveryDate).add(1, 'day').toDate();\n return moment(d)\n .diff(moment(minDate).startOf('day')) >= 0;\n }\n\n public checkFinalDate(date: Date): void {\n this.minFinalDate = moment(date).add(1, 'day').toDate();\n }\n\n public uploadArtwork = (file: File) => this.cardDesignService.uploadArtworkAttachment(this.requestId, file);\n\n public removeArtwork = (attachmentId: number) => this.cardDesignService.deleteArtworkAttachment(this.requestId, attachmentId);\n\n public updateAttachements(obj: {action: string; data: any}): void {\n if (obj.action === this.CUSTOMER_ARTWORK.add) {\n this.attachments.push(obj.data);\n } else {\n const index = this.attachments.findIndex(item => item?.id === obj.data);\n this.attachments.splice(index, 1);\n }\n\n this.detailsForm.get('designSourceTypeCode').updateValueAndValidity({onlySelf: true, emitEvent: true});\n }\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact(null);\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n private pushStakeholderContact(contact: any): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n\n this.additionalStakeholdersDetailsControls.push(item);\n }\n // NOSONAR\n private pushNewRequestItem(item: any): void {\n const detailsItem = this.fb.group({\n id: this.fb.control(item?.id),\n currencyType: this.fb.control(item?.currencyType || null, Validators.required),\n denom: this.fb.control(item?.denom || null, Validators.required),\n dielineType: this.fb.control(item?.dielineType || null, Validators.required),\n freeFormProductDescription: this.fb.control(\n item?.freeFormProductDescription || null,\n [Validators.maxLength(255), Validators.required],\n ),\n merchant: this.fb.group({\n id: this.fb.control(item?.merchant?.id || null),\n mdmId: this.fb.control(item?.merchant?.mdmId || null),\n name: this.fb.control(\n {\n name: item?.merchant?.name || null,\n id: item?.merchant?.mdmId || null,\n fcmsId: item?.merchant?.fcmsId\n }),\n fcmsId: this.fb.control(item?.merchant?.fcmsId || null),\n country: this.fb.control(item?.merchant?.country || null),\n accountManagers: this.fb.array(item?.merchant?.accountManagers || [])\n }),\n merchantSpecific: this.fb.control(item?.merchantSpecific || false, Validators.required),\n productOwners: this.fb.control(item?.productOwners || null),\n productDescription: this.fb.control(item?.productDescription || null),\n productUpc: this.fb.control(item?.productUpc || null, Validators.pattern(INTEGER_PATTERN)),\n upcRequired: this.fb.control(\n typeof item?.upcRequired === 'boolean'\n ? item?.upcRequired\n : null,\n Validators.required,\n ),\n fscLogoRequiredInArt: this.fb.control(\n typeof item?.fscLogoRequiredInArt === 'boolean'\n ? item?.fscLogoRequiredInArt\n : null,\n Validators.required,\n ),\n });\n\n this.requestItemsControls.push(detailsItem);\n }\n\n public onAddRequestItem(): void {\n this.pushNewRequestItem({});\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(index);\n }\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.at(index) as FormGroup).getRawValue());\n\n item.id = null;\n item.merchant.id = null;\n item.merchant.name = item.merchant.name?.name || null;\n\n this.pushNewRequestItem(item);\n this.updateNewItemIndex();\n }\n\n private addEventSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }),\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n this.saveRequest();\n }),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n if (this.masterForm.valid) {\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n } else {\n this.utilsService.logInvalidControls(this.masterForm);\n this.messageService.showSystemMessage('error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message')\n );\n this.masterForm.markAllAsTouched();\n (this.masterForm.controls.items as FormArray).controls.forEach(item => item.markAllAsTouched());\n this.cd.detectChanges();\n }\n }),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.isShowSavedMessage = false;\n this.saveRequest();\n this.requestController.waitForRequestSave().subscribe(saved => {\n if (saved) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment\n }\n });\n }\n });\n })\n );\n }\n\n saveRequest(): void {\n const requestDetails = {...this.requestDetails, ...this.masterForm.getRawValue()};\n requestDetails.items.forEach(item => {\n item.merchant.name = item?.merchant?.name?.name;\n });\n requestDetails.details.firstRoundArtDeliveryDate =\n moment(requestDetails.details.firstRoundArtDeliveryDate).toISOString();\n requestDetails.details.finalArtDueDate = moment(requestDetails.details.finalArtDueDate).toISOString();\n requestDetails.details.contacts = requestDetails.details.contacts.filter(i => i !== null);\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({\n requestId: this.requestId,\n details: requestDetails,\n excludeParts: ['contacts']\n }));\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n\n onUpdateAttachments(files: any[]) {\n this.attachments = files;\n }\n}\n","
\n
\n
\n {{'module.requests.details.dates' | translate}}\n
\n
\n \n
\n
\n \n
\n
\n
\n\n \n \n\n \n \n\n \n
\n {{'module.requests.text.request-items' | translate}}\n \n\n \n\n
\n \n
\n\n
\n\n \n
\n \n
\n {{'module.requests.details.stakeholder-details' | translate}}\n
\n
{{'module.requests.details.stakeholder-details' | translate}}
\n
\n \n
\n \n
\n
\n \n
\n","import {AbstractConstructor, Constructor} from '@angular/material/core/common-behaviors/constructor';\nimport {Actions} from '@ngrx/effects';\nimport {Store} from '@ngrx/store';\nimport {BehaviorSubject, combineLatest, from, merge, Observable, of, Subscription} from 'rxjs';\nimport {find, map, scan, shareReplay, take, takeUntil, timeout} from 'rxjs/operators';\nimport {RequestModel, TrafficManagerAwareRequestModel} from 'src/app/requests/models/request.model';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {loadRequestStepsFailure, loadRequestStepsSuccess} from 'src/app/requests/reducers/request-steps/request-steps.actions';\nimport {UserModel} from 'src/app/shared/models/user.model';\n\nimport {LoaderService} from '../../../../shared/services/loader.service';\nimport {OnInit} from '@angular/core';\nimport {ASSIGNED_TM_FIELD_NAME} from '../../request-types/card-design/card-design-host/card-design-host.component';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {UserPermissionsService} from '../../../../shared/services/user-permissions.service';\nimport {UserService} from 'src/app/shared/services/user.service';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface CanTmAssignment {\n request: RequestModel;\n ngUnsubscribe: Observable;\n isStepDisabledSubject: BehaviorSubject;\n}\n\n\nexport interface HasTmAssignment {\n onAssignTm(value: UserModel | null): void;\n request$: Observable;\n assignTmForm: FormGroup;\n assignTmControl: FormControl;\n canAssignTm$: Observable;\n canClearTm$: Observable;\n ngOnInit(): void;\n}\nexport type HasTmAssignmentCtor = Constructor & AbstractConstructor;\n\nexport function mixinTmAssignment>(base: T): HasTmAssignmentCtor & T;\n\nexport function mixinTmAssignment>(base: T): HasTmAssignmentCtor & T {\n return class extends base implements OnInit {\n _loaderService: LoaderService;\n _store: Store;\n _actions: Actions;\n _fb: FormBuilder;\n _userPermissionsService: UserPermissionsService;\n _userService: UserService;\n\n request: RequestModel;\n ngUnsubscribe: Observable;\n\n assignTmForm!: FormGroup;\n assignTmControl!: FormControl;\n canAssignTm$!: Observable;\n canClearTm$!: Observable;\n isStepDisabledSubject: BehaviorSubject;\n\n constructor(...args: any[]) {\n super(...args);\n this._loaderService = args.find(a => a instanceof LoaderService);\n this._store = args.find(a => a instanceof Store);\n this._actions = args.find(a => a instanceof Actions);\n this._fb = args.find(a => a instanceof FormBuilder);\n this._userPermissionsService = args.find(a => a instanceof UserPermissionsService);\n this._userService = args.find(a => a instanceof UserService);\n\n this.canAssignTm$ = of(false);\n this.canClearTm$ = of(false);\n }\n public onAssignTm(value: UserModel | null): void {\n this._loaderService.showLoader();\n this._store.dispatch(\n requestDetailsActions.changeRequestTrafficManager({\n trafficManager: value,\n skipLoading: true\n })\n );\n this._actions\n .pipe(\n timeout(60000),\n find(\n a =>\n [\n requestDetailsActions.changeRequestTrafficManagerFailure.type,\n loadRequestStepsSuccess.type as string,\n loadRequestStepsFailure.type as string\n ].includes(a.type),\n ),\n take(1),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe({\n next: () => {},\n complete: () => this._loaderService.hideLoader()\n });\n }\n\n ngOnInit(): void {\n this.request$\n .pipe(\n scan(\n ({subscriptions}, request) => {\n subscriptions.forEach(s => s.unsubscribe());\n return {request, subscriptions: []};\n },\n {request: null, subscriptions: []} as {request: TrafficManagerAwareRequestModel; subscriptions: Subscription[]}\n ),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(({request, subscriptions}) => {\n const assignedTm = request.details[ASSIGNED_TM_FIELD_NAME];\n this.assignTmForm = this._fb.group({\n assignedTm: this._fb.control({\n value: assignedTm,\n disabled: true\n })\n });\n\n this.assignTmControl = this.assignTmForm.get('assignedTm') as FormControl;\n\n this.canAssignTm$ = merge(of(this.assignTmControl.value), this.assignTmControl.valueChanges).pipe(\n map(() => this.assignTmControl.value?.userName !== assignedTm?.userName),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n this.canClearTm$ = merge(of(this.assignTmControl.value), this.assignTmControl.valueChanges).pipe(\n map(() => !(assignedTm == null)),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n\n subscriptions.push(\n combineLatest([\n merge(of(this.isStepDisabledSubject.value), this.isStepDisabledSubject.asObservable()),\n from(this._userPermissionsService.isActionAvailable(UserRoles[request.type].CAN_ASSIGN_TM))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([isStepDisabled, isTmDesigner]) => {\n if (isTmDesigner && !isStepDisabled) {\n this.assignTmControl.enable();\n } else {\n this.assignTmControl.disable();\n }\n }),\n // Auto-assign current user in case if not set\n combineLatest([\n this._userService.getUserDetails$(),\n this._userPermissionsService.isActionAvailable(UserRoles[request.type].TM_AUTO_ASSIGN),\n this.isStepDisabledSubject.asObservable(),\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([u, shouldAutoAssign, isStepDisabled]) => {\n if (!isStepDisabled && this.assignTmControl.value == null && shouldAutoAssign) {\n this.assignTmControl.setValue(u);\n }\n })\n );\n });\n }\n };\n}\n\n\nexport const WithTmAssignment = >(base: T): HasTmAssignmentCtor & T =>\n mixinTmAssignment(\n class extends base implements CanTmAssignment {\n request: RequestModel;\n ngUnsubscribe: Observable;\n isStepDisabledSubject: BehaviorSubject = new BehaviorSubject(null);\n }\n );\n","import {AbstractConstructor, Constructor} from '@angular/material/core/common-behaviors/constructor';\n\nexport type ExpandInitializationStrategy = 'first' | 'all';\n\nexport interface HasPanelExpandState {\n panelExpandInitializationStrategy: ExpandInitializationStrategy;\n expandedPanels: Set;\n initExpandedPanels(panels: unknown[]);\n onPanelExpandChange(itemIndex: number, expanded: boolean): void;\n}\n\nexport interface CanPanelExpandState {\n panelExpandInitializationStrategy: ExpandInitializationStrategy;\n}\n\nexport type HasPanelExpandStateCtor = Constructor & AbstractConstructor;\n\nexport function mixinHasPanelExpandState>(base: T): HasPanelExpandStateCtor & T;\n\n/**\n * @example\n * \n */\nexport function mixinHasPanelExpandState>(base: T): HasPanelExpandStateCtor & T {\n return class extends base {\n private expandedPanelsInitialized = false;\n expandedPanels: Set = new Set([0]);\n\n initExpandedPanels(panels: unknown[]) {\n if (this.expandedPanelsInitialized) {\n return;\n }\n this.expandedPanels = new Set([]);\n this.expandedPanelsInitialized = true;\n if (this.panelExpandInitializationStrategy === 'first' && panels.length > 0) {\n this.expandedPanels.add(0);\n }\n if (this.panelExpandInitializationStrategy === 'all' && panels.length > 0) {\n panels.forEach((v, k) => this.expandedPanels.add(k));\n }\n }\n onPanelExpandChange(itemIndex: number, expanded: boolean) {\n if (expanded) {\n this.expandedPanels.add(itemIndex);\n } else {\n this.expandedPanels.delete(itemIndex);\n }\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const WithPanelExpanded = (panelExpandInitializationStrategy: ExpandInitializationStrategy): HasPanelExpandStateCtor =>\n mixinHasPanelExpandState(\n class implements CanPanelExpandState {\n panelExpandInitializationStrategy = panelExpandInitializationStrategy;\n }\n );\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\n\nimport { INTEGER_PATTERN } from '../constants/request-details.constants';\nimport { CardDesignRequestItemModel } from '../models/card-design-request.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CardDesignFormService {\n\n constructor(private fb: FormBuilder) {}\n\n itemFieldset(item: CardDesignRequestItemModel) {\n return this.fb.group({\n id: this.fb.control(item?.id || null),\n currencyType: this.fb.control(item?.currencyType || null, Validators.required),\n denom: this.fb.control(item?.denom || null, Validators.required),\n dielineType: this.fb.control(item?.dielineType || null, Validators.required),\n freeFormProductDescription: this.fb.control(\n item?.freeFormProductDescription || null,\n [Validators.maxLength(255), Validators.required],\n ),\n merchant: this.fb.group({\n id: this.fb.control(item?.merchant?.id || null),\n mdmId: this.fb.control(item?.merchant?.mdmId || null),\n name: this.fb.control(\n {\n name: item?.merchant?.name || null,\n id: item?.merchant?.mdmId || null,\n fcmsId: item?.merchant?.fcmsId || null\n }),\n fcmsId: this.fb.control(item?.merchant?.fcmsId || null),\n country: this.fb.control(item?.merchant?.country || null),\n accountManagers: this.fb.array(item?.merchant?.accountManagers || [])\n }),\n merchantSpecific: this.fb.control(item?.merchantSpecific || false, Validators.required),\n productOwners: this.fb.control(item?.productOwners || null),\n productDescription: this.fb.control(item?.productDescription || null),\n productUpc: this.fb.control(item?.productUpc || null, Validators.pattern(INTEGER_PATTERN)),\n upcRequired: this.fb.control(\n typeof item?.upcRequired === 'boolean'\n ? item?.upcRequired\n : null,\n Validators.required,\n ),\n fscLogoRequiredInArt: this.fb.control(\n typeof item?.fscLogoRequiredInArt === 'boolean'\n ? item?.fscLogoRequiredInArt\n : null,\n Validators.required,\n ),\n artworkFiles: this.fb.control(item?.artworkFiles || null),\n });\n }\n\n}\n","import {ChangeDetectorRef, Directive, Input, OnDestroy, OnInit, Optional, Output, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {combineLatest, EMPTY, merge, Observable, of, ReplaySubject, Subject} from 'rxjs';\nimport { exhaustMap, map, takeUntil, tap, share } from 'rxjs/operators';\n\nimport {AbstractRoleUpdateAwareProvider} from '../../requests/classes/role-update-aware-provider';\nimport {UserPermissionsService} from '../services/user-permissions.service';\nimport {EventEmitter} from '@angular/core';\n\n/**\n * @usageNotes\n *\n * To remove from template a component inaccessible due to permissions use directive\n * on ng-template component\n * @example\n * \n *
...
\n *
...
\n *
\n * ```\n * Content of ng-template will not be rendered\n */\n\n@Directive({\n selector: '[appUserPermissionsV2]',\n exportAs: 'appUserPermissionsV2'\n})\nexport class UserPermissionsV2Directive implements OnInit, OnDestroy {\n public isAllowed: boolean;\n\n private userPermissionsSubject = new ReplaySubject(1);\n private ngUnsubscribe = new Subject();\n\n constructor(\n private viewContainer: ViewContainerRef,\n private userPermissionsService: UserPermissionsService,\n private cd: ChangeDetectorRef,\n @Optional() private roleProvider: AbstractRoleUpdateAwareProvider,\n @Optional() private templateRef?: TemplateRef\n ) {\n this.roleUpdates$ = combineLatest([\n this.userPermissionsSubject.asObservable(),\n merge(of(null), this.roleProvider?.roleUpdates$ || EMPTY)\n ]).pipe(\n map(([roles]) => roles),\n takeUntil(this.ngUnsubscribe)\n );\n\n this.isAllowed$ = merge(\n of(false),\n this.roleUpdates$.pipe(\n exhaustMap(permission => this.userPermissionsService.isActionAvailable(permission, this.roleProvider)),\n tap(() => this.cd.detectChanges()),\n share(),\n )\n // this.roleUpdates$.pipe(\n // exhaustMap(permission => this.userPermissionsService.isActionAvailable(permission, this.roleProvider)),\n // tap(() => {\n // this.cd.detectChanges();\n // }),\n // shareReplay({\n // bufferSize: 1,\n // refCount: true,\n // }),\n // )\n ).pipe(takeUntil(this.ngUnsubscribe));\n }\n\n @Input('appUserPermissionsV2') set appUserPermissions(permission: string | string[]) {\n const arrayPermission = [permission].flat();\n this.userPermissionsSubject.next(arrayPermission);\n }\n\n private roleUpdates$: Observable;\n isAllowed$: Observable;\n\n @Output() allowedChanged = new EventEmitter(true);\n\n ngOnInit() {\n // in case if used with the template\n this.isAllowed$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(isAllowed => {\n if (this.templateRef) {\n this.updateContainerRef(isAllowed);\n }\n this.allowedChanged.emit(isAllowed);\n });\n }\n\n private async updateContainerRef(isAllowed) {\n if (isAllowed) {\n if (this.templateRef) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n }\n this.isAllowed = true;\n } else {\n if (this.templateRef) {\n this.viewContainer.clear();\n }\n this.isAllowed = false;\n }\n this.cd.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport {API} from 'src/app/shared/constants/api.constants';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {\n SelectSearchDropdownOption\n} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\n\nexport type UserValueModel = 'model';\nexport type UserValueString = 'userName';\nexport type UserValueVariant = UserValueString | UserValueModel;\n\nexport interface UserSearch {\n nameBeginning?: string;\n groupKeys?: string[] | string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UsersService {\n constructor(private httpClient: HttpClient) {}\n\n public getUsers$(userSearch: UserSearch): Observable {\n const {nameBeginning, groupKeys} = userSearch;\n\n let queryParams = new HttpParams();\n\n queryParams = queryParams.append('nameBeginning', nameBeginning ? nameBeginning : '');\n\n const normalizedGroups = [groupKeys || []].flat();\n\n normalizedGroups.forEach(groupKey => {\n queryParams = queryParams.append('groupKeys', groupKey);\n });\n\n return this.httpClient.get(`${API.getUsers}`, {\n params: queryParams\n });\n }\n\n private makeLabel(user: UserModel) {\n return [user.firstName, user.lastName].filter(v => v).join(' ');\n }\n\n private makeValue(user: UserModel, valueAs: UserValueVariant) {\n if (valueAs === 'model') {\n return user;\n }\n if (valueAs === 'userName') {\n return user.userName;\n }\n return null;\n }\n\n public getUserOptions$(userSearch: UserSearch, valueAs: 'userName'): Observable[]>;\n public getUserOptions$(userSearch: UserSearch, valueAs: 'model'): Observable[]>;\n public getUserOptions$(\n userSearch: UserSearch,\n valueAs: UserValueVariant = 'userName'\n ) {\n return this.getUsers$(userSearch).pipe(\n map(users =>\n users.map(user => ({\n label: this.makeLabel(user),\n value: this.makeValue(user, valueAs),\n extras: [user.userName]\n })) as any[]\n )\n );\n }\n}\n","
\n \n {{ legend }}\n \n
\n
\n
\n \n
\n
\n
\n
\n \n \n {{ 'common.button.assign' | translate }}\n \n
\n
\n \n \n {{ 'common.button.reset' | translate }}\n \n
\n
\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DoCheck,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, FormBuilder, NgControl } from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\n\nimport { RequestsService } from '../../../requests/services/requests.service';\nimport { UserModel } from '../../models/user.model';\nimport { UtilsService } from '../../services/utils.service';\nimport { UsersService } from '../../../requests/services/users.service';\nimport {\n SelectSearchDropdownComponent,\n userNameComparator,\n} from '../select-search-dropdown/select-search-dropdown.component';\n\n@Component({\n selector: 'app-user-assignment',\n templateUrl: './app-user-assignment.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserAssignmentComponent implements OnInit, OnDestroy, ControlValueAccessor, DoCheck {\n @Input() set isDisabled(isDisabled: boolean) {\n if (isDisabled) {\n this.ctrl.control?.disable();\n } else {\n this.ctrl.control?.enable();\n }\n }\n @Input() isRequired = true;\n @Input() hideLegend?: boolean;\n @Input() testId = 'designer_stage_assignment';\n @Input() canAssign = false;\n @Input() assignVisible = false;\n @Input() clearVisible = false;\n @Input() canClear = false;\n @Input() legend;\n @Input() label;\n @Input() userRoles: string[];\n @ViewChild('selectSearchDropdown', {\n read: SelectSearchDropdownComponent\n })\n selectSearchDropdown: SelectSearchDropdownComponent;\n objectComparators = [userNameComparator];\n @Output() assign: EventEmitter = new EventEmitter();\n @Output() unset: EventEmitter = new EventEmitter();\n\n public users$!: Observable>;\n private ngUnsubscribe = new Subject();\n private touchedOld = null;\n\n constructor(\n private requestsService: RequestsService,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n public utilsService: UtilsService,\n private usersService: UsersService,\n @Self() @Optional() public ctrl?: NgControl\n ) {\n if (this.ctrl) {\n this.ctrl.valueAccessor = this;\n }\n }\n\n writeValue(obj: unknown): void {\n this.selectSearchDropdown?.ItemsAssignSelect.writeValue(obj);\n }\n registerOnChange(fn: () => void): void {\n this.selectSearchDropdown?.ItemsAssignSelect.registerOnChange(fn);\n }\n registerOnTouched(fn: () => object): void {\n this.selectSearchDropdown?.ItemsAssignSelect.registerOnTouched(fn);\n }\n setDisabledState?(isDisabled: boolean): void {\n this.selectSearchDropdown?.ItemsAssignSelect.setDisabledState(isDisabled);\n }\n\n ngOnInit(): void {\n this.users$ = this.usersService.getUserOptions$({\n groupKeys: this.userRoles\n }, 'model');\n }\n\n ngDoCheck(): void {\n if (this.ctrl.touched !== this.touchedOld) {\n this.touchedOld = this.ctrl.touched;\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n {{ 'module.requests.upload.artwork-files' | translate }}\n\n \n \n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ARTWORK_SUMMARY_STATUSES } from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport { ApprovalManagerService } from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {AmMode, AmModeType} from '../../../models/am-mode.model';\n\n@Component({\n selector: 'app-artwork-item-status-header',\n templateUrl: './artwork-item-status-header.component.html',\n styleUrls: ['./artwork-item-status-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ArtworkItemStatusHeaderComponent {\n @Input() artworkFiles: any[];\n @Input() artworkFilesCount: number;\n @Input() approvalManager: ApprovalManagerService;\n @Input() mode: AmModeType = AmMode.design;\n\n public get getSummaryStatus(): ARTWORK_SUMMARY_STATUSES {\n const fileStatuses = this.approvalManager.getArtworkFileStatuses(this.artworkFiles);\n return this.approvalManager.getOverallArtworkFilesStatus(fileStatuses);\n }\n\n}\n","
\n {{ 'module.requests.upload.upload-artwork-files' | translate }}\n
\n
\n
\n
\n {{ uploaderLabel }}:\n \n {{ files.length }}\n \n
\n \n \n \n \n  \n or drag and drop them here\n \n
\n \n \n\n \n \n \n\n
\n \n
\n \n {{ file?.name }}\n \n

\n\n

\n \n V{{ file.versions.length }} – {{ file.currentVersion.latestResolution.status }}\n \n \n \n {{'common.approval-manager.approved-at' | translate: {stage: file.currentVersion.latestResolution.stageType} }}\n \n {{'common.approval-manager.approved-by' | translate: {reviewer: file.currentVersion.latestResolution.reviewer} }}, {{ file.currentVersion.latestResolution.createdAt | date : 'MM/dd/yyyy, hh:mm a'}}\n \n

\n
\n
\n
\n \n \n \n \n
\n \n \n \n {{'common.approval-manager.approval-manager'| translate}}\n \n \n
\n
\n\n \n
\n \n
\n \n {{ file?.name || file?.fileName }}\n \n

\n \n {{ utilsService.getFormattedBytes(file.size !== undefined ? file.size : file.fileSize) }}\n \n \n {{ file?.progress + '%' }}\n \n

\n

\n \n {{ file.status }}\n \n \n {{ file.reviewer.firstName }} {{ file.reviewer.lastName }}\n {{ file.updatedAt | date: 'MM/dd/yyyy, hh:mm a' }}\n \n

\n

\n {{ 'module.requests.upload.rejection-reason' | translate | uppercase }}:\n {{ file.rejectionReason }}\n

\n \n
\n
\n Upload failed\n \n \n \n
\n
\n
\n
\n \n \n {{ moreLabel }}\n {{ 'common.label.upload-more' | translate }}\n \n
\n
\n\n
\n \n \n {{\n 'common.restrictions.file-size-exceeded'\n | translate: {size: restrictionOptions.fileSize.sizeNumber + restrictionOptions.fileSize.sizeType}\n }}\n \n
\n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component, EventEmitter, Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional, Output, Self, SimpleChanges,\n ViewEncapsulation\n} from '@angular/core';\nimport {FileUploaderComponent} from '../file-uploader/file-uploader.component';\nimport {ControlContainer, FormBuilder} from '@angular/forms';\nimport {PopDesignService} from '../../../requests/services/pop-design.service';\nimport {RequestsService} from '../../../requests/services/requests.service';\nimport {UtilsService} from '../../services/utils.service';\nimport {MessageService} from '../../services/message-service.service';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {LoaderService} from '../../services/loader.service';\nimport {EventService} from '../../services/event-service.service';\nimport {Store} from '@ngrx/store';\nimport {\n ArtworkFile,\n ArtworkFileResolution,\n ArtworkFileVersion, CardDesignRequestItemModel, CardDesignRequestModel, VersionAwareArtworkFile\n} from '../../../requests/models/card-design-request.model';\nimport {PopDesignRequestItemModel, PopDesignRequestModel} from '../../../requests/models/pop-design-request.model';\nimport {AmMode, AmModeType} from '../../models/am-mode.model';\nimport {ApprovalManagerService} from '../../services/approval-manager/approval-manager.service';\nimport { Observable, Subscription } from 'rxjs';\nimport {HttpEvent} from '@angular/common/http';\nimport {requestDetailsActions} from '../../../requests/reducers/request-details/request-details.actions';\nimport {CardDesignService} from '../../../requests/services/card-design.service';\nimport {UserRoles} from '../../constants/user-roles.constant';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { FileUpdateHandlerFn } from './app-artwork-item.model';\n\nexport interface ApprovalManagerClickEvent {\n requestItem: CardDesignRequestItemModel|PopDesignRequestItemModel;\n artworkFile: ArtworkFile;\n}\n\n@Component({\n selector: 'app-artwork-item',\n templateUrl: './app-artwork-item.component.html',\n styleUrls: ['./app-artwork-item.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppArtworkItemComponent extends FileUploaderComponent implements OnInit, OnChanges, OnDestroy {\n @Input() setValuesStrategy = 'setValue';\n @Input() public set item(item: CardDesignRequestItemModel|PopDesignRequestItemModel) {\n this.requestItem = item;\n\n this.artworkFiles = this.getNormalizedArtworks(item);\n if(this.setValuesStrategy) {\n this?.controlContainer?.control?.[this.setValuesStrategy]({\n artworkFiles: this.artworkFiles,\n });\n this?.controlContainer?.control.updateValueAndValidity();\n }\n }\n @Input() request: CardDesignRequestModel|PopDesignRequestModel;\n @Input() isDisabled: boolean;\n @Input() isAMDisabled: boolean;\n @Input() itemIndex: number;\n @Input() isApprovalManagerAvailable = true;\n @Input() isDisplayFileStatus = true;\n @Input() isUploadEnabled = true;\n @Input() shouldShowSummaryStatus: boolean;\n @Input() mode: AmModeType = AmMode.design;\n @Input() approvalManagerService: ApprovalManagerService;\n @Input() removeArtworksFileFunction?: (itemId: any, attachmentId: number) => Observable;\n @Input() requestTypeService: CardDesignService|PopDesignService;\n @Output() approvalManagerClick = new EventEmitter();\n @Input() testId = 'artwork_item';\n @Input() isRemoveDisabled = false;\n\n private requestItem: CardDesignRequestItemModel|PopDesignRequestItemModel;\n UserRoles = UserRoles;\n usePageMaskLoader = false;\n artworkFiles: Array<\n ArtworkFile & {\n currentVersion: ArtworkFileVersion & {\n latestResolution: ArtworkFileResolution;\n };\n }>;\n\n private readonly defaultFilesUpdateHandler: FileUpdateHandlerFn = (val) => {\n this.store.dispatch(requestDetailsActions.updateRequestDetailsSuccess({\n data: {\n ...this.request,\n items: (this.request.items as Array).map(item => {\n if (item.id === val.data.id) {\n return {...item, artworkFiles: [ ...this.getNormalizedArtworks(val.data) ]};\n }\n return item;\n }),\n }\n }));\n };\n private fileUpdateSubscription: Subscription;\n private _fileUpdateHandler = this.defaultFilesUpdateHandler;\n\n @Input() set fileUpdateHandler(handler: FileUpdateHandlerFn) {\n this._fileUpdateHandler = handler;\n if(this.fileUpdateSubscription) {\n this.fileUpdateSubscription.unsubscribe();\n }\n this.subscribeFileUpdateHandler();\n }\n get fileUpdateHandler() {\n return this._fileUpdateHandler;\n }\n\n constructor(\n fb: FormBuilder,\n @Optional() @Self() public controlContainer: ControlContainer,\n /**\n * Uploader component deps\n */\n requestsService: RequestsService,\n utilsService: UtilsService,\n cd: ChangeDetectorRef,\n messageService: MessageService,\n translate: TranslatePipe,\n loaderService: LoaderService,\n eventService: EventService,\n private store: Store,\n ) {\n super(requestsService, utilsService, cd, messageService, translate, loaderService, eventService);\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.subscribeFileUpdateHandler();\n }\n\n private subscribeFileUpdateHandler() {\n if(this.fileUpdateSubscription) {\n // this.fileUpdateSubscription.unsubscribe(); // todo: redo with unsubscribe\n }\n this.fileUpdateSubscription = this.onUpdateFiles.subscribe(this.fileUpdateHandler.bind(this)); // .pipe(takeUntil(this.ngUnsubscribe))\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.item || changes.mode) {\n this.artworkFiles = this.getNormalizedArtworks(this.requestItem);\n }\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n uploadFunction = (file: File): Observable> => this.requestTypeService.uploadArtworkForRequestItem(file, this.requestId as string, this.requestItem.id);\n\n openApprovalManager(file: ArtworkFile) {\n this.approvalManagerClick.emit({requestItem: this.requestItem, artworkFile: file});\n }\n\n viewFile(index: number): void{\n this.requestService.getBlob(this.artworkFiles[index].currentVersion.attachment.url).subscribe(data => {\n const blob = new Blob([data.body], {type: data.headers.get('content-type') || 'application/pdf'});\n const link = URL.createObjectURL(blob);\n window.open(link, '_blank');\n });\n }\n\n removeArtworkFiles(index: number): void{\n const attachmentId = this.artworkFiles[index].id;\n this.loaderService.showLoader();\n\n this.removeArtworksFileFunction(this.requestItem.id, attachmentId)\n .pipe(\n this.triggerActionHistoryUpdate(),\n )\n .subscribe(() => {\n this.artworkFiles.splice(index, 1);\n const itemCopy = cloneDeep(this.requestItem);\n itemCopy.artworkFiles = this.artworkFiles;\n\n\n this.onUpdateFiles.emit({action: 'delete', data: itemCopy});\n this.loaderService.hideLoader();\n this.cd.detectChanges();\n });\n }\n\n resetTouchedStatus() {\n this.controlContainer?.control.markAsUntouched();\n }\n\n public getNormalizedArtworks(item: CardDesignRequestItemModel|PopDesignRequestItemModel): VersionAwareArtworkFile[] {\n return this.approvalManagerService.getArtworkFiles(item).map(af => {\n const versions = this.approvalManagerService.getVersions(af, this.mode);\n const currentVersion = versions.find(v => v.active === true);\n const latestResolution = this.approvalManagerService.getLatestResolution(currentVersion);\n\n return {\n ...af,\n versions,\n currentVersion: {\n ...currentVersion,\n latestResolution\n }\n };\n });\n }\n\n}\n","
\n {{'module.requests.card-design.details.designer-assignment' | translate}}\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {UserModel} from '../../models/user.model';\nimport {RequestsService} from '../../../requests/services/requests.service';\nimport {UtilsService} from '../../services/utils.service';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {Subject} from 'rxjs';\n\n@Component({\n selector: 'app-designer-assignment',\n templateUrl: './app-designer-assignment.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppDesignerAssignmentComponent implements OnInit, OnChanges, OnDestroy {\n @Input() designerValue: UserModel;\n @Input() private isDisabled: boolean;\n @Input() private designerControlTouched: boolean;\n @Input() hideLegend?: boolean;\n @Output() designerChange: EventEmitter = new EventEmitter();\n\n public designers: Array<{value: UserModel; label: string; extras: string[]}> = [];\n public form: FormGroup;\n private designerControl: FormControl;\n private ngUnsubscribe = new Subject();\n\n constructor(\n private requestsService: RequestsService,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n public utilsService: UtilsService\n ) {}\n\n ngOnInit(): void {\n this.buildForm();\n this.getDesigners();\n this.setDesignerListener();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n if (this.designerControlTouched) {\n this.designerControl?.markAllAsTouched();\n }\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n designer: this.fb.control(this.designerValue, Validators.required)\n });\n this.designerControl = this.form.get('designer') as FormControl;\n\n if (this.isDisabled) {\n this.form.disable();\n } else {\n this.form.enable();\n }\n\n this.cd.markForCheck();\n }\n\n private getDesigners(): void {\n this.requestsService\n .getDesignerList()\n .pipe(take(1))\n .subscribe(managersList => {\n if (managersList.length) {\n this.designers = managersList.map(designer => ({\n value: designer,\n label: this.utilsService.getFullUserName(designer),\n extras: [designer.userName]\n }));\n\n if (this.designerValue) {\n const designer = this.designers.find(d => d.value.userName === this.designerValue.userName);\n this.designerControl.setValue(designer?.value, {emitEvent: false});\n }\n\n this.cd.detectChanges();\n }\n });\n }\n\n private setDesignerListener(): void {\n this.designerControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .pipe(filter(v => v === null || v?.userName !== this.designerValue?.userName))\n .subscribe(value => {\n this.designerChange.emit(value);\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Action, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport moment from 'moment';\nimport { BehaviorSubject, combineLatest, of, Subject, Subscription, throwError } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, shareReplay, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport { CardDesignFormService } from 'src/app/requests/services/card-design-form.service';\nimport { FileUpdateHandlerFn } from 'src/app/shared/components/app-artwork-item/app-artwork-item.model';\nimport {\n HasPanelExpandState,\n} from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS, RestrictionOptionsObject } from 'src/app/shared/models/upload-file-restrictions.model';\nimport { Events } from 'src/app/shared/services/event-service.service';\nimport { LoaderService } from 'src/app/shared/services/loader.service';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\nimport { UserPermissionsService } from 'src/app/shared/services/user-permissions.service';\nimport { UserService } from 'src/app/shared/services/user.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport {\n selectDesignLineOfBusiness,\n selectDielines,\n selectRegions,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { PAGES_CONFIG } from '../../../../../shared/constants/pages.constants';\nimport { TrafficManagers, UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { AmMode, AmModeType } from '../../../../../shared/models/am-mode.model';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { UserModel } from '../../../../../shared/models/user.model';\nimport { ApprovalManagerService } from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport {\n CardDesignApprovalManagerService,\n} from '../../../../../shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport { CardDesignEvents, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport {\n CardDesignRequestDetails,\n CardDesignRequestItemModel,\n CardDesignRequestModel,\n} from '../../../../models/card-design-request.model';\nimport { selectCardDesignRequestDetails, selectAdditionalOtherContacts } from '../../../../reducers/request-details/request-details.selectors';\nimport { CardDesignService } from '../../../../services/card-design.service';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { WithTmAssignment } from '../../../shared/tm-assignment/tm-assignment.mixin';\nimport { WithPanelExpanded } from '../../../../../shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const TmReviewComponentBase = WithTmAssignment(WithPanelExpanded('first'));\n\n@Component({\n selector: 'app-tm-review',\n templateUrl: './tm-review.component.html',\n styleUrls: ['./tm-review.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: CardDesignApprovalManagerService\n }\n ]\n})\nexport class TmReviewComponent extends TmReviewComponentBase implements OnInit, OnChanges, OnDestroy, HasPanelExpandState {\n @Input() public requestId: string | number;\n @Input() public isDisabled: boolean;\n isStepDisabledSubject = new BehaviorSubject(null);\n @Input() public set isStepDisabled(isStepDisabled: boolean) {\n this.isStepDisabledSubject.next(isStepDisabled);\n }\n get isStepDisabled(): boolean {\n return this.isStepDisabledSubject.value;\n }\n public readonly mode: AmModeType = AmMode.view;\n\n public masterForm: FormGroup;\n public form: FormGroup;\n public details: CardDesignRequestDetails;\n public request: CardDesignRequestModel;\n public regions: CodeNameModel[] = [];\n public designLineOfBusiness: Partial[] = [];\n public dielines: CodeNameModel[] = [];\n public isDatesApproved = true;\n public isValidated = false;\n public minDate: Date;\n\n public userRoles = UserRoles;\n\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n fileTypesToAccept: string[] = [];\n restrictionOptions: RestrictionOptionsObject = {\n fileType: FILE_TYPES.CARD_DESIGN.ARTWORK,\n fileSize: FILE_SIZE_RESTRICTIONS.CARD_DESIGN.ARTWORK\n };\n\n /**\n * From details\n */\n\n public newItemIndex: number;\n get requestItemsControls(): FormArray {\n return this.form.get('items') as FormArray;\n }\n get detailsForm(): FormGroup {\n return this.form?.get('details') as FormGroup;\n }\n\n get designerControl(): FormControl {\n return this.detailsForm?.get('designer') as FormControl;\n }\n\n request$ = this.store\n .select(selectCardDesignRequestDetails)\n .pipe(filter(v => !!v))\n .pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n\n readonly AssignTrafficManagerGroups = [TrafficManagers.CDR];\n\n constructor(\n public utilsService: UtilsService,\n private fb: FormBuilder,\n private store: Store,\n private router: Router,\n private modalService: ModalService,\n private translateService: TranslateService,\n public cardDesignService: CardDesignService,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n public approvalManagerService: CardDesignApprovalManagerService,\n private cardDesignFormService: CardDesignFormService,\n private actions: Actions,\n private requestService: RequestsService,\n loaderService: LoaderService,\n userService: UserService,\n userPermissionsService: UserPermissionsService\n ) {\n super(\n utilsService,\n fb,\n store,\n router,\n modalService,\n translateService,\n cardDesignService,\n cd,\n eventService,\n messageService,\n stepActionsService,\n approvalManagerService,\n cardDesignFormService,\n actions,\n requestService,\n loaderService,\n userService,\n userPermissionsService\n );\n }\n\n public ngOnInit(): void {\n super.ngOnInit();\n this.requestService\n .getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ? data[this.restrictionOptions?.fileType] : data[FILE_TYPES.DEFAULT];\n }\n });\n this.form = this.initForm();\n this.toggleControlsDisabling();\n this.setEventsSubs();\n this.getRefData();\n this.minDate = moment().startOf('day').toDate();\n\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(request => {\n const isAnotherRequest = this.request?.id !== request?.id;\n this.request = request ? cloneDeep(request) : null;\n this.details = this.request.details;\n this.requestId = this.request.id;\n this.designerControl.updateValueAndValidity({emitEvent: false});\n\n if (request?.details?.contacts?.length) {\n (this.detailsForm.get('contacts') as FormArray).clear();\n request.details.contacts.forEach(item => {\n (this.detailsForm.get('contacts') as FormArray).push(this.getStakeholderContact(item));\n });\n } else {\n (this.detailsForm.get('contacts') as FormArray).clear();\n (this.detailsForm.get('contacts') as FormArray).push(this.getStakeholderContact(null));\n }\n this.attachments =\n this.attachments && !isAnotherRequest ? this.attachments : request?.details?.artFiles ? cloneDeep(request?.details?.artFiles) : [];\n if (this.request?.details) {\n this.request.details.artFiles = this.attachments;\n }\n this.detailsForm.patchValue(this.details);\n this.designerControl.setValue(this.details?.designer);\n\n this.form.setControl('items', this.createFormItems(request.items));\n\n this.initExpandedPanels(request.items);\n if (this.details.datesApproved) {\n this.toggleFirstRoundArtDeliveryDate(this.details.datesApproved || this.isDisabled);\n }\n\n this.detailsForm.get('artworkReplacesExisting').setValue(this.details?.artworkReplacesExisting);\n this.detailsForm.get('artworkChangesNeeded').setValue(this.details?.artworkChangesNeeded);\n this.detailsForm.get('designSourceTypeCode').setValue(this.details?.designSourceTypeCode);\n this.detailsForm.get('artworkAddedToExisting').setValue(this.details?.artworkAddedToExisting);\n this.form?.get('details.csJobId')?.setValue((this.details as any)?.csJobId);\n\n if (this.isDisabled) {\n this.form?.disable({emitEvent: false});\n } else {\n this.form?.enable({emitEvent: false});\n }\n this.cd.markForCheck();\n });\n\n // Subscribe direct approval manager version updates\n this.approvalManagerService\n .onRequestItemsChange()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(items => {\n items.forEach(item => {\n (this.form.get('items') as FormArray)?.controls.forEach(itemControl => {\n if (itemControl.get('id').value === item.id) {\n itemControl.get('artworkFiles').setValue(item.artworkFiles);\n this.cd.markForCheck();\n }\n });\n });\n });\n\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.form.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n formArray.push(this.getStakeholderContact(contact));\n });\n } else {\n formArray.push(this.getStakeholderContact(null));\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n private getStakeholderContact(contact: any): FormControl {\n return this.fb.control(contact, [UtilsService.userValidationFn()]);\n }\n private formSubscriptions: Subscription[] = [];\n public isArtworkLocationRequired: boolean;\n public isArtworkChangesRequired: boolean;\n public isArtworkReplacesExisting: boolean;\n public attachments: any[];\n public get additionalStakeholdersDetailsControls(): FormArray {\n return this.detailsForm.get('contacts') as FormArray;\n }\n\n public onAddRequestItem(item = {}): void {\n (this.form.get('items') as FormArray).push(this.getRequestItem(item));\n this.updateNewItemIndex();\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.at(index) as FormGroup).getRawValue());\n\n item.id = null;\n item.merchant.id = null;\n item.merchant.name = item.merchant.name?.name || null;\n item.artworkFiles = [];\n\n this.onAddRequestItem(item);\n }\n\n public onAddStakeholdersDetails(): void {\n this.additionalStakeholdersDetailsControls.push(this.getStakeholderContact(null));\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n public fileUpdateHandler: FileUpdateHandlerFn = ({data}) => {\n const itemsControl = this.form.get(`items`) as FormArray;\n const itemControl = itemsControl.at(itemsControl.value.findIndex(i => i.id === data.id));\n const artworkFilesControl = itemControl.get(`artworkFiles`) as FormArray;\n\n artworkFilesControl.setValue(data.artworkFiles);\n\n this.approvalManagerService.onRequestChange({\n ...this.request,\n items: itemsControl.value\n });\n };\n\n private getFormSubscriptions(form: FormGroup) {\n const detailsForm = form.get('details');\n return [\n detailsForm\n .get('datesApproved')\n .valueChanges.pipe(distinctUntilChanged(), takeUntil(this.ngUnsubscribe))\n .subscribe(approved => {\n this.isValidated = false;\n this.toggleFirstRoundArtDeliveryDate(approved || this.isDisabled);\n\n this.cd.markForCheck();\n }),\n detailsForm\n .get('firstRoundArtDeliveryDate')\n .statusChanges.pipe(debounceTime(0), distinctUntilChanged(), takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n const firstRoundArtDeliveryDate = this.detailsForm?.get('firstRoundArtDeliveryDate');\n\n if (firstRoundArtDeliveryDate.invalid || this.form.disabled) {\n this.detailsForm.get('datesApproved').disable();\n } else {\n this.detailsForm.get('datesApproved').enable();\n }\n\n this.cd.markForCheck();\n }),\n detailsForm\n .get('designSourceTypeCode')\n .valueChanges.pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(value => {\n if (value.toLowerCase() === 'client') {\n if (!this.attachments.length) {\n detailsForm.get('artworkLocationTypeCode').setValidators(Validators.required);\n } else {\n detailsForm.get('artworkLocationTypeCode').clearValidators();\n }\n\n detailsForm.get('artworkDescription').setValidators(Validators.required);\n this.isArtworkLocationRequired = true;\n } else {\n detailsForm.get('artworkLocationTypeCode').clearValidators();\n detailsForm.get('artworkDescription').clearValidators();\n this.isArtworkLocationRequired = false;\n }\n detailsForm.get('artworkLocationTypeCode').updateValueAndValidity({emitEvent: false});\n detailsForm.updateValueAndValidity();\n this.cd.markForCheck();\n }),\n\n detailsForm\n .get('artworkChangesNeeded')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n if (value) {\n detailsForm.get('artworkChangesDescription').setValidators(Validators.required);\n this.isArtworkChangesRequired = true;\n } else {\n detailsForm.get('artworkChangesDescription').clearValidators();\n this.isArtworkChangesRequired = false;\n }\n\n detailsForm.get('artworkChangesDescription').updateValueAndValidity();\n this.cd.markForCheck();\n }),\n\n detailsForm\n .get('artworkReplacesExisting')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.isArtworkReplacesExisting = value;\n if (detailsForm.get('artworkAddedToExisting').value !== !value) {\n detailsForm.get('artworkAddedToExisting').setValue(!value);\n }\n if (value) {\n detailsForm.get('artworkReplacementFilename').setValidators(Validators.required);\n detailsForm.get('artworkAdditionDescription').clearValidators();\n }\n\n detailsForm.get('artworkAdditionDescription').updateValueAndValidity();\n detailsForm.get('artworkReplacementFilename').updateValueAndValidity();\n this.cd.markForCheck();\n }),\n\n detailsForm\n .get('artworkAddedToExisting')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.isArtworkReplacesExisting = !value;\n if (detailsForm.get('artworkReplacesExisting').value !== !value) {\n detailsForm.get('artworkReplacesExisting').setValue(!value);\n }\n if (value) {\n detailsForm.get('artworkAdditionDescription').setValidators(Validators.required);\n detailsForm.get('artworkReplacementFilename').clearValidators();\n }\n\n detailsForm.get('artworkAdditionDescription').updateValueAndValidity();\n detailsForm.get('artworkReplacementFilename').updateValueAndValidity();\n this.cd.markForCheck();\n })\n ];\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n\n private getRequestItem(item: any): FormGroup {\n return this.cardDesignFormService.itemFieldset(item);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleControlsDisabling();\n this.form?.updateValueAndValidity();\n this.cd.markForCheck();\n }\n }\n\n public onDeleteItem(requestItemIndex: number): void {\n if (this.requestItemsControls.controls?.length < 2) {\n this.modalService.openCloseModal(\n this.translateService.instant('module.requests.card-design.tm-review.modal.delete-item-header'),\n this.translateService.instant('module.requests.card-design.tm-review.modal.delete-item-desc')\n );\n return;\n }\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(requestItemIndex);\n }\n this.expandedPanels = new Set(\n [...this.expandedPanels].map(ei => (ei === requestItemIndex ? null : ei > requestItemIndex ? ei - 1 : ei)).filter(i => i !== null)\n );\n }\n\n public removeArtworkItemFunction = (itemId: number, attachmentId: number) =>\n this.cardDesignService.deleteArtworkItem(this.requestId, itemId, attachmentId);\n\n public onDesignerChange(value: UserModel): void {\n this.designerControl.setValue(value);\n this.designerControl.updateValueAndValidity();\n this.cd.markForCheck();\n }\n\n public openApprovalManager({requestItem, artworkFile}): void {\n this.modalService\n .openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n fileTypesToAccept: this.fileTypesToAccept,\n restrictionOptions: this.restrictionOptions.fileSize\n })\n .afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe();\n }\n\n private createDetailsForm(): FormGroup {\n return this.fb.group({\n id: this.fb.control(null),\n firstRoundArtDeliveryDate: [null, Validators.required],\n finalArtDueDate: [null, Validators.required],\n csJobId: [null, [Validators.required]],\n datesApproved: [false, Validators.requiredTrue],\n contacts: this.fb.array([]),\n designer: this.fb.control(null, Validators.required),\n\n /**\n * From details section\n */\n lineOfBusiness: this.fb.control(null, Validators.required),\n regionCode: this.fb.control(null, Validators.required),\n incommPrinting: this.fb.control(null, Validators.required),\n designSourceTypeCode: this.fb.control(null, Validators.required),\n artworkLocationTypeCode: this.fb.control(null),\n artworkDescription: this.fb.control(null),\n artworkChangesNeeded: this.fb.control(null),\n artworkChangesDescription: this.fb.control(null),\n artworkReplacesExisting: this.fb.control(null),\n artworkReplacementDescription: this.fb.control(null),\n artworkReplacementFilename: this.fb.control(null),\n artworkAddedToExisting: this.fb.control(!null),\n artworkAdditionDescription: this.fb.control(null),\n quantityOfFiles: this.fb.control(null, [Validators.min(0), Validators.max(999)]),\n });\n }\n\n private initForm(): FormGroup {\n const form = this.fb.group({\n details: this.createDetailsForm(),\n items: this.createFormItems()\n });\n\n this.formSubscriptions.push(...this.getFormSubscriptions(form));\n\n return form;\n }\n\n private createFormItems(items: CardDesignRequestItemModel[] = []): FormArray {\n return this.fb.array(items.map(item => this.getRequestItem(item)));\n }\n\n private toggleFirstRoundArtDeliveryDate(toDisable: boolean) {\n const firstRoundArtDeliveryDate = this.detailsForm?.get('firstRoundArtDeliveryDate');\n\n if (toDisable) {\n firstRoundArtDeliveryDate.disable();\n } else {\n firstRoundArtDeliveryDate.enable();\n }\n firstRoundArtDeliveryDate.markAsTouched();\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.eventService.on(\n Events.TmReviewSave,\n async () => {\n await this.saveRequest(true);\n this.messageService.showSystemMessage('success', this.translateService.instant('common.message.request-saved'));\n this.cd.markForCheck();\n },\n this.ngUnsubscribe\n ),\n this.eventService.on(CardDesignEvents.TmReviewSubmitValidated, elementRef => {\n this.form.markAllAsTouched();\n this.isValidated = true;\n\n this.isDatesApproved = this.detailsForm.get('datesApproved').valid;\n this.cd.markForCheck();\n\n if (this.form.invalid) {\n this.utilsService.logInvalidControls(this.form);\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.modal.errors.invalid-form-header'),\n this.translateService.instant('common.modal.errors.invalid-form-desc')\n );\n\n return;\n }\n\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', CardDesignEvents.TmReviewSubmit, 'right');\n }),\n\n this.eventService.on(Events.TmReviewRollback, async ({comment}) => {\n if (this.isDisabled) {\n return;\n }\n\n try {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.RouteBack,\n comment\n }\n });\n } catch (e) {}\n }),\n\n this.eventService.on(CardDesignEvents.TmReviewSubmit, async event => {\n try {\n await this.saveRequest();\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.request.id,\n actionType: RequestStageActions.Complete,\n comment: event.comment\n }\n });\n } catch (e) {}\n })\n );\n }\n\n private saveRequest(draft = undefined): Promise {\n const requestDetails = {\n ...this.request,\n ...this.form.getRawValue()\n };\n requestDetails.items.forEach(item => {\n item.merchant.name = item?.merchant?.name?.name;\n });\n requestDetails.details.firstRoundArtDeliveryDate = moment(requestDetails.details.firstRoundArtDeliveryDate).toISOString();\n requestDetails.details.finalArtDueDate = moment(requestDetails.details.finalArtDueDate).toISOString();\n requestDetails.details.contacts = requestDetails.details.contacts.filter(i => i !== null);\n requestDetails.details.designer = this.designerControl.value;\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({requestId: this.requestId, details: requestDetails, draft,\n excludeParts: ['contacts']\n }));\n return this.actions\n .pipe(\n ofType(requestDetailsActions.updateRequestDetailsSuccess, requestDetailsActions.updateRequestDetailsFailure),\n switchMap(action => {\n if (action.type === requestDetailsActions.updateRequestDetailsFailure.type) {\n return throwError(new Error('Invalid'));\n }\n return of(action);\n }),\n take(1),\n takeUntil(this.ngUnsubscribe)\n )\n .toPromise();\n }\n\n private getRefData(): void {\n combineLatest([\n this.store.select(selectRegions).pipe(filter(v => v.length > 0)),\n this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)),\n this.store.select(selectDielines).pipe(filter(v => v.length > 0))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n ([regions, designLineOfBusiness, dielines]) => {\n this.dielines = dielines;\n this.regions = regions;\n this.designLineOfBusiness = designLineOfBusiness;\n\n this.cd.markForCheck();\n },\n () => {\n this.router.navigate([`${PAGES_CONFIG.REQUESTS}`]);\n }\n );\n }\n\n private toggleControlsDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable({emitEvent: false});\n } else {\n this.form?.enable({emitEvent: false});\n }\n if (this.details) {\n this.toggleFirstRoundArtDeliveryDate(this.isDisabled || this.details.datesApproved);\n }\n this.cd.markForCheck();\n }\n\n onUpdateAttachments(files: any[]) {\n this.attachments = files;\n }\n}\n","
\n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.dates' | translate }}\n
\n
\n \n
\n
\n \n
\n
\n \n
\n\n \n
\n
\n\n \n \n\n \n \n
\n \n
\n \n\n
\n \n \n\n
\n
\n TM Review Items\n
\n
\n
\n \n
\n \n \n \n {{ 'common.approval-manager.item-save-required' | translate }}\n \n \n
\n \n
\n
\n
\n
\n
\n \n
\n \n \n {{ 'module.requests.details.add-one-item' | translate }}\n \n
\n
\n \n
\n {{ 'module.requests.details.stakeholder-details' | translate }}\n
\n
{{ 'module.requests.details.stakeholder-details' | translate }}
\n
\n \n
\n \n \n {{ 'module.requests.details.add-other-contact' | translate }}\n \n
\n
\n\n \n \n \n \n \n \n \n
\n","\n

\n {{ 'module.requests.card-design.details.incomm-printing' | translate }}\n \n {{ (details.incommPrinting ? 'common.label.yes' : 'common.label.no') | translate }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.card-designer' | translate }}\n \n {{ designSourceTypes[details.designSourceTypeCode] }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.artwork-location' | translate }}:\n \n {{ artLocationTypes[details.artworkLocationTypeCode] }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.artwork-description' | translate }}:\n {{ details.artworkDescription }}\n

\n\n

\n {{ 'module.requests.card-design.details.art-files' | translate }}:\n

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

\n {{ 'module.requests.card-design.details.changes-needed' | translate }}\n \n {{ (details?.artworkChangesNeeded ? 'common.label.yes' : 'common.label.no') | translate }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.provided-details' | translate }}:\n {{ details?.artworkChangesDescription }}\n

\n\n

\n {{ 'module.requests.card-design.details.art-replace' | translate }}\n \n {{ (details?.artworkReplacesExisting ? 'common.label.yes' : 'common.label.no') | translate }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.filename' | translate }}:\n {{ details?.artworkReplacementFilename }}\n

\n\n

\n {{ 'module.requests.card-design.details.additional-details' | translate }}:\n {{ details?.artworkReplacementDescription }}\n

\n\n

\n {{ 'module.requests.card-design.details.art-addition' | translate }}\n \n {{ (details?.artworkAddedToExisting ? 'common.label.yes' : 'common.label.no') | translate }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.provided-details' | translate }}:\n {{ details?.artworkAdditionDescription }}\n

\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, map, shareReplay, takeUntil } from 'rxjs/operators';\nimport { selectArtLocationTypes, selectDesignSourceTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { CardDesignRequestModel } from 'src/app/requests/models/card-design-request.model';\n\n@Component({\n selector: 'app-artwork-details',\n templateUrl: './artwork-details.component.html',\n styleUrls: ['./artwork-details.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ArtworkDetailsComponent implements OnDestroy {\n private ngUnsubscribe = new Subject();\n\n constructor(private store: Store) { }\n\n @Input() request: CardDesignRequestModel;\n\n artLocationTypes$ = this.store.select(selectArtLocationTypes).pipe(filter(v => v.length > 0)).pipe(\n map(pg => pg.reduce((aggregate, altItem) => ({...aggregate, [altItem.code]: altItem.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n designSourceTypes$ = this.store.select(selectDesignSourceTypes).pipe(filter(v => v.length > 0)).pipe(\n map(pg => pg.reduce((aggregate, dstItem) => ({...aggregate, [dstItem.code]: dstItem.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _asyncGeneratorDelegate(inner, awaitWrap) {\n var iter = {},\n waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function (resolve) {\n resolve(inner[key](value));\n });\n return {\n done: false,\n value: awaitWrap(value)\n };\n }\n\n ;\n\n iter[typeof Symbol !== \"undefined\" && Symbol.iterator || \"@@iterator\"] = function () {\n return this;\n };\n\n iter.next = function (value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n\n return pump(\"next\", value);\n };\n\n if (typeof inner[\"throw\"] === \"function\") {\n iter[\"throw\"] = function (value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n\n return pump(\"throw\", value);\n };\n }\n\n if (typeof inner[\"return\"] === \"function\") {\n iter[\"return\"] = function (value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n\n return pump(\"return\", value);\n };\n }\n\n return iter;\n}","export default function _asyncIterator(iterable) {\n var method,\n async,\n sync,\n retry = 2;\n\n for (\"undefined\" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) {\n if (async && null != (method = iterable[async])) return method.call(iterable);\n if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));\n async = \"@@asyncIterator\", sync = \"@@iterator\";\n }\n\n throw new TypeError(\"Object is not async iterable\");\n}\n\nfunction AsyncFromSyncIterator(s) {\n function AsyncFromSyncIteratorContinuation(r) {\n if (Object(r) !== r) return Promise.reject(new TypeError(r + \" is not an object.\"));\n var done = r.done;\n return Promise.resolve(r.value).then(function (value) {\n return {\n value: value,\n done: done\n };\n });\n }\n\n return AsyncFromSyncIterator = function AsyncFromSyncIterator(s) {\n this.s = s, this.n = s.next;\n }, AsyncFromSyncIterator.prototype = {\n s: null,\n n: null,\n next: function next() {\n return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));\n },\n \"return\": function _return(value) {\n var ret = this.s[\"return\"];\n return void 0 === ret ? Promise.resolve({\n value: value,\n done: !0\n }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));\n },\n \"throw\": function _throw(value) {\n var thr = this.s[\"return\"];\n return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));\n }\n }, new AsyncFromSyncIterator(s);\n}","export default function _AwaitValue(value) {\n this.wrapped = value;\n}","import AwaitValue from \"./AwaitValue.js\";\nexport default function _awaitAsyncGenerator(value) {\n return new AwaitValue(value);\n}","import AwaitValue from \"./AwaitValue.js\";\nexport default function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg);\n var value = result.value;\n var wrappedAwait = value instanceof AwaitValue;\n Promise.resolve(wrappedAwait ? value.wrapped : value).then(function (arg) {\n if (wrappedAwait) {\n resume(key === \"return\" ? \"return\" : \"next\", arg);\n return;\n }\n\n settle(result.done ? \"return\" : \"normal\", arg);\n }, function (err) {\n resume(\"throw\", err);\n });\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({\n value: value,\n done: true\n });\n break;\n\n case \"throw\":\n front.reject(value);\n break;\n\n default:\n front.resolve({\n value: value,\n done: false\n });\n break;\n }\n\n front = front.next;\n\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n if (typeof gen[\"return\"] !== \"function\") {\n this[\"return\"] = undefined;\n }\n}\n\nAsyncGenerator.prototype[typeof Symbol === \"function\" && Symbol.asyncIterator || \"@@asyncIterator\"] = function () {\n return this;\n};\n\nAsyncGenerator.prototype.next = function (arg) {\n return this._invoke(\"next\", arg);\n};\n\nAsyncGenerator.prototype[\"throw\"] = function (arg) {\n return this._invoke(\"throw\", arg);\n};\n\nAsyncGenerator.prototype[\"return\"] = function (arg) {\n return this._invoke(\"return\", arg);\n};","import AsyncGenerator from \"./AsyncGenerator.js\";\nexport default function _wrapAsyncGenerator(fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n}","\"stream\"in Blob.prototype||Object.defineProperty(Blob.prototype,\"stream\",{value(){return new Response(this).body}});var e=e=>new DataView(new ArrayBuffer(e)),n=e=>new Uint8Array(e.buffer||e),t=e=>(new TextEncoder).encode(String(e));function o(e,o){if(void 0===o||o instanceof Date||(o=new Date(o)),e instanceof File)return{t:o||new Date(e.lastModified),o:e.stream()};if(e instanceof Response)return{t:o||new Date(e.headers.get(\"Last-Modified\")||Date.now()),o:e.body};if(void 0===o)o=new Date;else if(isNaN(o))throw new Error(\"Invalid modification date.\");if(\"string\"==typeof e)return{t:o,o:t(e)};if(e instanceof Blob)return{t:o,o:e.stream()};if(e instanceof Uint8Array||e instanceof ReadableStream)return{t:o,o:e};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{t:o,o:n(e)};if(Symbol.asyncIterator in e)return{t:o,o:i(e)};throw new TypeError(\"Unsupported input format.\")}function i(e){const n=\"next\"in e?e:e[Symbol.asyncIterator]();return new ReadableStream({async pull(e){let t=0;for(;e.desiredSize>t;){const o=await n.next();if(!o.value){e.close();break}{const n=r(o.value);e.enqueue(n),t+=n.byteLength}}}})}function r(e){return\"string\"==typeof e?t(e):e instanceof Uint8Array?e:n(e)}function a(e,n,o){if(void 0===n||n instanceof Uint8Array||(n=t(n)),e instanceof File)return{i:n||t(e.name),A:e.size};if(e instanceof Response){const i=e.headers.get(\"content-disposition\"),r=i&&i.match(/;\\s*filename\\*?=[\"']?(.*?)[\"']?$/i),a=r&&r[1]||new URL(e.url).pathname.split(\"/\").pop(),s=a&&decodeURIComponent(a),f=o||+e.headers.get(\"content-length\");return{i:n||t(s),A:f}}if(!n||0===n.length)throw new Error(\"The file must have a name.\");return\"string\"==typeof e?{i:n,A:t(e).length}:e instanceof Blob?{i:n,A:e.size}:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?{i:n,A:e.byteLength}:{i:n,A:o}}var s=new WebAssembly.Instance(new WebAssembly.Module(Uint8Array.from(atob(\"AGFzbQEAAAABCgJgAABgAn9/AXwDAwIAAQUDAQACBwkCAW0CAAFjAAEIAQAKlQECSQEDfwNAIAEhAEEAIQIDQCAAQQF2IABBAXFBoIbi7X5scyEAIAJBAWoiAkEIRw0ACyABQQJ0IAA2AgAgAUEBaiIBQYACRw0ACwtJAQF/IAFBf3MhAUGAgAQhAkGAgAQgAGohAANAIAFB/wFxIAItAABzQQJ0KAIAIAFBCHZzIQEgAkEBaiICIABJDQALIAFBf3O4Cw\"),(e=>e.charCodeAt(0))))),{c,m}=s.exports,f=n(m).subarray(65536);function A(e,n=0){for(const t of function*(e){for(;e.length>65536;)yield e.subarray(0,65536),e=e.subarray(65536);e.length&&(yield e)}(e))f.set(t),n=c(t.length,n);return n}function u(e,n,t=0){const o=e.getSeconds()>>1|e.getMinutes()<<5|e.getHours()<<11,i=e.getDate()|e.getMonth()+1<<5|e.getFullYear()-1980<<9;n.setUint16(t,o,1),n.setUint16(t+2,i,1)}function d(t){const o=e(30);return o.setUint32(0,1347093252),o.setUint32(4,335546368),u(t.t,o,10),o.setUint16(26,t.i.length,1),n(o)}async function*y(e){let{o:n}=e;if(\"then\"in n&&(n=await n),n instanceof Uint8Array)yield n,e.u=A(n,0),e.A=n.length;else{e.A=0;const t=n.getReader();for(;;){const{value:n,done:o}=await t.read();if(o)break;e.u=A(n,e.u),e.A+=n.length,yield n}}}function l(t){const o=e(16);return o.setUint32(0,1347094280),o.setUint32(4,t.u,1),o.setUint32(8,t.A,1),o.setUint32(12,t.A,1),n(o)}function w(t,o){const i=e(46);return i.setUint32(0,1347092738),i.setUint32(4,352523264),i.setUint16(8,2048),u(t.t,i,12),i.setUint32(16,t.u,1),i.setUint32(20,t.A,1),i.setUint32(24,t.A,1),i.setUint16(28,t.i.length,1),i.setUint16(40,33204,1),i.setUint32(42,o,1),n(i)}function b(e){return e instanceof File||e instanceof Response?[[e],[e]]:[[e.input,e.name,e.size],[e.input,e.lastModified]]}export var predictLength=e=>function(e){var n;let t=22;for(const o of e){if(!o.i)throw new Error(\"Every file must have a non-empty name.\");if(isNaN(null!=(n=o.A)?n:NaN))throw new Error(`Missing size for file \"${(new TextDecoder).decode(o.i)}\".`);t+=2*o.i.length+o.A+92}return t}(function*(e){for(const n of e)yield a(...b(n)[0])}(e));export function downloadZip(t,r={}){const s={\"Content-Type\":\"application/zip\",\"Content-Disposition\":\"attachment\"};return Number.isInteger(r.length)&&r.length>0&&(s[\"Content-Length\"]=r.length),r.metadata&&(s[\"Content-Length\"]=p(r.metadata)),new Response(i(async function*(t){const o=[];let i=0,r=0;for await(const e of t)yield d(e),yield e.i,yield*y(e),yield l(e),o.push(w(e,i)),o.push(e.i),r++,i+=46+e.i.length+e.A;let a=0;for(const e of o)yield e,a+=e.length;const s=e(22);s.setUint32(0,1347093766),s.setUint16(8,r,1),s.setUint16(10,r,1),s.setUint32(12,a,1),s.setUint32(16,i,1),yield n(s)}(async function*(e){for await(const n of e){const[e,t]=b(n);yield Object.assign(o(...t),a(...e))}}(t))),{headers:s})};","import { InputWithSizeMeta} from 'client-zip';\nexport function checkCopies(medias: InputWithSizeMeta[]): InputWithSizeMeta[] {\n const initialNames = [];\n return Array.from(\n medias\n .reduce((acc, media) => {\n const initialName = media.name;\n initialNames.push(initialName);\n let currentName = initialName;\n if (acc.has(initialName)) {\n const [n, ext] = [\n initialName.slice(0, Math.max(0, initialName.lastIndexOf('.')) || Infinity),\n initialName.slice((Math.max(0, initialName.lastIndexOf('.')) || Infinity) + 1)\n ];\n const numberOfOccurences = initialNames.filter(previousInitialNames => previousInitialNames === previousInitialNames).length - 1;\n currentName = `${n}-(${numberOfOccurences})${ext ? '.' : ''}${ext}`;\n }\n media.name = currentName;\n acc.set(currentName, media);\n return acc;\n }, new Map())\n .values()\n );\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { InputWithSizeMeta } from 'client-zip';\n\nimport { API } from '../../../../shared/constants/api.constants';\nimport { MessageService } from '../../../../shared/services/message-service.service';\nimport { ArtworkFileVersion } from '../../../models/card-design-request.model';\nimport { ArtworkFilesAwareRequestItem } from '../download-all.types';\nimport { checkCopies } from './copy.strategy';\nimport { ErrorHandlingHttpClient } from '../../../../shared/services/error-handling-http-client.service';\n\n@Injectable()\nexport class FilesProvider {\n private requestId: string | number;\n public copyStrategy = checkCopies;\n\n constructor(private errorHandlingHttpClient: ErrorHandlingHttpClient, private messageService: MessageService, private translateService: TranslateService) {}\n\n public async getFiles(requestId: string | number, requestItems: ArtworkFilesAwareRequestItem[]): Promise {\n this.requestId = requestId;\n const allVersions = requestItems.reduce(\n (acc, item) => [...acc, ...(item?.artworkFiles || []).reduce((accAf, af) => [...accAf, ...(af.versions || [])], [])],\n []\n );\n let hasError = false;\n const medias = (\n await Promise.all(\n allVersions.map(version =>\n this.downloadVersion(version)\n .then(input => ({\n input,\n name: version.attachment?.fileName as string,\n lastModified: new Date()\n }))\n .catch(e => {\n console.error(e);\n hasError = true;\n return null;\n })\n )\n )\n ).filter(e => !!e);\n if (hasError) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.errors.some-files-has-not-been-downloaded'),\n undefined,\n 0\n );\n }\n return this.copyStrategy(medias);\n }\n\n private downloadVersion(version: ArtworkFileVersion): Promise {\n const downloadUrl = version.attachment?.url || this.getVersionDocUrl(version);\n\n return this.errorHandlingHttpClient\n .get(downloadUrl, {\n responseType: 'blob'\n })\n .toPromise();\n }\n\n private getVersionDocUrl(version: any) {\n return API.attachmentDownload(this.requestId, version.attachment.id);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport WebViewer, {CoreControls, WebViewerInstance} from '@pdftron/webviewer';\nimport { InputWithSizeMeta} from 'client-zip';\nimport {Subject} from 'rxjs';\nimport {delay, take} from 'rxjs/operators';\nimport {ApprovalManagerService} from 'src/app/shared/services/approval-manager/approval-manager.service';\n\nimport {MessageService} from '../../../../shared/services/message-service.service';\nimport {ArtworkFile} from '../../../models/card-design-request.model';\nimport {ArtworkFilesAwareRequestItem} from '../download-all.types';\nimport {checkCopies} from './copy.strategy';\nimport { ErrorHandlingHttpClient } from '../../../../shared/services/error-handling-http-client.service';\nimport { SystemUserModel } from 'src/app/shared/models/user.model';\n\n@Injectable()\nexport class PdfProvider {\n /**\n * Settings\n */\n private readonly env = '__env';\n private licenseKey = window[this.env]?.pdftronLicenseKey;\n private readonly webViewerConfig = {\n path: '../webviewer',\n fullAPI: true,\n licenseKey: this.licenseKey,\n enableAzureWorkaround: true\n };\n\n /**\n * Instances\n */\n private userDetails: SystemUserModel;\n private viewer: HTMLElement;\n private compareWvInstance: WebViewerInstance;\n private cvInstancePromise: Promise;\n\n public copyStrategy = checkCopies;\n\n constructor(\n private approvalManagerService: ApprovalManagerService,\n private errorHandlingHttpClient: ErrorHandlingHttpClient,\n private messageService: MessageService,\n private translateService: TranslateService\n ) {}\n\n public async getFiles(userDetails: SystemUserModel, requestItems: ArtworkFilesAwareRequestItem[]): Promise {\n this.userDetails = userDetails;\n const results: Array> = [];\n try {\n let hasErrorFiles = false;\n for (const item of requestItems) {\n for (const artworkFile of item.artworkFiles) {\n const [artworkResults, hasError] = await this.downloadFromViewer(artworkFile);\n results.push(artworkResults);\n hasErrorFiles = hasErrorFiles || hasError;\n }\n }\n if (hasErrorFiles) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.errors.some-files-has-not-been-downloaded'),\n undefined,\n 0\n );\n }\n } finally {\n this.compareWvInstance?.docViewer.closeDocument();\n await this.compareWvInstance?.closeDocument();\n this.compareWvInstance?.dispose();\n this.viewer?.parentElement.removeChild(this.viewer);\n this.compareWvInstance = null;\n this.cvInstancePromise = null;\n }\n const medias = results.flat().map(([name, input]) => ({input, name, lastModified: new Date()}));\n return this.copyStrategy(medias);\n }\n\n private getCompareViewerInstance(): Promise {\n this.cvInstancePromise =\n this.cvInstancePromise ||\n WebViewer(\n this.webViewerConfig,\n (() => {\n const t = document.createElement('div');\n t.style.display = 'none';\n document.body.appendChild(t);\n this.viewer = t;\n return t;\n })()\n );\n\n return this.cvInstancePromise.then(instance => {\n this.compareWvInstance = instance;\n return instance;\n });\n }\n\n private initAnnotationUser(annotationManager: CoreControls.AnnotationManager) {\n const userDetails = this.userDetails;\n const userName = userDetails ? `${userDetails.firstName} ${userDetails.lastName}` : 'Guest';\n annotationManager.setCurrentUser(userName);\n annotationManager.setReadOnly(false);\n }\n\n private async downloadFromViewer(artworkFile: ArtworkFile): Promise<[Array<[string, File]>, boolean]> {\n const {versions} = artworkFile;\n\n const compareWvInstance = await this.getCompareViewerInstance();\n\n const docLoaderListenerBase = async (version, onDownloadedSubj: Subject<[string, Blob]>) => {\n const annotationManager = compareWvInstance.annotManager;\n this.initAnnotationUser(annotationManager);\n try {\n const comments = await this.approvalManagerService.getComments(version).pipe(take(1)).toPromise();\n await annotationManager.importAnnotations(comments);\n const doc = compareWvInstance.docViewer.getDocument();\n const xfdfString = comments;\n const options = {xfdfString};\n const data = await doc.getFileData(options);\n const arr = new Uint8Array(data);\n const blob = new Blob([arr], {type: 'application/pdf'});\n\n onDownloadedSubj.next([`${version.attachment?.fileName}.pdf`, blob]);\n } catch (e) {\n onDownloadedSubj.error(e);\n } finally {\n onDownloadedSubj.complete();\n }\n };\n\n let callback;\n const results = [];\n let hasErrors = false;\n\n for await (const version of versions) {\n const downloadedSubj = new Subject<[string, Blob]>();\n /**\n * Catch internal errors\n */\n if ((this.viewer?.firstChild as HTMLIFrameElement)?.contentWindow) {\n (this.viewer.firstChild as HTMLIFrameElement).contentWindow.onerror = msg => {\n downloadedSubj.error(msg);\n downloadedSubj.complete();\n };\n\n (this.viewer?.firstChild as HTMLIFrameElement).contentWindow?.addEventListener('loaderror', (e: CustomEvent) => { // nosonar\n downloadedSubj.error(e);\n downloadedSubj.complete();\n });\n }\n\n if (callback) {\n compareWvInstance.docViewer.off('documentLoaded', callback);\n }\n callback = docLoaderListenerBase.bind(this, version, downloadedSubj);\n compareWvInstance.docViewer.on('documentLoaded', callback);\n try {\n await this.loadDoc(compareWvInstance, version);\n const result = await downloadedSubj.pipe(delay(1)).toPromise();\n results.push(result);\n } catch (e) {\n console.error(e);\n hasErrors = true;\n }\n }\n if (callback) {\n compareWvInstance.docViewer.off('documentLoaded', callback);\n }\n\n return [results, hasErrors];\n }\n\n private async loadDoc(wvInstance: WebViewerInstance, version) {\n const downloadRequest = await this.approvalManagerService.getDownloadRequest(version);\n const extension = this.approvalManagerService.getVersionFileExtension(version);\n const file = await this.errorHandlingHttpClient\n .get(downloadRequest.url, {\n responseType: 'blob'\n })\n .toPromise();\n\n if (['tif', 'tiff'].indexOf(extension.toLowerCase() || ''.toLowerCase()) === -1) {\n wvInstance.loadDocument(URL.createObjectURL(file), {\n extension,\n filename: version.attachment?.fileName,\n customHeaders: downloadRequest.customHeaders\n });\n return;\n }\n const PDFNet = wvInstance.PDFNet;\n\n let newDoc;\n\n return PDFNet.runWithoutCleanup(\n async () =>\n PDFNet.PDFDoc.create()\n .then(doc => {\n newDoc = doc;\n newDoc.initSecurityHandler();\n newDoc.lock();\n return PDFNet.Filter.createURLFilter(URL.createObjectURL(file));\n })\n .then(tiffFile => PDFNet.Convert.fromTiff(newDoc, tiffFile))\n .then(() => {\n newDoc.unlock();\n wvInstance.loadDocument(newDoc, {\n customHeaders: downloadRequest.customHeaders\n });\n }),\n this.licenseKey\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport WebViewer from '@pdftron/webviewer';\nimport { downloadZip, InputWithoutMeta, InputWithSizeMeta } from 'client-zip';\nimport { Subject } from 'rxjs';\n\nimport { AmMode } from '../../../shared/models/am-mode.model';\nimport { LoaderService } from '../../../shared/services/loader.service';\nimport { MessageService } from '../../../shared/services/message-service.service';\nimport { UserService } from '../../../shared/services/user.service';\nimport { ArtworkFilesAwareRequestItem } from './download-all.types';\nimport { FilesProvider } from './providers/files.provider';\nimport { PdfProvider } from './providers/pdf.provider';\n\n@Component({\n selector: 'app-download-all',\n templateUrl: './download-all.component.html',\n styleUrls: ['./download-all.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: PdfProvider,\n useClass: PdfProvider\n },\n {\n provide: FilesProvider,\n useClass: FilesProvider,\n }\n ]\n})\nexport class DownloadAllComponent implements OnDestroy {\n @Input() fileName: string;\n @Input() requestItems: ArtworkFilesAwareRequestItem[];\n @Input() requestId: string | number;\n @Input() isDisabled = false;\n @Input() testId = 'download_all';\n\n mode = AmMode.view;\n\n private ngUnsubscribe = new Subject();\n constructor(\n private userService: UserService,\n private loaderService: LoaderService,\n private messageService: MessageService,\n private pdfProvider: PdfProvider,\n private filesProvider: FilesProvider,\n ) {}\n\n WebViewerFunc = WebViewer;\n\n async downloadAll(showAnnotations: boolean): Promise {\n this.loaderService.showLoader();\n try {\n let medias = [];\n if (showAnnotations) {\n medias = await this.getAnnotatedFiles();\n } else {\n medias = await this.getFiles();\n }\n this.downloadZip(medias);\n } catch (e) {\n this.messageService.showSystemMessage('error', `${e}`);\n } finally {\n this.loaderService.hideLoader();\n }\n }\n\n private async getAnnotatedFiles(): Promise {\n const userDetails = this.userService.getUserDetails();\n const pdfProvider = this.pdfProvider;\n\n return pdfProvider.getFiles(userDetails, this.requestItems);\n }\n\n private async getFiles(): Promise {\n const fileProvider = this.filesProvider;\n\n return fileProvider.getFiles(this.requestId, this.requestItems);\n }\n\n private async downloadZip(inputs: InputWithoutMeta[]): Promise {\n const blob = await downloadZip(inputs).blob();\n\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = `${this.fileName}.zip`;\n link.click();\n link.remove();\n }\n\n async ngOnDestroy(): Promise {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","\n {{ 'common.button.download-all' | translate }}\n \n\n\n \n \n\n","
\n
\n {{ 'module.requests.details.upc-required-in-art' | translate }}\n {{ item?.upcRequired ? 'Yes' : 'No' }}\n
\n
\n {{ 'module.requests.third-party.items.fsc-logo-required' | translate }}\n {{ item?.fscLogoRequiredInArt ? 'Yes' : 'No' }}\n
\n
\n {{ 'module.requests.details.product-upc' | translate }}\n {{ productUpc }}\n
\n
\n {{ (item?.merchantSpecific ? 'module.requests.card-design.details.merchant' : 'module.requests.card-design.details.merchant-specific') | translate }}\n {{ item?.merchantSpecific ? item.merchant.name : ('common.label.no'|translate) }}\n
\n
\n \n {{ 'module.requests.details.dieline' | translate }}\n \n \n {{ dielines[item?.dielineType] }}\n \n \n \n
\n
\n {{ 'module.requests.details.denom' | translate }}\n {{ item?.denom }}\n
\n
\n {{ 'module.requests.details.currency-type' | translate }}\n {{ item?.currencyType }}\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\n\nimport { CardDesignRequestItemModel } from '../../../../../models/card-design-request.model';\nimport { selectDielines } from '../../../../../../reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-artwork-item-header',\n templateUrl: './artwork-item-header.component.html',\n styleUrls: ['./artwork-item-header.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ArtworkItemHeaderComponent implements OnDestroy {\n @Input() testId = 'artwork_item_header';\n @Input() public item: CardDesignRequestItemModel;\n\n public dielines: any;\n private ngUnsubscribe = new Subject();\n public dielines$ = this.store.select(selectDielines).pipe(\n map(dielines => dielines.reduce((obj, val) => ({...obj, [val.code]: val.name}), {})),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(private store: Store) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","\n
\n
\n
\n {{ 'module.requests.text.first-round-delivery-date' | translate }}:\n \n {{ request.details.firstRoundArtDeliveryDate | date: 'MM/dd/yyyy' }}\n \n
\n
\n {{ 'module.requests.text.final-art-due-date' | translate }}:\n {{ request.details.finalArtDueDate | date: 'MM/dd/yyyy' }}\n
\n
\n {{ 'module.requests.text.line-of-business' | translate }}:\n \n {{ designLineOfBusiness[request.details.lineOfBusiness] }}\n \n
\n
\n {{ 'module.requests.text.region' | translate }}:\n {{ regions[request.details.regionCode] }}\n
\n
\n
\n\n \n \n \n\n
\n \n
\n \n\n \n\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n
\n \n
\n
\n
\n \n \n \n \n \n \n {{ 'module.requests.card-design.details.please-provide-at-least-one-artwork-file' | translate }}\n \n \n \n \n {{ 'module.requests.card-design.details.item-have-rejected-artwork-files' | translate }}\n \n \n \n
\n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, map, shareReplay, takeUntil } from 'rxjs/operators';\n\nimport { CardDesignRequestItemModel, CardDesignRequestModel } from '../../../../models/card-design-request.model';\nimport { selectCardDesignRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { selectDesignLineOfBusiness, selectRegions } from '../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\n\nimport { CardDesignApprovalManagerService } from '../../../../../shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { RequestsService } from '../../../../services/requests.service';\nimport {\n FILE_SIZE_RESTRICTIONS,\n RestrictionOptionsObject\n} from '../../../../../shared/models/upload-file-restrictions.model';\nimport { AmMode } from '../../../../../shared/models/am-mode.model';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {CardDesignService} from '../../../../services/card-design.service';\nimport { ApprovalManagerClickEvent } from 'src/app/shared/components/app-artwork-item/app-artwork-item.component';\nimport { ApprovalManagerService } from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport { mixinHasPanelExpandState, CanPanelExpandState } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst _DesignProcessComponentBase = mixinHasPanelExpandState(class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n});\n\n@Component({\n selector: 'app-design-process',\n templateUrl: './design-process.component.html',\n styleUrls: ['./design-process.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ApprovalManagerService, useExisting: CardDesignApprovalManagerService}\n ]\n})\nexport class DesignProcessComponent extends _DesignProcessComponentBase implements OnInit, OnDestroy {\n public readonly mode = AmMode.design;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public fileTypesToAccept: string[] = [];\n public userRoles = UserRoles;\n\n private ngUnsubscribe = new Subject();\n private restrictionOptions: RestrictionOptionsObject = {\n fileType: FILE_TYPES.CARD_DESIGN.ARTWORK,\n fileSize: FILE_SIZE_RESTRICTIONS.CARD_DESIGN.ARTWORK\n };\n\n @Input() public isDisabled: boolean;\n @Input() public requestId: string | number;\n\n request$ = this.store.select(selectCardDesignRequestDetails).pipe(filter(v => !!v)).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n }),\n filter((req) => req.id !== this.requestId),\n takeUntil(this.ngUnsubscribe)\n );\n\n designLineOfBusiness$ = this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)).pipe(\n map(pg => pg.reduce((aggregate, pgItem) => ({...aggregate, [pgItem.code]: pgItem.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n regions$ = this.store.select(selectRegions).pipe(filter(v => v.length > 0)).pipe(\n map(pg => pg.reduce((aggregate, pgItem) => ({...aggregate, [pgItem.code]: pgItem.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n public form: FormGroup;\n\n private buildForm(request: CardDesignRequestModel) {\n this.initExpandedPanels(request.items);\n return this.formBuilder.group({\n items: this.formBuilder.array(\n request.items.map((item: CardDesignRequestItemModel) => this.formBuilder.group(\n { artworkFiles: this.formBuilder.control(item?.artworkFiles || null) },\n { validators: [UtilsService.artworksNotRejectedValidationFn()]\n })\n )\n )\n });\n }\n\n constructor(\n public approvalManagerService: CardDesignApprovalManagerService,\n public cardDesignService: CardDesignService,\n private store: Store,\n private formBuilder: FormBuilder,\n private modalService: ModalService,\n private eventService: EventService,\n private requestService: RequestsService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private cd: ChangeDetectorRef,\n ) {\n super();\n }\n\n ngOnInit(): void {\n /**\n * File type assignment subscription\n */\n this.requestService.getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ?\n data[this.restrictionOptions?.fileType] :\n data[FILE_TYPES.DEFAULT];\n }\n });\n\n /**\n * Build form subscription\n */\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((request) => {\n this.form = this.buildForm(request);\n });\n\n /**\n * Submit stage subscription\n */\n this.eventService.on(Events.DesignProcessSubmit, (event) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment\n }\n });\n }, this.ngUnsubscribe);\n\n /**\n * Validate stage subscription\n */\n this.eventService.on(Events.DesignProcessValidation, (elementRef) => {\n this.form.markAllAsTouched();\n if (this.form.valid) {\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.DesignProcessSubmit, 'right'\n );\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message')\n );\n this.cd.detectChanges();\n }\n }, this.ngUnsubscribe);\n }\n\n public removeArtworkItemFunction = (itemId: number, attachmentId: number) => this.cardDesignService.deleteArtworkItem(this.requestId, itemId, attachmentId);\n\n openApprovalManager({requestItem, artworkFile}: ApprovalManagerClickEvent) {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n fileTypesToAccept: this.fileTypesToAccept,\n restrictionOptions: this.restrictionOptions.fileSize,\n }).afterClosed().pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId as unknown as string}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n trackByItem(index, item) {\n return item?.id || index;\n }\n}\n","import { CardDesignRequestModel } from '../../models/card-design-request.model';\nimport { tmReview2StageDataCreator } from './request-details.utils';\n\nexport enum CardDesignActions {\n TmReview2Stage = '[RequestDetails CardDesign] Update TmReview2Stage',\n}\n\nconst updateTmReview2Stage = tmReview2StageDataCreator(\n CardDesignActions.TmReview2Stage,\n);\n\n\nexport const cardDesignActions = {\n updateTmReview2Stage,\n};\n","
\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n\n \n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n

\n \n {{ 'module.requests.card-design.tm-review-2.additional-review-info' | translate }}\n

\n
\n
\n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup} from '@angular/forms';\nimport {Subject, Subscription, merge} from 'rxjs';\nimport {debounceTime, distinctUntilKeyChanged, filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {select, Store} from '@ngrx/store';\nimport {selectCardDesignRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {CardDesignRequestItemModel, CardDesignRequestModel} from '../../../../models/card-design-request.model';\nimport {FILE_TYPES, FileTypes} from '../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS, RestrictionOptionsObject} from '../../../../../shared/models/upload-file-restrictions.model';\nimport {CardDesignApprovalManagerService} from '../../../../../shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {CardDesignEvents, Events, EventService} from 'src/app/shared/services/event-service.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {AmMode, AmModeType} from 'src/app/shared/models/am-mode.model';\nimport {CardDesignService} from 'src/app/requests/services/card-design.service';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {ApprovalManagerService} from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport {RequestsService} from 'src/app/requests/services/requests.service';\nimport {cardDesignActions} from 'src/app/requests/reducers/request-details/card-design.actions';\n\n@Component({\n selector: 'app-tm-review2',\n templateUrl: './tm-review2.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: CardDesignApprovalManagerService\n }\n ]\n})\nexport class TmReview2Component implements OnInit, OnDestroy {\n @Input() public isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private requestId: number;\n private request: CardDesignRequestModel;\n\n fileTypesToAccept: string[] = [];\n private restrictionOptions: RestrictionOptionsObject = {\n fileType: FILE_TYPES.CARD_DESIGN.ARTWORK,\n fileSize: FILE_SIZE_RESTRICTIONS.CARD_DESIGN.ARTWORK\n };\n public expandedItems = new Set([]);\n\n public readonly mode: AmModeType = AmMode.approval;\n\n public form: FormGroup;\n public fileTypes: FileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public userRoles = UserRoles;\n\n public request$ = this.store.pipe(\n select(selectCardDesignRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n\n constructor(\n private fb: FormBuilder,\n private store: Store,\n private modalService: ModalService,\n public cardDesignService: CardDesignService,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private translateService: TranslateService,\n public approvalManagerService: CardDesignApprovalManagerService,\n private cd: ChangeDetectorRef,\n private requestService: RequestsService\n ) {}\n\n ngOnInit(): void {\n this.requestService\n .getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ? data[this.restrictionOptions?.fileType] : data[FILE_TYPES.DEFAULT];\n }\n });\n this.form = this.initForm();\n\n this.initEventHandlers();\n this.initControlsSubs();\n\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(request => {\n this.requestId = request.id;\n this.request = request;\n this.updateForm(request);\n this.cd.markForCheck();\n });\n\n this.request$.pipe(distinctUntilKeyChanged('id'), takeUntil(this.ngUnsubscribe)).subscribe(r => {\n (r.items || []).forEach((i, itemIndex) => {\n this.expandedItems.add(itemIndex);\n });\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public openApprovalManager({requestItem, artworkFile}): void {\n this.modalService\n .openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n fileTypesToAccept: this.fileTypesToAccept,\n restrictionOptions: this.restrictionOptions.fileSize\n })\n .afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId as unknown as string}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n public removeArtworkItemFunction = (itemId: number, attachmentId: number) =>\n this.cardDesignService.deleteArtworkItem(this.requestId, itemId, attachmentId);\n\n private initEventHandlers() {\n this.subscriptions.push(this.initFilesValidationHandler(), this.initSubmitHandler());\n }\n\n onItemExpandChange(itemIndex: number, expanded: boolean) {\n if (expanded) {\n this.expandedItems.add(itemIndex);\n } else {\n this.expandedItems.delete(itemIndex);\n }\n }\n\n private initControlsSubs(): void {\n merge(this.form.get('cdReviewRequired').valueChanges, this.form.get('quantityOfFiles').valueChanges)\n .pipe(\n debounceTime(300),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.store.dispatch(\n cardDesignActions.updateTmReview2Stage({\n cdReviewRequired: this.form.get('cdReviewRequired').value,\n quantityOfFiles: this.form.get('quantityOfFiles').value\n })\n );\n });\n }\n\n private initFilesValidationHandler(): Subscription {\n return this.eventService.on(CardDesignEvents.TmReview2SubmitValidated, elementRef => {\n this.validateFilesStatus(elementRef);\n });\n }\n\n private initSubmitHandler(): Subscription {\n return this.eventService.on(CardDesignEvents.TmReview2Submit, ({comment}) => {\n this.completeStep(comment);\n });\n }\n\n private completeStep(comment: string) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n\n private validateFilesStatus(elementRef: ElementRef): void {\n if (this.form.valid) {\n return this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', CardDesignEvents.TmReview2Submit, 'right');\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('module.requests.approve.approve-required'),\n this.translateService.instant('module.requests.approve.submit-stage-error')\n );\n }\n\n private initForm(): FormGroup {\n return this.fb.group({\n items: this.initFormItems(),\n quantityOfFiles: this.fb.control(null),\n cdReviewRequired: this.fb.control(false)\n });\n }\n\n private initFormItems(items: CardDesignRequestItemModel[] = []): FormArray {\n return this.fb.array(\n items.map(item =>\n this.fb.group(\n {artworkFiles: this.fb.control(item?.artworkFiles || null)},\n {validators: [UtilsService.artworksApprovedValidationFn(this.approvalManagerService)]}\n )\n )\n );\n }\n\n private updateForm(request: CardDesignRequestModel): void {\n this.form.patchValue(\n {\n cdReviewRequired: request.details?.cdReviewRequired,\n quantityOfFiles: request.details?.quantityOfFiles\n },\n {\n emitEvent: false\n }\n );\n\n this.form.setControl('items', this.initFormItems(request.items));\n }\n}\n","\n
\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport { selectCardDesignRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { CardDesignApprovalManagerService } from '../../../../../shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport { AmMode } from '../../../../../shared/models/am-mode.model';\nimport { CardDesignEvents, Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { CardDesignRequestModel } from 'src/app/requests/models/card-design-request.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {ApprovalManagerClickEvent} from '../../../../../shared/components/app-artwork-item/app-artwork-item.component';\nimport {CardDesignService} from '../../../../services/card-design.service';\nimport { ApprovalManagerService } from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport { CanPanelExpandState, mixinHasPanelExpandState } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst CreativeReviewComponentBase = mixinHasPanelExpandState(class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n});\n\n@Component({\n selector: 'app-creative-review',\n templateUrl: './creative-review.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ApprovalManagerService, useExisting: CardDesignApprovalManagerService}\n ]\n})\nexport class CreativeReviewComponent extends CreativeReviewComponentBase implements OnInit, OnDestroy {\n @Input() public requestId: number;\n @Input() public isDisabled: boolean;\n\n public readonly mode = AmMode.approval;\n public form: FormGroup;\n public userRoles = UserRoles;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n\n request$ = this.store.select(selectCardDesignRequestDetails).pipe(filter(v => !!v)).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n public approvalManagerService: CardDesignApprovalManagerService,\n public cardDesignService: CardDesignService,\n private store: Store,\n private modalService: ModalService,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private translateService: TranslateService,\n private fb: FormBuilder,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setEventSubscriptions();\n\n this.request$.subscribe(request => {\n this.form = this.buildForm(request);\n this.initExpandedPanels(request.items);\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public openApprovalManager({ requestItem, artworkFile }: ApprovalManagerClickEvent): void {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n }).afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({ requestId: this.requestId as unknown as string }));\n this.eventService.emit({ eventName: Events.UpdateActionHistory });\n });\n }\n\n private buildForm(request: CardDesignRequestModel) {\n return this.fb.group({\n items: this.fb.array(\n request.items.map(() => this.fb.group(\n { artworkFiles: new FormControl(null) },\n { validators: [UtilsService.artworksApprovedValidationFn(this.approvalManagerService)] },\n ),\n ),\n ),\n });\n }\n\n private setEventSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(CardDesignEvents.CreativeReviewSubmitValidated, (elementRef) => {\n if (this.form.valid) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', CardDesignEvents.CreativeReviewSubmit, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('module.requests.approve.approve-required'),\n this.translateService.instant('module.requests.approve.submit-stage-error'),\n );\n }),\n this.eventService.on(CardDesignEvents.CreativeReviewSubmit, (event) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n }),\n );\n }\n}\n","
\n\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n\n
\n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component, ElementRef, Input, OnDestroy, OnInit} from '@angular/core';\nimport {Subject, Subscription} from 'rxjs';\nimport {select, Store} from '@ngrx/store';\nimport {selectCardDesignRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport { AmMode, AmModeType } from 'src/app/shared/models/am-mode.model';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { FileTypes, FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { ModalService } from 'src/app/shared/services/modal-service.service';\nimport { CardDesignEvents, Events, EventService } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { CardDesignApprovalManagerService } from 'src/app/shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport { CardDesignRequestItemModel, CardDesignRequestModel } from 'src/app/requests/models/card-design-request.model';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {CardDesignService} from '../../../../services/card-design.service';\nimport { ApprovalManagerService } from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport { CanPanelExpandState, mixinHasPanelExpandState } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst ClientProofComponentBase = mixinHasPanelExpandState(class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n});\n\n@Component({\n selector: 'app-client-proof',\n templateUrl: './client-proof.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ApprovalManagerService, useExisting: CardDesignApprovalManagerService}\n ]\n})\nexport class ClientProofComponent extends ClientProofComponentBase implements OnInit, OnDestroy {\n @Input() public isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private requestItemToFilesStatus = new Map();\n private requestId: number;\n\n public readonly mode: AmModeType = AmMode.final;\n\n public form: FormGroup;\n public fileTypes: FileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n public request$ = this.store\n .pipe(\n select(selectCardDesignRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private fb: FormBuilder,\n private store: Store,\n private modalService: ModalService,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private translateService: TranslateService,\n public approvalManagerService: CardDesignApprovalManagerService,\n public cardDesignService: CardDesignService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.initEventHandlers();\n\n this.request$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((request) => {\n this.requestId = request.id;\n this.form = this.initForm(request);\n this.initExpandedPanels(request.items);\n this.initRequestItemsFilesData(request.items || []);\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public openApprovalManager({requestItem, artworkFile}): void {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n }).afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({ requestId: this.requestId as unknown as string }));\n this.eventService.emit({ eventName: Events.UpdateActionHistory });\n });\n }\n\n public trackByRequestItems(index: number, item: CardDesignRequestItemModel): number {\n return item?.id || index;\n }\n\n private initEventHandlers() {\n this.subscriptions.push(\n this.initFilesValidationHandler(),\n this.initSubmitHandler(),\n );\n }\n\n private initFilesValidationHandler(): Subscription {\n return this.eventService.on(CardDesignEvents.IntExtClientProofApproveValidated, (elementRef) => {\n this.validateFilesStatus(elementRef);\n });\n }\n\n private initSubmitHandler(): Subscription {\n return this.eventService.on(CardDesignEvents.IntExtClientProofApprove, ($event) => {\n\n this.completeStep($event.comment);\n });\n }\n\n private completeStep(comment: string) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n\n private validateFilesStatus(elementRef: ElementRef): void {\n if (this.form.valid) {\n return this.stepActionsService.addReason(\n elementRef,\n 'step-submit',\n 'step-submit',\n CardDesignEvents.IntExtClientProofApprove,\n 'right');\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('module.requests.approve.approve-required'),\n this.translateService.instant('module.requests.approve.submit-stage-error'),\n );\n }\n\n private initForm(request: CardDesignRequestModel): FormGroup {\n const requestItems = (request?.items || [])\n .map(() => this.fb.group(\n { artworkFiles: new FormControl(null) },\n { validators: [UtilsService.artworksApprovedValidationFn(this.approvalManagerService)] },\n ));\n\n return this.fb.group({\n items: this.fb.array(requestItems),\n });\n }\n\n private initRequestItemsFilesData(requestItems: CardDesignRequestItemModel[]): void {\n requestItems.forEach((ri) => this.initItemArtworkFilesData(ri));\n }\n\n private initItemArtworkFilesData(requestItem: CardDesignRequestItemModel): void {\n const artworkFilesStatuses = this.approvalManagerService.getRequestArtworkFilesStatuses(requestItem);\n\n const artworkFilesStatus = (artworkFilesStatuses.length)\n ? this.approvalManagerService.getOverallArtworkFilesStatus(artworkFilesStatuses)\n : 'none';\n\n this.requestItemToFilesStatus.set(requestItem.id, artworkFilesStatus);\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {CardDesignRequestItemModel, CardDesignRequestModel} from 'src/app/requests/models/card-design-request.model';\nimport {PopDesignRequestItemModel, PopDesignRequestModel} from 'src/app/requests/models/pop-design-request.model';\nimport {CardDesignEvents, PopDesignEvents} from 'src/app/shared/services/event-service.service';\nimport {MemoizedSelector} from '@ngrx/store';\n\nexport type TmReview3RequestTypes = CardDesignRequestModel | PopDesignRequestModel;\nexport type TmReview3RequestItemTypes = CardDesignRequestItemModel | PopDesignRequestItemModel;\nexport type TmReview3SubmitEventTypes = CardDesignEvents.TmReview3Submit | PopDesignEvents.TmReview3Submit;\n\nexport const TM_REVIEW_3_REQUEST_SELECTOR = new InjectionToken>(\n 'TM_REVIEW_3_REQUEST_SELECTOR'\n);\nexport const TM_REVIEW_3_SUBMIT_EVENT_NAME = new InjectionToken('TM_REVIEW_3_SUBMIT_EVENT_NAME');\n","import {Directive, Inject, Input, OnDestroy, OnInit} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {EXPANSION_PANEL_ANIMATION_TIMING} from '@angular/material/expansion';\nimport {MemoizedSelector, select, Store} from '@ngrx/store';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {debounceTime, filter, shareReplay, takeUntil, tap} from 'rxjs/operators';\nimport {ARTWORK_STATUSES} from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport {ArtworkFileAttachment} from 'src/app/requests/models/card-design-request.model';\nimport {CardDesignService} from 'src/app/requests/services/card-design.service';\nimport {\n CanPanelExpandState,\n mixinHasPanelExpandState\n} from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport {FILE_TYPES, FileTypes} from 'src/app/shared/constants/upload-restrictions.constants';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {AmMode, AmModeType} from 'src/app/shared/models/am-mode.model';\nimport {FILE_SIZE_RESTRICTIONS} from 'src/app/shared/models/upload-file-restrictions.model';\nimport {ApprovalManagerService} from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {Events, EventService} from 'src/app/shared/services/event-service.service';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\n\nimport {\n TM_REVIEW_3_REQUEST_SELECTOR,\n TM_REVIEW_3_SUBMIT_EVENT_NAME,\n TmReview3RequestItemTypes,\n TmReview3RequestTypes,\n TmReview3SubmitEventTypes\n} from './tm-review-3-base.service';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst TmReview3BaseComponentPanelStateAwareAncestor = mixinHasPanelExpandState(\n class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n }\n);\n\n@Directive()\nexport abstract class TmReview3BaseComponent extends TmReview3BaseComponentPanelStateAwareAncestor implements OnInit, OnDestroy {\n @Input() public isDisabled: boolean;\n @Input() public requestId: number | string;\n\n protected ngUnsubscribe = new Subject();\n protected subscriptions: Subscription[] = [];\n readonly EXPANSION_PANEL_ANIMATION_TIMING = EXPANSION_PANEL_ANIMATION_TIMING;\n\n public readonly mode: AmModeType = AmMode.final;\n\n public form: FormGroup;\n public fileTypes: FileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public userRoles = UserRoles;\n\n public request$!: Observable;\n loading$!: Observable;\n\n constructor(\n protected store: Store,\n public cardDesignService: CardDesignService,\n protected eventService: EventService,\n public approvalManagerService: ApprovalManagerService,\n protected loaderService: LoaderService,\n @Inject(TM_REVIEW_3_REQUEST_SELECTOR) requestSelector: MemoizedSelector,\n @Inject(TM_REVIEW_3_SUBMIT_EVENT_NAME) private submitEventName: TmReview3SubmitEventTypes\n ) {\n super();\n\n this.loading$ = this.loaderService.loading$.pipe(debounceTime(0));\n this.request$ = this.store.pipe(\n select(requestSelector),\n filter(v => !!v),\n tap(request => this.initExpandedPanels(request.items)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n }\n\n ngOnInit(): void {\n this.initEventHandlers();\n }\n\n getItemArtifacts(item: TmReview3RequestItemTypes): Array {\n return this.approvalManagerService.getArtworkFilesByStatus(item, this.mode, ARTWORK_STATUSES.approved);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private initEventHandlers() {\n this.subscriptions.push(this.initSubmitHandler());\n }\n\n private initSubmitHandler(): Subscription {\n return this.eventService.on(this.submitEventName, ({comment}) => {\n this.completeStep(comment);\n });\n }\n\n private completeStep(comment: string) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n}\n","
\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n\n
\n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n\n
\n \n \n {{ 'module.requests.card-design.print-artifacts.approved-artworks' | translate }}\n \n {{ getItemArtifacts(item).length }}\n \n \n
\n\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\nimport {CardDesignEvents} from 'src/app/shared/services/event-service.service';\n\nimport {ApprovalManagerService} from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport {CardDesignApprovalManagerService} from '../../../../../shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport {selectCardDesignRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {TmReview3BaseComponent} from '../../../shared/tm-review-3-base/tm-review-3-base.component';\nimport {TM_REVIEW_3_REQUEST_SELECTOR, TM_REVIEW_3_SUBMIT_EVENT_NAME} from '../../../shared/tm-review-3-base/tm-review-3-base.service';\n\n@Component({\n selector: 'app-tm-review3',\n templateUrl: './tm-review3.component.html',\n styleUrls: ['./tm-review3.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: CardDesignApprovalManagerService\n },\n {\n provide: TM_REVIEW_3_REQUEST_SELECTOR,\n useValue: selectCardDesignRequestDetails\n },\n {\n provide: TM_REVIEW_3_SUBMIT_EVENT_NAME,\n useValue: CardDesignEvents.TmReview3Submit\n }\n ]\n})\nexport class TmReview3Component extends TmReview3BaseComponent {}\n","import {Inject, Injectable, InjectionToken} from '@angular/core';\nimport {MemoizedSelector, Store} from '@ngrx/store';\nimport {combineLatest, Observable} from 'rxjs';\nimport {distinctUntilKeyChanged, map, pluck, take} from 'rxjs/operators';\nimport {AbstractRoleUpdateAwareProvider} from 'src/app/requests/classes/role-update-aware-provider';\nimport {CardDesignRequestItemModel, CardDesignRequestModel} from 'src/app/requests/models/card-design-request.model';\nimport {PopDesignRequestItemModel, PopDesignRequestModel} from 'src/app/requests/models/pop-design-request.model';\nimport {\n CARD_DESIGN_REQUEST_STAGE_PREP_ARTIFACTS,\n POP_DESIGN_REQUEST_STAGE_PREP_ARTIFACTS,\n SpecificRoles\n} from 'src/app/shared/constants/user-roles.constant';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport {CardDesignEvents, PopDesignEvents} from 'src/app/shared/services/event-service.service';\nimport {UserService} from 'src/app/shared/services/user.service';\n\nimport {CARD_DESIGN_REQUEST, POP_DESIGN_REQUEST} from '../../../constants/request-types.constant';\n\nexport type PrepArtifactRequestTypes = CardDesignRequestModel | PopDesignRequestModel;\nexport type PrepArtifactRequestItemTypes = CardDesignRequestItemModel | PopDesignRequestItemModel;\n\nexport const ASSIGNER_DESIGNER_FIELD_NAME = 'prepArtifactsDesigner';\n\nexport const PREP_ARTIFACT_REQUEST_SELECTOR = new InjectionToken>(\n 'PREP_ARTIFACT_REQUEST_SELECTOR'\n);\n\nexport const REQUEST_TYPE_TO_ROLE_MAP = {\n [CARD_DESIGN_REQUEST]: SpecificRoles.CARD_DESIGN_REQUEST_ASSIGNED_PREP_ARTIFACT_DESIGNER,\n [POP_DESIGN_REQUEST]: SpecificRoles.POP_DESIGN_REQUEST_ASSIGNED_PREP_ARTIFACT_DESIGNER\n};\n\nexport type PrepArtifactSaveEventTypes = CardDesignEvents.PrepArtifactSave | PopDesignEvents.PrepArtifactSave;\nexport const PREP_ARTIFACT_SAVE_EVENT_NAME = new InjectionToken('PREP_ARTIFACT_SAVE_EVENT_NAME');\n\nexport type PrepArtifactValidatedEventTypes = CardDesignEvents.PrepArtifactValidated | PopDesignEvents.PrepArtifactValidated;\nexport const PREP_ARTIFACT_VALIDATED_EVENT_NAME = new InjectionToken('PREP_ARTIFACT_VALIDATED_EVENT_NAME');\n\nexport type PrepArtifactSubmitEventTypes = CardDesignEvents.PrepArtifactSubmit | PopDesignEvents.PrepArtifactSubmit;\nexport const PREP_ARTIFACT_SUBMIT_EVENT_NAME = new InjectionToken('PREP_ARTIFACT_SUBMIT_EVENT_NAME');\n\nexport interface AssignPrepDesignerService {\n prepArtifactsDesigner(requestId: number, data: UserModel | null): Observable;\n updateArtPathNotes(requestId: number, data: any): Observable;\n}\nexport const ASSIGN_PREP_DESIGNER_SERVICE = new InjectionToken('ASSIGN_PREP_DESIGNER_SERVICE');\n\nexport type PrepArtifactStageName = typeof CARD_DESIGN_REQUEST_STAGE_PREP_ARTIFACTS | typeof POP_DESIGN_REQUEST_STAGE_PREP_ARTIFACTS;\nexport type PrepArtifactRequestName = typeof CARD_DESIGN_REQUEST | typeof POP_DESIGN_REQUEST;\n\n@Injectable()\nexport class PrepArtifactRoleProvider extends AbstractRoleUpdateAwareProvider {\n constructor(\n private store: Store,\n private userService: UserService,\n @Inject(PREP_ARTIFACT_REQUEST_SELECTOR) private requestSelector: MemoizedSelector\n ) {\n super();\n }\n\n private prepArtifactDesignerAssigned(): Observable {\n return combineLatest([this.store.select(this.requestSelector), this.userService.getUserDetails$()]).pipe(\n map(\n ([rd, u]) =>\n [\n rd.type,\n rd.details[ASSIGNER_DESIGNER_FIELD_NAME] != null &&\n [u.userName, ...(u.substitutedUsers || [])].includes(rd.details[ASSIGNER_DESIGNER_FIELD_NAME].userName)\n ] as const\n ),\n map(([type, isAssigned]) => (isAssigned ? REQUEST_TYPE_TO_ROLE_MAP[type] : null))\n );\n }\n\n public async getRoles(): Promise {\n const specificRole = await this.prepArtifactDesignerAssigned().pipe(take(1)).toPromise();\n return [specificRole].filter(s => !!s);\n }\n\n roleUpdates$ = this.store.select(this.requestSelector).pipe(\n pluck('details'),\n distinctUntilKeyChanged(ASSIGNER_DESIGNER_FIELD_NAME),\n map(details => ({\n source: this,\n data: details[ASSIGNER_DESIGNER_FIELD_NAME]\n }))\n );\n}\n","import {ChangeDetectorRef, Directive, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {EXPANSION_PANEL_ANIMATION_TIMING} from '@angular/material/expansion';\nimport {Actions} from '@ngrx/effects';\nimport {MemoizedSelector, Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {combineLatest, from, merge, Observable, of, Subject, Subscription, BehaviorSubject} from 'rxjs';\nimport {debounceTime, filter, finalize, find, map, mapTo, shareReplay, switchMap, take, takeUntil, tap, timeout} from 'rxjs/operators';\nimport {RoleProviderAggregator} from 'src/app/requests/classes/role-provider-aggregator';\nimport {ARTWORK_STATUSES} from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport {REQUEST_TYPE} from 'src/app/requests/constants/request-types.constant';\nimport {ArtworkFileAttachment} from 'src/app/requests/models/card-design-request.model';\nimport {PopDesignRequestItemModel} from 'src/app/requests/models/pop-design-request.model';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {\n loadRequestSteps,\n loadRequestStepsFailure,\n loadRequestStepsSuccess\n} from 'src/app/requests/reducers/request-steps/request-steps.actions';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {UsersService} from 'src/app/requests/services/users.service';\nimport {\n CanPanelExpandState,\n mixinHasPanelExpandState\n} from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport {UserGroups} from 'src/app/shared/constants/user-groups.enum';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {AmMode, AmModeType} from 'src/app/shared/models/am-mode.model';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport {ApprovalManagerService} from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {Events, EventService, RequestEvents} from 'src/app/shared/services/event-service.service';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\nimport {UserPermissionsService} from 'src/app/shared/services/user-permissions.service';\nimport {UserService} from 'src/app/shared/services/user.service';\n\nimport {\n ASSIGN_PREP_DESIGNER_SERVICE,\n ASSIGNER_DESIGNER_FIELD_NAME,\n AssignPrepDesignerService,\n PREP_ARTIFACT_REQUEST_SELECTOR,\n PREP_ARTIFACT_SAVE_EVENT_NAME,\n PREP_ARTIFACT_SUBMIT_EVENT_NAME,\n PREP_ARTIFACT_VALIDATED_EVENT_NAME,\n PrepArtifactRequestItemTypes,\n PrepArtifactRequestName,\n PrepArtifactRequestTypes,\n PrepArtifactRoleProvider,\n PrepArtifactStageName\n} from './prep-artifact-role.provider';\n\nconst PrepArtifactBaseComponentPanelStateAwareAncestor = mixinHasPanelExpandState(\n class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n }\n);\n\n@Directive()\nexport abstract class PrepArtifactBaseComponent\n extends PrepArtifactBaseComponentPanelStateAwareAncestor\n implements OnInit, OnDestroy, OnChanges\n{\n protected abstract requestType: PrepArtifactRequestName;\n protected abstract stageName: PrepArtifactStageName;\n\n @Input() public isDisabled: boolean;\n private isStepDisabledSubject = new BehaviorSubject(null);\n @Input() public set isStepDisabled(isStepDisabled: boolean) {\n this.isStepDisabledSubject.next(isStepDisabled);\n }\n get isStepDisabled(): boolean {\n return this.isStepDisabledSubject.value;\n }\n @Input() public requestId: string | number;\n readonly EXPANSION_PANEL_ANIMATION_TIMING = EXPANSION_PANEL_ANIMATION_TIMING;\n readonly DesignerGroup = UserGroups.Designer;\n\n public readonly userRoles = UserRoles;\n public form: FormGroup;\n public designerForm: FormGroup;\n protected ngUnsubscribe = new Subject();\n private mode: AmModeType = AmMode.final;\n private subscriptions: Subscription[] = [];\n private requestDetailsSnapshot: PrepArtifactRequestTypes;\n private designerFormSubscriptions: Subscription[] = [];\n\n request$!: Observable;\n get designerControl(): FormControl {\n return this.designerForm?.get(ASSIGNER_DESIGNER_FIELD_NAME) as FormControl;\n }\n designerCanAssign$ = of(false);\n designerCanClear$ = of(false);\n designers$ = this.usersService\n .getUsers$({\n groupKeys: UserGroups.Designer\n })\n .pipe(take(1), takeUntil(this.ngUnsubscribe));\n\n loading$!: Observable;\n\n constructor(\n protected store: Store,\n protected actions: Actions,\n protected fb: FormBuilder,\n public approvalManagerService: ApprovalManagerService,\n protected eventService: EventService,\n protected cd: ChangeDetectorRef,\n protected loaderService: LoaderService,\n protected stepActionsService: StepActionsService,\n protected messageService: MessageService,\n protected translatePipe: TranslatePipe,\n protected userService: UserService,\n protected userPermissionsService: UserPermissionsService,\n protected roleProviderAggregator: RoleProviderAggregator,\n protected prepArtifactRoleProvider: PrepArtifactRoleProvider,\n protected usersService: UsersService,\n @Inject(ASSIGN_PREP_DESIGNER_SERVICE) protected assignPrepDesignerService: AssignPrepDesignerService,\n @Inject(PREP_ARTIFACT_REQUEST_SELECTOR) requestSelector: MemoizedSelector,\n @Inject(PREP_ARTIFACT_SAVE_EVENT_NAME) protected saveEventName: RequestEvents,\n @Inject(PREP_ARTIFACT_VALIDATED_EVENT_NAME) protected validatedEventName: RequestEvents,\n @Inject(PREP_ARTIFACT_SUBMIT_EVENT_NAME) protected submitEventName: RequestEvents\n ) {\n super();\n this.loading$ = this.loaderService.loading$.pipe(debounceTime(0));\n this.request$ = this.store\n .select(requestSelector)\n .pipe(filter(v => !!v))\n .pipe(\n tap(d => (this.requestDetailsSnapshot = d)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n }\n\n ngOnInit(): void {\n this.roleProviderAggregator.addRoleProvider(this.prepArtifactRoleProvider);\n\n this.request$.subscribe(requestData => {\n this.initExpandedPanels(requestData.items);\n this.buildForm(requestData);\n });\n\n this.request$.subscribe(this.buildDesignerForm.bind(this));\n\n this.setEventSubscriptions();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.roleProviderAggregator.removeRoleProvider(this.prepArtifactRoleProvider);\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private buildDesignerForm(request: PrepArtifactRequestTypes): void {\n const assignedDesigner = request.details[ASSIGNER_DESIGNER_FIELD_NAME];\n this.designerForm = this.fb.group({\n [ASSIGNER_DESIGNER_FIELD_NAME]: this.fb.control({\n value: assignedDesigner,\n disabled: true\n })\n });\n\n this.designerFormSubscriptions.forEach(s => s.unsubscribe());\n this.designerFormSubscriptions.push(\n // Auto-assign current user in case if not set\n combineLatest([\n this.userService.getUserDetails$(),\n this.userPermissionsService.isActionAvailable(this.userRoles[this.requestType][this.stageName]['auto-assign']),\n this.isStepDisabledSubject.asObservable()\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([u, shouldAutoAssign, isStepDisabled]) => {\n if (!isStepDisabled && this.designerControl.value == null && shouldAutoAssign) {\n this.designerControl.setValue(u);\n }\n }),\n // enable designer selection in case if user is TM or Designer\n combineLatest([\n from(this.userPermissionsService.isActionAvailable(this.userRoles[this.requestType][this.stageName]['can-assign-designer'])),\n this.isStepDisabledSubject.asObservable()\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([isTmDesigner, isStepDisabled]) => {\n if (isTmDesigner && !isStepDisabled) {\n this.designerControl.enable();\n }\n })\n );\n\n this.designerCanAssign$ = merge(of(this.designerControl.value), this.designerControl.valueChanges).pipe(\n map(() => this.designerControl.value?.userName !== assignedDesigner?.userName),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n this.designerCanClear$ = merge(of(this.designerControl.value), this.designerControl.valueChanges).pipe(\n map(() => !(assignedDesigner == null)),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n }\n\n private buildForm(request: PrepArtifactRequestTypes): void {\n this.form = this.fb.group({\n items: this.fb.array(\n request.items.map((item: PrepArtifactRequestItemTypes) =>\n this.fb.group({\n id: this.fb.control(item.id),\n notes: this.fb.control(\n request.type === REQUEST_TYPE.CDR ? item?.notes : (item as PopDesignRequestItemModel)?.artworkItemNotes || null,\n [Validators.maxLength(10000)]\n )\n })\n )\n )\n });\n\n if (this.isDisabled) {\n this.form.disable();\n }\n }\n public onDesignerAssign(value: UserModel | null): void {\n this.loaderService.showLoader();\n this.assignPrepDesignerService\n .prepArtifactsDesigner(+this.requestId, value)\n .pipe(\n switchMap(response => {\n this.store.dispatch(\n requestDetailsActions.updateRequestDetailsSuccess({\n data: response\n })\n );\n\n this.store.dispatch(loadRequestSteps({requestId: this.requestId as string}));\n return this.actions.pipe(\n timeout(20000),\n find(a => [loadRequestStepsSuccess.type as string, loadRequestStepsFailure.type as string].includes(a.type), true),\n mapTo(response)\n );\n }),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe({\n next: () => {\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n },\n complete: () => this.loaderService.hideLoader()\n });\n }\n\n getItemArtifacts(item: PrepArtifactRequestTypes): Array {\n return this.approvalManagerService.getArtworkFilesByStatus(item, this.mode, ARTWORK_STATUSES.approved);\n }\n\n private setEventSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(this.saveEventName, () => {\n this.loaderService.showLoader();\n this.updateNotes()\n .pipe(\n finalize(() => {\n this.loaderService.hideLoader();\n })\n )\n .subscribe(requestData => {\n this.store.dispatch(\n requestDetailsActions.loadRequestDetailsSuccess({\n data: requestData\n })\n );\n });\n }),\n this.eventService.on(this.validatedEventName, elementRef => {\n if (this.form.valid) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', this.submitEventName, 'right', true);\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translatePipe.transform('common.modal.errors.invalid-form-header'),\n this.translatePipe.transform('common.modal.errors.invalid-form-desc')\n );\n }),\n this.eventService.on(this.submitEventName, ({comment}) => {\n this.loaderService.showLoader();\n this.updateNotes()\n .pipe(finalize(() => {}))\n .subscribe(() => {\n this.messageService.showSystemMessage('success', this.translatePipe.transform('common.message.step-saved'), '');\n this.completeStep(comment);\n });\n })\n );\n }\n\n private updateNotes(): Observable {\n const data = this.form.getRawValue().items.map(item => ({\n requestItemId: item.id,\n artPathNotesDto: {\n notes: item.notes\n }\n }));\n\n return this.assignPrepDesignerService.updateArtPathNotes(this.requestId as number, data);\n }\n\n private completeStep(comment: string) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n}\n","\n
\n
\n \n \n \n
\n \n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n
\n \n \n {{ 'module.requests.card-design.print-artifacts.approved-artworks' | translate }}\n \n {{ getItemArtifacts(item).length }}\n \n \n
\n
\n
\n \n
\n \n \n \n
\n \n
\n \n
\n
\n","import { ChangeDetectionStrategy, Component, OnChanges, OnDestroy, OnInit } from '@angular/core';\nimport {\n PrepArtifactBaseComponent,\n} from 'src/app/requests/components/shared/prep-artifact-base/prep-artifact-base.component';\nimport {\n ASSIGN_PREP_DESIGNER_SERVICE,\n PREP_ARTIFACT_REQUEST_SELECTOR,\n PREP_ARTIFACT_SAVE_EVENT_NAME,\n PREP_ARTIFACT_SUBMIT_EVENT_NAME,\n PREP_ARTIFACT_VALIDATED_EVENT_NAME,\n PrepArtifactRequestName,\n PrepArtifactRoleProvider,\n} from 'src/app/requests/components/shared/prep-artifact-base/prep-artifact-role.provider';\n\nimport { ApprovalManagerService } from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport {\n CardDesignApprovalManagerService,\n} from '../../../../../shared/services/approval-manager/card-design/card-design-approval-manager.service';\nimport { CardDesignEvents } from '../../../../../shared/services/event-service.service';\nimport { CARD_DESIGN_REQUEST } from '../../../../constants/request-types.constant';\nimport { selectCardDesignRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { CardDesignService } from '../../../../services/card-design.service';\n\n@Component({\n selector: 'app-prep-artifact',\n templateUrl: './prep-artifact.component.html',\n styleUrls: ['./prep-artifact.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ASSIGN_PREP_DESIGNER_SERVICE, useExisting: CardDesignService},\n {provide: PREP_ARTIFACT_REQUEST_SELECTOR, useValue: selectCardDesignRequestDetails},\n {provide: PREP_ARTIFACT_SAVE_EVENT_NAME, useValue: CardDesignEvents.PrepArtifactSave},\n {provide: PREP_ARTIFACT_VALIDATED_EVENT_NAME, useValue: CardDesignEvents.PrepArtifactValidated},\n {provide: PREP_ARTIFACT_SUBMIT_EVENT_NAME, useValue: CardDesignEvents.PrepArtifactSubmit},\n {provide: ApprovalManagerService, useExisting: CardDesignApprovalManagerService},\n PrepArtifactRoleProvider\n ]\n})\nexport class PrepArtifactComponent extends PrepArtifactBaseComponent implements OnInit, OnDestroy, OnChanges {\n protected requestType: PrepArtifactRequestName = CARD_DESIGN_REQUEST;\n protected stageName = 'PREP_ARTIFACTS' as const;\n}\n","import { InjectionToken } from '@angular/core';\nimport { MemoizedSelector } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { CardDesignRequestItemModel, CardDesignRequestModel } from 'src/app/requests/models/card-design-request.model';\nimport { PopDesignRequestItemModel, PopDesignRequestModel } from 'src/app/requests/models/pop-design-request.model';\nimport { CardDesignEvents, PopDesignEvents } from 'src/app/shared/services/event-service.service';\n\nexport type PostArtifactRequestTypes = CardDesignRequestModel | PopDesignRequestModel;\nexport type PostArtifactRequestItemTypes = CardDesignRequestItemModel | PopDesignRequestItemModel;\n\nexport const ASSIGNER_DESIGNER_FIELD_NAME = 'prepArtifactsDesigner';\n\nexport const POST_ARTIFACT_REQUEST_SELECTOR = new InjectionToken>(\n 'POST_ARTIFACT_REQUEST_SELECTOR'\n);\n\nexport type PostArtifactSubmitEventTypes = CardDesignEvents.PostArtifactSubmit | PopDesignEvents.PostArtifactSubmit;\nexport const POST_ARTIFACT_SUBMIT_EVENT_NAME = new InjectionToken('POST_ARTIFACT_SUBMIT_EVENT_NAME');\n\nexport interface UpdateArtPathNotesService {\n updateArtPathNotes(requestId: number, data: any): Observable;\n}\nexport const UPDATE_ART_PATH_NOTES_SERVICE = new InjectionToken('UPDATE_ART_PATH_NOTES_SERVICE');\n","import {ChangeDetectorRef, Directive, Inject, Input, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {EXPANSION_PANEL_ANIMATION_TIMING} from '@angular/material/expansion';\nimport {MemoizedSelector, Store} from '@ngrx/store';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {debounceTime, filter, finalize, shareReplay, takeUntil} from 'rxjs/operators';\nimport {ARTWORK_STATUSES} from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport {ArtworkFileAttachment} from 'src/app/requests/models/card-design-request.model';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {\n CanPanelExpandState,\n mixinHasPanelExpandState\n} from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport {AmMode, AmModeType} from 'src/app/shared/models/am-mode.model';\nimport {ApprovalManagerService} from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {Events, EventService, RequestEvents} from 'src/app/shared/services/event-service.service';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport { REQUEST_TYPE} from '../../../constants/request-types.constant';\nimport {PopDesignRequestItemModel} from '../../../models/pop-design-request.model';\n\nimport {\n POST_ARTIFACT_REQUEST_SELECTOR,\n POST_ARTIFACT_SUBMIT_EVENT_NAME,\n PostArtifactRequestItemTypes,\n PostArtifactRequestTypes,\n UPDATE_ART_PATH_NOTES_SERVICE,\n UpdateArtPathNotesService\n} from './post-artifact-base.service';\n\nconst PostArtifactBaseComponentPanelStateAwareAncestor = mixinHasPanelExpandState(\n class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n }\n);\n\n@Directive()\nexport class PostArtifactBaseComponent extends PostArtifactBaseComponentPanelStateAwareAncestor implements OnInit, OnDestroy, OnChanges {\n @Input() public isDisabled: boolean;\n @Input() public requestId: string | number;\n readonly EXPANSION_PANEL_ANIMATION_TIMING = EXPANSION_PANEL_ANIMATION_TIMING;\n\n public form: FormGroup;\n protected ngUnsubscribe = new Subject();\n protected mode: AmModeType = AmMode.final;\n protected subscriptions: Subscription[] = [];\n\n request$: Observable;\n loading$!: Observable;\n\n constructor(\n protected store: Store,\n protected fb: FormBuilder,\n public approvalManagerService: ApprovalManagerService,\n protected eventService: EventService,\n protected cd: ChangeDetectorRef,\n protected loaderService: LoaderService,\n protected stepActionsService: StepActionsService,\n @Inject(UPDATE_ART_PATH_NOTES_SERVICE) protected updateArtPathNotesService: UpdateArtPathNotesService,\n @Inject(POST_ARTIFACT_REQUEST_SELECTOR) requestSelector: MemoizedSelector,\n @Inject(POST_ARTIFACT_SUBMIT_EVENT_NAME) protected submitEventName: RequestEvents\n ) {\n super();\n this.loading$ = this.loaderService.loading$.pipe(debounceTime(0));\n this.request$ = this.store\n .select(requestSelector)\n .pipe(filter(v => !!v))\n .pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n }\n\n ngOnInit(): void {\n this.request$.subscribe(requestData => {\n this.initExpandedPanels(requestData.items);\n this.buildForm(requestData);\n });\n\n this.setEventSubscriptions();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n protected buildForm(request: PostArtifactRequestTypes): void {\n this.form = this.fb.group({\n items: this.fb.array(\n request.items.map((item: PostArtifactRequestItemTypes) =>\n this.fb.group({\n id: this.fb.control(item.id),\n notes: this.fb.control(\n request.type === REQUEST_TYPE.CDR ? item?.notes : (item as PopDesignRequestItemModel)?.artworkItemNotes || null,\n [Validators.maxLength(10000)]\n ),\n finalArtFilePath: this.fb.control(item?.finalArtFilePath || null)\n })\n )\n )\n });\n\n if (this.isDisabled) {\n this.form.disable();\n }\n }\n\n getItemArtifacts(item: PostArtifactRequestItemTypes): Array {\n return this.approvalManagerService.getArtworkFilesByStatus(item, this.mode, ARTWORK_STATUSES.approved);\n }\n\n protected setEventSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(this.submitEventName, elementRef => {\n this.loaderService.showLoader();\n this.updateNotes()\n .pipe(\n finalize(() => {\n this.loaderService.hideLoader();\n })\n )\n .subscribe(() => {\n this.stepActionsService.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n });\n })\n );\n }\n\n protected updateNotes(): Observable {\n const data = this.form.getRawValue().items.map(item => ({\n requestItemId: item.id,\n artPathNotesDto: {\n finalArtFilePath: item.finalArtFilePath,\n notes: item.notes\n }\n }));\n\n return this.updateArtPathNotesService.updateArtPathNotes(this.requestId as number, data);\n }\n}\n","\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n\n
\n
\n \n
\n
\n {{ 'module.requests.card-design.details.product-description' | translate }}:\n {{ item.productDescription || item.freeFormProductDescription }}\n
\n
\n
\n \n \n {{ 'module.requests.card-design.print-artifacts.approved-artworks' | translate }}\n \n {{ getItemArtifacts(item).length }}\n \n \n
\n
\n
\n \n
\n \n \n \n \n
\n \n
\n \n
\n
\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { ApprovalManagerService } from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {\n CardDesignApprovalManagerService,\n} from 'src/app/shared/services/approval-manager/card-design/card-design-approval-manager.service';\n\nimport { CardDesignEvents } from '../../../../../shared/services/event-service.service';\nimport { selectCardDesignRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { CardDesignService } from '../../../../services/card-design.service';\nimport { PostArtifactBaseComponent } from '../../../shared/post-artifact-base/post-artifact-base.component';\nimport {\n POST_ARTIFACT_REQUEST_SELECTOR,\n POST_ARTIFACT_SUBMIT_EVENT_NAME,\n UPDATE_ART_PATH_NOTES_SERVICE,\n} from '../../../shared/post-artifact-base/post-artifact-base.service';\n\n@Component({\n selector: 'app-post-artifact',\n templateUrl: './post-artifact.component.html',\n styleUrls: ['./post-artifact.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ApprovalManagerService, useExisting: CardDesignApprovalManagerService},\n {provide: UPDATE_ART_PATH_NOTES_SERVICE, useExisting: CardDesignService},\n {provide: POST_ARTIFACT_REQUEST_SELECTOR, useValue: selectCardDesignRequestDetails},\n {provide: POST_ARTIFACT_SUBMIT_EVENT_NAME, useValue: CardDesignEvents.PostArtifactSubmit},\n ]\n})\nexport class PostArtifactComponent extends PostArtifactBaseComponent {\n\n}\n","import {HttpClient, HttpEventType} from '@angular/common/http';\nimport {Injectable, Optional} from '@angular/core';\nimport {select, Store} from '@ngrx/store';\nimport {EMPTY, Observable} from 'rxjs';\nimport {filter, finalize, map, switchMap, take, takeWhile} from 'rxjs/operators';\nimport {designerSelectorState} from 'src/app/reducers/designer/designer.selectors';\nimport {selectRequestCurrentStage} from 'src/app/requests/reducers/request-steps/request-steps.selectors';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {POP_DESIGN_REQUEST} from '../../../../requests/constants/request-types.constant';\nimport {API} from '../../../constants/api.constants';\nimport {AmMode, AmModeType} from '../../../models/am-mode.model';\nimport {ErrorHandlingHttpClient} from '../../error-handling-http-client.service';\nimport {LoaderService} from '../../loader.service';\nimport {UserPermissionsService} from '../../user-permissions.service';\nimport {ApprovalManagerService} from '../approval-manager.service';\nimport {UserService} from '../../user.service';\nimport {UtilsService} from '../../utils.service';\nimport {selectPopItemTypes} from '../../../../reducers/ref-data/refdata.selectors';\nimport {CodeNameModel} from '../../../models/code-name.model';\nimport {FileUploadService} from '../../../../requests/services/file-upload.service';\nimport { isRequesterSelectorState } from 'src/app/reducers/creator/creator.selectors';\nimport { PitMsalService } from '../../pit-msal.service';\nimport { RoleProviderAggregator } from 'src/app/requests/classes/role-provider-aggregator';\n\n@Injectable()\nexport class PopDesignApprovalManagerService extends ApprovalManagerService {\n\n protected requestId: number;\n protected requestItems: any[];\n private itemTypes: CodeNameModel[] = [];\n\n private isDesigner$ = this.store.select(designerSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n map(({designerName, isDesigner}) => {\n if (\n isDesigner ||\n (!designerName && this.userPermissionsService.getUserRoles().includes(UserRoles.POP_DESIGN_REQUEST.DESIGNER_GROUP))\n ) {\n return true;\n }\n\n return null;\n }),\n );\n\n private isRequester$ = this.store.select(isRequesterSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n map(({isCreator}) => isCreator)\n );\n\n private requestCurrentStageCode$ = this.store.select(selectRequestCurrentStage).pipe(\n filter((v) => v !== null),\n map(s => s.code)\n );\n\n // tslint:disable-next-line:no-unused-variable\n private itemTypeCodes$ = this.store.pipe(\n select(selectPopItemTypes), filter((v) => v.length > 0), take(1))\n .subscribe(types => this.itemTypes = types);\n\n constructor(protected http: HttpClient,\n protected store: Store,\n errorHandlingHttp: ErrorHandlingHttpClient,\n protected loaderService: LoaderService,\n protected utilsService: UtilsService,\n protected userPermissionsService: UserPermissionsService,\n protected msalAuth: PitMsalService,\n protected fileUploadService: FileUploadService,\n protected userService: UserService,\n @Optional() protected roleProviderAggregator: RoleProviderAggregator) {\n super(store, errorHandlingHttp, msalAuth, userService);\n if(!roleProviderAggregator) {\n throw new Error('Role provider is not provided');\n }\n }\n\n addVersionResolution(requestItemId, artworkFileId, versionId, status: string, comment?: string): void {\n this.loaderService.showLoader();\n\n const payload = comment ? { status, comment } : { status };\n\n this.errorHandlingHttp.post(API.pdAddVersionResolution(this.requestId, requestItemId, artworkFileId, versionId), payload)\n .pipe(finalize(() => this.loaderService.hideLoader()))\n .subscribe(requestItem => this.updateSingleItem(requestItem)\n );\n }\n\n public uploadVersion(requestItemId, artworkFileId, file: File): void {\n this.loaderService.showLoader();\n this.fileUploadService.requestAttachmentUploadLink(this.requestId, 'artwork', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response ? this.http.post(\n API.createPopDesignArtworkVersion(this.requestId, requestItemId, artworkFileId), null, {\n params: { uploadId : uploadLink.uploadId },\n }\n ) : EMPTY)\n ))\n )\n .pipe(finalize(() => this.loaderService.hideLoader()))\n .subscribe(requestItem => this.updateSingleItem(requestItem));\n }\n\n private updateSingleItem(requestItem) {\n const index = this.requestItems.findIndex(item => item.id === requestItem.id);\n this.requestItems.splice(index, 1, requestItem);\n\n this.requestItemsSubject.next(this.requestItems);\n }\n\n onRequestChange(request) {\n if (request == null || request.type !== POP_DESIGN_REQUEST) {\n return;\n }\n const requestItems = request.items.filter(item => item.artworkFiles?.length) || [];\n this.requestItems = requestItems;\n this.requestId = request.id;\n this.requestItemsSubject.next(requestItems);\n this.requestNameSubject.next(this.getName(request));\n }\n\n public getRequestItemLabel(requestItem: any): string {\n return this.utilsService.getItemName(this.itemTypes, requestItem.itemTypeCode) || requestItem.itemTypeCode;\n }\n\n public getArtworkFiles(requestItem: any): any[] {\n return (requestItem.artworkFiles || [])\n .filter(file => !!file);\n }\n\n protected getName(request: any) {\n return `${request.id} - ${request.name}`;\n }\n private isTrafficManager: boolean = null;\n setIsTrafficManager(isTrafficManager: boolean): void {\n this.isTrafficManager = isTrafficManager;\n }\n getIsTrafficManager(): boolean {\n return this.isTrafficManager;\n }\n\n async canApprove(mode: AmModeType): Promise {\n if (!(mode === AmMode.approval || mode === AmMode.final)) {\n return false;\n }\n const currentStage = await this.requestCurrentStageCode$.pipe(take(1)).toPromise();\n switch (currentStage) {\n case 'TM_REVIEW_2':\n // only traffic manager on tm-review-2 isTM\n return this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator);\n case 'CREATIVE_DIRECTOR_REVIEW':\n // only designer or designer group\n return this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.CREATIVE_DIRECTOR, this.roleProviderAggregator);\n case 'FINANCIAL_SERVICES_REVIEW_2':\n return this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.FINANCE_APPROVER, this.roleProviderAggregator);\n case 'INT_EXT_CLIENT_PROOF':\n // only requested can approve\n return this.isRequester$.pipe(take(1)).toPromise();\n }\n return false;\n }\n\n async canUpload(mode: AmModeType): Promise {\n const isDesigner = await this.isDesigner$.pipe(take(1)).toPromise();\n const currentStage = await this.requestCurrentStageCode$.pipe(take(1)).toPromise();\n // Allow TMs to upload new versions in TM Review stages\n if(mode === AmMode.approval || mode === AmMode.view) {\n switch (currentStage) {\n case 'TM_REVIEW_2':\n // only traffic manager on tm-review\n return this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator);\n case 'TM_REVIEW':\n // only traffic manager on tm-review-2\n return this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator);\n }\n }\n if (mode !== AmMode.design) {\n return false;\n }\n return !!isDesigner && currentStage === 'DESIGN_PROCESS';\n }\n\n canAnnotate(): Promise {\n return this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.APPROVAL_MANAGER_ANNOTATE, this.roleProviderAggregator);\n }\n\n getRequestId() {\n return this.requestId;\n }\n\n saveComments(version: any, xfdfString: string): Observable {\n const blob = new Blob([xfdfString], {type: 'plain/text'});\n return this.fileUploadService.overwriteFile(version.commentFileUrl, blob as File);\n }\n\n getComments(version: any): Observable {\n return this.errorHandlingHttp.get(version.commentFileUrl, {\n responseType: 'text',\n observe: 'response'\n }).pipe(map(res => res.body));\n }\n\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {PopDesignApprovalManagerService} from './pop-design-approval-manager.service';\nimport {HttpClient} from '@angular/common/http';\nimport {Store} from '@ngrx/store';\nimport {ErrorHandlingHttpClient} from '../../error-handling-http-client.service';\nimport {LoaderService} from '../../loader.service';\nimport {UtilsService} from '../../utils.service';\nimport {UserPermissionsService} from '../../user-permissions.service';\nimport {FileUploadService} from '../../../../requests/services/file-upload.service';\nimport {UserService} from '../../user.service';\nimport { POP_DESIGN_REQUEST} from '../../../../requests/constants/request-types.constant';\nimport { PitMsalService } from '../../pit-msal.service';\nimport { RoleProviderAggregator } from 'src/app/requests/classes/role-provider-aggregator';\n\n@Injectable()\nexport class FsReviewPopDesignApprovalManagerService extends PopDesignApprovalManagerService {\n\n constructor(protected http: HttpClient,\n protected store: Store,\n errorHandlingHttp: ErrorHandlingHttpClient,\n protected loaderService: LoaderService,\n protected utilsService: UtilsService,\n protected userPermissionsService: UserPermissionsService,\n protected msalAuth: PitMsalService,\n protected fileUploadService: FileUploadService,\n protected userService: UserService,\n @Optional() protected roleProviderAggregator: RoleProviderAggregator) {\n super(http, store, errorHandlingHttp, loaderService, utilsService,\n userPermissionsService, msalAuth, fileUploadService, userService, roleProviderAggregator);\n }\n\n onRequestChange(request) {\n if (request == null || request.type !== POP_DESIGN_REQUEST) {\n return;\n }\n const requestItems = request.items.filter(item => item.artworkFiles?.length && this.itemDisplayed(item)) || [];\n this.requestItems = requestItems;\n this.requestId = request.id;\n this.requestItemsSubject.next(requestItems);\n this.requestNameSubject.next(this.getName(request));\n }\n\n public itemDisplayed(item) {\n return !!item.financialServicesIncluded;\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {combineLatest, Observable} from 'rxjs';\nimport {distinctUntilKeyChanged, map, pluck, take, takeUntil} from 'rxjs/operators';\nimport {RoleProviderAggregator} from 'src/app/requests/classes/role-provider-aggregator';\nimport {AbstractRoleUpdateAwareProvider} from 'src/app/requests/classes/role-update-aware-provider';\nimport {SpecificRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {UserService} from 'src/app/shared/services/user.service';\n\nimport {selectPopDesignRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {WithDestroy} from '../../../../../shared/components/with-destroy/with-destroy.mixin';\nimport { PopDesignApprovalManagerService } from 'src/app/shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport { FsReviewPopDesignApprovalManagerService } from 'src/app/shared/services/approval-manager/pop-design/fs-review-pop-design-approval-manager.service';\n\nexport const ASSIGNED_TM_FIELD_NAME = 'trafficManager';\n\n@Component({\n selector: 'app-pop-design-host',\n template: `\n \n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `\n ],\n providers: [\n PopDesignApprovalManagerService,\n FsReviewPopDesignApprovalManagerService\n ]\n})\nexport class PopDesignHostComponent extends WithDestroy(AbstractRoleUpdateAwareProvider) implements OnInit, OnDestroy {\n constructor(private roleProviderAggregator: RoleProviderAggregator, private store: Store, private userService: UserService) {\n super();\n }\n ngOnDestroy(): void {\n this.roleProviderAggregator.removeRoleProvider(this);\n }\n ngOnInit(): void {\n this.roleProviderAggregator.addRoleProvider(this);\n }\n\n private trafficManagerAssigned(): Observable {\n return combineLatest([this.store.select(selectPopDesignRequestDetails), this.userService.getUserDetails$()]).pipe(\n map(([rd, u]) => UserService.userApplicable(u, rd.details[ASSIGNED_TM_FIELD_NAME])),\n map(isAssigned => (isAssigned ? SpecificRoles.ASSIGNED_TM : null))\n );\n }\n\n public async getRoles(): Promise {\n const specificRole = await this.trafficManagerAssigned().pipe(take(1)).toPromise();\n return [specificRole].filter(s => !!s);\n }\n\n roleUpdates$ = this.store.select(selectPopDesignRequestDetails).pipe(\n pluck('details'),\n distinctUntilKeyChanged(ASSIGNED_TM_FIELD_NAME),\n map(details => ({\n source: this,\n data: details[ASSIGNED_TM_FIELD_NAME]\n })),\n takeUntil(this.ngUnsubscribe$)\n );\n}\n","export class RandomUtilsService {\r\n\r\n static nextPositiveInt(max: number = 100000): number {\r\n return Math.abs(Math.round(Math.random() * max)); // NOSONAR\r\n }\r\n\r\n static randomNumberUnsafe(): number {\r\n return Math.random(); // NOSONAR\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\nimport {FormGroup, FormBuilder, Validators, FormControl} from '@angular/forms';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\nimport {PopDesignRequestDetails, PopDesignRequestItemModel} from '../models/pop-design-request.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PopDesignFormService {\n constructor(private fb: FormBuilder) {}\n\n public createDetailsFieldset(requestDetails: PopDesignRequestDetails = null): FormGroup {\n return this.fb.group({\n id: [requestDetails?.id],\n firstRoundArtDeliveryDate: [requestDetails?.firstRoundArtDeliveryDate, Validators.required],\n deliveryDate: [requestDetails?.deliveryDate, Validators.required],\n channel: [requestDetails?.channel, Validators.required],\n jobDetails: [requestDetails?.jobDetails, Validators.required],\n additionalDetails: [requestDetails?.additionalDetails],\n artworkLocationTypeCode: [requestDetails?.artworkLocationTypeCode],\n artworkDescription: [requestDetails?.artworkDescription],\n contacts: this.fb.array((requestDetails?.contacts || []).map(this.getContactControl)),\n productionRequestRequired: this.fb.control(requestDetails?.productionRequestRequired),\n quantityOfFiles: this.fb.control(requestDetails?.quantityOfFiles),\n });\n }\n\n public getContactControl(contact: UserModel): FormControl {\n return this.fb.control(contact, [UtilsService.userValidationFn()]);\n }\n\n public getItemFieldset(requestItem: PopDesignRequestItemModel): FormGroup {\n return this.fb.group({\n id: [requestItem?.id],\n incommPrinting: [requestItem?.incommPrinting, Validators.required],\n financialServicesIncluded: [requestItem?.financialServicesIncluded, Validators.required],\n promotionAssociated: [requestItem?.promotionAssociated],\n promotionBankApproved: [requestItem?.promotionBankApproved],\n itemTypeCode: [requestItem?.itemTypeCode, Validators.required],\n itemDescription: [requestItem?.itemDescription],\n bleed: [requestItem?.bleed ?? true, Validators.required],\n notes: [requestItem?.notes],\n colorTypeCode: [requestItem?.colorTypeCode, Validators.required],\n dimensionTypeCode: [requestItem?.dimensionTypeCode, Validators.required],\n cmyk: this.fb.group({\n cmykC: [requestItem?.cmykC, Validators.max(100)],\n cmykM: [requestItem?.cmykM, Validators.max(100)],\n cmykY: [requestItem?.cmykY, Validators.max(100)],\n cmykK: [requestItem?.cmykK, Validators.max(100)]\n }),\n pantoneDetails: [requestItem?.pantoneDetails],\n width: [requestItem?.width, Validators.required],\n height: [requestItem?.height, Validators.required],\n fsProductLines: this.fb.array([])\n });\n }\n}\n","\n
\n \n {{ 'module.requests.card-design.details.artwork' | translate }}\n \n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n","/* eslint-disable no-underscore-dangle */\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { ControlContainer, FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Observable, Subject } from 'rxjs';\nimport { lazyLoadArtLocationsTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { selectArtLocationTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { PopDesignRequestModel } from 'src/app/requests/models/pop-design-request.model';\nimport { RequestsService } from 'src/app/requests/services/requests.service';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from 'src/app/shared/models/upload-file-restrictions.model';\n\n@Component({\n selector: 'app-pop-design-artwork-fieldset',\n templateUrl: './pop-design-artwork-fieldset.component.html',\n styleUrls: ['./pop-design-artwork-fieldset.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopDesignArtworkFieldsetComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n public readonly fileTypes = FILE_TYPES;\n public readonly fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n private _request: PopDesignRequestModel;\n\n @Input() isDisabled: boolean;\n @Input() set request(request: PopDesignRequestModel) {\n this._request = request;\n\n this.attachments = request?.details?.artFiles ? request?.details?.artFiles : [];\n }\n get request(): PopDesignRequestModel {\n return this._request;\n }\n\n @Input() attachments: any[];\n @Output() attachmentsChange = new EventEmitter();\n\n get detailsForm(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n artLocationTypes$ = this.store.select(selectArtLocationTypes);\n\n public uploadArtwork = (file: File): Observable => this.requestsService.uploadArtworkAttachment(this.request.id, file);\n\n public removeArtwork = (attachmentId: number): Observable =>\n this.requestsService.deleteArtworkAttachment(this.request.id, attachmentId);\n\n\n public onUpdateAttachments = (obj: { action: string; data: any }): void => {\n if (obj.action === 'add') {\n this.attachments.push(obj.data);\n } else {\n const index = this.attachments.findIndex(item => item?.id === obj.data);\n this.attachments.splice(index, 1);\n }\n this.attachmentsChange.emit(this.attachments);\n };\n\n constructor(private controlContainer: ControlContainer, private store: Store, private requestsService: RequestsService) {}\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadArtLocationsTypes());\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PopItemTypeModel } from '../../../../../models/pop-design-request.model';\n\n@Component({\n selector: 'app-item-type-select',\n templateUrl: './item-type-select.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ItemTypeSelectComponent implements OnInit, OnDestroy {\n @Input() public requestItem: FormGroup;\n @Input() public requestItemIndex: number;\n @Input() public itemTypes: PopItemTypeModel[];\n @Input() public formValidationTrigger: Subject;\n @Input() public testId: string;\n\n private ngUnsubscribe = new Subject();\n\n constructor(private cd: ChangeDetectorRef) {\n }\n\n public ngOnInit(): void {\n const controls = {\n colorTypeCode: this.requestItem.get('colorTypeCode'),\n dimensionTypeCode: this.requestItem.get('dimensionTypeCode'),\n bleed: this.requestItem.get('bleed'),\n };\n\n this.requestItem.get('itemTypeCode')?.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(itemTypeCode => {\n if (itemTypeCode === 'OTHER') {\n Object.entries(controls).forEach(([key, control]) => {\n control.reset(key === 'bleed' ? true : null);\n });\n return;\n }\n\n if (this.itemTypes.length) {\n const { colorTypeCode, dimensionTypeCode, bleed } = this.itemTypes?.find(value => value.code === itemTypeCode) || {};\n this.requestItem.patchValue({ colorTypeCode, dimensionTypeCode, bleed });\n }\n\n this.cd.markForCheck();\n });\n\n this.formValidationTrigger.subscribe(() => {\n this.requestItem.markAllAsTouched();\n this.cd.markForCheck();\n });\n }\n\n public ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","
\n \n
\n","export enum ColorTypes {\n blackAndWhite = 'BLACK_AND_WHITE',\n clear = 'CLEAR',\n cmyk = 'CMYK',\n rgb = 'RGB',\n pms = 'PMS',\n}\n","
\n
\n \n
\n\n \n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n \n
\n\n
\n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional\n} from '@angular/core';\nimport { AbstractControl, FormGroup, Validators } from '@angular/forms';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { CodeNameModel } from '../../../../../../shared/models/code-name.model';\nimport { ColorTypes } from '../../../../../constants/color-types.constant';\nimport { Events, EventService } from '../../../../../../shared/services/event-service.service';\nimport { UpdateTriggerContainer } from '../../../../../../shared/constants/form-field.constant';\n\n@Component({\n selector: 'app-color-type-select',\n templateUrl: './color-type-select.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorTypeSelectComponent implements OnInit, OnDestroy {\n @Input() public item: FormGroup;\n @Input() public requestItemIndex: number;\n @Input() public colorTypes: CodeNameModel[];\n\n public colorTypesEnum = ColorTypes;\n\n private ngUnsubscribe = new Subject();\n private eventSub: Subscription;\n private cmykGroup: FormGroup;\n private pantoneControl: AbstractControl;\n private colorTypeControl: AbstractControl;\n\n constructor(\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n @Optional() private updateTriggerAware: UpdateTriggerContainer\n ) {\n }\n\n public ngOnInit(): void {\n this.cmykGroup = (this.item.get('cmyk') as FormGroup);\n this.pantoneControl = this.item.get('pantoneDetails');\n this.colorTypeControl = this.item.get('colorTypeCode');\n this.initControlsSubs();\n this.eventSub = this.eventService.on(Events.RequestDetailsValidation, () => {\n this.cd.markForCheck();\n });\n\n if (this.updateTriggerAware) {\n this.updateTriggerAware.updateFormTrigger?.pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(() => {\n this.cd.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.eventSub?.unsubscribe();\n }\n\n private initControlsSubs(): void {\n this.colorTypeControl.valueChanges\n .pipe(\n tap(() => {\n this.cmykGroup.reset(undefined, { emitEvent: false });\n this.pantoneControl.reset(null, { emitEvent: false });\n }),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(() => {\n (this.colorTypeControl.value === this.colorTypesEnum.pms) ?\n this.pantoneControl.setValidators(Validators.required) : this.pantoneControl.clearValidators();\n this.pantoneControl.updateValueAndValidity({ emitEvent: false });\n\n this.cd.markForCheck();\n });\n }\n\n}\n","
\n \n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n \n
\n \n \n {{'module.requests.pop-design.details.fs-product-lines' | translate}}*:\n \n\n
\n
\n \n \n
\n
\n\n \n \n {{ 'module.requests.pop-design.details.fs-product-lines-required' | translate }}\n \n
\n\n \n \n
\n\n
\n \n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n

{{'module.requests.pop-design.details.dimensions' | translate}}:

\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n\n
\n \n
\n\n
\n \n \n
\n\n
\n \n
\n
\n \n
\n
\n
\n \n \n
\n
\n \n\n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DoCheck,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n} from '@angular/core';\nimport { AbstractControl, FormGroup, Validators } from '@angular/forms';\nimport { merge, of, ReplaySubject, Subject } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { UpdateTriggerContainer, UpdateTriggerContainerInterface } from 'src/app/shared/constants/form-field.constant';\n\nimport { CodeNameModel } from '../../../../../../shared/models/code-name.model';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { PopItemTypeModel } from '../../../../../models/pop-design-request.model';\n\n@Component({\n selector: 'app-pop-item',\n templateUrl: './pop-item.component.html',\n styleUrls: ['./pop-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: UpdateTriggerContainer,\n useExisting: PopItemComponent\n }\n ],\n})\nexport class PopItemComponent implements OnInit, OnDestroy, DoCheck, UpdateTriggerContainerInterface {\n private _item!: FormGroup;\n private itemReplaySubject = new ReplaySubject(1);\n @Input() set item(item: FormGroup) {\n this._item = item;\n this.itemReplaySubject.next(item);\n }\n get item(): FormGroup {\n return this._item;\n }\n @Input() public requestItemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public popItemTypes: PopItemTypeModel[];\n @Input() public colorTypes: CodeNameModel[];\n @Input() public dimensionTypes: CodeNameModel[];\n @Input() public financialTypes: CodeNameModel[];\n @Input() public formValidationTrigger: Subject;\n @Input() public isExpanded: boolean;\n @Input() public canDuplicate = true;\n @Input() public fsProductLinesEnabled = 'fsProductLines';\n @Input() public showProductLines = true;\n @Output() public removeItem: EventEmitter = new EventEmitter();\n @Output() public copyItem: EventEmitter = new EventEmitter();\n @Output() public openedChanged: EventEmitter = new EventEmitter();\n\n @ContentChildren('[afterFsProductLines]') fsProductLinesQuery: QueryList;\n\n get updateFormTrigger() {\n return this.formValidationTrigger;\n }\n\n public isFinancialServicesIncluded: boolean;\n itemDescriptionRequired = false;\n\n private ngUnsubscribe = new Subject();\n private oldValid: boolean = null;\n private oldTouched: boolean = null;\n\n constructor(private cd: ChangeDetectorRef) {}\n\n public ngOnInit(): void {\n this.toggleFsValidator(this.item.get('financialServicesIncluded').value);\n\n this.item.get('financialServicesIncluded').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.toggleFsValidator(value);\n this.cd.markForCheck();\n });\n\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n /**\n * FRNTOFF-9280 FE: POP Design - Require User Description Entry for \"Other\" Item Selection\n */\n this.itemReplaySubject.asObservable().pipe(\n switchMap((itemForm: FormGroup) => merge(\n of(itemForm.get('itemTypeCode').value),\n itemForm.get('itemTypeCode').valueChanges\n ).pipe(\n tap((itemTypeCode) => {\n if(itemTypeCode === 'OTHER') {\n itemForm.get('itemDescription').setValidators([Validators.required, UtilsService.notEmptyValidator]);\n this.itemDescriptionRequired = true;\n } else {\n itemForm.get('itemDescription').markAsUntouched();\n itemForm.get('itemDescription').clearValidators();\n this.itemDescriptionRequired = false;\n }\n this.cd.markForCheck();\n })\n ))).subscribe();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onRemove(): void {\n this.removeItem.emit(this.requestItemIndex);\n }\n\n public onCopy(): void {\n this.copyItem.emit(this.requestItemIndex);\n }\n\n public get getFsProductLines(): AbstractControl {\n return this.item.get(this.fsProductLinesEnabled);\n }\n\n private toggleFsValidator(financialServicesIncluded: boolean): void {\n if (financialServicesIncluded) {\n this.getFsProductLines.setValidators(UtilsService.isTrueExist());\n } else {\n this.getFsProductLines.clearValidators();\n }\n this.getFsProductLines.updateValueAndValidity();\n }\n\n ngDoCheck(): void {\n if(this.item?.valid !== this.oldValid) {\n this.oldValid = this.item.valid;\n this.cd.markForCheck();\n }\n if(this.item?.touched !== this.oldTouched) {\n this.oldValid = this.item.touched;\n this.cd.markForCheck();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { ofType } from '@ngrx/effects';\nimport { Action, ActionsSubject, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport moment from 'moment';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, take, takeUntil } from 'rxjs/operators';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { RequestStepComponent } from 'src/app/requests/models/request-step-component.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\n\nimport {\n lazyLoadArtLocationsTypes,\n lazyLoadColorTypes,\n lazyLoadDimensionTypes,\n lazyLoadFinancialTypes,\n lazyLoadPopChannelTypes,\n lazyLoadPopItemTypes,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectArtLocationTypes,\n selectColorTypes,\n selectDimensionTypes,\n selectFinancialTypes,\n selectPopChannelTypes,\n selectPopItemTypes,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { UserModel } from '../../../../../shared/models/user.model';\nimport { DateService } from '../../../../../shared/services/date-service.service';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { STATUSES } from '../../../../constants/request-statuses.constant';\nimport {\n PopDesignRequestDetails,\n PopDesignRequestItemModel,\n PopDesignRequestModel,\n PopItemTypeModel,\n} from '../../../../models/pop-design-request.model';\nimport { selectPopDesignRequestDetails, selectAdditionalOtherContacts } from '../../../../reducers/request-details/request-details.selectors';\nimport { PopDesignFormService } from '../../../../services/pop-design-form.service';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\n\n@Component({\n selector: 'app-pop-details',\n templateUrl: './pop-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopDetailsComponent implements OnInit, OnDestroy, OnChanges, RequestStepComponent, RequestDetailsStageController {\n @Input() public requestId: number;\n @Input() public isDisabled: boolean;\n @Output() private deleteDraft = new EventEmitter();\n\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public form: FormGroup;\n public detailsForm: FormGroup;\n public shouldCreatePopProductionControl: FormControl;\n public additionalStakeholdersDetailsControls: FormArray;\n public requestItemsControls: FormArray;\n public requestDetails: Partial = {};\n public channels: CodeNameModel[] = [];\n public artLocations: CodeNameModel[] = [];\n public popItemTypes: PopItemTypeModel[] = [];\n public colorTypes: CodeNameModel[] = [];\n public dimensionTypes: CodeNameModel[] = [];\n public financialTypes: CodeNameModel[] = [];\n public attachments: any[] = [];\n public formValidationTrigger: Subject = new Subject();\n public newItemIndex: number;\n\n private isShowSavedMessage = false;\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private refData$ = combineLatest([\n this.store.select(selectPopDesignRequestDetails).pipe(filter(request => request !== null && request?.type === 'POP_DESIGN_REQUEST')),\n this.store.select(selectPopChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectArtLocationTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPopItemTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectColorTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectDimensionTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectFinancialTypes).pipe(filter(v => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n constructor(\n private fb: FormBuilder,\n private store: Store,\n private eventService: EventService,\n private cd: ChangeDetectorRef,\n private requestsService: RequestsService,\n private activatedRoute: ActivatedRoute,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private translate: TranslatePipe,\n private actions: ActionsSubject,\n public dateService: DateService,\n private popDesignFormService: PopDesignFormService,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {}\n\n public ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadPopChannelTypes());\n this.store.dispatch(lazyLoadArtLocationsTypes());\n this.store.dispatch(lazyLoadPopItemTypes());\n this.store.dispatch(lazyLoadColorTypes());\n this.store.dispatch(lazyLoadDimensionTypes());\n this.store.dispatch(lazyLoadFinancialTypes());\n\n this.activatedRoute.params.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.setInitialDetails();\n this.buildForm();\n this.toggleFormDisabling();\n this.setEventsSubs();\n });\n\n this.refData$.subscribe(([requestDetails, channels, artLocations, popItemTypes, colorTypes, dimensionTypes, financialTypes]) => {\n this.channels = channels as CodeNameModel[];\n this.artLocations = artLocations as CodeNameModel[];\n this.popItemTypes = popItemTypes as PopItemTypeModel[];\n this.colorTypes = colorTypes as CodeNameModel[];\n this.dimensionTypes = dimensionTypes as CodeNameModel[];\n this.financialTypes = financialTypes as CodeNameModel[];\n\n this.setInitialDetails(requestDetails);\n this.buildForm();\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', 'The request was successfully saved', '');\n this.isShowSavedMessage = false;\n }\n\n this.cd.markForCheck();\n });\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe));\n\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.form.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n public async validate(): Promise {\n if(this.form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n this.form.markAllAsTouched();\n this.cd.markForCheck();\n this.formValidationTrigger.next(null);\n return Promise.resolve(this.form.valid);\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact(null);\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n /**\n * @deprecated\n */\n public onUpdateAttachments(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n this.attachments.push(obj.data);\n } else {\n const index = this.attachments.findIndex(item => item?.id === obj.data);\n this.attachments.splice(index, 1);\n }\n }\n\n public onAddRequestItem(): void {\n this.pushNewRequestItem({});\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(index);\n }\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.at(index) as FormGroup).getRawValue());\n\n this.pushNewRequestItem({ ...item, id: null }, true);\n this.updateNewItemIndex();\n }\n\n /**\n * @deprecated\n */\n public uploadArtwork = (file: File) => this.requestsService.uploadArtworkAttachment(this.requestId, file);\n\n /**\n * @deprecated\n */\n public removeArtwork = (attachmentId: number) => this.requestsService.deleteArtworkAttachment(this.requestId, attachmentId);\n\n private setInitialDetails(requestDetails?: any): void {\n this.requestDetails = requestDetails ? cloneDeep(requestDetails) : {};\n this.attachments = requestDetails?.details?.artFiles ? cloneDeep(requestDetails?.details?.artFiles) : [];\n\n\n if (!requestDetails?.details) {\n this.requestDetails.details = {\n id: null,\n firstRoundArtDeliveryDate: null,\n deliveryDate: null,\n channel: null,\n jobDetails: null,\n additionalDetails: null,\n artworkLocationTypeCode: null,\n artworkDescription: null,\n contacts: [],\n productionRequestRequired: false,\n };\n }\n if (!requestDetails?.items?.length) {\n this.requestDetails.items = [{\n id: null,\n }];\n }\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n details: this.popDesignFormService.createDetailsFieldset(),\n items: this.fb.array([]),\n });\n\n this.detailsForm = this.form.get('details') as FormGroup;\n this.additionalStakeholdersDetailsControls = this.detailsForm.get('contacts') as FormArray;\n this.requestItemsControls = this.form.get('items') as FormArray;\n this.shouldCreatePopProductionControl = this.fb.control(false);\n\n this.detailsForm.patchValue(this.requestDetails?.details);\n\n if (this.requestDetails?.details?.contacts?.length) {\n this.requestDetails.details.contacts.forEach(item => {\n this.pushStakeholderContact(item);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n\n this.requestDetails?.items.forEach(item => {\n this.pushNewRequestItem(item);\n });\n this.toggleFormDisabling();\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }),\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n this.saveRequest();\n }),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n if (this.form.valid) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message'),\n );\n\n this.form.markAllAsTouched();\n (this.form.controls.items as FormArray).controls.forEach(item => item.markAllAsTouched());\n\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n\n this.cd.markForCheck();\n }),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.isShowSavedMessage = false;\n this.saveRequest();\n\n this.actions.pipe(takeUntil(this.ngUnsubscribe)).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n\n // Track request details after action complete\n this.actions.pipe(\n // wait for request details loading complete\n ofType(requestDetailsActions.loadRequestDetailsSuccess),\n take(1),\n // break on unload or fetch failure\n takeUntil(this.actions.pipe(ofType(requestDetailsActions.loadRequestDetailsFailure))\n )\n ).subscribe(\n ({data}) => {\n const details = data?.details as PopDesignRequestDetails;\n if (details?.productionRequestReference?.id && details?.productionRequestRequired) {\n this.isShowSavedMessage = false;\n const href = `${\n window.location.href.slice(0, -1 * window.location.pathname.length)\n }/requests/${details?.productionRequestReference.id}`;\n\n const name = `${details?.productionRequestReference.id} - ${details?.productionRequestReference.name}`;\n this.messageService.showSystemMessage(\n 'success',\n 'The request was successfully saved',\n this.translate.transform('module.requests.pop-design.details.pop-production-request-created', {\n request_id_name: `${name}`\n }));\n\n // open up the request for users that have popup enabled option.\n window.open(\n // tslint:disable-next-line: max-line-length\n href,\n '_blank'\n );\n }\n }\n );\n }\n });\n }),\n );\n }\n\n private toggleFormDisabling() {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n\n /**\n * Disable creating pop production request item is case the design request has been routed back.\n */\n if ( (this.requestDetails as PopDesignRequestModel)?.status !== STATUSES.DRAFT) {\n this.detailsForm?.get('productionRequestRequired').disable();\n }\n }\n\n private pushStakeholderContact(contact: UserModel): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n private get getItemFormGroup(): FormGroup {\n return this.fb.group({\n id: [null],\n incommPrinting: [null, Validators.required],\n financialServicesIncluded: [null, Validators.required],\n promotionAssociated: [null],\n promotionBankApproved: [null],\n itemTypeCode: [null, Validators.required],\n itemDescription: [null],\n bleed: [true, Validators.required],\n notes: [null],\n colorTypeCode: [null, Validators.required],\n dimensionTypeCode: [null, Validators.required],\n cmyk: this.fb.group({\n cmykC: [null, Validators.max(100)],\n cmykM: [null, Validators.max(100)],\n cmykY: [null, Validators.max(100)],\n cmykK: [null, Validators.max(100)],\n }),\n pantoneDetails: [null],\n width: [null, Validators.required],\n height: [null, Validators.required],\n fsProductLines: this.fb.array([], UtilsService.isTrueExist()),\n });\n }\n\n private pushNewRequestItem(item: PopDesignRequestItemModel, isCopy?: boolean): void {\n const itemFormGroup = this.getItemFormGroup;\n itemFormGroup.patchValue(item);\n\n itemFormGroup.get('cmyk').patchValue(item);\n\n const arr = (itemFormGroup.get('fsProductLines') as FormArray);\n\n this.financialTypes.forEach(({ code }, idx) => {\n arr.push(this.fb.control(\n isCopy ? item?.fsProductLines[idx] : item?.fsProductLines?.map(fspl => fspl?.code).includes(code),\n ));\n });\n\n this.requestItemsControls.push(itemFormGroup);\n }\n\n saveRequest(): void {\n const requestDetails = { ...this.requestDetails, ...this.form.getRawValue() };\n requestDetails.items = this.form.value.items.map(item => ({\n ...item,\n ...item.cmyk,\n fsProductLines: item.financialServicesIncluded ? item.fsProductLines\n .map((v, idx) => ({\n ...this.financialTypes[idx],\n checked: v,\n }))\n .filter(({ checked }) => !!checked)\n .map(({ checked, name, ...rest }) => rest) : [],\n }));\n\n requestDetails.details.firstRoundArtDeliveryDate =\n moment(requestDetails.details.firstRoundArtDeliveryDate).toISOString();\n requestDetails.details.deliveryDate = moment(requestDetails.details.deliveryDate).toISOString();\n requestDetails.details.contacts = requestDetails.details.contacts.filter(i => i !== null);\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({ requestId: this.requestId, details: requestDetails,\n excludeParts: ['contacts']\n }));\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n}\n","
\n
\n
\n {{'module.requests.details.dates' | translate}}\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n\n \n\n \n\n \n\n
\n {{'module.requests.text.request-items' | translate}}\n \n\n \n \n\n
\n \n \n
\n\n \n\n \n
\n\n \n\n
\n \n {{'module.requests.details.stakeholder-details' | translate}}\n \n\n
\n
\n \n \n
\n \n
\n
\n\n \n\n
\n \n {{'module.requests.pop-design.details.pop-production-association' | translate}}\n \n\n \n \n
\n\n \n
\n","import {UserModel} from 'src/app/shared/models/user.model';\nimport {ArtworkFile} from './card-design-request.model';\nimport {BaseRequestDetails, BaseRequestModel, RequestReferenceModel} from './request.model';\nimport {CodeNameModel} from '../../shared/models/code-name.model';\nimport {File} from './file.model';\n\nexport interface PopDesignRequestModel extends BaseRequestModel {\n items: Array;\n details: PopDesignRequestDetails;\n}\n\nexport interface PopDesignRequestDetails extends BaseRequestDetails {\n id: number;\n additionalDetails: string;\n artFiles?: File[];\n artworkAddedToExisting?: boolean;\n artworkAdditionDescription?: string;\n artworkChangesDescription?: string;\n artworkChangesNeeded?: boolean;\n artworkDescription: string;\n artworkLocationTypeCode: string;\n artworkReplacementDescription?: string;\n artworkReplacesExisting?: boolean;\n cdReviewRequired?: boolean;\n datesApproved?: boolean;\n designer?: UserModel;\n designSourceTypeCode?: string;\n jobDetails: string;\n deliveryDate: string;\n channel: string;\n firstRoundArtDeliveryDate: string;\n incommPrinting?: boolean;\n partnerGroupCode?: string;\n regionCode?: string;\n tmApprovedDates?: boolean;\n finalArtDueDate?: string;\n productionRequestRequired?: boolean;\n productionRequestReference?: RequestReferenceModel;\n linkedProductionRequestReferences?: RequestReferenceModel[];\n prepArtifactsDesigner?: UserModel;\n trafficManager?: UserModel;\n quantityOfFiles?: number;\n}\n\nexport const FINANCIAL_SERVICE_STATUSES: {UNREVIEWED: 'UNREVIEWED'; APPROVED: 'APPROVED'; REJECTED: 'REJECTED'} = {\n UNREVIEWED: 'UNREVIEWED',\n APPROVED: 'APPROVED',\n REJECTED: 'REJECTED'\n};\n\nexport type PopDesignRequestItemFinancialServiceStatus = typeof FINANCIAL_SERVICE_STATUSES[keyof typeof FINANCIAL_SERVICE_STATUSES];\n\nexport const FINANCIAL_SERVICE_ACTION: {APPROVE: 'APPROVE'; REJECT: 'REJECT'} = {\n APPROVE: 'APPROVE',\n REJECT: 'REJECT'\n};\n\nexport type PopDesignRequestItemFinancialServiceAction = typeof FINANCIAL_SERVICE_ACTION[keyof typeof FINANCIAL_SERVICE_ACTION];\n\nexport interface PopDesignRequestItemFinancialServiceModel {\n code: string;\n offerDetailsAcceptable?: boolean;\n disclaimersCorrect?: boolean;\n disclaimersCorrectDetails?: string;\n cardsArtCorrect?: boolean;\n cardsArtCorrectDetails?: string;\n artFilePath?: string;\n submissionAvailable?: boolean;\n submitter?: UserModel;\n submittedAt: string;\n status: PopDesignRequestItemFinancialServiceStatus;\n}\n\nexport interface PopDesignRequestItemModel {\n id?: number;\n artworkFiles?: ArtworkFile[];\n colorTypeCode?: string;\n dimensionTypeCode?: string;\n itemTypeCode?: string;\n itemDescription?: string;\n bleed?: boolean;\n cmykC?: number;\n cmykK?: number;\n cmykM?: number;\n cmykY?: number;\n width?: number;\n height?: number;\n notes?: string;\n pantoneDetails?: string;\n promotionAssociated?: boolean;\n promotionBankApproved?: boolean;\n financialServicesIncluded?: boolean;\n financialServiceProductLines?: string[];\n fsReviewSubmitted?: boolean;\n fsSubmissionAvailable?: boolean;\n incommPrinting?: boolean;\n fsAttachments?: File[];\n disclaimersCorrect?: boolean;\n disclaimersCorrectDetails?: string;\n finalArtFilePath?: string;\n detailsAcceptable?: boolean;\n cardsArtCorrect?: boolean;\n artworkItemNotes?: string;\n fsProductLines?: PopDesignRequestItemFinancialServiceModel[];\n}\n\nexport interface PopItemTypeModel extends CodeNameModel {\n colorTypeCode: string;\n dimensionTypeCode: string;\n bleed: boolean;\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { API } from 'src/app/shared/constants/api.constants';\nimport { UserModel } from 'src/app/shared/models/user.model';\nimport { ErrorHandlingHttpClient } from 'src/app/shared/services/error-handling-http-client.service';\nimport { PopDesignRequestDetails, PopDesignRequestModel, PopDesignRequestItemModel } from '../models/pop-design-request.model';\nimport { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { FileUploadService } from './file-upload.service';\nimport { switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PopDesignService {\n constructor(private errorHandlingHttp: ErrorHandlingHttpClient, private fileUploadService: FileUploadService) {}\n\n public deleteDesigner(requestId: number): Observable {\n return this.errorHandlingHttp.delete(API.pdUpdateDesigner(requestId));\n }\n\n public deleteItem(requestId: number, requestItemId: number): Observable {\n return this.errorHandlingHttp.delete(API.pdDeleteItem(requestId, requestItemId));\n }\n\n public updateDesigner(requestId: number, designer: UserModel): Observable {\n return this.errorHandlingHttp.put(API.pdUpdateDesigner(requestId), designer);\n }\n\n public updateFinalArtDueDate(requestId: number, date: string): Observable {\n return this.errorHandlingHttp.put(API.pdUpdateFinalArtDueDate(requestId), {value: date});\n }\n\n public updateRequestItemWithFinancialServicesProductLines(requestId: number, payload: any): Observable {\n return this.errorHandlingHttp.put(\n API.updateRequestItemWithFinancialServicesProductLines(requestId),\n payload\n );\n }\n\n public createFinancialServicesArtworkFile(requestId: number, itemId: number, file: File) {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'fs-attachment', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createFinancialServicesArtwork(requestId, itemId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n private createFinancialServicesArtwork(requestId: number, itemId: number, uploadId: string) {\n return this.errorHandlingHttp.post(API.createFinancialServicesArtwork(requestId, itemId), null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public deleteFinancialServicesArtworkFile(requestId: number, itemId: number, attachmentId: number) {\n return this.errorHandlingHttp.delete(\n API.deleteFinancialServicesArtworkFile(requestId, itemId, attachmentId)\n );\n }\n\n public updateTmDatesApproval(requestId: number, dates: Partial): Observable> {\n return this.errorHandlingHttp.put>(API.pdUpdateTmDatesApproval(requestId), dates);\n }\n\n public uploadArtworkForRequestItem(\n file: File,\n requestId: string,\n requestItemId: number\n ): Observable> {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'artwork', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createPopDesignArtworkAttachment(requestId, requestItemId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n private createPopDesignArtworkAttachment(requestId: string, requestItemId: number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(API.createPopDesignItemArtwork(requestId, requestItemId), null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public updateArtPathNotes(requestId: number, data: any): Observable {\n return this.errorHandlingHttp.put(API.pdUpdateArtPathNotes(requestId), data);\n }\n\n public updateTmReview2Stage(\n requestId: number,\n cdReviewRequired: boolean,\n quantityOfFiles: number,\n ): Observable {\n return this.errorHandlingHttp.put(\n API.pdTmReview2StageData(requestId),\n { value: cdReviewRequired, cdReviewRequired, quantityOfFiles},\n );\n }\n\n public deleteArtworkItem(requestId: number | string, itemId: string | number, attachmentId: number): Observable {\n return this.errorHandlingHttp.delete(API.pdDeleteArtworkItem(requestId, itemId, attachmentId));\n }\n\n prepArtifactsDesigner(requestId: number, data: UserModel): Observable {\n return this.errorHandlingHttp.put(API.popDesignPrepArtifactsDesigner(requestId), data);\n }\n}\n","import { Subscriber } from '../Subscriber';\nexport function skipWhile(predicate) {\n return (source) => source.lift(new SkipWhileOperator(predicate));\n}\nclass SkipWhileOperator {\n constructor(predicate) {\n this.predicate = predicate;\n }\n call(subscriber, source) {\n return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));\n }\n}\nclass SkipWhileSubscriber extends Subscriber {\n constructor(destination, predicate) {\n super(destination);\n this.predicate = predicate;\n this.skipping = true;\n this.index = 0;\n }\n _next(value) {\n const destination = this.destination;\n if (this.skipping) {\n this.tryCallPredicate(value);\n }\n if (!this.skipping) {\n destination.next(value);\n }\n }\n tryCallPredicate(value) {\n try {\n const result = this.predicate(value, this.index++);\n this.skipping = Boolean(result);\n }\n catch (err) {\n this.destination.error(err);\n }\n }\n}\n","\n {{ 'module.requests.pop-design.details.channel' | translate }}\n {{ channel }}\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, map, skipWhile, takeUntil } from 'rxjs/operators';\nimport { PopDesignRequestModel } from 'src/app/requests/models/pop-design-request.model';\nimport { selectPopChannelTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-pop-request-channel',\n templateUrl: './pop-request-channel.component.html',\n})\nexport class PopRequestChannelComponent implements OnDestroy {\n\n @Input() request: PopDesignRequestModel;\n\n private ngUnsubscribe = new Subject();\n\n channel$ = this.store\n .pipe(\n skipWhile(() => !this.request?.details),\n select(selectPopChannelTypes),\n filter(v => v.length > 0),\n map((channels) => this.utilsService.getItemName(channels, this.request.details.channel)),\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private utilsService: UtilsService,\n ) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n
\n {{ 'module.requests.text.first-round-delivery-date' | translate }}:\n {{request.details.firstRoundArtDeliveryDate | date : 'MM/dd/yyyy'}}\n
\n
\n {{ 'module.requests.text.delivery-date' | translate }}:\n {{request.details.deliveryDate | date : 'MM/dd/yyyy'}}\n
\n \n
\n
\n","import {ChangeDetectionStrategy, Component, OnDestroy} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {selectPopDesignRequestDetails} from '../../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {PopDesignRequestModel} from '../../../../../models/pop-design-request.model';\nimport cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-pop-dates-section',\n templateUrl: './pop-dates-section.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopDatesSectionComponent implements OnDestroy {\n\n private ngUnsubscribe = new Subject();\n request: PopDesignRequestModel;\n\n request$ = this.store.select(selectPopDesignRequestDetails)\n .pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n )\n .subscribe((data) => {\n this.request = cloneDeep(data);\n });\n\n constructor(private store: Store) { }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","\n

\n {{ 'module.requests.pop-design.details.job-details' | translate }}:\n \n {{ details.jobDetails }}\n \n

\n\n

\n {{ 'module.requests.pop-design.details.additional-details' | translate }}:\n \n {{ details.additionalDetails }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.artwork-location' | translate }}:\n \n {{ artLocationTypes[details.artworkLocationTypeCode] }}\n \n

\n\n

\n {{ 'module.requests.card-design.details.artwork-description' | translate }}:\n {{ details.artworkDescription }}\n

\n\n \n

\n {{ 'module.requests.card-design.details.art-files' | translate }}:\n

\n\n \n \n \n
\n\n
\n","import {Component, Input, OnDestroy} from '@angular/core';\nimport {select, Store} from '@ngrx/store';\nimport {Subject} from 'rxjs';\nimport {filter, map, shareReplay, takeUntil} from 'rxjs/operators';\nimport {PopDesignRequestModel} from 'src/app/requests/models/pop-design-request.model';\nimport {selectArtLocationTypes} from 'src/app/reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-pop-artwork-details',\n templateUrl: './pop-artwork-details.component.html',\n styleUrls: []\n})\nexport class PopArtworkDetailsComponent implements OnDestroy {\n @Input() request: PopDesignRequestModel;\n\n private ngUnsubscribe = new Subject();\n\n artLocationTypes$ = this.store.pipe(\n select(selectArtLocationTypes),\n filter(v => v.length > 0),\n map(pg => pg.reduce((aggregate, altItem) => ({...aggregate, [altItem.code]: altItem.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(private store: Store) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n {{ 'module.requests.card-design.details.incomm-printing' | translate }}\n \n {{ (item.incommPrinting ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n
\n {{ 'module.requests.pop-design.details.unit-of-measure' | translate }}:\n {{ getDimensionType(dimensionTypes, item.dimensionTypeCode) }}\n
\n
\n {{ 'module.requests.pop-design.details.width' | translate }}:\n {{ item.width }}\n
\n
\n {{ 'module.requests.pop-design.details.height' | translate }}:\n {{ item.height }}\n
\n
\n {{ 'module.requests.pop-design.details.bleed' | translate }}:\n \n {{ (item.bleed ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { PopDesignRequestItemModel } from 'src/app/requests/models/pop-design-request.model';\nimport { selectDimensionTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\n\n@Component({\n selector: 'app-pop-request-item-info-header',\n templateUrl: './pop-request-item-info-header.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopRequestItemInfoHeaderComponent implements OnDestroy {\n\n @Input() item: PopDesignRequestItemModel;\n @Input() shouldShowInCommPrinting = true;\n\n private ngUnsubscribe = new Subject();\n\n dimensionTypes$ = this.store\n .pipe(\n select(selectDimensionTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(\n private store: Store,\n ) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getDimensionType(dimensionTypes: CodeNameModel[], code: string) {\n const model = dimensionTypes.find((type) => type.code === code);\n return model?.name;\n }\n\n}\n","\n \n
\n
\n {{ 'module.requests.pop-design.details.fs-product-line' | translate }}:\n \n \n \n {{ financialTypes[productLine?.code] }}\n \n \n \n
\n
\n
\n
\n \n {{ 'module.requests.pop-design.pop-request-item.are-the-offer-details-provided-acceptable' | translate }}\n \n {{ (productLine.offerDetailsAcceptable ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n
\n {{ 'module.requests.pop-design.pop-request-item.are-the-disclaimers-provided-correct' | translate }}\n {{ (productLine.disclaimersCorrect ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n
\n {{ 'module.requests.card-design.details.provided-details' | translate }}\n {{ productLine.disclaimersCorrectDetails }}\n
\n
\n {{ 'module.requests.pop-design.pop-request-item.are-the-cards-artifacts-provided-correct' | translate }}\n {{ (productLine.cardsArtCorrect ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n
\n {{ 'module.requests.card-design.details.provided-details' | translate }}\n {{ productLine.cardsArtCorrectDetails }}\n
\n
\n \n {{ 'module.requests.pop-design.pop-request-item.financial-services-art-files-artifacts-path' | translate }}\n \n {{ productLine.artFilePath }}\n
\n
\n
\n
\n\n
\n {{ 'module.requests.pop-design.pop-request-item.financial-services-art-files-artifacts' | translate }}:\n
\n \n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, map, shareReplay, takeUntil } from 'rxjs/operators';\nimport { selectFinancialTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { PopDesignRequestItemModel } from 'src/app/requests/models/pop-design-request.model';\n\n@Component({\n selector: 'app-pop-request-item-fs-product-lines',\n templateUrl: './pop-request-item-fs-product-lines.component.html',\n styleUrls: ['./pop-request-item-fs-product-lines.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopRequestItemFsProductLinesComponent implements OnDestroy {\n @Input() requestId: string | number;\n @Input() item: PopDesignRequestItemModel;\n @Input() testId = 'pop_request_item_fs_product_lines';\n private ngUnsubscribe = new Subject();\n\n financialTypes$ = this.store.pipe(\n select(selectFinancialTypes),\n filter(v => v.length > 0),\n map(fs => fs.reduce<{[k: string]: string}>((v, fsi) => ({...v, [fsi.code]: fsi.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n constructor(private store: Store) { }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","\n
\n {{ 'module.requests.pop-design.details.fs-product-included' | translate }}\n \n {{ (item?.financialServicesIncluded ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n\n
\n {{ 'module.requests.pop-design.details.item-promo-offer-exists' | translate }}\n \n {{ (item.promotionAssociated ? 'common.label.yes' : 'common.label.no') | translate }}\n \n\n \n \n {{ 'module.requests.pop-design.details.fs-form-completed-hint' | translate }}\n \n
\n\n
\n {{ 'module.requests.pop-design.details.item-promo-offer-approved' | translate }}\n \n {{ (item.promotionBankApproved ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n\n \n
\n
\n {{ 'module.requests.pop-design.details.color' | translate }}\n {{ getColorType(colorTypes, item.colorTypeCode) }}\n
\n\n \n
\n
\n\n
\n {{ 'module.requests.pop-design.details.pantone-details' | translate }}\n {{ item.pantoneDetails }}\n
\n\n
\n {{ 'module.requests.pop-design.details.just-describe-item' | translate }}\n {{ item.itemDescription }}\n
\n\n
\n {{ 'common.label.notes' | translate }}\n {{ item.notes }}\n
\n
\n\n\n \n\n\n\n
\n {{ 'module.requests.pop-design.details.color-cyan' | translate }}:\n {{ item.cmykC }}\n
\n
\n {{ 'module.requests.pop-design.details.color-magenta' | translate }}:\n {{ item.cmykM }}\n
\n
\n {{ 'module.requests.pop-design.details.color-yellow' | translate }}:\n {{ item.cmykY }}\n
\n
\n {{ 'module.requests.pop-design.details.color-key' | translate }}:\n {{ item.cmykK }}\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { selectColorTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { PopDesignRequestItemModel } from 'src/app/requests/models/pop-design-request.model';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\n\nimport { ColorTypes } from '../../../../../constants/color-types.constant';\n\n@Component({\n selector: 'app-pop-request-item-info-body',\n templateUrl: './pop-request-item-info-body.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopRequestItemInfoBodyComponent implements OnDestroy {\n\n @Input() item: PopDesignRequestItemModel;\n @Input() requestId: string|number;\n @Input() isExpanded = true;\n @Input() isFS = false;\n @Input() isDesignStage = false;\n @Input() testId = 'pop_request_item_info_body';\n\n public colorTypesEnum = ColorTypes;\n\n private ngUnsubscribe = new Subject();\n\n colorTypes$ = this.store\n .pipe(\n select(selectColorTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(\n private store: Store,\n ) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getColorType(colorTypes: CodeNameModel[], code: string) {\n const colorType = colorTypes\n .find((type) => type.code === code);\n\n return colorType?.name;\n }\n\n isColorValueValid(value: number) {\n return typeof value === 'number' && value >= 0;\n }\n}\n","import {Component, ChangeDetectionStrategy, Optional, Self, Input} from '@angular/core';\nimport {ControlContainer} from '@angular/forms';\n\n@Component({\n selector: 'app-pop-request-item',\n templateUrl: './pop-request-item.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class PopRequestItemComponent {\n @Input() testId: string;\n constructor(@Optional() @Self() public controlContainer: ControlContainer) {}\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n\n
\n \n
\n
\n","\n
\n {{ 'module.requests.pop-design.details.pop-production-association' | translate }}\n
\n \n
\n","import { Component, Input } from '@angular/core';\nimport { PopDesignRequestModel } from 'src/app/requests/models/pop-design-request.model';\n\n@Component({\n selector: 'app-pop-production-association',\n templateUrl: './pop-production-association.component.html',\n styleUrls: []\n})\nexport class PopProductionAssociationComponent {\n\n @Input() request: PopDesignRequestModel;\n}\n","\n \n\n \n\n
\n {{ 'module.requests.pop-design.details.artwork' | translate }}\n
\n\n
\n \n
\n\n \n\n
\n \n \n\n
\n \n \n
\n
\n {{ 'module.requests.pop-design.details.item-type' | translate }}:\n {{ itemTypes[item.itemTypeCode] }}\n
\n
\n
\n \n
\n
\n \n\n
\n \n
\n
\n {{ 'module.requests.pop-design.details.fs-product-line' | translate }}:\n \n {{ financialTypes[fsProductLine.code] }}\n \n \n \n \n \n \n {{\n (fsProductLineStatus === FINANCIAL_SERVICE_STATUSES.APPROVED\n ? 'module.requests.pop-design.details.submitted-by'\n : 'module.requests.pop-design.details.rejected-by'\n ) | translate\n }}:\n \n \n {{ [submitter.firstName, submitter.lastName].join(' ') }}\n \n \n , {{ fsProductLine.submittedAt | date: 'MM/dd/yyyy, hh:mm a' }}\n \n \n
\n
\n\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n \n \n\n \n \n\n
\n {{ 'module.requests.pop-design.details.additonal-stakeholder-details' | translate }}\n
\n
\n

\n {{ 'module.requests.pop-design.details.additonal-other-contacts' | translate }}:\n \n \n {{ contact.firstName + ' ' + contact.lastName }}\n ,\n \n \n

\n
\n
\n\n \n \n \n \n
\n","import {HttpEvent, HttpEventType} from '@angular/common/http';\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators, AbstractControl} from '@angular/forms';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport memoize from 'lodash/memoize';\nimport {EMPTY, Subject, throwError} from 'rxjs';\nimport {catchError, filter, finalize, map, shareReplay, switchMap, takeUntil, tap} from 'rxjs/operators';\nimport {\n PopDesignRequestItemFinancialServiceModel,\n PopDesignRequestItemModel,\n PopDesignRequestModel\n} from 'src/app/requests/models/pop-design-request.model';\nimport {RequestStepComponent} from 'src/app/requests/models/request-step-component.model';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {lazyLoadFinancialTypes} from 'src/app/reducers/ref-data/refdata.actions';\nimport {selectFinancialTypes} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {PopDesignService} from 'src/app/requests/services/pop-design.service';\nimport {Events, EventService} from 'src/app/shared/services/event-service.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\n\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {UserService} from '../../../../../shared/services/user.service';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {\n FINANCIAL_SERVICE_ACTION,\n FINANCIAL_SERVICE_STATUSES,\n PopDesignRequestItemFinancialServiceAction,\n PopDesignRequestItemFinancialServiceStatus\n} from '../../../../models/pop-design-request.model';\nimport {selectPopDesignRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {DatePipe} from '@angular/common';\nimport {selectPopItemTypes} from '../../../../../reducers/ref-data/refdata.selectors';\nimport {loadRequestSteps} from '../../../../reducers/request-steps/request-steps.actions';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../shared/models/upload-file-restrictions.model';\n\nconst SUBMITTION_FS_PRODUCT_LINE_STATUSES: PopDesignRequestItemFinancialServiceStatus[] = [\n FINANCIAL_SERVICE_STATUSES.APPROVED,\n FINANCIAL_SERVICE_STATUSES.REJECTED\n];\n\n@Component({\n selector: 'app-pop-financial-review',\n templateUrl: './pop-financial-review.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopFinancialReviewComponent implements OnInit, RequestStepComponent, OnDestroy {\n constructor(\n private store: Store,\n private formBuilder: FormBuilder,\n private eventsService: EventService,\n private changeDetectorRef: ChangeDetectorRef,\n private popDesignService: PopDesignService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n public userService: UserService,\n private modalService: ModalService,\n public utilsService: UtilsService,\n private eventService: EventService,\n private datePipe: DatePipe\n ) {}\n @Input() requestId: number;\n @Input() isDisabled: boolean;\n private ngUnsubscribe = new Subject();\n\n public readonly ITEM_STATUS_ICONS = {\n UNAPPROVEAD: 'icon-warning color-warning',\n AVAILABLE: 'green-text icon-action-approved',\n SUBMITTED_BY_ME: 'green-text icon-action-approved',\n SUBMITTED_BY_ANOTHER: 'grey-text icon-action-approved',\n UNAVAILABLE: 'red-text icon-action-rejected'\n };\n public userRoles = UserRoles;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n private request: PopDesignRequestModel;\n\n request$ = this.store.select(selectPopDesignRequestDetails).pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n financialTypes$ = this.store.select(selectFinancialTypes).pipe(\n map(fs => fs.reduce<{[k: string]: string}>((v, fsi) => ({...v, [fsi.code]: fsi.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n itemTypes$ = this.store.select(selectPopItemTypes).pipe(\n map(fs => fs.reduce<{[k: string]: string}>((v, fsi) => ({...v, [fsi.code]: fsi.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n public readonly FINANCIAL_SERVICE_STATUSES = FINANCIAL_SERVICE_STATUSES;\n\n private form: FormGroup;\n form$ = this.request$.pipe(\n map(request => this.formBuilder.group(\n {\n items: this.formBuilder.array(\n request.items.map(item =>\n this.formBuilder.group({\n id: this.formBuilder.control(item.id),\n fsAttachments: this.formBuilder.control(item.fsAttachments || []),\n fsProductLines: this.formBuilder.array(\n item.fsProductLines.map(fsProductLine => {\n const submitted = SUBMITTION_FS_PRODUCT_LINE_STATUSES.includes(fsProductLine.status);\n\n const group = this.formBuilder.group({\n code: this.formBuilder.control(fsProductLine.code),\n offerDetailsAcceptable: this.formBuilder.control(fsProductLine.offerDetailsAcceptable, [Validators.required]),\n disclaimersCorrect: this.formBuilder.control(fsProductLine.disclaimersCorrect, [Validators.required]),\n disclaimersCorrectDetails: this.formBuilder.control(fsProductLine.disclaimersCorrectDetails, [\n this.conditionalRequiredValidatorFactory('disclaimersCorrect')\n ]),\n cardsArtCorrect: this.formBuilder.control(fsProductLine.cardsArtCorrect, [Validators.required]),\n cardsArtCorrectDetails: this.formBuilder.control(fsProductLine.cardsArtCorrectDetails, [\n this.conditionalRequiredValidatorFactory('cardsArtCorrect')\n ]),\n artFilePath: this.formBuilder.control(fsProductLine.artFilePath),\n status: this.formBuilder.control(fsProductLine.status),\n submitted: this.formBuilder.control(submitted),\n submissionAvailable: this.formBuilder.control(fsProductLine.submissionAvailable)\n });\n\n if (fsProductLine.submissionAvailable === false || submitted) {\n group.disable();\n }\n\n return group;\n })\n )\n })\n )\n )\n },\n {\n updateOn: 'change'\n }\n )\n ),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n createFinancialServicesArtworkFile = memoize(\n (requestId: number, itemId: number, itemIndex: number) => (file: File) =>\n this.popDesignService.createFinancialServicesArtworkFile(requestId, itemId, file).pipe(\n tap((event: HttpEvent) => {\n if (event.type === HttpEventType.Response) {\n const value = this.form.get('items.' + itemIndex + '.fsAttachments').value;\n this.form.get('items.' + itemIndex + '.fsAttachments').setValue([...value, event.body]);\n }\n })\n ),\n (...args) => args.join('.')\n );\n\n removeFinancialServicesArtworkFile = memoize(\n (requestId: number, itemId: number, itemIndex: number) => (attchmentId: number) => {\n const fsAttachments: PopDesignRequestItemModel['fsAttachments'] = this.form.get('items.' + itemIndex + '.fsAttachments').value;\n const attchment = fsAttachments.find(fsAttachment => fsAttachment.id === attchmentId);\n\n return this.modalService\n .openConfirmationModal(\n this.translate.transform('module.requests.pop-design.pop-request-item.confirm-delete-file', {\n username: this.utilsService.getFullUserName(attchment?.creator) || 'some user',\n date: attchment?.createdAt ? this.datePipe.transform(attchment?.createdAt, 'MM/dd/yyyy, hh:mm a') : 'some time'\n }),\n this.translate.transform('common.modal.lost-data-desc'),\n this.translate.transform('common.button.yes'),\n this.translate.transform('common.button.no')\n )\n .afterClosed()\n .pipe(\n switchMap(result => {\n if (result === true) {\n const currentValue = [...fsAttachments];\n\n return this.popDesignService.deleteFinancialServicesArtworkFile(requestId, itemId, attchmentId).pipe(\n map(value => {\n this.form\n .get(`items.${itemIndex}.fsAttachments`)\n .setValue(currentValue.filter(attachment => attachment.id !== attchmentId));\n\n return value;\n }),\n catchError(e => {\n this.form.get(`items.${itemIndex}.fsAttachments`).setValue(currentValue);\n return throwError(e);\n })\n );\n }\n return EMPTY;\n })\n );\n },\n (...args) => args.join('.')\n );\n\n private conditionalRequiredValidatorFactory = (field: string) => (ac: AbstractControl) => {\n if (ac.parent?.get(field).value === false) {\n return Validators.required(ac);\n }\n return null;\n };\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadFinancialTypes());\n this.eventsService.on(\n Events.PopFinancialServicesSubmitValidation,\n this.onSubmit.bind(this, FINANCIAL_SERVICE_ACTION.APPROVE),\n this.ngUnsubscribe\n );\n this.eventsService.on(\n Events.PopFinancialServicesRollbackValidation,\n this.onSubmit.bind(this, FINANCIAL_SERVICE_ACTION.REJECT),\n this.ngUnsubscribe\n );\n this.request$.subscribe(r => (this.request = r as any));\n this.form$.subscribe(f => (this.form = f));\n }\n // NOSONAR\n private onSubmit(actionType: PopDesignRequestItemFinancialServiceAction) {\n if (this.form.valid) {\n const itemIdMap = this.request.items.reduce((m, item) => m.set(item.id, item), new Map());\n\n const submittedCodes = new Map>();\n\n const payload = {\n action: actionType,\n comment: null,\n items: Array.from(itemIdMap).map(([itemId, item], itemIndex) => {\n submittedCodes.set(itemId, []);\n const fsProductLinesMap = this.form.get('items.' + itemIndex + '.fsProductLines').value.reduce((m, fsProductLine) => {\n if (fsProductLine.submissionAvailable) {\n return m.set(fsProductLine.code, {\n ...fsProductLine\n /**\n * mark our edited items as submitted ones should be performed at the backend side\n */\n // submitted: true\n });\n }\n return m;\n }, new Map());\n\n return {\n ...item,\n fsProductLines: item.fsProductLines.map(fsProductLine => {\n if (fsProductLinesMap.has(fsProductLine.code)) {\n submittedCodes.get(itemId).push(fsProductLine.code);\n return {...fsProductLine, ...fsProductLinesMap.get(fsProductLine.code)};\n }\n return {...fsProductLine};\n })\n };\n })\n };\n\n this.financialTypes$.subscribe(financialTypes => {\n /**\n * Changeset check\n */\n const [hasChange, hasChangeMessage] = payload.items.reduce(\n ([itemHasChange, itemHasChangeMessage], item, itemIndex) => [\n itemHasChange ||\n item.fsProductLines\n .filter(fsProductLine => submittedCodes.get(item.id).includes(fsProductLine.code))\n .reduce((hasItemChange, fsProductLine) => hasItemChange || !fsProductLine.submitted, false),\n [\n ...itemHasChangeMessage,\n [\n `Item #${itemIndex + 1}`,\n item.fsProductLines\n .filter(fsProductLine => submittedCodes.get(item.id).includes(fsProductLine.code))\n .reduce((hasItemChangeMessage, fsProductLine) => [\n ...hasItemChangeMessage,\n // if fsProductLine has been approved or rejected we should add product line\n ...(!fsProductLine.submitted ? [] : [`${financialTypes[fsProductLine.code]}`])\n ], [])\n ]\n ]\n ],\n [false, []]\n );\n\n if (!hasChange) {\n return this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('module.requests.pop-design.pop-request-item.product-lines-has-been-submitted', {\n fs_product_lines: hasChangeMessage\n .filter(itemGroup => itemGroup[1] && itemGroup[1].length)\n .map(itemGroup => `${itemGroup[0]} ${itemGroup[1].join(', ')}`)\n .join('; ')\n }),\n null\n );\n }\n\n this.popDesignService\n .updateRequestItemWithFinancialServicesProductLines(this.requestId, payload)\n .pipe(\n finalize(() => {\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n })\n )\n .subscribe(\n response => {\n let warning = false;\n const successLines = [];\n const failedLines = [];\n\n Array.from(submittedCodes.entries()).forEach(([itemId, codes]) => {\n const failedCodes = [];\n const successCodes = [];\n const responsedItem = response.items.find(item => item.id === itemId);\n const responsedItemIndex = response.items.findIndex(item => item.id === itemId);\n\n if (!responsedItem) {\n return;\n }\n\n responsedItem.fsProductLines.forEach(productLine => {\n if (codes.includes(productLine.code)) {\n if (productLine.submitter.userName !== this.userService.getCurrentUserName()) {\n failedCodes.push(productLine.code);\n } else {\n successCodes.push(productLine.code);\n }\n }\n });\n\n if (successCodes.length) {\n successLines.push(\n this.translate.transform('module.requests.pop-design.details.item-num') +\n (responsedItemIndex + 1) +\n ' ' +\n successCodes.map(sc => `${financialTypes[sc]}`).join(', ')\n );\n }\n\n if (failedCodes.length) {\n failedLines.push(\n this.translate.transform('module.requests.pop-design.details.item-num') +\n (responsedItemIndex + 1) +\n ' ' +\n failedCodes.map(fc => `${financialTypes[fc]}`).join(', ')\n );\n }\n\n warning = warning || failedCodes.length > 0;\n });\n\n if (successLines.length || failedLines.length) {\n this.messageService.showSystemMessage(\n !warning ? 'success' : 'warning',\n actionType === FINANCIAL_SERVICE_ACTION.REJECT\n ? this.translate.transform('module.requests.pop-design.pop-request-item.product-lines-was-saved')\n : this.translate.transform('module.requests.pop-design.pop-request-item.product-lines-was-submitted'),\n (successLines.length\n ? this.translate.transform('module.requests.pop-design.pop-request-item.successfully-sent-description', {\n successfully_sent: successLines.join('; ')\n })\n : '') +\n (failedLines.length\n ? this.translate.transform('module.requests.pop-design.pop-request-item.saved-by-another-user-description', {\n submission_failed: failedLines.join('; ')\n })\n : '')\n );\n }\n\n /**\n * Count submitted items if we are trying to approve or unsubmitter items if we gonna reject\n */\n const fsProductLineStatuses = response.items.flatMap(item => item.fsProductLines.map(fsProductLine => fsProductLine.status));\n\n /**\n * Unsubmitted product lines check\n */\n if (\n /**\n * Every fs product line status is approved\n */\n fsProductLineStatuses.every(fsProductLineStatus => fsProductLineStatus === FINANCIAL_SERVICE_STATUSES.APPROVED) ||\n /**\n * Some of fs product line statuses are rejected\n */\n fsProductLineStatuses.some(fsProductLineStatus => fsProductLineStatus === FINANCIAL_SERVICE_STATUSES.REJECTED)\n ) {\n /**\n * Break other actions because this one is a complex stage submission flow\n */\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: `${this.requestId}`}));\n return this.store.dispatch(loadRequestSteps({requestId: `${this.requestId}`}));\n }\n\n /**\n * Refresh current state in case of data submission.\n */\n if (submittedCodes.size > 0) {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: (this.requestId as unknown) as string}));\n }\n },\n () => {\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('module.requests.approve.approve-required'),\n this.translate.transform('module.requests.approve.submit-stage-error')\n );\n }\n );\n });\n } else {\n this.form.markAllAsTouched();\n this.form.updateValueAndValidity();\n this.changeDetectorRef.detectChanges();\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message')\n );\n }\n }\n\n getIcon(fg: FormGroup, fsProductLine: PopDesignRequestItemFinancialServiceModel) {\n return fg.disabled\n ? fsProductLine?.submitter && fsProductLine?.submitter?.userName === this.userService.getCurrentUserName()\n ? this.ITEM_STATUS_ICONS.SUBMITTED_BY_ME\n : fsProductLine.submitter == null\n ? this.ITEM_STATUS_ICONS.UNAVAILABLE\n : this.ITEM_STATUS_ICONS.SUBMITTED_BY_ANOTHER\n : fg.invalid\n ? this.ITEM_STATUS_ICONS.UNAPPROVEAD\n : this.ITEM_STATUS_ICONS.AVAILABLE;\n }\n\n productLineItemTouched(fg: FormGroup): boolean {\n return [\n 'offerDetailsAcceptable',\n 'disclaimersCorrect',\n 'disclaimersCorrectDetails',\n 'cardsArtCorrect',\n 'cardsArtCorrectDetails'\n ].reduce((reduced, fieldName) => reduced && fg.get(fieldName).touched, true);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","\n
\n \n
\n
\n {{ 'module.requests.pop-design.details.fs-product-line' | translate }}:\n \n {{ financialTypes[fsProductLine.get('code')?.value] }}\n \n \n \n \n \n \n {{\n (fsProductLineStatus === FINANCIAL_SERVICE_STATUSES.APPROVED\n ? 'module.requests.pop-design.details.submitted-by'\n : 'module.requests.pop-design.details.rejected-by'\n ) | translate\n }}:\n \n \n {{ [submitter.firstName, submitter.lastName].join(' ') }}\n \n \n , {{ item.fsProductLines[serviceIndex].submittedAt | date: 'MM/dd/yyyy, hh:mm a' }}\n \n \n
\n
\n\n
\n \n
\n \n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { AbstractControl, ControlContainer } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, map, shareReplay, takeUntil } from 'rxjs/operators';\nimport { selectFinancialTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport {\n PopDesignRequestItemFinancialServiceModel,\n PopDesignRequestItemModel,\n} from 'src/app/requests/models/pop-design-request.model';\nimport { UserService } from 'src/app/shared/services/user.service';\n\nimport { FINANCIAL_SERVICE_STATUSES } from '../../../../../models/pop-design-request.model';\n\n@Component({\n selector: 'app-pop-request-item-fs-product-lines-form',\n templateUrl: './pop-request-item-fs-product-lines-form.component.html',\n styleUrls: ['./pop-request-item-fs-product-lines-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopRequestItemFsProductLinesFormComponent implements OnDestroy {\n @Input() requestId: string | number;\n @Input() item: PopDesignRequestItemModel;\n @Input() itemIndex = 0;\n\n public readonly FINANCIAL_SERVICE_STATUSES = FINANCIAL_SERVICE_STATUSES;\n public readonly ITEM_STATUS_ICONS = {\n UNAPPROVEAD: 'icon-warning color-warning',\n AVAILABLE: 'green-text icon-action-approved',\n SUBMITTED_BY_ME: 'green-text icon-action-approved',\n SUBMITTED_BY_ANOTHER: 'grey-text icon-action-approved',\n UNAVAILABLE: 'red-text icon-action-rejected'\n };\n private ngUnsubscribe = new Subject();\n\n financialTypes$ = this.store.pipe(\n select(selectFinancialTypes),\n filter(v => v.length > 0),\n map(fs => fs.reduce<{[k: string]: string}>((v, fsi) => ({...v, [fsi.code]: fsi.name}), {})),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n get form() {\n return this.controlContainer.control;\n }\n constructor(private store: Store, private controlContainer: ControlContainer, private userService: UserService) {}\n\n productLineItemTouched(fg: AbstractControl): boolean {\n return [\n 'offerDetailsAcceptable',\n 'disclaimersCorrect',\n 'disclaimersCorrectDetails',\n 'cardsArtCorrect',\n 'cardsArtCorrectDetails'\n ].reduce((reduced, fieldName) => reduced && fg.get(fieldName).touched, true);\n }\n\n\n getIcon(fg: AbstractControl, fsProductLine: PopDesignRequestItemFinancialServiceModel) {\n return fg.disabled\n ? fsProductLine?.submitter && fsProductLine?.submitter?.userName === this.userService.getCurrentUserName()\n ? this.ITEM_STATUS_ICONS.SUBMITTED_BY_ME\n : fsProductLine.submitter == null\n ? this.ITEM_STATUS_ICONS.UNAVAILABLE\n : this.ITEM_STATUS_ICONS.SUBMITTED_BY_ANOTHER\n : fg.invalid\n ? this.ITEM_STATUS_ICONS.UNAPPROVEAD\n : this.ITEM_STATUS_ICONS.AVAILABLE;\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Action, select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash';\nimport moment from 'moment';\nimport { BehaviorSubject, of, Subject, Subscription, throwError } from 'rxjs';\nimport { debounceTime, filter, map, shareReplay, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport {\n lazyLoadArtLocationsTypes,\n lazyLoadColorTypes,\n lazyLoadDimensionTypes,\n lazyLoadFinancialTypes,\n lazyLoadPopChannelTypes,\n lazyLoadPopItemTypes,\n} from 'src/app/reducers/ref-data/refdata.actions';\nimport {\n selectColorTypes,\n selectDimensionTypes,\n selectFinancialTypes,\n selectPopChannelTypes,\n selectPopItemTypes,\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {\n FINANCIAL_SERVICE_STATUSES,\n PopDesignRequestDetails,\n PopDesignRequestItemFinancialServiceStatus,\n PopDesignRequestItemModel,\n PopDesignRequestModel,\n} from 'src/app/requests/models/pop-design-request.model';\nimport { RequestStepComponent } from 'src/app/requests/models/request-step-component.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { FileUpdateHandlerFn } from 'src/app/shared/components/app-artwork-item/app-artwork-item.model';\nimport { WithPanelExpanded } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { TrafficManagers, UserRoles } from 'src/app/shared/constants/user-roles.constant';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { FILE_SIZE_RESTRICTIONS, RestrictionOptionsObject } from 'src/app/shared/models/upload-file-restrictions.model';\nimport { UserModel } from 'src/app/shared/models/user.model';\nimport { Events, EventService, PopDesignEvents } from 'src/app/shared/services/event-service.service';\nimport { LoaderService } from 'src/app/shared/services/loader.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { ModalService } from 'src/app/shared/services/modal-service.service';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\nimport { UserPermissionsService } from 'src/app/shared/services/user-permissions.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { ApprovalManagerClickEvent } from '../../../../../shared/components/app-artwork-item/app-artwork-item.component';\nimport {\n HasPanelExpandState,\n} from '../../../../../shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport { AmMode, AmModeType } from '../../../../../shared/models/am-mode.model';\nimport {\n PopDesignApprovalManagerService,\n} from '../../../../../shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport { DateService } from '../../../../../shared/services/date-service.service';\nimport { UserService } from '../../../../../shared/services/user.service';\nimport {\n selectAdditionalOtherContacts,\n selectPopDesignRequestDetails,\n} from '../../../../reducers/request-details/request-details.selectors';\nimport { PopDesignFormService } from '../../../../services/pop-design-form.service';\nimport { PopDesignService } from '../../../../services/pop-design.service';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { WithTmAssignment } from '../../../shared/tm-assignment/tm-assignment.mixin';\n\nconst SUBMITTION_FS_PRODUCT_LINE_STATUSES: PopDesignRequestItemFinancialServiceStatus[] = [\n FINANCIAL_SERVICE_STATUSES.APPROVED,\n FINANCIAL_SERVICE_STATUSES.REJECTED\n];\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const PopTmReviewComponentBase = WithTmAssignment(WithPanelExpanded('first'));\n\n@Component({\n selector: 'app-pop-tm-review',\n templateUrl: './pop-tm-review.component.html',\n styleUrls: ['./pop-tm-review.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopTmReviewComponent\n extends PopTmReviewComponentBase\n implements OnInit, RequestStepComponent, OnChanges, OnDestroy, HasPanelExpandState\n{\n @Input() requestId: number;\n @Input() isDisabled: boolean;\n isStepDisabledSubject = new BehaviorSubject(null);\n @Input() public set isStepDisabled(isStepDisabled: boolean) {\n this.isStepDisabledSubject.next(isStepDisabled);\n }\n get isStepDisabled(): boolean {\n return this.isStepDisabledSubject.value;\n }\n\n request: PopDesignRequestModel;\n ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n\n public readonly mode: AmModeType = AmMode.view;\n\n /* Enabling and/or disabling the deliveryDate input triggers valueChanges\n which causes unrequired API call. These options override the default behaviour. */\n private deliveryDateStateChangeOptions = {\n onlySelf: true,\n emitEvent: false\n };\n\n private readonly financialServicesDisabledFields = [\n 'financialServicesIncluded',\n 'promotionAssociated',\n 'promotionBankApproved',\n 'fsProductLinesEnabled'\n ];\n\n public additionalStakeholdersDetailsControls: FormArray;\n\n public userRoles = UserRoles;\n\n public details: PopDesignRequestDetails;\n public form: FormGroup;\n public designerControl: FormControl;\n public isDatesApproved = true;\n public isValidated = false;\n public designerControlTouched = false;\n public formValidationTrigger = new Subject();\n\n fileTypesToAccept: string[] = [];\n restrictionOptions: RestrictionOptionsObject = {\n fileType: FILE_TYPES.POP_DESIGN.ARTWORK,\n fileSize: FILE_SIZE_RESTRICTIONS.POP_DESIGN.ARTWORK\n };\n\n get requestItemsControls(): FormArray {\n return this.form.get('items') as FormArray;\n }\n colorTypes$ = this.store.select(selectColorTypes);\n dimensionTypes$ = this.store.select(selectDimensionTypes);\n financialTypes$ = this.store.select(selectFinancialTypes);\n financialTypesMapped$ = this.store\n .select(selectFinancialTypes)\n .pipe(map(fsTypes => fsTypes.reduce((acc, fsType) => ({...acc, [fsType.code]: fsType}), {})));\n popItemTypes$ = this.store.select(selectPopItemTypes);\n channelTypes$ = this.store.select(selectPopChannelTypes);\n get detailsForm(): FormGroup | null {\n return this.form?.get('details') as FormGroup;\n }\n\n request$ = this.store.pipe(\n select(selectPopDesignRequestDetails),\n filter(req => req?.id !== this.requestId),\n map(r => cloneDeep(r)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n readonly AssignTrafficManagerGroups = [TrafficManagers.PDR];\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private translateService: TranslateService,\n private store: Store,\n private modalService: ModalService,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n public approvalManagerService: PopDesignApprovalManagerService,\n public popDesignService: PopDesignService,\n public utilsService: UtilsService,\n public dateService: DateService,\n private popDesignFormService: PopDesignFormService,\n private actions: Actions,\n private requestService: RequestsService,\n userService: UserService,\n userPermissionsService: UserPermissionsService,\n loaderService: LoaderService\n ) {\n super(\n fb,\n cd,\n translateService,\n store,\n modalService,\n eventService,\n messageService,\n stepActionsService,\n approvalManagerService,\n popDesignService,\n utilsService,\n dateService,\n popDesignFormService,\n actions,\n requestService,\n userService,\n userPermissionsService,\n loaderService\n );\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.requestService\n .getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ? data[this.restrictionOptions?.fileType] : data[FILE_TYPES.DEFAULT];\n }\n });\n this.store.dispatch(lazyLoadPopChannelTypes());\n this.store.dispatch(lazyLoadArtLocationsTypes());\n this.store.dispatch(lazyLoadPopItemTypes());\n this.store.dispatch(lazyLoadColorTypes());\n this.store.dispatch(lazyLoadDimensionTypes());\n this.store.dispatch(lazyLoadFinancialTypes());\n\n this.initForm();\n this.setControlsSubs();\n this.initEventHandlers();\n\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(async request => {\n this.request = request;\n this.details = this.request?.details;\n this.initExpandedPanels(request?.items || []);\n\n this.designerControl.updateValueAndValidity({emitEvent: false});\n\n this.form.patchValue(this.request, {emitEvent: false});\n this.designerControl.setValue(this.details?.designer, {emitEvent: false});\n\n this.additionalStakeholdersDetailsControls.clear();\n if (this.details?.contacts?.length) {\n this.details.contacts.forEach(item => {\n this.pushStakeholderContact(item);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n\n const items = await this.initFormItems(request.items);\n this.form.setControl('items', items);\n\n if (this.details.datesApproved) {\n this.detailsForm.get('firstRoundArtDeliveryDate').disable();\n this.detailsForm.get('deliveryDate').disable(this.deliveryDateStateChangeOptions);\n }\n\n this.toggleControlsDisabling();\n this.detailsForm?.get('datesApproved')?.updateValueAndValidity();\n\n this.cd.markForCheck();\n });\n\n // Subscribe direct approval manager version updates\n this.approvalManagerService\n .onRequestItemsChange()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(items => {\n items.forEach(item => {\n (this.form.get('items') as FormArray)?.controls.forEach(itemControl => {\n if (itemControl.get('id').value === item.id) {\n itemControl.get('artworkFiles').setValue(item.artworkFiles);\n this.cd.markForCheck();\n }\n });\n });\n });\n\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.form.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleControlsDisabling();\n this.detailsForm?.get('datesApproved')?.updateValueAndValidity();\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n openApprovalManager({requestItem, artworkFile}: ApprovalManagerClickEvent) {\n this.modalService\n .openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n fileTypesToAccept: this.fileTypesToAccept,\n restrictionOptions: this.restrictionOptions.fileSize\n })\n .afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe();\n }\n\n public onDeleteItem(requestItemId: number): void {\n if (this.request.items.length < 2) {\n this.modalService.openCloseModal(\n this.translateService.instant('module.requests.card-design.tm-review.modal.delete-item-header'),\n this.translateService.instant('module.requests.card-design.tm-review.modal.delete-item-desc')\n );\n }\n }\n\n removeArtworkItemFunction = (itemId: number, attachmentId: number) =>\n this.popDesignService.deleteArtworkItem(this.requestId, itemId, attachmentId);\n\n onDesignerChange(value: UserModel): void {\n this.designerControl.setValue(value);\n this.designerControl.updateValueAndValidity();\n this.cd.markForCheck();\n }\n\n public fileUpdateHandler: FileUpdateHandlerFn = ({data}) => {\n const itemsControl = this.form.get(`items`) as FormArray;\n const itemControl = itemsControl.at(itemsControl.value.findIndex(i => i.id === data.id));\n const artworkFilesControl = itemControl.get(`artworkFiles`) as FormArray;\n\n artworkFilesControl.setValue(data.artworkFiles);\n\n this.approvalManagerService.onRequestChange({\n ...this.request,\n items: itemsControl.value\n });\n };\n\n private initForm() {\n this.form = this.fb.group({\n details: this.createDetailsFeildset(),\n items: this.fb.array([])\n });\n\n this.designerControl = this.fb.control(null, Validators.required);\n this.additionalStakeholdersDetailsControls = this.detailsForm.get('contacts') as FormArray;\n\n this.toggleControlsDisabling();\n }\n\n private createDetailsFeildset(): FormGroup {\n const fieldset = this.popDesignFormService.createDetailsFieldset();\n fieldset.setControl('datesApproved', this.fb.control(false, Validators.requiredTrue));\n return fieldset;\n }\n\n private getFinancialTypes(): Promise {\n return this.store\n .select(selectFinancialTypes)\n .pipe(\n filter(fsTypes => fsTypes != null && fsTypes?.length > 0),\n take(1),\n takeUntil(this.ngUnsubscribe)\n )\n .toPromise();\n }\n\n private async initFormItems(items: PopDesignRequestItemModel[] = []): Promise {\n const financialTypes = await this.getFinancialTypes();\n return this.fb.array(items.map(item => this.initFormItem(item, financialTypes)));\n }\n\n private initFormItem(item: PopDesignRequestItemModel, financialTypes: CodeNameModel[]): FormGroup {\n const fieldset = this.popDesignFormService.getItemFieldset(item);\n\n fieldset.addControl('artworkFiles', this.fb.control(item?.artworkFiles || null));\n\n /**\n * Setting up fs product lines\n */\n const arr = fieldset.get('fsProductLines') as FormArray;\n const enabledArr = this.fb.array([]);\n fieldset.addControl('fsProductLinesEnabled', enabledArr);\n\n financialTypes.forEach(({code}) => {\n enabledArr.push(this.fb.control(item?.fsProductLines?.map(fspl => fspl?.code).includes(code)));\n });\n enabledArr.disable();\n\n item.fsProductLines.forEach(fsProductLine => {\n const submitted = SUBMITTION_FS_PRODUCT_LINE_STATUSES.includes(fsProductLine.status);\n const fg = this.fb.group({\n code: this.fb.control(fsProductLine.code),\n offerDetailsAcceptable: this.fb.control(fsProductLine.offerDetailsAcceptable, [Validators.required]),\n disclaimersCorrect: this.fb.control(fsProductLine.disclaimersCorrect, [Validators.required]),\n disclaimersCorrectDetails: this.fb.control(fsProductLine.disclaimersCorrectDetails, [\n this.conditionalRequiredValidatorFactory('disclaimersCorrect')\n ]),\n cardsArtCorrect: this.fb.control(fsProductLine.cardsArtCorrect, [Validators.required]),\n cardsArtCorrectDetails: this.fb.control(fsProductLine.cardsArtCorrectDetails, [\n this.conditionalRequiredValidatorFactory('cardsArtCorrect')\n ]),\n artFilePath: this.fb.control(fsProductLine.artFilePath),\n status: this.fb.control(fsProductLine.status),\n submitted: this.fb.control(submitted),\n submissionAvailable: this.fb.control(fsProductLine.submissionAvailable)\n });\n arr.push(fg);\n });\n\n this.disableItemFieldset(fieldset);\n return fieldset;\n }\n\n private disableItemFieldset(fieldset: FormGroup) {\n this.financialServicesDisabledFields.forEach(field => {\n fieldset.get(field).disable();\n });\n (fieldset.get('fsProductLines') as FormArray).controls.forEach(fsProductLine => {\n ['code', 'offerDetailsAcceptable', 'disclaimersCorrect', 'cardsArtCorrect', 'status', 'submitted', 'submissionAvailable'].forEach(\n fieldName => fsProductLine.get(fieldName).disable()\n );\n });\n }\n\n private conditionalRequiredValidatorFactory = (field: string) => (ac: AbstractControl) => {\n if (ac.parent?.get(field).value === false) {\n return Validators.required(ac);\n }\n return null;\n };\n\n public newItemIndex = 0;\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n\n public async onAddRequestItem(): Promise {\n this.request.items.push({\n artworkFiles: [],\n financialServicesIncluded: false,\n fsProductLines: []\n });\n (this.form.get('items') as FormArray).push(\n this.initFormItem(\n {\n artworkFiles: [],\n financialServicesIncluded: false,\n fsProductLines: []\n },\n await this.getFinancialTypes()\n )\n );\n this.updateNewItemIndex();\n this.cd.markForCheck();\n }\n\n public onRemoveRequestItem(requestItemIndex: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(requestItemIndex);\n this.request.items.splice(requestItemIndex, 1);\n }\n this.expandedPanels = new Set(\n [...this.expandedPanels].map(ei => (ei === requestItemIndex ? null : ei > requestItemIndex ? ei - 1 : ei)).filter(i => i !== null)\n );\n }\n\n private toggleControlsDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable({emitEvent: false});\n this.designerControl?.disable({emitEvent: false});\n } else {\n this.form?.enable({emitEvent: false});\n this.designerControl?.enable({emitEvent: false});\n\n (this.form.get('items') as FormArray)?.controls.forEach(this.disableItemFieldset.bind(this));\n }\n }\n\n private setControlsSubs(): void {\n this.handleDatesApprovedChange();\n }\n\n private initEventHandlers(): void {\n this.subscriptions.push(this.initFormValidationHandler(), this.initSubmitHandler());\n }\n\n private initFormValidationHandler(): Subscription {\n this.eventService.on(\n Events.TmReviewSave,\n async () => {\n await this.saveRequest(true);\n this.messageService.showSystemMessage('success', this.translateService.instant('common.message.request-saved'));\n this.cd.markForCheck();\n },\n this.ngUnsubscribe\n );\n\n return this.eventService.on(PopDesignEvents.TmReviewSubmitValidated, elementRef => {\n this.form.markAllAsTouched();\n this.designerControlTouched = true;\n this.isDatesApproved = this.detailsForm.get('datesApproved').valid;\n this.isValidated = true;\n\n this.cd.markForCheck();\n this.formValidationTrigger.next();\n if (this.form.invalid || this.designerControl.invalid || this.detailsForm.get('datesApproved').invalid) {\n this.utilsService.logInvalidControls(this.form);\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.modal.errors.invalid-form-header'),\n this.translateService.instant('common.modal.errors.invalid-form-desc')\n );\n\n return;\n }\n\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', PopDesignEvents.TmReviewSubmit, 'right');\n });\n }\n\n private initSubmitHandler(): Subscription {\n return this.eventService.on(PopDesignEvents.TmReviewSubmit, async event => {\n await this.saveRequest();\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment\n }\n });\n });\n }\n\n private async saveRequest(draft = false): Promise {\n const financialTypes = await this.getFinancialTypes();\n const requestDetails = {\n ...this.request,\n ...this.form.getRawValue(),\n details: {\n ...this.request.details,\n ...this.form.getRawValue().details,\n designer: this.designerControl.value\n }\n };\n requestDetails.items = this.form.getRawValue().items.map(item => ({\n ...item,\n ...item.cmyk,\n fsProductLines: item.financialServicesIncluded\n ? item.fsProductLines.map((v, idx) => ({\n ...financialTypes[idx],\n ...v\n }))\n : []\n }));\n\n requestDetails.details.firstRoundArtDeliveryDate = moment(requestDetails.details.firstRoundArtDeliveryDate).toISOString();\n requestDetails.details.deliveryDate = moment(requestDetails.details.deliveryDate).toISOString();\n requestDetails.details.contacts = requestDetails.details.contacts.filter(i => i !== null);\n\n this.store.dispatch(\n requestDetailsActions.updateRequestDetails({\n draft,\n requestId: this.requestId,\n details: requestDetails,\n excludeParts: ['contacts']\n })\n );\n return this.actions\n .pipe(\n ofType(requestDetailsActions.updateRequestDetailsSuccess, requestDetailsActions.updateRequestDetailsFailure),\n switchMap(action => {\n if (action.type === requestDetailsActions.updateRequestDetailsFailure.type) {\n return throwError(new Error('Invalid'));\n }\n return of(action);\n }),\n take(1),\n takeUntil(this.ngUnsubscribe)\n )\n .toPromise();\n }\n\n private handleDatesApprovedChange(): void {\n this.detailsForm\n .get('datesApproved')\n .valueChanges.pipe(\n filter(() => !this.isDisabled),\n tap(datesApproved => {\n this.toggleFirstRoundArtDeliveryDate(datesApproved);\n this.isValidated = false;\n }),\n filter(datesApproved => this.request?.details?.datesApproved !== datesApproved),\n debounceTime(300)\n )\n .subscribe();\n }\n\n private pushStakeholderContact(contact: UserModel): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact(null);\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n private toggleFirstRoundArtDeliveryDate(toDisable: boolean): void {\n const firstRoundArtDeliveryDate = this.detailsForm?.get('firstRoundArtDeliveryDate');\n const deliveryDate = this.detailsForm?.get('deliveryDate');\n\n if (toDisable) {\n firstRoundArtDeliveryDate.disable();\n deliveryDate.disable(this.deliveryDateStateChangeOptions);\n } else {\n firstRoundArtDeliveryDate.enable();\n deliveryDate.enable(this.deliveryDateStateChangeOptions);\n }\n }\n}\n","
\n\n
\n
\n \n \n \n
\n
\n \n\n
\n {{ 'module.requests.card-design.details.dates' | translate }}\n\n
\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n
\n \n
\n
\n
\n\n \n \n\n
\n \n
\n\n \n\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n
\n \n
\n \n \n \n\n 0\">\n
\n {{ 'module.requests.pop-design.pop-request-item.financial-services-art-files-artifacts' | translate }}:\n
\n \n
\n
\n\n \n \n \n {{ 'common.approval-manager.item-save-required' | translate }}\n \n \n \n
\n \n
\n \n \n \n {{ 'module.requests.details.add-one-item' | translate }}\n \n
\n\n \n \n \n \n\n \n\n
\n \n {{ 'module.requests.details.stakeholder-details' | translate }}\n \n\n
\n
\n \n
\n \n \n {{ 'module.requests.details.add-other-contact' | translate }}\n \n
\n
\n\n \n \n\n \n \n\n","\n \n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n {{ 'module.requests.pop-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n
\n \n
\n {{ 'module.requests.pop-design.details.item-type' | translate }}:\n {{ getItemType(itemTypes, item.itemTypeCode) }}\n
\n
\n \n
\n
\n \n
\n \n \n \n \n \n \n {{ 'module.requests.card-design.details.please-provide-at-least-one-artwork-file' | translate }}\n \n \n \n \n {{ 'module.requests.card-design.details.item-have-rejected-artwork-files' | translate }}\n \n \n \n
\n
\n \n
\n \n\n \n \n \n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport { RequestStepComponent } from 'src/app/requests/models/request-step-component.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport { CanPanelExpandState, HasPanelExpandState, mixinHasPanelExpandState } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport { ApprovalManagerService } from 'src/app/shared/services/approval-manager/approval-manager.service';\n\nimport { selectPopItemTypes } from '../../../../../reducers/ref-data/refdata.selectors';\nimport { ApprovalManagerClickEvent } from '../../../../../shared/components/app-artwork-item/app-artwork-item.component';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { AmMode } from '../../../../../shared/models/am-mode.model';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport {\n FILE_SIZE_RESTRICTIONS,\n RestrictionOptionsObject,\n} from '../../../../../shared/models/upload-file-restrictions.model';\nimport {\n PopDesignApprovalManagerService,\n} from '../../../../../shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { PopDesignRequestItemModel, PopDesignRequestModel } from '../../../../models/pop-design-request.model';\nimport { selectPopDesignRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { PopDesignService } from '../../../../services/pop-design.service';\nimport { RequestsService } from '../../../../services/requests.service';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst _PopDesignProcessComponent = mixinHasPanelExpandState(\n class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n }\n);\n\n@Component({\n selector: 'app-pop-design-process',\n templateUrl: './pop-design-process.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: PopDesignApprovalManagerService\n }\n ]\n})\nexport class PopDesignProcessComponent\n extends _PopDesignProcessComponent\n implements OnInit, RequestStepComponent, OnDestroy, HasPanelExpandState\n{\n @Input() requestId: number;\n @Input() isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n restrictionOptions: RestrictionOptionsObject = {\n fileType: FILE_TYPES.POP_DESIGN.ARTWORK,\n fileSize: FILE_SIZE_RESTRICTIONS.POP_DESIGN.ARTWORK\n };\n mode = AmMode.design;\n userRoles = UserRoles;\n fileTypesToAccept: string[] = [];\n form: FormGroup;\n\n request$ = this.store\n .pipe(\n select(selectPopDesignRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n itemTypes$ = this.store.pipe(\n select(selectPopItemTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(private store: Store,\n private fb: FormBuilder,\n public approvalManagerService: PopDesignApprovalManagerService,\n public popDesignService: PopDesignService,\n private modalService: ModalService,\n private eventService: EventService,\n private utilsService: UtilsService,\n private requestService: RequestsService) {\n super();\n }\n\n ngOnInit(): void {\n this.requestService.getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ?\n data[this.restrictionOptions?.fileType] :\n data[FILE_TYPES.DEFAULT_DESIGN];\n }\n });\n\n this.request$.subscribe((request: PopDesignRequestModel) => {\n this.form = this.buildForm(request);\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n openApprovalManager({requestItem, artworkFile}: ApprovalManagerClickEvent) {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n fileTypesToAccept: this.fileTypesToAccept,\n restrictionOptions: this.restrictionOptions.fileSize,\n }).afterClosed().pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId as unknown as string}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n getItemType(itemTypes: CodeNameModel[], code: string) {\n return this.utilsService.getItemName(itemTypes, code);\n }\n\n public removeArtworkItemFunction = (itemId: number, attachmentId: number) => this.popDesignService.deleteArtworkItem(this.requestId, itemId, attachmentId);\n\n private buildForm(request: PopDesignRequestModel) {\n this.initExpandedPanels(request.items);\n return this.fb.group({\n items: this.fb.array(\n request.items.map((item: PopDesignRequestItemModel) => this.fb.group(\n { artworkFiles: this.fb.control(item?.artworkFiles || null) },\n { validators: [UtilsService.artworksNotRejectedValidationFn()]\n })\n )\n )\n });\n }\n}\n","import { PopDesignRequestModel } from '../../models/pop-design-request.model';\nimport { tmReview2StageDataCreator } from './request-details.utils';\n\n\nexport enum PopDesignActions {\n TmReview2Stage = '[RequestDetails PopDesign] Tm Review 2 stage',\n}\n\nconst updateTmReview2Stage = tmReview2StageDataCreator(\n PopDesignActions.TmReview2Stage,\n);\n\nexport const popDesignActions = {\n updateTmReview2Stage,\n};\n","
\n {{ 'module.requests.pop-design.details.item-type' | translate }}:\n {{ getItemType(itemTypes, item.itemTypeCode) }}\n
\n","import { Component, Input, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { PopDesignRequestItemModel } from 'src/app/requests/models/pop-design-request.model';\nimport { selectPopItemTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-pop-request-item-type-header',\n templateUrl: './pop-request-item-type-header.component.html',\n})\nexport class PopRequestItemTypeHeaderComponent implements OnDestroy {\n\n @Input() item: PopDesignRequestItemModel;\n\n private ngUnsubscribe = new Subject();\n\n itemTypes$ = this.store\n .pipe(\n select(selectPopItemTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(\n private store: Store,\n private utilsService: UtilsService,\n ) { }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getItemType(itemTypes: CodeNameModel[], code: string) {\n return this.utilsService.getItemName(itemTypes, code);\n }\n\n}\n","
\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n\n \n
\n
\n \n
\n \n
\n\n
\n \n
\n
\n \n\n \n
\n \n
\n
\n \n
\n
\n \n

\n \n {{ 'module.requests.card-design.tm-review-2.additional-review-info' | translate }}\n

\n
\n
\n \n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport {Subject, Subscription, merge} from 'rxjs';\nimport {selectPopDesignRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {debounceTime, distinctUntilKeyChanged, filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {select, Store} from '@ngrx/store';\nimport {FormArray, FormBuilder, FormGroup} from '@angular/forms';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\nimport {PopDesignApprovalManagerService} from 'src/app/shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport {AmMode, AmModeType} from 'src/app/shared/models/am-mode.model';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {ModalService} from 'src/app/shared/services/modal-service.service';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {Events, EventService, PopDesignEvents} from 'src/app/shared/services/event-service.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\nimport {popDesignActions} from 'src/app/requests/reducers/request-details/pop-design.actions';\nimport {PopDesignRequestItemModel, PopDesignRequestModel} from 'src/app/requests/models/pop-design-request.model';\nimport {PopDesignService} from '../../../../services/pop-design.service';\nimport {ApprovalManagerClickEvent} from '../../../../../shared/components/app-artwork-item/app-artwork-item.component';\nimport { ApprovalManagerService } from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport { FILE_SIZE_RESTRICTIONS, RestrictionOptionsObject } from 'src/app/shared/models/upload-file-restrictions.model';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { RequestsService } from 'src/app/requests/services/requests.service';\n\n@Component({\n selector: 'app-pop-tm-review2',\n templateUrl: './pop-tm-review2.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: PopDesignApprovalManagerService\n }\n ]\n})\nexport class PopTmReview2Component implements OnInit, OnDestroy {\n @Input() requestId: string;\n @Input() isDisabled: boolean;\n @Input() isCreativeDirectorReviewStep: boolean;\n\n private request: PopDesignRequestModel;\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n\n public readonly mode: AmModeType = AmMode.approval;\n\n fileTypesToAccept: string[] = [];\n restrictionOptions: RestrictionOptionsObject = {\n fileType: FILE_TYPES.POP_DESIGN.ARTWORK,\n fileSize: FILE_SIZE_RESTRICTIONS.POP_DESIGN.ARTWORK\n };\n public expandedItems = new Set([]);\n\n public form: FormGroup;\n public userRoles = UserRoles;\n request$ = this.store.pipe(\n select(selectPopDesignRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private translateService: TranslateService,\n private store: Store,\n private eventService: EventService,\n private modalService: ModalService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n public approvalManagerService: PopDesignApprovalManagerService,\n public popDesignService: PopDesignService,\n private requestService: RequestsService\n ) { }\n\n ngOnInit(): void {\n this.requestService.getFileTypes()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data) {\n this.fileTypesToAccept = this.restrictionOptions?.fileType ?\n data[this.restrictionOptions?.fileType] :\n data[FILE_TYPES.DEFAULT];\n }\n });\n this.form = this.initForm();\n\n this.initEventHandlers();\n this.initControlsSubs();\n\n this.request$.pipe(distinctUntilKeyChanged('id'), takeUntil(this.ngUnsubscribe)).subscribe(r => {\n (r.items || []).forEach((i, itemIndex) => {\n this.expandedItems.add(itemIndex);\n });\n });\n\n this.request$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((request) => {\n this.request = request;\n\n this.updateForm(request);\n\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.approvalManagerService.setIsTrafficManager(false);\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n }\n\n openApprovalManager({requestItem, artworkFile}: ApprovalManagerClickEvent) {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n fileTypesToAccept: this.fileTypesToAccept,\n restrictionOptions: this.restrictionOptions.fileSize,\n }).afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({\n requestId: this.requestId as unknown as string,\n }));\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n public removeArtworkItemFunction = (itemId: number, attachmentId: number) => this.popDesignService.deleteArtworkItem(this.requestId, itemId, attachmentId);\n\n onItemExpandChange(itemIndex: number, expanded: boolean) {\n if(expanded) {\n this.expandedItems.add(itemIndex);\n } else {\n this.expandedItems.delete(itemIndex);\n }\n }\n\n private initForm(): FormGroup {\n return this.fb.group({\n items: this.initFormItems(),\n quantityOfFiles: this.fb.control(null),\n cdReviewRequired: this.fb.control(false),\n });\n }\n\n private initFormItems(items: PopDesignRequestItemModel[] = []): FormArray {\n return this.fb.array(\n items.map((item) => this.fb.group(\n { artworkFiles: this.fb.control(item?.artworkFiles || null) },\n { validators: [UtilsService.artworksApprovedValidationFn(this.approvalManagerService)] },\n ),\n ));\n }\n\n private updateForm(request: PopDesignRequestModel): void {\n this.form.patchValue({\n quantityOfFiles: request.details?.quantityOfFiles,\n cdReviewRequired: request.details?.cdReviewRequired,\n }, {emitEvent: false});\n\n this.form.setControl('items', this.initFormItems(request.items));\n }\n\n private initEventHandlers() {\n this.subscriptions.push(\n this.initFilesValidationHandler(),\n this.initSubmitHandler(),\n );\n }\n\n private initFilesValidationHandler(): Subscription {\n return this.eventService.on(PopDesignEvents.TmReview2SubmitValidated, (elementRef) => {\n if (this.isDisabled) {\n return;\n }\n this.validateFilesStatus(elementRef);\n });\n }\n\n private initSubmitHandler(): Subscription {\n return this.eventService.on(PopDesignEvents.TmReview2Submit, ({ comment }) => {\n if (this.isDisabled) {\n return;\n }\n this.completeStep(comment);\n });\n }\n\n private completeStep(comment: string) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n }\n\n private validateFilesStatus(elementRef: ElementRef): void {\n if (this.form.valid) {\n return this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', PopDesignEvents.TmReview2Submit, 'right');\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('module.requests.approve.approve-required'),\n this.translateService.instant('module.requests.approve.submit-stage-error'),\n );\n }\n\n private initControlsSubs(): void {\n merge(this.form.get('cdReviewRequired').valueChanges, this.form.get('quantityOfFiles').valueChanges)\n .pipe(\n debounceTime(300),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(() => {\n this.store.dispatch(popDesignActions.updateTmReview2Stage({\n cdReviewRequired: this.form.get('cdReviewRequired').value,\n quantityOfFiles: this.form.get('quantityOfFiles').value,\n }));\n });\n }\n}\n","\n \n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n\n
\n
\n
\n \n\n
\n \n
\n\n
\n \n
\n
\n
\n {{ 'module.requests.pop-design.details.just-describe-item' | translate }}\n {{ item.itemDescription }}\n
\n\n \n
\n \n\n
\n
\n
\n
\n
\n","import {Component, OnInit, ChangeDetectionStrategy, Input, OnDestroy, ChangeDetectorRef, ElementRef} from '@angular/core';\nimport {RequestStepComponent} from 'src/app/requests/models/request-step-component.model';\nimport {Subject, Subscription} from 'rxjs';\nimport {\n selectPopDesignRequestDetails\n} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {select, Store} from '@ngrx/store';\nimport { FormGroup, FormBuilder, FormArray } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PopDesignRequestModel, PopDesignRequestItemModel } from 'src/app/requests/models/pop-design-request.model';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { ApprovalManagerClickEvent } from 'src/app/shared/components/app-artwork-item/app-artwork-item.component';\nimport { AmModeType, AmMode } from 'src/app/shared/models/am-mode.model';\nimport { EventService, Events, PopDesignEvents } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { ModalService } from 'src/app/shared/services/modal-service.service';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport { UserRoles } from 'src/app/shared/constants/user-roles.constant';\nimport {FsReviewPopDesignApprovalManagerService} from '../../../../../shared/services/approval-manager/pop-design/fs-review-pop-design-approval-manager.service';\nimport {ApprovalManagerService} from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {PopDesignApprovalManagerService} from '../../../../../shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport { CanPanelExpandState, mixinHasPanelExpandState } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst PopFinancialReview2ComponentBase = mixinHasPanelExpandState(class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n});\n\n\n@Component({\n selector: 'app-pop-financial-review2',\n templateUrl: './pop-financial-review2.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: PopDesignApprovalManagerService\n }\n ]\n})\nexport class PopFinancialReview2Component extends PopFinancialReview2ComponentBase implements OnInit, RequestStepComponent, OnDestroy {\n @Input() requestId: number;\n @Input() isDisabled: boolean;\n private ngUnsubscribe = new Subject();\n // tslint:disable-next-line:no-unused-variable\n private request: PopDesignRequestModel;\n private subscriptions: Subscription[] = [];\n\n public readonly mode: AmModeType = AmMode.approval;\n\n public form: FormGroup;\n public userRoles = UserRoles;\n\n request$ = this.store.pipe(\n select(selectPopDesignRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private translateService: TranslateService,\n private store: Store,\n private eventService: EventService,\n private modalService: ModalService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n public approvalManagerService: FsReviewPopDesignApprovalManagerService\n ) { super(); }\n\n ngOnInit(): void {\n this.form = this.initForm();\n\n this.initEventHandlers();\n\n this.request$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((request) => {\n this.request = request;\n\n this.updateForm(request);\n this.initExpandedPanels(request.items);\n\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n }\n\n openApprovalManager({requestItem, artworkFile}: ApprovalManagerClickEvent) {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id,\n }).afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({\n requestId: this.requestId as unknown as string,\n }));\n\n setTimeout(() => this.eventService.emit({\n eventName: Events.UpdateActionHistory,\n }));\n });\n }\n\n private initForm(): FormGroup {\n return this.fb.group({\n items: this.initFormItems(),\n });\n }\n\n private initFormItems(items: PopDesignRequestItemModel[] = []): FormArray {\n return this.fb.array(\n items.map((item) => this.fb.group(\n { artworkFiles: this.fb.control(item?.artworkFiles || null) },\n { validators: [UtilsService.artworksApprovedValidationFn(this.approvalManagerService)] },\n ),\n ));\n }\n\n private updateForm(request: PopDesignRequestModel): void {\n this.form.setControl('items', this.initFormItems(this.filterRequestItems(request)));\n }\n\n private initEventHandlers() {\n this.subscriptions.push(\n this.initFilesValidationHandler(),\n this.initSubmitHandler(),\n );\n }\n\n private initFilesValidationHandler(): Subscription {\n return this.eventService.on(PopDesignEvents.FinancialServicesReview2Validation, (elementRef) => {\n this.validateFilesStatus(elementRef);\n });\n }\n\n private initSubmitHandler(): Subscription {\n return this.eventService.on(PopDesignEvents.FinancialServicesReview2Submit, ({ comment }) => {\n this.completeStep(comment);\n });\n }\n\n private completeStep(comment: string) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n }\n\n private validateFilesStatus(elementRef: ElementRef): void {\n if (this.form.valid) {\n return this.stepActionsService.addReason(\n elementRef,\n 'step-submit',\n 'step-submit',\n PopDesignEvents.FinancialServicesReview2Submit,\n 'right');\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('module.requests.approve.approve-required'),\n this.translateService.instant('module.requests.approve.submit-stage-error'),\n );\n }\n\n filterRequestItems(request: PopDesignRequestModel): PopDesignRequestItemModel[] {\n return request?.items?.filter(item => this.approvalManagerService.itemDisplayed(item)) || [];\n }\n }\n","\n
\n
\n
\n {{ 'module.requests.pop-design.details.artwork-items' | translate }}\n \n
\n\n
\n
\n \n
\n
\n
\n
\n \n
\n {{ 'module.requests.pop-design.details.item-type' | translate }}:\n {{ getItemType(itemTypes, item.itemTypeCode) }}\n
\n
\n \n
\n
\n
\n {{ 'module.requests.pop-design.details.just-describe-item' | translate }}\n {{ item.itemDescription }}\n
\n
\n \n \n \n \n \n {{ 'module.requests.card-design.details.item-have-rejected-artwork-files' | translate }}\n \n \n \n
\n
\n \n
\n
\n
\n","import {Component, OnInit, ChangeDetectionStrategy, Input, OnDestroy} from '@angular/core';\nimport {RequestStepComponent} from 'src/app/requests/models/request-step-component.model';\nimport {Subject} from 'rxjs';\nimport {\n selectPopDesignRequestDetails\n} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {select, Store} from '@ngrx/store';\nimport {PopDesignApprovalManagerService} from '../../../../../shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport {AmMode} from '../../../../../shared/models/am-mode.model';\nimport {UserRoles} from '../../../../../shared/constants/user-roles.constant';\nimport {ApprovalManagerClickEvent} from '../../../../../shared/components/app-artwork-item/app-artwork-item.component';\nimport {requestDetailsActions} from '../../../../reducers/request-details/request-details.actions';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {PopDesignRequestItemModel, PopDesignRequestModel} from '../../../../models/pop-design-request.model';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {CodeNameModel} from '../../../../../shared/models/code-name.model';\nimport {selectPopItemTypes} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { ApprovalManagerService } from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport { CanPanelExpandState, mixinHasPanelExpandState } from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst PopClientProofComponentBase = mixinHasPanelExpandState(class implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'all' as const;\n});\n@Component({\n selector: 'app-pop-client-proof',\n templateUrl: './pop-client-proof.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: PopDesignApprovalManagerService\n }\n ]\n})\nexport class PopClientProofComponent extends PopClientProofComponentBase implements OnInit, RequestStepComponent, OnDestroy {\n @Input() requestId: number;\n @Input() isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n mode = AmMode.final;\n userRoles = UserRoles;\n fileTypesToAccept: string[] = [];\n form: FormGroup;\n\n request$ = this.store.select(selectPopDesignRequestDetails).pipe(filter(v => !!v)).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n itemTypes$ = this.store.pipe(\n select(selectPopItemTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(private store: Store,\n private fb: FormBuilder,\n public approvalManagerService: PopDesignApprovalManagerService,\n private modalService: ModalService,\n private eventService: EventService,\n private utilsService: UtilsService) { super(); }\n\n ngOnInit(): void {\n this.request$.subscribe((request: PopDesignRequestModel) => {\n this.form = this.buildForm(request);\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getItemType(itemTypes: CodeNameModel[], code: string) {\n return this.utilsService.getItemName(itemTypes, code);\n }\n\n openApprovalManager({requestItem, artworkFile}: ApprovalManagerClickEvent) {\n this.modalService.openApprovalManager({\n approvalManagerService: this.approvalManagerService,\n mode: this.mode,\n selectedArtworkFileId: artworkFile.id,\n selectedRequestItemId: requestItem.id\n }).afterClosed().pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId as unknown as string}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n private buildForm(request: PopDesignRequestModel) {\n this.initExpandedPanels(request.items);\n return this.fb.group({\n items: this.fb.array(\n request.items.map((item: PopDesignRequestItemModel) => this.fb.group(\n { artworkFiles: this.fb.control(item?.artworkFiles || null) },\n { validators: [UtilsService.artworksNotRejectedValidationFn()]\n })\n )\n )\n });\n }\n\n}\n","
\n
\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n\n
\n
\n
\n \n
\n \n
\n
\n \n
\n\n
\n \n\n \n {{ 'module.requests.card-design.print-artifacts.approved-artworks' | translate }}\n \n \n {{ getItemArtifacts(item).length }}\n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\nimport {MemoizedSelector, select, Store} from '@ngrx/store';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {selectPopItemTypes} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {selectPopDesignRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {CardDesignService} from 'src/app/requests/services/card-design.service';\nimport {CodeNameModel} from 'src/app/shared/models/code-name.model';\nimport {PopDesignApprovalManagerService} from 'src/app/shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport {EventService, PopDesignEvents} from 'src/app/shared/services/event-service.service';\n\nimport {ApprovalManagerService} from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {TmReview3BaseComponent} from '../../../shared/tm-review-3-base/tm-review-3-base.component';\nimport {lazyLoadPopItemTypes} from '../../../../../reducers/ref-data/refdata.actions';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport {\n TM_REVIEW_3_REQUEST_SELECTOR,\n TM_REVIEW_3_SUBMIT_EVENT_NAME,\n TmReview3RequestTypes,\n TmReview3SubmitEventTypes\n} from '../../../shared/tm-review-3-base/tm-review-3-base.service';\n\n@Component({\n selector: 'app-pop-tm-review3',\n templateUrl: './pop-tm-review3.component.html',\n styleUrls: ['./pop-tm-review3.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: ApprovalManagerService,\n useExisting: PopDesignApprovalManagerService\n },\n {\n provide: TM_REVIEW_3_REQUEST_SELECTOR,\n useValue: selectPopDesignRequestDetails\n },\n {\n provide: TM_REVIEW_3_SUBMIT_EVENT_NAME,\n useValue: PopDesignEvents.TmReview3Submit\n }\n ]\n})\nexport class PopTmReview3Component extends TmReview3BaseComponent implements OnInit {\n itemTypes$ = this.store.pipe(\n select(selectPopItemTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(\n private utilsService: UtilsService,\n protected store: Store,\n cardDesignService: CardDesignService,\n eventService: EventService,\n approvalManagerService: ApprovalManagerService,\n protected loaderService: LoaderService,\n @Inject(TM_REVIEW_3_REQUEST_SELECTOR) requestSelector: MemoizedSelector,\n @Inject(TM_REVIEW_3_SUBMIT_EVENT_NAME) submitEventName: TmReview3SubmitEventTypes\n ) {\n super(store, cardDesignService, eventService, approvalManagerService, loaderService, requestSelector, submitEventName);\n }\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPopItemTypes());\n super.ngOnInit();\n }\n getItemType(itemTypes: CodeNameModel[], code: string) {\n return this.utilsService.getItemName(itemTypes, code);\n }\n}\n","\n
\n
\n \n \n \n
\n \n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n
\n
\n \n
\n
\n {{ 'module.requests.pop-design.details.item-type' | translate }}:\n \n {{ getItemType(itemTypes, item.itemTypeCode) }}\n \n
\n
\n
\n \n
\n {{ 'module.requests.pop-design.details.just-describe-item' | translate }}\n \n {{ item.itemDescription }}\n \n
\n \n {{ 'module.requests.card-design.print-artifacts.approved-artworks' | translate }}\n \n \n {{ getItemArtifacts(item).length }}\n \n \n \n
\n
\n
\n \n
\n \n \n \n
\n \n
\n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { Actions } from '@ngrx/effects';\nimport { MemoizedSelector, select, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { lazyLoadPopItemTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { selectPopItemTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { RoleProviderAggregator } from 'src/app/requests/classes/role-provider-aggregator';\nimport {\n PrepArtifactBaseComponent,\n} from 'src/app/requests/components/shared/prep-artifact-base/prep-artifact-base.component';\nimport {\n ASSIGN_PREP_DESIGNER_SERVICE,\n AssignPrepDesignerService,\n PREP_ARTIFACT_REQUEST_SELECTOR,\n PREP_ARTIFACT_SAVE_EVENT_NAME,\n PREP_ARTIFACT_SUBMIT_EVENT_NAME,\n PREP_ARTIFACT_VALIDATED_EVENT_NAME,\n PrepArtifactRequestName,\n PrepArtifactRequestTypes,\n PrepArtifactRoleProvider,\n} from 'src/app/requests/components/shared/prep-artifact-base/prep-artifact-role.provider';\nimport { selectPopDesignRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { PopDesignService } from 'src/app/requests/services/pop-design.service';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport {\n PopDesignApprovalManagerService,\n} from 'src/app/shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\nimport { EventService, PopDesignEvents, RequestEvents } from 'src/app/shared/services/event-service.service';\nimport { LoaderService } from 'src/app/shared/services/loader.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { UserPermissionsService } from 'src/app/shared/services/user-permissions.service';\nimport { UserService } from 'src/app/shared/services/user.service';\n\nimport { ApprovalManagerService } from '../../../../../shared/services/approval-manager/approval-manager.service';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { POP_DESIGN_REQUEST } from '../../../../constants/request-types.constant';\nimport { UsersService } from '../../../../services/users.service';\n\n@Component({\n selector: 'app-pop-prep-artifact',\n templateUrl: './pop-prep-artifact.component.html',\n styleUrls: ['./pop-prep-artifact.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ASSIGN_PREP_DESIGNER_SERVICE, useExisting: PopDesignService},\n {provide: PREP_ARTIFACT_REQUEST_SELECTOR, useValue: selectPopDesignRequestDetails},\n {provide: PREP_ARTIFACT_SAVE_EVENT_NAME, useValue: PopDesignEvents.PrepArtifactSave},\n {provide: PREP_ARTIFACT_VALIDATED_EVENT_NAME, useValue: PopDesignEvents.PrepArtifactValidated},\n {provide: PREP_ARTIFACT_SUBMIT_EVENT_NAME, useValue: PopDesignEvents.PrepArtifactSubmit},\n {provide: ApprovalManagerService, useExisting: PopDesignApprovalManagerService},\n PrepArtifactRoleProvider\n ]\n})\nexport class PopPrepArtifactComponent extends PrepArtifactBaseComponent implements OnInit {\n protected requestType: PrepArtifactRequestName = POP_DESIGN_REQUEST;\n protected stageName = 'PREP_ARTIFACTS' as const;\n\n itemTypes$ = this.store.pipe(\n select(selectPopItemTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(\n private utilsService: UtilsService,\n protected store: Store,\n protected actions: Actions,\n protected fb: FormBuilder,\n public approvalManagerService: ApprovalManagerService,\n protected eventService: EventService,\n protected cd: ChangeDetectorRef,\n protected loaderService: LoaderService,\n protected stepActionsService: StepActionsService,\n protected messageService: MessageService,\n protected translatePipe: TranslatePipe,\n protected userService: UserService,\n protected userPermissionsService: UserPermissionsService,\n protected roleProviderAggregator: RoleProviderAggregator,\n protected prepArtifactRoleProvider: PrepArtifactRoleProvider,\n protected usersService: UsersService,\n @Inject(ASSIGN_PREP_DESIGNER_SERVICE) protected assignPrepDesignerService: AssignPrepDesignerService,\n @Inject(PREP_ARTIFACT_REQUEST_SELECTOR) requestSelector: MemoizedSelector,\n @Inject(PREP_ARTIFACT_SAVE_EVENT_NAME) protected saveEventName: RequestEvents,\n @Inject(PREP_ARTIFACT_VALIDATED_EVENT_NAME) protected validatedEventName: RequestEvents,\n @Inject(PREP_ARTIFACT_SUBMIT_EVENT_NAME) protected submitEventName: RequestEvents\n ) {\n super(\n store,\n actions,\n fb,\n approvalManagerService,\n eventService,\n cd,\n loaderService,\n stepActionsService,\n messageService,\n translatePipe,\n userService,\n userPermissionsService,\n roleProviderAggregator,\n prepArtifactRoleProvider,\n usersService,\n assignPrepDesignerService,\n requestSelector,\n saveEventName,\n validatedEventName,\n submitEventName\n );\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPopItemTypes());\n super.ngOnInit();\n }\n\n getItemType(itemTypes: CodeNameModel[], code: string) {\n return this.utilsService.getItemName(itemTypes, code);\n }\n}\n","\n
\n
\n {{ 'module.requests.card-design.details.artwork-items' | translate }}\n \n
\n\n
\n
\n \n
\n
\n {{ 'module.requests.pop-design.details.item-type' | translate }}:\n \n {{ getItemType(itemTypes, item.itemTypeCode) }}\n \n
\n
\n
\n \n
\n {{ 'module.requests.pop-design.details.just-describe-item' | translate }}\n \n {{ item.itemDescription }}\n \n
\n \n {{ 'module.requests.card-design.print-artifacts.approved-artworks' | translate }}\n \n \n {{ getItemArtifacts(item).length }}\n \n \n \n
\n
\n
\n \n
\n \n \n \n \n
\n \n
\n \n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject} from '@angular/core';\nimport {selectPopDesignRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {PopDesignService} from 'src/app/requests/services/pop-design.service';\nimport {ApprovalManagerService} from 'src/app/shared/services/approval-manager/approval-manager.service';\nimport {PopDesignApprovalManagerService} from 'src/app/shared/services/approval-manager/pop-design/pop-design-approval-manager.service';\n\nimport {PopDesignEvents, EventService, RequestEvents} from '../../../../../shared/services/event-service.service';\nimport {PostArtifactBaseComponent} from '../../../shared/post-artifact-base/post-artifact-base.component';\nimport {selectPopItemTypes} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {\n POST_ARTIFACT_REQUEST_SELECTOR,\n POST_ARTIFACT_SUBMIT_EVENT_NAME,\n UPDATE_ART_PATH_NOTES_SERVICE\n} from '../../../shared/post-artifact-base/post-artifact-base.service';\nimport {MemoizedSelector, select, Store} from '@ngrx/store';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport {CodeNameModel} from 'src/app/shared/models/code-name.model';\nimport {FormBuilder} from '@angular/forms';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {UpdateArtPathNotesService, PostArtifactRequestTypes} from '../../../shared/post-artifact-base/post-artifact-base.service';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-pop-post-artifact',\n templateUrl: './pop-post-artifact.component.html',\n styleUrls: ['./pop-post-artifact.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {provide: ApprovalManagerService, useExisting: PopDesignApprovalManagerService},\n {provide: UPDATE_ART_PATH_NOTES_SERVICE, useExisting: PopDesignService},\n {provide: POST_ARTIFACT_REQUEST_SELECTOR, useValue: selectPopDesignRequestDetails},\n {provide: POST_ARTIFACT_SUBMIT_EVENT_NAME, useValue: PopDesignEvents.PostArtifactSubmit}\n ]\n})\nexport class PopPostArtifactComponent extends PostArtifactBaseComponent {\n itemTypes$ = this.store.pipe(\n select(selectPopItemTypes),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n constructor(\n private utilsService: UtilsService,\n protected store: Store,\n protected fb: FormBuilder,\n public approvalManagerService: ApprovalManagerService,\n protected eventService: EventService,\n protected cd: ChangeDetectorRef,\n protected loaderService: LoaderService,\n protected stepActionsService: StepActionsService,\n @Inject(UPDATE_ART_PATH_NOTES_SERVICE) protected updateArtPathNotesService: UpdateArtPathNotesService,\n @Inject(POST_ARTIFACT_REQUEST_SELECTOR) requestSelector: MemoizedSelector,\n @Inject(POST_ARTIFACT_SUBMIT_EVENT_NAME) protected submitEventName: RequestEvents\n ) {\n super(\n store,\n fb,\n approvalManagerService,\n eventService,\n cd,\n loaderService,\n stepActionsService,\n updateArtPathNotesService,\n requestSelector,\n submitEventName\n );\n }\n\n getItemType(itemTypes: CodeNameModel[], code: string) {\n return this.utilsService.getItemName(itemTypes, code);\n }\n}\n","import {AbstractControl, FormArray, ValidatorFn} from '@angular/forms';\n\nexport const UniqueNameValidator: ValidatorFn = (ac: AbstractControl) => {\n if (ac?.parent?.parent) {\n const values = ac?.parent?.parent as FormArray;\n\n const hasSame = Array.prototype.reverse.call([...values.controls]).some(control => control.get('name') !== ac && control.get('name').value?.trim() === ac.value?.trim());\n\n if (hasSame) {\n return {\n unique: true\n };\n }\n }\n return null;\n};\n","
\n {{ 'module.requests.pop-prod.details.finance' | translate }}\n
\n
\n \n \n \n {{ fundingTypeHint }}\n \n \n
\n
\n \n 0 && fundingCodePlaceholder\"\n >\n {{ fundingCodePlaceholder }}\n \n \n
\n
\n
\n","import {ChangeDetectionStrategy, Component, OnInit, ChangeDetectorRef, Input, DoCheck} from '@angular/core';\nimport {ControlContainer, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {Store} from '@ngrx/store';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {lazyLoadPopProdFundingTypes} from 'src/app/reducers/ref-data/refdata.actions';\nimport {selectPopProdFundingTypes} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {WithDestroy} from 'src/app/shared/components/with-destroy/with-destroy.mixin';\nimport {Subscription, combineLatest, from, merge} from 'rxjs';\nimport {WithCheckControlUpdates} from '../../../../../../shared/constants/form-field.constant';\n\nconst FUNDING_CODE_REQUIRED = {\n QUOTE_ONLY: false,\n DEFAULT: true\n};\n\n@Component({\n selector: 'app-pop-finance-details',\n templateUrl: './pop-finance-details.component.html',\n styleUrls: ['./pop-finance-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopFinanceDetailsComponent\n extends WithDestroy(WithCheckControlUpdates(self => self.controlContainer?.control))\n implements OnInit, DoCheck\n{\n private fundingCodeMinLengthValidator = Validators.minLength(4);\n\n @Input() testId = 'pop_finance_details';\n\n fundingTypes$ = this.store.select(selectPopProdFundingTypes);\n fundingTypeMasks$ = this.store\n .select(selectPopProdFundingTypes)\n .pipe(map(fts => (fts || []).reduce((acc, ft) => ({...acc, ...(ft.mask ? {[ft.code]: ft.mask} : {})}), {})));\n fundingTypeHints$ = this.store\n .select(selectPopProdFundingTypes)\n .pipe(map(fts => (fts || []).reduce((acc, ft) => ({...acc, ...(ft.tooltip ? {[ft.code]: ft.tooltip} : {})}), {})));\n\n constructor(private store: Store, private cd: ChangeDetectorRef, public controlContainer: ControlContainer) {\n super(cd);\n }\n private _oldControl = null;\n private formGroupSubscriptions: Subscription[] = [];\n\n get fundingCodeField(): FormControl {\n return this.controlContainer.control.get('fundingCode') as FormControl;\n }\n fundingTypeHint = null;\n fundingCodePlaceholder = null;\n @Input() fundingCodeRequired = false;\n get fundingTypeField(): FormControl {\n return this.controlContainer.control.get('fundingTypeCode') as FormControl;\n }\n\n private setUpFormGroups(formGroup: FormGroup) {\n this.formGroupSubscriptions.forEach(fgs => fgs.unsubscribe());\n\n this.formGroupSubscriptions.push(\n combineLatest([\n this.fundingTypeMasks$,\n this.fundingTypeHints$,\n merge(from([formGroup.get('fundingTypeCode').value]), formGroup.get('fundingTypeCode').valueChanges)\n ])\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(([masks, hints, v]) => {\n this.fundingTypeHint = `${v}` in hints ? hints[v] : null;\n this.fundingCodePlaceholder = `${v}` in masks ? masks[v] : null;\n this.fundingCodeRequired = `${v}` in FUNDING_CODE_REQUIRED ? FUNDING_CODE_REQUIRED[v] : FUNDING_CODE_REQUIRED.DEFAULT;\n this.fundingCodeField.removeValidators([Validators.required, this.fundingCodeMinLengthValidator]);\n if (this.fundingCodeRequired) {\n this.fundingCodeField.addValidators([Validators.required, this.fundingCodeMinLengthValidator]);\n }\n this.fundingCodeField.updateValueAndValidity({\n emitEvent: false\n });\n this.cd.markForCheck();\n })\n );\n this.formGroupSubscriptions.push(\n formGroup\n .get('fundingTypeCode')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n this.fundingCodeField.markAsTouched();\n })\n );\n }\n\n ngDoCheck(): void {\n super.ngDoCheck();\n if (this._oldControl !== this.controlContainer.control) {\n this._oldControl = this.controlContainer.control;\n this.setUpFormGroups(this.controlContainer.control as FormGroup);\n }\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPopProdFundingTypes());\n }\n}\n","
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n\n
\n

{{'module.requests.pop-prod.details.dimensions' | translate}}:

\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n
0\">\n
\n
\n 0 ? index + 1 : '')\"\n maxLength=\"80\">\n
\n
\n \n
\n \n\n
\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n \n
\n\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n\n
\n \n \n
\n\n
\n \n \n \n \n
\n\n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n\n\n \n \n
\n \n {{'module.requests.pop-prod.details.ship-to' | translate}}:\n {{ address }}\n \n
\n\n
\n {{'module.requests.pop-prod.details.shipment-qty' | translate}}:\n {{ qty }}\n
\n
\n \n
\n\n\n
\n
\n 0 ? ' ' + (index + 1): '')\">\n \n
\n
\n \n
\n \n
\n\n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';\nimport {AbstractControl, FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport { BehaviorSubject, combineLatest, merge, Subject, ReplaySubject, of } from 'rxjs';\nimport { filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport {select, Store} from '@ngrx/store';\nimport {\n selectColorTypes,\n selectDimensionTypes,\n selectPopProdCuttingTypes,\n selectPopProdItemTypes,\n selectPopProdMaterialTypes,\n selectPopProdTapeTypes,\n selectPopProdUsageDurationTypes,\n selectWarehouses\n} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport {Warehouse} from '../../../../../models/warehouse.model';\nimport {LabelHelperService} from '../../../../../services/label-helper.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {UniqueNameValidator} from '../../pop-prod-details/version-name.validator';\nimport {PopItemTypeModel} from '../../../../../models/pop-design-request.model';\n\nconst MAX_VERSIONS_QTY = 9999999999;\nconst MIN_VERSIONS_QTY = 1;\nconst AUTOPOPULATE_BY_ITEM_TYPE = {\n materialTypeCode: {\n INSTRUCTION_SHEET: '60_OFFSET_PAPER'\n }\n};\n\n@Component({\n selector: 'app-pop-prod-item-common-form',\n templateUrl: './pop-prod-item-common-form.component.html',\n styleUrls: ['./pop-prod-item-common-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdItemCommonFormComponent implements OnInit, OnChanges, OnDestroy {\n private _requestItem!: FormGroup;\n @Input() set requestItem(requestItem: FormGroup) {\n this._requestItem = requestItem;\n this.requestItemExtraLogic.next(requestItem);\n }\n get requestItem() {\n return this._requestItem;\n }\n @Input() requestItemIndex: number;\n @Input() isDisabled: boolean;\n @Input() isInfoMode = false;\n @Input() formValidationTrigger: Subject;\n @Input() formDisabledTrigger: Subject = new Subject();\n @Input() testId = '';\n\n private ngUnsubscribe = new Subject();\n private availableShipmentQtyHintSubject: BehaviorSubject = new BehaviorSubject(0);\n private versionsQtySubject: BehaviorSubject = new BehaviorSubject(0);\n private requestItemExtraLogic = new ReplaySubject(1);\n availableVersionsQty: string | number = 0; // sum of all versions qty\n availableQty: string | number = 0; // available for shipment qty - should be 0\n shipmentsOptions: any[] = [];\n usageDurationList: CodeNameModel[] = [];\n itemTypeList: PopItemTypeModel[] = [];\n dimensionTypes: CodeNameModel[] = [];\n colorTypes: CodeNameModel[] = [];\n cuttingTypes: CodeNameModel[] = [];\n materialTypes: CodeNameModel[] = [];\n tapeTypes: CodeNameModel[] = [];\n versionsControls: FormArray;\n displayNotesInputs = {\n material: false,\n tape: false,\n cutting: false\n };\n\n refdata$ = combineLatest([\n this.store.pipe(\n select(selectPopProdUsageDurationTypes),\n filter(v => v?.length > 0)\n ),\n this.store.pipe(\n select(selectPopProdItemTypes),\n filter(v => v.length > 0)\n ),\n this.store.pipe(\n select(selectDimensionTypes),\n filter(v => v.length > 0)\n ),\n this.store.pipe(\n select(selectColorTypes),\n filter(v => v.length > 0)\n ),\n this.store.pipe(\n select(selectPopProdCuttingTypes),\n filter(v => v.length > 0)\n ),\n this.store.pipe(\n select(selectPopProdMaterialTypes),\n filter(v => v.length > 0)\n ),\n this.store.pipe(\n select(selectPopProdTapeTypes),\n filter(v => v.length > 0)\n )\n ]).pipe(takeUntil(this.ngUnsubscribe));\n warehouses$ = this.store.pipe(\n select(selectWarehouses),\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(private cd: ChangeDetectorRef, private fb: FormBuilder, private store: Store, private translate: TranslateService) {}\n\n ngOnInit(): void {\n this.checkSideNumberTypeCode();\n this.versionsControls = this.requestItem.get('versionQuantities') as FormArray;\n if (this.requestItem.get('directToStoreShipments').value) {\n this.clearShipmentQtyValidators();\n } else {\n this.setShipmentQtyValidator();\n }\n this.setControlListeners();\n this.setVersionsQtyCalculation();\n this.requestItem.get('versionQuantities').updateValueAndValidity();\n\n this.refdata$.subscribe(([usageDurations, itemTypes, dimensionTypes, colorTypes, cuttingTypes, materialTypes, tapeTypes]) => {\n this.usageDurationList = usageDurations;\n this.itemTypeList = itemTypes as PopItemTypeModel[];\n this.dimensionTypes = dimensionTypes;\n this.colorTypes = colorTypes;\n this.cuttingTypes = cuttingTypes;\n this.materialTypes = materialTypes;\n this.tapeTypes = tapeTypes;\n this.cd.markForCheck();\n });\n this.warehouses$.subscribe(warehouses => {\n this.shipmentsOptions = warehouses.map(item => ({value: item, label: item.name}));\n this.cd.markForCheck();\n });\n\n this.availableShipmentQtyHintSubject\n .asObservable()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(currentAvailableQuantity => {\n if (currentAvailableQuantity === 0) {\n this.updateShipmentsValidity();\n }\n this.cd.markForCheck();\n });\n\n this.versionsQtySubject\n .asObservable()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n const maxVersionsQty = new BigJs(MAX_VERSIONS_QTY);\n const currentVersionsQty = new BigJs(this.availableVersionsQty);\n if (currentVersionsQty.gt(maxVersionsQty)) {\n this.versionsControls.setErrors({maxValueLimit: true});\n } else {\n this.versionsControls.setErrors(null);\n }\n this.setAvailableQty(this.getAvailableQty(this.getShipmentsTotalQty()));\n\n this.updateShipmentsValidity();\n });\n\n (this.requestItem.get('shipments') as FormArray).valueChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(value => {\n const shipTotalQty = value.reduce((acc, curr) => acc + Number(curr.quantity), 0);\n this.setAvailableQty(this.getAvailableQty(shipTotalQty));\n this.cd.markForCheck();\n });\n\n this.setAvailableQty(this.getAvailableQty(this.getShipmentsTotalQty()));\n this.initCheckOtherCodes();\n\n this.formValidationTrigger.subscribe(() => {\n this.requestItem.markAllAsTouched();\n this.cd.markForCheck();\n });\n\n this.requestItem.updateValueAndValidity();\n merge(this.requestItemExtraLogic, this.formDisabledTrigger)\n .pipe(\n map(() => this._requestItem),\n switchMap(fg =>\n merge(of(fg.get('itemTypeCode').value), fg.get('itemTypeCode').valueChanges).pipe(\n tap(itemTypeCode => {\n Object.entries(AUTOPOPULATE_BY_ITEM_TYPE).forEach(([fieldName, valueMap]) => {\n if(itemTypeCode in valueMap) {\n fg.get(fieldName).setValue(valueMap[itemTypeCode]);\n fg.get(fieldName).disable();\n } else if(!this.isDisabled) {\n fg.get(fieldName).enable();\n }\n this.cd.markForCheck();\n });\n })\n )\n ),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe();\n }\n\n ngOnChanges(change: SimpleChanges) {\n if (change.requestItem) {\n this.setFormItemsState();\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private checkSideNumberTypeCode(): void {\n const sideNumberTypeCode = this.requestItem.get('sideNumberTypeCode');\n if (!sideNumberTypeCode.value) {\n sideNumberTypeCode.setValue('ONE');\n }\n }\n\n private setControlListeners(): void {\n const kitLabellingComments = this.requestItem?.get('kitLabelingComments');\n const shippingInstructions = this.requestItem?.get('shippingInstructions');\n const materialNotes = this.requestItem?.get('materialNotes');\n const tapeNotes = this.requestItem?.get('tapeNotes');\n const cuttingNotes = this.requestItem?.get('cuttingNotes');\n\n this.requestItem\n ?.get('packingTypeCode')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(packingTypeCode => {\n if (packingTypeCode === 'KIT') {\n kitLabellingComments.setValidators(Validators.required);\n } else {\n kitLabellingComments.clearValidators();\n }\n kitLabellingComments.updateValueAndValidity();\n this.cd.markForCheck();\n });\n this.requestItem\n ?.get('kitLabeling')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(kitLabeling => {\n if (kitLabeling) {\n kitLabellingComments.setValidators(Validators.required);\n } else {\n kitLabellingComments.clearValidators();\n }\n kitLabellingComments.updateValueAndValidity();\n this.cd.markForCheck();\n });\n this.requestItem\n ?.get('directToStoreShipments')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(directShipments => {\n if (directShipments) {\n shippingInstructions.setValidators(Validators.required);\n this.clearShipmentQtyValidators();\n } else {\n shippingInstructions.clearValidators();\n this.setShipmentQtyValidator();\n }\n shippingInstructions.updateValueAndValidity();\n this.cd.markForCheck();\n });\n this.requestItem\n ?.get('materialTypeCode')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(code => {\n this.checkOtherCode(code, materialNotes, 'material');\n });\n this.requestItem\n ?.get('tapeTypeCode')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(code => {\n this.checkOtherCode(code, tapeNotes, 'tape');\n });\n this.requestItem\n ?.get('cuttingTypeCode')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(code => {\n this.checkOtherCode(code, cuttingNotes, 'cutting');\n });\n }\n\n private initCheckOtherCodes(): void {\n const materialNotes = this.requestItem?.get('materialNotes');\n const tapeNotes = this.requestItem?.get('tapeNotes');\n const cuttingNotes = this.requestItem?.get('cuttingNotes');\n\n this.checkOtherCode(this.requestItem?.get('materialTypeCode').value, materialNotes, 'material');\n this.checkOtherCode(this.requestItem?.get('tapeTypeCode').value, tapeNotes, 'tape');\n this.checkOtherCode(this.requestItem?.get('cuttingTypeCode').value, cuttingNotes, 'cutting');\n }\n\n private checkOtherCode(code: string, control: AbstractControl, type: string): void {\n if (code === 'OTHER') {\n control.setValidators(Validators.required);\n this.displayNotesInputs[type] = true;\n } else {\n control.clearValidators();\n this.displayNotesInputs[type] = false;\n }\n control.updateValueAndValidity();\n this.cd.markForCheck();\n }\n\n private setVersionsQtyCalculation(): void {\n const productionQuantityStream = this.requestItem.get('productionQuantity').valueChanges.pipe(\n map(() => ({\n versions: this.versionsControls.value,\n productionQuantity: this.requestItem.get('productionQuantity').value\n }))\n );\n const versionsControlsStream = this.versionsControls.valueChanges.pipe(\n map(() => ({\n versions: this.versionsControls.value,\n productionQuantity: this.requestItem.get('productionQuantity').value\n }))\n );\n merge(productionQuantityStream, versionsControlsStream)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(({versions, productionQuantity}) => {\n if (versions.length && productionQuantity == null) {\n this.availableVersionsQty = versions.reduce((sum, item) => sum.plus(Number(item?.quantity) || 0), new BigJs(0)).toFixed();\n\n this.versionsQtySubject.next(Number(this.availableVersionsQty));\n } else if (productionQuantity != null) {\n this.availableVersionsQty = productionQuantity;\n this.versionsQtySubject.next(productionQuantity);\n } else {\n this.availableVersionsQty = 0;\n }\n this.cd.markForCheck();\n });\n }\n\n private setShipmentQtyValidator(): void {\n if (this.isInfoMode) {\n return;\n }\n\n (this.requestItem.get('shipments') as FormArray).controls.forEach((shipToGroup: FormGroup) => {\n shipToGroup\n .get('quantity')\n .setValidators([\n UtilsService.availableArrayQtyValidationFn(\n this.requestItem,\n this.requestItem.get('shipments') as FormArray\n ),\n Validators.required\n ]);\n shipToGroup.get('warehouse').setValidators(Validators.required);\n shipToGroup.get('warehouse').updateValueAndValidity({emitEvent: false});\n });\n }\n\n private clearShipmentQtyValidators(): void {\n (this.requestItem.get('shipments') as FormArray).controls.forEach((shipToGroup: FormGroup) => {\n shipToGroup.get('quantity').clearValidators();\n shipToGroup.get('quantity').updateValueAndValidity({emitEvent: false});\n shipToGroup.get('warehouse').clearValidators();\n shipToGroup.get('warehouse').updateValueAndValidity({emitEvent: false});\n });\n this.requestItem.get('shipments').updateValueAndValidity();\n this.cd.markForCheck();\n }\n\n private updateShipmentsValidity(): void {\n (this.requestItem.get('shipments') as FormArray).controls.forEach((shipToGroup: FormGroup) => {\n shipToGroup.get('quantity').updateValueAndValidity({onlySelf: true, emitEvent: true});\n shipToGroup.updateValueAndValidity({onlySelf: true, emitEvent: true});\n });\n this.requestItem.get('shipments').updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.cd.detectChanges();\n }\n\n private getAvailableQty(shipTotalQty: number): number | string {\n const isQuantitiesEmpty = (this.requestItem.get('shipments') as FormArray).controls.every(\n (control: FormGroup) =>\n (control.controls.quantity.value === null || control.controls.quantity.value === '') && this.availableVersionsQty === 0\n );\n return isQuantitiesEmpty ? '' : Number(this.availableVersionsQty) - shipTotalQty;\n }\n\n private setAvailableQty(availableQty1: number | string) {\n this.availableQty = !availableQty1 ? 0 : availableQty1;\n const availableQtyNumber = !this.availableQty ? 0 : Number(this.availableQty);\n this.availableShipmentQtyHintSubject.next(availableQtyNumber);\n }\n\n private getShipmentsTotalQty(): number {\n return (this.requestItem.get('shipments') as FormArray).controls.reduce(\n (acc, control: FormGroup) => acc + Number(control.controls.quantity.value),\n 0\n );\n }\n\n private setFormItemsState(): void {\n const formItemsToDisable = [\n this.requestItem?.get('directToStoreShipments'),\n this.requestItem?.get('shippingInstructions'),\n this.requestItem?.get('versionQuantities'),\n this.requestItem?.get('versionName'),\n this.requestItem?.get('versionNumber'),\n this.requestItem?.get('productionQuantity')\n ].filter(control => !!control);\n\n formItemsToDisable.forEach(control => {\n if (this.isInfoMode || this.isDisabled) {\n control.disable();\n } else {\n control.enable();\n }\n });\n }\n\n public addVersion(): void {\n const versionItem = this.fb.group({\n id: [null],\n name: [null, [Validators.required, UniqueNameValidator]],\n quantity: [null, [Validators.required, Validators.min(MIN_VERSIONS_QTY)]]\n });\n versionItem.setParent(this.requestItem.get('versionQuantities') as FormGroup);\n (this.requestItem.get('versionQuantities') as FormArray).push(versionItem);\n }\n\n public removeVersion(index: number): void {\n (this.requestItem.get('versionQuantities') as FormArray).removeAt(index);\n }\n\n public addShipment(): void {\n const shipmentItem = this.fb.group({\n id: [null],\n quantity: [null, this.isInfoMode ? null : Validators.required],\n warehouse: [null, this.isInfoMode ? null : Validators.required]\n });\n (this.requestItem.get('shipments') as FormArray).push(shipmentItem);\n if (this.requestItem.get('directToStoreShipments').value) {\n this.clearShipmentQtyValidators();\n } else {\n this.setShipmentQtyValidator();\n }\n }\n\n public removeShipment(index: number): void {\n (this.requestItem.get('shipments') as FormArray).removeAt(index);\n }\n\n public getQuantityHint(isLast: boolean): string {\n return isLast ? `${this.translate.instant('module.requests.finance.ship-quantity-hint')}: ${this.availableQty}` : '';\n }\n\n public getWarehouseLabel(warehouse: Warehouse) {\n return LabelHelperService.getWarehouseLabel(warehouse);\n }\n}\n","
\n \n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \n
\n\n\n
\n
\n
\n \n
\n \n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n \n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input, OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport {FormGroup, Validators} from '@angular/forms';\nimport {DateService} from '../../../../../../shared/services/date-service.service';\nimport {merge, of, Subject} from 'rxjs';\nimport { takeUntil, delay } from 'rxjs/operators';\nimport {WpnResponse} from '../../../../../models/wpn-response';\nimport {PopProductionService} from '../../../../../services/pop-production.service';\n\n@Component({\n selector: 'app-pop-prod-item',\n templateUrl: './pop-prod-item.component.html',\n styleUrls: ['./pop-prod-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdItemComponent implements OnInit, OnDestroy {\n\n readonly RUSH_JOB_WEEKS = 6;\n private _item: FormGroup;\n @Input() public set item(item: FormGroup) {\n this._item = item;\n this.setControlsSubscriptions();\n }\n get item(): FormGroup {\n return this._item;\n }\n @Input() public requestItemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public formValidationTrigger: Subject;\n @Input() public isExpanded: boolean;\n @Output() public removeItem: EventEmitter = new EventEmitter();\n @Output() public copyItem: EventEmitter = new EventEmitter();\n\n private ngUnsubscribe = new Subject();\n showRushJob: boolean;\n isWpnLoading = false;\n\n constructor(public dateService: DateService,\n private popProdService: PopProductionService,\n private cd: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => {\n this.item.markAllAsTouched();\n this.cd.markForCheck();\n });\n\n this.addWPNListener();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setControlsSubscriptions(): void {\n const kitShippingTypeCode = this.item?.get('kitShippingTypeCode');\n const kitLabeling = this.item?.get('kitLabeling');\n merge(of(this.item?.get('packingTypeCode')?.value), this.item?.get('packingTypeCode')?.valueChanges)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n if (value === 'KIT') {\n kitShippingTypeCode.setValidators(Validators.required);\n kitLabeling.setValidators(Validators.required);\n } else {\n kitShippingTypeCode.clearValidators();\n kitLabeling.clearValidators();\n }\n kitLabeling?.updateValueAndValidity();\n kitShippingTypeCode?.updateValueAndValidity();\n this.cd.markForCheck();\n });\n }\n\n private addWPNListener(): void {\n if (this.item?.controls?.wpn?.value) {\n this.getWPNData();\n }\n this.item?.controls?.wpn?.valueChanges.subscribe(newVal => {\n if (newVal && this.item?.controls?.wpn?.valid) {\n this.getWPNData();\n } else {\n this.clearWpnInfo();\n }\n });\n }\n\n private getWPNData(): void {\n const wpn = this.item.get('wpn').value;\n const wpnDescription = this.item.get('wpnDescription');\n this.isWpnLoading = true;\n this.popProdService.getWPNdata(wpn)\n .pipe(delay(0)) // should be `next tick` response instead of microtask\n .subscribe((data: WpnResponse[]) => {\n if (!data.length) {\n this.item.get('wpn').setErrors({wpnError: true});\n this.cd.markForCheck();\n this.clearWpnInfo();\n } else {\n wpnDescription.setValue(data[0].packageDescription);\n this.cd.markForCheck();\n }\n }, () => {\n this.item.get('wpn').setErrors({wpnError: true});\n this.cd.markForCheck();\n this.clearWpnInfo();\n }, () => {\n this.isWpnLoading = false;\n });\n }\n\n private clearWpnInfo(): void {\n this.item.get('wpnDescription').reset();\n }\n\n public onRemove(): void {\n this.removeItem.emit(this.requestItemIndex);\n }\n\n public onCopy(): void {\n this.copyItem.emit(this.requestItemIndex);\n }\n\n public checkForRushJob(date: Date): void {\n this.showRushJob = this.dateService.earlierThanNWeeksFromNow(date, this.RUSH_JOB_WEEKS);\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { Action, ActionsSubject, select, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport moment from 'moment';\nimport { combineLatest, merge, Subject, Subscription } from 'rxjs';\nimport { filter, map, shareReplay, take, takeUntil } from 'rxjs/operators';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\n\nimport {\n lazyLoadColorTypes,\n lazyLoadDimensionTypes,\n lazyLoadPopChannelTypes,\n lazyLoadPopProdCuttingTypes,\n lazyLoadPopProdEventTypes,\n lazyLoadPopProdFundingTypes,\n lazyLoadPopProdItemTypes,\n lazyLoadPopProdMaterialTypes,\n lazyLoadPopProdTapeTypes,\n lazyLoadPopProdUsageDurationTypes,\n lazyLoadWarehouses,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectPopChannelTypes,\n selectPopProdEventTypes,\n selectPopProdFundingTypes,\n selectPopProdItemTypes,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { UserModel } from '../../../../../shared/models/user.model';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { INTEGER_PATTERN } from '../../../../constants/request-details.constants';\nimport { STATUSES } from '../../../../constants/request-statuses.constant';\nimport { POP_PRODUCTION_REQUEST } from '../../../../constants/request-types.constant';\nimport {\n PopProductionRequestDetails,\n PopProductionRequestItemModel,\n PopProductionRequestModel,\n} from '../../../../models/pop-production-request.model';\nimport { Merchant } from '../../../../models/request-item.model';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport { selectPopProductionRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { PopProductionService } from '../../../../services/pop-production.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { UniqueNameValidator } from './version-name.validator';\n\nconst POP_DESIGN_ID_SEARCH_LIMITS = { min: 4, max: 6 };\nconst MIN_VERSIONS_QTY = 1;\nconst MIN_VERSION_NUMBER = 1;\n\n@Component({\n selector: 'app-pop-prod-details',\n templateUrl: './pop-prod-details.component.html',\n styleUrls: ['./pop-prod-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class PopProdDetailsComponent extends AbstractRequestStepComponent implements OnInit, OnChanges, OnDestroy, RequestDetailsStageController {\n @Output() public deleteDraft = new EventEmitter();\n\n public requestDetails: Partial = {};\n public detailsForm: FormGroup;\n public detailsFormSubscriptions: Subscription[] = [];\n public requestItemsControls: FormArray;\n public merchantsControls: FormArray;\n public events: CodeNameModel[] = [];\n public channels: CodeNameModel[] = [];\n public fundingTypes: CodeNameModel[] = [];\n public itemTypes: CodeNameModel[] = [];\n public ppmList: Array<{value: UserModel}> = [];\n public readonly DATE_SERIALIZE_PATTERN = 'YYYY-MM-DD';\n public additionalAttachments: any[] = [];\n public partnerArtAttachments: any[] = [];\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public popDesignIdSearch: any[] = [];\n public isPopDesignIdLoading = new Subject();\n public formValidationTrigger = new Subject();\n public partnerAttachmentControl: FormControl;\n public newItemIndex: number;\n\n form: FormGroup;\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private refData$ = combineLatest([\n this.store.select(selectPopProductionRequestDetails)\n .pipe(filter(request => request !== null && request?.type === POP_PRODUCTION_REQUEST)),\n this.store.select(selectPopProdEventTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPopChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPopProdFundingTypes).pipe(filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdItemTypes), filter((v) => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n private isShowSavedMessage = false;\n\n constructor(private activatedRoute: ActivatedRoute,\n private store: Store,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private popProductionService: PopProductionService,\n public utilsService: UtilsService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private actions: ActionsSubject,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadPopProdEventTypes());\n this.store.dispatch(lazyLoadPopChannelTypes());\n this.store.dispatch(lazyLoadPopProdFundingTypes());\n this.store.dispatch(lazyLoadPopProdUsageDurationTypes());\n this.store.dispatch(lazyLoadPopProdItemTypes());\n this.store.dispatch(lazyLoadPopProdCuttingTypes());\n this.store.dispatch(lazyLoadPopProdMaterialTypes());\n this.store.dispatch(lazyLoadPopProdTapeTypes());\n this.store.dispatch(lazyLoadColorTypes());\n this.store.dispatch(lazyLoadDimensionTypes());\n this.store.dispatch(lazyLoadWarehouses());\n\n this.getPopPPMList();\n\n this.activatedRoute.params.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.setInitialDetails();\n this.buildForm();\n this.setEventSubscriptions();\n });\n\n this.refData$.subscribe(([\n requestDetails, events, channels, fundingTypes, itemTypes]) => {\n this.events = events;\n this.channels = channels;\n this.fundingTypes = fundingTypes;\n this.itemTypes = itemTypes;\n\n this.setInitialDetails(requestDetails);\n this.buildForm();\n this.setPPM();\n this.setPrinterQuoteListener();\n this.setArtTypeCodeListener();\n this.detailsForm.get('printQuoteOnly').updateValueAndValidity();\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', 'The request was successfully saved', '');\n this.isShowSavedMessage = false;\n }\n\n if (this.isArtTypeDisabled) {\n this.form.get('details.artTypeCode').disable();\n }\n });\n\n this.partnerAttachmentControl = new FormControl(null);\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe));\n }\n\n public async validate(): Promise {\n if(this.form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n this.form.markAllAsTouched();\n this.cd.markForCheck();\n this.formValidationTrigger.next(null);\n return Promise.resolve(this.form.valid);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.isPopDesignIdLoading.next();\n this.isPopDesignIdLoading.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private setInitialDetails(requestDetails?: PopProductionRequestModel): void {\n this.requestDetails = requestDetails ? cloneDeep(requestDetails) : {};\n this.additionalAttachments = this.requestDetails?.details?.additionalAttachments || [];\n this.partnerArtAttachments = this.requestDetails?.details?.partnerArtAttachments || [];\n\n if (!requestDetails?.details) {\n this.requestDetails.details = {\n id: null,\n printProductionManager: {firstName: null, lastName: null, userName: null},\n channelTypeCode: null,\n eventTypeCode: null,\n promoTypeCode: null,\n promoDateRange: null,\n fundingTypeCode: null,\n fundingCode: null,\n designRequestFoundInInQueue: null,\n inQueueJobReference: null,\n artTypeCode: null,\n printQuoteOnly: null,\n designRequestReference: null,\n partnerArtAttachments: [],\n additionalAttachments: [],\n merchants: []\n };\n }\n if (!requestDetails?.details?.promoDateRange?.startDate && !requestDetails?.details?.promoDateRange?.endDate) {\n this.requestDetails.details.promoDateRange = null;\n } else {\n this.requestDetails.details.promoDateRange.startDate =\n moment(this.requestDetails.details.promoDateRange.startDate).format(this.DATE_SERIALIZE_PATTERN);\n this.requestDetails.details.promoDateRange.endDate =\n moment(this.requestDetails.details.promoDateRange.endDate).format(this.DATE_SERIALIZE_PATTERN);\n }\n if (!requestDetails?.items?.length) {\n this.requestDetails.items = [{\n id: null, deliveryDate: null, wpn: null, wpnDescription: null, packingTypeCode: null,\n kitShippingTypeCode: null, kitLabeling: null, kitLabelingComments: null, usageDuration: null,\n usageDurationTypeCode: null, itemTypeCode: null, dimensionTypeCode: null, width: null,\n height: null, colorTypeCode: null, cmykC: null, cmykK: null, cmykM: null, cmykY: null,\n bleed: null, sideNumberTypeCode: null, materialTypeCode: null, materialNotes: null,\n tapeTypeCode: null, tapeNotes: null, cuttingTypeCode: null, cuttingNotes: null,\n versionQuantities: [], directToStoreShipments: null, shipments: [], shippingInstructions: null,\n notes: null, pantoneDetails: null, artReview: null, versionName: null, versionNumber: null,\n productionQuantity: null\n }];\n }\n }\n\n private buildForm(): void {\n\n this.form = this.fb.group({\n details: this.fb.group({\n printProductionManager: [null, Validators.required],\n channelTypeCode: [null, Validators.required],\n eventTypeCode: [null, Validators.required],\n promoTypeCode: [null, Validators.required],\n promoDateRange: [null, (ac: AbstractControl) => {\n if(ac?.parent?.get('promoTypeCode').value !== 'OTHER') {\n return Validators.required(ac);\n }\n return null;\n }],\n fundingTypeCode: [null, Validators.required],\n fundingCode: [null, Validators.maxLength(70)],\n artTypeCode: [null, Validators.required],\n designRequestFoundInInQueue: [null, Validators.required],\n inQueueJobReference: [null, (ac: AbstractControl) => {\n if(ac?.parent?.get('designRequestFoundInInQueue').value === true) {\n return Validators.required(ac);\n }\n }],\n printQuoteOnly: [null],\n designRequestReference: [null],\n merchants: this.fb.array([]),\n partnerArtAttachments: this.fb.array([]),\n additionalAttachments: this.fb.array([]),\n }),\n items: this.fb.array([])\n });\n this.detailsForm = this.form.get('details') as FormGroup;\n this.requestItemsControls = this.form.get('items') as FormArray;\n this.merchantsControls = this.detailsForm.get('merchants') as FormArray;\n this.detailsForm.patchValue(cloneDeep(this.requestDetails?.details));\n\n this.requestDetails?.items.forEach(item => {\n this.pushNewRequestItem(item);\n });\n\n if (this.requestDetails?.details?.merchants.length) {\n this.requestDetails?.details?.merchants.forEach(merchant => {\n this.pushNewMerchant(merchant);\n });\n } else {\n this.pushNewMerchant(null);\n }\n\n this.toggleFormDisabling();\n this.detailsFormSubscriptions.forEach(s => s.unsubscribe());\n this.detailsFormSubscriptions = [];\n this.detailsFormSubscriptions.push(\n this.detailsForm.get('promoTypeCode').valueChanges.pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe((v) => {\n if(v === 'OTHER') {\n this.detailsForm.get('promoDateRange').setValue(null);\n } else {\n this.detailsForm.get('promoDateRange').updateValueAndValidity({\n emitEvent: false,\n });\n }\n })\n );\n setTimeout(() => {\n this.cd.detectChanges();\n });\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n }\n\n private setEventSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n this.setPartnerArtAttachmentError();\n\n if (this.form.valid && !this.partnerAttachmentControl.hasError('partnerRequired')) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n return;\n }\n this.utilsService.logInvalidControls(this.form);\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message'),\n );\n\n this.form.markAllAsTouched();\n (this.detailsForm.controls.merchants as FormArray).controls.forEach(item => item.markAllAsTouched());\n (this.form.controls.items as FormArray).controls.forEach(item => item.markAllAsTouched());\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n this.partnerAttachmentControl.markAsTouched();\n\n this.cd.markForCheck();\n }),\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n this.saveRequest();\n }),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.isShowSavedMessage = false;\n this.saveRequest();\n\n this.actions.pipe(takeUntil(this.ngUnsubscribe)).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n }\n });\n })\n );\n }\n\n saveRequest(): void {\n const requestDetails = cloneDeep({ ...(this.requestDetails), ...this.form.getRawValue() });\n\n if (requestDetails.details.promoDateRange) {\n requestDetails.details.promoDateRange.startDate = moment(requestDetails.details.promoDateRange.startDate).format('YYYY-MM-DD');\n requestDetails.details.promoDateRange.endDate = moment(requestDetails.details.promoDateRange.endDate).format('YYYY-MM-DD');\n } else {\n requestDetails.details.promoDateRange = {};\n }\n\n requestDetails.details.merchants.forEach(merchant => {\n merchant.name = merchant?.name?.name;\n });\n\n requestDetails.details.miscCostEstimate = this.requestDetails?.details?.miscCostEstimate;\n\n requestDetails.items = requestDetails.items.map((item, idx) => {\n item = {...item, ...item.cmyk};\n item.versionQuantities = item.versionQuantities.map(version => {\n if (version.name) {\n version.name = version.name.trim();\n }\n\n return version;\n });\n\n item.itemDescription = this.getItemDescription(requestDetails.details, item, this.getDateRange(requestDetails));\n item.costEstimate = this.requestDetails.items.find(i => i.id === item.id)?.costEstimate || null;\n\n item.shipments.forEach((formShipment) => {\n if(formShipment.warehouse && !formShipment.warehouse.id){\n const shipment = (this.requestDetails.items.find(i => i.id === item.id))\n ?.shipments?.find(shipmentItem => shipmentItem.id === formShipment.id);\n formShipment.warehouse.id = shipment?.warehouse ? shipment.warehouse.id : null;\n }\n });\n\n return item;\n });\n\n if (!requestDetails.type) {\n requestDetails.type = 'POP_PRODUCTION_REQUEST';\n }\n this.store.dispatch(requestDetailsActions.updateRequestDetails(\n { requestId: this.requestId, details: requestDetails })\n );\n }\n\n private getItemDescription(details: PopProductionRequestDetails, item: PopProductionRequestItemModel, range: string): string {\n const promoTypeCodeName = details.promoTypeCode === 'AWARENESS'\n ? this.translate.transform('module.requests.pop-prod.details.awareness')\n : ( details.promoTypeCode === 'OFFER'\n ? this.translate.transform('module.requests.pop-prod.details.offer')\n : this.translate.transform('module.requests.pop-prod.details.other')\n );\n\n return [\n this.utilsService.getItemName(this.itemTypes, item?.itemTypeCode),\n this.utilsService.getItemName(this.events, details?.eventTypeCode),\n promoTypeCodeName,\n details.promoTypeCode !== 'OTHER' ? range : null\n ].filter(v => !!v).join(', ');\n }\n\n private getDateRange(requestDetails): string {\n const dateRange = requestDetails?.details?.promoDateRange;\n\n if (!dateRange?.startDate && !dateRange?.endDate) {\n return '';\n }\n\n const startDate = moment(dateRange.startDate).format('l');\n const endDate = moment(dateRange.endDate).format('l');\n\n return `${startDate} - ${endDate}`;\n }\n\n private getPopPPMList(): void {\n this.popProductionService.getPPMList()\n .pipe(take(1))\n .subscribe(ppmList => {\n this.ppmList = ppmList.map(item => ({value: item}));\n this.setPPM();\n });\n }\n\n private setPPM(): void {\n const ppm = this.requestDetails?.details?.printProductionManager || null;\n if (ppm?.userName && this.ppmList.length) {\n const printer =\n this.ppmList.find(item => item.value.userName === ppm.userName);\n this.detailsForm?.get('printProductionManager')?.setValue(printer?.value);\n }\n }\n\n private setPrinterQuoteListener(): void {\n merge(\n this.detailsForm.get('printQuoteOnly').valueChanges,\n this.detailsForm.get('designRequestFoundInInQueue').valueChanges,\n this.detailsForm.get('artTypeCode').valueChanges\n )\n .pipe(\n map(() => this.detailsForm.get('printQuoteOnly').value),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(isChecked => {\n const designRequestReferenceControl = this.detailsForm.get('designRequestReference');\n const inQueueJobReference = this.detailsForm.get('inQueueJobReference');\n const designRequestFoundInInQueue = this.detailsForm.get('designRequestFoundInInQueue').value;\n\n designRequestReferenceControl.clearValidators();\n inQueueJobReference.clearValidators();\n\n if (designRequestFoundInInQueue !== true) {\n if (!isChecked) {\n designRequestReferenceControl.setValidators(Validators.required);\n }\n }\n\n if (designRequestFoundInInQueue === true) {\n if (!isChecked) {\n inQueueJobReference.setValidators(Validators.required);\n }\n }\n designRequestReferenceControl.updateValueAndValidity();\n inQueueJobReference.updateValueAndValidity();\n\n this.cd.markForCheck();\n });\n }\n\n private setArtTypeCodeListener(): void {\n this.detailsForm.get('artTypeCode').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.setPartnerArtAttachmentError();\n this.cd.markForCheck();\n });\n }\n\n private setPartnerArtAttachmentError() {\n const error = (this.detailsForm.get('artTypeCode').value === 'PARTNER' && !this.partnerArtAttachments.length)\n ? { partnerRequired: true }\n : null;\n\n this.partnerAttachmentControl?.setErrors(error);\n }\n\n private get getItemFormGroup(): FormGroup {\n return this.fb.group({\n id: [null],\n deliveryDate: [null, Validators.required],\n wpn: [null, [Validators.minLength(12),\n Validators.maxLength(13), Validators.pattern(INTEGER_PATTERN)]],\n wpnDescription: [null],\n packingTypeCode: [null, Validators.required],\n kitShippingTypeCode: [null],\n kitLabeling: [null],\n kitLabelingComments: [null],\n usageDuration: [null, Validators.required],\n usageDurationTypeCode: [null, Validators.required],\n itemTypeCode: [null, Validators.required],\n dimensionTypeCode: [null, Validators.required],\n width: [null, Validators.required],\n height: [null, Validators.required],\n colorTypeCode: [null, Validators.required],\n cmyk: this.fb.group({\n cmykC: [null, Validators.max(100)],\n cmykM: [null, Validators.max(100)],\n cmykY: [null, Validators.max(100)],\n cmykK: [null, Validators.max(100)],\n }),\n bleed: [null, Validators.required],\n pantoneDetails: [null],\n sideNumberTypeCode: [null, Validators.required],\n materialTypeCode: [null, Validators.required],\n materialNotes: [null], // is required when materialTypeCode is 'other'\n tapeTypeCode: [null, Validators.required],\n tapeNotes: [null], // is required when tapeTypeCode is 'other'\n cuttingTypeCode: [null, Validators.required],\n cuttingNotes: [null], // is required when cuttingTypeCode is 'other'\n versionQuantities: this.fb.array([]),\n directToStoreShipments: [null],\n shipments: this.fb.array([]),\n shippingInstructions: [null],\n notes: [null],\n versionName: this.fb.control(null),\n versionNumber: this.fb.control(null, [Validators.min(MIN_VERSION_NUMBER)]),\n productionQuantity: this.fb.control(null, [(ac: AbstractControl) => {\n if((ac?.parent?.get('versionQuantities') as FormArray)?.length) {\n return null;\n }\n return Validators.required(ac);\n }, Validators.min(MIN_VERSIONS_QTY)]),\n });\n }\n\n private get getItemVersion(): FormGroup {\n return this.fb.group({\n id: [null],\n name: [null, [Validators.required, UniqueNameValidator]],\n quantity: [null, [Validators.required, Validators.min(MIN_VERSIONS_QTY)]]\n });\n }\n\n private get getItemShipment(): FormGroup {\n return this.fb.group({\n id: [null],\n quantity: [null, Validators.required],\n warehouse: [null, Validators.required]\n });\n }\n\n private get isArtTypeDisabled(): boolean {\n return this.requestDetails?.status !== STATUSES.DRAFT && !!this.requestDetails?.details?.designRequestReference;\n }\n\n private pushNewRequestItem(item: PopProductionRequestItemModel): void {\n const itemFormGroup = this.getItemFormGroup;\n itemFormGroup.patchValue(item);\n itemFormGroup.get('cmyk').patchValue(item);\n const itemVersionsControls = itemFormGroup.get('versionQuantities') as FormArray;\n const itemShipmentsControls = itemFormGroup.get('shipments') as FormArray;\n\n if (!item.versionQuantities) {\n item.versionQuantities = [];\n }\n if (!item.shipments) {\n item.shipments = [];\n }\n if (!item.shipments?.length) {\n item.shipments.push(this.getItemShipment.getRawValue());\n }\n\n item.versionQuantities.forEach(version => {\n const versionItem = this.getItemVersion;\n versionItem.patchValue(version);\n itemVersionsControls.push(versionItem);\n });\n item.shipments.forEach(shipment => {\n const shipmentItem = this.getItemShipment;\n shipmentItem.patchValue(shipment);\n itemShipmentsControls.push(shipmentItem);\n });\n\n this.requestItemsControls.push(itemFormGroup);\n }\n\n private get getMerchantFormGroup(): FormGroup {\n return this.fb.group({\n id: [null],\n name: [{name: null, id: null}, Validators.required],\n mdmId: [null, Validators.required],\n fcmsId: [null, Validators.required],\n country: [null, Validators.required],\n accountManagers: this.fb.array([])\n });\n }\n\n private pushNewMerchant(merchant: Merchant): void {\n const merchantFormGroup = this.getMerchantFormGroup;\n if (merchant) {\n const merchantName = {\n name: {\n name: merchant.name,\n id: merchant.fcmsId ? merchant.fcmsId : merchant.mdmId\n }\n };\n merchantFormGroup.patchValue({...merchant, ...merchantName});\n }\n\n this.merchantsControls.push(merchantFormGroup);\n }\n\n public uploadAdditionalAttachement = (file: File, type: string) => this.popProductionService.uploadAttachments(this.requestId, file, 'additional');\n\n public removeAdditionalAttachement = (attachmentId: number, type: string) => this.popProductionService.removeAttachments(this.requestId, attachmentId, 'additional');\n\n public uploadPartnerAttachement = (file: File) => this.popProductionService.uploadAttachments(this.requestId, file, 'partner');\n\n public removePartnerAttachement = (attachmentId: number) => this.popProductionService.removeAttachments(this.requestId, attachmentId, 'partner');\n\n public onUpdateAttachments(obj: { action: string; data: any }, type: string): void {\n if (obj.action === 'add') {\n type === 'partner' ? this.partnerArtAttachments.push(obj.data) : this.additionalAttachments.push(obj.data);\n } else {\n if (type === 'partner') {\n const index = this.partnerArtAttachments.findIndex(item => item?.id === obj.data);\n this.partnerArtAttachments.splice(index, 1);\n } else {\n const index = this.additionalAttachments.findIndex(item => item?.id === obj.data);\n this.additionalAttachments.splice(index, 1);\n }\n }\n }\n\n public onAddRequestItem(): void {\n this.pushNewRequestItem({});\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(index);\n }\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.at(index) as FormGroup).getRawValue());\n\n item.shipments.forEach(shipment => {\n shipment.id = null;\n if (shipment.warehouse?.id) {\n shipment.warehouse.id = null;\n }\n });\n item.versionQuantities.forEach(version => version.id = null);\n item.costEstimate = null;\n this.pushNewRequestItem({ ...item, id: null });\n this.updateNewItemIndex();\n }\n\n public getPopDesignIdLabel(option): string {\n if (!option?.id && !option?.name) {\n return option;\n }\n return `${option.id}-${option.name}`;\n }\n\n public getPopDesignIds(name: string): void {\n if (name.length >= POP_DESIGN_ID_SEARCH_LIMITS.min && name.length <= POP_DESIGN_ID_SEARCH_LIMITS.max) {\n this.isPopDesignIdLoading.next(true);\n this.popProductionService.getPopDesignId(name)\n .subscribe((data) => {\n this.popDesignIdSearch = data?.documents.map(item => ({id: item.id, name: item.name}));\n this.cd.detectChanges();\n this.isPopDesignIdLoading.next(false);\n });\n }\n }\n\n public get isDesignRequestReferenceVisible(): boolean {\n const isVisible = !this.detailsForm.get('artTypeCode').value ||\n this.detailsForm.get('artTypeCode').value === 'INCOMM' ||\n this.detailsForm.get('printQuoteOnly').value;\n\n const designRequestReferenceControl = this.detailsForm.get('designRequestReference');\n const inQueueJobReferenceControl = this.detailsForm.get('inQueueJobReference');\n\n if (!isVisible) {\n designRequestReferenceControl.clearValidators();\n inQueueJobReferenceControl.clearValidators();\n }\n designRequestReferenceControl.updateValueAndValidity();\n inQueueJobReferenceControl.updateValueAndValidity();\n\n return isVisible;\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n}\n","
\n
\n
\n Print Production Manager\n
\n \n
\n
\n \n
\n {{'module.requests.details.dates' | translate}}\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n \n
\n {{'module.requests.pop-prod.details.artwork'|translate}}\n\n
\n
\n \n
\n
\n
\n \n \n \n \n {{ 'module.requests.pop-prod.details.upload-partner-error' | translate }}\n \n
\n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n
\n {{'module.requests.pop-prod.details.attachments'|translate}}\n
\n \n \n
\n
\n \n
\n {{'module.requests.pop-prod.details.merchant-details'|translate}}\n \n
\n \n
\n {{'module.requests.text.request-items' | translate}}\n \n\n \n \n\n
\n \n \n
\n\n \n\n \n
\n
\n
\n","
\n
\n
\n {{ 'module.requests.pop-prod.details.channel' | translate }}\n {{ channel }}\n
\n
\n {{ 'module.requests.pop-prod.details.event' | translate }}\n {{ event }}\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.promo-type' | translate }}\n \n {{ 'module.requests.pop-prod.details.awareness' | translate }}\n {{ 'module.requests.pop-prod.details.offer' | translate }}\n {{ 'module.requests.pop-prod.details.other' | translate }}\n \n
\n
\n {{ 'module.requests.pop-prod.details.promo-range' | translate }}\n {{ getDateRange() }}\n
\n
\n
\n","import { Component, OnInit, ChangeDetectionStrategy, Input, OnDestroy } from '@angular/core';\nimport { Store, MemoizedSelector, DefaultProjectorFn, select } from '@ngrx/store';\nimport { Subject, Observable } from 'rxjs';\nimport { skipWhile, filter, map, takeUntil } from 'rxjs/operators';\nimport { PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\nimport { selectPopProdEventTypes, selectPopChannelTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport moment from 'moment';\n\n@Component({\n selector: 'app-pop-prod-request-details-block',\n templateUrl: './pop-prod-request-details-block.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdRequestDetailsBlockComponent implements OnInit, OnDestroy {\n\n @Input() request: PopProductionRequestModel;\n\n private ngUnsubscribe = new Subject();\n\n event$: Observable;\n channel$: Observable;\n\n constructor(\n private store: Store,\n private utilsService: UtilsService,\n ) { }\n\n ngOnInit(): void {\n this.event$ = this.getCodeNameItemFromStore(selectPopProdEventTypes, this.request?.details?.eventTypeCode);\n this.channel$ = this.getCodeNameItemFromStore(selectPopChannelTypes, this.request?.details?.channelTypeCode);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getDateRange() {\n const dateRange = this.request?.details?.promoDateRange;\n\n if (!dateRange || !dateRange?.startDate) {\n return '';\n }\n\n const startDate = moment(dateRange.startDate).format('l');\n const endDate = moment(dateRange.endDate).format('l');\n\n return `${startDate} - ${endDate}`;\n }\n\n private getCodeNameItemFromStore(\n selector: MemoizedSelector>,\n code: string,\n ): Observable {\n return this.store\n .pipe(\n skipWhile(() => !this.request?.details),\n select(selector),\n filter(v => v.length > 0),\n map((codeNameValues) => this.utilsService.getItemName(codeNameValues, code)),\n takeUntil(this.ngUnsubscribe),\n );\n }\n\n}\n","
\n
{{'module.requests.details.finance-details' | translate}}
\n\n
\n
\n {{ 'module.requests.pop-prod.details.funding-type' | translate }}\n {{ fundingType }}\n
\n
\n {{ 'module.requests.pop-prod.details.funding-code' | translate }}\n {{ details.fundingCode }}\n
\n
\n
\n","import { Component, ChangeDetectionStrategy, Input, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { filter, map, skipWhile, takeUntil } from 'rxjs/operators';\nimport { PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\nimport { selectPopProdFundingTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-pop-prod-finance-details-block',\n templateUrl: './pop-prod-finance-details-block.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdFinanceDetailsBlockComponent implements OnDestroy {\n @Input() testId = 'prod_finance_details_block';\n @Input() request: PopProductionRequestModel;\n @Input() skipFundingInfo = false;\n\n private ngUnsubscribe = new Subject();\n\n fundingType$ = this.store\n .pipe(\n skipWhile(() => !this.request?.details),\n select(selectPopProdFundingTypes),\n filter(v => v.length > 0),\n map((fundingTypes) => this.utilsService.getItemName(fundingTypes, this.request.details.fundingTypeCode)),\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private utilsService: UtilsService,\n ) { }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","
\n
\n {{ 'module.requests.pop-design.details.artwork' | translate }}\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.art-type' | translate }}\n \n {{ 'module.requests.pop-prod.details.partner-art' | translate }}\n {{ 'module.requests.pop-prod.details.incomm-art' | translate }}\n \n
\n\n \n
\n \n
\n
\n\n
\n {{ 'module.requests.pop-prod.details.print-quote' | translate }}\n \n {{ (details.printQuoteOnly ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\n\n@Component({\n selector: 'app-pop-prod-artwork-details-block',\n templateUrl: './pop-prod-artwork-details-block.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdArtworkDetailsBlockComponent {\n\n @Input() request: PopProductionRequestModel;\n @Input() isDisabled: boolean;\n\n fileTypes = FILE_TYPES;\n\n}\n","
\n
{{'module.requests.finance.merchant-details' | translate}}:
\n\n
\n
\n {{'module.requests.finance.merchant-name' | translate}}\n {{merchant.name}} - {{merchant.fcmsId}}\n
\n
\n {{'module.requests.finance.merchant-country' | translate}}\n {{merchant.country}}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\n\n@Component({\n selector: 'app-pop-prod-merchant-details-block',\n templateUrl: './pop-prod-merchant-details-block.component.html',\n styleUrls: ['./pop-prod-merchant-details-block.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdMerchantDetailsBlockComponent {\n\n @Input() request: PopProductionRequestModel;\n\n}\n","\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n \n
\n
\n
\n \n
\n
\n\n \n
\n
\n\n
\n \n \n
\n\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Action, ActionsSubject, select, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport moment from 'moment';\nimport { combineLatest, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport { POP_PRODUCTION_REQUEST } from 'src/app/requests/constants/request-types.constant';\nimport {\n PopProductionRequestDetails,\n PopProductionRequestItemModel,\n PopProductionRequestModel,\n} from 'src/app/requests/models/pop-production-request.model';\nimport { selectPopProductionRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { Events, EventService } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\n\nimport { lazyLoadPopProdEventTypes, lazyLoadPopProdItemTypes } from '../../../../../reducers/ref-data/refdata.actions';\nimport { selectPopProdEventTypes, selectPopProdItemTypes } from '../../../../../reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-pop-prod-production-review',\n templateUrl: './pop-prod-production-review.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdProductionReviewComponent extends AbstractRequestStepComponent implements OnInit, OnChanges, OnDestroy {\n\n private requestDetails: Partial;\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n private readonly controlsConfig = { emitEvent: false };\n public itemTypes: CodeNameModel[] = [];\n public events: CodeNameModel[] = [];\n\n constructor(\n private store: Store,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private translate: TranslatePipe,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private actions: ActionsSubject,\n private utilsService: UtilsService\n ) {\n super();\n }\n\n requestItemsControls: FormArray;\n formValidationTrigger = new Subject();\n formDisabledTrigger = new ReplaySubject(1);\n\n request$ = this.store\n .pipe(\n select(selectPopProductionRequestDetails),\n filter(request => request?.type === POP_PRODUCTION_REQUEST),\n takeUntil(this.ngUnsubscribe),\n );\n\n refData$ = combineLatest([\n this.store.select(selectPopProdEventTypes).pipe(filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdItemTypes), filter((v) => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPopProdItemTypes());\n this.store.dispatch(lazyLoadPopProdEventTypes());\n\n this.setEventSubscriptions();\n\n this.request$.subscribe((request) => {\n this.requestDetails = Object.assign({}, request);\n\n this.requestItemsControls = this.fb.array([]);\n request?.items?.forEach(item => {\n this.pushNewRequestItem(item);\n });\n\n this.toggleFormDisabling();\n });\n this.refData$.subscribe(([events, itemTypes]) => {\n this.itemTypes = itemTypes;\n this.events = events;\n });\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n }\n\n private pushNewRequestItem(item: PopProductionRequestItemModel): void {\n const itemFormGroup = this.getItemFormGroup;\n const itemVersionsControls = itemFormGroup.get('versionQuantities') as FormArray;\n const itemShipmentsControls = itemFormGroup.get('shipments') as FormArray;\n\n itemFormGroup.patchValue(item);\n itemFormGroup.get('cmyk').patchValue(item);\n item.versionQuantities.forEach(version => {\n const versionItem = this.getItemVersion;\n versionItem.patchValue(version);\n itemVersionsControls.push(versionItem);\n });\n\n item.shipments.forEach(shipment => {\n const shipmentItem = this.getItemShipment;\n shipmentItem.patchValue(shipment);\n itemShipmentsControls.push(shipmentItem);\n });\n\n this.requestItemsControls.push(itemFormGroup);\n }\n\n private get getItemShipment(): FormGroup {\n return this.fb.group({\n id: [null],\n quantity: [null],\n warehouse: [null],\n });\n }\n\n private get getItemVersion(): FormGroup {\n return this.fb.group({\n name: [{ value: null, disabled: true }],\n quantity: [{ value: null, disabled: true }],\n });\n }\n\n private get getItemFormGroup(): FormGroup {\n return this.fb.group({\n id: [null],\n deliveryDate: [null],\n wpn: [null],\n wpnDescription: [null],\n packingTypeCode: [null],\n kitShippingTypeCode: [null],\n kitLabeling: [null],\n kitLabelingComments: [null],\n usageDuration: [null, Validators.required],\n usageDurationTypeCode: [null, Validators.required],\n itemTypeCode: [null, Validators.required],\n dimensionTypeCode: [null, Validators.required],\n width: [null, Validators.required],\n height: [null, Validators.required],\n colorTypeCode: [null, Validators.required],\n cmyk: this.fb.group({\n cmykC: [null, Validators.max(100)],\n cmykM: [null, Validators.max(100)],\n cmykY: [null, Validators.max(100)],\n cmykK: [null, Validators.max(100)],\n }),\n bleed: [null],\n pantoneDetails: [null],\n sideNumberTypeCode: [null, Validators.required],\n materialTypeCode: [null],\n materialNotes: [null], // is required when materialTypeCode is 'other'\n tapeTypeCode: [null],\n tapeNotes: [null], // is required when tapeTypeCode is 'other'\n cuttingTypeCode: [null],\n cuttingNotes: [null], // is required when cuttingTypeCode is 'other'\n versionQuantities: this.fb.array([]),\n directToStoreShipments: [null],\n shipments: this.fb.array([]),\n shippingInstructions: [null],\n notes: [null],\n\n versionName: this.fb.control(null),\n versionNumber: this.fb.control(null),\n productionQuantity: this.fb.control(null),\n });\n }\n\n private setEventSubscriptions(): void {\n this.subscriptions.push(\n this.initValidationHandler(),\n this.initStepSubmitHandler(),\n this.initStepRollbackHandler(),\n );\n }\n\n private initValidationHandler(): Subscription {\n return this.eventService.on(Events.ProductionReviewValidation, (elementRef) => {\n if (this.requestItemsControls.valid) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.ProductionReviewSubmit, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message'),\n );\n\n this.requestItemsControls.markAllAsTouched();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n\n this.cd.markForCheck();\n });\n }\n\n private initStepSubmitHandler(): Subscription {\n return this.eventService.on(Events.ProductionReviewSubmit, ({ comment }) => {\n this.saveRequest();\n this.actions.pipe(takeUntil(this.ngUnsubscribe)).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.completeStep(comment);\n }\n });\n\n });\n }\n\n private initStepRollbackHandler(): Subscription {\n return this.eventService.on(Events.ProductionReviewRollback, ({ comment }) => {\n this.saveRequest();\n this.actions.pipe(takeUntil(this.ngUnsubscribe)).subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.routeBack(comment);\n }\n });\n }, this.ngUnsubscribe);\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.requestItemsControls?.disable(this.controlsConfig);\n } else {\n this.requestItemsControls?.enable(this.controlsConfig);\n this.requestItemsControls?.controls.forEach(reqItemControls => {\n reqItemControls.get('shippingInstructions').disable();\n reqItemControls.get('versionQuantities').disable();\n reqItemControls.get('directToStoreShipments').disable();\n reqItemControls.get('versionName').disable();\n reqItemControls.get('versionNumber').disable();\n reqItemControls.get('productionQuantity').disable();\n });\n }\n this.formDisabledTrigger.next();\n }\n\n private completeStep(comment: string): void {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n }\n\n private routeBack(comment: string): void {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.RouteBack,\n comment,\n },\n });\n }\n\n private saveRequest(): void {\n const requestDetails = { ...this.requestDetails };\n const requestItems = [...this.requestItemsControls.getRawValue()];\n\n requestDetails.items = requestItems.map((item, idx) => {\n item = {...item, ...item.cmyk};\n\n item.versionQuantities = item.versionQuantities.map(version => {\n if (version.name) {\n version.name = version.name.trim();\n }\n\n return version;\n });\n item.itemDescription = this.getItemDescription(requestDetails.details, item, this.getDateRange(requestDetails));\n item.costEstimate = this.requestDetails.items[idx]?.costEstimate;\n\n return item;\n });\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({\n requestId: this.requestId,\n details: requestDetails,\n }));\n }\n\n private getItemDescription(details: PopProductionRequestDetails, item: PopProductionRequestItemModel, range: string): string {\n return [\n this.utilsService.getItemName(this.itemTypes, item?.itemTypeCode),\n this.utilsService.getItemName(this.events, details?.eventTypeCode),\n details.promoTypeCode === 'AWARENESS'\n ? this.translate.transform('module.requests.pop-prod.details.awareness')\n : details.promoTypeCode === 'OFFER'\n ? this.translate.transform('module.requests.pop-prod.details.offer')\n : this.translate.transform('module.requests.pop-prod.details.other'),\n details.promoTypeCode !== 'OTHER' ? range : null\n ].filter(v => !!v).join(', ');\n }\n\n private getDateRange(requestDetails): string {\n const dateRange = requestDetails?.details?.promoDateRange;\n\n if (!dateRange?.startDate && !dateRange?.endDate) {\n return '';\n }\n\n const startDate = moment(dateRange.startDate).format('l');\n const endDate = moment(dateRange.endDate).format('l');\n\n return `${startDate} - ${endDate}`;\n }\n}\n","
\n {{ 'module.requests.pop-prod.details.kit-comments' | translate }}:\n {{ item?.kitLabelingComments }}\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.usage-duration' | translate }}:\n {{ item?.usageDuration }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.duration-type' | translate }}:\n {{ utilsService.getItemName(usageDurationTypes, item?.usageDurationTypeCode) }}\n
\n
\n\n
\n {{ 'module.requests.pop-design.details.dimensions' | translate }}:\n
\n\n
\n
\n {{ 'module.requests.pop-design.details.unit-of-measure' | translate }}:\n {{ utilsService.getItemName(dimensionTypes, item?.dimensionTypeCode) }}\n
\n\n
\n {{ 'module.requests.pop-design.details.width' | translate }}:\n {{ item?.width }}\n
\n\n
\n {{ 'module.requests.pop-design.details.height' | translate }}:\n {{ item?.height }}\n
\n
\n\n
\n
\n {{ 'module.requests.pop-design.details.color' | translate }}:\n {{ utilsService.getItemName(colorTypes, item?.colorTypeCode) }}\n
\n\n \n \n
\n\n
\n {{ 'module.requests.pop-design.details.pantone-details' | translate }}:\n {{ item?.pantoneDetails }}\n
\n\n
\n
\n {{ 'module.requests.pop-design.details.bleed' | translate }}:\n {{ (item?.bleed ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.sides-number' | translate }}:\n \n 1\n 2\n \n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.material' | translate }}:\n {{ utilsService.getItemName(materialTypes, item?.materialTypeCode) }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.cutting' | translate }}:\n {{ utilsService.getItemName(cuttingTypes, item?.cuttingTypeCode) }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.tape' | translate }}:\n {{ utilsService.getItemName(tapeTypes, item?.tapeTypeCode) }}\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.specify-note' | translate }}:\n {{ item?.materialNotes }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.specify-note' | translate }}:\n {{ item?.cuttingNotes }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.specify-note' | translate }}:\n {{ item?.tapeNotes }}\n
\n
\n
\n
\n {{ 'module.requests.pop-prod.details.version-name' | translate }}:\n {{ item.versionName }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.version-number' | translate }}:\n {{ item.versionNumber }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.production-qty' | translate }}:\n {{ item.productionQuantity }}\n
\n
\n
\n
\n {{ 'module.requests.pop-prod.details.version-name' | translate }}:\n {{ version.name }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.version-qty' | translate }}:\n {{ version.quantity }}\n
\n
\n\n
\n {{ 'module.requests.pop-prod.details.direct-shipment' | translate }}\n
\n\n
\n \n
\n \n {{'module.requests.pop-prod.details.ship-to' | translate}}:\n {{ address }}\n \n
\n
\n\n
\n {{'module.requests.pop-prod.details.shipment-qty' | translate}}:\n {{ qty }}\n
\n
\n\n
\n {{ 'module.requests.pop-prod.details.shipping-instructions' | translate }}:\n {{ item?.shippingInstructions }}\n
\n\n
\n {{ 'common.label.notes' | translate }}:\n {{ item?.notes }}\n
\n\n\n
\n {{ 'module.requests.pop-design.details.color-cyan' | translate }}:\n {{ item?.cmykC }}\n
\n
\n {{ 'module.requests.pop-design.details.color-magenta' | translate }}:\n {{ item?.cmykM }}\n
\n
\n {{ 'module.requests.pop-design.details.color-yellow' | translate }}:\n {{ item?.cmykY }}\n
\n
\n {{ 'module.requests.pop-design.details.color-key' | translate }}:\n {{ item?.cmykK }}\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { PopProductionRequestItemModel } from '../../../../../models/pop-production-request.model';\nimport { ColorTypes } from '../../../../../constants/color-types.constant';\nimport { combineLatest, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport {\n selectColorTypes,\n selectDimensionTypes,\n selectPopProdCuttingTypes,\n selectPopProdMaterialTypes,\n selectPopProdTapeTypes,\n selectPopProdUsageDurationTypes,\n} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { CodeNameModel } from '../../../../../../shared/models/code-name.model';\nimport { LabelHelperService } from '../../../../../services/label-helper.service';\nimport { Warehouse } from '../../../../../models/warehouse.model';\n\n@Component({\n selector: 'app-pop-prod-item-common',\n templateUrl: './pop-prod-item-common.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdItemCommonComponent implements OnInit, OnDestroy {\n @Input() item: PopProductionRequestItemModel;\n @Input() public testId = '';\n\n public colorTypesEnum = ColorTypes;\n\n public usageDurationTypes: CodeNameModel[] = [];\n public dimensionTypes: CodeNameModel[] = [];\n public colorTypes: CodeNameModel[] = [];\n public cuttingTypes: CodeNameModel[] = [];\n public materialTypes: CodeNameModel[] = [];\n public tapeTypes: CodeNameModel[] = [];\n\n private ngUnsubscribe = new Subject();\n\n refData$ = combineLatest([\n this.store.pipe(select(selectPopProdUsageDurationTypes), filter(v => v?.length > 0)),\n this.store.pipe(select(selectDimensionTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectColorTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdCuttingTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdMaterialTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdTapeTypes), filter(v => v.length > 0)),\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(\n private cd: ChangeDetectorRef,\n private store: Store,\n public utilsService: UtilsService,\n ) { }\n\n ngOnInit(): void {\n this.refData$.subscribe(([ usageDurations, dimensionTypes, colorTypes, cuttingTypes, materialTypes, tapeTypes ]) => {\n this.usageDurationTypes = usageDurations;\n this.dimensionTypes = dimensionTypes;\n this.colorTypes = colorTypes;\n this.cuttingTypes = cuttingTypes;\n this.materialTypes = materialTypes;\n this.tapeTypes = tapeTypes;\n\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getWarehouseLabel(warehouse: Warehouse): string {\n return LabelHelperService.getWarehouseLabel(warehouse);\n }\n\n isColorValueValid(value: number) {\n return typeof value === 'number' && value >= 0;\n }\n\n}\n","
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n \n
\n
\n
\n \n
\n
\n
\n
\n\n
\n \n \n
\n\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.item.cost-estimate' | translate }}:\n \n
\n
\n \n
\n \n
\n \n
\n\n
\n {{ 'module.requests.pop-prod.item.total-cost-details' | translate }}:\n\n
\n {{ 'module.requests.po.sub-total' | translate }}:\n {{ subTotal.toFixed(4) | currency }}\n
\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n\n
\n {{ 'module.requests.pop-prod.item.misc-cost-estimate' | translate }}:\n\n \n
\n\n
\n {{ 'module.requests.pop-prod.item.total-cost-estimate' | translate }}:\n {{ totalCostEstimate.toFixed(4) | currency }}\n
\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n\n
\n Printer quote attachments\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { Action, ActionsSubject, select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, first, shareReplay, takeUntil } from 'rxjs/operators';\nimport BigJs from 'big.js';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { selectPopProductionRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { MAX_POP_PROD_COST_TOTAL } from '../../../../constants/request-details.constants';\nimport { PopProductionService } from '../../../../services/pop-production.service';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { Events, EventService, PopProductionEvents } from '../../../../../shared/services/event-service.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { PopProductionRequestModel } from '../../../../models/pop-production-request.model';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\n\n@Component({\n selector: 'app-pop-prod-printer-quote',\n templateUrl: './pop-prod-printer-quote.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdPrinterQuoteComponent extends AbstractRequestStepComponent implements OnInit, OnChanges, OnDestroy {\n public requestItemsControls: FormArray;\n public form: FormGroup;\n public subTotal: number;\n public totalCostEstimate: number;\n public attachments: any[] = [];\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public errors = {\n isSubTotalMax: false,\n isTotalCostEstimateMax: false,\n };\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private request: PopProductionRequestModel;\n private maxPopProdCostTotal = new BigJs(MAX_POP_PROD_COST_TOTAL);\n\n request$ = this.store.pipe(\n select(selectPopProductionRequestDetails),\n filter(v => !!v),\n shareReplay({\n refCount: false,\n bufferSize: 1,\n }),\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private actions: ActionsSubject,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private popProductionService: PopProductionService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private translateService: TranslateService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.form = this.fb.group({\n details: this.fb.group({\n miscCostEstimate: [null],\n }),\n items: this.fb.array([]),\n });\n\n this.requestItemsControls = this.form.get('items') as FormArray;\n\n this.request$.subscribe(request => {\n this.request = { ...request };\n\n this.form.patchValue(request, { emitEvent: false });\n this.requestItemsControls.clear();\n request?.items?.forEach(item => {\n this.requestItemsControls.push(this.fb.group({ costEstimate: item?.costEstimate || null }));\n });\n\n this.attachments = [...(request?.details?.printerQuoteAttachments || [])];\n\n this.subTotal = Number(request?.details?.subtotal) || 0;\n this.totalCostEstimate = Number(request?.details?.totalCostEstimate) || 0;\n\n this.toggleFormDisabling();\n\n this.cd.markForCheck();\n });\n\n this.form.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.subTotal = value.items\n .map(v => Number(v.costEstimate))\n .reduce((prev, curr) => prev.add(curr), new BigJs(0));\n\n this.totalCostEstimate = new BigJs(this.subTotal)\n .add(Number(value?.details?.miscCostEstimate || 0));\n\n this.errors.isSubTotalMax = (this.subTotal as any).gt(this.maxPopProdCostTotal);\n this.errors.isTotalCostEstimateMax = (this.totalCostEstimate as any).gt(this.maxPopProdCostTotal);\n\n this.cd.markForCheck();\n });\n\n this.setEventsSubs();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public uploadAdditionalAttachment = (file: File) => this.popProductionService.uploadAttachments(this.requestId, file, 'printerQuote');\n\n public removeAdditionalAttachment = (attachmentId: number) => this.popProductionService.removeAttachments(this.requestId, attachmentId, 'printerQuote');\n\n public onUpdateAttachments(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n this.attachments.push(obj.data);\n } else {\n const index = this.attachments.findIndex(item => item?.id === obj.data);\n this.attachments.splice(index, 1);\n }\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.eventService.on(PopProductionEvents.PrinterQuoteSubmitValidated, (elementRef) => {\n if (this.errors.isSubTotalMax || this.errors.isTotalCostEstimateMax) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.modal.errors.invalid-form-header'),\n this.translateService.instant('common.modal.errors.invalid-form-desc'),\n );\n\n return;\n }\n\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', PopProductionEvents.PrinterQuoteSubmit, 'right');\n }),\n\n this.eventService.on(PopProductionEvents.PrinterQuoteSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n first(),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n }),\n );\n }\n\n private saveRequest(): void {\n const request = {\n ...this.request,\n details: {\n ...this.request.details,\n ...this.form.value.details,\n subtotal: this.subTotal.toString(),\n totalCostEstimate: this.totalCostEstimate.toString(),\n },\n items: this.request.items.map((item, idx) => ({ ...item, ...this.form.value.items[idx] }))\n };\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails(\n { requestId: this.requestId, details: request }));\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n }\n}\n","
\n {{ 'module.requests.pop-prod.details.finance' | translate }}\n
\n
\n \n \n \n {{ fundingTypeHint }}\n \n \n
\n
\n \n 0 && fundingCodePlaceholder\"\n >\n {{ fundingCodePlaceholder }}\n \n \n
\n
\n
\n","import {ChangeDetectionStrategy, Component, OnInit, ChangeDetectorRef, Input, DoCheck} from '@angular/core';\nimport {ControlContainer, FormControl, FormGroup, ValidatorFn, Validators} from '@angular/forms';\nimport {Store} from '@ngrx/store';\nimport {takeUntil, map} from 'rxjs/operators';\nimport {lazyLoadPopProdFundingTypes} from 'src/app/reducers/ref-data/refdata.actions';\nimport {selectPopProdFundingTypes} from 'src/app/reducers/ref-data/refdata.selectors';\nimport {WithDestroy} from 'src/app/shared/components/with-destroy/with-destroy.mixin';\nimport {Observable, ReplaySubject, Subscription, combineLatest, from, merge} from 'rxjs';\nimport {SelectSearchDropdownOption} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\n\nconst FUNDING_CODE_REQUIRED = {\n QUOTE_ONLY: false,\n DEFAULT: true\n};\n\nconst notQuoteOnlyValidator: ValidatorFn = ac => ac?.value === 'QUOTE_ONLY'\n ? {\n quoteOnlyRestricted: true\n }\n : null;\n\n@Component({\n selector: 'app-pop-finance-details-requestor-review',\n templateUrl: './pop-finance-details-requestor-review.component.html',\n styleUrls: ['./pop-finance-details-requestor-review.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopFinanceDetailsRequestorReviewComponent extends WithDestroy() implements OnInit, DoCheck {\n @Input() testId = 'pop_finance_details';\n private restrictQuoteOnlySubject = new ReplaySubject(1);\n private isDisabledSubject = new ReplaySubject(1);\n private fundingCodeMinLengthValidator = Validators.minLength(4);\n @Input() set isDisabled(isDisabled: boolean) {\n this.isDisabledSubject.next(isDisabled);\n }\n @Input() set restrictQuoteOnly(restrictQuoteOnly: boolean) {\n this.restrictQuoteOnlySubject.next(restrictQuoteOnly);\n }\n\n fundingTypes$: Observable = combineLatest([\n this.store.select(selectPopProdFundingTypes),\n this.restrictQuoteOnlySubject\n ]).pipe(\n map(([source, restrictQuoteOnly]) =>\n source.map(codeName => ({\n value: codeName.code,\n label: codeName.name,\n disabled: restrictQuoteOnly ? codeName.code === 'QUOTE_ONLY' : null\n }))\n )\n );\n fundingTypeMasks$ = this.store\n .select(selectPopProdFundingTypes)\n .pipe(map(fts => (fts || []).reduce((acc, ft) => ({...acc, ...(ft.mask ? {[ft.code]: ft.mask} : {})}), {})));\n fundingTypeHints$ = this.store\n .select(selectPopProdFundingTypes)\n .pipe(map(fts => (fts || []).reduce((acc, ft) => ({...acc, ...(ft.tooltip ? {[ft.code]: ft.tooltip} : {})}), {})));\n\n\n constructor(private store: Store, private cd: ChangeDetectorRef, public controlContainer: ControlContainer) {\n super();\n }\n private _oldControl = null;\n private formGroupSubscriptions: Subscription[] = [];\n\n get fundingCodeField(): FormControl {\n return this.controlContainer.control.get('fundingCode') as FormControl;\n }\n get fundingTypeField(): FormControl {\n return this.controlContainer.control.get('fundingTypeCode') as FormControl;\n }\n fundingTypeHint = null;\n fundingCodePlaceholder = null;\n @Input() fundingCodeRequired = false;\n\n private setUpFormGroups(formGroup: FormGroup) {\n this.formGroupSubscriptions.forEach(fgs => fgs.unsubscribe());\n\n this.formGroupSubscriptions.push(\n combineLatest([\n this.isDisabledSubject,\n this.restrictQuoteOnlySubject,\n combineLatest([\n this.fundingTypeMasks$,\n this.fundingTypeHints$,\n merge(from([formGroup.get('fundingTypeCode').value]), formGroup.get('fundingTypeCode').valueChanges) as Observable\n ])\n ])\n .pipe(takeUntil(this.ngUnsubscribe$))\n .subscribe(([isDisabled, restrictQuoteOnly, [masks, hints, v]]) => {\n if (isDisabled) {\n [this.fundingTypeField, this.fundingCodeField].forEach(f =>\n f.disable({\n emitEvent: false\n })\n );\n }\n if (!restrictQuoteOnly || isDisabled) {\n this.fundingTypeField.disable({\n emitEvent: false\n });\n this.fundingTypeField.removeValidators([notQuoteOnlyValidator]);\n } else {\n this.fundingTypeField.enable({\n emitEvent: false\n });\n this.fundingTypeField.addValidators([notQuoteOnlyValidator]);\n this.fundingTypeField.updateValueAndValidity({\n emitEvent: false\n });\n this.fundingTypeField.markAsTouched();\n }\n this.fundingTypeHint = `${v}` in hints ? hints[v] : null;\n this.fundingCodePlaceholder = `${v}` in masks ? masks[v] : null;\n this.fundingCodeRequired = `${v}` in FUNDING_CODE_REQUIRED ? FUNDING_CODE_REQUIRED[v] : FUNDING_CODE_REQUIRED.DEFAULT;\n this.fundingCodeField.removeValidators([Validators.required, this.fundingCodeMinLengthValidator]);\n if (this.fundingCodeRequired) {\n this.fundingCodeField.addValidators([Validators.required, this.fundingCodeMinLengthValidator]);\n this.fundingCodeField.markAsTouched();\n }\n this.fundingCodeField.updateValueAndValidity({\n emitEvent: false\n });\n this.cd.markForCheck();\n })\n );\n }\n\n ngDoCheck(): void {\n if (this._oldControl !== this.controlContainer.control) {\n this._oldControl = this.controlContainer.control;\n this.setUpFormGroups(this.controlContainer.control as FormGroup);\n }\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPopProdFundingTypes());\n }\n}\n","\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.item.cost-estimate' | translate }}:\n {{ requestItem?.costEstimate | currency }}\n
\n
\n \n
\n \n
\n \n
\n\n
\n \n\n
\n
\n {{ 'module.requests.po.sub-total' | translate }}:\n {{ request?.details?.subtotal | currency }}\n
\n
\n {{ 'module.requests.pop-prod.item.misc-cost-estimate' | translate }}:\n {{ request?.details?.miscCostEstimate | currency }}\n
\n
\n {{ 'module.requests.pop-prod.item.total-cost-estimate' | translate }}:\n {{ request?.details?.totalCostEstimate | currency }}\n
\n
\n\n
\n
{{ 'module.requests.pop-prod.details.additional-files' | translate }}
\n\n
\n \n
\n
\n \n
\n\n
\n
\n
\n
\n
\n \n \n \n {{ 'module.requests.pop-prod.details.convert-to-prod-hint' | translate }}\n \n
\n
\n \n
\n \n
\n \n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n","import {Component, OnInit, ChangeDetectionStrategy, Input, OnChanges, OnDestroy, ChangeDetectorRef, SimpleChanges} from '@angular/core';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {selectPopProductionRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {select, Store} from '@ngrx/store';\nimport {Subject, Subscription, of, merge} from 'rxjs';\nimport {PopProductionRequestModel} from '../../../../models/pop-production-request.model';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {PopProductionService} from '../../../../services/pop-production.service';\nimport {lazyLoadPopProdEventTypes, lazyLoadPopProdItemTypes} from '../../../../../reducers/ref-data/refdata.actions';\nimport {EventService, Events, PopProductionEvents} from '../../../../../shared/services/event-service.service';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {RequestStageActions} from '../../../../../shared/services/request-stages.enum';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {TranslateService} from '@ngx-translate/core';\n\nconst POP_DESIGN_ID_SEARCH_LIMITS = {min: 4, max: 6};\n\n@Component({\n selector: 'app-pop-prod-requester-review',\n templateUrl: './pop-prod-requester-review.component.html',\n styleUrls: ['./pop-prod-requester-review.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdRequesterReviewComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n @Input() requestId: string;\n @Input() isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n private request: PopProductionRequestModel;\n\n public convertToForm: FormGroup;\n public popDesignIdSearch: any[] = [];\n public isPopDesignIdLoading = new Subject();\n public isDesignRequestReferenceVisible: boolean;\n\n request$ = this.store.pipe(\n select(selectPopProductionRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n\n get restrictQuoteOnly(): boolean {\n return this.convertToForm.get('convertToProd')?.value || false;\n }\n\n constructor(\n private stepActionsService: StepActionsService,\n private fb: FormBuilder,\n private messageService: MessageService,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private store: Store,\n private popProductionService: PopProductionService,\n private translateService: TranslateService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPopProdItemTypes());\n this.store.dispatch(lazyLoadPopProdEventTypes());\n\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(request => {\n if (request) {\n this.request = request;\n this.isDesignRequestReferenceVisible = this.request.details.artTypeCode === 'INCOMM' || this.request.details.printQuoteOnly;\n this.buildConvertToForm();\n }\n });\n\n this.setSubmitStepListener();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.isPopDesignIdLoading.next();\n this.isPopDesignIdLoading.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private setSubmitStepListener(): void {\n this.subscriptions.push(\n this.eventService.on(PopProductionEvents.InternalRequesterReviewSubmitValidation, elementRef => {\n if (this.convertToForm.invalid) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.modal.errors.invalid-form-header'),\n this.translateService.instant('common.modal.errors.invalid-form-desc')\n );\n\n this.convertToForm.markAllAsTouched();\n this.cd.markForCheck();\n\n return;\n }\n\n this.stepActionsService.addReason(\n elementRef,\n 'step-submit',\n 'step-submit',\n PopProductionEvents.InternalRequesterReviewSubmit,\n 'right'\n );\n }),\n\n this.eventService.on(PopProductionEvents.InternalRequesterReviewSubmit, event => {\n const convertToFormValue = this.convertToForm.get('convertToProd').value;\n const designRequestReferenceValue = this.convertToForm.get('designRequestReference').value || {id: '', name: ''};\n const designRequestFoundInInQueue = this.convertToForm.get('designRequestFoundInInQueue').value;\n const inQueueJobReference = this.convertToForm.get('inQueueJobReference').value;\n const fundingTypeCode = this.convertToForm.get('fundingTypeCode').value;\n const fundingCode = this.convertToForm.get('fundingCode').value;\n\n this.popProductionService\n .updateConversionToProduction(\n this.requestId,\n convertToFormValue,\n designRequestReferenceValue,\n designRequestFoundInInQueue,\n inQueueJobReference,\n fundingTypeCode,\n fundingCode\n )\n .subscribe(requestDetails => {\n this.request = requestDetails;\n\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment\n }\n });\n });\n })\n );\n }\n\n private convertFormSubscriptions: Subscription[] = [];\n\n private buildConvertToForm(): void {\n this.convertFormSubscriptions.forEach(s => s.unsubscribe());\n\n this.convertToForm = this.fb.group({\n convertToProd: this.request?.details?.conversionToProductionRequired,\n designRequestReference: this.request?.details?.designRequestReference,\n designRequestFoundInInQueue: this.fb.control(this.request?.details?.designRequestFoundInInQueue, [\n ...(!this.request?.details?.printQuoteOnly ? [Validators.required] : [])\n ]),\n inQueueJobReference: this.request?.details?.inQueueJobReference,\n fundingTypeCode: [this.request?.details?.fundingTypeCode, Validators.required],\n fundingCode: this.request?.details?.fundingCode\n });\n\n if (!this.request?.details?.printQuoteOnly && this.isDesignRequestReferenceVisible) {\n this.convertFormSubscriptions.push(\n merge(\n of(this.convertToForm.get('designRequestFoundInInQueue').value),\n this.convertToForm.get('designRequestFoundInInQueue').valueChanges\n )\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(designRequestFoundInInQueue => {\n if (!designRequestFoundInInQueue) {\n this.convertToForm.get('inQueueJobReference').clearValidators();\n this.convertToForm.get('designRequestReference').setValidators([Validators.required]);\n } else {\n this.convertToForm.get('designRequestReference').clearValidators();\n this.convertToForm.get('inQueueJobReference').setValidators([Validators.required]);\n }\n this.convertToForm.get('inQueueJobReference').updateValueAndValidity();\n this.convertToForm.get('designRequestReference').updateValueAndValidity();\n })\n );\n }\n\n this.convertFormSubscriptions.push(\n this.convertToForm.get('convertToProd').valueChanges.pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe((v) => {\n if(!v) {\n this.convertToForm.get('fundingTypeCode').reset(this.request?.details?.fundingTypeCode);\n }\n })\n );\n if (!this.isDesignRequestReferenceVisible) {\n this.convertToForm.get('designRequestReference').clearValidators();\n this.convertToForm.get('inQueueJobReference').clearValidators();\n }\n\n if (this.request?.details?.printQuoteOnly) {\n this.setConvertToListener();\n }\n\n this.toggleFormDisabling();\n }\n\n private setConvertToListener(): void {\n const initLabel = this.convertToForm.get('convertToProd').value ? 'common.button.step-submit' : 'common.button.step-close';\n this.stepActionsService.changeButtonLabelOfStage('step-submit', initLabel, this.request.type, 'INTERNAL_REQUESTOR_REVIEW');\n this.cd.markForCheck();\n\n this.convertToForm\n .get('convertToProd')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(newVal => {\n let buttonActionLabel = '';\n\n if (newVal) {\n buttonActionLabel = 'common.button.step-submit';\n } else {\n buttonActionLabel = 'common.button.step-close';\n }\n this.stepActionsService.changeButtonLabelOfStage('step-submit', buttonActionLabel, this.request.type, 'INTERNAL_REQUESTOR_REVIEW');\n this.cd.markForCheck();\n });\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.convertToForm?.disable();\n } else {\n this.convertToForm?.enable();\n }\n }\n\n public getPopDesignIds(name: string): void {\n if (name.length >= POP_DESIGN_ID_SEARCH_LIMITS.min && name.length <= POP_DESIGN_ID_SEARCH_LIMITS.max) {\n this.isPopDesignIdLoading.next(true);\n this.popProductionService.getPopDesignId(name).subscribe(data => {\n this.popDesignIdSearch = data?.documents.map(item => ({id: item.id, name: item.name}));\n this.cd.detectChanges();\n this.isPopDesignIdLoading.next(false);\n });\n }\n }\n\n public getPopDesignIdLabel(option): string {\n if (!option?.id && !option?.name) {\n return option;\n }\n return `${option.id}-${option.name}`;\n }\n}\n","\n
\n \n
\n\n
\n Totals\n
\n {{ 'module.requests.po.sub-total' | translate }}:\n {{ request?.details?.subtotal | currency }}\n
\n\n
\n {{ 'module.requests.pop-prod.item.misc-cost-estimate' | translate }}:\n {{ request?.details?.miscCostEstimate | currency }}\n
\n\n
\n {{ 'module.requests.pop-prod.item.total-cost-estimate' | translate }}:\n {{ request?.details?.totalCostEstimate | currency }}\n
\n
\n\n
0\">\n
{{ 'module.requests.pop-prod.details.additional-files' | translate }}
\n \n
\n \n\n
0\">\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.item.cost-estimate' | translate }}:\n {{ request?.items[itemIndex].costEstimate | currency }}\n
\n
\n \n
\n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, OnDestroy } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\nimport { selectPopProductionRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-pop-prod-finance-approval',\n templateUrl: './pop-prod-finance-approval.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdFinanceApprovalComponent extends AbstractRequestStepComponent implements OnDestroy {\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription [] = [];\n\n request$ = this.store.pipe(\n select(selectPopProductionRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(private store: Store) {\n super();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { TranslateService} from '@ngx-translate/core';\nimport { Store } from '@ngrx/store';\nimport { switchMap, tap} from 'rxjs/operators';\nimport { MessageService } from '../../shared/services/message-service.service';\nimport { ModalService } from '../../shared/services/modal-service.service';\nimport { requestDetailsActions } from '../reducers/request-details/request-details.actions';\nimport {PopProductionService} from './pop-production.service';\nimport { PopProductionPoModel } from '../models/pop-production-po.model';\nimport {EMPTY, Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PpPoSowManageService {\n\n constructor(private popProductionService: PopProductionService,\n private messageService: MessageService,\n private modalService: ModalService,\n private translate: TranslateService,\n private store: Store) { }\n\n public deletePoItem(requestId: string | number, poItem: PopProductionPoModel): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.delete-po-header', {number: poItem.id}),\n this.translate.instant(\n poItem.sowCreated ? 'module.requests.po.modal.delete-po-desc' : 'module.requests.po.modal.delete-po-desc2'\n ),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.popProductionService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.po.po-deleted', {id: poItem.id}));\n })\n );\n }\n\n public deleteSOWItem(\n requestId: string | number, poItem: PopProductionPoModel,\n dialogRef?: MatDialogRef,\n shouldShowSuccessMessage: boolean = true,\n ): void {\n if (shouldShowSuccessMessage) {\n this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.sow.modal.delete-sow-header', {number: poItem.id}),\n this.translate.instant('module.requests.sow.modal.delete-sow-desc'),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.confirmDeleteSOW(requestId, poItem, dialogRef, shouldShowSuccessMessage);\n }\n });\n } else {\n this.confirmDeleteSOW(requestId, poItem, dialogRef, shouldShowSuccessMessage);\n }\n }\n\n private confirmDeleteSOW(\n requestId: string | number, poItem: PopProductionPoModel,\n dialogRef?: MatDialogRef,\n shouldShowSuccessMessage: boolean = true): void {\n const item = {...poItem, sowCreated: false};\n this.popProductionService.updatePO(requestId, item.id, item)\n .subscribe(() => {\n if (dialogRef) {\n dialogRef.close();\n }\n\n if (shouldShowSuccessMessage) {\n this.messageService.showSystemMessage('success', null,\n this.translate.instant('common.message.sow-deleted'));\n }\n });\n }\n\n public onClosePO(dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number): void {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'PO'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSuccess(dialogRef, requestId);\n }\n });\n } else {\n this.onCloseSuccess(dialogRef, requestId);\n }\n }\n\n private onCloseSuccess(dialogRef: MatDialogRef, requestId: string | number): void {\n dialogRef.close();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: requestId as string}));\n this.popProductionService.callPO(requestId);\n }\n\n public onCloseSOW(\n dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number,\n filesChanged: boolean,\n poItem: PopProductionPoModel): void {\n if (showModal || (filesChanged && !poItem.sowCreated)) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'SOW'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSOWSuccess(poItem, dialogRef, filesChanged, requestId);\n }\n });\n } else {\n this.onCloseSOWSuccess(poItem, dialogRef, filesChanged, requestId);\n }\n }\n\n private onCloseSOWSuccess(\n poItem: PopProductionPoModel, dialogRef: MatDialogRef, filesChanged: boolean, requestId: string | number): void {\n if (poItem.sowCreated) {\n dialogRef.close();\n if (filesChanged) {\n this.popProductionService.callPO(requestId);\n }\n } else {\n this.deleteSOWItem(requestId, poItem, dialogRef, false);\n }\n }\n}\n","\n
\n \n {{ 'module.requests.pop-prod.details.version-name' | translate }}\n {{ i + 1 }}\n :\n \n {{ version.name }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.version-qty' | translate }}:\n {{ version.quantity }}\n
\n\n\n
0)\" class=\"p-0 row fs-sm no-wrap {{ parentClass }}\">\n
\n \n {{ 'module.requests.pop-prod.details.version-name' | translate }}:\n \n {{ item.versionName }}\n
\n
\n \n {{ 'module.requests.pop-prod.details.version-number' | translate }}:\n \n {{ item.versionNumber }}\n
\n
\n \n {{ 'module.requests.pop-prod.details.production-qty' | translate }}:\n \n {{ item.productionQuantity }}\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { PopProductionRequestItemModel } from 'src/app/requests/models/pop-production-request.model';\n\n@Component({\n selector: 'app-pop-prod-version-list',\n templateUrl: './pop-prod-version-list.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdVersionListComponent {\n\n @Input() item: PopProductionRequestItemModel;\n @Input() childClass: string;\n @Input() parentClass = '';\n @Input() topMarginClass = 'mt-1';\n\n}\n","
\n
\n
\n \n {{'module.requests.finance.ship-to' | translate}}\n 0\"> {{shipmentIndex+1}}:\n {{shipment.warehouse.name}}\n
\n
\n {{'module.requests.po.qty' | translate}}:\n {{shipment.quantity}}\n
\n
\n
\n
\n
\n address\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n contact\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'app-item-shipment-form',\n templateUrl: './item-shipment-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ItemShipmentFormComponent {\n @Input() public shipment;\n @Input() public shipmentForm: FormGroup;\n @Input() public shipmentIndex: number;\n @Input() public poItemIndex: number;\n\n}\n","
\n
\n

\n PO â„–{{ dialogData.po?.id }}\n {{'module.requests.po.new-po' | translate}}\n

\n\n
\n \n\n \n\n \n\n \n \n
\n
\n\n \n
\n \n\n
\n {{'module.requests.po.accounting-info' | translate}}\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n\n \n\n
\n {{'module.requests.po.printer-info' | translate}}:\n
\n \n
\n\n \n \n
\n\n \n\n
\n {{'module.requests.finance.merchant-details' | translate}}:\n\n
\n
\n {{'module.requests.pop-prod.item.merchant-name-only' | translate}}:\n \n \n {{ merchant.name }}, \n \n \n
\n
\n
\n\n \n\n
\n {{'module.requests.po.item-info' | translate}}\n \n
\n
\n

\n {{'module.requests.po.item-info' | translate}}\n \n

\n\n \n \n
\n
\n\n
\n
\n \n
\n \n\n \n
\n\n
\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{item.wpn}}\n
\n\n
\n {{'module.requests.po.qty-each' | translate}}:\n {{ item.itemQuantity }}\n
\n\n
\n {{'module.requests.po.unit-price' | translate}}:\n {{\n (item.costEstimate && item.itemQuantity ? item.costEstimate / item.itemQuantity : 0) | currency\n }}\n
\n\n
\n {{'module.requests.po.item-subtotal' | translate}}:\n \n {{ (item.costEstimate ? item.costEstimate : 0) | currency }}\n \n
\n
\n\n \n\n
\n {{ 'module.requests.pop-prod.details.direct-shipment' | translate }}\n
\n\n
\n \n
\n\n
\n {{ 'module.requests.pop-prod.details.shipping-instructions' | translate }}:\n {{ item.shippingInstructions }}\n
\n
\n
\n
\n\n
\n \n \n
\n
\n
\n
\n\n \n\n
\n {{'module.requests.po.special' | translate}}\n\n
\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.funding-type' | translate }}:\n {{ utilsService.getItemName(dialogData.fundingList, dialogData.request.details.fundingTypeCode) }}\n
\n
\n {{ 'module.requests.pop-prod.details.funding-code' | translate }}:\n {{ dialogData.request.details.fundingCode }}\n
\n
\n
\n\n
\n
\n
{{'module.requests.po.total-quantity' | translate}}:
\n
\n {{ totalQty }}\n
\n
\n\n
\n
{{'module.requests.po.sub-total' | translate}}:
\n
\n {{ subTotal | currency }}
\n
\n\n
\n
{{'module.requests.pop-prod.item.misc-cost-estimate' | translate}}:
\n
\n \n
\n
\n\n
\n
{{'module.requests.po.total' | translate}}:
\n
\n {{ total | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n\n
\n {{'module.requests.po.stakeholders'|translate}}\n
\n \n \n \n

{{'module.requests.po.notice' | translate}}

\n
\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport { Observable, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\nimport { Events, EventService } from '../../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../../shared/services/message-service.service';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { MAX_POP_PROD_COST_TOTAL } from '../../../../../constants/request-details.constants';\nimport { PopProductionPoModel } from '../../../../../models/pop-production-po.model';\nimport { PopProductionRequestItemModel } from '../../../../../models/pop-production-request.model';\nimport { PoAccountingService } from '../../../../../services/po-accounting.service';\nimport { PopProductionService } from '../../../../../services/pop-production.service';\nimport { PpPoSowManageService } from '../../../../../services/pp-po-sow-manage.service';\nimport { PopProdPoDialogData } from '../pop-prod-po-dialog-data.model';\n\n@Component({\n selector: 'app-pop-prod-po-form',\n templateUrl: './pop-prod-po-form.component.html',\n styleUrls: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PpPoSowManageService]\n})\nexport class PopProdPoFormComponent implements OnInit, OnDestroy {\n public poForm: FormGroup;\n public itemsArr: FormArray;\n public dialogData: PopProdPoDialogData;\n public availableItems: PopProductionRequestItemModel[] = [];\n public isPoProcessing = false;\n testId = 'pop_prod_po_form';\n\n private poDetailsCopy: PopProductionPoModel;\n private maxPopProdCostTotal = new BigJs(MAX_POP_PROD_COST_TOTAL);\n private ngUnsubscribe = new Subject();\n\n constructor(\n public utilsService: UtilsService,\n @Inject(MAT_DIALOG_DATA) private data: PopProdPoDialogData,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n private eventService: EventService,\n private poSowManageService: PpPoSowManageService,\n private popProductionService: PopProductionService,\n private popProdService: PopProductionService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private dialogRef: MatDialogRef,\n private poAccountingService?: PoAccountingService\n ) {}\n\n public ngOnInit(): void {\n this.dialogData = cloneDeep(this.data);\n\n this.dialogData.printerList = this.dialogData.printerList.map(item => ({value: item, name: item.name}));\n this.dialogData.request.items = this.dialogData.request.items.map(item => ({...item, itemDescription: this.getItemDescription(item)}));\n\n this.buildPOForm();\n this.itemsArr = this.poForm.get('items') as FormArray;\n this.poForm.patchValue(this.dialogData.po);\n this.setPrinter();\n\n this.cd.markForCheck();\n\n if (!this.dialogData.po.id) {\n this.poForm.get('billingInfo').patchValue(this.dialogData.request.details);\n }\n\n this.dialogData.items.forEach(item => {\n this.itemsArr.push(this.getShipmentsGroup(item));\n });\n\n if (this.dialogData.isDisabled) {\n this.poForm.disable({emitEvent: false});\n }\n\n this.setAvailableItems();\n this.poDetailsCopy = cloneDeep({...this.dialogData.po, ...this.getPreparedForm()});\n\n this.poForm.get('printerInfo.name').statusChanges.subscribe(status => {\n if (status === 'VALID') {\n const printerInfo = {...this.poForm.get('printerInfo.name').value};\n this.poForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n }\n });\n\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onSave(): void {\n this.eventService.emit({eventName: Events.PoSubmit});\n\n this.poForm.get('billingInfo').patchValue({\n totalQuantity: this.totalQty,\n total: this.total,\n subTotal: this.subTotal\n });\n\n if (this.poForm.valid && !this.isTotalMaxError) {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n }\n }\n\n public deletePO(): void {\n this.isPoProcessing = true;\n this.poSowManageService.deletePoItem(this.dialogData.requestId, this.dialogData.po).subscribe(\n {\n next: () => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n }\n );\n }\n\n public closePO(): void {\n let isDataChanged = false;\n if (!this.dialogData.isDisabled) {\n isDataChanged = !isEqualWith({...this.dialogData.po, ...this.getPreparedForm()}, this.poDetailsCopy, (obj1, obj2) => {\n if ((obj1 === null && obj2 === '') || (obj1 === '' && obj2 === null)) {\n return true;\n }\n if ((typeof obj1 === 'number' && typeof obj2 === 'string') || (typeof obj1 === 'string' && typeof obj2 === 'number')) {\n return Number(obj1) === Number(obj2);\n }\n });\n }\n\n this.poSowManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n public onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.setAvailableItems();\n }\n\n public onAddItem(itemsToAdd: PopProductionRequestItemModel[]): void {\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.getShipmentsGroup(item));\n });\n\n this.setAvailableItems();\n }\n\n public getPrinterLabel(printer: any): string {\n return printer.name;\n }\n\n public getShipmentsArr(itemIdx: number): FormArray {\n return this.itemsArr.get(`${itemIdx}.shipments`) as FormArray;\n }\n\n public get totalQty(): number {\n return this.dialogData.items.reduce((prev, curr) => prev + curr.itemQuantity, 0);\n }\n\n public get subTotal(): number {\n return this.dialogData.items.reduce((prev, curr) => prev + Number(curr?.costEstimate || 0), 0);\n }\n\n public get total(): number {\n return this.subTotal + Number(this.poForm.get('billingInfo.miscCostEstimate').value);\n }\n\n public get isTotalMaxError(): boolean {\n return new BigJs(this.total).gt(this.maxPopProdCostTotal);\n }\n\n private buildPOForm(): void {\n this.poForm = this.fb.group({\n accountingInfo: this.fb.group({\n channel: [null, Validators.required],\n company: [null, Validators.required],\n inventoryType: [null, Validators.required],\n lineOfBusiness: [null, Validators.required]\n }),\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null)\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null)\n }),\n name: this.fb.control(null, [Validators.required, UtilsService.printerInfoValidationFn()]),\n mdmId: this.fb.control(null),\n id: this.fb.control(null)\n }),\n billingInfo: this.fb.group({\n miscCostEstimate: [null],\n totalQuantity: [null],\n subTotal: [null],\n total: [null]\n }),\n items: this.fb.array([]),\n instructions: [null],\n stakeholders: this.fb.group({\n approver3: this.fb.control(null)\n })\n });\n }\n\n private getShipmentsGroup(item: PopProductionRequestItemModel): FormGroup {\n return this.fb.group({\n shipments: this.fb.array(\n item.shipments.map(shipment =>\n this.fb.group({\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: [shipment?.warehouse?.address?.addressLine1 || null],\n addressLine2: [shipment?.warehouse?.address?.addressLine2 || null],\n city: [shipment?.warehouse?.address?.city || null],\n country: [shipment?.warehouse?.address?.country || null],\n postalCode: [shipment?.warehouse?.address?.postalCode || null],\n stateProvince: [shipment?.warehouse?.address?.stateProvince || null]\n }),\n contact: this.fb.group({\n email: [shipment?.warehouse?.contact?.email || null],\n phone: [shipment?.warehouse?.contact?.phone || null],\n cell: [shipment?.warehouse?.contact?.cell || null],\n attention: [shipment?.warehouse?.contact?.attention || null]\n })\n })\n })\n )\n )\n });\n }\n\n private getPreparedForm(): any {\n const form = this.poForm.getRawValue();\n\n form.items = form.items.map((item, itemIdx) => {\n const newItem = {...this.dialogData.items[itemIdx]};\n newItem.shipments = newItem.shipments.map((shipment, shipmentIdx) => {\n const newShipment = {...shipment};\n\n if (newShipment?.warehouse?.name) {\n newShipment.warehouse.address = form.items[itemIdx].shipments[shipmentIdx].warehouse.address;\n newShipment.warehouse.contact = form.items[itemIdx].shipments[shipmentIdx].warehouse.contact;\n }\n\n return newShipment;\n });\n\n return newItem;\n });\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo?.id || null;\n form.fundingCode = this.dialogData.request.details.fundingCode;\n form.fundingTypeCode = this.dialogData.request.details.fundingTypeCode;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private saveOrUpdatePO(form): void {\n const poSource = this.dialogData.po.id\n ? this.popProductionService.updatePO(this.dialogData.requestId, this.dialogData.po.id, {...this.dialogData.po, ...form})\n : this.popProductionService.createPO(this.dialogData.requestId, form);\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource.pipe(take(1)).subscribe({\n next: (newPo: PopProductionPoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n }\n );\n }\n\n private onSuccessPO(po: PopProductionPoModel): void {\n this.dialogData.po = {...po};\n this.setPrinter();\n\n this.poDetailsCopy = cloneDeep({...this.dialogData.po, ...this.getPreparedForm()});\n\n this.messageService.showSystemMessage('success', this.translate.transform('common.message.po-saved'), null);\n }\n\n private setPrinter(): void {\n const printer = this.dialogData.printerList.find(item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId);\n this.poForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n\n private setAvailableItems(): void {\n this.availableItems = this.dialogData.request.items.filter(\n item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id)\n );\n }\n\n private getItemDescription(item: PopProductionRequestItemModel): string {\n return item.wpnDescription || item.itemDescription;\n }\n\n public onPrintPo(requestId: string, poId: number, type: string): void {\n this.popProdService.downloadPoPdf(requestId, poId, type);\n }\n}\n","\n
\n \n {{'module.requests.pop-prod.details.wpn-description' | translate}}:\n {{item.wpnDescription}}\n \n \n {{'module.requests.pop-prod.details.item-description' | translate}}:\n {{item.itemDescription}}\n \n
\n\n
\n
\n
\n {{ 'module.requests.text.delivery-date' | translate }}:\n {{ item?.deliveryDate | date : 'MM/dd/yyyy' }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.qty-in-eaches' | translate }}:\n {{ item.itemQuantity }}\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.packing-type' | translate }}:\n \n {{ 'module.requests.pop-prod.details.kit-type' | translate }}\n {{ 'module.requests.pop-prod.details.bulk-type' | translate }}\n \n
\n\n \n
\n \n {{ 'module.requests.pop-prod.details.kit-shipping' | translate }}:\n \n {{ 'module.requests.pop-prod.details.direct-shipping' | translate }}\n {{ 'module.requests.pop-prod.details.bulk-shipping' | translate }}\n \n \n
\n\n
\n {{ 'module.requests.pop-prod.details.kit-labeling' | translate }}:\n \n {{ (item.kitLabeling? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.kit-comments' | translate }}:\n {{ kitLabelingComments }}\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.usage-duration' | translate }}:\n {{ item.usageDuration }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.duration-type' | translate }}:\n {{ durationType }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.item-type' | translate }}:\n {{ itemType }}\n
\n
\n\n
\n

{{'module.requests.pop-design.details.dimensions' | translate}}:

\n\n
\n
\n {{ 'module.requests.pop-prod.details.unit-of-measure' | translate }}:\n {{ dimensionType }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.width' | translate }}:\n {{ width }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.height' | translate }}:\n {{ height }}\n
\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.color' | translate }}:\n {{ colorType }}\n
\n\n \n
= 0\">\n {{ 'module.requests.pop-prod.details.color-cyan' | translate }}:\n {{ item.cmykC }}\n
\n\n
= 0\">\n {{ 'module.requests.pop-prod.details.color-magenta' | translate }}:\n {{ item.cmykM }}\n
\n\n
= 0\">\n {{ 'module.requests.pop-prod.details.color-yellow' | translate }}:\n {{ item.cmykY }}\n
\n\n
= 0\">\n {{ 'module.requests.pop-prod.details.color-key' | translate }}:\n {{ item.cmykK }}\n
\n
\n
\n\n\n \n
\n
\n {{ 'module.requests.pop-prod.details.pantone-details' | translate }}:\n {{ item.pantoneDetails }}\n
\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.bleed' | translate }}:\n \n {{ (item.bleed ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n\n
\n {{ 'module.requests.pop-prod.details.sides-number' | translate }}:\n \n 1\n 2\n \n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.material' | translate }}:\n {{ materialType }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.cutting' | translate }}:\n {{ cuttingType }}\n
\n\n
\n {{ 'module.requests.pop-prod.details.tape' | translate }}:\n {{ tapeType }}\n
\n
\n\n
\n
\n \n {{ 'module.requests.pop-prod.details.specify-note' | translate }}:\n {{ item.materialNotes }}\n \n
\n\n
\n \n {{ 'module.requests.pop-prod.details.specify-note' | translate }}:\n {{ item.cuttingNotes }}\n \n
\n\n
\n \n {{ 'module.requests.pop-prod.details.specify-note' | translate }}:\n {{ item.tapeNotes }}\n \n
\n
\n\n
\n \n
\n\n \n
\n\n\n\n
\n
\n {{ 'module.requests.pop-prod.details.direct-shipment' | translate }}\n
\n
\n\n
\n \n
\n
\n
\n \n {{ 'module.requests.pop-prod.details.ship-to' | translate }}:\n {{ warehouseName }}\n \n
\n
\n {{ 'module.requests.pop-prod.details.qty' | translate }}:\n {{ qty }}\n
\n
\n\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.address1' | translate }}:\n {{ shipment?.warehouse?.address.addressLine1 }}\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.address2' | translate }}:\n {{ shipment?.warehouse?.address.addressLine2 }}\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.city' | translate }}:\n {{ shipment?.warehouse?.address.city }}\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.state' | translate }}:\n {{ shipment?.warehouse?.address.stateProvince }}\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.zip' | translate }}:\n {{ shipment?.warehouse?.address.postalCode }}\n \n
\n
\n {{ 'module.requests.pop-prod.details.country' | translate }}:\n {{ shipment?.warehouse?.address.country }}\n
\n
\n
\n\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.attention' | translate }}:\n {{ shipment?.warehouse?.contact.attention }}\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.email' | translate }}:\n {{ shipment?.warehouse?.contact.email }}\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.phone' | translate }}:\n {{ shipment?.warehouse?.contact.phone }}\n \n
\n
\n {{ 'module.requests.pop-prod.details.cell' | translate }}:\n {{ shipment?.warehouse?.contact.cell }}\n
\n
\n
\n
\n
\n
\n\n
\n
\n {{ 'module.requests.pop-prod.details.shipping-instructions' | translate }}:\n {{ instruction }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { combineLatest, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ColorTypes } from 'src/app/requests/constants/color-types.constant';\nimport { PopProductionRequestItemModel, PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\nimport {\n selectPopProdUsageDurationTypes,\n selectDimensionTypes,\n selectColorTypes,\n selectPopProdCuttingTypes,\n selectPopProdMaterialTypes,\n selectPopProdTapeTypes,\n selectPopProdItemTypes\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\n@Component({\n selector: 'app-pop-prod-sow-form-info',\n templateUrl: './pop-prod-sow-form-info.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdSowFormInfoComponent implements OnInit, OnDestroy {\n @Input() public request: PopProductionRequestModel;\n @Input() public item: PopProductionRequestItemModel;\n @Input() public itemIndex: number;\n\n private ngUnsubscribe = new Subject();\n\n colorTypesEnum = ColorTypes;\n durationType: string;\n dimensionType: string;\n colorType: string;\n cuttingType: string;\n materialType: string;\n tapeType: string;\n itemType: string;\n\n refData$ = combineLatest([\n this.store.pipe(select(selectPopProdUsageDurationTypes), filter(v => v?.length > 0)),\n this.store.pipe(select(selectDimensionTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectColorTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdCuttingTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdMaterialTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdTapeTypes), filter(v => v.length > 0)),\n this.store.pipe(select(selectPopProdItemTypes), filter(v => v.length > 0)),\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(\n private store: Store,\n public utilsService: UtilsService,\n ) {}\n\n ngOnInit(): void {\n this.initRefData();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n get isKitLabelingValid(): boolean {\n return typeof this.item?.kitLabeling === 'boolean';\n }\n\n private initRefData(): void {\n this.refData$.subscribe(([durations, dimensions, colors, cuttings, materials, tapes, itemTypes]) => {\n this.durationType = this.utilsService.getItemName(durations, this.item?.usageDurationTypeCode);\n this.dimensionType = this.utilsService.getItemName(dimensions, this.item?.dimensionTypeCode);\n this.colorType = this.utilsService.getItemName(colors, this.item?.colorTypeCode);\n this.cuttingType = this.utilsService.getItemName(cuttings, this.item?.cuttingTypeCode);\n this.materialType = this.utilsService.getItemName(materials, this.item?.materialTypeCode);\n this.tapeType = this.utilsService.getItemName(tapes, this.item?.tapeTypeCode);\n this.itemType = this.utilsService.getItemName(itemTypes, this.item?.itemTypeCode);\n });\n }\n\n}\n","
\n
\n

SOW â„–{{ po.id }}

\n\n
\n \n\n \n\n \n\n \n
\n
\n\n \n\n \n
\n
\n {{ 'module.requests.sow.request' | translate }}:\n {{ 'module.requests.details.print-production-manager' | translate }}:\n {{'module.requests.po.printer' | translate}}:\n {{'module.requests.po.merchant' | translate}}:\n
\n
\n {{ po.requestName }}\n \n {{ po.stakeholders.buyer.firstName }} {{ po.stakeholders.buyer.lastName }}\n \n {{ po.printerInfo.name }}\n \n \n {{ merchant.name }}, \n \n \n
\n
\n\n \n\n
\n
\n {{ 'module.requests.sow.sow-information' | translate }}\n\n \n
\n\n
\n \n
\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { first, finalize } from 'rxjs/operators';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { EventService, Events } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { ItemShipments } from '../../../../../models/request-item.model';\nimport { SowFormComponent } from '../../../card-production/po-sow/sow-form/sow-form.component';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { PopProductionPoModel } from 'src/app/requests/models/pop-production-po.model';\nimport { PpPoSowManageService } from 'src/app/requests/services/pp-po-sow-manage.service';\nimport { PopProductionService } from 'src/app/requests/services/pop-production.service';\nimport { Store } from '@ngrx/store';\nimport { lazyLoadPopProdCuttingTypes, lazyLoadPopProdMaterialTypes, lazyLoadPopProdTapeTypes, lazyLoadColorTypes, lazyLoadDimensionTypes, lazyLoadPopProdUsageDurationTypes } from 'src/app/reducers/ref-data/refdata.actions';\nimport { PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\n\n@Component({\n selector: 'app-pop-prod-sow-form',\n templateUrl: './pop-prod-sow-form.component.html',\n styleUrls: ['./pop-prod-sow-form.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PpPoSowManageService],\n})\nexport class PopProdSowFormComponent implements OnInit {\n public request: PopProductionRequestModel;\n public po: PopProductionPoModel;\n public fileTypes = FILE_TYPES;\n public sowForm: FormGroup;\n isDisabled: boolean;\n\n constructor(\n private store: Store,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private translate: TranslatePipe,\n private eventService: EventService,\n private messageService: MessageService,\n private popProdService: PopProductionService,\n private poSowManageService: PpPoSowManageService,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private modalData: any,\n ) {\n }\n\n public ngOnInit(): void {\n this.initRefdata();\n this.setPo(this.modalData.po);\n this.request = {...this.modalData.request};\n this.isDisabled = this.modalData.isDisabled;\n\n this.setInitialShipments();\n\n this.sowForm = this.fb.group({\n total: this.fb.control({ value: this.po.billingInfo?.total || 0, disabled: true }),\n items: this.fb.array(this.po.items.map(item => this.fb.control(item))),\n });\n }\n\n public setPo(po: any) {\n this.po = {\n ...this.po,\n ...po,\n };\n // BE do not return nulls in response, so set it manually\n this.po.items?.forEach(item => {\n item.shipments?.forEach(shipment => {\n shipment.quantity = shipment.quantity || null;\n\n shipment.warehouse = {\n ...shipment.warehouse,\n mdmId: shipment?.warehouse?.mdmId || null,\n name: shipment.warehouse?.name || null,\n address: {\n ...shipment?.warehouse?.address,\n addressLine1: shipment?.warehouse?.address?.addressLine1 || null,\n addressLine2: shipment?.warehouse?.address?.addressLine2 || null,\n addressLine3: shipment?.warehouse?.address?.addressLine3 || null,\n city: shipment?.warehouse?.address?.city || null,\n country: shipment?.warehouse?.address?.country || null,\n postalCode: shipment?.warehouse?.address?.postalCode || null,\n stateProvince: shipment?.warehouse?.address?.stateProvince || null,\n },\n contact: {\n ...shipment?.warehouse?.contact,\n attention: shipment?.warehouse?.contact?.attention || null,\n cell: shipment?.warehouse?.contact?.cell || null,\n email: shipment?.warehouse?.contact?.email || null,\n phone: shipment?.warehouse?.contact?.phone || null,\n },\n };\n });\n });\n }\n\n public deleteSOW(shouldShowSuccessMessage?: boolean): void {\n this.poSowManageService.deleteSOWItem(this.request.id, this.po, this.dialogRef, shouldShowSuccessMessage);\n }\n\n public onSave(): void {\n const poToSave = this.getPreparedForm();\n\n this.popProdService.updatePO(this.request.id, poToSave.id, poToSave)\n .pipe(\n first(),\n finalize(() => this.cd.markForCheck()),\n )\n .subscribe((data) => {\n this.setPo(data);\n this.messageService.showSystemMessage('success', null, this.translate.transform('common.message.sow-saved'));\n });\n }\n\n public onClose(): void {\n this.poSowManageService.onCloseSOW(this.dialogRef, false, this.request.id, false, this.po);\n }\n\n private initRefdata(): void {\n this.store.dispatch(lazyLoadPopProdUsageDurationTypes());\n this.store.dispatch(lazyLoadPopProdCuttingTypes());\n this.store.dispatch(lazyLoadPopProdMaterialTypes());\n this.store.dispatch(lazyLoadPopProdTapeTypes());\n this.store.dispatch(lazyLoadColorTypes());\n this.store.dispatch(lazyLoadDimensionTypes());\n }\n\n private getEmptyShipmentItem(): ItemShipments {\n return {\n quantity: null,\n warehouse: {\n mdmId: null,\n name: null,\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n postalCode: null,\n stateProvince: null,\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null,\n },\n },\n };\n }\n\n private setInitialShipments(): void {\n this.po.items?.forEach(item => {\n if (!item.shipments?.length) {\n item.shipments = [\n this.getEmptyShipmentItem(),\n ];\n }\n });\n }\n\n public printSOW(requestId: string | number, poId: number, type: string): void {\n this.popProdService.downloadPoPdf(requestId, poId, type);\n }\n\n private getPreparedForm(): any {\n const poToSave = cloneDeep({\n ...this.po,\n sowCreated: true,\n });\n\n this.eventService.emit({eventName: Events.SowSubmit});\n\n return poToSave;\n }\n}\n","
\n \n
\n \n \n\n \n \n\n \n\n \n
\n
\n\n\n
\n {{'module.requests.pop-prod.details.wpn-description' | translate}}:\n {{reqItem.wpnDescription}}\n
\n\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{wpn}}\n
\n
\n
\n\n\n
\n {{'module.requests.pop-prod.details.item-description' | translate}}:\n {{ item.itemDescription }}\n
\n
\n\n\n \n
\n
\n  \n {{'module.requests.pop-prod.details.direct-shipment' | translate}}\n
\n
\n {{'module.requests.pop-prod.details.qty' | translate}}.\n {{item.itemQuantity}}\n
\n
\n\n \n
\n {{'module.requests.finance.ship-to' | translate}}:\n {{'module.requests.po.qty' | translate}}:\n
\n\n
\n
\n {{shipmentItem?.warehouse?.name}}\n \n
\n
\n {{shipmentItem?.quantity}}\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { PopProductionRequestItemModel, PopProductionRequestModel } from 'src/app/requests/models/pop-production-request.model';\n\n@Component({\n selector: 'app-pop-prod-po-sow-item-info',\n templateUrl: './pop-prod-po-sow-item-info.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopProdPoSowItemInfoComponent implements OnDestroy {\n\n @Input() request: PopProductionRequestModel;\n @Input() reqItem: PopProductionRequestItemModel;\n @Input() isLast: boolean;\n\n private ngUnsubscribe = new Subject();\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","\n \n\n\n
\n
\n {{'module.requests.text.purchase-orders' | translate}}\n \n
\n\n \n
\n
\n
\n \n
\n
\n
\n
\n \n\n \n
\n \n
\n\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n
\n\n\n
\n
\n {{label | translate}}\n
\n \n \n\n \n \n \n \n \n
\n
\n
\n
\n
\n {{'common.button.printer' | translate}}:\n {{'module.requests.po.company' | translate}}:\n
\n
\n {{poItemDetails.printerInfo?.name}}\n {{getItemName(companyList, poItemDetails.accountingInfo?.company)}}\n
\n
\n {{'module.requests.po.date' | translate}}:\n {{'module.requests.po.total-qty' | translate}}:\n
\n
\n {{poItemDetails?.sowCreatedAt | date : 'MM/dd/yyyy' | uppercase}}\n {{poItemDetails?.createdAt | date : 'MM/dd/yyyy' | uppercase}}\n {{poItemDetails?.billingInfo?.totalQuantity}}\n
\n
\n
\n \n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport {filter, pluck, takeUntil, takeWhile} from 'rxjs/operators';\nimport { POP_PRODUCTION_REQUEST } from 'src/app/requests/constants/request-types.constant';\nimport { ProductionPoModel } from 'src/app/requests/models/production-po.model';\nimport {\n PopProductionRequestItemModel,\n PopProductionRequestModel,\n} from 'src/app/requests/models/pop-production-request.model';\nimport { selectPopProductionRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { Events, EventService } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport {\n selectChannelTypes,\n selectCompanies,\n selectPartnerGroups,\n selectPopProdFundingTypes,\n selectPopProdInventoryTypes,\n selectPrinters,\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { PopProdPoFormComponent } from './pop-prod-po-form/pop-prod-po-form.component';\nimport { PopProdPoDialogData } from './pop-prod-po-dialog-data.model';\nimport { PopProductionService } from '../../../../services/pop-production.service';\nimport {\n lazyLoadChannelTypes,\n lazyLoadCompanies,\n lazyLoadPartnerGroups,\n lazyLoadPopProdEventTypes, lazyLoadPopProdFundingTypes,\n lazyLoadPopProdInventoryTypes,\n lazyLoadPopProdItemTypes,\n lazyLoadPrinters,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport { PpPoSowManageService } from '../../../../services/pp-po-sow-manage.service';\nimport { PopProductionPoModel } from '../../../../models/pop-production-po.model';\nimport { PopProdSowFormComponent } from './pop-prod-sow-form/pop-prod-sow-form.component';\nimport {isPPMSelectorState} from '../../../../../reducers/ppm/ppm.selectors';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {UserRoles} from '../../../../../shared/constants/user-roles.constant';\n\n@Component({\n selector: 'app-pop-prod-po-sow',\n templateUrl: './pop-prod-po-sow.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PpPoSowManageService],\n})\nexport class PopProdPoSowComponent extends AbstractRequestStepComponent implements OnInit , OnDestroy {\n\n private request: PopProductionRequestModel;\n // tslint:disable-next-line:no-unused-variable\n private requestItems: PopProductionRequestItemModel[] = [];\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n\n companyList: CodeNameModel[];\n inventoryList: CodeNameModel[];\n chnList: CodeNameModel[];\n lineOfBusinessList: CodeNameModel[];\n fundingList: CodeNameModel[];\n printerList: any[];\n isBlankState = false;\n poDataLoaded = false;\n poDetails: PopProductionPoModel[] = [];\n requestItemsLoaded = false;\n isUserPPM = false;\n userRoles = UserRoles;\n\n request$ = this.store\n .pipe(\n select(selectPopProductionRequestDetails),\n filter(request => request?.type === POP_PRODUCTION_REQUEST),\n takeUntil(this.ngUnsubscribe),\n );\n\n refData$ = combineLatest([\n this.store.select(selectCompanies).pipe(filter(v => v.length > 0)),\n this.store.select(selectPopProdInventoryTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0)),\n this.store.select(selectChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPrinters).pipe(filter(v => v.length > 0)),\n this.store.select(selectPopProdFundingTypes).pipe(filter(v => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private translate: TranslateService,\n private eventService: EventService,\n private utilsService: UtilsService,\n private modalService: ModalService,\n private messageService: MessageService,\n private popProductionService: PopProductionService,\n private poSowManageService: PpPoSowManageService,\n private stepActionsService: StepActionsService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadCompanies());\n this.store.dispatch(lazyLoadPopProdInventoryTypes());\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadChannelTypes());\n this.store.dispatch(lazyLoadPrinters());\n this.store.dispatch(lazyLoadPopProdEventTypes());\n this.store.dispatch(lazyLoadPopProdItemTypes());\n this.store.dispatch(lazyLoadPopProdFundingTypes());\n\n this.setPODetailsSubscription();\n this.setStepSubmitSubscription();\n\n this.request$.subscribe((req) => {\n this.request = req;\n this.requestItems = req.items;\n });\n\n this.refData$.subscribe((\n [companyList, inventoryList, lineOfBusinessList, chnList, printerList, fundingList]\n ) => {\n this.companyList = companyList;\n this.inventoryList = inventoryList;\n this.lineOfBusinessList = this.utilsService.getParentChild(cloneDeep(lineOfBusinessList));\n this.chnList = chnList;\n this.printerList = printerList;\n this.fundingList = fundingList;\n });\n\n this.store.select(isPPMSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isPPM')\n ).subscribe((isUserPPM) => {\n this.isUserPPM = isUserPPM;\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n }\n\n public onEdit(item: PopProductionPoModel, type: string): void {\n if (type === 'po') {\n this.openPO(item, 'edit');\n } else {\n this.addNewSOW(item);\n }\n }\n\n public onPrint(requestId: string, poId: number, type: string): void {\n this.popProductionService.downloadPoPdf(requestId, poId, type);\n }\n\n public onDelete(item: PopProductionPoModel, type: string): void {\n if (type === 'po') {\n this.poSowManageService.deletePoItem(this.requestId, item).subscribe();\n } else {\n this.poSowManageService.deleteSOWItem(this.requestId, item);\n }\n }\n\n public addNewPO(): void {\n this.openPO(this.emptyPo, 'new');\n }\n\n public addNewSOW(po: Partial): void {\n const data = {\n request: this.request,\n po,\n isDisabled: this.isDisabled && this.isUserPPM\n };\n\n this.modalService.openModal(PopProdSowFormComponent, data, 'sow-form-dialog');\n }\n\n public trackByPoItemFn(index: number, poItemDetails: ProductionPoModel) {\n return poItemDetails.id;\n }\n\n public getItemName(array, code: string): string {\n return this.utilsService.getItemName(array, code);\n }\n\n private openPO(po: PopProductionPoModel, type: 'new' | 'edit'): void {\n const data: PopProdPoDialogData = {\n po,\n requestId: this.requestId,\n request: this.request,\n companyList: this.companyList,\n inventoryList: this.inventoryList,\n chnList: this.chnList,\n lineOfBusinessList: this.lineOfBusinessList,\n printerList: this.printerList,\n fundingList: this.fundingList,\n items: type === 'new' ? this.request.items : po.items,\n isDisabled: this.isDisabled && this.isUserPPM\n };\n this.modalService.openModal(PopProdPoFormComponent, data, 'po-form-dialog', false);\n }\n\n private setPODetailsSubscription(): void {\n this.subscriptions.push(\n this.popProductionService.getPOListener()\n .subscribe(data => {\n if (data?.length) {\n this.poDetails = cloneDeep( data);\n this.poDetails.sort(this.utilsService.sortByDate);\n this.isBlankState = false;\n } else {\n this.poDetails = [];\n this.isBlankState = true;\n }\n this.poDataLoaded = true;\n this.cd.markForCheck();\n }));\n\n this.popProductionService.callPO(this.requestId);\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(Events.PoSowSubmitValidated, (elementRef) => {\n if (this.poDetails.length) {\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.StepApprove, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.po.po-required'),\n this.translate.instant('module.requests.po.po-stage-error'));\n }\n }));\n }\n\n private get emptyPo(): PopProductionPoModel {\n return {\n accountingInfo: { channel: null, company: null, inventoryType: null, lineOfBusiness: null },\n printerInfo: {\n address: {\n addressLine1: null, addressLine2: null, addressLine3: null, city: null,\n country: null, stateProvince: null, postalCode: null,\n },\n contact: {\n attention: null, cell: null, email: null, phone: null,\n },\n name: null, mdmId: null, id: null,\n },\n stakeholders: {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n },\n accountingSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n apSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n };\n }\n}\n","\n
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n
\n
\n
\n \n
\n
\n \n {{ 'module.requests.pop-prod.details.wpn-description' | translate }}:\n {{ item.wpnDescription }}\n \n \n {{ 'module.requests.pop-prod.details.item-description' | translate }}:\n {{ item.itemDescription }}\n \n
\n
\n
\n \n
\n \n\n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Action, ActionsSubject, select, Store } from '@ngrx/store';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, first, shareReplay, takeUntil } from 'rxjs/operators';\nimport { Events, EventService } from 'src/app/shared/services/event-service.service';\n\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport { selectPopProductionRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { PopProductionService } from '../../../../services/pop-production.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-pop-prod-vendor-proof',\n templateUrl: './pop-prod-vendor-proof.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdVendorProofComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n private ngUnsubscribe = new Subject();\n public requestDetails: any = {};\n private subscriptions: Subscription [] = [];\n\n public requestItems = [];\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public form: FormGroup;\n\n request$ = this.store.pipe(\n select(selectPopProductionRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private store: Store,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private popProductionService: PopProductionService,\n private actions: ActionsSubject,\n private messageService: MessageService,\n private eventService: EventService) {\n super();\n }\n\n ngOnInit(): void {\n this.initSubscriptions();\n this.buildUploadArtworkForm();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.isDisabled) {\n this.toggleform();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private initSubscriptions(): void {\n this.request$.subscribe(requestData => {\n if (requestData?.items?.length) {\n this.requestItems = cloneDeep(requestData.items);\n this.requestDetails = cloneDeep(requestData);\n }\n });\n\n this.subscriptions.push(\n this.eventService.on(Events.PpVendorProofSubmit, (action) => {\n this.stepSubmit(action.comment);\n })\n );\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n printerProofNotes: this.fb.control(this.requestDetails?.details?.printerProofNotes)\n });\n }\n\n private stepSubmit(comment?: string) {\n this.requestDetails.details.printerProofNotes = this.form.get('printerProofNotes')?.value;\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({requestId: this.requestId, details: this.requestDetails}));\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n first(),\n )\n .subscribe(() => {\n this.messageService.showSystemMessage('success', 'Step data was successfully saved', '');\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n });\n\n }\n\n private buildUploadArtworkForm(): void {\n this.requestItems.forEach(() => {\n this.fb.group({});\n });\n this.buildForm();\n this.toggleform();\n }\n\n private toggleform(): void {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n\n this.cd.markForCheck();\n }\n\n public uploadPrinterProofFunction = (file) => this.popProductionService.uploadItemPrinterProofForRequestItem(file, this.requestId );\n\n public removePrinterProofFunction = (attachmentId: string | number) => this.popProductionService.deletePrinterProof(this.requestId, attachmentId);\n\n public updateProofAttachments({ action, data }: { action: string; data: any }): void {\n if (action === 'add') {\n this.requestDetails.details.printerProofs.push(data);\n } else {\n const index = this.requestDetails.details.printerProofs\n .findIndex(item => item?.attachmentId === data.attachmentId);\n this.requestDetails.details.printerProofs.splice(index, 1);\n }\n }\n}\n","\n
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n\n
\n
\n {{ 'module.requests.pop-prod.item.printer-proofs' | translate }}\n \n
\n\n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport includes from 'lodash/includes';\nimport _map from 'lodash/map';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\n\nimport { Events, EventService, PopProductionEvents } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { ARTWORK_STATUSES } from '../../../../constants/artwork-file-statuses.constants';\nimport { selectPopProductionRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-pop-prod-vendor-proof-int',\n templateUrl: './pop-prod-vendor-proof-int.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdVendorProofIntComponent extends AbstractRequestStepComponent implements OnInit {\n private ngUnsubscribe = new Subject();\n // tslint:disable-next-line:no-unused-variable\n private requestDetails: any = {};\n private subscriptions: Subscription [] = [];\n\n public requestItems = [];\n\n request$ = this.store.pipe(\n select(selectPopProductionRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(private store: Store,\n private messageService: MessageService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private translate: TranslateService) {\n super();\n }\n\n ngOnInit(): void {\n this.initSubscriptions();\n this.setStepSubmitSubscription();\n }\n\n private initSubscriptions(): void {\n this.request$.subscribe(requestData => {\n if (requestData?.items?.length) {\n this.requestItems = cloneDeep(requestData.items);\n this.requestDetails = cloneDeep(requestData);\n }\n });\n }\n\n public getApprovalStatus(items: any[]): string {\n const files = items.reduce((acc, i) => [...acc, i.printerProofReview], []);\n return UtilsService.getFilesAggregatedStatus(files);\n }\n\n private isAllPrinterProofsApproved(): boolean {\n const statuses = _map(this.requestItems, (item) => item.printerProofReview).map(review => review.status);\n const hasUnreviewed = includes(statuses, ARTWORK_STATUSES.unreviewed);\n const hasRejected = includes(statuses, ARTWORK_STATUSES.rejected);\n\n return !(hasUnreviewed || hasRejected);\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(PopProductionEvents.ReviewPrinterProofApproveValidation, (elementRef) => {\n\n if (this.isAllPrinterProofsApproved()) {\n this.stepActionsService.addReason(elementRef,\n 'step-approve', 'step-approve', PopProductionEvents.ReviewPrinterProofApprove, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.approve.approve-required'),\n this.translate.instant('module.requests.approve.approve-stage-error'));\n }\n }),\n this.eventService.on(PopProductionEvents.ReviewPrinterProofApprove, ({comment}) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n })\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {AtPrinterService} from './at-printer.service';\nimport {PrinterItemModel, MilestoneItem} from '../models/printer-item.model';\nimport {Observable, of} from 'rxjs';\nimport {API} from 'src/app/shared/constants/api.constants';\nimport {switchMap} from 'rxjs/operators';\nimport {HttpEventType} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PopProdAtPrinterService extends AtPrinterService {\n public getRequestPrinterWorkItems(requestId: string | number) {\n return this.errorHandlingHttpClient.get(`${API.getPopProductionRequestPrinterWorkItems(requestId)}`);\n }\n public updateMilestoneDetails(\n requestId: number | string,\n printerItem: PrinterItemModel,\n milestone: MilestoneItem,\n data: any\n ): Observable {\n return this.errorHandlingHttpClient.put(\n API.updatePopProdMilestoneDetails(requestId, printerItem.printerDetails.id, printerItem.id, milestone.id),\n data\n );\n }\n\n public uploadWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n file: File\n ): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n protected createWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n uploadId: string\n ): Observable {\n return this.errorHandlingHttpClient.post(\n `${API.createPopProductionWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId)}`,\n null,\n {\n reportProgress: true,\n observe: 'events',\n params: {uploadId}\n }\n );\n }\n\n public deleteWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n attachmentId: number\n ): Observable {\n return this.errorHandlingHttpClient.delete(\n `${API.deletePopProductionWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, attachmentId)}`\n );\n }\n\n public bulkUpdateAtPrinter(requestId: string, printerId: number, itemId: number, data: any): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.put(`${API.doPopProdBulkWorkItemMilestoneUpdate(requestId, printerId, itemId)}`, data);\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport isEqual from 'lodash/isEqual';\nimport { merge } from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {PrinterItemModel} from 'src/app/requests/models/printer-item.model';\nimport {MilestoneItem} from '../../../../../models/printer-item.model';\nimport {AtPrinterService} from '../../../../../services/at-printer.service';\nimport {FileUploadService} from '../../../../../services/file-upload.service';\nimport {PopProdAtPrinterService} from '../../../../../services/pop-prod-at-printer.service';\nimport { BulkChangeComponent } from '../../../common/bulk-change/bulk-change.component';\nimport {MilestoneDetailsPayload, PopBulkChangeComponentData, PopBulkChangeComponentResponse} from './pop-bulk-change.interface';\n\n@Component({\n selector: 'app-pop-bulk-change',\n templateUrl: './pop-bulk-change.component.html',\n styleUrls: ['./pop-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: PopProdAtPrinterService\n }\n ]\n})\nexport class PopBulkChangeComponent extends BulkChangeComponent implements OnInit {\n\n public bulkForm: FormGroup = this.fb.group(\n {\n shipDate: this.fb.control(null, []),\n estimatedArrivalDate: this.fb.control(null, []),\n completed: this.fb.control(false),\n files: this.fb.control([]),\n notes: this.fb.control('', [Validators.maxLength(10000)])\n },\n {\n updateOn: 'change',\n validators: (ac: AbstractControl) => {\n if (\n isEqual(ac.value, {\n shipDate: null,\n estimatedArrivalDate: null,\n completed: false,\n notes: '',\n files: []\n })\n ) {\n return {\n noChanges: true\n };\n }\n return null;\n }\n }\n );\n\n public resetErrorOnFormChange = this.bulkForm.valueChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.errorSubject.next(null);\n });\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: PopBulkChangeComponentData,\n private fb: FormBuilder,\n protected fileUploadService: FileUploadService,\n protected cd: ChangeDetectorRef,\n protected atPrinterService: AtPrinterService\n ) {\n super(cd, atPrinterService, fileUploadService);\n }\n\n public ngOnInit(): void {\n merge(...[\n this.bulkForm.get('completed').valueChanges,\n this.bulkForm.get('shipDate').valueChanges,\n this.bulkForm.get('estimatedArrivalDate').valueChanges\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.bulkForm.get('shipDate').updateValueAndValidity({emitEvent: false});\n this.bulkForm.get('estimatedArrivalDate').updateValueAndValidity({emitEvent: false});\n this.bulkForm.updateValueAndValidity();\n });\n }\n\n public onClose(): void {\n this.dialogRef.close(false);\n }\n\n public onCancel(): void {\n this.dialogRef.close(false);\n }\n\n public async onSubmit(): Promise {\n if (!this.bulkForm.valid) {\n return;\n }\n\n this.bulkForm.markAllAsTouched();\n this.bulkForm.updateValueAndValidity();\n const {files, ...details}: {files: (File & {progress: number})[]} & MilestoneDetailsPayload['details'] = this.bulkForm.getRawValue();\n\n this.loadingSubject.next(true);\n\n const uploadedFiles = await this.getUploadedFiles(files, this.dialogData.requestId);\n\n const payload: MilestoneDetailsPayload = {\n milestoneIds: this.dialogData.selectedItems.map(sI => sI.id),\n details: {\n ...details,\n notes: details.notes?.length ? details.notes : null\n },\n asnFileIds: uploadedFiles\n };\n\n this.getSubmitRequestObservable(payload, this.dialogData.requestId, this.dialogData.printerId, this.dialogData.itemId)\n .subscribe(response => {\n // lest skip response data and just simply trigger reload in the parent element\n this.dialogRef.close(response);\n });\n }\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n\n \n\n \n
\n \n {{ error?.error?.message }}\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n \n\n \n\n \n {{ 'module.requests.pop-prod.details.notes-will-be-overwritten' | translate }}\n \n\n \n\n
\n\n
\n \n \n \n  \n \n
\n \n
\n
\n \n {{ 'common.button.step-submit' | translate }}\n \n \n \n
\n
\n","
\n
\n
\n \n
\n
\n \n {{ 'module.requests.finance.wpn-description' | translate }}:\n {{ milestone.productItem.wpnDescription }}\n \n \n {{ 'module.requests.pop-prod.details.item-description' | translate }}:\n {{ milestone.productItem.itemDescription }}\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n \n\n \n \n\n \n \n\n\n \n \n \n\n \n
\n \n {{ label | translate }}\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ data }}\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n
\n\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { selectPopProdItemTypes } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../../shared/models/upload-file-restrictions.model';\nimport { STATUSES } from '../../../../../constants/request-statuses.constant';\nimport { MilestoneItem, PrinterItemModel } from '../../../../../models/printer-item.model';\nimport { selectRequestDetails } from '../../../../../reducers/request-details/request-details.selectors';\nimport { AtPrinterService } from '../../../../../services/at-printer.service';\n\n@Component({\n selector: 'app-pop-prod-printer-milestone',\n templateUrl: './pop-prod-printer-milestone.component.html',\n styleUrls: ['./pop-prod-printer-milestone.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PopProdPrinterMilestoneComponent implements OnInit, OnDestroy {\n @Input() public milestone: MilestoneItem;\n @Input() public requestId: string;\n @Input() public printerId: number;\n @Input() public itemId: number;\n @Input() public milestoneIndex: number;\n @Input() public printerIndex: number;\n @Input() public isDisabled: boolean;\n @Output() private milestoneCheck = new EventEmitter();\n @Output() private milestoneValuesChange = new EventEmitter();\n\n private formGroup: FormGroup;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n itemTypes$ = this.store.pipe(\n select(selectPopProdItemTypes),\n filter(types => types.length > 0),\n map(it => it.reduce((aggregate, itItem) => ({...aggregate, [itItem.code]: itItem.name}), {}))\n );\n\n private milestoneFormSubscriptions: Subscription[] = [];\n @Input() public set milestoneForm(milestoneForm: FormGroup) {\n this.formGroup = milestoneForm;\n this.milestoneFormSubscriptions.forEach(s => s.unsubscribe());\n this.milestoneFormSubscriptions = [];\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('estimatedArrivalDate').valueChanges,\n milestoneForm.get('estimatedArrivalDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: value,\n completed: this.milestone.details.completed,\n notes: milestoneForm.get('notes').value\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('shipDate').valueChanges,\n milestoneForm.get('shipDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n completed: this.milestone.details.completed,\n notes: milestoneForm.get('notes').value\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('notes').valueChanges,\n milestoneForm.get('notes').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n completed: this.milestone.details.completed,\n notes: value\n });\n })\n );\n\n if (this.milestone.details.completed || this.isDisabled) {\n milestoneForm.disable();\n }\n }\n public get milestoneForm(): FormGroup {\n return this.formGroup;\n }\n\n public status: {status: string};\n private ngUnsubscribe = new Subject();\n\n constructor(\n private store: Store,\n private atPrinterService: AtPrinterService\n ) {}\n\n public ngOnInit(): void {\n this.status = {\n status: this.milestone.details.completed ? STATUSES.COMPLETED : 'IN_PROGRESS'\n };\n\n this.store\n .select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(details => {\n if (details?.status === STATUSES.TERMINATED || this.isDisabled) {\n this.milestoneForm?.disable({emitEvent: false});\n } else if (details && !this.milestone.details.completed) {\n this.milestoneForm?.enable({emitEvent: false});\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public uploadFileFunction = (file: File) => this.atPrinterService.uploadWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n file\n );\n\n public removeFileFunction = (attachmentId: number) => this.atPrinterService.deleteWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n attachmentId\n );\n\n public updateMilestoneWithUploadedFile(obj: {action: string; data: any}): void {\n if (obj.action === 'add') {\n this.milestone.asnFiles.push(obj.data);\n } else {\n const index = this.milestone.asnFiles.findIndex(item => item?.id === obj.data);\n this.milestone.asnFiles.splice(index, 1);\n }\n }\n\n public onMilestoneCheck(isChecked: boolean): void {\n this.milestoneCheck.emit(isChecked);\n }\n\n public get isSelectDisabled(): boolean {\n return this.status.status === STATUSES.COMPLETED;\n }\n\n public getTestId(elementId: string): string {\n return `printer_${this.printerIndex}_milestone_${this.milestoneIndex}_${elementId}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest, Observable, ObservableInput, of, Subject } from 'rxjs';\nimport { catchError, filter, map, shareReplay, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport {\n CanPanelExpandState,\n mixinHasPanelExpandState,\n} from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport { Events } from 'src/app/shared/services/event-service.service';\n\nimport { API } from '../../../../../shared/constants/api.constants';\nimport { EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { MilestoneItem, PrinterItemModel } from '../../../../models/printer-item.model';\nimport { selectPopDesignRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { AtPrinterService } from '../../../../services/at-printer.service';\nimport { PopProdAtPrinterService } from '../../../../services/pop-prod-at-printer.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { AbstractRequestStepBase, WithRequestStepInputs } from '../../../request-step-details/abstract-request-step.class';\nimport { PopBulkChangeComponent } from './pop-bulk-change/pop-bulk-change.component';\nimport { PopBulkChangeComponentData, PopBulkChangeComponentResponse } from './pop-bulk-change/pop-bulk-change.interface';\n\ninterface PDFFile {\n fileName: string;\n id: number;\n type: string;\n}\n\ninterface PrinterItemModelView extends PrinterItemModel {\n isChecked: boolean;\n formPDFArray: PDFFile[];\n}\nclass PopProdPrintComponentBase extends AbstractRequestStepBase implements CanPanelExpandState {\n panelExpandInitializationStrategy = 'first' as const;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst _PopProdPrintComponentBase = WithRequestStepInputs(mixinHasPanelExpandState(PopProdPrintComponentBase));\n\n@Component({\n selector: 'app-pop-prod-print',\n templateUrl: './pop-prod-print.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: PopProdAtPrinterService\n }\n ],\n // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n inputs: ['requestId', 'isDisabled']\n})\nexport class PopProdPrintComponent extends _PopProdPrintComponentBase implements OnInit, OnDestroy {\n private get printerItems(): PrinterItemModelView[] {\n return this.printerItemsSubject.getValue();\n }\n\n constructor(\n private store: Store,\n private translate: TranslatePipe,\n private modalService: ModalService,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private atPrinterService: AtPrinterService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService\n ) {\n super();\n }\n\n private ngUnsubscribe = new Subject();\n private updateQueueSubject = new Subject<() => ObservableInput>();\n private updateQueue$ = this.updateQueueSubject.pipe(switchMap(e => e()));\n\n request$ = this.store.pipe(\n select(selectPopDesignRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n\n private printerItemsSubject = new BehaviorSubject(null);\n\n printerItems$ = this.printerItemsSubject.asObservable().pipe(\n filter(v => v != null),\n tap((pi) => {\n this.initExpandedPanels(pi);\n })\n );\n\n isBlankState$ = this.printerItems$.pipe(\n map(pi => pi.length === 0),\n startWith(true)\n );\n\n printerForm$ = this.printerItems$.pipe(\n map(pi =>\n this.fb.group({\n printerItems: this.fb.array(\n pi.map(printer =>\n this.fb.group({\n milestones: this.fb.array(\n printer.milestones.map(milestone =>\n this.fb.group({\n shipDate: this.fb.control(\n {\n value: milestone.details.shipDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n estimatedArrivalDate: this.fb.control(\n {\n value: milestone.details.estimatedArrivalDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n notes: this.fb.control(milestone.details.notes || '', {\n updateOn: 'blur',\n validators: [Validators.maxLength(10000)]\n })\n })\n )\n )\n })\n )\n )\n })\n ),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n\n checkedMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => milestone.isChecked)))\n );\n\n checkableMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => !milestone.details.completed)))\n );\n\n private setPrinterItems(printerItems: PrinterItemModel[]) {\n this.printerItemsSubject.next(\n printerItems.map(pi => ({\n /**\n * isChecked aggredated computed property\n */\n get isChecked(): boolean {\n const uncompletedRequests = (this.milestones as MilestoneItem[]).filter(m => !m.details.completed);\n /**\n * Checked if all checkable milestones are checked\n */\n return uncompletedRequests.reduce((c, m) => c && m.isChecked === true, uncompletedRequests.length >= 1);\n },\n set isChecked(isChecked: boolean) {\n this.milestones = this.milestones.map(m => ({...m, isChecked: m.details.completed ? false : isChecked}));\n },\n ...pi,\n milestones: pi.milestones.map(ms => ({...ms, isChecked: false})),\n formPDFArray: pi.purchaseOrderReferences.flatMap(ref => [\n {\n type: 'printer',\n id: ref.id,\n fileName: `PO #${ref.id}.pdf`,\n url: API.ppPoPdfDownload(this.requestId, ref.id, 'printer')\n },\n ...(ref.sowCreated\n ? [\n {\n type: 'sow',\n id: ref.id,\n fileName: `SOW #${ref.id}.pdf`,\n url: API.ppPoPdfDownload(this.requestId, ref.id, 'sow')\n }\n ]\n : [])\n ])\n }))\n );\n }\n\n ngOnInit(): void {\n this.request$\n .pipe(\n switchMap(request => this.atPrinterService.getRequestPrinterWorkItems(request.id)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n )\n .subscribe(printerItems => this.setPrinterItems(printerItems));\n\n this.updateQueue$\n .pipe(\n catchError(e => {\n console.error(e);\n return of();\n })\n )\n .subscribe();\n\n this.eventService.on(\n Events.AtPrinterSubmitValidated,\n elementRef => {\n if (this.isDisabled) {\n return;\n }\n const isAllMilestonesCompleted = (this.printerItems || []).every(printer =>\n printer.milestones.every(milestone => milestone.details.completed)\n );\n\n if (isAllMilestonesCompleted) {\n this.stepActionsService.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('module.requests.at-printer.mark-complete-required'),\n this.translate.transform('module.requests.at-printer.mark-complete-error')\n );\n },\n this.ngUnsubscribe\n );\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getBulkLabel(printerItem: PrinterItemModelView, printerIdx: number): Observable {\n if (printerItem.milestones.some(milestone => milestone.isChecked)) {\n return combineLatest([this.checkedMilestones$, this.checkableMilestones$]).pipe(\n map(([checkedMilestones, checkableMilestones]) =>\n this.translate.transform('common.label.selected-of', {\n selected: checkedMilestones[printerIdx].length,\n all: checkableMilestones[printerIdx].length\n })\n )\n );\n }\n return of(this.translate.transform('common.label.select-all'));\n }\n\n isBulkDisabled(printerIdx: number): Observable {\n return this.checkedMilestones$.pipe(map(checkedMilestones => checkedMilestones[printerIdx].length <= 1));\n }\n\n isBulkCheckboxDisabled(printerIdx: number): Observable {\n return this.checkableMilestones$.pipe(map(checkableMilestones => checkableMilestones[printerIdx].length <= 1));\n }\n\n public onBulkClick(printerIdx: number): void {\n const selectedItems: MilestoneItem[] = this.printerItems[printerIdx].milestones.filter(value => value.isChecked);\n\n const dialogRef = this.modalService.openModal(\n PopBulkChangeComponent,\n {\n requestId: this.requestId,\n itemId: this.printerItems[printerIdx].id,\n printerId: this.printerItems[printerIdx].printerDetails.id,\n selectedItems\n },\n 'bulk-change-modal'\n );\n\n dialogRef.afterClosed().subscribe(async dialogResponse => {\n // reload the data if the dialog was not just simply closed\n if (dialogResponse !== false) {\n const data = this.printerItems.map((p, i) => {\n const {isChecked, ...printerItem} = p;\n if (i === printerIdx) {\n return dialogResponse;\n }\n return printerItem;\n });\n this.setPrinterItems([...data]);\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n });\n }\n\n public onMarkComplete(printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n this.updateQueueSubject.next(() => {\n const milestone = this.printerItems?.[printerIdx]?.milestones?.[milestoneIdx];\n if (milestone) {\n Object.assign(milestone.details, {\n completed: isCompleted\n });\n }\n this.cd.markForCheck();\n\n return this.atPrinterService\n .updateMilestoneDetails(this.requestId, this.printerItems[printerIdx], this.printerItems[printerIdx].milestones[milestoneIdx], {\n completed: isCompleted,\n notes: this.printerItems[printerIdx].milestones[milestoneIdx].details?.notes || null,\n shipDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.shipDate || null,\n estimatedArrivalDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.estimatedArrivalDate || null\n })\n .pipe(\n tap(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, isCompleted);\n })\n );\n });\n }\n\n public isMarkAsCompletedDisabled(printerIdx: number, milestoneIdx: number): Observable {\n return this.printerForm$.pipe(\n map(printerForm => {\n const shipDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.shipDate`);\n const estimatedArrivalDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.estimatedArrivalDate`);\n\n return !(shipDate.value && shipDate.valid) || !(estimatedArrivalDate.value && estimatedArrivalDate.valid);\n })\n );\n }\n\n public onMilestoneValuesChange(details: any, printerIdx: number, milestoneIdx: number): void {\n this.updateQueueSubject.next(() => {\n const milestone = this.printerItems?.[printerIdx]?.milestones?.[milestoneIdx];\n if (milestone) {\n Object.assign(milestone, {\n details\n });\n }\n\n return this.atPrinterService\n .updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n details\n )\n .pipe(\n tap(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, details.completed);\n })\n );\n });\n }\n\n public onMilestoneCheck(isChecked: boolean, printerIdx: number, milestoneIdx: number): void {\n this.printerItems[printerIdx].milestones[milestoneIdx].isChecked = isChecked;\n this.cd.markForCheck();\n }\n\n private async onSuccessMilestoneUpdate(data: any, printerIdx: number, milestoneIdx: number, isCompleted: boolean): Promise {\n // Restrict updating with invalid data\n const currentMilestoneForm = (await this.printerForm$.pipe(take(1)).toPromise())\n .get('printerItems.' + printerIdx)\n .get('milestones.' + milestoneIdx);\n\n if (!currentMilestoneForm.valid && !currentMilestoneForm.disabled) {\n return;\n }\n\n const milestone = this.printerItems[printerIdx].milestones[milestoneIdx];\n this.printerItems[printerIdx].milestones[milestoneIdx] = {\n ...milestone,\n details: data,\n isChecked: isCompleted ? false : milestone.isChecked\n };\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.cd.markForCheck();\n }\n\n public onSelectAllChange(isChecked: boolean, pIdx: number) {\n this.printerItems[pIdx].isChecked = isChecked;\n }\n}\n","\n \n\n\n \n \n \n
\n {{ 'module.requests.at-printer.printer' | translate }}:\n {{ printerItem.printerDetails.name }}\n
\n
\n
\n

{{ 'module.requests.at-printer.files' | translate }}

\n \n
\n
\n

{{ 'module.requests.at-printer.milestones' | translate }}

\n
\n \n \n {{ 'module.requests.at-printer.bulk-change' | translate }}\n \n
\n
\n \n \n \n {{ 'module.requests.at-printer.mark-complete' | translate }}\n \n\n \n \n {{ 'module.requests.at-printer.cancel-completion' | translate }}\n \n \n
\n
\n
\n \n
\n
\n\n","
\n \n
\n \n \n
\n
\n
\n
\n
\n \n
\n\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n {{'module.requests.details.select-upc' | translate}}\n \n
\n
\n \n {{'module.requests.finance.product-owner' | translate}}\n *:\n \n \n \n {{PO?.firstName}} {{PO?.lastName}}\n , \n \n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n\n
\n
\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n \n \n
\n
\n
\n
\n\n \n
\n\n \n \n\n
\n
\n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport {AbstractControl, FormGroup} from '@angular/forms';\nimport {RadioGroupInputValue} from '../../../../../../shared/models/radioGroupInputValue';\nimport {selectRequestItemTypes} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {takeUntil} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport {Subject} from 'rxjs';\nimport {DateService} from '../../../../../../shared/services/date-service.service';\nimport {WpnResponse} from '../../../../../models/wpn-response';\n\n@Component({\n selector: 'app-fsr-request-item-form',\n templateUrl: './fsr-request-item-form.component.html',\n styleUrls: ['./fsr-request-item-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FsrRequestItemFormComponent implements OnInit {\n\n readonly RUSH_JOB_WEEKS = 8;\n\n @Input() public item: FormGroup;\n @Input() public requestItemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public formValidationTrigger: Subject;\n @Input() public isExpanded: boolean;\n\n @Output() public remove: EventEmitter = new EventEmitter();\n // tslint:disable-next-line:no-output-native no-output-on-prefix no-output-rename\n @Output() public onCopy: EventEmitter = new EventEmitter();\n\n public itemTypes: RadioGroupInputValue[];\n public itemTypeSelected: string;\n public showRushJob: boolean;\n\n private ngUnsubscribe = new Subject();\n\n constructor(private cd: ChangeDetectorRef,\n public dateService: DateService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.formValidationTrigger?.subscribe(() => {\n this.item.markAllAsTouched();\n this.cd.markForCheck();\n });\n\n if (this.item.get('deliveryDate').value) {\n this.checkForRushJob(this.item.get('deliveryDate').value);\n }\n\n this.getRequestItemTypes();\n }\n\n public patchItemWithData(data: WpnResponse): void {\n const formData = {\n countryCode: data.country?.isoAlphaAbbreviation,\n brand: data.brand ? data.brand.name : null,\n dcmsId: data.dcmsId,\n denom: data.denom,\n productClassification: data.productClassification ? data.productClassification.description : null,\n wpnDescription: data.packageDescription,\n productUpc: data.productUpc,\n productDescription: data.productDescription,\n encodingId: null,\n productOwners: data.productOwners,\n encodingType: data.encoding ? data.encoding.description : null,\n productionQuantity: {\n bundleSize: data.bundleSize,\n caseSize: data.caseSize\n },\n };\n this.item.patchValue(formData);\n\n this.cd.markForCheck();\n }\n\n public clearWpnInfo(): void {\n [\n this.item.get('countryCode'),\n this.item.get('wpnDescription'),\n this.item.get('productUpc'),\n this.item.get('productDescription'),\n this.item.get('productOwners'),\n this.item.get('dcmsId'),\n this.item.get('denom'),\n this.item.get('encodingId'),\n this.item.get('brand'),\n this.item.get('productClassification'),\n this.item.get('encodingType')\n ]\n .forEach((control: AbstractControl) => control?.reset());\n }\n\n private getRequestItemTypes(): void {\n this.store.select(selectRequestItemTypes)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.itemTypes = Object.assign(data);\n }\n this.setTypeIfEmpty();\n this.cd.markForCheck();\n });\n }\n\n private setTypeIfEmpty() {\n if (!this.item.get('type').value && this.itemTypes?.length) {\n this.item.get('type').setValue(this.itemTypes[0]?.code);\n }\n this.itemTypeSelected = this.item.get('type').value;\n this.cd.detectChanges();\n }\n\n public setType(value: string): void {\n this.itemTypeSelected = value;\n }\n\n public copyItem(): void {\n this.onCopy.emit(this.requestItemIndex);\n }\n\n public removeItem(): void {\n this.remove.emit(this.requestItemIndex);\n }\n\n public checkForRushJob(date: Date): void {\n this.showRushJob = this.dateService.earlierThanNWeeksFromNow(date, this.RUSH_JOB_WEEKS);\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n OnDestroy,\n Output,\n EventEmitter,\n OnChanges,\n Input,\n SimpleChanges,\n Inject,\n Optional\n} from '@angular/core';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {UserGroups} from '../../../../../shared/constants/user-groups.enum';\nimport {RequestsService} from '../../../../services/requests.service';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {\n INTEGER_PATTERN, MAX_REBILL_TOTAL,\n PaymentType,\n PRICE_PATTERN,\n QUANTITY_MAX_LENGTH,\n PKID_MAX_LENGTH\n} from '../../../../constants/request-details.constants';\nimport {Subject, Subscription} from 'rxjs';\nimport {Action, ActionsSubject, Store} from '@ngrx/store';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {\n selectFinancialServiceRequestDetails,\n} from '../../../../reducers/request-details/request-details.selectors';\nimport {FINANCIAL_SERVICES_REQUEST} from '../../../../constants/request-types.constant';\nimport {FinancialServiceRequestModel, FinancialServiceRequestItemModel} from '../../../../models/financial-service-request.model';\nimport {selectFSPaymentTypes} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { lazyLoadFSPaymentTypes, lazyLoadRequestItemTypes } from '../../../../../reducers/ref-data/refdata.actions';\nimport {EventService, Events} from '../../../../../shared/services/event-service.service';\nimport {requestDetailsActions} from '../../../../reducers/request-details/request-details.actions';\nimport {FILE_TYPES} from '../../../../../shared/constants/upload-restrictions.constants';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {FsRequestService} from 'src/app/requests/services/fs-request.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport BigJs from 'big.js';\nimport {TranslateService} from '@ngx-translate/core';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {RequestStageActions} from '../../../../../shared/services/request-stages.enum';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../shared/models/upload-file-restrictions.model';\nimport {ReviewModel} from '../../../../models/request-item.model';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\n\nconst PRICE_MAX = 1000000;\nconst PRICE_MIN = 0.000001;\n\n@Component({\n selector: 'app-fsr-details',\n templateUrl: './fsr-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrDetailsComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges, RequestDetailsStageController {\n @Input() public isDisabled: boolean;\n @Output() private deleteDraft = new EventEmitter();\n\n public requestDetails: Partial = {};\n public requestDetailsForm: FormGroup;\n public printProductionManagerControl: FormControl;\n public isPrintProductionManagerLoading: Subject = new Subject();\n public printProductionManagers: any[] = [];\n public paymentTypes: PaymentType[];\n public isPaymentTypeRebill: boolean;\n public requestItemsControls: FormArray;\n public formValidationTrigger: Subject = new Subject();\n public readonly PaymentsProofRestriction = {\n fileType: FILE_TYPES.FINANCIAL_SERVICES.FINANCE,\n fileSize: FILE_SIZE_RESTRICTIONS.FINANCIAL_SERVICES.FINANCE\n };\n public newItemIndex: number;\n\n private ngUnsubscribe = new Subject();\n private paymentTypeSubscription: Subscription;\n private subscriptions: Array = [];\n private isShowSavedMessage = false;\n\n private refData$ = this.store.select(selectFinancialServiceRequestDetails)\n .pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n }),\n filter(request => request !== null && request?.type === FINANCIAL_SERVICES_REQUEST),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(public utilsService: UtilsService,\n private fb: FormBuilder,\n private requestsService: RequestsService,\n private fsRequestService: FsRequestService,\n private cd: ChangeDetectorRef,\n private store: Store,\n private messageService: MessageService,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n private eventService: EventService,\n private actions: ActionsSubject,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadFSPaymentTypes());\n this.store.dispatch(lazyLoadRequestItemTypes());\n\n this.addEventSubscriptions();\n\n this.setRequestDetails({});\n this.buildForm();\n\n this.getPrintProductionManagers('');\n this.getPaymentTypes();\n\n this.refData$.subscribe((reqDetails) => {\n this.setRequestDetails(reqDetails);\n this.buildForm();\n this.setPaymentTypeSubscription();\n this.requestDetailsForm.get('details.paymentType').updateValueAndValidity();\n this.cd.markForCheck();\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', 'The request was successfully saved', '');\n this.isShowSavedMessage = false;\n }\n });\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe));\n }\n\n public async validate(): Promise {\n const form = this.requestDetailsForm;\n if(form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n form.markAllAsTouched();\n this.cd.markForCheck();\n this.formValidationTrigger.next(null);\n return Promise.resolve(form.valid);\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n this.paymentTypeSubscription?.unsubscribe();\n this.setRequestDetails({});\n }\n\n private setRequestDetails(request?: FinancialServiceRequestModel | any) {\n this.requestDetails = cloneDeep(request);\n\n if (!request.details) {\n this.requestDetails.details = {\n printProductionManager: null,\n paymentType: null,\n partnerPoNumber: null,\n rebillAmountPerItem: null,\n artworks: [],\n proofsOfPayment: [],\n notes: null,\n id: null\n };\n }\n\n if (!request.items?.length) {\n this.requestDetails.items = [this.getEmptyItemDetails()];\n } else {\n this.requestDetails.items.forEach(item => {\n if (!item.merchants.length) {\n item.merchants = [{\n name: null, mdmId: null, fcmsId: null, country: null, accountManagers: [], id: null\n }];\n }\n if (!item.shipments.length) {\n item.shipments = [{ warehouse: null, quantity: null, id: null }];\n }\n });\n }\n }\n\n private addEventSubscriptions() {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }),\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n\n this.saveRequest();\n }),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n }),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n this.setPaymentProofsError();\n const message = '';\n if (this.requestDetailsForm.valid && message) {\n this.messageService.showSystemMessage(\n 'error', 'Invalid quantity',\n `Cannot submit. Please recheck available quantity in ${message}`\n );\n return;\n }\n\n if (this.requestDetailsForm.valid) {\n const rebillAmount = new BigJs(Number(this.requestDetailsForm.get('details.rebillAmountPerItem').value));\n const totalQty = this.getAllItemsProductQty();\n const maxRebillTotal = new BigJs(MAX_REBILL_TOTAL);\n\n if (rebillAmount.times(totalQty).gt(maxRebillTotal)) {\n this.messageService.showSystemMessage('warning',\n this.translateService.instant('module.requests.details.max-rebill-header'),\n this.translateService.instant('module.requests.details.max-rebill-desc')\n );\n return;\n }\n\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n } else {\n this.utilsService.logInvalidControls(this.requestDetailsForm);\n this.messageService.showSystemMessage('error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'));\n\n this.requestDetailsForm.markAllAsTouched();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n\n this.cd.markForCheck();\n }\n })\n );\n }\n\n private setPaymentProofsError(): void {\n const error = (this.isPaymentTypeRebill && !this.requestDetails.details.proofsOfPayment.length)\n ? {paymentProofsRequired: true}\n : null;\n\n this.requestDetailsForm.get('details.proofsOfPayment').setErrors(error);\n this.cd.markForCheck();\n }\n\n private getAllItemsProductQty(): number {\n const form = this.requestDetailsForm.getRawValue();\n\n return form.items.reduce((sum, item) => sum.plus(Number(item.productionQuantity.productionQuantity) || 0)\n .plus(Number(item.productionQuantity.testCardQuantity) || 0), new BigJs(0));\n }\n\n saveRequest(): void {\n this.updateRequestDetails();\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({requestId: this.requestId, details: this.requestDetails}));\n }\n\n private updateRequestDetails() {\n const form = this.requestDetailsForm?.getRawValue();\n // NOSONAR\n Object.keys(this.requestDetails).forEach(key => {\n if (key === 'details') {\n Object.keys(this.requestDetails.details).forEach(innerKey => {\n this.requestDetails.details[innerKey] = form[key][innerKey];\n if (innerKey === 'printProductionManager') {\n if (typeof(this.requestDetails.details.printProductionManager) === 'string') {\n this.requestDetails.details.printProductionManager = null;\n }\n }\n\n });\n }\n if (key === 'items') {\n form[key].forEach((item, index) => {\n if (!this.requestDetails[key][index]) {\n this.requestDetails[key].push(item);\n }\n Object.keys(item).forEach(itemKey => {\n if (itemKey === 'merchants') {\n form[key][index][itemKey].forEach(merchant => {\n merchant.name = merchant.name?.name;\n });\n }\n if (itemKey === 'productionQuantity') {\n form.items[index].orderQuantity = form[key][index][itemKey].productionQuantity;\n form.items[index].testCardQuantity = form[key][index][itemKey].testCardQuantity;\n form.items[index].bundleSize = form[key][index][itemKey].bundleSize;\n form.items[index].caseSize = form[key][index][itemKey].caseSize;\n\n form.items[index].shipments = form[key][index][itemKey].shipments.filter((shipment) => shipment.warehouse || shipment.quantity);\n\n form.items[index].productionQuantity.shipments.forEach((formShipment, shipmentIndex) => {\n if(formShipment.warehouse && !formShipment.warehouse.id){\n const shipment = (this.requestDetails.items.find(i => i.id === item.id))\n ?.shipments.find(shimpment => shimpment.id === formShipment.id);\n formShipment.warehouse.id = shipment?.warehouse ? shipment.warehouse.id : null;\n }\n });\n\n delete form[key][index][itemKey];\n }\n\n if (this.requestDetails[key][index] && form[key][index]) {\n this.requestDetails[key][index][itemKey] = form[key][index][itemKey];\n } else if (this.requestDetails[key][index] && !form[key][index]) {\n (this.requestDetails[key] as any).removeAt(index);\n } else {\n this.requestDetails[key].push(form[key][index][itemKey]);\n }\n });\n });\n }\n\n if (form[key]) {\n this.requestDetails[key] = form[key];\n }\n });\n }\n\n private buildForm(): void {\n this.requestDetailsForm = this.fb.group({\n details: this.fb.group({\n printProductionManager: this.fb.control(this.requestDetails?.details?.printProductionManager,\n [Validators.required]),\n paymentType: this.fb.control(\n this.requestDetails?.details?.paymentType, [Validators.required]\n ),\n partnerPoNumber: this.fb.control(this.requestDetails?.details?.partnerPoNumber),\n proofsOfPayment: this.fb.control(this.requestDetails?.details?.proofsOfPayment || []),\n rebillAmountPerItem: this.fb.control(this.requestDetails?.details?.rebillAmountPerItem),\n notes: this.fb.control(this.requestDetails?.details?.notes),\n }),\n items: this.fb.array([])\n });\n const reqDetailsCopy = cloneDeep(this.requestDetails);\n\n this.printProductionManagerControl = this.requestDetailsForm.get('details').get('printProductionManager') as FormControl;\n this.requestItemsControls = this.requestDetailsForm.get('items') as FormArray;\n\n this.setInitPPMFromOptions();\n\n reqDetailsCopy.items.forEach(item => {\n this.pushNewItemFormGroup(item);\n });\n\n this.toggleFormDisabling();\n\n this.cd.markForCheck();\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.requestDetailsForm?.disable({ emitEvent: false });\n } else {\n this.requestDetailsForm?.enable({ emitEvent: false });\n }\n }\n\n private getEmptyItemDetails(): FinancialServiceRequestItemModel {\n return {\n id: null,\n deliveryDate: null,\n wpn: null,\n type: null,\n artworkNotes: null,\n componentType: 'Package',\n pkid: null,\n wpnDescription: null,\n artworkItems: [],\n productOwners: [],\n productUpc: null,\n encodingType: null,\n encodingId: null,\n merchants: [{\n name: null, mdmId: null, fcmsId: null, country: null, accountManagers: [], id: null\n }],\n shipments: [{ warehouse: null, quantity: null, id: null }],\n productDescription: null,\n dcmsId: null,\n denom: null,\n artReview: {} as ReviewModel,\n productClassification: null,\n orderQuantity: null,\n testCardQuantity: null,\n bundleSize: null,\n caseSize: null,\n notes: null\n };\n }\n\n private pushNewItemFormGroup(responseItem: FinancialServiceRequestItemModel): void {\n const deliveryDate = responseItem.deliveryDate ? new Date(responseItem.deliveryDate) : null;\n\n const item = this.fb.group({\n id: responseItem?.id || null,\n type: this.fb.control(responseItem.type, [Validators.required]),\n deliveryDate: this.fb.control(deliveryDate, Validators.required),\n componentType: this.fb.control(responseItem.componentType),\n pkid: this.fb.control(responseItem.pkid, [Validators.maxLength(PKID_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n wpn: this.fb.control(responseItem.wpn, [Validators.required, Validators.minLength(12)]),\n productOwners: this.fb.control(responseItem.productOwners, Validators.required),\n wpnDescription: this.fb.control(responseItem.wpnDescription, Validators.required),\n productUpc: this.fb.control(responseItem.productUpc, Validators.required),\n productDescription: this.fb.control(responseItem.productDescription),\n dcmsId: this.fb.control(responseItem.dcmsId, Validators.required),\n denom: this.fb.control(responseItem.denom, Validators.required),\n productClassification: this.fb.control(responseItem.productClassification, Validators.required),\n encodingType: this.fb.control(responseItem.encodingType),\n merchants: this.fb.array([]),\n productionQuantity: this.fb.group({\n testCardQuantity: this.fb.control(responseItem.testCardQuantity, [Validators.required,\n Validators.maxLength(QUANTITY_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n productionQuantity: this.fb.control(responseItem.orderQuantity, [Validators.required,\n Validators.maxLength(QUANTITY_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n totalQty: this.fb.control(null),\n bundleSize: this.fb.control(responseItem.bundleSize, Validators.required),\n caseSize: this.fb.control(responseItem.caseSize, Validators.required),\n shipments: this.fb.array([]),\n }),\n notes: this.fb.control(responseItem.notes)\n });\n\n responseItem.merchants.forEach(merchant => {\n (item.get('merchants') as FormArray).push(this.fb.group({\n id: this.fb.control(merchant.id),\n name: this.fb.control({name: merchant.name, id: merchant.fcmsId ? merchant.fcmsId : merchant.mdmId}, Validators.required),\n country: this.fb.control(merchant.country, Validators.required),\n mdmId: this.fb.control(merchant.mdmId),\n fcmsId: this.fb.control(merchant.fcmsId),\n accountManagers: this.fb.array(merchant.accountManagers)\n }));\n });\n\n responseItem.shipments.forEach(shipment => {\n (item.get('productionQuantity.shipments') as FormArray).push(this.fb.group({\n id: this.fb.control(shipment?.id || null),\n warehouse: this.fb.control(shipment.warehouse),\n quantity: this.fb.control(shipment.quantity)\n }));\n });\n\n this.requestItemsControls.push(item);\n }\n\n private getPaymentTypes(): void {\n this.store.select(selectFSPaymentTypes)\n .pipe(\n filter((types: PaymentType[]) => !!types.length),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe((types: PaymentType[]) => {\n this.paymentTypes = Object.assign(types);\n this.setPaymentTypeSubscription();\n this.cd.markForCheck();\n });\n }\n\n private setPaymentTypeSubscription(): void {\n this.paymentTypeSubscription = this.requestDetailsForm.get('details.paymentType').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(newValue => {\n const rebillAmountPerItemControl = this.requestDetailsForm.get('details.rebillAmountPerItem');\n\n if (newValue === 'REBILL') {\n rebillAmountPerItemControl.setValidators([\n Validators.required, Validators.max(PRICE_MAX), Validators.min(PRICE_MIN), Validators.pattern(PRICE_PATTERN)\n ]);\n this.isPaymentTypeRebill = true;\n } else {\n rebillAmountPerItemControl.setValue(null);\n this.requestDetailsForm.get('details.partnerPoNumber').setValue(null);\n rebillAmountPerItemControl.setValidators([\n Validators.max(PRICE_MAX), Validators.min(PRICE_MIN), Validators.pattern(PRICE_PATTERN)\n ]);\n this.requestDetailsForm.get('details.proofsOfPayment').setErrors(null);\n this.isPaymentTypeRebill = false;\n }\n\n rebillAmountPerItemControl.updateValueAndValidity();\n this.cd.markForCheck();\n });\n }\n\n private getPrintProductionManagers(searchString: string): void {\n this.isPrintProductionManagerLoading.next(true);\n this.requestsService.getUsers(searchString, [UserGroups.FSR_PPM])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(managersList => {\n this.printProductionManagers = managersList.map(item => ({value: item}));\n this.setInitPPMFromOptions();\n this.cd.detectChanges();\n this.isPrintProductionManagerLoading.next(false);\n });\n }\n\n private setInitPPMFromOptions(): void {\n const currentVal = this.printProductionManagers?.find(\n manager => manager?.value?.userName === this.printProductionManagerControl?.value?.userName\n );\n\n if (currentVal?.value) {\n this.printProductionManagerControl.patchValue(currentVal.value);\n }\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.controls[index] as FormGroup).getRawValue());\n item.id = null;\n item.productionQuantity.id = null;\n item.merchants?.forEach((merchant) => {\n merchant.id = null;\n merchant.name = merchant.name?.name || null;\n });\n item.orderQuantity = item.productionQuantity.productionQuantity;\n item.testCardQuantity = item.productionQuantity.testCardQuantity;\n item.bundleSize = item.productionQuantity.bundleSize;\n item.caseSize = item.productionQuantity.caseSize;\n item.shipments = item.productionQuantity.shipments;\n\n item.shipments?.forEach(shipment => {\n if (!shipment) {\n return;\n }\n shipment.id = null;\n if (!shipment.warehouse) {\n return;\n }\n shipment.warehouse.id = null;\n });\n\n this.pushNewItemFormGroup(item);\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(index);\n }\n }\n\n public uploadPaymentProofFunction = (file) => this.fsRequestService.uploadProofOfPayments(this.requestId, file);\n\n public removePaymentProofFunction = (attachmentId: any) => this.fsRequestService.deleteProofOfPayment(this.requestId, attachmentId);\n\n public onAddRequestItem(): void {\n this.pushNewItemFormGroup(this.getEmptyItemDetails());\n this.updateNewItemIndex();\n }\n\n public onUpdatePaymentsProof(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n this.requestDetails.details.proofsOfPayment.push(obj.data);\n this.requestDetailsForm.get('details.proofsOfPayment').setErrors(null);\n } else {\n const index = this.requestDetails.details.proofsOfPayment.findIndex(item => item?.id === obj.data);\n this.requestDetails.details.proofsOfPayment.splice(index, 1);\n }\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n this.cd.markForCheck();\n }\n\n}\n","
\n
\n
\n {{'module.requests.details.print-production-manager' | translate}}\n
\n \n
\n
\n \n
\n {{'module.requests.details.finance-details' | translate}}\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n \n {{ 'module.requests.fs.details.upload-payment-proof-error' | translate }}\n \n
\n\n
\n \n
\n
\n \n
\n {{'module.requests.text.request-items' | translate}}\n \n\n \n\n
\n \n \n
\n\n
\n\n \n
\n
\n
\n","\n
0\">\n
\n
{{ 'module.requests.fs.details.finance-items' | translate }}
\n \n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.fs.details.payment-type' | translate }}:\n \n {{ utilsService.getItemName(paymentTypes, request?.details?.paymentType) }}\n \n
\n\n
\n {{ 'module.requests.fs.details.rebill-amount' | translate }}:\n {{ request?.details?.rebillAmountPerItem }}\n
\n
\n \n\n
0\">\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n
\n
\n {{ 'module.requests.fs.item.dcms-id' | translate }}\n {{ requestItem?.dcmsId }}\n
\n\n
\n {{ 'module.requests.fs.item.denom' | translate }}\n {{ requestItem?.denom }}\n
\n\n
\n {{ 'module.requests.fs.item.product-description' | translate }}\n {{ requestItem?.productDescription }}\n
\n
\n\n
\n
{{ 'module.requests.fs.item.merchant-details' | translate }}:
\n
\n
\n {{ 'module.requests.fs.item.merchant-name-id' | translate }}\n {{ merchant?.name }} - {{ merchant?.id }}\n
\n\n
\n {{ 'module.requests.fs.item.country' | translate }}\n {{ merchant?.country }}\n
\n\n
\n {{ 'module.requests.fs.item.merchant-account-manager' | translate }}\n {{ getAccountManagers(merchant) }}\n
\n
\n
\n\n
\n
{{ 'module.requests.fs.item.production-quantity' | translate }}
\n
\n
\n {{ 'module.requests.fs.item.order-qty' | translate }}\n {{ requestItem?.orderQuantity }}\n
\n\n
\n {{ 'module.requests.fs.item.test-card-qty' | translate }}\n {{ requestItem?.testCardQuantity }}\n
\n\n
\n {{ 'module.requests.fs.item.total-production-qty' | translate }}\n \n {{ requestItem?.orderQuantity + requestItem?.testCardQuantity }}\n \n
\n
\n
\n\n
\n
\n {{ 'module.requests.fs.item.bundle-size' | translate }}\n {{ requestItem?.bundleSize }}\n
\n\n
\n {{ 'module.requests.fs.item.case-size' | translate }}\n {{ requestItem?.caseSize }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.fs.item.ship-to' | translate }}\n {{ shipment?.warehouse?.name }}\n
\n\n
\n {{ 'module.requests.fs.item.quantity' | translate }}\n {{ shipment?.quantity }}\n
\n
\n
\n\n
\n
\n {{ 'module.requests.fs.details.notes' | translate }}:\n {{ requestItem?.notes }}\n
\n
\n
\n
\n \n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.fs.details.notes' | translate }}:\n {{ request?.details?.notes }}\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport { selectFinancialServiceRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\n\nimport { selectFSPaymentTypes } from '../../../../../reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-fsr-finance-approval',\n templateUrl: './fsr-finance-approval.component.html',\n styleUrls: ['./fsr-finance-approval.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrFinanceApprovalComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription [] = [];\n public paymentTypes: CodeNameModel[] = [];\n\n request$ = this.store.pipe(\n select(selectFinancialServiceRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n refData$ = combineLatest([\n this.store.pipe(select(selectFSPaymentTypes), filter(v => v?.length > 0))\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n private store: Store) {\n super();\n }\n\n ngOnInit(): void {\n this.refData$.subscribe(([paymentTypes]) => {\n this.paymentTypes = paymentTypes;\n this.cd.markForCheck();\n });\n }\n\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n getAccountManagers(merchant) {\n return this.convertNamesList(merchant.accountManagers);\n }\n\n convertNamesList(arr) {\n return arr.map(({firstName, lastName}) => `${firstName} ${lastName}`).join(', ');\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport {switchMap, tap} from 'rxjs/operators';\nimport { MessageService } from '../../shared/services/message-service.service';\nimport { ModalService } from '../../shared/services/modal-service.service';\nimport { BasePoModel } from '../models/po.model';\nimport { requestDetailsActions } from '../reducers/request-details/request-details.actions';\nimport { FsRequestService } from './fs-request.service';\nimport {EMPTY, Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FsrPoManageService {\n\n constructor(\n private fsService: FsRequestService,\n private messageService: MessageService,\n private modalService: ModalService,\n private translate: TranslateService,\n private store: Store,\n ) {}\n\n public deletePoItem(requestId: string | number, poItem: BasePoModel): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.delete-po-header', {number: poItem.id}),\n this.translate.instant(\n poItem.sowCreated ? 'module.requests.po.modal.delete-po-desc' : 'module.requests.po.modal.delete-po-desc2'\n ),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.fsService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.po.po-deleted', {id: poItem.id}));\n })\n );\n }\n\n public onClosePO(dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number): void {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'PO'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSuccess(dialogRef, requestId);\n }\n });\n } else {\n this.onCloseSuccess(dialogRef, requestId);\n }\n }\n\n private onCloseSuccess(dialogRef: MatDialogRef, requestId: string | number): void {\n dialogRef.close();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: requestId as string}));\n this.fsService.callPO(requestId);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { FinancialServiceRequestItemComponent, FinancialServiceRequestItemModel } from '../models/financial-service-request.model';\nimport { ItemShipments } from '../models/request-item.model';\nimport {UtilsService} from '../../shared/services/utils.service';\nimport {INTEGER_PATTERN, PKID_MAX_LENGTH} from '../constants/request-details.constants';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FsPoService {\n constructor(\n private fb: FormBuilder,\n ) { }\n\n get initialPoForm(): FormGroup {\n return this.fb.group({\n accountingInfo: this.fb.group({\n channel: [null, Validators.required],\n company: [null, Validators.required],\n inventoryType: [null, Validators.required],\n lineOfBusiness: [null, Validators.required],\n }),\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null),\n }),\n name: this.fb.control(null, [Validators.required, UtilsService.printerInfoValidationFn()]),\n mdmId: this.fb.control(null),\n id: this.fb.control(null),\n }),\n billingInfo: this.fb.group({\n additionalCosts: [null],\n taxes: [null],\n freight: [null],\n totalQuantity: [null],\n subTotal: [null],\n total: [null],\n projectTotal: [null],\n }),\n items: this.fb.array([]),\n miscItems: this.fb.array([]),\n instructions: [null],\n stakeholders: this.fb.group({\n approver3: this.fb.control(null)\n })\n });\n }\n\n getEmptyComponentDetails(qty: number): FinancialServiceRequestItemComponent {\n return {\n type: null,\n description: null,\n quantity: qty,\n unitPrice: 0,\n totalPrice: 0,\n existingInventory: false,\n poNumber: null,\n };\n }\n\n getFormItem(item: FinancialServiceRequestItemModel): FormGroup {\n return this.fb.group({\n pkid: this.fb.control(item?.pkid, [Validators.maxLength(PKID_MAX_LENGTH), Validators.pattern(INTEGER_PATTERN)]),\n componentDetails: this.initItemComponentDetails(item),\n shipments: this.getFormitemShipments(item),\n });\n }\n\n getQtyEaches(item: FinancialServiceRequestItemModel) {\n return (item?.orderQuantity || 0) + (item?.testCardQuantity || 0);\n }\n\n getEmptyFormComponentDetails(type?: string, quantity?: number) {\n return this.getFormItemComponentDetails({ type, quantity });\n }\n\n getFormItemShipment(shipment?: ItemShipments): FormGroup {\n return this.fb.group({\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: [shipment?.warehouse?.address?.addressLine1 || null],\n addressLine2: [shipment?.warehouse?.address?.addressLine2 || null],\n city: [shipment?.warehouse?.address?.city || null],\n country: [shipment?.warehouse?.address?.country || null],\n postalCode: [shipment?.warehouse?.address?.postalCode || null],\n stateProvince: [shipment?.warehouse?.address?.stateProvince || null],\n }),\n contact: this.fb.group({\n email: [shipment?.warehouse?.contact?.email || null],\n phone: [shipment?.warehouse?.contact?.phone || null],\n cell: [shipment?.warehouse?.contact?.cell || null],\n attention: [shipment?.warehouse?.contact?.attention || null],\n }),\n name: this.fb.control(shipment?.warehouse || null),\n id: this.fb.control(shipment?.warehouse?.id || null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n }),\n });\n }\n\n isItemsOrdersQtyAllocated(items: FinancialServiceRequestItemModel[]): boolean {\n return items\n .every(this.isItemOrderQtyAllocated);\n }\n\n isItemOrderQtyAllocated(item: FinancialServiceRequestItemModel): boolean {\n const shipmentsQty = item.shipments\n .reduce((qty, shipment) => Number(qty) + Number(shipment?.quantity) || 0, 0);\n\n return shipmentsQty === item.orderQuantity;\n }\n\n private getFormitemShipments(item: FinancialServiceRequestItemModel): FormArray {\n return this.fb.array(\n item.shipments.map(this.getFormItemShipment.bind(this)),\n );\n }\n\n private initItemComponentDetails(item?: FinancialServiceRequestItemModel): FormArray {\n if (!item?.componentDetails?.length) {\n return this.fb.array([\n this.getEmptyFormComponentDetails('CARD', this.getQtyEaches(item)),\n this.getEmptyFormComponentDetails('ASSEMBLY', this.getQtyEaches(item)),\n this.getEmptyFormComponentDetails('TNC', this.getQtyEaches(item)),\n this.getEmptyFormComponentDetails('WRAP', this.getQtyEaches(item)),\n ]);\n }\n\n return this.fb.array(\n item.componentDetails.map(this.getFormItemComponentDetails.bind(this)),\n );\n }\n\n private getFormItemComponentDetails(details: FinancialServiceRequestItemComponent): FormGroup {\n return this.fb.group({\n type: this.fb.control(details?.type || null),\n description: this.fb.control(details?.description || null),\n quantity: this.fb.control(details?.quantity || null),\n unitPrice: this.fb.control(details?.unitPrice || null),\n totalPrice: this.fb.control(details?.totalPrice || null),\n existingInventory: this.fb.control(details?.existingInventory || false),\n poNumber: this.fb.control(details?.poNumber || null),\n });\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n {{'module.requests.po.total-price' | translate}}:\n {{componentTotalPrice | currency}}\n
\n
\n \n
\n
\n \n
\n
\n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport BigJs from 'big.js';\nimport { combineLatest, merge, of, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { FinancialServiceRequestItemComponent } from 'src/app/requests/models/financial-service-request.model';\n\nimport { CodeNameModel } from '../../../../../../../../shared/models/code-name.model';\n\n@Component({\n selector: 'app-fsr-po-form-item-details',\n templateUrl: './fsr-po-form-item-details.component.html',\n styleUrls: ['./fsr-po-form-item-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FsrPoFormItemDetailsComponent implements OnInit, OnChanges, OnDestroy {\n @Input() details: FinancialServiceRequestItemComponent;\n @Input() detailsForm: FormGroup;\n @Input() detailsIndex: number;\n @Input() isDisabled: boolean;\n @Input() componentList: CodeNameModel[];\n @Input() itemDetailsLength: number;\n @Output() deleteItemDetails = new EventEmitter();\n\n componentTotalPrice: number;\n\n private ngUnsubscribe = new Subject();\n\n ngOnInit(): void {\n if (this.detailsForm?.enabled) {\n this.togglePoNumberInput(this.detailsForm?.get('existingInventory').value);\n\n this.detailsForm?.get('existingInventory').valueChanges\n .subscribe((val) => { this.togglePoNumberInput(val); });\n }\n\n combineLatest([\n // tslint:disable-next-line:deprecation\n merge(of(this.detailsForm?.get('quantity').value), this.detailsForm?.get('quantity').valueChanges),\n // tslint:disable-next-line:deprecation\n merge(of(this.detailsForm?.get('unitPrice').value), this.detailsForm?.get('unitPrice').valueChanges)\n ]).pipe(\n takeUntil(this.ngUnsubscribe))\n .subscribe(([qtyInEaches, unitPrice]) => {\n this.componentTotalPrice = new BigJs(Number(qtyInEaches)).times(Number(unitPrice)).toFixed(2);\n this.detailsForm?.get('totalPrice').setValue(this.componentTotalPrice);\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n private toggleForm() {\n if (this.isDisabled) {\n this.detailsForm?.disable();\n } else {\n this.detailsForm?.enable();\n }\n\n this.updateFormFieldsValidity();\n }\n\n private updateFormFieldsValidity(): void {\n const formFields = [\n this.detailsForm?.get('type'),\n this.detailsForm?.get('quantity'),\n ];\n\n formFields.forEach((field) => {\n if (this.detailsForm?.enabled) {\n field.setValidators(Validators.required);\n } else {\n field.clearValidators();\n }\n });\n }\n\n private togglePoNumberInput(existingInventory: boolean) {\n const poNumber = this.detailsForm?.get('poNumber');\n\n if (existingInventory) {\n poNumber?.enable();\n poNumber?.setValidators(Validators.required);\n } else {\n poNumber?.disable();\n poNumber?.patchValue(null);\n poNumber?.clearValidators();\n }\n }\n\n onDelete() {\n this.deleteItemDetails.emit(this.detailsIndex);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n
\n 0 ? ' ' + (' ' + (shipmentIndex + 1)) : '')\"\n [itemsFormCtrl]=\"shipment.get('warehouse.name')\"\n [itemsList]=\"shipmentOptions\"\n [isRequired]=\"isShipmentRequired\"\n [testId]=\"'ship_to_' + shipmentIndex\"\n >\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n\n \n [warehouseIndex]=\"shipmentIndex\"\n \n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, OnDestroy } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { Warehouse } from 'src/app/requests/models/warehouse.model';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'app-request-item-shipment',\n templateUrl: './request-item-shipment.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RequestItemShipmentComponent implements OnInit, OnDestroy {\n @Input() shipment: FormGroup;\n @Input() shipmentIndex: number;\n @Input() availableQty: number;\n @Input() isLast: boolean;\n @Input() isDisabled: boolean;\n @Input() isRemovable: boolean;\n @Input() shipmentOptions: any;\n @Input() canDeleteShipment = true;\n @Output() changeQty = new EventEmitter<{ index: number; qty: number }>();\n @Output() removeShipment = new EventEmitter();\n private ngUnsubscribe = new Subject();\n\n isShipmentRequired = false;\n\n constructor(\n private translateService: TranslateService,\n ) { }\n\n ngOnInit(): void {\n this.isShipmentRequired = this.checkShipmentRequired();\n this.setShipToListener();\n this.handleQtyChange();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getWarehouseLabel(warehouse: Warehouse): string {\n return warehouse ? warehouse.name : '--';\n }\n\n getQuantityHint(): string {\n return this.isLast\n ? `${this.translateService.instant('module.requests.finance.ship-quantity-hint')}: ${this.availableQty}`\n : '';\n }\n\n deleteShipment() {\n this.removeShipment.emit(this.shipmentIndex);\n }\n\n private handleQtyChange() {\n this.shipment?.get('quantity').valueChanges\n .pipe(debounceTime(300), takeUntil(this.ngUnsubscribe))\n .subscribe((qty) => {\n this.changeQty.emit({\n index: this.shipmentIndex,\n qty,\n });\n });\n }\n\n private checkShipmentRequired(): boolean {\n const warehouse = this.shipment?.get('warehouse');\n return warehouse?.validator && warehouse?.validator(new FormControl()).required;\n }\n\n private setShipToListener(): void {\n this.shipment?.get('warehouse.name')\n .valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(newValue => {\n this.shipment?.get('warehouse').patchValue({\n mdmId: newValue?.mdmId,\n address: {\n addressLine1: newValue?.address?.addressLine1 || null,\n addressLine2: newValue?.address?.addressLine2 || null,\n addressLine3: newValue?.address?.addressLine3 || null,\n city: newValue?.address?.city || null,\n country: newValue?.address?.country || null,\n postalCode: newValue?.address?.postalCode || null,\n stateProvince: newValue?.address?.stateProvince || null\n },\n contact: {\n email: newValue?.contact?.email || null,\n phone: newValue?.contact?.phone || null,\n cell: newValue?.contact?.cell || null,\n attention: newValue?.contact?.attention || null\n }\n });\n });\n }\n\n}\n","
\n
\n
\n minShipments\"\n >\n
\n\n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';\nimport { ControlContainer, FormArray, FormControl, FormGroup } from '@angular/forms';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil, map } from 'rxjs/operators';\nimport { BaseRequestItemModel, ItemShipments } from 'src/app/requests/models/request-item.model';\nimport { Warehouse } from 'src/app/requests/models/warehouse.model';\nimport {select, Store} from '@ngrx/store';\nimport {lazyLoadWarehouses} from '../../../../../reducers/ref-data/refdata.actions';\nimport {selectWarehouses} from '../../../../../reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-request-item-shipments',\n templateUrl: './request-item-shipments.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RequestItemShipmentsComponent implements OnInit, OnChanges, OnDestroy {\n @Input() item: BaseRequestItemModel;\n @Input() totalQty: number;\n @Input() isDisabled: boolean;\n @Input() emptyShipmentControl: FormGroup;\n @Input() minShipments = null;\n\n form: FormGroup;\n shipmentOptions: { value: Warehouse }[] = [];\n @Input() nullShipmentOption = false;\n availableQty = 0;\n isShipmentRequired: boolean;\n\n private ngUnsubscribe = new Subject();\n private warehouses$ = this.store.pipe(\n select(selectWarehouses),\n filter((v) => v.length > 0),\n map((shipmentOptions) => shipmentOptions.map(this.getShipmentOption)),\n takeUntil(this.ngUnsubscribe)\n );\n\n constructor(\n private cd: ChangeDetectorRef,\n private controlContainer: ControlContainer,\n private store: Store,\n ) { }\n\n get shipments() {\n return this.form?.get('shipments') as FormArray;\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadWarehouses());\n this.form = this.controlContainer.control as FormGroup;\n this.initShipmentOptions();\n this.setAvailableQty();\n this.isShipmentRequired = this.checkShipmentRequired();\n this.toggleForm();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.totalQty && this.shipments) {\n this.setAvailableQty();\n }\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n isShipmentRemovable(): boolean {\n return this.shipments?.controls?.length > 0;\n }\n\n addShipment(): void {\n this.shipments.push(cloneDeep(this.emptyShipmentControl));\n this.item.shipments.push(this.getItemShipment());\n }\n\n deleteShipment(index: number): void {\n this.shipments.removeAt(index);\n this.item.shipments.splice(index, 1);\n this.updateShipmentsValidity();\n }\n\n changeShipmentQty({ index, qty }: {index: number; qty: number}) {\n this.shipments.at(index)?.patchValue({ quantity: qty });\n this.item.shipments[index].quantity = qty;\n\n this.setAvailableQty();\n }\n\n private initShipmentOptions(): void {\n this.warehouses$.subscribe((shipmentOptions) => {\n this.shipmentOptions = shipmentOptions;\n this.cd.markForCheck();\n });\n }\n\n private getShipmentOption(shipment: Warehouse) {\n return { value: shipment, label: shipment.name };\n }\n\n private checkShipmentRequired(): boolean {\n const warehouse = this.shipments?.controls[0]?.get('warehouse');\n return warehouse?.validator && warehouse?.validator(new FormControl()).required;\n }\n\n private setAvailableQty() {\n const usedQty = this.shipments?.controls\n ?.reduce((qty, cur) => qty + Number(cur?.get('quantity')?.value) || 0, 0);\n\n this.availableQty = this.totalQty - usedQty;\n }\n\n private updateShipmentsValidity(): void {\n this.shipments?.controls?.forEach((shipToGroup: FormGroup) => {\n shipToGroup.get('quantity').updateValueAndValidity({onlySelf: true, emitEvent: true});\n shipToGroup.updateValueAndValidity({onlySelf: true, emitEvent: true});\n });\n this.shipments.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.cd.detectChanges();\n }\n\n private getItemShipment(shipment?: ItemShipments): ItemShipments {\n return {\n quantity: shipment?.quantity || null,\n warehouse: {\n mdmId: shipment?.warehouse?.mdmId || null,\n name: shipment?.warehouse?.name || null,\n address: {\n addressLine1: shipment?.warehouse?.address?.addressLine1 || null,\n addressLine2: shipment?.warehouse?.address?.addressLine2 || null,\n addressLine3: shipment?.warehouse?.address?.addressLine3 || null,\n city: shipment?.warehouse?.address?.city || null,\n country: shipment?.warehouse?.address?.country || null,\n postalCode: shipment?.warehouse?.address?.postalCode || null,\n stateProvince: shipment?.warehouse?.address?.stateProvince || null,\n },\n contact: {\n attention: shipment?.warehouse?.contact.attention || null,\n cell: shipment?.warehouse?.contact.cell || null,\n email: shipment?.warehouse?.contact.email || null,\n phone: shipment?.warehouse?.contact.phone || null,\n },\n },\n };\n }\n\n private toggleForm(): void {\n if (this.isDisabled) {\n this.form?.disable();\n } else {\n this.form?.enable();\n }\n this.cd.markForCheck();\n }\n}\n","\n
\n
\n {{'module.requests.pop-prod.details.wpn-description' | translate}}: \n {{item.wpnDescription}}\n
\n \n
\n\n
\n
\n \n
\n \n
\n {{ 'module.requests.po.component-details' | translate }}:\n \n\n
\n \n
\n\n \n\n \n \n
\n\n\n\n
\n
\n \n
\n\n
\n {{'module.requests.finance.product-upc' | translate}}\n {{item.productUpc}}\n
\n\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{item.wpn}}\n
\n\n
\n {{'module.requests.po.merchant' | translate}}\n \n \n {{ merchant.name }}, \n \n \n
\n\n
\n {{ 'module.requests.pop-prod.details.qty-in-eaches' | translate }}:\n {{fsPoService.getQtyEaches(item)}}\n
\n\n
\n {{ 'module.requests.po.unit-price' | translate }}:\n \n ${{ itemUnitPrice }}\n \n
\n\n
\n {{ 'module.requests.po.total-price' | translate }}:\n \n ${{ itemTotalPrice | number : '1.2-2' }}\n \n
\n\n
\n {{ 'module.requests.finance.denom' | translate }}:\n {{ item.denom }}\n
\n\n
\n {{'module.requests.finance.encoding-type' | translate}}\n {{item.encodingType}}\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport BigJs from 'big.js';\nimport { FinancialServiceRequestItemModel } from 'src/app/requests/models/financial-service-request.model';\nimport { FsPoService } from 'src/app/requests/services/fs-po.service';\n\nimport { CodeNameModel } from '../../../../../../../shared/models/code-name.model';\n\n@Component({\n selector: 'app-fsr-po-form-item',\n templateUrl: './fsr-po-form-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrPoFormItemComponent {\n @Input() item: FinancialServiceRequestItemModel;\n @Input() itemForm: FormGroup;\n @Input() itemIndex: number;\n @Input() itemsLength: number;\n @Input() isLast: boolean;\n @Input() isDisabled: boolean;\n @Input() componentList: CodeNameModel[];\n @Input() isPoCreated: boolean;\n\n @Output() public deleteItem: EventEmitter = new EventEmitter();\n\n constructor(\n public fsPoService: FsPoService,\n private cd: ChangeDetectorRef,\n ) { }\n\n get componentDetails(): FormArray {\n return this.itemForm?.get('componentDetails') as FormArray;\n }\n\n get shipments(): FormArray {\n return this.itemForm?.get(`shipments`) as FormArray;\n }\n\n get itemTotalPrice(): number {\n return this.componentDetails?.controls\n .reduce((acc, currControls) => acc + Number(currControls.get('totalPrice').value), 0);\n }\n\n get itemUnitPrice(): string {\n return new BigJs(this.itemTotalPrice).div(Number(this.fsPoService.getQtyEaches(this.item))).toFixed(4);\n }\n\n get emptyShipmentControl(): FormGroup {\n return this.fsPoService.getFormItemShipment();\n }\n\n addComponentDetails(): void {\n const emptyForm = this.fsPoService.getEmptyFormComponentDetails();\n emptyForm?.patchValue({quantity: this.fsPoService.getQtyEaches(this.item)});\n this.componentDetails.push(emptyForm);\n this.item?.componentDetails?.push(this.fsPoService.getEmptyComponentDetails(this.fsPoService.getQtyEaches(this.item)));\n }\n\n removeComponentDetails(idx: number): void {\n this.componentDetails.removeAt(idx);\n this.item?.componentDetails?.splice(idx, 1);\n }\n\n public delete(): void {\n this.cd.markForCheck();\n this.deleteItem.emit(this.itemIndex);\n }\n}\n","
\n
\n

\n PO â„–{{dialogData.po?.id}}\n {{'module.requests.po.new-po' | translate}}\n

\n
\n \n \n \n \n \n
\n
\n \n
\n \n
\n {{'module.requests.po.accounting-info' | translate}}\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n {{'module.requests.po.printer-info' | translate}}:\n
\n \n
\n \n \n
\n \n
\n {{'module.requests.po.item-info' | translate}}\n \n
\n \n
\n {{'module.requests.po.miscellaneous-items' | translate}}\n \n
\n \n
\n {{'module.requests.po.special' | translate}}\n\n
\n \n
\n\n
\n
\n
{{'module.requests.po.total-quantity' | translate}}:
\n
\n {{ getTotalQty() }}\n
\n
\n\n
\n
{{'module.requests.po.sub-total' | translate}}:
\n
\n ${{ subTotal }}
\n
\n\n
\n
{{'module.requests.po.additional-costs' | translate}}:
\n
\n \n
\n
\n
\n
{{'module.requests.po.freight' | translate}}:
\n
\n \n
\n
\n
\n
{{'module.requests.po.taxes' | translate}}:
\n
\n \n
\n
\n\n
\n
{{'module.requests.po.total' | translate}}:
\n
\n {{ getTotal() | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
{{'module.requests.fs.po.project-total' | translate}}:
\n
\n {{ getProjectTotal() | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
{{'module.requests.po.rebill-rate' | translate}}:
\n
\n {{dialogData.po.billingInfo.rebillRate|currency:'USD':'symbol':'1.4-4'}}\n \n {{price|currency:'USD':'symbol':'1.4-4'}}\n \n
\n
\n
\n
{{'module.requests.po.rebill-total' | translate}}:
\n
\n {{getRebillTotalAmount() | currency}}\n
\n
\n
\n
\n \n
\n stakeholders\n
\n \n \n \n

{{'module.requests.po.notice' | translate}}

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

\n {{'module.requests.po.item-info' | translate}}\n \n

\n \n \n
\n
\n\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject, OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { FsrPoDialogData } from './fsr-po-dialog-data.model';\nimport { FsRequestService } from '../../../../../services/fs-request.service';\nimport { FsrPoManageService } from '../../../../../services/fsr-po-manage.service';\nimport { FsPoService } from 'src/app/requests/services/fs-po.service';\nimport { Events, EventService } from '../../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../../shared/services/message-service.service';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { FinancialServiceRequestItemModel } from '../../../../../models/financial-service-request.model';\nimport { FsPoModel } from 'src/app/requests/models/fs-po.model';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport BigJs from 'big.js';\nimport {MAX_PO_TOTAL} from '../../../../../constants/request-details.constants';\nimport { PoAccountingService } from 'src/app/requests/services/po-accounting.service';\n\n@Component({\n selector: 'app-fsr-po-form',\n templateUrl: './fsr-po-form.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [FsrPoManageService],\n})\nexport class FsrPoFormComponent implements OnInit, OnDestroy {\n poForm: FormGroup;\n itemsArr: FormArray;\n dialogData: FsrPoDialogData;\n availableItems: FinancialServiceRequestItemModel[];\n price: number;\n itemsLengthChanged = true;\n shouldRecalculatePrice = true;\n isPoProcessing = false;\n testId = 'fsr_po';\n\n private poDetailsCopy: FsPoModel;\n private maxPopProdCostTotal = new BigJs(MAX_PO_TOTAL);\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: FsrPoDialogData,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n private eventService: EventService,\n private poManageService: FsrPoManageService,\n private fsrService: FsRequestService,\n private fsPoService: FsPoService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private dialogRef: MatDialogRef,\n public utilsService: UtilsService,\n private poAccountingService?: PoAccountingService\n ) {}\n\n ngOnInit(): void {\n this.initDialogData();\n this.initForm();\n this.initItemsArr();\n this.initPrinter();\n this.initAvailableItems();\n this.initSubscriptions();\n this.setPoDetailsCopy();\n\n this.price = Number(this.data.request.details.rebillAmountPerItem) || 0;\n\n this.poForm?.get('billingInfo')?.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => this.shouldRecalculatePrice = true);\n\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe);\n\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n getMiscItemControl(miscItem?: any) {\n return this.fb.group({\n description: this.fb.control(miscItem?.description || null),\n productionQuantity: this.fb.group({\n quantityEaches: this.fb.control(miscItem?.productionQuantity?.quantityEaches || null),\n unitPrice: this.fb.control(miscItem?.productionQuantity?.unitPrice || null),\n totalPrice: this.fb.control(miscItem?.productionQuantity?.totalPrice || null),\n shipments: this.fb.array(miscItem?.productionQuantity?.shipments?.map((shipment) => this.fb.group({\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(shipment?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(shipment?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(shipment?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(shipment?.warehouse?.address?.city || null),\n country: this.fb.control(shipment?.warehouse?.address?.country || null),\n postalCode: this.fb.control(shipment?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(shipment?.warehouse?.address?.stateProvince || null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(shipment?.warehouse?.contact?.attention || null),\n cell: this.fb.control(shipment?.warehouse?.contact?.cell || null),\n email: this.fb.control(shipment?.warehouse?.contact?.email || null),\n phone: this.fb.control(shipment?.warehouse?.contact?.phone || null),\n }),\n name: this.fb.control(shipment?.warehouse?.name ? shipment.warehouse : null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n id: this.fb.control(shipment?.warehouse?.id || null),\n }),\n }))),\n }),\n });\n }\n\n onSave(): void {\n this.eventService.emit({ eventName: Events.PoSubmit });\n\n this.poForm.get('billingInfo').patchValue({\n ...this.poForm.get('billingInfo')?.value,\n totalQuantity: this.getTotalQty(),\n total: this.getTotal(),\n subTotal: this.subTotal,\n });\n\n if (this.poForm.valid) {\n if (this.isTotalMaxError) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-total-desc'));\n } else if (this.isProjectTotalMaxError) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.fs.po.max-project-total-header'),\n this.translate.transform('module.requests.fs.po.max-project-total-desc'));\n } else {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n }\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.messageService.showSystemMessage('warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation'));\n }\n }\n\n getPrinterLabel(printer: any): string {\n return printer?.name || '';\n }\n\n onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.initAvailableItems();\n }\n\n onAddItem(itemsToAdd: FinancialServiceRequestItemModel[]): void {\n if (!itemsToAdd?.length) {\n return;\n }\n\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.fsPoService.getFormItem(item));\n });\n\n this.initAvailableItems();\n }\n\n onPrintPo(requestId: string, poId: number, type: string): void {\n this.fsrService.downloadPoPdf(requestId, poId, type);\n }\n\n closePO(): void {\n const isDataChanged = this.dialogData.isDisabled ? false : this.checkIfDataChanged();\n this.poManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n deletePO(): void {\n this.isPoProcessing = true;\n this.poManageService.deletePoItem(this.dialogData.requestId, this.dialogData.po)\n .subscribe({\n next: () => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n });\n\n }\n\n onItemsChange(): void {\n this.itemsLengthChanged = true;\n this.cd.markForCheck();\n }\n\n getTotalQty(): number {\n return this.dialogData.items.reduce((prev, curr) => prev + this.fsPoService.getQtyEaches(curr), 0);\n }\n\n get subTotal(): string {\n const componentTotals = this.itemsArr.getRawValue()\n .reduce((acc, item) => acc + item.componentDetails\n .filter(details => !details.existingInventory)\n .reduce((acc1, details) => acc1 + Number(details.totalPrice), 0), 0);\n const mistTotals = this.poForm.getRawValue().miscItems\n .reduce((acc, item) => acc + Number(item.productionQuantity.totalPrice), 0);\n\n return new BigJs(componentTotals).add(mistTotals).toFixed(2);\n }\n\n public getTotal(): number {\n if (this.dialogData.po?.billingInfo?.total && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.total).toFixed(2);\n }\n\n const billingInfo = this.poForm?.get('billingInfo');\n const total = new BigJs(this.subTotal);\n const additionalCosts = Number(billingInfo?.get('additionalCosts')?.value);\n const freight = Number(billingInfo?.get('freight')?.value);\n const taxes = Number(billingInfo?.get('taxes')?.value);\n\n return total.plus(additionalCosts).plus(freight).plus(taxes).toFixed(2);\n }\n\n public getProjectTotal(): number {\n if (this.dialogData.po?.billingInfo?.projectTotal && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.projectTotal).toFixed(2);\n }\n\n const total = new BigJs(this.getTotal());\n const existingInventory = this.itemsArr.getRawValue()\n .reduce((acc, item) => acc + item.componentDetails\n .filter(details => details.existingInventory)\n .reduce((acc1, details) => acc1 + Number(details.totalPrice), 0), 0);\n\n return total.plus(existingInventory).toFixed(2);\n }\n\n public get isProjectTotalMaxError(): boolean {\n return new BigJs(this.getProjectTotal()).gt(this.maxPopProdCostTotal);\n }\n\n public get isTotalMaxError(): boolean {\n return new BigJs(this.getTotal()).gt(this.maxPopProdCostTotal);\n }\n\n public getRebillTotalAmount(): number {\n if (this.dialogData.po?.billingInfo?.rebillTotalAmount &&\n !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.rebillTotalAmount).toFixed(2);\n }\n const totalQty = this.getTotalQty();\n const price = new BigJs(this.price);\n return price.times(totalQty).toFixed(2);\n }\n\n private initSubscriptions(): void {\n this.subscriptions.push(\n this.setPriceChangeListener(),\n );\n }\n\n private setPriceChangeListener(): Subscription {\n return this.eventService.on(Events.StartRecalculatePoTotalPrice, () => {\n this.shouldRecalculatePrice = true;\n this.cd.markForCheck();\n });\n }\n\n private setPoDetailsCopy(): void {\n this.poDetailsCopy = cloneDeep({ ...this.dialogData.po, ...this.getPreparedForm() });\n }\n\n private checkIfDataChanged(): boolean {\n return !isEqualWith({\n ...this.dialogData.po,\n ...this.getPreparedForm(),\n },\n this.poDetailsCopy,\n this.dataCheckCustomizer,\n );\n }\n\n private dataCheckCustomizer(obj1: any, obj2: any): boolean {\n if (obj1 === null && obj2 === '' || obj1 === '' && obj2 === null) {\n return true;\n }\n\n if ((typeof obj1 === 'number' || obj1 === null ) && typeof obj2 === 'string' ||\n typeof obj1 === 'string' && (typeof obj2 === 'number' || obj2 === null)) {\n return Number(obj1) === Number(obj2);\n }\n }\n\n private initDialogData() {\n this.dialogData = {\n ...cloneDeep(this.data),\n printerList: this.initDialogPrinterList(),\n };\n }\n\n private initDialogPrinterList() {\n return this.data?.printerList?.map(\n item => ({ value: item, name: item.name })\n );\n }\n\n private initForm(): void {\n this.poForm = this.fsPoService.initialPoForm;\n\n this.poForm.patchValue(this.dialogData.po);\n this.poForm.setControl('miscItems', this.fb.array(\n this.dialogData?.po?.miscItems?.map(this.getMiscItemControl.bind(this)) || [],\n ));\n\n if (!this.dialogData.po.id) {\n this.poForm?.get('billingInfo').patchValue(this.dialogData.request.details);\n }\n\n if (this.dialogData.isDisabled) {\n this.poForm.disable({ emitEvent: false });\n }\n\n this.poForm.get('printerInfo.name').statusChanges\n .pipe(\n filter(status => status === 'VALID'),\n )\n .subscribe(status => {\n const printerInfo = { ...this.poForm.get('printerInfo.name').value };\n this.poForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince,\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone,\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n });\n }\n\n private initItemsArr(): void {\n this.itemsArr = this.poForm.get('items') as FormArray;\n this.dialogData.items.forEach(item => {\n this.itemsArr.push(this.fsPoService.getFormItem(item));\n });\n }\n\n private initAvailableItems(): void {\n this.availableItems = this.dialogData.request.items.filter(item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id));\n }\n\n private initPrinter(): void {\n const printer = this.dialogData?.printerList?.find(\n item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId\n );\n this.poForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n\n private getPreparedForm(): any {\n const form = this.poForm.getRawValue();\n\n form.items = form.items.map((item, idx) => ({\n ...this.dialogData.items[idx],\n pkid: item.pkid,\n componentDetails: [...item.componentDetails],\n shipments: item.shipments.map((shipment) => ({\n ...shipment,\n quantity: shipment.quantity || 0,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name || null,\n },\n })),\n productionQuantity: {\n ...this.dialogData.items[idx].productionQuantity,\n ...item.productionQuantity,\n productionQuantity: item.orderQuantity,\n },\n }));\n\n form.miscItems = form.miscItems.map((miscItem) => ({\n ...miscItem,\n productionQuantity: {\n ...miscItem.productionQuantity,\n shipments: miscItem?.productionQuantity?.shipments.map((shipment) => ({\n ...shipment,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name,\n },\n }))\n },\n }));\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo.id || null;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private saveOrUpdatePO(form): void {\n const poSource = (this.dialogData.po.id)\n ? this.fsrService.updatePO(this.dialogData.requestId, this.dialogData.po.id, form)\n : this.fsrService.createPO(this.dialogData.requestId, form);\n\n if (!this.fsPoService.isItemsOrdersQtyAllocated(form.items)) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.po.unallocated-qty'),\n );\n }\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource\n .pipe(take(1))\n .subscribe({\n next: (newPo: FsPoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n });\n }\n\n private onSuccessPO(po: FsPoModel): void {\n this.dialogData.po = { ...po };\n this.initPrinter();\n this.setPoDetailsCopy();\n\n this.messageService.showSystemMessage('success',\n this.translate.transform('common.message.po-saved'), null);\n }\n}\n","
\n \n
\n
\n {{'module.requests.pop-prod.details.wpn-description' | translate}}:\n {{reqItem.wpnDescription}}\n
\n\n
\n
= 0\" class=\"col-auto p-0 pr-h d-flex column\">\n {{'module.requests.fs.item.pkid' | translate}}\n {{reqItem.pkid}}\n
\n
\n {{'module.requests.finance.product-upc' | translate}}\n {{reqItem.productUpc}}\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{reqItem.wpn}}\n
\n
\n {{'module.requests.po.merchant' | translate}}\n \n \n {{ merchant.name }}, \n \n \n
\n
\n {{ 'module.requests.finance.denom' | translate }}:\n {{ reqItem.denom }}\n
\n
\n {{'module.requests.finance.encoding-type' | translate}}\n {{reqItem.encodingType}}\n
\n
\n\n \n
\n
\n {{'module.requests.finance.ship-to' | translate}}\n \n {{address}}\n \n
\n
\n {{'module.requests.po.qty' | translate}}\n \n {{qty}}\n \n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { FinancialServiceRequestItemModel, FinancialServiceRequestModel } from 'src/app/requests/models/financial-service-request.model';\n\n@Component({\n selector: 'app-fsr-po-item',\n templateUrl: './fsr-po-item.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrPoItemComponent {\n @Input() request: FinancialServiceRequestModel;\n @Input() reqItem: FinancialServiceRequestItemModel;\n}\n","\n \n\n\n
\n
\n {{'module.requests.text.purchase-orders' | translate}}\n \n
\n\n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n
\n\n\n
\n
\n {{label | translate}}\n
\n \n \n\n \n \n \n \n
\n
\n
\n
\n
\n {{'common.button.printer' | translate}}:\n {{'module.requests.po.company' | translate}}:\n
\n
\n {{poItemDetails.printerInfo?.name}}\n {{getItemName(companyList, poItemDetails.accountingInfo?.company)}}\n
\n
\n {{'module.requests.po.date' | translate}}:\n {{'module.requests.po.total-qty' | translate}}:\n
\n
\n {{poItemDetails?.createdAt | date : 'MM/dd/yyyy' | uppercase}}\n {{poItemDetails?.billingInfo.totalQuantity}}\n
\n
\n  \n {{'module.requests.finance.test-card-qty' | translate}}:\n
\n
\n  \n {{totalPoItemTestQtys(poItemDetails)}}\n
\n
\n
\n \n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { combineLatest, Observable, of, Subject } from 'rxjs';\nimport { filter, pluck, takeUntil, takeWhile } from 'rxjs/operators';\nimport { isPPMSelectorState } from 'src/app/reducers/ppm/ppm.selectors';\nimport { FinancialServiceRequestItemModel, FinancialServiceRequestModel } from 'src/app/requests/models/financial-service-request.model';\nimport { selectFinancialServiceRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {\n selectChannelTypes,\n selectCompanies, selectComponentTypes,\n selectInventoryTypes,\n selectPartnerGroups,\n selectPrinters\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { ModalService } from 'src/app/shared/services/modal-service.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { FsrPoFormComponent } from './fsr-po-form/fsr-po-form.component';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { FsrPoDialogData } from './fsr-po-form/fsr-po-dialog-data.model';\nimport { FsRequestService } from 'src/app/requests/services/fs-request.service';\nimport { FsrPoManageService } from 'src/app/requests/services/fsr-po-manage.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { FsPoModel } from 'src/app/requests/models/fs-po.model';\nimport {\n lazyLoadCompanies,\n lazyLoadPartnerGroups,\n lazyLoadChannelTypes,\n lazyLoadPrinters,\n lazyLoadInventoryTypes, lazyLoadComponentTypes\n} from 'src/app/reducers/ref-data/refdata.actions';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport { FsPoService } from 'src/app/requests/services/fs-po.service';\nimport {UserRoles} from '../../../../../shared/constants/user-roles.constant';\n\n@Component({\n selector: 'app-fsr-po',\n templateUrl: './fsr-po.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [FsrPoManageService],\n})\nexport class FsrPoComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n private request: FinancialServiceRequestModel;\n private ngUnsubscribe = new Subject();\n private subscriptions = [];\n\n poDetails: FsPoModel[] = [];\n companyList: CodeNameModel[];\n inventoryList: CodeNameModel[];\n chnList: CodeNameModel[];\n lineOfBusinessList: CodeNameModel[];\n componentTypesList: CodeNameModel[];\n printerList: any[];\n isBlankState = false;\n poDataLoaded = false;\n isUserPPM = false;\n userRoles = UserRoles;\n @Input() testId = 'fsr-po';\n\n request$ = this.store.pipe(\n select(selectFinancialServiceRequestDetails),\n filter((req) => req?.id === +this.requestId),\n takeUntil(this.ngUnsubscribe),\n );\n\n refData$ = combineLatest([\n this.store.select(selectCompanies).pipe(filter(v => v.length > 0)),\n this.store.select(selectInventoryTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0)),\n this.store.select(selectChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPrinters).pipe(filter(v => v.length > 0)),\n this.store.select(selectComponentTypes).pipe(filter(v => v.length > 0)),\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private modalService: ModalService,\n private fsrService: FsRequestService,\n private poService: FsrPoManageService,\n private fsPoService: FsPoService,\n private utilsService: UtilsService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private eventService: EventService,\n private translate: TranslateService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadRefData();\n this.initRequestData();\n this.initRefData();\n this.initPODetailsSubscription();\n this.initUserData();\n this.setStepSubmitSubscription();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private get poItems(): FinancialServiceRequestItemModel[] {\n return this.poDetails\n ?.flatMap((po) => po.items) || [];\n }\n\n private get emptyPo(): FsPoModel {\n return {\n accountingInfo: { channel: null, company: null, inventoryType: null, lineOfBusiness: null },\n printerInfo: {\n address: {\n addressLine1: null, addressLine2: null, addressLine3: null, city: null,\n country: null, stateProvince: null, postalCode: null,\n },\n contact: {\n attention: null, cell: null, email: null, phone: null,\n },\n name: null, mdmId: null, id: null,\n },\n stakeholders: {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n },\n accountingSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n apSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n items: [],\n };\n }\n\n private loadRefData(): void {\n this.store.dispatch(lazyLoadCompanies());\n this.store.dispatch(lazyLoadInventoryTypes());\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadChannelTypes());\n this.store.dispatch(lazyLoadPrinters());\n this.store.dispatch(lazyLoadComponentTypes());\n }\n\n private initRequestData() {\n this.request$.subscribe((req) => {\n this.request = cloneDeep(req);\n });\n }\n\n private initRefData() {\n this.refData$.subscribe((\n [companyList, inventoryList, lineOfBusinessList, chnList, printerList, componentTypes]\n ) => {\n this.companyList = companyList;\n this.inventoryList = inventoryList;\n this.lineOfBusinessList = this.utilsService.getParentChild(cloneDeep(lineOfBusinessList));\n this.chnList = chnList;\n this.printerList = printerList;\n this.componentTypesList = componentTypes;\n });\n }\n\n private initUserData() {\n this.store.pipe(\n select(isPPMSelectorState),\n takeWhile(val => !val.initialized, true),\n pluck('isPPM'),\n ).subscribe((isUserPPM) => {\n this.isUserPPM = isUserPPM;\n });\n }\n\n private initPODetailsSubscription(): void {\n this.fsrService.getPOListener().pipe(\n takeUntil(this.ngUnsubscribe),\n ).subscribe((data) => {\n if (data?.length) {\n this.poDetails = cloneDeep( data);\n this.poDetails.sort(this.utilsService.sortByDate);\n this.isBlankState = false;\n } else {\n this.poDetails = [];\n this.isBlankState = true;\n }\n this.poDataLoaded = true;\n this.cd.markForCheck();\n });\n\n this.fsrService.callPO(this.requestId);\n }\n\n private openPO(po: FsPoModel, type: 'new' | 'edit'): void {\n const data: FsrPoDialogData = {\n po,\n requestId: this.requestId,\n request: this.request,\n companyList: this.companyList,\n inventoryList: this.inventoryList,\n chnList: this.chnList,\n lineOfBusinessList: this.lineOfBusinessList,\n printerList: this.printerList,\n componentTypesList: this.componentTypesList,\n items: type === 'new' ? [...this.request.items] : po.items,\n miscItems: [],\n isDisabled: this.isDisabled && this.isUserPPM,\n fundingList: [],\n };\n\n this.modalService.openModal(FsrPoFormComponent, data, 'po-form-dialog', false);\n }\n\n addNewPO(): void {\n this.openPO(this.emptyPo, 'new');\n }\n\n onEdit(item: FsPoModel): void {\n this.openPO(item, 'edit');\n }\n\n onPrint(requestId: string, poId: number, type: string): void {\n this.fsrService.downloadPoPdf(requestId, poId, type);\n }\n\n onDelete(item: FsPoModel): void {\n this.poService.deletePoItem(this.requestId, item).subscribe();\n }\n\n trackByPoItemFn(index: number, poItemDetails: FsPoModel) {\n return poItemDetails.id;\n }\n\n getItemName(array, code: string): string {\n return this.utilsService.getItemName(array, code);\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(Events.PoSowSubmitValidated, (elementRef) => {\n\n if (this.poDetails.length) {\n this.submitStep(elementRef);\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.po.po-required'),\n this.translate.instant('module.requests.po.po-stage-error'));\n }\n }));\n }\n\n private submitStep(elementRef: any): void {\n const stepSubmitObservable = this.fsPoService.isItemsOrdersQtyAllocated(this.poItems)\n ? of(true)\n : this.confirmStepSubmit();\n\n stepSubmitObservable\n .subscribe(() => {\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.StepSubmit, 'right');\n });\n }\n\n private confirmStepSubmit(): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.submit-po-unalloc-items-header'),\n this.translate.instant('module.requests.po.modal.submit-po-unalloc-items-desc'),\n this.translate.instant('common.button.yes'),\n this.translate.instant('common.button.no'),\n )\n .afterClosed()\n .pipe(filter((isConfirmed: boolean) => isConfirmed));\n }\n\n public totalPoItemTestQtys(po: FsPoModel) {\n return po.items.reduce((acc, item) => acc + (item.testCardQuantity || 0), 0);\n }\n}\n","
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n\n \n
\n
\n
\n\n \n
\n \n
\n\n
\n \n
\n\n
\n
\n \n \n\n
\n
\n \n\n
\n
\n {{ 'module.requests.upload.artwork-files' | translate }}\n\n \n
\n
\n \n \n
\n
\n\n
\n
\n {{'common.label.note' | translate}}:\n {{request?.details.artworkNotes}}\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport cloneDeep from 'lodash/cloneDeep';\nimport includes from 'lodash/includes';\nimport _map from 'lodash/map';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { selectFinancialServiceRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { ARTWORK_STATUSES } from '../../../../constants/artwork-file-statuses.constants';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport {\n Events,\n EventService,\n FsrEvents,\n} from '../../../../../shared/services/event-service.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { FinancialServiceRequestItemModel } from '../../../../models/financial-service-request.model';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\n\n@Component({\n selector: 'app-fsr-approve-request',\n templateUrl: './fsr-approve-request.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FsrApproveRequestComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n public requestItems: FinancialServiceRequestItemModel[];\n\n private ngUnsubscribe = new Subject();\n private subs: Subscription [] = [];\n\n request$ = this.store.pipe(\n select(selectFinancialServiceRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private store: Store,\n private messageService: MessageService,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private translate: TranslateService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setStepSubmitSubscription();\n\n this.request$.subscribe(request => {\n this.requestItems = cloneDeep(request.items);\n this.cd.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subs.forEach(sub => sub?.unsubscribe());\n }\n\n private get isAllItemsApproved(): boolean {\n const hasUnreviewed = includes(\n _map(this.requestItems, (item) => item.artReview?.status),\n ARTWORK_STATUSES.unreviewed,\n );\n\n const hasRejected = includes(\n _map(this.requestItems, (item) => item.artReview?.status),\n ARTWORK_STATUSES.rejected\n );\n\n return !(hasUnreviewed || hasRejected);\n }\n\n private setStepSubmitSubscription(): void {\n this.subs.push(\n this.eventService.on(FsrEvents.ArtworkApproveValidation, elementRef => {\n if (this.isAllItemsApproved) {\n this.stepActionsService.addReason(\n elementRef,\n 'step-approve',\n 'step-approve',\n FsrEvents.ArtworkApprove,\n 'right',\n );\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.approve.item-approve-required'),\n this.translate.instant('module.requests.approve.approve-items-stage-error'));\n }\n }),\n this.eventService.on(FsrEvents.ArtworkApprove, ({ comment }) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n })\n );\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {AtPrinterService} from './at-printer.service';\nimport {MilestoneItem, PrinterItemModel} from '../models/printer-item.model';\nimport {Observable, of} from 'rxjs';\nimport {API} from '../../shared/constants/api.constants';\nimport {switchMap} from 'rxjs/operators';\nimport {HttpEventType} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FsrAtPrinterService extends AtPrinterService {\n\n getRequestPrinterWorkItems(requestId: string | number): Observable {\n return this.errorHandlingHttpClient.get(`${API.getFsrPrinterWorkItems(requestId)}`);\n }\n\n updateMilestoneDetails(\n requestId: number | string, printerItem: PrinterItemModel, milestone: MilestoneItem, data: any\n ): Observable {\n return this.errorHandlingHttpClient.put(\n API.updateFsrMilestoneDetails(requestId, printerItem.printerDetails.id, printerItem.id, milestone.id),\n data\n );\n }\n\n uploadWorkItemMilestoneAsn(\n requestId: string, printerId: number, itemId: number, milestoneId: number, file: File\n ): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n protected createWorkItemMilestoneAsn(\n requestId: string, printerId: number, itemId: number, milestoneId: number, uploadId: string\n ): Observable {\n return this.errorHandlingHttpClient.post(\n `${API.createFsrWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId)}`,\n null,\n {\n reportProgress: true,\n observe: 'events',\n params: {uploadId}\n }\n );\n }\n\n deleteWorkItemMilestoneAsn(\n requestId: string, printerId: number, itemId: number, milestoneId: number, attachmentId: number\n ): Observable {\n return this.errorHandlingHttpClient.delete(\n `${API.deleteFsrWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, attachmentId)}`\n );\n }\n\n bulkUpdateAtPrinter(requestId: string, printerId: number, itemId: number, data: any): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.put(`${API.doFsrBulkWorkItemMilestoneUpdate(requestId, printerId, itemId)}`, data);\n }\n\n}\n","import {HttpEventType} from '@angular/common/http';\nimport {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {AbstractControl, FormArray, FormBuilder, FormGroup} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {BehaviorSubject, combineLatest, EMPTY, merge, Observable, of, Subject, throwError} from 'rxjs';\nimport {catchError, finalize, shareReplay, switchMap, takeUntil, tap} from 'rxjs/operators';\nimport {PrinterItemModel} from 'src/app/requests/models/printer-item.model';\n\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\nimport {MilestoneItem} from '../../../../../models/printer-item.model';\nimport {UploadLinkModel} from '../../../../../models/upload-link.model';\nimport {AtPrinterService} from '../../../../../services/at-printer.service';\nimport {FileUploadService} from '../../../../../services/file-upload.service';\nimport {\n FsrBulkChangeComponentData,\n FsrBulkChangeComponentResponse,\n MilestoneDetailsPayload\n} from './fsr-bulk-change.interface';\nimport {FsrAtPrinterService} from '../../../../../services/fsr-at-printer.service';\n\n@Component({\n selector: 'app-fsr-bulk-change',\n templateUrl: './fsr-bulk-change.component.html',\n styleUrls: ['./fsr-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: FsrAtPrinterService\n }\n ]\n})\nexport class FsrBulkChangeComponent implements OnInit, OnDestroy {\n public readonly fileRestrictionOptions = {\n fileType: FILE_TYPES.FINANCIAL_SERVICES.ASN,\n fileSize: FILE_SIZE_RESTRICTIONS.FINANCIAL_SERVICES.ASN,\n };\n\n private loadingSubject = new BehaviorSubject(false);\n public loading$ = this.loadingSubject.asObservable();\n private errorSubject = new BehaviorSubject(null);\n public error$: Observable = this.errorSubject.asObservable();\n private ngUnsubscribe = new Subject();\n\n public bulkForm: FormGroup;\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: FsrBulkChangeComponentData,\n private fb: FormBuilder,\n private fileUploadService: FileUploadService,\n private cd: ChangeDetectorRef,\n private atPrinterService: AtPrinterService\n ) {}\n\n public ngOnInit(): void {\n this.bulkForm = this.fb.group(\n {\n shipDate: this.fb.control(null),\n estimatedArrivalDate: this.fb.control(null),\n fullyCompletedPoIssued: this.fb.control(false),\n completed: this.fb.control({value: false, disabled: true}),\n files: this.fb.control([]),\n },\n {\n updateOn: 'change',\n validators: (ac: AbstractControl) => (ac?.value\n && !ac.value.shipDate\n && !ac.value.estimatedArrivalDate\n && !ac.value.completed\n && !ac.value.fullyCompletedPoIssued\n && !ac.value.files?.length\n )\n ? {noChanges: true}\n : null\n }\n );\n\n this.bulkForm.get('fullyCompletedPoIssued').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(isFullyCompletedPoIssuedChecked => {\n const completed = this.bulkForm.get('completed');\n if (isFullyCompletedPoIssuedChecked) {\n completed.patchValue(false);\n completed.enable();\n } else {\n completed.patchValue(false);\n completed.disable();\n }\n completed.updateValueAndValidity();\n });\n\n // tslint:disable-next-line:deprecation\n merge(\n this.bulkForm.get('completed').valueChanges,\n this.bulkForm.get('shipDate').valueChanges,\n this.bulkForm.get('estimatedArrivalDate').valueChanges,\n )\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.bulkForm.get('shipDate').updateValueAndValidity({ emitEvent: false });\n this.bulkForm.get('estimatedArrivalDate').updateValueAndValidity({ emitEvent: false });\n });\n }\n\n public isEstimatedArrivalDateRequired(form: FormGroup | FormArray): boolean {\n return form\n && form.get('completed').value\n && !form.get('shipDate').value;\n }\n\n public ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onClose(): void {\n this.dialogRef.close(false);\n }\n\n public onCancel(): void {\n this.dialogRef.close(false);\n }\n\n public async onSubmit(): Promise {\n if (!this.bulkForm.valid) {\n return;\n }\n\n this.bulkForm.markAllAsTouched();\n this.bulkForm.updateValueAndValidity();\n const {\n files,\n ...details\n }: { files: (File & { progress: number })[] } & MilestoneDetailsPayload['details'] = this.bulkForm.getRawValue();\n\n this.loadingSubject.next(true);\n\n const filesUploadLinks$ = combineLatest(\n files.map(file => this.fileUploadService.requestAttachmentUploadLink(this.dialogData.requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => {\n if (event.type === HttpEventType.UploadProgress) {\n const progress = Math.floor((event.loaded / event.total) * 100);\n file.progress = progress;\n }\n this.cd.markForCheck();\n return event.type === HttpEventType.Response ? of(uploadLink) : EMPTY;\n })\n ))\n ))\n ).pipe(\n // for the case someone close modal before upload process finishes.\n takeUntil(this.ngUnsubscribe)\n );\n\n const uploadedFiles = await filesUploadLinks$\n .toPromise()\n .then((uploadLinks: UploadLinkModel[]) => (uploadLinks || []).map(ul => ul.uploadId));\n\n const payload: MilestoneDetailsPayload = {\n milestoneIds: this.dialogData.selectedItems.map(sI => sI.id),\n details: {...details, fullyCompletedPoIssued: details.fullyCompletedPoIssued || null},\n asnFileIds: uploadedFiles\n };\n\n const request = of(true)\n .pipe(\n tap(() => {\n this.loadingSubject.next(true);\n }),\n switchMap(() => this.atPrinterService\n .bulkUpdateAtPrinter(this.dialogData.requestId, this.dialogData.printerId, this.dialogData.itemId, payload)\n .pipe(\n catchError(err => {\n this.errorSubject.next(err);\n return throwError(err);\n })\n ))\n )\n .pipe(\n takeUntil(this.ngUnsubscribe),\n finalize(() => {\n this.loadingSubject.next(false);\n }),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n request.subscribe(response => {\n // lest skip response data and just simply trigger reload in the parent element\n this.dialogRef.close(response);\n });\n }\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n\n \n\n \n
\n \n {{ error?.error?.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 \n
\n
\n \n {{ 'common.button.step-submit' | translate }}\n \n \n \n
\n
\n","
\n
\n
\n \n
\n
\n \n {{ 'module.requests.finance.wpn-description' | translate }}:\n {{ milestone.productItem.wpnDescription }}\n \n \n {{ 'module.requests.pop-prod.details.item-description' | translate }}:\n {{ milestone.productItem.itemDescription }}\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n \n\n \n
\n \n {{ label | translate }}\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ data }}\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { FILE_TYPES } from '../../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../../shared/models/upload-file-restrictions.model';\nimport { STATUSES } from '../../../../../constants/request-statuses.constant';\nimport { MilestoneItem, PrinterItemModel } from '../../../../../models/printer-item.model';\nimport { selectRequestDetails } from '../../../../../reducers/request-details/request-details.selectors';\nimport { AtPrinterService } from '../../../../../services/at-printer.service';\nimport { FsrAtPrinterService } from '../../../../../services/fsr-at-printer.service';\n\n@Component({\n selector: 'app-fsr-printer-milestone',\n templateUrl: './fsr-printer-milestone.component.html',\n styleUrls: ['./fsr-printer-milestone.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: FsrAtPrinterService\n }\n ],\n})\nexport class FsrPrinterMilestoneComponent implements OnInit, OnDestroy {\n @Input() public milestone: MilestoneItem;\n @Input() public requestId: string;\n @Input() public printerId: number;\n @Input() public itemId: number;\n @Input() public milestoneIndex: number;\n @Input() public printerIndex: number;\n @Input() public isDisabled: boolean;\n @Output() public milestoneCheck = new EventEmitter();\n @Output() public milestoneValuesChange = new EventEmitter();\n\n public readonly fileRestrictionOptions = {\n fileType: FILE_TYPES.FINANCIAL_SERVICES.ASN,\n fileSize: FILE_SIZE_RESTRICTIONS.FINANCIAL_SERVICES.ASN,\n };\n\n private formGroup: FormGroup;\n\n private milestoneFormSubscriptions: Subscription[] = [];\n @Input() public set milestoneForm(milestoneForm: FormGroup) {\n this.formGroup = milestoneForm;\n this.milestoneFormSubscriptions.forEach(s => s.unsubscribe());\n this.milestoneFormSubscriptions = [];\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('estimatedArrivalDate').valueChanges,\n milestoneForm.get('estimatedArrivalDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: value,\n completed: this.milestone.details.completed,\n fullyCompletedPoIssued: milestoneForm.get('fullyCompletedPoIssued').value,\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('shipDate').valueChanges,\n milestoneForm.get('shipDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n completed: this.milestone.details.completed,\n fullyCompletedPoIssued: milestoneForm.get('fullyCompletedPoIssued').value,\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('fullyCompletedPoIssued').valueChanges,\n milestoneForm.get('fullyCompletedPoIssued').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n completed: this.milestone.details.completed,\n fullyCompletedPoIssued: value,\n });\n })\n );\n\n if (this.milestone.details.completed || this.isDisabled) {\n milestoneForm.disable();\n }\n }\n public get milestoneForm(): FormGroup {\n return this.formGroup;\n }\n\n public status: {status: string};\n private ngUnsubscribe = new Subject();\n\n constructor(\n private store: Store,\n private atPrinterService: AtPrinterService\n ) {}\n\n public ngOnInit(): void {\n this.status = {\n status: this.milestone.details.completed ? STATUSES.COMPLETED : STATUSES.IN_PROGRESS\n };\n\n this.store\n .select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(details => {\n if (details?.status === STATUSES.TERMINATED || this.isDisabled) {\n this.milestoneForm?.disable({emitEvent: false});\n } else if (details && !this.milestone.details.completed) {\n this.milestoneForm?.enable({emitEvent: false});\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public uploadFileFunction = (file: File) => this.atPrinterService.uploadWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n file\n );\n\n public removeFileFunction = (attachmentId: number) => this.atPrinterService.deleteWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n attachmentId\n );\n\n public updateMilestoneWithUploadedFile(obj: {action: string; data: any}): void {\n if (obj.action === 'add') {\n this.milestone.asnFiles.push(obj.data);\n } else {\n const index = this.milestone.asnFiles.findIndex(item => item?.id === obj.data.id);\n this.milestone.asnFiles.splice(index, 1);\n }\n }\n\n public onMilestoneCheck(isChecked: boolean): void {\n this.milestoneCheck.emit(isChecked);\n }\n\n public get isSelectDisabled(): boolean {\n return this.status.status === STATUSES.COMPLETED;\n }\n\n public getTestId(elementId: string): string {\n return `printer_${this.printerIndex}_milestone_${this.milestoneIndex}_${elementId}`;\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit} from '@angular/core';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {select, Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {FormBuilder} from '@angular/forms';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {AtPrinterService} from '../../../../services/at-printer.service';\nimport {MilestoneItem, PrinterItemModel} from '../../../../models/printer-item.model';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {BehaviorSubject, combineLatest, Observable, of, Subject} from 'rxjs';\nimport {selectFinancialServiceRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, map, shareReplay, startWith, switchMap, take, takeUntil} from 'rxjs/operators';\nimport {API} from '../../../../../shared/constants/api.constants';\nimport {FsrAtPrinterService} from '../../../../services/fsr-at-printer.service';\nimport {FsrBulkChangeComponent} from './fsr-bulk-change/fsr-bulk-change.component';\nimport {FsrBulkChangeComponentData, FsrBulkChangeComponentResponse} from './fsr-bulk-change/fsr-bulk-change.interface';\n\n@Component({\n selector: 'app-fsr-at-printer',\n templateUrl: './fsr-at-printer.component.html',\n styleUrls: ['./fsr-at-printer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: FsrAtPrinterService\n }\n ],\n})\nexport class FsrAtPrinterComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n private get printerItems(): PrinterItemModel[] {\n return this.printerItemsSubject.getValue();\n }\n\n constructor(\n private store: Store,\n private translate: TranslatePipe,\n private modalService: ModalService,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private atPrinterService: AtPrinterService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService\n ) {\n super();\n }\n\n private ngUnsubscribe = new Subject();\n\n request$ = this.store.pipe(\n select(selectFinancialServiceRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n private printerItemsSubject = new BehaviorSubject(null);\n printerItems$ = this.printerItemsSubject.asObservable().pipe(filter(v => v != null));\n isBlankState$ = this.printerItems$.pipe(\n map(pi => pi.length === 0),\n startWith(true)\n );\n printerForm$ = this.printerItems$.pipe(\n map(pi => this.fb.group({\n printerItems: this.fb.array(\n pi.map(printer =>\n this.fb.group({\n milestones: this.fb.array(\n printer.milestones.map(milestone =>\n this.fb.group({\n shipDate: this.fb.control(\n {\n value: milestone.details.shipDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n estimatedArrivalDate: this.fb.control(\n {\n value: milestone.details.estimatedArrivalDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n fullyCompletedPoIssued: this.fb.control({\n value: milestone.details.fullyCompletedPoIssued || false,\n disabled: this.isDisabled || milestone.details.completed,\n }, {\n updateOn: 'blur',\n })\n })\n )\n )\n })\n )\n )\n })),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n checkedMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => milestone.isChecked)))\n );\n\n checkableMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => !milestone.details.completed)))\n );\n\n private setPrinterItems(printerItems: PrinterItemModel[]) {\n this.printerItemsSubject.next(\n printerItems.map(pi => ({\n /**\n * isChecked aggredated computed property\n */\n get isChecked(): boolean {\n const uncompletedRequests = (this.milestones as MilestoneItem[]).filter(m => !m.details.completed);\n /**\n * Checked if all checkable milestones are checked\n */\n return uncompletedRequests.reduce((c, m) => c && m.isChecked === true, uncompletedRequests.length >= 1);\n },\n set isChecked(isChecked: boolean) {\n this.milestones = this.milestones.map(m => ({...m, isChecked: m.details.completed ? false : isChecked}));\n },\n ...pi,\n milestones: pi.milestones.map(ms => ({...ms, isChecked: false})),\n pdfReferences: pi.purchaseOrderReferences.flatMap(ref => [\n {\n type: 'printer',\n id: ref.id,\n fileName: `PO #${ref.id}.pdf`,\n url: API.fsrPoPdfDownload(this.requestId, ref.id, 'printer')\n }\n ])\n }))\n );\n }\n\n ngOnInit(): void {\n this.request$\n .pipe(\n switchMap(request => this.atPrinterService.getRequestPrinterWorkItems(request.id)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n )\n .subscribe(printerItems => this.setPrinterItems(printerItems));\n\n this.eventService.on(\n Events.AtPrinterSubmitValidated,\n elementRef => {\n if (this.isDisabled) {\n return;\n }\n const isAllMilestonesCompleted = this.printerItems.every(printer =>\n printer.milestones.every(milestone => milestone.details.completed)\n );\n\n if (isAllMilestonesCompleted) {\n this.stepActionsService.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('module.requests.at-printer.mark-complete-required'),\n this.translate.transform('module.requests.at-printer.mark-complete-error')\n );\n },\n this.ngUnsubscribe\n );\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getBulkLabel(printerItem: PrinterItemModel, printerIdx: number): Observable {\n if (printerItem.milestones.some(milestone => milestone.isChecked)) {\n return combineLatest([this.checkedMilestones$, this.checkableMilestones$]).pipe(\n map(([checkedMilestones, checkableMilestones]) => this.translate.transform('common.label.selected-of', {\n selected: checkedMilestones[printerIdx].length,\n all: checkableMilestones[printerIdx].length\n }))\n );\n }\n return of(this.translate.transform('common.label.select-all'));\n }\n\n isBulkDisabled(printerIdx: number): Observable {\n return this.checkedMilestones$.pipe(map(checkedMilestones => checkedMilestones[printerIdx].length <= 1));\n }\n\n isBulkCheckboxDisabled(printerIdx: number): Observable {\n return this.checkableMilestones$.pipe(\n map(checkableMilestones => checkableMilestones[printerIdx].length <= 1)\n );\n }\n\n public onBulkClick(printerIdx: number): void {\n const selectedItems: MilestoneItem[] = this.printerItems[printerIdx].milestones.filter(value => value.isChecked);\n\n const dialogRef = this.modalService.openModal(\n FsrBulkChangeComponent,\n {\n requestId: this.requestId,\n itemId: this.printerItems[printerIdx].id,\n printerId: this.printerItems[printerIdx].printerDetails.id,\n selectedItems\n },\n 'bulk-change-modal'\n );\n\n dialogRef.afterClosed().subscribe(async dialogResponse => {\n // reload the data if the dialog was not just simply closed\n if (!dialogResponse) {\n return;\n }\n\n const data = this.printerItems.map((p, i) => {\n const {isChecked, ...printerItem} = p;\n if (i === printerIdx) {\n return dialogResponse;\n }\n return printerItem;\n });\n this.setPrinterItems([...data]);\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n public onMarkComplete(printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n this.atPrinterService\n .updateMilestoneDetails(this.requestId, this.printerItems[printerIdx], this.printerItems[printerIdx].milestones[milestoneIdx], {\n fullyCompletedPoIssued: this.printerItems[printerIdx].milestones[milestoneIdx].details?.fullyCompletedPoIssued,\n completed: isCompleted,\n shipDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.shipDate || null,\n estimatedArrivalDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.estimatedArrivalDate || null\n })\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, isCompleted);\n });\n }\n\n public isMarkAsCompletedDisabled(printerIdx: number, milestoneIdx: number): Observable {\n return this.printerForm$.pipe(\n map(printerForm => {\n const shipDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.shipDate`);\n const estimatedArrivalDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.estimatedArrivalDate`);\n const fullyCompletedPoIssued = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.fullyCompletedPoIssued`);\n\n return !fullyCompletedPoIssued.value\n || !(shipDate.valid)\n || !(estimatedArrivalDate.valid);\n })\n );\n }\n\n public onMilestoneValuesChange(details: any, printerIdx: number, milestoneIdx: number): void {\n this.atPrinterService\n .updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n details\n )\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, details.completed);\n });\n }\n\n public onMilestoneCheck(isChecked: boolean, printerIdx: number, milestoneIdx: number): void {\n this.printerItems[printerIdx].milestones[milestoneIdx].isChecked = isChecked;\n this.cd.markForCheck();\n }\n\n private async onSuccessMilestoneUpdate(data: any, printerIdx: number, milestoneIdx: number, isCompleted: boolean): Promise {\n // Restrict updating with invalid data\n const currentMilestoneForm = (await this.printerForm$.pipe(take(1)).toPromise())\n .get('printerItems.' + printerIdx).get('milestones.' + milestoneIdx);\n\n if (!currentMilestoneForm.valid && !currentMilestoneForm.disabled) {\n return;\n }\n\n const milestone = this.printerItems[printerIdx].milestones[milestoneIdx];\n this.printerItems[printerIdx].milestones[milestoneIdx] = {\n ...milestone,\n details: data,\n isChecked: isCompleted ? false : milestone.isChecked\n };\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.cd.markForCheck();\n }\n\n public onSelectAllChange(isChecked: boolean, pIdx: number) {\n this.printerItems[pIdx].isChecked = isChecked;\n }\n\n}\n","\n \n\n\n \n \n \n
\n {{ 'module.requests.at-printer.printer' | translate }}:\n {{ printerItem.printerDetails.name }}\n
\n
\n
\n

{{ 'module.requests.at-printer.po-files' | translate }}

\n \n
\n
\n

{{ 'module.requests.at-printer.milestones' | translate }}

\n
\n \n \n {{ 'module.requests.at-printer.bulk-change' | translate }}\n \n
\n
\n \n \n \n {{ 'module.requests.at-printer.mark-complete' | translate }}\n \n\n \n \n {{ 'module.requests.at-printer.cancel-completion' | translate }}\n \n \n
\n
\n
\n
\n
\n
\n\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpEventType, HttpParams} from '@angular/common/http';\nimport {Observable, of, ReplaySubject, Subject} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {ErrorHandlingHttpClient} from '../../shared/services/error-handling-http-client.service';\nimport {BIF_PRODUCTION_REQUEST} from '../constants/request-types.constant';\nimport {STATUSES} from '../constants/request-statuses.constant';\nimport {API} from '../../shared/constants/api.constants';\nimport {FileUploadService} from './file-upload.service';\nimport {BifProductionRequestModel} from 'src/app/requests/models/bif-production-request.model';\nimport {FileDownloadService} from './file-download.service';\nimport {BasePoModel} from '../models/po.model';\nimport { Events, EventService } from '../../shared/services/event-service.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BifProductionService {\n private poDetails: ReplaySubject = new ReplaySubject(1);\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private fileUploadService: FileUploadService,\n private fileDownloadService: FileDownloadService,\n private eventService: EventService\n ) {}\n\n public getBifId(searchString: string): Observable<{ name: any; id: any }[] | undefined> {\n const params = new HttpParams()\n .append('requestId', searchString)\n .append('types', BIF_PRODUCTION_REQUEST)\n .append('statuses', STATUSES.IN_PROGRESS);\n\n return this.errorHandlingHttp.get(API.searchRequests, { params }).pipe(\n map(data => data?.documents.map(item => ({ id: item.id, name: item.name }))),\n );\n }\n\n public uploadProofOfPayments(requestId: string | number, file: File): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'finance', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createProofOfPayments(requestId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n public deleteProofOfPayment(requestId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(`${API.bifDeleteProofOfPayment(requestId, attachmentId)}`);\n }\n\n private createProofOfPayments(requestId: string | number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(`${API.bifCreateProofOfPayment(requestId)}`, null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public uploadPrinterProofForRequestItem(\n file: File,\n requestId: string,\n ): Observable> {\n const createUploadItemPrinterProofUrl = API.createBifPrinterProof(requestId);\n return this.uploadAndCreateAttachment(file, requestId, createUploadItemPrinterProofUrl, 'printer-proof');\n }\n\n private uploadAndCreateAttachment(\n file: File,\n requestId: number | string,\n createAttachmentUrl: string,\n attachmentFileType: string\n ) {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, attachmentFileType, file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createBifAttachment(createAttachmentUrl, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n private createBifAttachment(createAttachmentUrl: string, uploadId: string): Observable {\n return this.errorHandlingHttp.post(createAttachmentUrl, null,\n {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public deletePrinterProof(requestId: string, attachmentId: number): Observable {\n return this.errorHandlingHttp.delete( `${API.bifDeletePrinterProof(requestId, attachmentId)}`);\n }\n\n public downloadPoPdf(requestId: string | number, poId: number, type: string): void {\n this.fileDownloadService.downloadFile(API.bifPoPdfDownload(requestId, poId, type));\n }\n\n public getPOListener(): Observable {\n return this.poDetails.asObservable();\n }\n\n public createPO(requestId: number | string, data: any): Observable {\n const reqObj = Object.assign(data);\n return this.errorHandlingHttp.post(`${API.bifPO(requestId)}`, reqObj);\n }\n\n public callPO(requestId: number | string): void {\n this.errorHandlingHttp.get(`${API.bifPO(requestId)}`).subscribe((data: BasePoModel) => {\n this.poDetails.next(data);\n });\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n\n public deletePO(requestId: number | string, poId: number): Observable {\n const observable = new Subject();\n\n this.errorHandlingHttp.delete(`${API.bifUpdatePO(requestId, poId)}`)\n .subscribe(() => {\n this.callPO(requestId);\n observable.next();\n }, err => observable.error(err));\n\n return observable.asObservable();\n }\n\n public updatePO(requestId: number | string, poId: number, data: any): Observable {\n const observable = new Subject();\n\n const reqObj = Object.assign(data);\n this.errorHandlingHttp.put(`${API.bifUpdatePO(requestId, poId)}`, reqObj)\n .subscribe(response => {\n this.callPO(requestId);\n observable.next(response);\n }, error => observable.error(error));\n return observable.asObservable();\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Action, ActionsSubject, Store } from '@ngrx/store';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { UserModel } from '../../../../../shared/models/user.model';\nimport { UserGroups } from '../../../../../shared/constants/user-groups.enum';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { BifProductionService } from '../../../../services/bif-production.service';\nimport {\n lazyLoadBifComponentTypes,\n lazyLoadBifFulfillmentTypes,\n lazyLoadPartnerGroups,\n lazyLoadPaymentTypes,\n lazyLoadRequestItemTypes,\n lazyLoadWarehouses,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectBifComponentTypes,\n selectBifFulfillmentTypes,\n selectPartnerGroups,\n selectPaymentTypes,\n selectRequestItemTypes,\n selectWarehouses,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport {\n BifProductionRequestItemModel,\n BifProductionRequestModel,\n} from '../../../../models/bif-production-request.model';\nimport { selectBifProductionRequestDetails, selectAdditionalOtherContacts } from '../../../../reducers/request-details/request-details.selectors';\nimport { BIF_PRODUCTION_REQUEST } from '../../../../constants/request-types.constant';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { STATUSES } from '../../../../constants/request-statuses.constant';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport {PaymentType} from '../../../../constants/request-details.constants';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { Warehouse } from '../../../../models/warehouse.model';\nimport { UserPermissionsService } from '../../../../../shared/services/user-permissions.service';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\n\n@Component({\n selector: 'app-bif-details',\n templateUrl: './bif-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifDetailsComponent\n extends AbstractRequestStepComponent\n implements OnInit, OnDestroy, OnChanges, RequestDetailsStageController\n{\n @Output() public deleteDraft = new EventEmitter();\n\n public userRoles = UserRoles;\n public form: FormGroup;\n public additionalStakeholdersDetailsControls: FormArray;\n public requestItemsControls: FormArray;\n public ppmList: { value: UserModel }[] = [];\n public lobList: any[] = [];\n public paymentTypes: PaymentType[] = [];\n public componentTypes: CodeNameModel[] = [];\n public fulfillmentTypes: CodeNameModel[] = [];\n public itemTypes: CodeNameModel[] = [];\n public shipmentOptions: { value: Warehouse }[] = [];\n public request: BifProductionRequestModel;\n public isPaymentTypeRebill: boolean;\n public isBifPpm: boolean;\n public formValidationTrigger: Subject = new Subject();\n public readonly paymentsProofRestriction = {\n fileType: FILE_TYPES.BIF_PRODUCTION.FINANCE,\n fileSize: FILE_SIZE_RESTRICTIONS.FINANCIAL_SERVICES.FINANCE,\n };\n public newItemIndex: number;\n\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n private isShowSavedMessage = false;\n private _isRebillTypeRequired: boolean;\n private _isRebillAmountRequired = false;\n private _isRebillPercentageRequired: boolean;\n\n private data$ = combineLatest([\n this.store.select(selectBifProductionRequestDetails).pipe(\n filter(request => request !== null && request?.type === BIF_PRODUCTION_REQUEST),\n ),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0)),\n this.store.select(selectPaymentTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectBifComponentTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectBifFulfillmentTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectRequestItemTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectWarehouses).pipe(filter(v => v.length > 0))\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n\n constructor(\n public utilsService: UtilsService,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private store: Store,\n private actions: ActionsSubject,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n private requestsService: RequestsService,\n private eventService: EventService,\n private messageService: MessageService,\n private bifProductionService: BifProductionService,\n private userPermissionsService: UserPermissionsService,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {\n super();\n }\n\n public async ngOnInit(): Promise {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadPaymentTypes());\n this.store.dispatch(lazyLoadBifComponentTypes());\n this.store.dispatch(lazyLoadBifFulfillmentTypes());\n this.store.dispatch(lazyLoadRequestItemTypes());\n this.store.dispatch(lazyLoadWarehouses());\n\n this.buildForm();\n this.isBifPpm = await this.userPermissionsService.isActionAvailable(UserRoles.BIF_PRODUCTION_REQUEST.PRODUCTION_MANAGER);\n this.toggleFormDisabling();\n this.setControlsSubs();\n this.getBifPpmList();\n this.setEventsSubs();\n this.getData();\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe));\n }\n\n public async validate(): Promise {\n const form = this.form;\n if(form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n form.markAllAsTouched();\n this.cd.markForCheck();\n this.formValidationTrigger.next(null);\n return Promise.resolve(form.valid);\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public uploadPaymentProofFunction = (file) => this.bifProductionService.uploadProofOfPayments(this.requestId, file);\n\n public removePaymentProofFunction = (attachmentId: any) => this.bifProductionService.deleteProofOfPayment(this.requestId, attachmentId);\n\n public onUpdatePaymentsProof(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n this.request.details.proofsOfPaymentAttachments.push(obj.data);\n } else {\n const index = this.request.details.proofsOfPaymentAttachments.findIndex(item => item?.id === obj.data);\n this.request.details.proofsOfPaymentAttachments.splice(index, 1);\n }\n }\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact(null);\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n public onCopyRequestItem(index: number): void {\n const item = cloneDeep((this.requestItemsControls.at(index) as FormGroup).getRawValue());\n\n item.shipments?.forEach(shipment => {\n if (!shipment) {\n return;\n }\n shipment.id = null;\n if (!shipment.warehouse) {\n return;\n }\n shipment.warehouse.id = null;\n });\n\n this.pushNewRequestItem({ ...item, id: null });\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n this.requestItemsControls.removeAt(index);\n }\n\n public onAddRequestItem(): void {\n const itemForm = this.emptyItemForm;\n (itemForm.get('shipments') as FormArray).push(this.emptyShipmentForm);\n\n this.requestItemsControls.push(itemForm);\n this.updateNewItemIndex();\n }\n\n public set isRebillTypeRequired(value: boolean) {\n const control = this.form.get('details.rebillTypeCode');\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n value ? control.setValidators(Validators.required) : control.clearValidators();\n control.updateValueAndValidity({ emitEvent: false });\n\n this._isRebillTypeRequired = value;\n }\n\n public get isRebillTypeRequired(): boolean {\n return this._isRebillTypeRequired;\n }\n\n public set isRebillAmountRequired(value: boolean) {\n if (value) {\n this.amountControl.setValidators(Validators.required);\n this.percentageControl.reset();\n } else {\n this.amountControl.clearValidators();\n }\n\n this.amountControl.updateValueAndValidity({ emitEvent: false });\n this._isRebillAmountRequired = value;\n }\n\n public get isRebillAmountRequired(): boolean {\n return this._isRebillAmountRequired;\n }\n\n public set isRebillPercentageRequired(value: boolean) {\n if (value) {\n this.percentageControl.setValidators(Validators.required);\n this.amountControl.reset();\n } else {\n this.percentageControl.clearValidators();\n }\n\n this.percentageControl.updateValueAndValidity({ emitEvent: false });\n this._isRebillPercentageRequired = value;\n }\n\n public get isRebillPercentageRequired(): boolean {\n return this._isRebillPercentageRequired;\n }\n\n public get amountControl(): FormControl {\n return this.form.get('details.rebillAmountPerItem') as FormControl;\n }\n\n public get percentageControl(): FormControl {\n return this.form.get('details.rebillPercentage') as FormControl;\n }\n\n public get monthlyBillingControl(): FormControl {\n return this.form?.get('details.monthlyBilling') as FormControl;\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n details: this.fb.group({\n printProductionManager: [null, Validators.required],\n monthlyBilling: false,\n lobTypeCode: [null, Validators.required],\n partner: [null, Validators.required],\n paymentType: [null, Validators.required],\n rebillTypeCode: null,\n rebillAmountPerItem: null,\n rebillPercentage: null,\n partnerPoNumber: null,\n partnerInvoiceNumber: null,\n notes: null,\n contacts: this.fb.array([]),\n proofsOfPaymentAttachments: this.fb.array([]),\n }),\n items: this.fb.array([]),\n });\n\n this.additionalStakeholdersDetailsControls = this.form.get('details.contacts') as FormArray;\n this.requestItemsControls = this.form.get('items') as FormArray;\n }\n\n private get emptyItemForm(): FormGroup {\n return this.fb.group({\n id: null,\n artworkLocation: [null, Validators.required],\n type: [null, Validators.required],\n replenishWithArtChanges: null,\n deliveryDate: [null, Validators.required],\n fulfillmentTypeCode: [null, Validators.required],\n skuCode: null,\n orderQuantity: [null, [Validators.required, Validators.min(1)]],\n oversIncludedInQty: [null, Validators.required],\n packageId: null,\n packageDescription: [null, Validators.required],\n componentTypeCode: [null, Validators.required],\n componentDescription: null,\n shipments: this.fb.array([]),\n packingNotes: null,\n notes: null,\n });\n }\n\n private get emptyShipmentForm(): FormGroup {\n return this.fb.group({\n id: null,\n warehouse: null,\n quantity: null,\n });\n }\n\n private get rebillTypeCodeControl(): FormControl {\n return this.form.get('details.rebillTypeCode') as FormControl;\n }\n\n private get partnerPOControl(): FormControl {\n return this.form.get('details.partnerPoNumber') as FormControl;\n }\n\n private get rebillAmountControl(): FormControl {\n return this.form.get('details.rebillAmountPerItem') as FormControl;\n }\n\n private get rebillPercentageControl(): FormControl {\n return this.form.get('details.rebillPercentage') as FormControl;\n }\n\n private get monthlyRelatedControls(): AbstractControl[] {\n return [\n this.form?.get('details.partner'),\n this.form?.get('details.notes'),\n this.form?.get('details.paymentType')\n ];\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable({ emitEvent: false });\n return;\n }\n\n this.form?.enable({ emitEvent: false });\n this.toggleMonthlyRelatedControlsDisabling();\n\n if (this.request?.status !== STATUSES.DRAFT || !this.isBifPpm) {\n this.monthlyBillingControl?.disable();\n }\n }\n\n private toggleMonthlyRelatedControlsDisabling(): void {\n if (this.monthlyBillingControl?.value) {\n this.monthlyRelatedControls.forEach(control => control?.disable());\n return;\n }\n\n this.monthlyRelatedControls.forEach(control => control?.enable());\n }\n\n private pushNewRequestItem(item?: BifProductionRequestItemModel): void {\n const itemFormGroup = this.emptyItemForm;\n const shipments = itemFormGroup.get('shipments') as FormArray;\n\n if (item) {\n itemFormGroup.patchValue(item);\n }\n\n if (item?.shipments?.length) {\n item.shipments.forEach(shipment => {\n const shipmentGroup = this.emptyShipmentForm;\n\n shipmentGroup.patchValue(shipment);\n shipments.push(shipmentGroup);\n });\n } else {\n shipments.push(this.emptyShipmentForm);\n }\n\n this.requestItemsControls.push(itemFormGroup);\n }\n\n private getBifPpmList(): void {\n this.requestsService.getUsers('', [UserGroups.BIF_PPM])\n .subscribe(ppmList => {\n this.ppmList = ppmList.map(item => ({ value: item }));\n this.setPPM();\n });\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }),\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n this.saveRequest();\n }),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n if (this.form.valid) {\n\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n return;\n\n }\n this.utilsService.logInvalidControls(this.form);\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'),\n );\n\n this.form.markAllAsTouched();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n\n this.cd.markForCheck();\n\n }),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n }),\n );\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.form.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n private getData(): void {\n this.data$.subscribe((\n [request, lobList, paymentTypes, componentTypes, fulfillmentTypes, itemTypes, warehouses]:\n [BifProductionRequestModel, CodeNameModel[], CodeNameModel[], CodeNameModel[], CodeNameModel[], CodeNameModel[], Warehouse[]]\n ) => {\n this.request = cloneDeep(request);\n\n this.lobList = this.utilsService.getParentChild(cloneDeep(lobList));\n this.paymentTypes = paymentTypes;\n this.componentTypes = componentTypes;\n this.fulfillmentTypes = fulfillmentTypes;\n this.itemTypes = itemTypes;\n this.shipmentOptions = warehouses.map(shipment => ({ value: shipment}));\n\n this.updateForm(this.request);\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', this.translateService.instant('common.message.step-saved'), '');\n this.isShowSavedMessage = false;\n }\n\n this.cd.markForCheck();\n });\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n saveRequest(): void {\n const form = this.form.getRawValue();\n\n form.items.forEach(item => {\n item.shipments = cloneDeep(item.shipments.filter(shipment => shipment.warehouse || shipment.quantity));\n\n item.shipments.forEach((formShipment) => {\n if(formShipment.warehouse && !formShipment.warehouse.id){\n const shipment = (this.request.items.find(i => i.id === item.id))\n ?.shipments?.find(shipmentItem => shipmentItem.id === formShipment.id);\n formShipment.warehouse.id = shipment?.warehouse ? shipment.warehouse.id : null;\n }\n });\n });\n\n const request: BifProductionRequestModel = {\n ...this.request,\n details: { ...this.request.details, ...form.details, costTotal: this.request.details.costTotal},\n items: [ ...form.items],\n };\n\n request.items.forEach((item, idx) => item.costQuote = this.request.items[idx]?.costQuote);\n\n this.store.dispatch(\n requestDetailsActions.updateRequestDetails({requestId: this.requestId, details: request, excludeParts: ['contacts']})\n );\n }\n\n private updateForm(request: BifProductionRequestModel): void {\n this.form.patchValue(request);\n\n this.requestItemsControls.clear();\n this.additionalStakeholdersDetailsControls.clear();\n\n if (request.items?.length) {\n cloneDeep(request.items).forEach(item => this.pushNewRequestItem(item));\n } else {\n this.pushNewRequestItem();\n }\n\n if (this.request?.details?.contacts?.length) {\n this.request.details.contacts.forEach(item => {\n this.pushStakeholderContact(item);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n\n this.setPPM();\n this.toggleFormDisabling();\n }\n\n private pushStakeholderContact(contact: UserModel): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n private setPPM(): void {\n const currentVal = this.ppmList?.find(\n manager => manager?.value?.userName === this.request?.details?.printProductionManager?.userName,\n );\n\n if (currentVal?.value) {\n this.form.get('details.printProductionManager').setValue(currentVal.value);\n }\n }\n\n private updateRebillTypeRequired(): void {\n this.isRebillTypeRequired = this.form.get('details.paymentType').value === 'PREPAYMENT' ||\n this.form.get('details.paymentType').value === 'REBILL';\n }\n\n private updateAmountPercentageRequired(): void {\n this.isRebillAmountRequired = this.rebillTypeCodeControl.value === 'DOLLAR_AMOUNT';\n this.isRebillPercentageRequired = this.rebillTypeCodeControl.value === 'PERCENTAGE';\n }\n\n private setControlsSubs(): void {\n this.form.get('details.paymentType').valueChanges\n .pipe(\n filter(() => !this.monthlyBillingControl.value),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(value => {\n this.updateRebillTypeRequired();\n this.isPaymentTypeRebill = value === 'REBILL';\n\n if (!this.isRebillTypeRequired) {\n this.rebillTypeCodeControl.reset();\n }\n if (!this.isPaymentTypeRebill) {\n this.partnerPOControl.reset();\n }\n if (!this.isRebillPercentageRequired) {\n this.rebillPercentageControl.reset();\n }\n if (!this.isRebillAmountRequired) {\n this.rebillAmountControl.reset();\n }\n });\n\n this.rebillTypeCodeControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.updateAmountPercentageRequired();\n });\n\n this.monthlyBillingControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(isMonthlyBilling => {\n this.form.markAsUntouched();\n\n this.toggleMonthlyRelatedControlsDisabling();\n\n if (isMonthlyBilling) {\n this.percentageControl.reset();\n this.isRebillTypeRequired = false;\n this.isRebillAmountRequired = false;\n this.isRebillPercentageRequired = false;\n } else {\n this.updateRebillTypeRequired();\n this.updateAmountPercentageRequired();\n }\n });\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n }\n}\n","
\n
\n {{'module.requests.stages.REQUEST_DETAILS' | translate}}\n\n
\n
\n \n \n
\n
\n\n
\n \n
\n\n \n\n
\n {{'module.requests.card-design.details.partner-details' | translate}}\n
\n
\n \n
\n\n
\n \n
\n
\n
\n\n \n \n
\n {{'module.requests.details.finance-details' | translate}}\n
\n
\n \n
\n
\n
\n
\n \n
\n {{'module.requests.details.finance-details' | translate}}\n\n
\n
\n \n
\n\n
\n \n\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
\n\n
\n\n\n
\n\n \n\n
\n {{'module.requests.text.request-items' | translate}}\n\n \n \n\n
\n \n
\n\n \n\n \n \n {{'module.requests.details.add-one-item' | translate}}\n \n
\n\n \n\n
\n \n {{'module.requests.details.stakeholder-details' | translate}}\n \n\n
\n
\n \n \n
\n\n \n
\n
\n
\n","
\n \n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n\n \n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n 0 ? ' ' + (shipIndex + 1) : '')\"\n [itemsList]=\"shipmentOptions | toSelectDropdownOptions : 'value' : labelHelperService.getWarehouseLabel : true\"\n >\n
\n\n
\n \n
\n\n
1\">\n \n \n \n
\n
\n\n
\n \n \n {{ 'module.requests.details.add-shipment' | translate }}\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n \n \n
\n\n
\n
\n \n \n {{ 'module.requests.label.duplicate-item' | translate }}\n \n\n \n \n {{ 'module.requests.label.remove-item' | translate }}\n \n
\n
\n \n\n
\n \n \n \n \n \n \n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport {AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {TranslateService} from '@ngx-translate/core';\nimport {combineLatest, Subject} from 'rxjs';\nimport {filter, startWith, takeUntil} from 'rxjs/operators';\nimport {DateService} from '../../../../../../shared/services/date-service.service';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport {LabelHelperService} from '../../../../../services/label-helper.service';\nimport {Warehouse} from '../../../../../models/warehouse.model';\nimport {BifDetailsComponent} from '../bif-details.component';\nimport { WithUpdateTriggerListener, UpdateTriggerContainer } from '../../../../../../shared/constants/form-field.constant';\n\n@Component({\n selector: 'app-bif-prod-item',\n templateUrl: './bif-prod-item.component.html',\n styleUrls: ['./bif-prod-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BifProdItemComponent extends WithUpdateTriggerListener() implements OnInit, OnDestroy, OnChanges {\n @Input() public itemForm: FormGroup;\n @Input() public itemIndex: number;\n @Input() public componentTypes: CodeNameModel[];\n @Input() public fulfillmentTypes: CodeNameModel[];\n @Input() public itemTypes: CodeNameModel[];\n @Input() public shipmentOptions: {value: Warehouse}[];\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public isMonthlyBilling: boolean;\n @Input() public formValidationTrigger: Subject;\n @Input() public isExpanded: boolean;\n @Input() canDuplicate = true;\n @Input() canRemove = true;\n @Input() hasError = false;\n @Output() public removeItem = new EventEmitter();\n @Output() public copyItem = new EventEmitter();\n @Output() openedChanged = new EventEmitter();\n @Input() testId = null;\n\n public readonly RUSH_JOB_WEEKS = 2;\n public availableQty = 0;\n public isRushJobVisible: boolean;\n public labelHelperService = LabelHelperService;\n\n private ngUnsubscribe = new Subject();\n private _isReplenishRequired: boolean;\n private _isComponentDescriptionRequired: boolean;\n\n constructor(\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n public dateService: DateService,\n private translateService: TranslateService,\n @Optional() private bifDetailsComponent: BifDetailsComponent,\n @Optional() updateTriggerContainer: UpdateTriggerContainer\n ) {\n super(cd, updateTriggerContainer);\n }\n\n public ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n this.isComponentDescriptionRequired = this.isComponentTypeOther || this.isMonthlyBilling;\n this.isReplenishRequired = this.isTypeReplenishment;\n\n this.setControlsSubs();\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled?.currentValue) {\n this.itemForm.disable();\n return;\n }\n\n if (changes.isMonthlyBilling) {\n if (changes.isMonthlyBilling.currentValue) {\n this.monthlyRelatedControls.forEach(control => control.disable());\n this.isComponentDescriptionRequired = true;\n this.itemForm.get('packageDescription').clearValidators();\n this.itemForm.get('componentTypeCode').clearValidators();\n\n return;\n }\n if (this.bifDetailsComponent) {\n this.monthlyRelatedControls.forEach(control => control.enable());\n }\n this.isComponentDescriptionRequired = this.isComponentTypeOther;\n }\n }\n\n public onRemove(): void {\n this.removeItem.emit(this.itemIndex);\n }\n\n public onCopy(): void {\n this.copyItem.emit(this.itemIndex);\n }\n\n public onDeleteShipment(index: number): void {\n this.shipments.removeAt(index);\n }\n\n public onSplitShipments(): void {\n const shipToItem = this.fb.group({\n id: null,\n warehouse: null,\n quantity: null\n });\n\n this.shipments.push(shipToItem);\n }\n\n public onDateSelect(date: Date): void {\n this.isRushJobVisible = this.dateService.earlierThanNWeeksFromNow(date, this.RUSH_JOB_WEEKS);\n }\n\n public get shipments(): FormArray {\n return this.itemForm.get('shipments') as FormArray;\n }\n\n public getQuantityHint(isLast: boolean): string {\n return isLast && !this.isMonthlyBilling\n ? `${this.translateService.instant('module.requests.finance.ship-quantity-hint')}: ${this.availableQty}`\n : '';\n }\n\n public get isReplenishRequired(): boolean {\n return this._isReplenishRequired;\n }\n\n public set isReplenishRequired(value: boolean) {\n const control = this.itemForm.get('replenishWithArtChanges');\n\n value ? control.setValidators(Validators.required) : control.clearValidators();\n control.updateValueAndValidity({emitEvent: false});\n\n this._isReplenishRequired = value;\n }\n\n public get isComponentDescriptionRequired(): boolean {\n return this._isComponentDescriptionRequired;\n }\n\n public set isComponentDescriptionRequired(value: boolean) {\n const control = this.itemForm.get('componentDescription');\n\n value ? control.setValidators(Validators.required) : control.clearValidators();\n control.updateValueAndValidity({emitEvent: false});\n\n this._isComponentDescriptionRequired = value;\n }\n\n private get isComponentTypeOther(): boolean {\n return this.itemForm.get('componentTypeCode').value === 'OTHER';\n }\n\n private get isTypeReplenishment(): boolean {\n return this.itemForm.get('type').value === 'REPLENISHMENT';\n }\n\n private get orderQuantityControl(): FormControl {\n return this.itemForm.get('orderQuantity') as FormControl;\n }\n\n private get monthlyRelatedControls(): AbstractControl[] {\n return [\n this.itemForm.get('artworkLocation'),\n this.itemForm.get('type'),\n this.itemForm.get('replenishWithArtChanges'),\n this.itemForm.get('oversIncludedInQty'),\n this.itemForm.get('deliveryDate'),\n this.itemForm.get('shipments'),\n this.itemForm.get('packingNotes')\n ];\n }\n\n private setControlsSubs(): void {\n this.itemForm\n .get('type')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.isReplenishRequired = this.isTypeReplenishment;\n });\n\n this.itemForm\n .get('componentTypeCode')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.isComponentDescriptionRequired = this.isComponentTypeOther || this.isMonthlyBilling;\n });\n\n combineLatest([\n this.shipments.valueChanges.pipe(\n startWith(this.shipments.value as []),\n filter(v => v !== null)\n ),\n this.orderQuantityControl.valueChanges.pipe(\n startWith(this.orderQuantityControl.value as number),\n filter(v => v !== null)\n )\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([shipments, orderQuantity]) => {\n const usedQty = shipments.reduce((acc, curr) => acc + Number(curr.quantity), 0);\n this.availableQty = orderQuantity - usedQty;\n });\n }\n}\n","\n \n
\n
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n
\n
\n
\n\n
\n {{ 'module.requests.text.request-items' | translate }}\n
\n \n
\n
\n
\n
\n \n
\n\n
\n {{ 'module.requests.bif.items.cost-quote' | translate }}\n \n {{ itemsForm.controls[requestItemIndex].get('costQuote').value || 0 | currency : 'USD' }}\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n QueryList,\n SimpleChanges,\n ViewChildren\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {ActionsSubject, Store} from '@ngrx/store';\nimport {TranslateService} from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {BehaviorSubject, merge, Subject, Subscription} from 'rxjs';\nimport {filter, find, map, multicast, pluck, refCount, takeUntil, distinctUntilChanged, startWith, skip} from 'rxjs/operators';\nimport {\n lazyLoadBifComponentTypes,\n lazyLoadBifFulfillmentTypes,\n lazyLoadPartnerGroups,\n lazyLoadPaymentTypes,\n lazyLoadRequestItemTypes,\n lazyLoadWarehouses\n} from 'src/app/reducers/ref-data/refdata.actions';\nimport {MAX_BIF_COST_TOTAL} from 'src/app/requests/constants/request-details.constants';\nimport {REQUEST_TYPE} from 'src/app/requests/constants/request-types.constant';\nimport {BifPoItemModel} from 'src/app/requests/models/bif-po.model';\nimport {BifProductionRequestItemModel, BifProductionRequestModel} from 'src/app/requests/models/bif-production-request.model';\nimport {PopArtworkFilesAwareModel} from 'src/app/requests/models/pop-production-request.model';\nimport {BaseRequestModel} from 'src/app/requests/models/request.model';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {FileUploadService} from 'src/app/requests/services/file-upload.service';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {UpdateTriggerContainer, UpdateTriggerContainerInterface} from 'src/app/shared/constants/form-field.constant';\nimport {FILE_TYPES} from 'src/app/shared/constants/upload-restrictions.constants';\nimport {UserRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {FILE_SIZE_RESTRICTIONS} from 'src/app/shared/models/upload-file-restrictions.model';\nimport {BifEvents, Events, EventService, FsrEvents} from 'src/app/shared/services/event-service.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\n\nimport {\n selectBifComponentTypes,\n selectBifFulfillmentTypes,\n selectRequestItemTypes,\n selectWarehouses\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport {WithPanelExpanded} from '../../../../../shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport {WithDestroy} from '../../../../../shared/components/with-destroy/with-destroy.mixin';\nimport {notNull} from '../../../../../shared/utils/rxjs.utils';\nimport {selectRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {BifProdItemComponent} from '../bif-details/bif-prod-item/bif-prod-item.component';\n\nconst STAGE_ALLOWED_ITEM_FIELDS = ['skuCode', 'orderQuantity', 'packageId', 'packageDescription', 'shipments'];\n\n@Component({\n selector: 'app-bif-upload-artwork',\n templateUrl: './bif-upload-artwork.component.html',\n styleUrls: ['./bif-upload-artwork.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: UpdateTriggerContainer,\n useExisting: forwardRef(() => BifUploadArtworkComponent)\n }\n ]\n})\nexport class BifUploadArtworkComponent\n extends WithDestroy(WithPanelExpanded('first'))\n implements OnInit, AfterViewInit, OnChanges, OnDestroy, UpdateTriggerContainerInterface\n{\n @Input() requestId: string;\n @Input() isDisabled: boolean;\n @Input() public requestType: REQUEST_TYPE;\n public requestTypes = REQUEST_TYPE;\n public requestItems = [];\n public UserRoles = UserRoles;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public requestDetails: any;\n public form: FormGroup;\n public uploadForm: FormGroup;\n public itemsForm?: FormArray;\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n private maxBifCostTotal = MAX_BIF_COST_TOTAL;\n private eventSubscriptions: Array = [];\n private PRICE_MAX = 10000000;\n private PRICE_MIN = 0.01;\n public uploadRequestDetailsModel = new PopArtworkFilesAwareModel();\n\n @ViewChildren(BifProdItemComponent) itemComponents: QueryList;\n\n componentTypes$ = this.store.select(selectBifComponentTypes);\n fulfillmentTypes$ = this.store.select(selectBifFulfillmentTypes).pipe(filter(v => v.length > 0));\n itemTypes$ = this.store.select(selectRequestItemTypes).pipe(filter(v => v.length > 0));\n warehouses$ = this.store.select(selectWarehouses).pipe(\n filter(v => v.length > 0),\n map(warehouses => warehouses.map(shipment => ({value: shipment})))\n );\n updateFormTrigger = new Subject();\n get requestItemsControls(): FormArray {\n return this.form.get('items') as FormArray;\n }\n isMonthlyBilling$ = this.store.select(selectRequestDetails).pipe(pluck('details'), pluck('monthlyBilling'));\n private requestSubect = new BehaviorSubject(null);\n request$ = this.store.select(selectRequestDetails).pipe(multicast(this.requestSubect), refCount(), notNull());\n\n constructor(\n private eventService: EventService,\n private cd: ChangeDetectorRef,\n private messageService: MessageService,\n public store: Store,\n private fb: FormBuilder,\n private actions: ActionsSubject,\n private stepActionsService: StepActionsService,\n private translateService: TranslateService,\n private fileUploadService: FileUploadService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadPaymentTypes());\n this.store.dispatch(lazyLoadBifComponentTypes());\n this.store.dispatch(lazyLoadBifFulfillmentTypes());\n this.store.dispatch(lazyLoadRequestItemTypes());\n this.store.dispatch(lazyLoadWarehouses());\n\n this.buildForm();\n this.request$.pipe(takeUntil(this.ngUnsubscribe$)).subscribe((request: BifProductionRequestModel) => {\n this.updateForm(request);\n });\n\n this.buildUploadForm();\n this.initSubscriptions();\n }\n\n private get emptyItemForm(): FormGroup {\n return this.fb.group({\n id: null,\n artworkLocation: [null, Validators.required],\n type: [null, Validators.required],\n replenishWithArtChanges: null,\n deliveryDate: [null, Validators.required],\n fulfillmentTypeCode: [null, Validators.required],\n skuCode: null,\n orderQuantity: [null, [Validators.required, Validators.min(1)]],\n oversIncludedInQty: [null, Validators.required],\n packageId: null,\n packageDescription: [null, Validators.required],\n componentTypeCode: [null, Validators.required],\n componentDescription: null,\n shipments: this.fb.array([]),\n packingNotes: null,\n notes: null\n });\n }\n private get emptyShipmentForm(): FormGroup {\n return this.fb.group({\n id: null,\n warehouse: null,\n quantity: null\n });\n }\n private pushNewRequestItem(item: BifProductionRequestItemModel): void {\n const itemFormGroup = this.emptyItemForm;\n const shipments = itemFormGroup.get('shipments') as FormArray;\n\n if (item) {\n itemFormGroup.patchValue(item);\n }\n\n if (item?.shipments?.length) {\n item.shipments.forEach(shipment => {\n const shipmentGroup = this.emptyShipmentForm;\n\n shipmentGroup.patchValue(shipment);\n shipments.push(shipmentGroup);\n });\n } else {\n shipments.push(this.emptyShipmentForm);\n }\n\n this.requestItemsControls.push(itemFormGroup);\n }\n\n private updateForm(request: BifProductionRequestModel): void {\n this.form.patchValue(request);\n\n this.requestItemsControls.clear();\n\n if (request.items?.length) {\n cloneDeep(request.items).forEach(item => this.pushNewRequestItem(item));\n }\n this.toggleItemsForm(this.isDisabled);\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n details: this.fb.control(null),\n items: this.fb.array([])\n });\n }\n\n private toggleItemsForm(isDisabled: boolean) {\n this.form?.disable({\n emitEvent: false\n });\n if (!isDisabled && this.form) {\n this.requestItemsControls.controls.forEach(itemControl => {\n STAGE_ALLOWED_ITEM_FIELDS.forEach(fieldName => {\n itemControl.get(fieldName).enable({\n emitEvent: false\n });\n });\n });\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n ngAfterViewInit(): void {\n this.calculateCostTotal();\n }\n\n private toggleForm(): void {\n if (this.isDisabled) {\n this.uploadForm?.disable();\n this.itemsForm?.disable();\n } else {\n this.uploadForm?.enable();\n this.itemsForm?.enable();\n }\n\n this.toggleItemsForm(this.isDisabled);\n this.updateFormTrigger.next();\n this.cd.markForCheck();\n }\n\n private buildUploadForm(): void {\n this.uploadForm = this.fb.group({\n finalArtFilePath: this.fb.control(this.requestDetails?.details.finalArtFilePath || ''),\n artworkNotes: this.fb.control(this.requestDetails?.details.artworkNotes || '')\n });\n\n this.toggleForm();\n }\n\n private initSubscriptions(): void {\n this.eventSubscriptions.forEach(s => s.unsubscribe());\n this.eventSubscriptions = [];\n\n this.subscribeToEvent(BifEvents.UploadArtworkSubmit);\n this.subscribeToBifValidation();\n this.store\n .select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n this.calculateCostTotal();\n }\n });\n }\n\n private subscribeToEvent(event: FsrEvents | Events | BifEvents) {\n this.eventSubscriptions.push(\n this.eventService.on(event, action => {\n this.uploadStepSubmit(action.comment);\n })\n );\n }\n\n private subscribeToBifValidation() {\n this.subscriptions.push(\n this.eventService.on(BifEvents.UploadArtworkValidation, elementRef => {\n if (!this.itemsForm.valid || !this.form.valid) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message')\n );\n\n this.itemsForm.markAllAsTouched();\n this.form.markAllAsTouched();\n } else {\n if (this.isCostTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translateService.instant('module.requests.bif.po.max-rebill-header'),\n this.translateService.instant('module.requests.bif.po.max-rebill-desc4')\n );\n return;\n }\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', BifEvents.UploadArtworkSubmit, 'right');\n }\n\n this.updateFormTrigger.next();\n this.cd.markForCheck();\n })\n );\n }\n private unitCostSubscriptions: Subscription[] = [];\n\n private initData(requestData: T): void {\n this.requestItems = cloneDeep(requestData.items);\n this.requestDetails = cloneDeep(requestData);\n this.uploadForm?.patchValue({\n finalArtFilePath: this.requestDetails?.details.finalArtFilePath,\n artworkNotes: this.requestDetails?.details.artworkNotes\n });\n\n this.unitCostSubscriptions.forEach(s => s.unsubscribe());\n this.unitCostSubscriptions = [];\n this.itemsForm = this.fb.array(\n this.requestDetails?.items.map((item: BifPoItemModel, itemIndex: number) => {\n const itemGroup = this.fb.group({\n unitCost: this.fb.control(item?.unitCost, [\n Validators.required,\n UtilsService.maxCalculationValidator(\n v => (v || 0) * new BigJs(this.form.get(`items.${itemIndex}.orderQuantity`).value || '0'),\n this.PRICE_MAX,\n this.translateService.instant('module.requests.bif.items.cost-quote')\n )\n ]),\n costQuote: this.fb.control(\n {\n value: item.costQuote != null ? item.costQuote : null,\n disabled: false\n },\n [\n Validators.required\n // Validators.min(this.PRICE_MIN),\n ]\n )\n });\n\n this.form\n .get(`items.${itemIndex}`)\n .get('orderQuantity')\n .addValidators([\n UtilsService.maxCalculationValidator(\n () =>\n new BigJs(this.itemsForm.get(`${itemIndex}.unitCost`).value || '0') *\n new BigJs(this.form.get(`items.${itemIndex}.orderQuantity`).value || '0'),\n this.PRICE_MAX,\n this.translateService.instant('module.requests.bif.items.cost-quote')\n )\n ]);\n\n this.unitCostSubscriptions.push(\n merge(itemGroup.valueChanges, this.form.get(`items.${itemIndex}.orderQuantity`).valueChanges)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n const {unitCost, costQuote, orderQuantity} = {\n ...(itemGroup.value as {unitCost: number; costQuote: number}),\n orderQuantity: this.form.get(`items.${itemIndex}.orderQuantity`).value as string\n };\n // made for migration purposes\n if (costQuote && unitCost === null) {\n itemGroup.get('unitCost').setValue(costQuote / new BigJs(orderQuantity || 0), {\n emitEvent: false\n });\n }\n if (unitCost !== null) {\n itemGroup.get('costQuote').setValue((unitCost || 0) * new BigJs(orderQuantity || 0), {\n emitEvent: false\n });\n }\n })\n );\n\n this.unitCostSubscriptions.push(\n this.form\n .get(`items.${itemIndex}.orderQuantity`)\n .valueChanges.pipe(\n startWith(this.form.get(`items.${itemIndex}.orderQuantity`).value),\n distinctUntilChanged(),\n skip(1),\n takeUntil(this.ngUnsubscribe$)\n )\n .subscribe(() => {\n const unitCost = itemGroup.get('unitCost');\n unitCost.markAsTouched();\n unitCost.updateValueAndValidity({\n emitEvent: false\n });\n this.updateFormTrigger.next();\n this.cd.markForCheck();\n }),\n\n itemGroup\n .get('unitCost')\n .valueChanges.pipe(startWith(itemGroup.get('unitCost').value), distinctUntilChanged(), skip(1), takeUntil(this.ngUnsubscribe$))\n .subscribe(() => {\n const orderQuantity = this.form.get(`items.${itemIndex}.orderQuantity`);\n orderQuantity.markAsTouched();\n orderQuantity.updateValueAndValidity({\n emitEvent: false\n });\n this.updateFormTrigger.next();\n this.cd.markForCheck();\n })\n );\n return itemGroup;\n })\n );\n\n this.toggleForm();\n\n merge(this.itemsForm.valueChanges, this.form.get(`items`).valueChanges)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.calculateCostTotal();\n });\n\n this.eventService.emit({eventName: 'upload-form-update'});\n this.updateFormTrigger.next();\n this.cd.markForCheck();\n }\n\n public uploadStepSubmit(comment?: string): void {\n this.requestDetails.items = this.requestItems;\n\n this.requestDetails.items.forEach((item, index) => {\n item.costQuote = this.itemsForm.controls[index].get('costQuote').value;\n item.unitCost = this.itemsForm.controls[index].get('unitCost').value;\n });\n\n // Item data form\n const form = this.form.getRawValue();\n\n form.items.forEach(item => {\n item.shipments = cloneDeep(item.shipments.filter(shipment => shipment.warehouse || shipment.quantity));\n\n item.shipments.forEach(formShipment => {\n if (formShipment.warehouse && !formShipment.warehouse.id) {\n const shipment = this.requestSubect.value.items\n .find(i => i.id === item.id)\n ?.shipments?.find(shipmentItem => shipmentItem.id === formShipment.id);\n formShipment.warehouse.id = shipment?.warehouse ? shipment.warehouse.id : null;\n }\n });\n });\n\n const requestData = {\n ...this.requestDetails,\n details: {\n ...this.requestDetails.details,\n ...this.uploadForm?.getRawValue()\n },\n items: [\n ...form.items.map((formItem, formItemIndex) => ({\n ...this.requestSubect.value?.items[formItemIndex],\n ...formItem,\n costQuote: this.itemsForm.controls[formItemIndex].get('costQuote').value,\n unitCost: this.itemsForm.controls[formItemIndex].get('unitCost').value\n }))\n ]\n };\n\n this.store.dispatch(\n requestDetailsActions.updateRequestDetails({\n requestId: this.requestId,\n details: requestData\n })\n );\n this.actions\n .pipe(\n find(action => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.messageService.showSystemMessage('success', 'Step data was successfully saved', '');\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n });\n }\n\n public uploadFileForRequest = file => {\n const type = 'artwork';\n return this.fileUploadService.uploadArtworkForRequestItem(file, this.requestId, this.requestType, type);\n };\n\n public removeFileFromRequest = (attachmentId: string | number) =>\n this.fileUploadService.deleteArtwork(this.requestId, '', attachmentId, this.requestType);\n\n public getCostTotal(): number {\n return Number(this.requestDetails?.details.costTotal || 0);\n }\n\n public calculateCostTotal(): void {\n if (this.requestDetails) {\n this.requestDetails.details.costTotal = this.itemsForm.controls\n .reduce((sum, item) => sum.plus(Number(item.get('costQuote').value)), new BigJs(0))\n .toFixed();\n }\n }\n\n public get isCostTotalMaxError(): boolean {\n return new BigJs(this.getCostTotal()).gt(this.maxBifCostTotal);\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n this.eventSubscriptions.forEach(sub => sub?.unsubscribe());\n }\n}\n","import {Observable, OperatorFunction} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\ntype NotNull = T extends null ? never : T;\n\nexport function notNull(): OperatorFunction> {\n return (source: Observable) => source.pipe(filter(v => v != null)) as Observable>;\n}\n","\n
\n
\n
{{ 'module.requests.bif.details.finance-items' | translate }}
\n \n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.bif.details.payment-type' | translate }}:\n {{ paymentType }}\n
\n\n
\n {{ 'module.requests.bif.details.rebill-dollar' | translate }}:\n {{ request?.details?.rebillAmountPerItem }}\n
\n\n
\n {{ 'module.requests.bif.details.rebill-percentage' | translate }}:\n {{ request?.details?.rebillPercentage }}\n
\n
\n\n
\n
\n {{ 'module.requests.bif.details.partner-po' | translate }}:\n {{ request?.details?.partnerPoNumber }}\n
\n\n
\n {{ 'module.requests.bif.details.for-monthly-billing' | translate }}:\n {{ (request?.details?.monthlyBilling ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n
\n \n\n
0\">\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n \n
\n \n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.bif.details.cost-total' | translate }}:\n {{ request?.details?.costTotal | currency }}\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { selectPaymentTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { BifProductionRequestModel } from 'src/app/requests/models/bif-production-request.model';\nimport { selectBifProductionRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-bif-finance-approval',\n templateUrl: './bif-finance-approval.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifFinanceApprovalComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription [] = [];\n public paymentType: string;\n public request: BifProductionRequestModel;\n\n data$ = combineLatest([\n this.store.pipe(select(selectPaymentTypes), filter(v => v?.length > 0)),\n this.store.pipe(select(selectBifProductionRequestDetails), filter(v => !!v))\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n private store: Store) {\n super();\n }\n\n ngOnInit(): void {\n this.data$.subscribe(([paymentTypes, request]) => {\n this.request = request;\n this.paymentType = this.utilsService.getItemName(paymentTypes, this.request.details.paymentType);\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Store} from '@ngrx/store';\nimport {TranslateService} from '@ngx-translate/core';\nimport {switchMap, tap} from 'rxjs/operators';\nimport {MessageService} from '../../shared/services/message-service.service';\nimport {ModalService} from '../../shared/services/modal-service.service';\nimport {BasePoModel} from '../models/po.model';\nimport {requestDetailsActions} from '../reducers/request-details/request-details.actions';\nimport {BifProductionService} from './bif-production.service';\nimport {EMPTY, Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BifPoManageService {\n\n constructor(\n private bifService: BifProductionService,\n private messageService: MessageService,\n private modalService: ModalService,\n private translate: TranslateService,\n private store: Store,\n ) {}\n\n public deletePoItem(\n requestId: string | number,\n poItem: BasePoModel): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.delete-po-header', {number: poItem.id}),\n this.translate.instant(\n poItem.sowCreated ? 'module.requests.po.modal.delete-po-desc' : 'module.requests.po.modal.delete-po-desc2'\n ),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.bifService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.po.po-deleted', {id: poItem.id}));\n })\n );\n }\n\n public onClosePO(dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number): void {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'PO'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSuccess(dialogRef, requestId);\n }\n });\n } else {\n this.onCloseSuccess(dialogRef, requestId);\n }\n }\n\n private onCloseSuccess(dialogRef: MatDialogRef, requestId: string | number): void {\n dialogRef.close();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: requestId as string}));\n this.bifService.callPO(requestId);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { FinancialServiceRequestItemComponent } from '../models/financial-service-request.model';\nimport { ItemShipments } from '../models/request-item.model';\nimport { BifProductionRequestItemModel, BifProductionRequestItemComponent } from '../models/bif-production-request.model';\nimport {UtilsService} from '../../shared/services/utils.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BifPoService {\n private channelForMonthly = 'PNF';\n\n constructor(\n private fb: FormBuilder,\n ) { }\n\n getInitialPoForm(isMonthly?: boolean): FormGroup {\n return this.fb.group({\n accountingInfo: this.fb.group({\n channel: [isMonthly ?\n {value: this.channelForMonthly, disabled: true} :\n null, Validators.required ],\n company: [null, Validators.required],\n inventoryType: [null, Validators.required],\n lineOfBusiness: [null, Validators.required],\n partnerInvoiceNumber: [null],\n }),\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null),\n }),\n name: this.fb.control(null, [Validators.required, UtilsService.printerInfoValidationFn()]),\n mdmId: this.fb.control(null),\n id: this.fb.control(null),\n }),\n billingInfo: this.fb.group({\n additionalCosts: [null],\n discount: this.fb.control(null),\n credit: this.fb.control(null),\n taxes: [null],\n freight: [null],\n totalQuantity: [null],\n subTotal: [null],\n total: [null],\n rebillRate: this.fb.control(null),\n rebillRateAmount: this.fb.control(null),\n rebillRatePercentage: this.fb.control(null),\n rebillTotalAmount: this.fb.control(null),\n rebillTypeCode: this.fb.control(null),\n costTotal: this.fb.control(null),\n }),\n items: this.fb.array([]),\n rushFee: this.fb.control(null),\n packageIdSetupFee: this.fb.control(null),\n programming: this.fb.control(null),\n other: this.fb.control(null),\n batchFee: this.fb.control(null),\n instructions: [null],\n stakeholders: this.fb.group({\n approver3: this.fb.control(null)\n })\n });\n }\n\n getEmptyComponentDetails(qty: number): FinancialServiceRequestItemComponent {\n return {\n type: null,\n description: null,\n quantity: qty,\n unitPrice: 0,\n totalPrice: 0,\n existingInventory: false,\n poNumber: null,\n };\n }\n\n getFormItem(item: BifProductionRequestItemModel): FormGroup {\n return this.fb.group({\n shipments: this.getFormitemShipments(item),\n orderQuantity: this.fb.control(item.orderQuantity, Validators.required),\n subtotalByItem: this.fb.control(item.subtotalByItem || item.costQuote, Validators.required),\n });\n }\n\n getMonthlyFormItem(item: BifProductionRequestItemModel): FormGroup {\n return this.fb.group({\n subtotalByItem: this.fb.control(item.subtotalByItem, Validators.required),\n orderQuantity: this.fb.control(item.orderQuantity, Validators.required),\n componentDescription: this.fb.control(item.componentDescription, Validators.required)\n });\n }\n\n getEmptyFormComponentDetails(type?: string, quantity?: number) {\n return this.getFormItemComponentDetails({ type, quantity });\n }\n\n getFormItemShipment(shipment?: ItemShipments): FormGroup {\n return this.fb.group({\n id: this.fb.control(shipment?.id || null),\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: [shipment?.warehouse?.address?.addressLine1 || null],\n addressLine2: [shipment?.warehouse?.address?.addressLine2 || null],\n city: [shipment?.warehouse?.address?.city || null],\n country: [shipment?.warehouse?.address?.country || null],\n postalCode: [shipment?.warehouse?.address?.postalCode || null],\n stateProvince: [shipment?.warehouse?.address?.stateProvince || null],\n }),\n contact: this.fb.group({\n email: [shipment?.warehouse?.contact?.email || null],\n phone: [shipment?.warehouse?.contact?.phone || null],\n cell: [shipment?.warehouse?.contact?.cell || null],\n attention: [shipment?.warehouse?.contact?.attention || null],\n }),\n name: this.fb.control(shipment?.warehouse || null),\n id: this.fb.control(shipment?.warehouse?.id || null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n }),\n });\n }\n\n isItemsOrdersQtyAllocated(items: BifProductionRequestItemModel[]): boolean {\n return items\n .every(this.isItemOrderQtyAllocated);\n }\n\n isItemOrderQtyAllocated(item: BifProductionRequestItemModel): boolean {\n const shipmentsQty = item.shipments\n .reduce((qty, shipment) => Number(qty) + Number(shipment?.quantity) || 0, 0);\n\n return +shipmentsQty === +item.orderQuantity;\n }\n\n private getFormitemShipments(item: BifProductionRequestItemModel): FormArray {\n return this.fb.array(\n item.shipments.map(this.getFormItemShipment.bind(this)),\n );\n }\n\n private getFormItemComponentDetails(details: BifProductionRequestItemComponent): FormGroup {\n return this.fb.group({\n type: this.fb.control(details?.type || null),\n description: this.fb.control(details?.description || null),\n quantity: this.fb.control(details?.quantity || null),\n unitPrice: this.fb.control(details?.unitPrice || null),\n totalPrice: this.fb.control(details?.totalPrice || null),\n existingInventory: this.fb.control(details?.existingInventory || false),\n poNumber: this.fb.control(details?.poNumber || null),\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { merge, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil, throttleTime } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BifPoAccountingService {\n\n public trackAccountingInfo(\n accountingInfoFieldset: FormGroup, unsubscribeSubject: Subject, monthlyBilling: boolean): Subscription {\n return merge(of(accountingInfoFieldset.value), accountingInfoFieldset.valueChanges)\n .pipe(takeUntil(unsubscribeSubject), throttleTime(0), takeUntil(unsubscribeSubject))\n .subscribe(accountingInfo => {\n const companyField = accountingInfoFieldset.get('company');\n const lineOfBusinessField = accountingInfoFieldset.get('lineOfBusiness');\n const channelField = accountingInfoFieldset.get('channel');\n\n if (accountingInfo?.lineOfBusiness === 'IHA') {\n accountingInfoFieldset.patchValue(\n {\n company: 'INC_HA'\n },\n {\n emitEvent: false\n }\n );\n companyField.disable({\n emitEvent: false\n });\n this.presetMonthlyBillingChannelSelection(monthlyBilling, accountingInfoFieldset, channelField);\n } else if (accountingInfo?.company === 'INC_DIGS') {\n const lineOfBusinessToSet = monthlyBilling ? 'TPG' : 'PNF';\n const channelToSet = monthlyBilling ? 'IDS' : 'PNF';\n accountingInfoFieldset.patchValue(\n {\n lineOfBusiness: lineOfBusinessToSet,\n channel: channelToSet\n },\n {\n emitEvent: false\n }\n );\n lineOfBusinessField.disable({\n emitEvent: false\n });\n channelField.disable({\n emitEvent: false\n });\n } else {\n this.presetMonthlyBillingChannelSelection(monthlyBilling, accountingInfoFieldset, channelField);\n companyField.enable({\n emitEvent: false\n });\n lineOfBusinessField.enable({\n emitEvent: false\n });\n }\n });\n }\n\n private presetMonthlyBillingChannelSelection(\n monthlyBilling: boolean, accountingInfoFieldset: FormGroup, channelField: any): void {\n if (monthlyBilling) {\n accountingInfoFieldset.patchValue(\n {\n channel: 'PNF'\n },\n {\n emitEvent: false\n }\n );\n channelField.disable({\n emitEvent: false\n });\n } else {\n channelField.enable({\n emitEvent: false\n });\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, Optional, Self } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\n\n@Component({\n selector: 'app-bif-po-fees',\n templateUrl: './bif-po-fees.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BifPoFeesComponent {\n @Input() testId = 'bif_po_fees';\n constructor(@Self() @Optional() public ctrl: ControlContainer) {\n }\n}\n","
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n","\n %\n \n {{inputLabel}}\n *:\n \n \n \n {{inputHint}}\n\n \n \n {{warningMessage}}\n \n\n \n {{getErrorMessage()}}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n Optional,\n Self,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {AutonumericDirective} from '../../directives/autonumeric.directive';\nimport {MessageService} from '../../services/message-service.service';\nimport {ControlValueAccessor, FormControl, NgControl} from '@angular/forms';\nimport {ErrorStateMatcher} from '@angular/material/core';\n\nclass CustomFieldErrorMatcher implements ErrorStateMatcher {\n constructor(private customControl: FormControl) { }\n isErrorState(): boolean {\n return this.customControl && this.customControl.touched && (this.customControl.invalid);\n }\n}\n\n@Component({\n selector: 'app-percent-input',\n templateUrl: './app-percent-input.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AppPercentInputComponent implements ControlValueAccessor, OnChanges {\n\n readonly defaultOptions = {\n digitGroupSeparator: ',',\n decimalCharacter: '.',\n decimalCharacterAlternative: '.',\n minimumValue: '0',\n maximumValue: 100.00,\n decimalPlaces: 2,\n decimalPlacesShownOnBlur: 2,\n watchExternalChanges: true\n };\n\n @ViewChild(AutonumericDirective) input: AutonumericDirective;\n @Input()\n get isRequired(): boolean { return this._required; }\n set isRequired(value: boolean) { this._required = value; }\n @Input()\n get readonly(): boolean { return this._readonly; }\n set readonly(value: boolean) { this._readonly = value; }\n\n constructor(private messageService: MessageService,\n @Self() @Optional() public ctrl: NgControl) {\n if (this.ctrl) {\n this.ctrl.valueAccessor = this;\n }\n }\n @Input() public placeholder: string;\n @Input() public testId: string;\n @Input() public hideLabel?: boolean;\n @Input() public inputLabel?: string;\n @Input() public inputHint?: string;\n @Input() public warningMessage?: string;\n @Input() public isWarningVisible?: boolean;\n @Input() public inputClass?: string;\n @Input() public isTouched: string;\n\n // tslint:disable-next-line:variable-name\n private _required: boolean; private _readonly: boolean;\n\n currencyControlOptions = Object.assign(this.defaultOptions);\n\n onChange: any = () => { };\n onTouched: any = () => { };\n\n public errorMatcher() {\n return new CustomFieldErrorMatcher(this.ctrl.control as FormControl);\n }\n\n public getErrorMessage(): string {\n return this.ctrl.control && this.ctrl.control.errors ?\n this.messageService.getControlErrorMessage(this.ctrl.control.errors) : '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.control && this.input) {\n if (this.ctrl.control && this.ctrl.control.value) {\n this.input.instance.set(this.ctrl.control.value);\n } else {\n this.input.instance.clear();\n }\n }\n }\n\n writeValue(value: any): void {}\n\n registerOnChange(fn: () => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","
\n
\n {{ 'module.requests.bif.details.partner' | translate }}\n {{ partner }}\n
\n\n
\n {{ 'module.requests.bif.items.sku-form-code' | translate }}\n {{ item.skuCode }}\n
\n\n
\n {{ 'module.requests.bif.items.package-id' | translate }}\n {{ item.packageId }}\n
\n\n
\n {{ 'module.requests.bif.items.package-description' | translate }}\n {{ item.packageDescription }}\n
\n\n
\n {{ 'module.requests.bif.items.component-type' | translate }}\n {{ componentTypes[item.componentTypeCode] }}\n
\n\n
\n {{ 'module.requests.bif.items.fulfillment-type' | translate }}\n \n {{ fullfilmentTypes[item.fulfillmentTypeCode] }}\n \n
\n\n
\n \n
\n\n
\n {{ 'module.requests.bif.items.unit-price' | translate }}\n {{ unitPrice | currency:'USD':'symbol':'1.4-4'}}\n
\n\n
\n \n
\n
\n {{ 'module.requests.bif.items.component-description' | translate }}\n {{ item.componentDescription }}\n
\n
\n","import {ChangeDetectionStrategy, Component, Input, OnInit, ViewEncapsulation} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {map} from 'rxjs/operators';\n\nimport {selectBifComponentTypes, selectBifFulfillmentTypes} from '../../../../../../../reducers/ref-data/refdata.selectors';\nimport {BifProductionRequestItemModel} from '../../../../../../models/bif-production-request.model';\nimport {lazyLoadBifFulfillmentTypes} from 'src/app/reducers/ref-data/refdata.actions';\nimport {lazyLoadComponentTypes} from '../../../../../../../reducers/ref-data/refdata.actions';\nimport {FormGroup} from '@angular/forms';\nimport BigJs from 'big.js';\n\n@Component({\n selector: 'app-bif-po-form-item-subheader',\n templateUrl: './bif-po-form-item-subheader.component.html',\n styleUrls: ['./bif-po-form-item-subheader.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BifPoFormItemSubheaderComponent implements OnInit {\n @Input() item: BifProductionRequestItemModel;\n @Input() partner: string;\n @Input() itemForm: FormGroup;\n\n componentTypes$ = this.store\n .select(selectBifComponentTypes)\n .pipe(map(types => (types || []).reduce((acc, type) => ({...acc, [type.code]: type.name}), {})));\n fullfilmentTypes$ = this.store\n .select(selectBifFulfillmentTypes)\n .pipe(map(types => (types || []).reduce((acc, type) => ({...acc, [type.code]: type.name}), {})));\n\n constructor(private store: Store) {}\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadBifFulfillmentTypes());\n this.store.dispatch(lazyLoadComponentTypes());\n }\n\n public get unitPrice(): string {\n const subtotalByItem = new BigJs(Number(this.itemForm.get('subtotalByItem')?.value));\n const orderQuantity = new BigJs(Number(this.itemForm.get('orderQuantity')?.value));\n\n return orderQuantity.gt(new BigJs(0)) ? subtotalByItem.div(orderQuantity).toFixed(4) : '0';\n }\n}\n","\n
\n
\n \n
\n \n
\n\n
\n
\n \n
\n \n
\n \n \n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\n\nimport { CodeNameModel } from '../../../../../../../shared/models/code-name.model';\nimport { BifProductionRequestItemModel } from '../../../../../../models/bif-production-request.model';\nimport { BifPoService } from '../../../../../../services/bif-po.service';\n\n@Component({\n selector: 'app-bif-po-form-item',\n templateUrl: './bif-po-form-item.component.html',\n styleUrls: ['./bif-po-form-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifPoFormItemComponent {\n @Input() item: BifProductionRequestItemModel;\n @Input() itemForm: FormGroup;\n @Input() itemIndex: number;\n @Input() itemsLength: number;\n @Input() isLast: boolean;\n @Input() isDisabled: boolean;\n @Input() componentList: CodeNameModel[];\n @Input() isPoCreated: boolean;\n @Input() requestPartner: string;\n\n @Output() public deleteItem: EventEmitter = new EventEmitter();\n\n constructor(\n private bifPoService: BifPoService,\n private cd: ChangeDetectorRef,\n ) { }\n\n get shipments(): FormArray {\n return this.itemForm?.get(`shipments`) as FormArray;\n }\n\n get emptyShipmentControl(): FormGroup {\n return this.bifPoService.getFormItemShipment();\n }\n\n public makeDelete(): void {\n this.cd.markForCheck();\n this.deleteItem.emit(this.itemIndex);\n }\n}\n","
\n
\n

\n PO â„–{{ dialogData.po?.id }}\n {{ 'module.requests.po.new-po' | translate }}\n

\n
\n \n \n {{ 'common.button.finance' | translate }}\n \n \n \n {{ 'module.requests.po.printer' | translate }}\n \n \n \n {{ 'common.button.delete' | translate }}\n \n \n {{ 'common.button.save' | translate }}\n \n \n {{ 'common.button.close' | translate }}\n \n
\n
\n \n
\n \n
\n {{ 'module.requests.po.accounting-info' | translate }}\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n {{ 'module.requests.po.printer-info' | translate }}:\n
\n \n
\n \n
\n \n
\n {{ 'module.requests.po.item-info' | translate }}\n \n
\n \n
\n
\n {{ 'module.requests.po.additional-fees' | translate }}:\n
\n \n
\n {{ 'module.requests.po.additional-instructions' | translate }}:\n \n
\n\n
\n
\n
\n {{ 'module.requests.po.total-quantity' | translate }}:\n
\n
\n {{ getTotalQty() }}\n
\n
\n\n
\n
\n {{ 'module.requests.po.sub-total' | translate }}:\n
\n
\n {{ subTotal | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n %{{ 'module.requests.po.discount' | translate }}:\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.po.additional-costs' | translate }}:\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.po.freight' | translate }}:\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.po.taxes' | translate }}:\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.bif.po.credit' | translate }}:\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.po.total' | translate }}:\n
\n
\n {{ getTotal() | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n {{ 'module.requests.po.rebill-rate' | translate }}:\n
\n
\n \n {{\n poForm?.get('billingInfo.rebillTypeCode')?.value === 'DOLLAR_AMOUNT'\n ? (poForm?.get('billingInfo.rebillRateAmount')?.value | currency: 'USD':'symbol':'1.4-4')\n : poForm?.get('billingInfo.rebillRatePercentage')?.value != null\n ? poForm?.get('billingInfo.rebillRatePercentage')?.value + '%'\n : '$0.00'\n }}\n \n \n {{ price | currency: 'USD':'symbol':'1.4-4' }}\n \n
\n
\n
\n
\n {{ 'module.requests.po.rebill-total' | translate }}:\n
\n
\n {{ getRebillTotalAmount() | currency }}\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n \n
\n Stakeholders\n
\n \n \n \n

{{ 'module.requests.po.notice' | translate }}

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

\n {{ 'module.requests.po.item-info' | translate }}\n \n

\n \n
\n
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, take, takeUntil } from 'rxjs/operators';\n\nimport { Events, EventService } from '../../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../../shared/services/message-service.service';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { MAX_BIF_REBILL_TOTAL, MAX_PO_SUB_TOTAL, MAX_PO_TOTAL } from '../../../../../constants/request-details.constants';\nimport { BifPoModel } from '../../../../../models/bif-po.model';\nimport { BifProductionRequestItemModel } from '../../../../../models/bif-production-request.model';\nimport { BifPoAccountingService } from '../../../../../services/bif-po-accounting.service';\nimport { BifPoManageService } from '../../../../../services/bif-po-manage.service';\nimport { BifPoService } from '../../../../../services/bif-po.service';\nimport { BifProductionService } from '../../../../../services/bif-production.service';\nimport { BifPoDialogData } from '../bif-po-dialog-data.model';\n\n@Component({\n selector: 'app-bif-po-form',\n templateUrl: './bif-po-form.component.html',\n styleUrls: ['./bif-po-form.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [BifPoManageService]\n})\nexport class BifPoFormComponent implements OnInit, OnDestroy {\n poForm: FormGroup;\n itemsArr: FormArray;\n dialogData: BifPoDialogData;\n availableItems: BifProductionRequestItemModel[];\n itemsLengthChanged = false;\n price: string;\n shouldRecalculatePrice = false;\n isPoProcessing = false;\n testId = 'bif_po';\n\n private poDetailsCopy: BifPoModel;\n private maxBifTotal = new BigJs(MAX_PO_TOTAL);\n private maxSubTotal = new BigJs(MAX_PO_SUB_TOTAL);\n private maxRebillTotal = new BigJs(MAX_BIF_REBILL_TOTAL);\n private ngUnsubscribe = new Subject();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: BifPoDialogData,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private poManageService: BifPoManageService,\n private bifService: BifProductionService,\n private bifPoService: BifPoService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private dialogRef: MatDialogRef,\n public utilsService: UtilsService,\n private poAccountingService?: BifPoAccountingService\n ) {}\n\n ngOnInit(): void {\n this.initDialogData();\n this.initForm();\n this.initItemsArr();\n this.initPrinter();\n this.initAvailableItems();\n this.setPoDetailsCopy();\n\n this.price = new BigJs('0').toFixed();\n\n merge(\n this.poForm?.get('billingInfo')?.valueChanges,\n (this.poForm?.get('items') as FormArray).valueChanges,\n this.poForm.get('rushFee').valueChanges.pipe(distinctUntilChanged()),\n this.poForm.get('packageIdSetupFee').valueChanges.pipe(distinctUntilChanged()),\n this.poForm.get('programming').valueChanges.pipe(distinctUntilChanged()),\n this.poForm.get('other').valueChanges.pipe(distinctUntilChanged()),\n this.poForm.get('batchFee').valueChanges.pipe(distinctUntilChanged())\n ).pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.shouldRecalculatePrice = true;\n });\n\n this.cd.markForCheck();\n\n if( !this.dialogData.isDisabled ) {\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe, false);\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n onSave(): void {\n this.eventService.emit({eventName: Events.PoSubmit});\n\n this.poForm.get('billingInfo').patchValue({\n ...this.poForm.get('billingInfo')?.value,\n totalQuantity: this.getTotalQty(),\n total: this.getTotal(),\n subTotal: this.subTotal,\n rebillTotalAmount: this.getRebillTotalAmount()\n });\n\n if (this.poForm.valid) {\n if (this.isSubTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-sub-total-desc')\n );\n }\n if (this.isTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-total-desc')\n );\n }\n if (this.isRebillTotalMaxError) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform(\n this.dialogData.request.details.rebillTypeCode === 'DOLLAR_AMOUNT'\n ? 'module.requests.bif.po.max-rebill-desc2'\n : 'module.requests.bif.po.max-rebill-desc3')\n );\n }\n if (!this.isSubTotalMaxError && !this.isTotalMaxError && !this.isRebillTotalMaxError) {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n }\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n }\n }\n\n getPrinterLabel(printer: any): string {\n return printer?.name || '';\n }\n\n onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.onItemsChange();\n this.initAvailableItems();\n }\n\n onAddItem(itemsToAdd: BifProductionRequestItemModel[]): void {\n if (!itemsToAdd?.length) {\n return;\n }\n\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.bifPoService.getFormItem(item));\n });\n\n this.onItemsChange();\n this.initAvailableItems();\n }\n\n onPrintPo(requestId: string, poId: number, type: string): void {\n this.bifService.downloadPoPdf(requestId, poId, type);\n }\n\n closePO(): void {\n const isDataChanged = this.dialogData.isDisabled ? false : this.checkIfDataChanged();\n this.poManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n deletePO(): void {\n this.isPoProcessing = true;\n this.poManageService.deletePoItem(this.dialogData.requestId, this.dialogData.po)\n .subscribe(() => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n () => {this.isPoProcessing = false;},\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n });\n }\n\n onItemsChange(): void {\n this.itemsLengthChanged = true;\n this.cd.markForCheck();\n }\n\n getTotalQty(): number {\n const poForm = this.poForm.getRawValue();\n return poForm.items.reduce((acc, curr) => acc.add(new BigJs(curr.orderQuantity || '0')), new BigJs(0));\n }\n\n get subTotal(): string {\n if (this.dialogData.po?.billingInfo?.subTotal && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.subTotal).toFixed(2);\n }\n\n const poForm = this.poForm.getRawValue();\n return poForm.items\n .reduce((acc, item) => acc.add(new BigJs(item.subtotalByItem || '0')), new BigJs('0'))\n .add(this.fees)\n .toFixed(2);\n }\n\n public getTotal(): number {\n if (this.dialogData.po?.billingInfo?.total && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.total).toFixed(2);\n }\n\n const billingInfo = this.poForm?.get('billingInfo');\n const subtotal = new BigJs(this.subTotal);\n const additionalCosts = new BigJs(billingInfo?.get('additionalCosts').value || '0');\n const discount = new BigJs(billingInfo?.get('discount').value || '0');\n const discountAmount = subtotal.times(discount.div(new BigJs('100')));\n const freight = new BigJs(billingInfo?.get('freight')?.value || '0');\n const taxes = new BigJs(billingInfo?.get('taxes')?.value || '0');\n const credit = new BigJs(billingInfo?.get('credit')?.value || '0');\n\n return subtotal.minus(discountAmount).plus(additionalCosts).plus(freight).plus(taxes).minus(credit).toFixed(2);\n }\n\n public get isTotalMaxError(): boolean {\n return new BigJs(this.getTotal()).gt(this.maxBifTotal);\n }\n\n public get isSubTotalMaxError(): boolean {\n return new BigJs(this.subTotal).gt(this.maxSubTotal);\n }\n\n public get isRebillTotalMaxError(): boolean {\n return new BigJs(this.getRebillTotalAmount()).gt(this.maxRebillTotal);\n }\n\n public get costTotal() {\n return this.poForm.get('billingInfo.costTotal').value || '0';\n }\n\n public getRebillTotalAmount(): string {\n if (this.poForm.get('billingInfo.rebillRateAmount').value) {\n return new BigJs(this.poForm.get('billingInfo.rebillRateAmount').value).times(this.getTotalQty()).toFixed(2);\n } else if (this.poForm.get('billingInfo.rebillRatePercentage').value) {\n const form = this.getPreparedForm();\n const rebillPercentage = new BigJs(this.poForm.get('billingInfo.rebillRatePercentage').value);\n const sumSubtotalByItems = form.items.reduce((acc, item) => acc.add(new BigJs(item.subtotalByItem || '0')), new BigJs('0'));\n return sumSubtotalByItems.times(rebillPercentage.div('100')).add(sumSubtotalByItems).toFixed(2);\n }\n\n return this.price;\n }\n\n private setPoDetailsCopy(): void {\n this.poDetailsCopy = cloneDeep({...this.dialogData.po, ...this.getPreparedForm()});\n }\n\n private checkIfDataChanged(): boolean {\n return !isEqualWith(\n {\n ...this.dialogData.po,\n ...this.getPreparedForm()\n },\n this.poDetailsCopy,\n this.dataCheckCustomizer\n );\n }\n\n private dataCheckCustomizer(obj1: any, obj2: any): boolean {\n if ((obj1 === null && obj2 === '') || (obj1 === '' && obj2 === null)) {\n return true;\n }\n\n if (\n ((typeof obj1 === 'number' || obj1 === null) && typeof obj2 === 'string') ||\n (typeof obj1 === 'string' && (typeof obj2 === 'number' || obj2 === null))\n ) {\n return Number(obj1) === Number(obj2);\n }\n }\n\n private initDialogData() {\n this.dialogData = {\n ...cloneDeep(this.data),\n printerList: this.initDialogPrinterList()\n };\n }\n\n private initDialogPrinterList() {\n return this.data?.printerList?.map(item => ({value: item, name: item.name}));\n }\n\n get fees() {\n return [\n this.poForm.get('rushFee'),\n this.poForm.get('packageIdSetupFee'),\n this.poForm.get('programming'),\n this.poForm.get('other'),\n this.poForm.get('batchFee')\n ]\n .reduce((acc, control) => acc.add(new BigJs(control?.value || '0')), new BigJs('0'))\n .toFixed(2);\n }\n\n private initForm(): void {\n this.poForm = this.bifPoService.getInitialPoForm();\n\n this.poForm.patchValue(this.dialogData.po);\n\n if (!this.dialogData.po.id) {\n const details = this.dialogData.request.details;\n this.poForm?.get('accountingInfo').patchValue({\n lineOfBusiness: details.lobTypeCode\n });\n this.poForm?.get('billingInfo').patchValue({\n ...details,\n ...{\n rebillTypeCode: details.rebillTypeCode,\n rebillRateAmount: details.rebillTypeCode === 'DOLLAR_AMOUNT' ? details.rebillAmountPerItem : null,\n rebillRatePercentage: details.rebillTypeCode === 'PERCENTAGE' ? details.rebillPercentage : null,\n costTotal: details.costTotal\n }\n });\n }\n\n if (this.dialogData.isDisabled) {\n this.poForm.disable({emitEvent: false});\n }\n\n this.poForm\n .get('printerInfo.name')\n .statusChanges.pipe(filter(status => status === 'VALID'))\n .subscribe(status => {\n const printerInfo = {...this.poForm.get('printerInfo.name').value};\n this.poForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince,\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone,\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n });\n }\n\n private initItemsArr(): void {\n this.itemsArr = this.poForm.get('items') as FormArray;\n this.dialogData.items.forEach(item => {\n this.itemsArr.push(this.bifPoService.getFormItem(item));\n });\n }\n\n private initAvailableItems(): void {\n const componentTypeMap = this.data.componentTypesList.reduce((acc, componentType) => ({...acc, [componentType.code]: componentType.name}), {});\n this.availableItems = this.dialogData.request.items\n .filter(item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id))\n .map(i => ({...i, label: [i.packageDescription, componentTypeMap[i.componentTypeCode]].join(' - ')}));\n }\n\n private initPrinter(): void {\n const printer = this.dialogData?.printerList?.find(item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId);\n this.poForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n\n private getPreparedForm(): any {\n const form = this.poForm.getRawValue();\n\n form.items = form.items.map((item, idx) => ({\n ...this.dialogData.items[idx],\n subtotalByItem: item.subtotalByItem,\n orderQuantity: item.orderQuantity,\n unitPrice: this.dialogData.items[idx].costQuote / (item.shipments || []).reduce((acc, s) => s.quantity, 0),\n shipments: item.shipments.map(shipment => ({\n ...shipment,\n quantity: shipment.quantity || 0,\n warehouse: {\n ...shipment.warehouse,\n name: UtilsService.getWarehouseName(shipment.warehouse)\n }\n })),\n productionQuantity: {\n ...this.dialogData.items[idx].productionQuantity,\n ...item.productionQuantity,\n productionQuantity: item.orderQuantity\n }\n }));\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo.id || null;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private saveOrUpdatePO(form): void {\n const poSource = this.dialogData.po.id\n ? this.bifService.updatePO(this.dialogData.requestId, this.dialogData.po.id, form)\n : this.bifService.createPO(this.dialogData.requestId, form);\n\n if (!this.bifPoService.isItemsOrdersQtyAllocated(form.items)) {\n this.messageService.showSystemMessage('warning', this.translate.transform('module.requests.po.unallocated-qty'));\n }\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource.pipe(take(1)).subscribe(\n (newPo: BifPoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n },\n () => {this.isPoProcessing = false;},\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n );\n }\n\n private onSuccessPO(po: BifPoModel): void {\n this.dialogData.po = {...po};\n this.initPrinter();\n this.setPoDetailsCopy();\n\n this.messageService.showSystemMessage('success', this.translate.transform('common.message.po-saved'), null);\n }\n}\n","\n
\n
\n
\n {{item.componentDescription}}\n
\n
\n \n
\n\n
\n
\n
\n {{ 'module.requests.bif.items.fulfillment-type' | translate }}\n \n {{ fullfilmentTypes[item.fulfillmentTypeCode] }}\n \n
\n\n
\n {{'module.requests.bif.items.sku-form-code' | translate}}\n {{item.skuCode}}\n
\n\n
\n {{'module.requests.bif.items.package-id' | translate}}\n {{item.packageId}}\n
\n\n
\n {{'module.requests.bif.items.package-description' | translate }}\n {{ item.packageDescription }}\n
\n\n
\n {{'module.requests.bif.items.component-type' | translate }}\n \n {{ componentTypes[item.componentTypeCode] }}\n \n
\n\n
\n \n
\n\n
\n {{ 'module.requests.bif.items.unit-price' | translate }}\n {{ unitPrice | currency:'USD':'symbol':'1.4-4'}}\n
\n\n
\n \n
\n\n
\n
\n \n
\n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport BigJs from 'big.js';\nimport { map } from 'rxjs/operators';\n\nimport {\n lazyLoadBifComponentTypes,\n lazyLoadBifFulfillmentTypes,\n} from '../../../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectBifComponentTypes,\n selectBifFulfillmentTypes,\n} from '../../../../../../../reducers/ref-data/refdata.selectors';\nimport { BifProductionRequestItemModel } from '../../../../../../models/bif-production-request.model';\nimport { BifPoService } from '../../../../../../services/bif-po.service';\n\n@Component({\n selector: 'app-bif-po-monthly-form-item',\n templateUrl: './bif-po-monthly-form-item.component.html',\n styleUrls: ['./bif-po-monthly-form-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifPoMonthlyFormItemComponent implements OnInit, OnChanges {\n @Input() item: BifProductionRequestItemModel;\n @Input() itemForm: FormGroup;\n @Input() itemIndex: number;\n @Input() itemsLength: number;\n @Input() isLast: boolean;\n @Input() isDisabled: boolean;\n @Input() isPoCreated: boolean;\n\n @Output() public deleteItem: EventEmitter = new EventEmitter();\n\n fullfilmentTypes$ = this.store\n .select(selectBifFulfillmentTypes)\n .pipe(map(types => (types || []).reduce((acc, type) => ({...acc, [type.code]: type.name}), {})));\n\n componentTypes$ = this.store\n .select(selectBifComponentTypes)\n .pipe(map(types => (types || []).reduce((acc, type) => ({...acc, [type.code]: type.name}), {})));\n\n constructor(\n private bifPoService: BifPoService,\n private cd: ChangeDetectorRef,\n private store: Store\n ) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadBifFulfillmentTypes());\n this.store.dispatch(lazyLoadBifComponentTypes());\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.itemForm?.disable({ emitEvent: false });\n } else {\n this.itemForm?.enable({ emitEvent: false });\n }\n }\n\n public makeDelete(): void {\n this.cd.markForCheck();\n this.deleteItem.emit(this.itemIndex);\n }\n\n public get unitPrice(): string {\n const subtotalByItem = new BigJs(Number(this.itemForm.get('subtotalByItem')?.value));\n const orderQuantity = new BigJs(Number(this.itemForm.get('orderQuantity')?.value));\n\n return orderQuantity.gt(new BigJs(0)) ? subtotalByItem.div(orderQuantity).toFixed(4) : '0';\n }\n\n}\n","
\n
\n

\n PO â„–{{ dialogData.po?.id }}\n {{ 'module.requests.po.new-po' | translate }}\n

\n
\n \n \n {{ 'common.button.finance' | translate }}\n \n \n \n {{ 'module.requests.po.printer' | translate }}\n \n \n \n {{ 'common.button.delete' | translate }}\n \n \n {{ 'common.button.save' | translate }}\n \n \n {{ 'common.button.close' | translate }}\n \n
\n
\n \n
\n \n
\n {{ 'module.requests.po.accounting-info' | translate }}\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
0\">\n \n {{ 'module.requests.bif.details.partner-invoice-number' | translate }}\n :\n \n \n {{poForm.get('accountingInfo.partnerInvoiceNumber').value}}\n \n
\n
\n
\n \n
\n {{ 'module.requests.po.printer-info' | translate }}:\n
\n \n
\n \n
\n \n
\n {{ 'module.requests.po.item-info' | translate }}\n \n
\n \n
\n
\n {{ 'module.requests.po.additional-fees' | translate }}:\n
\n \n
\n {{ 'module.requests.po.additional-instructions' | translate }}:\n \n
\n\n
\n
\n
\n {{ 'module.requests.po.total-quantity' | translate }}:\n
\n
\n {{ getTotalQty() }}\n
\n
\n\n
\n
\n {{ 'module.requests.po.sub-total' | translate }}:\n
\n
\n {{ subTotal | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n %{{ 'module.requests.po.discount' | translate }}:\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.po.additional-costs' | translate }}:\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.po.freight' | translate }}:\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.po.taxes' | translate }}:\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.bif.po.credit' | translate }}:\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.po.total' | translate }}:\n
\n
\n {{ getTotal() | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n \n
\n Stakeholders\n
\n \n \n \n

{{ 'module.requests.po.notice' | translate }}

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

\n {{ 'module.requests.po.item-info' | translate }}\n \n

\n \n
\n
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {merge, Observable, Subject} from 'rxjs';\nimport {distinctUntilChanged, filter, take, takeUntil} from 'rxjs/operators';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {BifPoDialogData} from '../bif-po-dialog-data.model';\nimport {Events, EventService} from '../../../../../../shared/services/event-service.service';\nimport {MessageService} from '../../../../../../shared/services/message-service.service';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport BigJs from 'big.js';\nimport {\n MAX_BIF_REBILL_TOTAL,\n MAX_PO_SUB_TOTAL,\n MAX_PO_TOTAL\n} from '../../../../../constants/request-details.constants';\nimport {BifPoManageService} from '../../../../../services/bif-po-manage.service';\nimport {BifProductionRequestItemModel} from '../../../../../models/bif-production-request.model';\nimport {BifPoModel} from '../../../../../models/bif-po.model';\nimport {BifPoService} from '../../../../../services/bif-po.service';\nimport {BifProductionService} from '../../../../../services/bif-production.service';\nimport { BifPoAccountingService } from '../../../../../services/bif-po-accounting.service';\n\n@Component({\n selector: 'app-bif-po-monthly-form',\n templateUrl: './bif-po-monthly-form.component.html',\n styleUrls: ['./bif-po-monthly-form.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [BifPoManageService]\n})\nexport class BifPoMonthlyFormComponent implements OnInit, OnDestroy {\n poForm: FormGroup;\n itemsArr: FormArray;\n dialogData: BifPoDialogData;\n availableItems: BifProductionRequestItemModel[];\n itemsLengthChanged = false;\n price: string;\n shouldRecalculatePrice = false;\n isPoProcessing = false;\n testId = 'bif_po_monthly';\n\n private poDetailsCopy: BifPoModel;\n private maxBifTotal = new BigJs(MAX_PO_TOTAL);\n private maxRebillTotal = new BigJs(MAX_BIF_REBILL_TOTAL);\n private maxSubTotal = new BigJs(MAX_PO_SUB_TOTAL);\n private ngUnsubscribe = new Subject();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: BifPoDialogData,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n private eventService: EventService,\n private poManageService: BifPoManageService,\n private bifService: BifProductionService,\n private bifPoService: BifPoService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private dialogRef: MatDialogRef,\n public utilsService: UtilsService,\n private poAccountingService?: BifPoAccountingService\n ) {}\n\n ngOnInit(): void {\n this.initDialogData();\n this.initForm();\n this.initItemsArr();\n this.initPrinter();\n this.initAvailableItems();\n this.setPoDetailsCopy();\n\n this.price = new BigJs('0').toFixed();\n\n merge(\n this.poForm?.get('billingInfo')?.valueChanges,\n (this.poForm?.get('items') as FormGroup).valueChanges,\n this.poForm?.get('rushFee').valueChanges.pipe(distinctUntilChanged()),\n this.poForm?.get('packageIdSetupFee').valueChanges.pipe(distinctUntilChanged()),\n this.poForm?.get('programming').valueChanges.pipe(distinctUntilChanged()),\n this.poForm?.get('other').valueChanges.pipe(distinctUntilChanged()),\n this.poForm?.get('batchFee').valueChanges.pipe(distinctUntilChanged())\n ).pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.shouldRecalculatePrice = true;\n });\n\n this.cd.markForCheck();\n\n if( !this.dialogData.isDisabled ) {\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe, true);\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n onSave(): void {\n this.eventService.emit({eventName: Events.PoSubmit});\n\n this.poForm.get('billingInfo').patchValue({\n ...this.poForm.get('billingInfo')?.value,\n totalQuantity: this.getTotalQty(),\n total: this.getTotal(),\n subTotal: this.subTotal,\n rebillTotalAmount: this.getRebillTotalAmount()\n });\n\n if (this.poForm.valid) {\n if (this.isSubTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-sub-total-desc')\n );\n } else if (this.isTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-total-desc')\n );\n } else if (this.isRebillTotalMaxError) {\n this.messageService.showSystemMessage('warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.bif.po.max-rebill-desc2')\n );\n } else {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n }\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n }\n }\n\n getPrinterLabel(printer: any): string {\n return printer?.name || '';\n }\n\n onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.onItemsChange();\n this.initAvailableItems();\n }\n\n onAddItem(itemsToAdd: BifProductionRequestItemModel[]): void {\n if (!itemsToAdd?.length) {\n return;\n }\n\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.bifPoService.getMonthlyFormItem(item));\n });\n\n this.onItemsChange();\n this.initAvailableItems();\n }\n\n onPrintPo(requestId: string, poId: number, type: string): void {\n this.bifService.downloadPoPdf(requestId, poId, type);\n }\n\n closePO(): void {\n const isDataChanged = this.dialogData.isDisabled ? false : this.checkIfDataChanged();\n this.poManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n deletePO(): void {\n this.isPoProcessing = true;\n this.poManageService.deletePoItem(this.dialogData.requestId, this.dialogData.po)\n .subscribe(() => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n () => {this.isPoProcessing = false;},\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n });\n }\n\n onItemsChange(): void {\n this.itemsLengthChanged = true;\n this.cd.markForCheck();\n }\n\n getTotalQty(): number {\n const poForm = this.poForm.getRawValue();\n return poForm.items.reduce((prev, curr) => prev + Number(curr.orderQuantity || 0), 0);\n }\n\n get subTotal(): string {\n if (this.dialogData.po?.billingInfo?.subTotal && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.subTotal).toFixed(2);\n }\n\n const poForm = this.poForm.getRawValue();\n return poForm.items\n .reduce((acc, item) => acc.add(new BigJs(item.subtotalByItem || '0')), new BigJs('0'))\n .add(this.fees)\n .toFixed(2);\n }\n\n public getTotal(): number {\n if (this.dialogData.po?.billingInfo?.total && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.total).toFixed(2);\n }\n\n const billingInfo = this.poForm?.get('billingInfo');\n const subtotal = new BigJs(this.subTotal);\n const additionalCosts = new BigJs(billingInfo?.get('additionalCosts').value || '0');\n const discount = new BigJs(billingInfo?.get('discount').value || '0');\n const discountAmount = subtotal.times(discount.div(new BigJs('100')));\n const freight = new BigJs(billingInfo?.get('freight')?.value || '0');\n const taxes = new BigJs(billingInfo?.get('taxes')?.value || '0');\n const credit = new BigJs(billingInfo?.get('credit')?.value || '0');\n\n return subtotal.minus(discountAmount).plus(additionalCosts).plus(freight).plus(taxes).minus(credit).toFixed(2);\n }\n\n public get isTotalMaxError(): boolean {\n return new BigJs(this.getTotal()).gt(this.maxBifTotal);\n }\n\n public get isRebillTotalMaxError(): boolean {\n return new BigJs(this.getRebillTotalAmount()).gt(this.maxRebillTotal);\n }\n\n public get isSubTotalMaxError(): boolean {\n return new BigJs(this.subTotal).gt(this.maxSubTotal);\n }\n\n public getRebillTotalAmount(): string {\n return new BigJs(this.poForm.get('billingInfo.rebillRateAmount').value || 0)\n .times(this.getTotalQty()).toFixed(2);\n }\n\n private setPoDetailsCopy(): void {\n this.poDetailsCopy = cloneDeep({...this.dialogData.po, ...this.getPreparedForm()});\n }\n\n private checkIfDataChanged(): boolean {\n return !isEqualWith(\n {\n ...this.dialogData.po,\n ...this.getPreparedForm()\n },\n this.poDetailsCopy,\n this.dataCheckCustomizer\n );\n }\n\n private dataCheckCustomizer(obj1: any, obj2: any): boolean {\n if ((obj1 === null && obj2 === '') || (obj1 === '' && obj2 === null)) {\n return true;\n }\n\n if (\n ((typeof obj1 === 'number' || obj1 === null) && typeof obj2 === 'string') ||\n (typeof obj1 === 'string' && (typeof obj2 === 'number' || obj2 === null))\n ) {\n return Number(obj1) === Number(obj2);\n }\n }\n\n private initDialogData() {\n this.dialogData = {\n ...cloneDeep(this.data),\n printerList: this.initDialogPrinterList()\n };\n }\n\n private initDialogPrinterList() {\n return this.data?.printerList?.map(item => ({value: item, name: item.name}));\n }\n\n get fees() {\n return [\n this.poForm.get('rushFee'),\n this.poForm.get('packageIdSetupFee'),\n this.poForm.get('programming'),\n this.poForm.get('other'),\n this.poForm.get('batchFee')\n ]\n .reduce((acc, control) => acc.add(new BigJs(control?.value || '0')), new BigJs('0'))\n .toFixed(2);\n }\n\n private initForm(): void {\n this.poForm = this.bifPoService.getInitialPoForm(true);\n\n this.poForm.patchValue(this.dialogData.po);\n\n if (!this.dialogData.po.id) {\n const details = this.dialogData.request.details;\n\n this.poForm?.get('accountingInfo').patchValue({\n lineOfBusiness: details.lobTypeCode,\n partnerInvoiceNumber: details.partnerInvoiceNumber,\n });\n this.poForm?.get('billingInfo').patchValue({\n ...details,\n ...{\n rebillRateAmount: details.rebillAmountPerItem\n }\n });\n }\n\n if (this.dialogData.isDisabled) {\n this.poForm.disable({emitEvent: false});\n }\n\n this.poForm\n .get('printerInfo.name')\n .statusChanges.pipe(filter(status => status === 'VALID'))\n .subscribe(status => {\n const printerInfo = {...this.poForm.get('printerInfo.name').value};\n this.poForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince,\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone,\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n });\n\n this.cd.markForCheck();\n }\n\n private initItemsArr(): void {\n this.itemsArr = this.poForm.get('items') as FormArray;\n this.dialogData.items.forEach(item => {\n this.itemsArr.push(this.bifPoService.getMonthlyFormItem(item));\n });\n }\n\n private initAvailableItems(): void {\n this.availableItems = this.dialogData.request.items\n .filter(item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id))\n .map(i => ({...i, label: i.componentDescription}));\n }\n\n private initPrinter(): void {\n const printer = this.dialogData?.printerList?.find(item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId);\n this.poForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n\n private getPreparedForm(): any {\n const form = this.poForm.getRawValue();\n\n form.items = form.items.map((item, idx) => ({\n ...this.dialogData.items[idx],\n subtotalByItem: item?.subtotalByItem,\n orderQuantity: item?.orderQuantity,\n unitPrice: item?.subtotalByItem / item?.orderQuantity,\n componentDescription: item?.componentDescription\n }));\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo.id || null;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private saveOrUpdatePO(form): void {\n const poSource = this.dialogData.po.id\n ? this.bifService.updatePO(this.dialogData.requestId, this.dialogData.po.id, form)\n : this.bifService.createPO(this.dialogData.requestId, form);\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource.pipe(take(1)).subscribe(\n (newPo: BifPoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n },\n () => {this.isPoProcessing = false;},\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n );\n }\n\n private onSuccessPO(po: BifPoModel): void {\n this.dialogData.po = {...po};\n this.dialogData.items = po.items;\n this.initPrinter();\n this.setPoDetailsCopy();\n\n this.messageService.showSystemMessage('success', this.translate.transform('common.message.po-saved'), null);\n }\n}\n","
\n \n
\n \n
\n {{reqItem.packageDescription}} - {{refData.componentTypes}}\n
\n
\n \n
\n {{'module.requests.bif.po.component-desc'|translate}}:\n {{reqItem.componentDescription}}\n
\n
\n\n
\n \n
\n {{'module.requests.bif.details.partner' | translate}}\n {{request.details.partner}}\n
\n
\n {{'module.requests.bif.items.sku-form-code' | translate}}\n {{reqItem.skuCode}}\n
\n
\n {{'module.requests.bif.items.package-id' | translate}}\n {{reqItem.packageId}}\n
\n
\n {{'module.requests.bif.items.package-description' | translate }}\n {{ reqItem.packageDescription }}\n
\n
\n {{'module.requests.bif.items.component-type' | translate}}\n {{refData.componentTypes}}\n
\n
\n {{'module.requests.bif.items.fulfillment-type' | translate}}\n {{refData.fulfillmentTypes}}\n
\n
\n \n
\n {{'module.requests.bif.items.fulfillment-type' | translate}}\n {{refData.fulfillmentTypes}}\n
\n
\n
\n\n \n
\n
\n {{'module.requests.finance.ship-to' | translate}}\n \n {{address}}\n \n - \n \n \n
\n
\n {{'module.requests.po.qty' | translate}}\n \n {{shipment.quantity}}\n \n
\n
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component, Input, OnInit} from '@angular/core';\nimport {\n BifProductionRequestItemModel,\n BifProductionRequestModel\n} from '../../../../../models/bif-production-request.model';\nimport {combineLatest} from 'rxjs';\nimport {\n lazyLoadBifComponentTypes,\n lazyLoadBifFulfillmentTypes\n} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {Store} from '@ngrx/store';\nimport {\n selectBifComponentTypes,\n selectBifFulfillmentTypes\n} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {filter, map} from 'rxjs/operators';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-bif-po-item',\n templateUrl: './bif-po-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BifPoItemComponent implements OnInit {\n @Input() request: BifProductionRequestModel;\n @Input() reqItem: BifProductionRequestItemModel;\n @Input() isMonthly: boolean;\n\n refData$ = combineLatest([\n this.store.select(selectBifComponentTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectBifFulfillmentTypes).pipe(filter(v => v.length > 0))\n ]).pipe(\n map(([componentTypes, fulfillmentTypes]) => ({\n componentTypes: this.utilsService.getItemName(componentTypes, this.reqItem.componentTypeCode),\n fulfillmentTypes: this.utilsService.getItemName(fulfillmentTypes, this.reqItem.fulfillmentTypeCode)\n }))\n );\n\n constructor(private store: Store,\n private utilsService: UtilsService) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadBifComponentTypes());\n this.store.dispatch(lazyLoadBifFulfillmentTypes());\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { combineLatest, Observable, of, Subject } from 'rxjs';\nimport { filter, pluck, take, takeUntil, takeWhile } from 'rxjs/operators';\n\nimport { isPPMSelectorState } from '../../../../../reducers/ppm/ppm.selectors';\nimport {\n lazyLoadBifComponentTypes,\n lazyLoadChannelTypes,\n lazyLoadCompanies,\n lazyLoadInventoryTypes,\n lazyLoadPartnerGroups,\n lazyLoadPrinters,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectBifComponentTypes,\n selectChannelTypes,\n selectCompanies,\n selectInventoryTypes,\n selectPartnerGroups,\n selectPrinters,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { BifPoModel } from '../../../../models/bif-po.model';\nimport { BifProductionRequestItemModel, BifProductionRequestModel } from '../../../../models/bif-production-request.model';\nimport { FsPoModel } from '../../../../models/fs-po.model';\nimport { selectBifProductionRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { BifPoManageService } from '../../../../services/bif-po-manage.service';\nimport { BifPoService } from '../../../../services/bif-po.service';\nimport { BifProductionService } from '../../../../services/bif-production.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { BifPoDialogData } from './bif-po-dialog-data.model';\nimport { BifPoFormComponent } from './bif-po-form/bif-po-form.component';\nimport { BifPoMonthlyFormComponent } from './bif-po-monthly-form/bif-po-monthly-form.component';\n\n@Component({\n selector: 'app-bif-po',\n templateUrl: './bif-po.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifPoComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n private request: BifProductionRequestModel;\n private ngUnsubscribe = new Subject();\n private subscriptions = [];\n\n poDetails: BifPoModel[] = [];\n companyList: CodeNameModel[] = [];\n inventoryList: CodeNameModel[] = [];\n chnList: CodeNameModel[] = [];\n lineOfBusinessList: CodeNameModel[] = [];\n componentTypesList: CodeNameModel[] = [];\n printerList: any[];\n isBlankState = true;\n poDataLoaded = false;\n isUserPPM = false;\n isMonthlyBilling = false;\n userRoles = UserRoles;\n\n request$ = this.store.pipe(\n select(selectBifProductionRequestDetails),\n filter(req => req?.id === +this.requestId),\n takeUntil(this.ngUnsubscribe)\n );\n\n refData$ = combineLatest([\n this.store.select(selectCompanies).pipe(filter(v => v.length > 0)),\n this.store.select(selectInventoryTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0)),\n this.store.select(selectChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPrinters).pipe(filter(v => v.length > 0)),\n this.store.select(selectBifComponentTypes).pipe(filter(v => v.length > 0))\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private modalService: ModalService,\n private bifService: BifProductionService,\n private poService: BifPoManageService,\n private bifPoService: BifPoService,\n private utilsService: UtilsService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private eventService: EventService,\n private translate: TranslateService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadRefData();\n this.initRequestData();\n this.initRefData();\n this.initPODetailsSubscription();\n this.initUserData();\n this.setStepSubmitSubscription();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private get poItems(): BifProductionRequestItemModel[] {\n return this.poDetails?.flatMap(po => po.items) || [];\n }\n\n private getEmptyPo(isMonthly?: boolean): BifPoModel {\n return {\n accountingInfo: {\n channel: null,\n company: null,\n inventoryType: null,\n lineOfBusiness: null\n },\n printerInfo: {\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n stateProvince: null,\n postalCode: null\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null\n },\n name: null,\n mdmId: null,\n id: null\n },\n stakeholders: {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n },\n accountingSummary: {\n Acct: null,\n Amt: null,\n CC: null,\n CHN: null,\n CO: null,\n 'I/C': null,\n LOB: null,\n 'Inventory Type': null\n },\n apSummary: {\n Acct: null,\n Amt: null,\n CC: null,\n CHN: null,\n CO: null,\n 'I/C': null,\n LOB: null,\n 'Inventory Type': null\n },\n items: [],\n /**\n * Fees\n */\n rushFee: null,\n packageIdSetupFee: null,\n programming: null,\n other: null,\n batchFee: null,\n };\n }\n\n private loadRefData(): void {\n this.store.dispatch(lazyLoadCompanies());\n this.store.dispatch(lazyLoadInventoryTypes());\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadChannelTypes());\n this.store.dispatch(lazyLoadPrinters());\n this.store.dispatch(lazyLoadBifComponentTypes());\n }\n\n private initRequestData() {\n this.request$.subscribe(req => {\n this.request = cloneDeep(req);\n\n const btnLabel = req.details.monthlyBilling ? 'common.button.step-close' : 'common.button.step-submit';\n this.stepActionsService.changeButtonLabelOfStage('step-submit', btnLabel, this.request.type, 'PO');\n this.isMonthlyBilling = this.request.details.monthlyBilling;\n });\n }\n\n private initRefData() {\n this.refData$.subscribe(([companyList, inventoryList, lineOfBusinessList, chnList, printerList, componentTypes]) => {\n this.companyList = companyList;\n this.inventoryList = inventoryList;\n this.lineOfBusinessList = this.utilsService.getParentChild(cloneDeep(lineOfBusinessList));\n this.chnList = chnList;\n this.printerList = printerList;\n this.componentTypesList = componentTypes;\n });\n }\n\n private initUserData() {\n this.store\n .pipe(\n select(isPPMSelectorState),\n takeWhile(val => !val.initialized, true),\n pluck('isPPM'),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(isUserPPM => {\n this.isUserPPM = isUserPPM;\n });\n }\n\n private initPODetailsSubscription(): void {\n this.bifService\n .getPOListener()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n data => {\n if (data?.length) {\n this.poDetails = cloneDeep(data);\n this.poDetails.sort(this.utilsService.sortByDate);\n this.isBlankState = false;\n } else {\n this.poDetails = [];\n this.isBlankState = true;\n }\n this.poDataLoaded = true;\n this.cd.markForCheck();\n },\n () => {\n this.isBlankState = true;\n this.cd.markForCheck();\n }\n );\n\n this.bifService.callPO(this.requestId);\n }\n\n private async openPO(po: BifPoModel, type: 'new' | 'edit') {\n await this.refData$.pipe(take(1)).toPromise(); // wait for all refdata to be loaded\n\n const data: BifPoDialogData = {\n po,\n requestId: this.requestId,\n request: this.request,\n companyList: this.companyList,\n inventoryList: this.inventoryList,\n chnList: this.chnList,\n lineOfBusinessList: this.lineOfBusinessList,\n printerList: this.printerList,\n componentTypesList: this.componentTypesList,\n items: type === 'new' ? [...this.request.items] : po.items,\n isDisabled: this.isDisabled && this.isUserPPM,\n fundingList: []\n };\n\n this.isMonthlyBilling\n ? this.modalService.openModal(BifPoMonthlyFormComponent, data, 'po-form-dialog', false)\n : this.modalService.openModal(BifPoFormComponent, data, 'po-form-dialog', false);\n }\n\n addNewPO(): void {\n this.openPO(this.getEmptyPo(this.isMonthlyBilling), 'new');\n }\n\n onEdit(item: BifPoModel): void {\n this.openPO(item, 'edit');\n }\n\n onPrint(requestId: string, poId: number, type: string): void {\n this.bifService.downloadPoPdf(requestId, poId, type);\n }\n\n onDelete(item: FsPoModel): void {\n this.poService.deletePoItem(this.requestId, item).subscribe();\n }\n\n trackByPoItemFn(index: number, poItemDetails: FsPoModel) {\n return poItemDetails.id;\n }\n\n getItemName(array, code: string): string {\n return this.utilsService.getItemName(array, code);\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(Events.PoSowSubmitValidated, elementRef => {\n if (this.poDetails.length) {\n this.submitStep(elementRef);\n } else {\n this.messageService.showSystemMessage(\n 'error',\n this.translate.instant('module.requests.po.po-required'),\n this.translate.instant('module.requests.po.po-stage-error')\n );\n }\n })\n );\n }\n\n private submitStep(elementRef: any): void {\n const stepSubmitObservable = this.bifPoService.isItemsOrdersQtyAllocated(this.poItems) || this.isMonthlyBilling ?\n of(true) : this.confirmStepSubmit();\n\n stepSubmitObservable.subscribe(() => {\n this.stepActionsService.addReason(\n elementRef,\n 'step-submit',\n this.isMonthlyBilling ? 'step-close' : 'step-submit',\n Events.StepSubmit,\n 'right,'\n );\n });\n }\n\n private confirmStepSubmit(): Observable {\n return this.modalService\n .openConfirmationModal(\n this.translate.instant('module.requests.po.modal.submit-po-unalloc-items-header'),\n this.translate.instant('module.requests.po.modal.submit-po-unalloc-items-desc'),\n this.translate.instant('common.button.yes'),\n this.translate.instant('common.button.no')\n )\n .afterClosed()\n .pipe(filter((isConfirmed: boolean) => isConfirmed));\n }\n}\n","\n \n\n\n
\n
\n {{'module.requests.text.purchase-orders' | translate}}\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n
\n\n\n
\n
\n {{label | translate}}\n
\n \n \n\n \n \n \n \n
\n
\n
\n
\n
\n {{'common.button.printer' | translate}}:\n {{'module.requests.po.company' | translate}}:\n
\n
\n {{poItemDetails.printerInfo?.name}}\n {{getItemName(companyList, poItemDetails.accountingInfo?.company)}}\n
\n
\n {{'module.requests.po.date' | translate}}:\n {{'module.requests.bif.po.prod-qty' | translate}}:\n
\n
\n {{poItemDetails?.createdAt | date : 'MM/dd/yyyy' | uppercase}}\n {{poItemDetails?.billingInfo?.totalQuantity}}\n
\n
\n
\n \n
\n\n","\n
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n
\n
\n
\n \n
\n \n
\n\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n
\n\n \n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Action, ActionsSubject, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, first, takeUntil } from 'rxjs/operators';\nimport { BIF_PRODUCTION_REQUEST } from 'src/app/requests/constants/request-types.constant';\nimport { BifProductionRequestModel } from 'src/app/requests/models/bif-production-request.model';\nimport { requestDetailsActions } from 'src/app/requests/reducers/request-details/request-details.actions';\nimport { selectBifProductionRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { BifProductionService } from 'src/app/requests/services/bif-production.service';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { FILE_TYPES } from 'src/app/shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from 'src/app/shared/models/upload-file-restrictions.model';\nimport { Events, EventService } from 'src/app/shared/services/event-service.service';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\n\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-bif-printer-proof',\n templateUrl: './bif-printer-proof.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n})\nexport class BifPrinterProofComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n\n private subscriptions: Subscription [] = [];\n private ngUnsubscribe = new Subject();\n\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public requestDetails: BifProductionRequestModel;\n public printerProofForm: FormGroup;\n\n request$ = this.store.select(selectBifProductionRequestDetails).pipe(\n filter(request => request !== null && request?.type === BIF_PRODUCTION_REQUEST),\n );\n\n constructor(\n private store: Store,\n private actions: ActionsSubject,\n private eventService: EventService,\n private fb: FormBuilder,\n private stepActionsService: StepActionsService,\n private bifProductionService: BifProductionService,\n private messageService: MessageService,\n private translate: TranslateService,\n private cd: ChangeDetectorRef,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.getRequestDetails();\n this.buildForm();\n this.initSubscriptions();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n private toggleForm(): void {\n this.isDisabled ? this.printerProofForm?.disable() : this.printerProofForm?.enable();\n this.cd.markForCheck();\n }\n\n private getRequestDetails(): void {\n this.request$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((request) => {\n this.requestDetails = cloneDeep(request);\n });\n }\n\n private isFilesUploaded(): boolean {\n return this.requestDetails.details.printerProofs.length !== 0;\n }\n\n private initSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(Events.UploadPrinterProofValidation, (elementRef) => {\n if (this.isFilesUploaded()) {\n this.stepActionsService.addReason(\n elementRef, 'step-submit', 'step-submit', Events.UploadPrinterProofSubmit, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.bif.messages.printer-proof-head'),\n this.translate.instant('module.requests.bif.messages.printer-proof-desc')\n );\n }\n }),\n\n this.eventService.on(Events.UploadPrinterProofSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n first(),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n })\n );\n }\n\n private buildForm(): void {\n this.printerProofForm = this.fb.group({\n printerProofNotes: this.fb.control(this.requestDetails.details.printerProofNotes)\n });\n\n this.toggleForm();\n }\n\n private saveRequest(): void {\n const printerProofForm = this.printerProofForm.getRawValue();\n\n this.requestDetails.details.printerProofNotes = printerProofForm.printerProofNotes;\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({ requestId: this.requestId, details: this.requestDetails }));\n }\n\n public uploadPrinterProofFunction = (file) => this.bifProductionService.uploadPrinterProofForRequestItem(file, this.requestId);\n\n public removePrinterProofFunction = (attachmentId: number) => this.bifProductionService.deletePrinterProof(this.requestId, attachmentId);\n\n public updateProofAttachments({ action, data }: { action: string; data: any }): void {\n if (action === 'add') {\n this.requestDetails.details.printerProofs.push(data);\n } else {\n const index = this.requestDetails.details.printerProofs\n .findIndex(item => item?.attachmentId === data.attachmentId);\n this.requestDetails.details.printerProofs.splice(index, 1);\n }\n }\n}\n","\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n \n \n \n
\n \n
\n \n
\n\n
\n
\n {{ 'module.requests.bif.items.printer-proofs' | translate }}\n \n
\n\n
\n \n \n
\n\n
\n {{'common.label.note' | translate}}:\n {{request?.details.printerProofNotes}}\n
\n
\n\n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject, Subscription } from 'rxjs';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { ARTWORK_STATUSES } from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport { BifProductionRequestItemModel, BifProductionRequestModel } from 'src/app/requests/models/bif-production-request.model';\nimport { selectBifProductionRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { BifEvents, Events, EventService } from 'src/app/shared/services/event-service.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-bif-internal-printer-proof',\n templateUrl: './bif-internal-printer-proof.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BifInternalPrinterProofComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n @Input() isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n\n requestItems: BifProductionRequestItemModel[] = [];\n request$ = this.store.pipe(\n select(selectBifProductionRequestDetails),\n filter((req: BifProductionRequestModel) => req?.id === +this.requestId),\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private messageService: MessageService,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.setEventsSubs();\n this.initRequestData();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n }\n\n private initRequestData() {\n this.request$.subscribe((req: BifProductionRequestModel) => {\n this.requestItems = cloneDeep(req?.items);\n });\n }\n\n private isAllItemsApproved() {\n return this.requestItems\n .flatMap((item) => item.printerProofReview)\n .every((printerProof) => printerProof.status === ARTWORK_STATUSES.approved);\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.setValidationSubscription(),\n this.setSubmitSubscription(),\n );\n }\n\n private setValidationSubscription(): Subscription {\n return this.eventService.on(BifEvents.InternalReviewPrinterProofValidated, (elementRef) => {\n if (this.isAllItemsApproved()) {\n return this.stepActionsService.addReason(\n elementRef, 'step-approve', 'step-approve', BifEvents.InternalReviewPrinterProofApprove, 'right'\n );\n }\n\n this.messageService.showSystemMessage('error',\n this.translateService.instant('module.requests.approve.approve-required'),\n this.translateService.instant('module.requests.approve.approve-stage-error'),\n );\n\n this.cd.markForCheck();\n });\n }\n\n private setSubmitSubscription(): Subscription {\n return this.eventService.on(BifEvents.InternalReviewPrinterProofApprove, ({ comment }) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport {MilestoneItem, PrinterItemModel} from '../models/printer-item.model';\nimport {API} from '../../shared/constants/api.constants';\nimport {AtPrinterService} from './at-printer.service';\nimport {Observable, of} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {HttpEventType} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BifAtPrinterService extends AtPrinterService {\n public getRequestPrinterWorkItems(requestId: string | number) {\n return this.errorHandlingHttpClient.get(`${API.getBifPrinterWorkItems(requestId)}`);\n }\n\n public updateMilestoneDetails(\n requestId: number | string,\n printerItem: PrinterItemModel,\n milestone: MilestoneItem,\n data: any\n ): Observable {\n return this.errorHandlingHttpClient.put(\n API.updateBifMilestoneDetails(requestId, printerItem.printerDetails.id, printerItem.id, milestone.id),\n data\n );\n }\n\n public uploadWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n file: File\n ): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n protected createWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n uploadId: string\n ): Observable {\n return this.errorHandlingHttpClient.post(\n `${API.createBifWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId)}`,\n null,\n {\n reportProgress: true,\n observe: 'events',\n params: {uploadId}\n }\n );\n }\n\n public deleteWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n attachmentId: number\n ): Observable {\n return this.errorHandlingHttpClient.delete(\n `${API.deleteBifWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, attachmentId)}`\n );\n }\n\n public bulkUpdateAtPrinter(requestId: string, printerId: number, itemId: number, data: any): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.put(`${API.doBifBulkWorkItemMilestoneUpdate(requestId, printerId, itemId)}`, data);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { FormGroup, FormBuilder } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PrinterItemModel, MilestoneItem } from 'src/app/requests/models/printer-item.model';\nimport { AtPrinterService } from 'src/app/requests/services/at-printer.service';\nimport { BifAtPrinterService } from 'src/app/requests/services/bif-at-printer.service';\nimport { FileUploadService } from 'src/app/requests/services/file-upload.service';\nimport { BulkChangeComponent } from '../../../common/bulk-change/bulk-change.component';\nimport { PopBulkChangeComponentResponse, PopBulkChangeComponentData, MilestoneDetailsPayload } from '../../../pop-production/pop-prod-print/pop-bulk-change/pop-bulk-change.interface';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-bif-bulk-change',\n templateUrl: './bif-bulk-change.component.html',\n styleUrls: ['./bif-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: BifAtPrinterService,\n },\n ],\n})\nexport class BifBulkChangeComponent extends BulkChangeComponent implements OnInit {\n protected validationObject = {\n shipDate: null,\n estimatedArrivalDate: null,\n completed: false,\n files: [],\n notes: '',\n };\n\n bulkForm: FormGroup = this.fb.group(\n this.bulkFormTemplate,\n {\n updateOn: 'change',\n validators: UtilsService.bulkFormValidationFn(this.validationObject)\n }\n );\n\n resetErrorOnFormChange = this.bulkForm\n .valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.errorSubject.next(null);\n });\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: PopBulkChangeComponentData,\n private fb: FormBuilder,\n protected fileUploadService: FileUploadService,\n protected cd: ChangeDetectorRef,\n protected atPrinterService: AtPrinterService\n ) {\n super(cd, atPrinterService, fileUploadService);\n }\n\n ngOnInit(): void {\n this.initFormChangeSubscription();\n }\n\n private initFormChangeSubscription(): void {\n merge(...[\n this.bulkForm.get('completed').valueChanges,\n this.bulkForm.get('shipDate').valueChanges,\n this.bulkForm.get('estimatedArrivalDate').valueChanges\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.bulkForm.get('shipDate').updateValueAndValidity({emitEvent: false});\n this.bulkForm.get('estimatedArrivalDate').updateValueAndValidity({emitEvent: false});\n this.bulkForm.updateValueAndValidity();\n });\n }\n\n private get bulkFormTemplate(): any {\n return {\n shipDate: this.fb.control(null, []),\n estimatedArrivalDate: this.fb.control(null, []),\n completed: this.fb.control(false),\n files: this.fb.control([]),\n notes: this.fb.control(null)\n };\n }\n\n onClose(): void {\n this.dialogRef.close(false);\n }\n\n onCancel(): void {\n this.dialogRef.close(false);\n }\n\n async onSubmit(): Promise {\n if (!this.bulkForm.valid) {\n return;\n }\n\n this.bulkForm.markAllAsTouched();\n this.bulkForm.updateValueAndValidity();\n const {files, ...details}: {files: (File & {progress: number})[]} & MilestoneDetailsPayload['details'] = this.bulkForm.getRawValue();\n\n this.loadingSubject.next(true);\n\n const uploadedFiles = await this.getUploadedFiles(files, this.dialogData.requestId);\n\n const payload: MilestoneDetailsPayload = {\n milestoneIds: this.dialogData.selectedItems.map(sI => sI.id),\n details: { ...details },\n asnFileIds: uploadedFiles\n };\n\n this.getSubmitRequestObservable(payload, this.dialogData.requestId, this.dialogData.printerId, this.dialogData.itemId)\n .subscribe(response => {\n // lest skip response data and just simply trigger reload in the parent element\n this.dialogRef.close(response);\n });\n }\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n\n \n\n \n
\n \n {{ error?.error?.message }}\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n \n\n
\n
\n \n
\n
\n\n \n {{ 'module.requests.pop-prod.details.notes-will-be-overwritten' | translate }}\n \n\n \n\n
\n\n
\n \n \n \n  \n \n
\n \n
\n
\n \n {{ 'common.button.step-submit' | translate }}\n \n \n \n
\n
\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation} from '@angular/core';\nimport {MilestoneItem, PrinterItemModel} from '../../../../../models/printer-item.model';\nimport {STATUSES} from '../../../../../constants/request-statuses.constant';\nimport {FormGroup} from '@angular/forms';\nimport {combineLatest, Subject, Subscription} from 'rxjs';\nimport {debounceTime, filter, takeUntil} from 'rxjs/operators';\nimport {selectRequestDetails} from '../../../../../reducers/request-details/request-details.selectors';\nimport {Store} from '@ngrx/store';\nimport {AtPrinterService} from '../../../../../services/at-printer.service';\nimport {BifAtPrinterService} from '../../../../../services/bif-at-printer.service';\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\n\n@Component({\n selector: 'app-bif-printer-milestone',\n templateUrl: './bif-printer-milestone.component.html',\n styleUrls: ['./bif-printer-milestone.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: BifAtPrinterService\n }\n ]\n})\nexport class BifPrinterMilestoneComponent implements OnInit {\n @Input() public milestone: MilestoneItem;\n @Input() public isDisabled: boolean;\n @Input() public printerIndex: number;\n @Input() public milestoneIndex: number;\n @Input() public requestId: string;\n @Input() public printerId: number;\n @Input() public itemId: number;\n @Output() public milestoneCheck = new EventEmitter();\n @Output() public milestoneValuesChange = new EventEmitter();\n\n public readonly fileRestrictionOptions = {\n fileType: FILE_TYPES.BIF_PRODUCTION.ASN,\n fileSize: FILE_SIZE_RESTRICTIONS.BIF_PRODUCTION.ASN,\n };\n\n public status: {status: string};\n\n private formGroup: FormGroup;\n private milestoneFormSubscriptions: Subscription[] = [];\n @Input() public set milestoneForm(milestoneForm: FormGroup) {\n this.formGroup = milestoneForm;\n this.milestoneFormSubscriptions.forEach(s => s.unsubscribe());\n this.milestoneFormSubscriptions = [];\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('estimatedArrivalDate').valueChanges,\n milestoneForm.get('estimatedArrivalDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: value,\n notes: milestoneForm.get('notes').value,\n completed: this.milestone.details.completed,\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('shipDate').valueChanges,\n milestoneForm.get('shipDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n notes: milestoneForm.get('notes').value,\n completed: this.milestone.details.completed,\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('notes').valueChanges,\n milestoneForm.get('notes').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(debounceTime(300), takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n estimatedArrivalDate: milestoneForm.get('estimatedArrivalDate').value,\n completed: this.milestone.details.completed,\n notes: value\n });\n })\n );\n\n if (this.milestone.details.completed || this.isDisabled) {\n milestoneForm.disable();\n }\n }\n public get milestoneForm(): FormGroup {\n return this.formGroup;\n }\n private ngUnsubscribe = new Subject();\n\n\n constructor(\n private store: Store,\n private atPrinterService: AtPrinterService\n ) { }\n\n ngOnInit(): void {\n this.status = {\n status: this.milestone.details.completed ? STATUSES.COMPLETED : STATUSES.IN_PROGRESS\n };\n\n this.store\n .select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(details => {\n if (details?.status === STATUSES.TERMINATED || this.isDisabled) {\n this.milestoneForm?.disable({emitEvent: false});\n } else if (details && !this.milestone.details.completed) {\n this.milestoneForm?.enable({emitEvent: false});\n }\n });\n }\n\n public get isSelectDisabled(): boolean {\n return this.status.status === STATUSES.COMPLETED;\n }\n\n public onMilestoneCheck(isChecked: boolean): void {\n this.milestoneCheck.emit(isChecked);\n }\n\n public getTestId(elementId: string): string {\n return `printer_${this.printerIndex}_milestone_${this.milestoneIndex}_${elementId}`;\n }\n\n public uploadFileFunction = (file: File) => this.atPrinterService.uploadWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n file\n );\n\n public removeFileFunction = (attachmentId: number) => this.atPrinterService.deleteWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n attachmentId\n );\n\n public updateMilestoneWithUploadedFile(obj: {action: string; data: any}): void {\n if (obj.action === 'add') {\n this.milestone.asnFiles.push(obj.data);\n } else {\n const index = this.milestone.asnFiles.findIndex(item => item?.id === obj.data.id);\n this.milestone.asnFiles.splice(index, 1);\n }\n }\n}\n","
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n \n
\n\n
\n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n
\n\n
\n \n
\n\n \n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit} from '@angular/core';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {Store} from '@ngrx/store';\nimport {\n selectBifProductionRequestDetails,\n} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, map, shareReplay, startWith, switchMap, take, takeUntil} from 'rxjs/operators';\nimport {BIF_PRODUCTION_REQUEST} from '../../../../constants/request-types.constant';\nimport {BehaviorSubject, combineLatest, Observable, of, Subject} from 'rxjs';\nimport {MilestoneItem, PrinterItemModel} from '../../../../models/printer-item.model';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {AtPrinterService} from '../../../../services/at-printer.service';\nimport {API} from '../../../../../shared/constants/api.constants';\nimport {BifAtPrinterService} from '../../../../services/bif-at-printer.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport { BifBulkChangeComponent } from './bif-bulk-change/bif-bulk-change.component';\nimport {\n PopBulkChangeComponentData,\n PopBulkChangeComponentResponse\n} from '../../pop-production/pop-prod-print/pop-bulk-change/pop-bulk-change.interface';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\n\ninterface PDFFile {\n fileName: string;\n id: number;\n type: string;\n}\n\ninterface PrinterItemModelView extends PrinterItemModel {\n isChecked: boolean;\n formPDFArray: PDFFile[];\n}\n\n@Component({\n selector: 'app-bif-print',\n templateUrl: './bif-print.component.html',\n styleUrls: ['./bif-print.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: BifAtPrinterService\n }\n ]\n})\nexport class BifPrintComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n request$ = this.store.select(selectBifProductionRequestDetails).pipe(\n filter(request => request !== null && request?.type === BIF_PRODUCTION_REQUEST),\n );\n\n private printerItemsSubject = new BehaviorSubject(null);\n printerItems$ = this.printerItemsSubject.asObservable().pipe(filter(v => v != null));\n\n isBlankState$ = this.printerItems$.pipe(\n map(pi => pi.length === 0),\n startWith(true)\n );\n checkedMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => milestone.isChecked)))\n );\n checkableMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => !milestone.details.completed)))\n );\n private ngUnsubscribe = new Subject();\n\n printerForm$ = this.printerItems$.pipe(\n map(pi => this.fb.group({\n printerItems: this.fb.array(\n pi.map(printer =>\n this.fb.group({\n milestones: this.fb.array(\n printer.milestones.map(milestone =>\n this.fb.group({\n shipDate: this.fb.control(\n {\n value: milestone.details.shipDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n estimatedArrivalDate: this.fb.control(\n {\n value: milestone.details.estimatedArrivalDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n notes: this.fb.control(milestone.details.notes || '', {\n updateOn: 'blur',\n validators: [Validators.maxLength(10000)]\n })\n })\n )\n )\n })\n )\n )\n })),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private store: Store,\n private fb: FormBuilder,\n private atPrinterService: AtPrinterService,\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n private modalService: ModalService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private translate: TranslateService,\n private messageService: MessageService\n ) {\n super();\n }\n\n private get printerItems(): PrinterItemModelView[] {\n return this.printerItemsSubject.getValue();\n }\n\n ngOnInit(): void {\n this.request$\n .pipe(\n switchMap(request => this.atPrinterService.getRequestPrinterWorkItems(request.id)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n )\n .subscribe(printerItems => {\n this.setPrinterItems(printerItems);\n });\n\n this.eventService.on(\n Events.AtPrinterSubmitValidated,\n elementRef => {\n if (this.isDisabled) {\n return;\n }\n const isAllMilestonesCompleted = this.printerItems.every(printer =>\n printer.milestones.every(milestone => milestone.details.completed)\n );\n\n if (isAllMilestonesCompleted) {\n this.stepActionsService.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.instant('module.requests.at-printer.mark-complete-required'),\n this.translate.instant('module.requests.at-printer.mark-complete-error')\n );\n },\n this.ngUnsubscribe\n );\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getBulkLabel(printerItem: PrinterItemModelView, printerIdx: number): Observable {\n if (printerItem.milestones.some(milestone => milestone.isChecked)) {\n return combineLatest([this.checkedMilestones$, this.checkableMilestones$]).pipe(\n map(([checkedMilestones, checkableMilestones]) => this.translateService.instant('common.label.selected-of', {\n selected: checkedMilestones[printerIdx].length,\n all: checkableMilestones[printerIdx].length\n }))\n );\n }\n return of(this.translateService.instant('common.label.select-all'));\n }\n\n public isBulkCheckboxDisabled(printerIdx: number): Observable {\n return this.checkableMilestones$.pipe(\n map(checkableMilestones => checkableMilestones[printerIdx].length <= 1)\n );\n }\n\n public isBulkDisabled(printerIdx: number): Observable {\n return this.checkedMilestones$.pipe(map(checkedMilestones => checkedMilestones[printerIdx].length <= 1));\n }\n\n public onSelectAllChange(isChecked: boolean, pIdx: number) {\n this.printerItems[pIdx].isChecked = isChecked;\n }\n\n public onBulkClick(printerIdx: number): void {\n const selectedItems: MilestoneItem[] = this.printerItems[printerIdx].milestones.filter(value => value.isChecked);\n\n const dialogRef = this.modalService.openModal(\n BifBulkChangeComponent,\n {\n requestId: this.requestId,\n itemId: this.printerItems[printerIdx].id,\n printerId: this.printerItems[printerIdx].printerDetails.id,\n selectedItems\n },\n 'bulk-change-modal'\n );\n\n dialogRef.afterClosed().subscribe(async dialogResponse => {\n // reload the data if the dialog was not just simply closed\n if (dialogResponse !== false) {\n const data = this.printerItems.map((p, i) => {\n const {isChecked, ...printerItem} = p;\n if (i === printerIdx) {\n return dialogResponse;\n }\n return printerItem;\n });\n this.setPrinterItems([...data]);\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n });\n }\n\n public onMilestoneCheck(isChecked: boolean, printerIdx: number, milestoneIdx: number): void {\n this.printerItems[printerIdx].milestones[milestoneIdx].isChecked = isChecked;\n this.cd.markForCheck();\n }\n\n private setPrinterItems(printerItems: PrinterItemModel[]) {\n this.printerItemsSubject.next(\n printerItems.map(pi => ({\n /**\n * isChecked aggredated computed property\n */\n get isChecked(): boolean {\n const uncompletedRequests = (this.milestones as MilestoneItem[]).filter(m => !m.details.completed);\n /**\n * Checked if all checkable milestones are checked\n */\n return uncompletedRequests.reduce((c, m) => c && m.isChecked === true, uncompletedRequests.length >= 1);\n },\n set isChecked(isChecked: boolean) {\n this.milestones = this.milestones.map(m => ({...m, isChecked: m.details.completed ? false : isChecked}));\n },\n ...pi,\n milestones: pi.milestones.map(ms => ({...ms, isChecked: false})),\n formPDFArray: pi.purchaseOrderReferences.flatMap(ref => [\n {\n type: 'printer',\n id: ref.id,\n fileName: `PO #${ref.id}.pdf`,\n url: API.bifPoPdfDownload(this.requestId, ref.id, 'printer')\n },\n ...(ref.sowCreated\n ? [\n {\n type: 'sow',\n id: ref.id,\n fileName: `SOW #${ref.id}.pdf`,\n url: API.bifPoPdfDownload(this.requestId, ref.id, 'sow')\n }\n ]\n : [])\n ])\n }))\n );\n }\n\n public onMilestoneValuesChange(details: any, printerIdx: number, milestoneIdx: number): void {\n this.atPrinterService\n .updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n details\n )\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, details.completed);\n });\n }\n\n private async onSuccessMilestoneUpdate(data: any, printerIdx: number, milestoneIdx: number, isCompleted: boolean): Promise {\n // Restrict updating with invalid data\n const currentMilestoneForm = (await this.printerForm$.pipe(take(1)).toPromise())\n .get('printerItems.' + printerIdx).get('milestones.' + milestoneIdx);\n\n if (!currentMilestoneForm.valid && !currentMilestoneForm.disabled) {\n return;\n }\n\n const milestone = this.printerItems[printerIdx].milestones[milestoneIdx];\n this.printerItems[printerIdx].milestones[milestoneIdx] = {\n ...milestone,\n details: data,\n isChecked: isCompleted ? false : milestone.isChecked\n };\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.cd.markForCheck();\n }\n\n public onMarkComplete(printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n this.atPrinterService\n .updateMilestoneDetails(this.requestId, this.printerItems[printerIdx], this.printerItems[printerIdx].milestones[milestoneIdx], {\n completed: isCompleted,\n notes: this.printerItems[printerIdx].milestones[milestoneIdx].details?.notes || null,\n shipDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.shipDate || null,\n estimatedArrivalDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.estimatedArrivalDate || null\n })\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, isCompleted);\n });\n }\n\n}\n","\n \n\n\n \n \n \n
\n {{ 'module.requests.at-printer.printer' | translate }}:\n {{ printerItem.printerDetails.name }}\n
\n
\n
\n

{{ 'module.requests.at-printer.po-files' | translate }}

\n \n
\n
\n

{{ 'module.requests.at-printer.milestones' | translate }}

\n
\n \n \n {{ 'module.requests.at-printer.bulk-change' | translate }}\n \n
\n
\n \n \n \n {{ 'module.requests.at-printer.mark-complete' | translate }}\n \n\n \n \n {{ 'module.requests.at-printer.cancel-completion' | translate }}\n \n \n
\n
\n
\n
\n
\n
\n\n\n","import {Injectable} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators, FormControl, ValidatorFn } from '@angular/forms';\n\nimport {UserModel} from '../../shared/models/user.model';\nimport {ChildCardModel, PoPrinterInfo} from '../models/po.model';\nimport {ItemShipments, Merchant} from '../models/request-item.model';\nimport {INTEGER_PATTERN} from '../constants/request-details.constants';\nimport {ThirdPartyRequestDetails, ThirdPartyRequestItemModel, ThirdPartyRequestModel} from '../models/third-party-request.model';\nimport {FormFactorService} from '../../shared/services/form-factor.service';\nimport { Warehouse } from '../models/warehouse.model';\nimport {UtilsService} from '../../shared/services/utils.service';\n\nconst INCOMM_PAYS = 'INCOMM_PAYS';\n\nconst conditionalRequiredValidator = (path: string, condition: (v: any) => boolean = val => !!val): ValidatorFn => (fc: FormControl) => {\n if(condition(fc.root.get(path)?.value)) {\n return Validators.required(fc);\n }\n return null;\n };\n\nconst conditionalParentRequiredValidator = (path: string, condition: (v: any) => boolean = val => !!val) => (fc: FormControl) => {\n if(condition(fc.parent?.get(path)?.value)) {\n return Validators.required(fc);\n }\n return null;\n };\n\nconst rebillRateValidator = (fc: FormControl) => {\n if (!!fc.root?.get('details.incommPurchased')?.value &&\n fc.root?.get('details.paymentTypeCode')?.value !== INCOMM_PAYS) {\n return Validators.required(fc);\n }\n return null;\n};\n\nconst incommPurchaseYRequired = conditionalRequiredValidator('details.incommPurchased', val => !!val);\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThirdPartyFormBuilderService {\n private costcoRequired = conditionalParentRequiredValidator('encodingType',\n val => this.formFactorService.isCostco(val));\n private bestBuyRequired = conditionalParentRequiredValidator('encodingType',\n val => this.formFactorService.isBestBuyRelatedFieldVisible(val));\n\n private uabRequired = (fc: FormControl) => {\n const validConditions = [\n this.formFactorService.isUabRelatedFieldVisible(fc.parent?.get('encodingType')?.value),\n this.formFactorService.isUSA(fc.parent?.get('countryCode')?.value),\n ];\n\n if(validConditions.every((v) => !!v)) {\n return Validators.required(fc);\n }\n return null;\n };\n\n constructor(private fb: FormBuilder,\n private formFactorService: FormFactorService) {}\n\n\n public childCardFormGroup(childCard: ChildCardModel, isNew = false): FormGroup {\n return this.fb.group({\n id: this.fb.control(isNew ? null : childCard.id),\n childNumber: this.fb.control(childCard.childNumber, [Validators.required]),\n productionQuantity: this.fb.control(childCard.productionQuantity, [Validators.required]),\n productUpc: this.fb.control(childCard.productUpc, {\n validators: [Validators.required, Validators.pattern(INTEGER_PATTERN)],\n updateOn: 'blur'\n }),\n productDescription: this.fb.control(childCard.productDescription, [Validators.required]),\n dieline: this.fb.control(childCard.dieline || 'childCard'),\n encodingType: this.fb.control(childCard.encodingType || 'Redemption', [Validators.required]),\n denom: this.fb.control(childCard.denom, [Validators.required]),\n dcmsId: this.fb.control(childCard.dcmsId),\n denomType: this.fb.control(childCard.denomType),\n substrateTypeCode: this.fb.control(childCard.substrateTypeCode, [incommPurchaseYRequired]),\n notes: this.fb.control(childCard.notes, [Validators.maxLength(240)]),\n openDenomRange: this.fb.control(childCard.openDenomRange),\n currency: this.fb.control(childCard.currency),\n } as {[k in keyof ChildCardModel]: any});\n }\n\n public merchantFormGroup(merchant: Merchant, isNew = false): FormGroup {\n return this.fb.group({\n id: this.fb.control(isNew ? null : merchant?.id || null),\n mdmId: this.fb.control(merchant?.mdmId || null),\n name: this.fb.control({name: merchant?.name || null, id: merchant?.fcmsId || merchant?.mdmId || null}),\n fcmsId: this.fb.control(merchant?.fcmsId || null),\n country: this.fb.control(merchant?.country || null),\n accountManagers: this.fb.array(merchant?.accountManagers || [])\n });\n }\n\n public itemShipmentFormGroup(shipment: ItemShipments, isNew = false): FormGroup {\n const warhouse: Warehouse = isNew ? (shipment.warehouse ? {...shipment.warehouse, id: null} : null) : (shipment.warehouse || null);\n return this.fb.group({\n id: this.fb.control(isNew ? null : shipment?.id || null),\n quantity: this.fb.control(shipment.quantity ?? null, Validators.required),\n warehouse: this.fb.control(warhouse, Validators.required)\n });\n }\n\n private printerFormControl(printer: PoPrinterInfo, isNew = false): FormControl {\n return this.fb.control({\n id: isNew ? null : printer?.id || null,\n mdmId: printer?.mdmId || null,\n name: printer?.name || null,\n address: printer?.address || null,\n contact: printer?.contact || null\n });\n }\n\n private get emptyMerchant(): Merchant {\n return {} as Merchant;\n }\n\n private get emptyShipment(): ItemShipments {\n return {} as ItemShipments;\n }\n\n private get emptyChildCard(): ChildCardModel {\n return {} as ChildCardModel;\n }\n\n public itemFormGroup(item: ThirdPartyRequestItemModel, isNew: boolean = false): FormGroup {\n return this.fb.group({\n id: this.fb.control(isNew ? null : item.id),\n orderTypeCode: this.fb.control(item.orderTypeCode, Validators.required),\n deliveryDate: this.fb.control(item.deliveryDate, Validators.required),\n redemptionTestingRequired: this.fb.control(item.redemptionTestingRequired, Validators.required),\n wpn: this.fb.control(item.wpn, Validators.required),\n rebillAmountPerItem: this.fb.control(item.rebillAmountPerItem, [rebillRateValidator]),\n wpnDescription: this.fb.control(item.wpnDescription, Validators.required),\n productUpc: this.fb.control(item.productUpc, Validators.required),\n productDescription: this.fb.control(item.productDescription, Validators.required),\n dcmsId: this.fb.control(item.dcmsId, Validators.required),\n processorInterface: this.fb.control(item.processorInterface, Validators.required),\n processorCompany: this.fb.control(item.processorCompany),\n productOwners: this.fb.control(item.productOwners, Validators.required),\n countryCode: this.fb.control(item.countryCode, Validators.required),\n denom: this.fb.control(item.denom, Validators.required),\n denomType: this.fb.control(item.denomType),\n currency: this.fb.control(item.currency),\n dataPinFileTypeCode: this.fb.control(item.dataPinFileTypeCode, [incommPurchaseYRequired]),\n merchants: this.fb.array((item.merchants?.length ? item.merchants : [this.emptyMerchant]).map(m => this.merchantFormGroup(m, isNew))),\n /**\n * Production Qty\n */\n shipments: this.fb.array(\n (item.shipments?.length ? item.shipments : [this.emptyShipment]).map(s => this.itemShipmentFormGroup(s, isNew))\n ),\n productionQuantity: this.fb.control(item.productionQuantity, {\n updateOn: 'blur',\n validators: [Validators.required, UtilsService.productionQtyValidationFn()]\n }),\n specialProjectNumber: this.fb.control(item.specialProjectNumber),\n masterCaseSize: this.fb.control(item.masterCaseSize, Validators.required),\n caseSize: this.fb.control(item.caseSize, Validators.required),\n bundleSize: this.fb.control(item.bundleSize, Validators.required),\n /**\n * Form factor\n */\n upcRequiredInArt: this.fb.control(item.upcRequiredInArt, [incommPurchaseYRequired]),\n dielineTypeCode: this.fb.control(item.dielineTypeCode, [Validators.required]),\n substrateTypeCode: this.fb.control(item.substrateTypeCode, [incommPurchaseYRequired]),\n encodingType: this.fb.control(item.encodingType, [Validators.required]),\n pidIdNumber: this.fb.control(item.pidIdNumber),\n encodingId: this.fb.control(item.encodingId, Validators.maxLength(25)),\n microsoftData: this.fb.control(item.microsoftData),\n costcoItemNumber: this.fb.control(item.costcoItemNumber, [this.costcoRequired]),\n productId: this.fb.control(item.productId, [this.bestBuyRequired]),\n skuNumber: this.fb.control(item.skuNumber, [this.bestBuyRequired]),\n itemNumber: this.fb.control(item.itemNumber, [this.uabRequired]),\n vendorStockNumber: this.fb.control(item.vendorStockNumber, [this.uabRequired]),\n printer: this.printerFormControl(item.printer, isNew),\n /**\n * Child cards\n */\n childCards: this.fb.array(\n (item.childCards?.length ? item.childCards : [this.emptyChildCard]).map(cc => this.childCardFormGroup(cc, isNew))\n ),\n notes: this.fb.control(item.notes)\n } as {[k in keyof ThirdPartyRequestItemModel]: any});\n }\n\n public itemCardCollateralDetailsFormGroup(item: ThirdPartyRequestItemModel): FormGroup {\n return this.fb.group({\n whiteProdCardQuantity: [item?.cardCollateralDetails?.whiteProdCardQuantity ?? null, Validators.required],\n finishedProdCardQuantity: [item?.cardCollateralDetails?.finishedProdCardQuantity ?? null, Validators.required],\n whiteDevCardQuantity: [item?.cardCollateralDetails?.whiteDevCardQuantity ?? null, Validators.required],\n });\n }\n\n public contactsFormGroup(contact: UserModel) {\n return this.fb.control(contact);\n }\n\n public buildForm(request: ThirdPartyRequestModel): FormGroup {\n const details = request?.details || ({} as ThirdPartyRequestDetails);\n return this.fb.group({\n id: this.fb.control(request.id),\n details: this.fb.group({\n printProductionManager: this.fb.control(details.printProductionManager, [Validators.required]),\n incommPurchased: this.fb.control(details.incommPurchased, Validators.required),\n /**\n * Second fieldset\n */\n contacts: this.fb.array(\n (details?.contacts?.length ? (details?.contacts || []) : [null])\n .map(this.contactsFormGroup.bind(this))\n ),\n countryCode: this.fb.control(details.countryCode),\n printOwnerTypeCode: this.fb.control(details.printOwnerTypeCode, Validators.required),\n externalContactName: this.fb.control(details.externalContactName, Validators.required),\n externalContactEmail: this.fb.control(details.externalContactEmail, [Validators.required, Validators.email]),\n issuer: this.fb.control(details.issuer, Validators.required),\n externalContactAdditionalDetails: this.fb.control(details.externalContactAdditionalDetails, [Validators.maxLength(240)]),\n /**\n * Finance details\n */\n paymentTypeCode: this.fb.control(details.paymentTypeCode, [incommPurchaseYRequired]),\n partnerPoNumber: this.fb.control(details.partnerPoNumber, []),\n financeProofsOfPayment: this.fb.control(details.financeProofsOfPayment),\n financeNotes: this.fb.control(details.financeNotes)\n } as {[k in keyof ThirdPartyRequestDetails]: any}),\n items: this.fb.array((request.items || []).map(i => this.itemFormGroup(i, false)))\n });\n }\n}\n","import { HttpClient, HttpEventType } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { merge, Observable, of, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { skipWhile, switchMap, take, takeUntil, tap } from 'rxjs/operators';\n\nimport { API } from '../../shared/constants/api.constants';\nimport { CodeNameModel } from '../../shared/models/code-name.model';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\nimport { Events, EventService } from '../../shared/services/event-service.service';\nimport {\n TpsDetailsModel,\n TpsDialogData,\n TpsPrinter,\n} from '../components/request-types/third-party/third-po-sow-tps/tps/models/tps-dialog-data.model';\nimport { BasePoModel } from '../models/po.model';\nimport { RequestModel } from '../models/request.model';\nimport {\n CardRangesBulkPayload,\n ThirdPartyCardCollateralDetails,\n ThirdPartyChildCard,\n ThirdPartyConfirmedPrinterItems,\n ThirdPartyItemsOperationsDetails,\n ThirdPartyOperationsDetailsModel,\n ThirdPartyRequestItemModel,\n ThirdPartyRequestModel,\n} from '../models/third-party-request.model';\nimport { requestDetailsActions } from '../reducers/request-details/request-details.actions';\nimport { selectPendingRequestUpdatePointers } from '../reducers/request-details/request-details.selectors';\nimport { FileDownloadService } from './file-download.service';\nimport { FileUploadService } from './file-upload.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ThirdPartyProductionService {\n private poDetails: ReplaySubject = new ReplaySubject(1);\n private tpsDetails: ReplaySubject = new ReplaySubject(1);\n\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private fileUploadService: FileUploadService,\n private http: HttpClient,\n private actions$: Actions,\n private store: Store,\n private fileDownloadService: FileDownloadService,\n private eventService: EventService\n ) {}\n\n public uploadProofOfPayments(requestId: string | number, file: File): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'finance', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createProofOfPayments(requestId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n public uploadOperationsAttachment(requestId: string | number, file: File): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'operations', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createOperationsAttachment(requestId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n public deleteProofOfPayment(requestId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(`${API.thirdPartyDeleteProofOfPayment(requestId, attachmentId)}`);\n }\n\n public deleteOperationsAttachment(requestId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(API.thirdPartyDeleteOperationsAttachment(requestId, attachmentId));\n }\n\n public updateOperationsNotes(requestId: string, operationsNotes: string): Observable<{ operationsNotes: string }> {\n return this.errorHandlingHttp.put(API.thirdPartyUpdateOperationsNotes(requestId), { operationsNotes });\n }\n\n public updateItemOperationsDetails(\n requestId: string, itemId: number, operationsDetails: Partial\n ): Observable<{ operationsDetails: ThirdPartyOperationsDetailsModel; childCards: ThirdPartyChildCard[] }> {\n return this.errorHandlingHttp.put(API.thirdPartyUpdateItemOperationsDetails(requestId, itemId), operationsDetails);\n }\n\n private createProofOfPayments(requestId: string | number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(`${API.thirdPartyCreateProofOfPayment(requestId)}`, null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n private createOperationsAttachment(requestId: string | number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(API.thirdPartyCreateOperationsAttachment(requestId), null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public getIssuers(name: string): Observable {\n return this.errorHandlingHttp.get(API.thirdPartyIssuer, {params: {name}});\n }\n public getProductUpc(productUpc: string): Observable {\n /**\n * Important to use http client in order to catch errors without generic updates\n */\n return this.http.get(API.getProductUpc(productUpc));\n }\n\n public saveRequest(requestId: string, data: ThirdPartyRequestModel, ngUnsubsribe: Subject, excludeParts?): Promise {\n return new Promise((resolve, reject) => {\n const saveAction = requestDetailsActions.updateRequestDetails({requestId, details: data, excludeParts});\n this.store.dispatch(saveAction);\n\n this.store\n .select(selectPendingRequestUpdatePointers)\n .pipe(\n skipWhile(pointers => pointers.includes(saveAction.pendingUpdateRequestPointer)),\n take(1),\n takeUntil(merge(ngUnsubsribe, this.actions$.pipe(ofType(requestDetailsActions.updateRequestDetailsFailure)).pipe(tap(reject))))\n )\n .subscribe({\n error: reject,\n complete: resolve\n });\n });\n }\n\n public updateCardCollateralDetails(\n requestId: string, itemId: number, details: ThirdPartyCardCollateralDetails\n ): Observable {\n return this.errorHandlingHttp.put(API.thirdPartyUpdateCardCollateralDetails(requestId, itemId), details);\n }\n\n public updateConfirmPrinters(\n requestId: string, items: ThirdPartyConfirmedPrinterItems\n ): Observable {\n return this.errorHandlingHttp.put(API.thirdPartyUpdateConfirmedPrinters(requestId), items);\n }\n\n public getPOListener(): Observable {\n return this.poDetails.asObservable();\n }\n\n public callPO(requestId: number | string): void {\n this.errorHandlingHttp.get(`${API.thirdProdPo(requestId)}`).subscribe((data: BasePoModel) => {\n this.poDetails.next(data);\n });\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n\n public downloadPoPdf(requestId: string | number, poId: number, type: string): void {\n this.fileDownloadService.downloadFile(API.thirdProdPoPdfDownload(requestId, poId, type));\n }\n\n public downloadTpsReport(\n request: ThirdPartyRequestModel,\n tps: TpsDetailsModel,\n dielineTypeCodes: CodeNameModel[],\n tpsReturnFileTypeCodes: CodeNameModel[]): void {\n this.fileDownloadService.downloadFile(API.thirdProdTpsReportDownload(), undefined, {\n request,\n tps,\n refData: {\n dielineTypeCodes,\n tpsReturnFileTypeCodes,\n }\n });\n }\n\n public createPO(requestId: number | string, data: any): Observable {\n const reqObj = Object.assign(data);\n return this.errorHandlingHttp.post(`${API.thirdProdPo(requestId)}`, reqObj);\n }\n\n public updatePO(requestId: number | string, poId: number, data: any): Observable {\n const observable = new Subject();\n\n const reqObj = Object.assign(data);\n this.errorHandlingHttp.put(`${API.thirdProdUpdatePO(requestId, poId)}`, reqObj)\n .subscribe(response => {\n this.callPO(requestId);\n observable.next(response);\n }, error => observable.error(error));\n return observable.asObservable();\n }\n\n public getItemPrinters(requestId: string): Observable {\n return this.errorHandlingHttp.get(API.thirdPartyItemPrinters(requestId));\n }\n\n public getRequestTpsListener(): Observable {\n return this.tpsDetails.asObservable();\n }\n\n public callTps(requestId: string): Subscription {\n return this.errorHandlingHttp.get(API.thirdPartyGetRequestTps(requestId)).subscribe(data => {\n this.tpsDetails.next(data);\n });\n }\n\n public deletePO(requestId: number | string, poId: number): Observable {\n const observable = new Subject();\n\n this.errorHandlingHttp.delete(`${API.thirdProdUpdatePO(requestId, poId)}`)\n .subscribe(() => {\n this.callPO(requestId);\n observable.next();\n }, err => observable.error(err));\n\n return observable.asObservable();\n }\n\n public createTps(requestId: string, data: TpsDetailsModel): Observable {\n const body = Object.assign(data);\n return this.errorHandlingHttp.post(`${API.thirdPartyCreateTps(requestId)}`, body);\n }\n\n public deleteTps(requestId: string | number, tpsId: string): Observable {\n return this.errorHandlingHttp.delete(API.thirdPartyDeleteTps(requestId, tpsId));\n }\n\n private createSowAttachment(requestId: string | number, poId: string | number, uploadId: string): Observable {\n return this.errorHandlingHttp.post(`${API.createThirdSowAttachment(requestId, poId)}`, null, {\n reportProgress: true,\n observe: 'events',\n params: {uploadId},\n });\n }\n\n public uploadSOWFile(requestId: string | number, poId: number, file: File): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'sow', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createSowAttachment(requestId, poId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n public deleteSOWFile(requestId: string | number, poId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(`${API.deleteThirdSowFile(requestId, poId, attachmentId)}`);\n }\n\n public bulkUpdateItems(requestId: string, body: ThirdPartyItemsOperationsDetails): Observable {\n return this.errorHandlingHttp.put(`${API.thirdPartyBulkUpdateItems(requestId)}`, body);\n }\n\n public bulkUpdateCardRanges(requestId: string, body: CardRangesBulkPayload): Observable {\n return this.errorHandlingHttp.put(`${API.thirdPartyBulkUpdateCardRanges(requestId)}`, body);\n }\n\n public bulkUpdateCCItems(requestId: string, body): Observable{\n return this.errorHandlingHttp.put(`${API.thirdPartyBulkUpdateCC(requestId)}`, body);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChanges\n} from '@angular/core';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport {ControlContainer} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ThirdPartyProductionService} from '../../../../../services/third-party-production.service';\n\nconst INCOMM_PURCHASED = 'INCOMM';\n\n@Component({\n selector: 'app-third-printer-owner',\n templateUrl: './third-printer-owner.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdPrinterOwnerComponent implements OnInit, OnChanges {\n @Input() public isDisabled: boolean;\n @Input() public printOwnerTypes: Partial[];\n @Input() public formValidationTrigger: Subject;\n @Input() public isIncommPurchased: boolean;\n\n public userDataLoading: Subject = new Subject();\n public issuerList = [];\n\n constructor(@Optional() public controlContainer: ControlContainer,\n private thirdPartyService: ThirdPartyProductionService,\n private cd: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.isIncommPurchased &&\n ((!changes.isIncommPurchased?.currentValue && !changes.isIncommPurchased?.firstChange)\n || changes.isIncommPurchased?.currentValue)) {\n this.resetIncommPurchasedValidators();\n }\n }\n\n public getIssuerData(userName: string) {\n this.userDataLoading.next(true);\n this.controlContainer.control?.get('issuer')?.updateValueAndValidity();\n this.thirdPartyService.getIssuers(userName)\n .subscribe(data => {\n this.issuerList = Object.assign(data);\n this.cd.detectChanges();\n this.userDataLoading.next(false);\n },\n () => this.userDataLoading.next(false));\n }\n\n private resetIncommPurchasedValidators() {\n if (this.isIncommPurchased) {\n this.controlContainer.control.get('printOwnerTypeCode').setValue(INCOMM_PURCHASED);\n this.controlContainer.control.get('printOwnerTypeCode').disable();\n } else if (!this.isDisabled) {\n this.controlContainer.control.get('printOwnerTypeCode').reset();\n this.controlContainer.control.get('printOwnerTypeCode').enable();\n }\n }\n}\n","
\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n","
\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n \n \n
\n\n
\n \n
\n
\n","import {Component, OnInit, ChangeDetectionStrategy, Optional, Input, OnDestroy, ChangeDetectorRef} from '@angular/core';\nimport { ControlContainer, FormArray } from '@angular/forms';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { FILE_TYPES } from '../../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../../shared/models/upload-file-restrictions.model';\nimport { PaymentType } from '../../../../../constants/request-details.constants';\n\n@Component({\n selector: 'app-third-finance-details',\n templateUrl: './third-finance-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdFinanceDetailsComponent implements OnInit, OnDestroy {\n @Input() public requestId: string;\n @Input() public isDisabled: boolean;\n @Input() public paymentTypes: PaymentType[];\n @Input() public uploadPaymentProofFunction: (file: any) => Observable;\n @Input() public removePaymentProofFunction: (attachmentId: any) => Observable;\n @Input() public formValidationTrigger: Subject;\n\n public readonly paymentsProofRestriction = {\n fileType: FILE_TYPES.THIRD_PARTY_PRODUCTION.FINANCE,\n fileSize: FILE_SIZE_RESTRICTIONS.THIRD_PARTY_PRODUCTION.FINANCE,\n };\n\n private ngUnsubscribe = new Subject();\n\n constructor(@Optional() public controlContainer: ControlContainer,\n private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.controlContainer.control.get('paymentTypeCode').valueChanges\n .pipe(\n filter(() => !this.isPartnerPoNumberVisible),\n filter(() => this.controlContainer.control.get('partnerPoNumber').value),\n tap(() => this.controlContainer.control.get('partnerPoNumber').reset()),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe();\n\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onUpdatePaymentsProof(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n (this.controlContainer.control.get('financeProofsOfPayment') as FormArray).push(obj.data);\n } else {\n const index = this.controlContainer.control.get('financeProofsOfPayment').value.findIndex(item => item?.id === obj.data);\n (this.controlContainer.control.get('financeProofsOfPayment') as FormArray).removeAt(index);\n }\n }\n\n public get isPartnerPoNumberVisible(): boolean {\n return this.controlContainer.control.get('incommPurchased').value &&\n this.controlContainer.control.get('paymentTypeCode').value === 'REBILL';\n }\n\n}\n","import { Subscriber } from '../Subscriber';\nimport { Observable } from '../Observable';\nimport { OuterSubscriber } from '../OuterSubscriber';\nimport { subscribeToResult } from '../util/subscribeToResult';\nexport function delayWhen(delayDurationSelector, subscriptionDelay) {\n if (subscriptionDelay) {\n return (source) => new SubscriptionDelayObservable(source, subscriptionDelay)\n .lift(new DelayWhenOperator(delayDurationSelector));\n }\n return (source) => source.lift(new DelayWhenOperator(delayDurationSelector));\n}\nclass DelayWhenOperator {\n constructor(delayDurationSelector) {\n this.delayDurationSelector = delayDurationSelector;\n }\n call(subscriber, source) {\n return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));\n }\n}\nclass DelayWhenSubscriber extends OuterSubscriber {\n constructor(destination, delayDurationSelector) {\n super(destination);\n this.delayDurationSelector = delayDurationSelector;\n this.completed = false;\n this.delayNotifierSubscriptions = [];\n this.index = 0;\n }\n notifyNext(outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {\n this.destination.next(outerValue);\n this.removeSubscription(innerSub);\n this.tryComplete();\n }\n notifyError(error, innerSub) {\n this._error(error);\n }\n notifyComplete(innerSub) {\n const value = this.removeSubscription(innerSub);\n if (value) {\n this.destination.next(value);\n }\n this.tryComplete();\n }\n _next(value) {\n const index = this.index++;\n try {\n const delayNotifier = this.delayDurationSelector(value, index);\n if (delayNotifier) {\n this.tryDelay(delayNotifier, value);\n }\n }\n catch (err) {\n this.destination.error(err);\n }\n }\n _complete() {\n this.completed = true;\n this.tryComplete();\n this.unsubscribe();\n }\n removeSubscription(subscription) {\n subscription.unsubscribe();\n const subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);\n if (subscriptionIdx !== -1) {\n this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);\n }\n return subscription.outerValue;\n }\n tryDelay(delayNotifier, value) {\n const notifierSubscription = subscribeToResult(this, delayNotifier, value);\n if (notifierSubscription && !notifierSubscription.closed) {\n const destination = this.destination;\n destination.add(notifierSubscription);\n this.delayNotifierSubscriptions.push(notifierSubscription);\n }\n }\n tryComplete() {\n if (this.completed && this.delayNotifierSubscriptions.length === 0) {\n this.destination.complete();\n }\n }\n}\nclass SubscriptionDelayObservable extends Observable {\n constructor(source, subscriptionDelay) {\n super();\n this.source = source;\n this.subscriptionDelay = subscriptionDelay;\n }\n _subscribe(subscriber) {\n this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));\n }\n}\nclass SubscriptionDelaySubscriber extends Subscriber {\n constructor(parent, source) {\n super();\n this.parent = parent;\n this.source = source;\n this.sourceSubscribed = false;\n }\n _next(unused) {\n this.subscribeToSource();\n }\n _error(err) {\n this.unsubscribe();\n this.parent.error(err);\n }\n _complete() {\n this.unsubscribe();\n this.subscribeToSource();\n }\n subscribeToSource() {\n if (!this.sourceSubscribed) {\n this.sourceSubscribed = true;\n this.unsubscribe();\n this.source.subscribe(this.parent);\n }\n }\n}\n","
\n {{'module.requests.third-party.items.shipments'|translate}}\n
\n
\n
\n 0 ? ' ' + (shipmentIndex + 1) : '')\">\n \n
\n
\n \n
\n
1\">\n \n \n \n
\n
\n\n
\n \n \n {{'module.requests.details.add-shipment' | translate}}\n \n
\n
\n
\n","import {Component, OnInit, ChangeDetectionStrategy, Optional, Input, ChangeDetectorRef, OnDestroy} from '@angular/core';\nimport {ControlContainer, FormArray, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ThirdPartyFormBuilderService} from '../../../../../services/third-party-form-builder.service';\nimport {ItemShipments} from '../../../../../models/request-item.model';\nimport {Warehouse} from '../../../../../models/warehouse.model';\nimport {combineLatest, Subject} from 'rxjs';\nimport {selectWarehouses} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {filter, map, startWith, takeUntil} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport {LabelHelperService} from '../../../../../services/label-helper.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {lazyLoadWarehouses} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-third-party-item-shipments',\n templateUrl: './third-party-item-shipments.component.html',\n styleUrls: ['./third-party-item-shipments.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdPartyItemShipmentsComponent implements OnInit, OnDestroy {\n @Input() isDisabled: boolean;\n @Input() itemIndex: number;\n @Input() public formValidationTrigger: Subject;\n\n public labelHelperService = LabelHelperService;\n public get requestItem(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get shipments(): FormArray {\n return this.requestItem.controls.shipments as FormArray;\n }\n\n private get productionQtyControl(): FormControl {\n return this.requestItem.controls.productionQuantity as FormControl;\n }\n\n public shipmentsOptions: { value: Warehouse }[] = [];\n public availableQty = 0;\n private ngUnsubscribe = new Subject();\n public warehouses$ = this.store.select(selectWarehouses).pipe(\n filter((v) => v.length > 0),\n map((warehouses: Warehouse[]) => warehouses.map(item => ({value: item})))\n );\n\n constructor(@Optional() public controlContainer: ControlContainer,\n private store: Store,\n private cd: ChangeDetectorRef,\n private translate: TranslateService,\n private thirdPartyFormBuilderService: ThirdPartyFormBuilderService) {}\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadWarehouses());\n this.setShipmentQtyValidator();\n combineLatest([\n this.shipments.valueChanges\n .pipe(\n startWith(this.shipments.value as []),\n filter(v => v !== null),\n ),\n this.productionQtyControl.valueChanges.pipe(\n startWith(this.productionQtyControl.value as number),\n filter(v => v !== null),\n ),\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([shipments, orderQuantity]) => {\n const usedQty = shipments.reduce((acc, curr) => acc + Number(curr.quantity), 0);\n this.availableQty = orderQuantity - usedQty;\n this.updateShipmentsValidity();\n this.cd.markForCheck();\n });\n\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public addShipment() {\n this.shipments.push(this.thirdPartyFormBuilderService.itemShipmentFormGroup({} as ItemShipments));\n this.cd.markForCheck();\n this.setShipmentQtyValidator();\n }\n public removeShipment(shipmentIndex: number) {\n this.shipments.removeAt(shipmentIndex);\n this.cd.markForCheck();\n }\n\n public getQuantityHint(isLast: boolean): string {\n return isLast ?\n `${this.translate.instant('module.requests.finance.ship-quantity-hint')}: ${this.availableQty}` : '';\n }\n\n private setShipmentQtyValidator(): void {\n this.shipments.controls.forEach((shipToGroup: FormGroup) => {\n shipToGroup.get('quantity').setValidators([\n UtilsService.availableQtyValidationFn(\n this.productionQtyControl,\n this.shipments), Validators.required]);\n });\n }\n\n private updateShipmentsValidity(): void {\n this.shipments.controls.forEach((shipToGroup: FormGroup) => {\n shipToGroup.get('quantity').updateValueAndValidity({onlySelf: true, emitEvent: true});\n shipToGroup.updateValueAndValidity({onlySelf: true, emitEvent: true});\n });\n this.shipments.updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.cd.detectChanges();\n }\n}\n","
\n {{ 'module.requests.third-party.items.production-quantity' | translate }}\n\n
\n
\n \n
\n
\n \n
\n \n {{ 'module.requests.third-party.items.production-quantity-validation' | translate }}\n \n
\n\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n \n
\n\n\n
\n
\n {{ label | translate }}\n *:\n
\n
\n {{ value == null ? '-' : value}}\n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'app-third-party-production-qty',\n templateUrl: './third-party-production-qty.component.html',\n styleUrls: ['./third-party-production-qty.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdPartyProductionQtyComponent implements OnInit, OnDestroy {\n @Input() public itemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public formValidationTrigger: Subject;\n\n private ngUnsubscribe = new Subject();\n\n public get itemForm() {\n return this.controlContainer.control;\n }\n constructor(public controlContainer: ControlContainer, private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.controlContainer.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => this.cd.markForCheck());\n\n this.controlContainer.control.get('masterCaseSize').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => this.controlContainer.control.get('productionQuantity').updateValueAndValidity({\n onlySelf: true,\n emitEvent: true\n }));\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n {{ 'module.requests.finance.form-factor' | translate }}\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n \n \n {{ 'module.requests.third-party.items.multipack-hint' | translate }}\n \n
\n\n
\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlContainer, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, take, takeUntil } from 'rxjs/operators';\n\nimport { lazyLoadDielines, lazyLoadSubstrates } from '../../../../../../reducers/ref-data/refdata.actions';\nimport { selectDielines, selectPrinters, selectSubstrates } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { FormFactorService } from '../../../../../../shared/services/form-factor.service';\nimport { SelectPrinterProvider } from '../../../../../classes/select-printer-provider';\nimport { ThirdPartyRequestItemModel } from '../../../../../models/third-party-request.model';\n\n@Component({\n selector: 'app-third-party-item-form-factor',\n templateUrl: './third-party-item-form-factor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdPartyItemFormFactorComponent implements OnInit, OnChanges, OnDestroy {\n @Input() public isEuropean: boolean;\n @Input() public isMicrosoftIssuer: boolean;\n @Input() public isIncommPurchased: boolean;\n @Input() public itemIndex: number;\n @Input() public formValidationTrigger: Subject;\n\n public substrates$ = this.store.select(selectSubstrates);\n public dielines$ = this.store.select(selectDielines);\n public printerList = [];\n private ngUnsubscribe = new Subject();\n private selectPrinterProvider;\n private dielineSubscription: Subscription;\n private encodingSubscription: Subscription;\n\n printers$ = this.store.select(selectPrinters).pipe(\n filter(v => v.length > 0),\n take(1)\n );\n\n constructor(\n @Optional() public controlContainer: ControlContainer,\n private store: Store,\n private formFactorService: FormFactorService,\n private cd: ChangeDetectorRef\n ) {\n }\n\n public ngOnInit(): void {\n this.store.dispatch(lazyLoadDielines());\n this.store.dispatch(lazyLoadSubstrates());\n\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n this.printers$\n .subscribe((printers) => {\n this.selectPrinterProvider = new SelectPrinterProvider(printers, 'EXTERNAL');\n this.selectPrinterProvider.checkPrinterTypeChanged(\n {dielineTypeCode: this.itemForm.get('dielineTypeCode').value} as ThirdPartyRequestItemModel\n );\n this.setPrinterSubscription();\n }\n );\n\n this.setFormSubscriptions();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.isEuropean && !changes.isEuropean.firstChange) {\n this.resetIsEuropeanControls();\n }\n if (changes.isMicrosoftIssuer && !changes.isMicrosoftIssuer.firstChange) {\n this.resetMicrosoftControls();\n }\n if (changes.isIncommPurchased && !changes.isIncommPurchased.firstChange) {\n if (!this.isIncommPurchased) {\n this.selectPrinterProvider?.checkPrinterTypeChanged(\n {dielineTypeCode: this.itemForm.get('dielineTypeCode').value} as ThirdPartyRequestItemModel\n );\n }\n }\n }\n\n public ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setPrinterSubscription(): void {\n this.selectPrinterProvider.getFilteredPrintersSubscription().pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(printers => {\n this.printerList = printers;\n if (!this.isIncommPurchased &&\n !this.selectPrinterProvider.isPrinterInList(this.itemForm.get('printer').value, this.printerList)) {\n this.itemForm.get('printer').reset();\n }\n });\n }\n\n private setFormSubscriptions(): void {\n this.encodingSubscription?.unsubscribe();\n this.dielineSubscription?.unsubscribe();\n\n this.encodingSubscription = this.itemForm.get('encodingType').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n if (this.isCostco) {\n [\n this.itemForm?.get('productId'),\n this.itemForm?.get('skuNumber'),\n this.itemForm?.get('itemNumber'),\n this.itemForm?.get('vendorStockNumber'),\n ].forEach((ctrl: FormControl) => {ctrl.reset(); ctrl.updateValueAndValidity();});\n }\n if (this.isBestBuyInputsVisible) {\n [\n this.itemForm?.get('costcoItemNumber'),\n this.itemForm?.get('itemNumber'),\n this.itemForm?.get('vendorStockNumber'),\n ].forEach((ctrl: FormControl) => {ctrl.reset(); ctrl.updateValueAndValidity();});\n }\n if (this.isUabInputsVisible) {\n [\n this.itemForm?.get('productId'),\n this.itemForm?.get('skuNumber'),\n this.itemForm?.get('costcoItemNumber'),\n ].forEach((ctrl: FormControl) => {ctrl.reset(); ctrl.updateValueAndValidity();});\n }\n if (!this.isCostco && !this.isBestBuyInputsVisible && !this.isUabInputsVisible) {\n [\n this.itemForm?.get('productId'),\n this.itemForm?.get('skuNumber'),\n this.itemForm?.get('itemNumber'),\n this.itemForm?.get('vendorStockNumber'),\n this.itemForm?.get('costcoItemNumber'),\n ].forEach((ctrl: FormControl) => {ctrl.reset(); ctrl.updateValueAndValidity();});\n }\n this.itemForm?.updateValueAndValidity();\n });\n\n this.dielineSubscription = this.itemForm.get('dielineTypeCode').valueChanges\n .pipe(\n filter(() => !this.isIncommPurchased),\n takeUntil(this.ngUnsubscribe))\n .subscribe((newDieline) => {\n this.selectPrinterProvider.checkPrinterTypeChanged({dielineTypeCode: newDieline} as ThirdPartyRequestItemModel);\n });\n }\n\n public get itemForm(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get isMultipackTipVisible(): boolean {\n return this.formFactorService.isMultipackTipVisible(this.itemForm.get('dielineTypeCode').value);\n }\n\n public get isCostco(): boolean {\n return this.formFactorService.isCostco(this.itemForm.get('encodingType').value);\n }\n\n public get isBestBuyInputsVisible(): boolean {\n return this.formFactorService.isBestBuyRelatedFieldVisible(this.itemForm.get('encodingType').value);\n }\n\n public get isUabInputsVisible(): boolean {\n return this.formFactorService.isUabRelatedFieldVisible(this.itemForm.get('encodingType').value);\n }\n\n public get isUabInputsRequired(): boolean {\n return this.isUabInputsVisible && this.formFactorService.isUSA(this.itemForm.get('countryCode')?.value);\n }\n\n private resetIsEuropeanControls(): void {\n (this.isEuropean\n ? [this.itemForm?.get('pidIdNumber')]\n : [this.itemForm?.get('pidIdNumber'), this.itemForm?.get('encodingId')]\n ).forEach((ctrl: FormControl) => {\n if (this.isEuropean) {\n ctrl.setValidators(Validators.required);\n } else {\n ctrl.clearValidators();\n ctrl.reset();\n }\n });\n this.cd.markForCheck();\n }\n\n private resetMicrosoftControls(): void {\n [\n this.itemForm?.get('microsoftData')\n ].forEach((ctrl: FormControl) => {\n if (this.isMicrosoftIssuer) {\n ctrl.setValidators(Validators.required);\n } else {\n ctrl.clearValidators();\n ctrl.reset();\n }\n });\n this.cd.markForCheck();\n }\n}\n","\n
\n
\n {{ label | translate }}*:\n
\n
\n {{ value == null ? '-' : value }}\n
\n
\n
\n
\n
\n
\n \n
\n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n \n
\n \n \n
\n \n \n \n \n \n \n \n
\n \n \n
\n \n
\n
\n \n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, merge, of, ReplaySubject, Subject } from 'rxjs';\nimport { catchError, distinctUntilChanged, pluck, switchMap, takeUntil, finalize } from 'rxjs/operators';\n\nimport { lazyLoadDielines, lazyLoadSubstrates } from '../../../../../../reducers/ref-data/refdata.actions';\nimport { selectDielines, selectSubstrates } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { ChildCardModel } from '../../../../../models/po.model';\nimport { ThirdPartyProductionService } from '../../../../../services/third-party-production.service';\nimport {TranslateService} from '@ngx-translate/core';\n\n@Component({\n selector: 'app-third-party-child-card',\n templateUrl: './third-party-child-card.component.html',\n styleUrls: ['./third-party-child-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.Default\n})\nexport class ThirdPartyChildCardComponent implements OnInit, OnDestroy, OnChanges {\n @Input() itemIndex: number;\n @Input() isDisabled: boolean;\n @Input() testId: string;\n\n @Input() isIncommPurchased: boolean;\n\n @Input() canRemove: boolean;\n /**\n * Accessing parent data thought the component input stragy rather than form in term of better isolation\n */\n private itemProductionQtySubject = new ReplaySubject(1);\n @Input() set itemProductionQty(itemProductionQty: number) {\n this.itemProductionQtySubject.next(itemProductionQty);\n }\n @Output() itemDelete = new EventEmitter();\n isProductUpcLoading = false;\n\n private ngUnsubscribe = new Subject();\n public dielines$ = this.store.select(selectDielines);\n public substrates$ = this.store.select(selectSubstrates);\n\n constructor(\n @Optional() public controlContainer: ControlContainer,\n private store: Store,\n private utilsService: UtilsService,\n private thirdPartyService: ThirdPartyProductionService,\n private cd: ChangeDetectorRef,\n private translate: TranslateService\n ) {}\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadDielines());\n this.store.dispatch(lazyLoadSubstrates());\n\n /**\n * Update local productionQuantity subscription\n */\n combineLatest([\n this.itemProductionQtySubject.asObservable(),\n merge(of(this.controlContainer.value), this.controlContainer.valueChanges).pipe(\n distinctUntilChanged((a, b) => a.childNumber === b.childNumber)\n )\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([itemProductionQuantity, childCard]: [number, ChildCardModel]) => {\n this.controlContainer.control.patchValue(\n {\n productionQuantity: (itemProductionQuantity || 0) * (childCard.childNumber || 0)\n },\n {emitEvent: false}\n );\n });\n\n /**\n * Product UPC subscription\n */\n this.controlContainer.valueChanges\n .pipe(\n pluck('productUpc'),\n distinctUntilChanged((a, b) => a === b),\n switchMap(productUpc => {\n this.isProductUpcLoading = true;\n return (productUpc ? this.thirdPartyService.getProductUpc(productUpc).pipe(catchError(() => of(null))) : of(null)).pipe(\n finalize(() => {\n this.isProductUpcLoading = false;\n })\n );\n }),\n takeUntil(this.ngUnsubscribe)\n )\n\n .subscribe(data => {\n if (data == null) {\n this.controlContainer.control.patchValue(\n {\n denom: null,\n denomType: null,\n productDescription: null,\n dcmsId: null,\n currency: null\n },\n {emitEvent: false}\n );\n this.controlContainer.control.get('productUpc').setErrors({upcError: true});\n this.cd.markForCheck();\n } else {\n const item = {\n denom: data?.denom || null,\n denomType: data?.denomType ?? null,\n productDescription: data.productDescription || null,\n dcmsId: data?.dcmsId ?? null,\n currency: data?.currency ?? null\n };\n this.controlContainer.control.patchValue(item, {emitEvent: false});\n this.cd.markForCheck();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if('isIncommPurchased' in changes) {\n if(!changes.isIncommPurchased.firstChange) {\n this.controlContainer.control.get('substrateTypeCode').reset(null);\n }\n }\n }\n\n getChildProdDescription() {\n return this.controlContainer.control.get('productDescription').value\n ? this.controlContainer.control.get('productDescription').value +\n this.translate.instant('module.requests.third-party.items.child-label')\n : null;\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n {{'module.requests.details.child-card-item-details' | translate}}\n
\n \n
\n
\n \n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, Input, Optional } from '@angular/core';\nimport { ControlContainer, FormArray } from '@angular/forms';\n\nimport { ChildCardModel } from '../../../../../models/po.model';\nimport { ThirdPartyFormBuilderService } from '../../../../../services/third-party-form-builder.service';\n\n@Component({\n selector: 'app-third-party-child-cards',\n templateUrl: './third-party-child-cards.component.html',\n styleUrls: ['./third-party-child-cards.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdPartyChildCardsComponent implements DoCheck {\n @Input() isDisabled: boolean;\n @Input() testId = 'third_party_child_cards';\n @Input() itemProductionQty: number;\n @Input() itemIndex: number;\n @Input() isIncommPurchased: boolean;\n get canRemove() {\n return (this.controlContainer.control as FormArray)?.length > 1;\n }\n\n constructor(\n @Optional() public controlContainer: ControlContainer,\n private thirdPartyFormBuilderService: ThirdPartyFormBuilderService,\n private cd: ChangeDetectorRef\n ) {}\n\n ngDoCheck(): void {\n this.cd.markForCheck();\n }\n\n addItem() {\n (this.controlContainer.control as FormArray).push(this.thirdPartyFormBuilderService.childCardFormGroup({} as ChildCardModel));\n }\n removeItem(itemIndex: number) {\n (this.controlContainer.control as FormArray).removeAt(itemIndex);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport {AbstractControl, ControlContainer, FormArray, FormControl} from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { combineLatest, merge, Observable, of, ReplaySubject, Subject, scheduled, animationFrameScheduler, timer } from 'rxjs';\nimport {catchError, delayWhen, switchMap, takeUntil, tap} from 'rxjs/operators';\nimport {REQUEST_TYPE} from '../../../../../constants/request-types.constant';\n\nimport {\n lazyLoadPrinters,\n lazyLoadThirdPartyDataPinFileTypes,\n lazyLoadThirdPartyOrderTypes,\n} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectThirdPartyDataPinFileTypes,\n selectThirdPartyOrderTypes,\n} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { DateService } from '../../../../../../shared/services/date-service.service';\nimport { ThirdPartyRequestItemModel } from '../../../../../models/third-party-request.model';\nimport { WpnResponse } from '../../../../../models/wpn-response';\nimport { RequestsService } from '../../../../../services/requests.service';\nimport {FormFactorService} from '../../../../../../shared/services/form-factor.service';\nimport {ThirdPartyFormBuilderService} from '../../../../../services/third-party-form-builder.service';\nimport {ChildCardModel} from '../../../../../models/po.model';\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\n\n@Component({\n selector: 'app-third-party-item',\n templateUrl: './third-party-item.component.html',\n styleUrls: ['./third-party-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdPartyItemComponent implements OnInit, OnDestroy, OnChanges {\n @Input() itemIndex: number;\n @Input() requestId: number | string;\n @Input() itemDetails: ThirdPartyRequestItemModel;\n @Input() isDisabled = true;\n @Input() isRemoveDisabled = true;\n @Input() isIncommPurchased: boolean;\n @Input() isPaymentTypeNotIncomm: boolean;\n @Input() formValidationTrigger: Subject;\n @Input() testId: string;\n @Input() isExpanded: boolean;\n\n @Output() copyItem = new EventEmitter();\n @Output() removeItem = new EventEmitter();\n @Input() public updateRequestDetailsFunction: (itemIdx: number) => Observable;\n\n public get itemForm() {\n return this.controlContainer.control;\n }\n public orderTypes$ = this.store.select(selectThirdPartyOrderTypes);\n public dataPinTypes$ = this.store.select(selectThirdPartyDataPinFileTypes);\n public readonly RUSH_JOB_WEEKS = 6;\n public isRushJobVisible: boolean;\n public optionsProductUPC = [];\n public isMicrosoftIssuer: boolean;\n\n public isEuropean$: Observable;\n public multipackTrigger$: ReplaySubject = new ReplaySubject(1);\n private ngUnsubscribe = new Subject();\n public initialized$ = scheduled([true], animationFrameScheduler).pipe(delayWhen(() => timer(this.itemIndex * 10)));\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n constructor(\n public controlContainer: ControlContainer,\n private store: Store,\n public dateService: DateService,\n private requestService: RequestsService,\n private cd: ChangeDetectorRef,\n private fromFactorService: FormFactorService,\n private thirdPartyFb: ThirdPartyFormBuilderService,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isIncommPurchased) {\n this.resetIncommPurchasedControls();\n }\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadThirdPartyOrderTypes());\n this.store.dispatch(lazyLoadPrinters());\n this.store.dispatch(lazyLoadThirdPartyDataPinFileTypes());\n\n /**\n * Is European product\n */\n this.isEuropean$ = combineLatest([\n this.requestService.getEuropeCountriesList(),\n merge(of(this.controlContainer.value), this.controlContainer.valueChanges)\n ]).pipe(\n switchMap(async ([countryList, formData]: [string[], ThirdPartyRequestItemModel]) => {\n if (formData.wpn) {\n const wpnData: WpnResponse[] = await this.requestService\n .getWPNdata((formData.wpn as unknown) as number)\n .pipe(catchError(e => of(null)))\n .toPromise();\n const product = wpnData?.find(item => `${item.productUpc}` === `${formData.productUpc}`);\n\n if(product) {\n return countryList.includes(product?.country?.isoAlphaAbbreviation);\n }\n }\n\n return false;\n }),\n takeUntil(this.ngUnsubscribe),\n );\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => this.cd.markForCheck());\n\n merge(\n of(this.itemForm.get('dielineTypeCode').value),\n this.itemForm.get('dielineTypeCode').valueChanges\n )\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() =>\n this.multipackTrigger$.next(this.fromFactorService.isMultipackTipVisible(this.itemForm.get('dielineTypeCode').value))\n );\n\n this.multipackTrigger$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(val => {\n const childCards = (this.itemForm.get('childCards') as FormArray);\n if (!val) {\n childCards.clear();\n } else if (childCards.length === 0) {\n childCards.push(this.thirdPartyFb.childCardFormGroup({} as ChildCardModel));\n }\n this.cd.markForCheck();\n });\n\n this.checkMicrosoftIssuer();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onDateSelect(date: Date): void {\n this.isRushJobVisible = this.dateService.earlierThanNWeeksFromNow(date, this.RUSH_JOB_WEEKS);\n }\n\n public checkIsMicrosoftIssuer(product: WpnResponse): boolean {\n return product?.issuer?.name.toLowerCase().indexOf('microsoft') > -1;\n }\n\n public updateMicrosoftIssuer(product: WpnResponse) {\n this.isMicrosoftIssuer = this.checkIsMicrosoftIssuer(product);\n }\n\n private checkMicrosoftIssuer() {\n const wpn = this.controlContainer.value.wpn;\n const productUpc = this.controlContainer.value.productUpc;\n if (wpn) {\n this.requestService.getWPNdata(wpn)\n .subscribe((data: WpnResponse[]) => {\n const product = data?.find(item => item.productUpc === productUpc);\n this.isMicrosoftIssuer = this.checkIsMicrosoftIssuer(product);\n }, () => {\n this.isMicrosoftIssuer = false;\n });\n }\n }\n\n public patchItemWithData(wpnResponse: WpnResponse) {\n this.itemForm.patchValue(this.getFormattedItemData(wpnResponse));\n [\n this.itemForm.get('itemNumber'),\n this.itemForm.get('vendorStockNumber'),\n ].forEach((control: AbstractControl) => {\n control?.reset();\n control?.updateValueAndValidity();\n });\n }\n\n public clearWpnInfo(): void {\n [\n this.itemForm.get('countryCode'),\n this.itemForm.get('wpnDescription'),\n this.itemForm.get('productUpc'),\n this.itemForm.get('productDescription'),\n this.itemForm.get('productOwners'),\n this.itemForm.get('dcmsId'),\n this.itemForm.get('denom'),\n this.itemForm.get('denomType'),\n this.itemForm.get('encodingId'),\n this.itemForm.get('encodingType'),\n this.itemForm.get('masterCaseSize'),\n this.itemForm.get('caseSize'),\n this.itemForm.get('processorInterface'),\n this.itemForm.get('processorCompany'),\n this.itemForm.get('brand'),\n this.itemForm.get('productClassification'),\n this.itemForm.get('currency'),\n ].forEach((control: AbstractControl) => control?.reset());\n }\n\n private getFormattedItemData(item) {\n const {productId, ...product} = item;\n return {\n ...product,\n countryCode: product.country?.isoAlphaAbbreviation,\n brand: product.brand ? product.brand.name : null,\n productClassification: product.productClassification ? product.productClassification.description : null,\n encodingType: product.encoding ? product.encoding.description : null,\n wpnDescription: product.packageDescription,\n processorInterface: product.processorName,\n processorCompany: product.processorCompanyName,\n caseSize: product.sleeveSize,\n masterCaseSize: product.caseSize,\n currency: product.currency,\n };\n }\n\n public uploadExternalPin = (file) => this.requestService.uploadExternalPin(this.requestId, file, this.itemDetails.id, REQUEST_TYPE.TPPR);\n\n public removeExternalPin = (attachmentId) => this.requestService.deleteExternalPin(this.requestId, attachmentId, this.itemDetails.id, REQUEST_TYPE.TPPR);\n\n public updatePinFilesFunction(obj: { action: string; data: any }): void {\n if (obj.action === 'add') {\n this.itemDetails.externalPinFiles.push(obj.data);\n } else {\n const index = this.itemDetails.externalPinFiles.findIndex(item => item?.id === obj.data);\n this.itemDetails.externalPinFiles.splice(index, 1);\n }\n }\n\n public beforeUploadFunction = () => this.updateRequestDetailsFunction(this.itemIndex).pipe(\n tap(id => {\n this.itemDetails.id = id;\n this.itemForm.patchValue({ id });\n }),\n );\n\n\n private resetIncommPurchasedControls(): void {\n [\n this.itemForm?.get('dataPinFileTypeCode'),\n this.itemForm?.get('rebillAmountPerItem'),\n this.itemForm?.get('upcRequiredInArt'),\n this.itemForm?.get('substrateTypeCode'),\n ].forEach((ctrl: FormControl) => {\n if (!this.isIncommPurchased) {\n ctrl?.reset();\n }\n });\n\n if (this.isIncommPurchased) {\n this.itemForm?.get('printer').reset();\n }\n\n this.cd.markForCheck();\n }\n}\n","
\n \n
\n \n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n {{'module.requests.details.select-upc' | translate}}\n \n
\n
\n \n {{'module.requests.finance.product-owner' | translate}}\n *:\n \n \n \n {{PO?.firstName}} {{PO?.lastName}}\n , \n \n \n
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n
\n\n \n \n\n \n \n\n \n \n \n \n\n
\n
\n \n
\n
\n
\n\n\n
\n
\n \n\n \n
\n
\n \n
\n\n\n
\n
\n {{ label | translate }}\n *:\n
\n
\n {{ value == null ? '-' : value}}\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport BigJs from 'big.js';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {\n asyncScheduler,\n BehaviorSubject,\n combineLatest,\n EMPTY,\n merge,\n Observable,\n of,\n ReplaySubject,\n scheduled,\n Subject,\n} from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\n\nimport { lazyLoadPaymentTypes, lazyLoadThirdPartyPrintOwnerTypes } from '../../../../../reducers/ref-data/refdata.actions';\nimport { selectPaymentTypes, selectThirdPartyPrintOwnerTypes } from '../../../../../reducers/ref-data/refdata.selectors';\nimport { UserGroups } from '../../../../../shared/constants/user-groups.enum';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { UserModel } from '../../../../../shared/models/user.model';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { LoaderService } from '../../../../../shared/services/loader.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { MAX_REBILL_TOTAL, PaymentType } from '../../../../constants/request-details.constants';\nimport { PRODUCTION_REQUEST_3RD_PARTY } from '../../../../constants/request-types.constant';\nimport { ThirdPartyRequestItemModel, ThirdPartyRequestModel } from '../../../../models/third-party-request.model';\nimport { selectThirdPartyRequestDetails, selectAdditionalOtherContacts } from '../../../../reducers/request-details/request-details.selectors';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { ThirdPartyFormBuilderService } from '../../../../services/third-party-form-builder.service';\nimport { ThirdPartyProductionService } from '../../../../services/third-party-production.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\n\n@Component({\n selector: 'app-third-details',\n templateUrl: './third-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdDetailsComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges, RequestDetailsStageController {\n private stepActiveSubject = new BehaviorSubject(false);\n @Input() public set active(active: boolean) {\n this.stepActiveSubject.next(active);\n }\n @Output() private deleteDraft = new EventEmitter();\n\n public get additionalStakeholdersDetailsControls(): FormArray {\n return this.form?.get('details.contacts') as FormArray;\n }\n public get requestItemsControls(): FormArray {\n return this.form?.get('items') as FormArray;\n }\n public ppmList: {value: UserModel}[] = [];\n public request: ThirdPartyRequestModel = {} as ThirdPartyRequestModel;\n public paymentTypes: PaymentType[] = [];\n public printOwnerTypes: Partial[] = [];\n public printOwnerTypesOriginal: Partial[] = [];\n public formValidationTrigger = new Subject();\n public isIncommPurchased = false;\n public newItemIndex: number;\n\n private ngUnsubscribe = new Subject();\n private refData$ = combineLatest([\n this.store.pipe(\n select(selectPaymentTypes),\n filter(v => v.length > 0)\n ),\n this.store.pipe(\n select(selectThirdPartyPrintOwnerTypes),\n filter(v => v.length > 0)\n )\n ]).pipe(takeUntil(this.ngUnsubscribe), shareReplay({\n bufferSize: 1,\n refCount: false,\n }));\n private request$ = this.store.pipe(\n select(selectThirdPartyRequestDetails),\n filter(request => request !== null && request?.type === PRODUCTION_REQUEST_3RD_PARTY),\n tap(r => {\n this.request = cloneDeep(r);\n if (!this.request.items.length) {\n this.request.items = [this.emptyReqItemObject];\n }\n }),\n takeUntil(this.ngUnsubscribe)\n );\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n public form: FormGroup;\n private formSource = new ReplaySubject(1);\n private get emptyItem() {\n return {};\n }\n public form$ = combineLatest([this.formSource.asObservable(), this.stepActiveSubject]).pipe(\n switchMap(([formSource, stepActive]) => {\n if(!stepActive) {\n return EMPTY;\n }\n\n return of(formSource);\n }),\n distinctUntilChanged()\n ).pipe(\n tap(()=> {\n this.loaderService.showLoader();\n }),\n switchMap(formSource => {\n const form = {...formSource};\n if (formSource) {\n /**\n * Prepopulate initial item\n */\n form.items = form.items.length ? form.items : [this.emptyItem as ThirdPartyRequestItemModel];\n return scheduled([null, this.thirdPartyFb.buildForm(form)], asyncScheduler);\n }\n return EMPTY;\n }),\n startWith(this.thirdPartyFb.buildForm({items: []} as ThirdPartyRequestModel)),\n tap(form => {\n this.form = form;\n this.setFormSubscriptions();\n this.setPPM();\n this.setPrintOwner();\n this.toggleFormDisabling();\n }),\n tap(()=> {\n setTimeout(() => this.loaderService.hideLoader());\n }),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private fb: FormBuilder,\n public utilsService: UtilsService,\n private requestsService: RequestsService,\n private store: Store,\n private eventService: EventService,\n private thirdPartyFb: ThirdPartyFormBuilderService,\n private thirdPartyProductionService: ThirdPartyProductionService,\n private cd: ChangeDetectorRef,\n private messageService: MessageService,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n private loaderService: LoaderService,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadPaymentTypes());\n this.store.dispatch(lazyLoadThirdPartyPrintOwnerTypes());\n\n this.setInitEssentialReqData();\n\n this.request$\n .pipe(\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(r => {\n this.formSource.next(r);\n });\n this.getPpmList();\n this.getData();\n\n this.eventService.on(Events.RequestDetailsValidation,\n this.onRequestDetailsValidation.bind(this), this.ngUnsubscribe);\n\n this.eventService.on(\n Events.RequestDetailsSave,\n () => {\n this.saveRequest();\n }, this.ngUnsubscribe\n );\n\n this.eventService.on(\n Events.RequestDetailsDelete,\n () => {\n this.deleteDraft.emit();\n }, this.ngUnsubscribe\n );\n\n this.eventService.on(Events.RequestDetailsSubmit, async (event) => {\n await this.saveRequest();\n\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n }, this.ngUnsubscribe);\n\n /**\n * Assign country code by first item country code\n */\n this.form$\n .pipe(\n filter(f => f != null),\n switchMap(f => combineLatest([of(f), merge(of(f.get('items').value), f.get('items').valueChanges)])),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(([f, items]: [FormGroup, ThirdPartyRequestItemModel[]]) => {\n const countryCode = items.length ? items[0].countryCode : null;\n\n f.get('details.countryCode').setValue(countryCode, {\n emitEvent: false\n });\n });\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.form.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n public async validate(): Promise {\n const form = await this.form$.pipe(take(1)).toPromise();\n if(form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n form.markAllAsTouched();\n this.cd.markForCheck();\n this.formValidationTrigger.next(undefined);\n return Promise.resolve(form.valid);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.formValidationTrigger.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n private setInitEssentialReqData(): void {\n this.request.items = [this.emptyReqItemObject];\n }\n\n private onRequestDetailsValidation(elementRef: ElementRef) {\n this.form.markAllAsTouched();\n this.formValidationTrigger.next(); // trigger validation mark for check for the components that supports the approach\n this.cd.markForCheck();\n if (!this.form.valid) {\n this.utilsService.logInvalidControls(this.form);\n return this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'),\n );\n }\n const rebillAmount = this.getSumRebillAmount();\n const totalQty = this.getAllItemsOrderQty();\n const maxRebillTotal = new BigJs(MAX_REBILL_TOTAL);\n\n if (rebillAmount.times(totalQty).gt(maxRebillTotal)) {\n this.messageService.showSystemMessage('warning',\n this.translateService.instant('module.requests.details.max-rebill-header'),\n this.translateService.instant('module.requests.details.max-rebill-desc'));\n return;\n }\n\n return this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n }\n\n private getSumRebillAmount() {\n return this.form.getRawValue().items.reduce((acc, curr) => acc.add(new BigJs(curr.rebillAmountPerItem || 0)), new BigJs(0));\n }\n\n private getAllItemsOrderQty() {\n return this.form.getRawValue().items.reduce((acc, curr) => acc.add(new BigJs(curr.productionQuantity || 0)), new BigJs(0));\n }\n // NOSONAR\n private normalizeFormData(): ThirdPartyRequestModel {\n const formData = cloneDeep(this.form.getRawValue());\n\n if (formData.details.issuer) {\n formData.details.issuer.id = this.request.details.issuer ? this.request.details.issuer.id : null;\n }\n\n formData.items = formData.items.map(formItem => {\n const i = cloneDeep(formItem);\n\n if (i.printer) {\n i.printer.id = i.printer.id || (this.request.items.find(item => i.id === item.id))?.printer?.id || null;\n }\n\n i.shipments.forEach((formShipment) => {\n if(formShipment.warehouse && !formShipment.warehouse.id){\n const shipment = (this.request.items.find(item => i.id === item.id))\n ?.shipments?.find(shimpment => shimpment.id === formShipment.id) || formShipment;\n formShipment.warehouse.id = shipment?.warehouse ? shipment.warehouse.id : null;\n }\n });\n\n return {\n ...i,\n merchants: i.merchants.map(m => ({...m, name: m.name?.name})),\n printer: i.printer?.id || i.printer?.mdmId ? i.printer : null\n };\n });\n\n return {...this.request, ...formData};\n }\n\n saveRequest() {\n const currentData = this.normalizeFormData();\n\n return this.thirdPartyProductionService\n .saveRequest(this.requestId, currentData, this.ngUnsubscribe, ['contacts'])\n .then(() => {\n this.messageService.showSystemMessage('success', this.translateService.instant('common.message.step-saved'), '');\n })\n .catch((err) => {\n throw err;\n });\n }\n\n private getPpmList(): void {\n this.requestsService.getUsers('', [UserGroups.THIRD_PARTY_PPM]).subscribe(ppmList => {\n this.ppmList = ppmList.map(item => ({value: item}));\n this.setPPM();\n });\n }\n\n private setPPM(): void {\n const currentVal = this.ppmList?.find(\n manager => manager?.value?.userName === this.request?.details?.printProductionManager?.userName,\n );\n\n if (currentVal?.value) {\n this.form?.get('details.printProductionManager').setValue(currentVal.value);\n }\n }\n\n private pushStakeholderContact(contact: UserModel): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact(null);\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n public copyRequestItem(itemIndex: number) {\n const itemData = cloneDeep(this.normalizeFormData());\n (this.form.get('items') as FormArray).push(this.thirdPartyFb.itemFormGroup(itemData.items[itemIndex], true));\n this.request.items.push(this.emptyReqItemObject);\n this.updateNewItemIndex();\n }\n\n public removeRequestItem(itemIndex: number) {\n (this.form.get('items') as FormArray).removeAt(itemIndex);\n this.request.items.splice(itemIndex, 1);\n }\n\n public addRequestItem() {\n this.requestItemsControls.push(this.thirdPartyFb.itemFormGroup({} as ThirdPartyRequestItemModel));\n this.request.items.push(this.emptyReqItemObject);\n this.updateNewItemIndex();\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n }\n\n public uploadPaymentProofFunction = file => this.thirdPartyProductionService.uploadProofOfPayments(this.requestId, file);\n\n public removePaymentProofFunction = (attachmentId: any) => this.thirdPartyProductionService.deleteProofOfPayment(this.requestId, attachmentId);\n\n public updateRequestDetailsFunction: (itemIdx: number) => Observable = (itemIdx: number) => this.requestsService.updateRequestDetails(this.requestId, this.normalizeFormData()).pipe(\n tap((reqDetails: ThirdPartyRequestModel) => {\n this.request.details = cloneDeep(reqDetails.details);\n this.utilsService.setMerchantsDataToControls(reqDetails.items, this.requestItemsControls);\n }),\n map(v => v.items[itemIdx].id),\n );\n\n private get emptyReqItemObject(): ThirdPartyRequestItemModel {\n return {externalPinFiles: []} as ThirdPartyRequestItemModel;\n }\n\n private getData(): void {\n this.refData$.subscribe(([paymentTypes, printOwnerTypes]) => {\n this.paymentTypes = paymentTypes;\n this.printOwnerTypes = printOwnerTypes;\n this.printOwnerTypesOriginal = printOwnerTypes;\n this.setPrintOwner();\n this.filterPrintOwnerList();\n });\n }\n\n private setPrintOwner() {\n const currentVal = this.printOwnerTypes?.find(\n po => po?.code === this.request?.details?.printOwnerTypeCode,\n );\n\n if (currentVal?.code) {\n this.form?.get('details.printOwnerTypeCode').setValue(currentVal.code);\n }\n }\n\n private filterPrintOwnerList() {\n this.printOwnerTypes = this.isIncommPurchased\n ? this.printOwnerTypesOriginal\n : this.printOwnerTypesOriginal.filter(item => item.code !== 'INCOMM');\n }\n\n private setFormSubscriptions(): void {\n if (this.form) {\n merge(\n of(this.form?.get('details.incommPurchased').value),\n this.form?.get('details.incommPurchased').valueChanges\n ).pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(isPurchased => {\n this.isIncommPurchased = isPurchased;\n this.filterPrintOwnerList();\n this.form.get('details.paymentTypeCode').updateValueAndValidity();\n this.cd.markForCheck();\n });\n\n this.form?.get('details.paymentTypeCode').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(paymentType => {\n if (paymentType === 'INCOMM_PAYS') {\n (this.form.get('items') as FormArray).controls.forEach((item: FormGroup) => {\n item.get('rebillAmountPerItem').reset();\n });\n }\n });\n }\n }\n\n private toggleFormDisabling() {\n return this.isDisabled\n ? this.form?.disable({ emitEvent: false })\n : this.form?.enable({ emitEvent: false });\n }\n\n}\n","
\n
\n {{ 'module.requests.stages.REQUEST_DETAILS' | translate }}\n
\n
\n \n
\n\n
\n \n
\n
\n
\n\n \n
\n {{'module.requests.third-party.details.print-owner' | translate}}\n\n \n
\n \n\n
\n {{'module.requests.details.finance-details' | translate}}\n\n \n
\n\n \n\n
\n {{ 'module.requests.text.request-items' | translate }}\n\n \n \n\n
\n \n
\n \n\n \n \n {{ 'module.requests.details.add-one-item' | translate }}\n \n
\n\n \n\n
\n \n {{ 'module.requests.details.stakeholder-details' | translate }}\n \n\n
\n
\n \n
\n\n \n \n {{ 'module.requests.details.add-other-contact' | translate }}\n \n
\n
\n
\n","
\n
\n
\n {{ 'module.requests.third-party.items.product-description' | translate }}\n {{ item.productDescription }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-owner' | translate }}\n
\n {{ convertNamesList(item.productOwners) }}\n
\n
\n\n
\n {{ 'module.requests.third-party.items.country' | translate }}\n {{ item.countryCode }}\n
\n\n
\n {{ 'module.requests.third-party.items.processor-interface' | translate }}\n {{ item.processorInterface }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.third-party.items.dcms-id' | translate }}\n {{ item.dcmsId }}\n
\n\n
\n {{ 'module.requests.third-party.items.denom' | translate }}\n {{ item.denom }}\n
\n\n
\n {{ 'module.requests.third-party.items.printer' | translate }}\n {{ item?.printer?.contact?.name }}\n
\n\n
\n {{ 'module.requests.third-party.items.rebill-amount' | translate }}\n {{ item.rebillAmountPerItem }}\n
\n
\n\n
\n
{{ 'module.requests.third-party.items.merchant-details' | translate }}
\n
\n
\n {{ 'module.requests.third-party.items.merchant-name' | translate }}\n {{ merchant?.name }}\n
\n\n
\n {{ 'module.requests.third-party.items.country' | translate }}\n {{ merchant?.country }}\n
\n\n
\n {{ 'module.requests.third-party.items.merchant-account' | translate }}\n {{ convertNamesList(merchant.accountManagers) }}\n
\n
\n
\n\n
\n
{{ 'module.requests.third-party.items.form-factor' | translate }}
\n
\n {{ 'module.requests.third-party.items.encoding-type' | translate }}\n {{ item?.encodingType }}\n
\n
\n\n
{{ 'module.requests.third-party.items.production-quantity' | translate }}
\n
\n \n
\n
\n {{ 'module.requests.third-party.items.ship-to' | translate}}\n \n {{shipment.warehouse?.name}}\n \n
\n
\n {{ 'module.requests.third-party.items.qty' | translate}}\n \n {{qty}}\n \n
\n
\n
\n\n
\n {{ 'module.requests.third-party.items.bundle-size' | translate }}\n {{ item?.bundleSize }}\n
\n\n
\n {{ 'module.requests.third-party.items.case-size' | translate }}\n {{ item?.caseSize }}\n
\n\n
\n {{ 'module.requests.third-party.items.master-size' | translate }}\n {{ item?.masterCaseSize }}\n
\n\n
\n {{ 'module.requests.third-party.items.special-project' | translate }}\n {{item?.specialProjectNumber}}\n
\n
\n\n \n\n
\n
\n {{ 'module.requests.third-party.items.item-notes' | translate }}\n {{ item.notes }}\n
\n
\n
\n
\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ThirdPartyRequestItemModel } from 'src/app/requests/models/third-party-request.model';\n\n@Component({\n selector: 'app-third-party-item-body',\n templateUrl: './third-party-item-body.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdPartyItemBodyComponent {\n @Input() item: ThirdPartyRequestItemModel;\n @Input() itemIndex: number;\n @Input() isFinanceApproval?: boolean;\n convertNamesList(arr): string {\n return arr.map(({firstName, lastName}) => `${firstName} ${lastName}`).join(', ');\n }\n\n}\n","\n
\n
\n
{{ 'module.requests.third-party.details.finance-items' | translate }}
\n \n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.third-party.details.payment-type' | translate }}:\n {{ paymentType }}\n
\n\n
\n {{ 'module.requests.third-party.details.partner-po' | translate }}:\n {{ request?.details?.partnerPoNumber }}\n
\n\n
\n {{ 'module.requests.third-party.details.total-rebill' | translate }}:\n {{ request?.details?.rebillTotalAmount }}\n
\n
\n\n
\n
\n {{ 'module.requests.third-party.details.finance-notes' | translate }}:\n {{ request?.details?.financeNotes }}\n
\n
\n\n \n\n
0\">\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n \n
\n \n
\n \n
\n
\n\n\n
\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { combineLatest, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { selectPaymentTypes } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { ThirdPartyRequestModel } from 'src/app/requests/models/third-party-request.model';\nimport { selectThirdPartyRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-third-finance-approval',\n templateUrl: './third-finance-approval.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdFinanceApprovalComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n private ngUnsubscribe = new Subject();\n public paymentType: string;\n public request: ThirdPartyRequestModel;\n\n data$ = combineLatest([\n this.store.pipe(select(selectPaymentTypes), filter(v => v?.length > 0)),\n this.store.pipe(select(selectThirdPartyRequestDetails), filter(v => !!v))\n ]).pipe(takeUntil(this.ngUnsubscribe));\n\n constructor(public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n private store: Store) {\n super();\n }\n\n ngOnInit(): void {\n this.data$.subscribe(([paymentTypes, request]) => {\n this.request = request;\n this.paymentType = this.utilsService.getItemName(paymentTypes, this.request.details.paymentTypeCode);\n this.cd.markForCheck();\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n\n","\n
0\">\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n
\n \n
\n\n
\n \n
\n\n
\n \n\n
\n \n \n
\n
\n \n
\n \n\n
\n
\n {{'module.requests.upload.artwork-files' | translate}}\n \n \n
\n
\n \n \n
\n
\n\n
\n
\n {{'module.requests.upload.final-art-file-path' | translate}}:\n {{request?.details.finalArtFilePath}}\n
\n
\n {{'common.label.note' | translate}}:\n {{request?.details.artworkNotes}}\n
\n
\n
\n
\n\n\n
\n\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, OnDestroy} from '@angular/core';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {Store} from '@ngrx/store';\nimport {selectThirdPartyRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {ARTWORK_STATUSES} from '../../../../constants/artwork-file-statuses.constants';\nimport {ThirdPartyEvents, Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport { Subscription, Subject } from 'rxjs';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport cloneDeep from 'lodash/cloneDeep';\nimport includes from 'lodash/includes';\nimport map from 'lodash/map';\nimport {ThirdPartyRequestModel, ThirdPartyRequestItemModel} from '../../../../models/third-party-request.model';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {RequestStageActions} from '../../../../../shared/services/request-stages.enum';\n\n@Component({\n selector: 'app-third-art-approval',\n templateUrl: './third-art-approval.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdArtApprovalComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n request$ = this.store.select(selectThirdPartyRequestDetails)\n .pipe(\n filter(v => !!v),\n );\n\n public userRoles = UserRoles;\n public requestItems: ThirdPartyRequestItemModel[];\n\n private subscriptions: Subscription[] = [];\n\n constructor(private store: Store,\n private messageService: MessageService,\n private eventService: EventService,\n private cd: ChangeDetectorRef,\n private stepActionsService: StepActionsService,\n private translateService: TranslateService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.setEventsSubs();\n\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((req: ThirdPartyRequestModel) => {\n this.requestItems = cloneDeep(req?.items);\n });\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getFilesStatus(files): string {\n return UtilsService.getFilesAggregatedStatus(files);\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.setValidationSubscription(),\n this.setSubmitSubscription(),\n );\n }\n\n private isAllItemsApproved(): boolean {\n const statuses = map(this.requestItems, (item) => item.artReview?.status);\n const hasUnreviewed = includes(statuses, ARTWORK_STATUSES.unreviewed);\n const hasRejected = includes(statuses, ARTWORK_STATUSES.rejected);\n\n return !(hasUnreviewed || hasRejected);\n }\n\n private setValidationSubscription(): Subscription {\n return this.eventService.on(ThirdPartyEvents.ArtworkApproveValidation, (elementRef) => {\n if (this.isAllItemsApproved()) {\n return this.stepActionsService.addReason(\n elementRef, 'step-approve', 'step-approve', ThirdPartyEvents.ArtworkApprove, 'right'\n );\n }\n\n this.messageService.showSystemMessage('error',\n this.translateService.instant('module.requests.approve.item-approve-required'),\n this.translateService.instant('module.requests.approve.approve-items-stage-error'),\n );\n\n this.cd.markForCheck();\n });\n }\n\n private setSubmitSubscription(): Subscription {\n return this.eventService.on(ThirdPartyEvents.ArtworkApprove, ({ comment }) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {MessageService} from '../../shared/services/message-service.service';\nimport {ModalService} from '../../shared/services/modal-service.service';\nimport {ThirdSowModel} from '../models/third-po-model';\nimport {PoSowManageService} from './po-sow-manage.service';\nimport {RequestsService} from './requests.service';\nimport {ThirdPartyProductionService} from './third-party-production.service';\n\n@Injectable()\nexport class ThirdPartyPoSowManageService extends PoSowManageService {\n constructor(\n protected requestsService: RequestsService,\n protected messageService: MessageService,\n protected modalService: ModalService,\n protected translate: TranslatePipe,\n protected store: Store,\n protected thirdPartyProductionService: ThirdPartyProductionService\n ) {\n super(requestsService, messageService, modalService, translate, store);\n }\n\n protected confirmDeleteSOW(\n requestId: string | number,\n poItem: ThirdSowModel,\n dialogRef?: MatDialogRef,\n shouldShowSuccessMessage: boolean = true\n ): void {\n const item = {...poItem, sowCreated: false};\n this.thirdPartyProductionService\n .updatePO(requestId, item.id, item)\n .subscribe(() => {\n if (dialogRef) {\n dialogRef.close();\n }\n\n if (shouldShowSuccessMessage) {\n this.messageService.showSystemMessage('success', null, this.translate.transform('common.message.sow-deleted'));\n }\n });\n }\n\n protected onCloseSOWSuccess(\n poItem: ThirdSowModel,\n dialogRef: MatDialogRef,\n filesChanged: boolean,\n requestId: string | number\n ): void {\n if (poItem.sowCreated) {\n dialogRef.close();\n if (filesChanged) {\n this.thirdPartyProductionService.callPO(requestId);\n }\n } else {\n this.deleteSOWItem(requestId, poItem, dialogRef, false);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators, AbstractControl, ValidatorFn } from '@angular/forms';\nimport {ThirdPartyCardCollateralDetails, ThirdPartyRequestItemModel} from '../models/third-party-request.model';\nimport {ItemShipments} from '../models/request-item.model';\nimport {UtilsService} from '../../shared/services/utils.service';\nimport { ThirdPartyTestCardShipment, ThirdSowItemModel } from '../models/third-po-model';\n\nconst checkShipmentQuantityValidatorFn =\n (sowItem: ThirdSowItemModel, type: keyof ThirdPartyCardCollateralDetails): ValidatorFn =>\n (ac: AbstractControl) => {\n const {value, parent} = ac;\n\n const shipmentSum =\n ((parent?.parent?.parent?.controls as AbstractControl[]) || []).reduce((acc, control) => {\n const currentQty = control.get(`cardCollateralDetails.${type}`) === ac ? value : control.get(`cardCollateralDetails.${type}`).value;\n return acc + +currentQty || 0;\n }, 0) || 0;\n if (shipmentSum > sowItem.cardCollateralDetails[type]) {\n return {totalQuantityGte: true};\n }\n\n return null;\n };\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThirdPoService {\n\n constructor(\n private fb: FormBuilder,\n ) { }\n\n get initialPoForm(): FormGroup {\n return this.fb.group({\n accountingInfo: this.fb.group({\n channel: [null, Validators.required],\n company: [null, Validators.required],\n inventoryType: [null, Validators.required],\n lineOfBusiness: [null, Validators.required],\n }),\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null),\n }),\n name: this.fb.control(null, [Validators.required, UtilsService.printerInfoValidationFn()]),\n mdmId: this.fb.control(null),\n id: this.fb.control(null),\n }),\n billingInfo: this.fb.group({\n taxes: [null],\n freight: [null],\n totalQuantity: [null],\n subTotal: [null],\n total: [null],\n rebillTotalAmount: [null],\n }),\n items: this.fb.array([]),\n miscItems: this.fb.array([]),\n instructions: [null],\n stakeholders: this.fb.group({\n approver3: this.fb.control(null)\n })\n });\n }\n\n getInitialSowStandaloneForm(): FormGroup {\n return this.fb.group({\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null, Validators.email),\n phone: this.fb.control(null),\n }),\n name: this.fb.control(null, [Validators.required, UtilsService.printerInfoValidationFn()]),\n mdmId: this.fb.control(null),\n id: this.fb.control(null),\n }),\n items: this.fb.array([]),\n instructions: [null],\n stakeholders: this.fb.group({\n approver3: this.fb.control(null)\n }),\n sowNotes: this.fb.control(null)\n });\n }\n\n getPoItemForm(item: ThirdPartyRequestItemModel): FormGroup {\n return this.fb.group({\n quantityInEaches: new FormControl(item.quantityInEaches ?? item.productionQuantity),\n unitPrice: new FormControl(item.unitPrice || 0),\n subtotalByItem: new FormControl(item.subtotalByItem || 0),\n shipments: this.getFormitemShipments(item),\n });\n }\n getSowStandaloneItemForm(item: ThirdPartyRequestItemModel & ThirdSowItemModel): FormGroup {\n return this.fb.group({\n quantityInEaches: new FormControl(item.quantityInEaches ?? item.productionQuantity),\n // unitPrice: new FormControl(item.unitPrice || 0),\n // subtotalByItem: new FormControl(item.subtotalByItem || 0),\n shipments: this.getFormitemShipments(item),\n id: this.fb.control(item.id),\n testCardShipments: this.fb.array(\n item.testCardShipments.map(testCardShipment => this.getSowItemShipment(testCardShipment, item))\n ),\n });\n }\n\n public getSowItemShipment(testCardShipment: ThirdPartyTestCardShipment, sowItem: ThirdSowItemModel) {\n return this.fb.group({\n cardCollateralDetails: this.fb.group({\n confirmed: this.fb.control(true),\n finishedProdCardQuantity: this.fb.control(testCardShipment?.cardCollateralDetails?.finishedProdCardQuantity || 0, [\n checkShipmentQuantityValidatorFn(sowItem, 'finishedProdCardQuantity')\n ]),\n whiteDevCardQuantity: this.fb.control(testCardShipment?.cardCollateralDetails?.whiteDevCardQuantity || 0, [\n checkShipmentQuantityValidatorFn(sowItem, 'whiteDevCardQuantity')\n ]),\n whiteProdCardQuantity: this.fb.control(testCardShipment?.cardCollateralDetails?.whiteProdCardQuantity || 0, [\n checkShipmentQuantityValidatorFn(sowItem, 'whiteProdCardQuantity')\n ])\n }),\n quantity: this.fb.control(testCardShipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(testCardShipment?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(testCardShipment?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(testCardShipment?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(testCardShipment?.warehouse?.address?.city || null),\n country: this.fb.control(testCardShipment?.warehouse?.address?.country || null),\n postalCode: this.fb.control(testCardShipment?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(testCardShipment?.warehouse?.address?.stateProvince || null)\n }),\n contact: this.fb.group({\n attention: this.fb.control(testCardShipment?.warehouse?.contact?.attention || null),\n cell: this.fb.control(testCardShipment?.warehouse?.contact?.cell || null),\n email: this.fb.control(testCardShipment?.warehouse?.contact?.email || null, Validators.email),\n phone: this.fb.control(testCardShipment?.warehouse?.contact?.phone || null)\n }),\n name: this.fb.control(testCardShipment?.warehouse?.name || null, []),\n _name: this.fb.control(testCardShipment?.warehouse || null, []),\n mdmId: this.fb.control(testCardShipment?.warehouse?.mdmId || null)\n })\n });\n }\n\n public getFormitemShipments(item: ThirdPartyRequestItemModel): FormArray {\n return this.fb.array(\n item.shipments.map(this.getFormItemShipment.bind(this)),\n );\n }\n\n private getFormItemShipment(shipment?: ItemShipments): FormGroup {\n return this.fb.group({\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: [shipment?.warehouse?.address?.addressLine1 || null],\n addressLine2: [shipment?.warehouse?.address?.addressLine2 || null],\n city: [shipment?.warehouse?.address?.city || null],\n country: [shipment?.warehouse?.address?.country || null],\n postalCode: [shipment?.warehouse?.address?.postalCode || null],\n stateProvince: [shipment?.warehouse?.address?.stateProvince || null],\n }),\n contact: this.fb.group({\n email: [shipment?.warehouse?.contact?.email || null],\n phone: [shipment?.warehouse?.contact?.phone || null],\n cell: [shipment?.warehouse?.contact?.cell || null],\n attention: [shipment?.warehouse?.contact?.attention || null],\n }),\n name: this.fb.control(shipment?.warehouse || null),\n id: this.fb.control(shipment?.warehouse?.id || null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n }),\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {ModalService} from '../../shared/services/modal-service.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {requestDetailsActions} from '../reducers/request-details/request-details.actions';\nimport {Store} from '@ngrx/store';\nimport {ThirdPartyProductionService} from './third-party-production.service';\nimport {BasePoModel} from '../models/po.model';\nimport {EMPTY, Observable} from 'rxjs';\nimport {switchMap, tap} from 'rxjs/operators';\nimport {MessageService} from '../../shared/services/message-service.service';\nimport {Events, EventService} from '../../shared/services/event-service.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThirdPoManageService {\n\n constructor(\n private modalService: ModalService,\n private translate: TranslateService,\n private store: Store,\n private thirdService: ThirdPartyProductionService,\n private messageService: MessageService,\n private eventService: EventService\n ) {\n }\n\n public onClosePO(dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number): void {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'PO'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSuccess(dialogRef, requestId);\n }\n });\n } else {\n this.onCloseSuccess(dialogRef, requestId);\n }\n }\n\n private onCloseSuccess(dialogRef: MatDialogRef, requestId: string | number): void {\n dialogRef.close();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: requestId as string}));\n this.thirdService.callPO(requestId);\n }\n\n public deletePoItem(requestId: string | number, poItem: BasePoModel, isSowStandalone = false): Observable {\n const header = isSowStandalone\n ? this.translate.instant('module.requests.po.modal.delete-sow-header', {number: poItem.id})\n : this.translate.instant('module.requests.po.modal.delete-po-header', {number: poItem.id});\n const descriptopn = isSowStandalone\n ? this.translate.instant('module.requests.po.modal.delete-sow-desc2')\n : this.translate.instant(poItem.sowCreated ? 'module.requests.po.modal.delete-po-desc' : 'module.requests.po.modal.delete-po-desc2');\n return this.modalService\n .openConfirmationModal(\n header,\n descriptopn,\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel')\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.thirdService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.po.po-deleted', {id: poItem.id}));\n })\n );\n }\n\n public deleteSowStandaloneItem(requestId: string | number, poItem: BasePoModel): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.delete-sow-header', {number: poItem.id}),\n this.translate.instant(\n poItem.sowCreated ? 'module.requests.po.modal.delete-sow-desc' : 'module.requests.po.modal.delete-sow-desc2'\n ),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.thirdService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.po.sow-deleted', {id: poItem.id}));\n })\n );\n }\n\n public onCloseTps(dialogRef: MatDialogRef,\n showModal: boolean) {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'TPS'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n dialogRef.close();\n }\n });\n } else {\n dialogRef.close();\n }\n\n }\n\n public deleteTps(requestId: string | number, tpsId: string, afterClosed?: (res: boolean) => void): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.tps.modal.delete-tps-header', {number: tpsId}),\n this.translate.instant('module.requests.tps.modal.delete-tps-desc'),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed()\n .pipe(\n tap((res) => {\n if (afterClosed) {\n afterClosed(res);\n }\n }),\n switchMap((res) => res ? this.thirdService.deleteTps(requestId, tpsId) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.tps.tps-deleted', {id: tpsId})\n );\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }),\n );\n }\n}\n","\n
\n {{'module.requests.finance.wpn-description' | translate}}:\n {{item?.wpnDescription}}\n \n
\n\n\n\n
\n
\n
\n {{'module.requests.finance.product-upc' | translate}}:\n {{item.productUpc}}\n
\n
\n \n {{'module.requests.finance.wpn' | translate}}\n \n \n \n {{'module.requests.po.wpn' | translate}}\n \n \n \n {{item.wpn}}\n
\n
\n {{'module.requests.po.merchant' | translate}}:\n \n {{merchant.name}}\n , \n \n
\n
\n
\n
\n
\n
\n {{'module.requests.finance.dieline' | translate}}:\n {{utilsService.getItemName(dielines, item.dielineTypeCode)}}\n
\n
\n {{'module.requests.finance.encoding-type' | translate}}:\n {{item.encodingType}}\n
\n
\n {{'module.requests.finance.bundle-size' | translate}}:\n {{item.bundleSize}}\n
\n
\n {{'module.requests.third-party.items.case-size' | translate}}:\n {{item.caseSize}}\n
\n
\n {{'module.requests.third-party.items.master-size' | translate}}:\n {{item.masterCaseSize}}\n
\n
\n {{'module.requests.po.qty-each' | translate}}*:\n
\n \n
\n
\n
\n {{'module.requests.po.unit-price' | translate}}*:\n
\n \n
\n
\n
\n {{'module.requests.po.item-subtotal' | translate}}:\n \n ${{itemForm.get('subtotalByItem').value | number : '1.2-2'}}\n \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n","import {Component, OnInit, Input, ChangeDetectorRef, Output, EventEmitter, ChangeDetectionStrategy, OnDestroy} from '@angular/core';\nimport {ThirdPartyRequestItemModel} from '../../../../../models/third-party-request.model';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport {selectDielines} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {filter, startWith, takeUntil} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport {combineLatest, Subject} from 'rxjs';\nimport {FormArray, FormGroup} from '@angular/forms';\nimport BigJs from 'big.js';\n\n@Component({\n selector: 'app-third-po-form-item',\n templateUrl: './third-po-form-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdPoFormItemComponent implements OnInit, OnDestroy {\n @Input() public item: ThirdPartyRequestItemModel;\n @Input() public itemIndex: number;\n @Input() public itemsLength: number;\n @Input() public isDisabled: boolean;\n @Input() public itemForm: FormGroup;\n\n @Output() public deleteItem: EventEmitter = new EventEmitter();\n\n public dielines: CodeNameModel[];\n public shipmentsFormArr: FormArray;\n private ngUnsubscribe = new Subject();\n\n constructor(\n private cd: ChangeDetectorRef,\n private store: Store,\n public utilsService: UtilsService,\n ) { }\n\n ngOnInit(): void {\n this.getDielines();\n this.setSubtotalByItemCalculation();\n\n this.shipmentsFormArr = this.itemForm?.get('shipments') as FormArray;\n }\n\n private getDielines(): void {\n this.store.select(selectDielines)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.dielines = Object.assign([], data);\n }\n });\n }\n\n private setSubtotalByItemCalculation(): void {\n combineLatest([\n this.itemForm?.get('quantityInEaches').valueChanges\n .pipe(\n startWith(this.itemForm?.get('quantityInEaches').value),\n filter(v => v !== null)\n ),\n this.itemForm?.get('unitPrice').valueChanges\n .pipe(\n startWith(this.itemForm?.get('unitPrice').value),\n filter(v => v !== null)\n ),\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([quantity, price]) => {\n const priceDecimal = new BigJs(Number(price));\n this.itemForm?.get('subtotalByItem').setValue(priceDecimal.times(Number(quantity)).toFixed(4));\n this.cd.markForCheck();\n });\n }\n\n public delete(): void {\n this.deleteItem.emit(this.itemIndex);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","
\n
\n

\n PO â„–{{dialogData.po?.id}}\n {{'module.requests.po.new-po' | translate}}\n

\n
\n \n \n \n \n \n
\n
\n \n
\n \n
\n {{'module.requests.po.accounting-info' | translate}}\n
\n
\n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n {{'module.requests.po.printer-info' | translate}}:\n
\n \n \n
\n \n \n
\n \n
\n {{'module.requests.po.item-info' | translate}}\n \n
\n \n
\n {{'module.requests.po.miscellaneous-items' | translate}}\n \n
\n \n
\n {{'module.requests.po.special' | translate}}\n
\n
\n
{{ 'module.requests.po.additional-instructions' | translate }}:
\n \n
\n\n
\n
\n
{{'module.requests.po.total-quantity' | translate}}:
\n
\n {{ getTotalQty() }}\n
\n
\n\n
\n
{{'module.requests.po.sub-total' | translate}}:
\n
\n ${{ getSubTotal() }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n\n
\n
{{'module.requests.po.freight' | translate}}:
\n
\n \n
\n
\n
\n
{{'module.requests.po.taxes' | translate}}:
\n
\n \n
\n
\n\n
\n
{{'module.requests.po.total' | translate}}:
\n
\n {{ getTotal() | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
{{'module.requests.po.rebill-total' | translate}}:
\n
\n {{getRebillTotalAmount() | currency}}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n
\n \n
\n stakeholders\n
\n \n \n \n \n

{{'module.requests.po.notice' | translate}}

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

\n {{'module.requests.po.item-info' | translate}}\n \n

\n \n \n
\n
\n
\n
\n \n \n
\n\n
\n \n \n
\n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation\n} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {ThirdPoDialogData} from './third-po-dialog-data';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport {Events, EventService} from '../../../../../../shared/services/event-service.service';\nimport {FormArray, FormBuilder, FormGroup} from '@angular/forms';\nimport { filter, take, takeUntil } from 'rxjs/operators';\nimport {ThirdPoService} from 'src/app/requests/services/third-po.service';\nimport {ThirdPoManageService} from 'src/app/requests/services/third-po-manage.service';\nimport {ThirdPartyProductionService} from 'src/app/requests/services/third-party-production.service';\nimport {MessageService} from '../../../../../../shared/services/message-service.service';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {Observable, Subject} from 'rxjs';\nimport {ThirdPoModel} from '../../../../../models/third-po-model';\nimport {ThirdPartyRequestItemModel} from '../../../../../models/third-party-request.model';\nimport BigJs from 'big.js';\nimport {MAX_PO_SUB_TOTAL, MAX_PO_TOTAL, MAX_REBILL_TOTAL} from '../../../../../constants/request-details.constants';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {Store} from '@ngrx/store';\nimport {selectPrinters} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {SelectPrinterProvider} from '../../../../../classes/select-printer-provider';\nimport { PoAccountingService } from 'src/app/requests/services/po-accounting.service';\n\n@Component({\n selector: 'app-third-po-form',\n templateUrl: './third-po-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ThirdPoFormComponent implements OnInit, OnDestroy {\n public poForm: FormGroup;\n public itemsArr: FormArray;\n public dialogData: ThirdPoDialogData;\n public isPoProcessing = false;\n public availableItems: ThirdPartyRequestItemModel[] = [];\n public printerList = [];\n testId = 'third_po';\n\n private poDetailsCopy: ThirdPoModel;\n private maxPoTotal = new BigJs(MAX_PO_TOTAL);\n private maxSubTotal = new BigJs(MAX_PO_SUB_TOTAL);\n private maxRebillTotal = new BigJs(MAX_REBILL_TOTAL);\n private ngUnsubscribe = new Subject();\n private selectPrinterProvider;\n\n private printers$ = this.store.select(selectPrinters).pipe(\n filter(v => v.length > 0),\n take(1)\n );\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: ThirdPoDialogData,\n private thirdPoService: ThirdPoService,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private poManageService: ThirdPoManageService,\n private dialogRef: MatDialogRef,\n private thirdProductionService: ThirdPartyProductionService,\n private eventService: EventService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private utilsService: UtilsService,\n private store: Store,\n private poAccountingService?: PoAccountingService\n ) { }\n\n ngOnInit(): void {\n this.initDialogData();\n this.initForm();\n\n this.printers$\n .subscribe((printers) => {\n this.selectPrinterProvider = new SelectPrinterProvider(printers, 'INTERNAL');\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.dialogData.items);\n this.setPrinterSubscription();\n this.initPrinter();\n }\n );\n this.setPoDetailsCopy();\n this.setAvailableItems();\n\n const accountingInfoFieldset = this.poForm.get('accountingInfo');\n this.poAccountingService.trackAccountingInfo(accountingInfoFieldset as FormGroup, this.ngUnsubscribe);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setAvailableItems(): void {\n this.availableItems = this.dialogData.request.items.filter(item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id));\n }\n\n private initDialogData() {\n this.dialogData = {\n ...cloneDeep(this.data),\n };\n }\n\n private setPrinterSubscription() {\n this.selectPrinterProvider.getFilteredPrintersSubscription().pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(printers => {\n this.printerList = printers;\n if (!this.selectPrinterProvider.isPrinterInList(this.poForm.get('printerInfo').value, this.printerList)) {\n this.poForm.get('printerInfo').reset();\n }\n });\n }\n\n private initForm(): void {\n this.poForm = this.thirdPoService.initialPoForm;\n\n this.poForm.patchValue(this.dialogData.po);\n\n this.dialogData.items.forEach((reqItem) => {\n (this.poForm.get('items') as FormArray).push(this.thirdPoService.getPoItemForm(reqItem));\n });\n\n this.itemsArr = this.poForm.get('items') as FormArray;\n this.poForm.setControl('miscItems', this.fb.array(\n this.dialogData?.po?.miscItems?.map(this.getMiscItemControl.bind(this)) || [],\n ));\n\n if (!this.dialogData.po.id) {\n this.poForm?.get('billingInfo').patchValue(this.dialogData.request.details);\n }\n\n if (this.dialogData.isDisabled) {\n this.poForm.disable({ emitEvent: false });\n }\n\n this.poForm.get('printerInfo.name').statusChanges\n .pipe(\n filter(status => status === 'VALID'),\n )\n .subscribe(status => {\n const printerInfo = { ...this.poForm.get('printerInfo.name').value };\n this.poForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince,\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone,\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n });\n }\n\n private checkIfDataChanged(): boolean {\n return !isEqualWith({\n ...this.dialogData.po,\n ...this.getPreparedForm(),\n },\n this.poDetailsCopy,\n this.dataCheckCustomizer,\n );\n }\n\n private getMiscItemControl(miscItem?: any) {\n return this.fb.group({\n description: this.fb.control(miscItem?.description || null),\n productionQuantity: this.fb.group({\n quantityEaches: this.fb.control(miscItem?.productionQuantity?.quantityEaches || null),\n unitPrice: this.fb.control(miscItem?.productionQuantity?.unitPrice || null),\n totalPrice: this.fb.control(miscItem?.productionQuantity?.totalPrice || null),\n shipments: this.fb.array(miscItem?.productionQuantity?.shipments?.map((shipment) => this.fb.group({\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(shipment?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(shipment?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(shipment?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(shipment?.warehouse?.address?.city || null),\n country: this.fb.control(shipment?.warehouse?.address?.country || null),\n postalCode: this.fb.control(shipment?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(shipment?.warehouse?.address?.stateProvince || null),\n }),\n contact: this.fb.group({\n attention: this.fb.control(shipment?.warehouse?.contact?.attention || null),\n cell: this.fb.control(shipment?.warehouse?.contact?.cell || null),\n email: this.fb.control(shipment?.warehouse?.contact?.email || null),\n phone: this.fb.control(shipment?.warehouse?.contact?.phone || null),\n }),\n name: this.fb.control(shipment?.warehouse?.name ? shipment.warehouse : null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n id: this.fb.control(shipment?.warehouse?.id || null),\n }),\n }))),\n }),\n });\n }\n\n private setPoDetailsCopy(): void {\n this.poDetailsCopy = cloneDeep({ ...this.dialogData.po, ...this.getPreparedForm() });\n }\n\n private getPreparedForm(): any {\n const form = {...this.dialogData.po, ...this.poForm.getRawValue()};\n\n form.items = form.items?.map((item, idx) => ({\n ...this.dialogData.items[idx],\n ...item,\n shipments: item.shipments.map((shipment) => ({\n ...shipment,\n quantity: shipment.quantity || 0,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name || shipment.warehouse?.name,\n },\n })),\n }));\n\n form.miscItems = form.miscItems?.map((miscItem) => ({\n ...miscItem,\n productionQuantity: {\n ...miscItem.productionQuantity,\n shipments: miscItem?.productionQuantity?.shipments?.map((shipment) => ({\n ...shipment,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name,\n },\n }))\n },\n }));\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo.id || null;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private dataCheckCustomizer(obj1: any, obj2: any): boolean {\n if (obj1 === null && obj2 === '' || obj1 === '' && obj2 === null) {\n return true;\n }\n\n if ((typeof obj1 === 'number' || obj1 === null ) && typeof obj2 === 'string' ||\n typeof obj1 === 'string' && (typeof obj2 === 'number' || obj2 === null)) {\n return Number(obj1) === Number(obj2);\n }\n }\n\n private saveOrUpdatePO(form): void {\n const poSource = (this.dialogData.po.id)\n ? this.thirdProductionService.updatePO(this.dialogData.requestId, this.dialogData.po.id, form)\n : this.thirdProductionService.createPO(this.dialogData.requestId, form);\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource\n .pipe(take(1))\n .subscribe((newPo: ThirdPoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n }, () => {this.isPoProcessing = false;},\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n });\n }\n\n private onSuccessPO(po: ThirdPoModel): void {\n this.dialogData.po = { ...po };\n this.initPrinter();\n this.setPoDetailsCopy();\n\n this.messageService.showSystemMessage('success',\n this.translate.transform('common.message.po-saved'), null);\n }\n\n private initPrinter(): void {\n const printer = this.printerList?.find(\n item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId\n );\n if (printer) {\n this.poForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n }\n\n getPrinterLabel(printer: any): string {\n return printer?.name || '';\n }\n\n onAddItem(itemsToAdd: ThirdPartyRequestItemModel[]): void {\n if (itemsToAdd.length) {\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.thirdPoService.getPoItemForm(item));\n });\n\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.dialogData.items);\n this.setAvailableItems();\n }\n }\n\n onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.dialogData.items);\n this.setAvailableItems();\n }\n\n closePO(): void {\n const isDataChanged = this.dialogData.isDisabled ? false : this.checkIfDataChanged();\n this.poManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n onPrintPo(requestId: string, poId: number, type: string): void {\n this.thirdProductionService.downloadPoPdf(requestId, poId, type);\n }\n\n deletePO(): void {\n this.isPoProcessing = true;\n this.poManageService.deletePoItem(this.dialogData.requestId, this.dialogData.po)\n .subscribe(() => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n () => {this.isPoProcessing = false;},\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n });\n }\n\n onSave(): void {\n this.eventService.emit({ eventName: Events.PoSubmit });\n\n this.poForm.get('billingInfo').patchValue({\n ...this.poForm.get('billingInfo')?.value,\n totalQuantity: this.getTotalQty(),\n total: this.getTotal(),\n subTotal: this.getSubTotal(),\n rebillTotalAmount: this.getRebillTotalAmount()\n });\n\n if (this.poForm.valid) {\n if (this.isSubTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-sub-total-desc')\n );\n } else if (this.isTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-total-desc')\n );\n } else if (this.isRebillTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-rebill-total-desc')\n );\n } else {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n }\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n }\n }\n\n getTotalQty(): number {\n return this.itemsArr.getRawValue()\n .reduce((prev, curr) => prev + Number(curr.quantityInEaches), 0);\n }\n\n getSubTotal(): number {\n const itemsTotal = this.itemsArr.getRawValue()\n .reduce((acc, item) => acc + Number(item.subtotalByItem), 0);\n\n const mistTotals = this.poForm.getRawValue().miscItems\n .reduce((acc, item) => acc + Number(item.productionQuantity.totalPrice), 0);\n\n return new BigJs(itemsTotal).add(mistTotals).toFixed(2);\n }\n\n getTotal(): number {\n const billingInfo = this.poForm?.get('billingInfo');\n const total = new BigJs(this.getSubTotal());\n const freight = Number(billingInfo?.get('freight')?.value);\n const taxes = Number(billingInfo?.get('taxes')?.value);\n\n return total.plus(freight).plus(taxes).toFixed(2);\n }\n\n get isTotalMaxError(): boolean {\n return new BigJs(this.getTotal()).gt(this.maxPoTotal);\n }\n\n get isSubTotalMaxError(): boolean {\n return new BigJs(this.getSubTotal()).gt(this.maxSubTotal);\n }\n\n get isRebillTotalMaxError(): boolean {\n return new BigJs(this.getRebillTotalAmount()).gt(this.maxRebillTotal);\n }\n\n getRebillTotalAmount(): number {\n const formItems = this.itemsArr.getRawValue();\n const dialogItems = this.dialogData.items;\n\n if (dialogItems[0]?.rebillAmountPerItem === undefined) {\n return 0;\n }\n\n return dialogItems.reduce((acc, item, index) => {\n const itemRebillAmount = new BigJs(item.rebillAmountPerItem);\n return acc.plus(itemRebillAmount.times(formItems[index].quantityInEaches));\n }, new BigJs(0)).toFixed(2);\n }\n}\n","\n
\n {{ 'module.requests.finance.wpn-description' | translate }}:\n {{ item.wpnDescription }}\n
\n\n
\n
\n
\n {{ 'module.requests.text.delivery-date' | translate }}:\n {{ item?.deliveryDate | date: 'MM/dd/yyyy' }}\n
\n\n
\n {{ 'module.requests.po.merchant' | translate }}:\n \n {{ merchant.name }}\n ,\n \n
\n\n
\n {{ 'module.requests.finance.denom' | translate }}:\n {{ item.denom }}\n
\n\n
\n {{ 'module.requests.finance.encoding-type' | translate }}:\n {{ item.encodingType }}\n
\n\n
\n {{ 'module.requests.finance.product-upc' | translate }}:\n {{ item.productUpc }}\n
\n\n
\n \n {{ 'module.requests.finance.wpn' | translate }}:\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ item.wpn }}\n
\n\n
\n {{ 'module.requests.third-party.tps.total-print-qty' | translate }}:\n {{ getTotalPrintQty(item) }}\n
\n
\n\n \n \n
\n
\n {{ 'module.requests.sow.pid-id' | translate }}:\n {{ pidId }}\n
\n
\n\n
\n
\n {{ 'module.requests.sow.encoding-identifier' | translate }}:\n {{ encodingId }}\n
\n
\n\n
\n
\n {{ 'module.requests.sow.microsoft-data' | translate }}:\n {{ microsoftData }}\n
\n
\n\n
\n
\n {{ 'module.requests.sow.costco-item' | translate }}:\n {{ costcoItemNumber }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.product-id' | translate }}:\n {{ productId }}\n
\n
\n\n
\n
\n {{ 'module.requests.sow.sku-number' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.item-number' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.vendor-stock' | translate }}:\n {{ vendorStockNumber }}\n
\n
\n
\n \n
\n
\n
\n {{ 'module.requests.finance.white-prod-card-quantity' | translate }}:\n \n {{ item.cardCollateralDetails.whiteProdCardQuantity }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.finance.finished-prod-card-quantity' | translate }}:\n \n {{ item.cardCollateralDetails.finishedProdCardQuantity }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.finance.white-dev-card-quantity' | translate }}:\n \n {{ item.cardCollateralDetails.whiteDevCardQuantity }}\n \n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.finance.bundle-size' | translate }}:\n \n {{ item.bundleSize }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.finance.case-size' | translate }}:\n \n {{ item.caseSize }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.sow.master-case-size' | translate }}:\n \n {{ item.masterCaseSize }}\n \n
\n
\n\n
\n {{ 'module.requests.finance.dieline' | translate }}:\n \n {{ utilsService.getItemName(dielines, item.dielineTypeCode) }}\n \n
\n\n
\n {{ 'module.requests.finance.substrate' | translate }}:\n \n {{ utilsService.getItemName(substrates, item.substrateTypeCode) }}\n \n
\n\n
\n {{ 'module.requests.po.unit-price' | translate }}:\n ${{ item.unitPrice || 0 | number: '1.4-4' }}\n
\n\n
\n {{ 'module.requests.po.item-subtotal' | translate }}\n {{ item.subtotalByItem }}\n
\n
\n\n \n
\n
\n
\n {{ 'module.requests.finance.child-card-item-details' | translate }}\n
\n
\n
\n
\n
\n {{ 'module.requests.third-party.items.product-description' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.product-upc' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.encoding-type' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.denom' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.substrate' | translate }}:\n \n {{ utilsService.getItemName(substrates, val) }}\n \n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.finance.child-number' | translate }}:\n {{ val }}\n
\n
\n\n
\n
\n {{ 'module.requests.finance.production-qty' | translate }}:\n \n {{ val * item.productionQuantity }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.finance.white-prod-card-quantity' | translate }}:\n \n {{ item.cardCollateralDetails.whiteProdCardQuantity * childCard.childNumber }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.finance.finished-prod-card-quantity' | translate }}:\n \n {{ item.cardCollateralDetails.finishedProdCardQuantity * childCard.childNumber }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.third-party.tps.total-print-qty' | translate }}:\n \n {{ childCard.childNumber * getTotalPrintQty(item) }}\n \n
\n
\n\n
\n
\n {{ 'module.requests.finance.white-dev-card-quantity' | translate }}:\n \n {{ item.cardCollateralDetails.whiteDevCardQuantity * childCard.childNumber }}\n \n
\n
\n
\n
\n\n \n
\n
\n
\n {{ 'module.requests.finance.ship-to' | translate }}:\n {{ shipmentItem.warehouse.name }}\n
\n\n
\n {{ 'module.requests.po.qty' | translate }}:\n {{ shipmentItem.quantity }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.po.address1' | translate }}:\n \n {{ shipmentItem.warehouse.address.addressLine1 || '-' }}\n \n
\n\n
\n {{ 'module.requests.po.address2' | translate }}:\n \n {{ shipmentItem.warehouse.address.addressLine2 || '-' }}\n \n
\n\n
\n {{ 'module.requests.po.city' | translate }}:\n {{ shipmentItem.warehouse.address.city || '-' }}\n
\n
\n
\n
\n {{ 'module.requests.po.state' | translate }}:\n \n {{ shipmentItem.warehouse.address.stateProvince || '-' }}\n \n
\n\n
\n {{ 'module.requests.po.zip' | translate }}:\n \n {{ shipmentItem.warehouse.address.postalCode || '-' }}\n \n
\n\n
\n {{ 'module.requests.po.country' | translate }}:\n \n {{ shipmentItem.warehouse.address.country || '-' }}\n \n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.po.attention' | translate }}:\n \n {{ shipmentItem.warehouse.contact.attention || '-' }}\n \n
\n\n
\n {{ 'module.requests.po.email' | translate }}:\n {{ shipmentItem.warehouse.contact.email || '-' }}\n
\n\n
\n {{ 'module.requests.po.phone' | translate }}:\n {{ shipmentItem.warehouse.contact.phone || '-' }}\n
\n
\n
\n
\n {{ 'module.requests.po.cell' | translate }}:\n {{ shipmentItem.warehouse.contact.cell || '-' }}\n
\n
\n
\n
\n \n
\n
\n
\n 0 ? idx + 1 : '' }}\"\n [itemsFormCtrl]=\"shipmentControl.get('warehouse._name')\"\n [itemsList]=\"(shipmentsOptions$ | async) | toSelectDropdownOptions : 'value' : getWarehouseLabel : true\"\n testId=\"ship_to_{{ idx }}\"\n >\n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n\n \n\n
\n
\n \n
\n
\n \n\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Optional, Output, Self } from '@angular/core';\nimport { ControlContainer, FormArray } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\n\nimport { lazyLoadDielines, lazyLoadSubstrates } from '../../../../../../reducers/ref-data/refdata.actions';\nimport { selectDielines, selectSubstrates, selectWarehouses } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport {\n ThirdPartyCardCollateralDetails,\n ThirdPartyRequestItemModel,\n ThirdPartyRequestModel,\n} from '../../../../../models/third-party-request.model';\nimport { Warehouse } from '../../../../../models/warehouse.model';\n\n@Component({\n selector: 'app-third-sow-form-item',\n templateUrl: './third-sow-form-item.component.html',\n styleUrls: ['./third-sow-form-item.component.scss']\n})\nexport class ThirdSowFormItemComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n private shipToSubscriptions: Array = [];\n\n @Input() request: ThirdPartyRequestModel;\n @Input() item: ThirdPartyRequestItemModel;\n @Input() itemIndex: number;\n @Input() isDisabled: boolean;\n @Output() addShipment = new EventEmitter();\n public dielines$ = this.store.select(selectDielines);\n public substrates$ = this.store.select(selectSubstrates);\n\n private warehouses$ = this.store.select(selectWarehouses).pipe(\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n public shipmentsOptions$ = this.warehouses$.pipe(\n map((shipments: Warehouse[]) => shipments.map(shipment => ({value: shipment, name: shipment.name})))\n );\n\n constructor(public utilsService: UtilsService, private store: Store, @Optional() @Self() public controlContainer: ControlContainer) {}\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadSubstrates());\n this.store.dispatch(lazyLoadDielines());\n this.setShipToListeners();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getTotalQty(item: ThirdPartyRequestItemModel): number {\n return [item.testCardQuantity, item.productionQuantity, item.orderQuantity].reduce((acc, i) => acc + (i || 0), 0);\n }\n\n public getTotalPrintQty(item: ThirdPartyRequestItemModel): number {\n return [\n item.productionQuantity,\n item.cardCollateralDetails.finishedProdCardQuantity,\n item.cardCollateralDetails.whiteProdCardQuantity\n ].reduce((acc, i) => acc + (i || 0), 0);\n }\n\n public getWarehouseLabel(warehouse: Warehouse) {\n return warehouse.name;\n }\n\n availableTestCardsQuantity(type: keyof ThirdPartyCardCollateralDetails) {\n return (\n (this.item.cardCollateralDetails[type] as number) -\n (this.controlContainer.control.get(`testCardShipments`) as FormArray).controls\n .map(v => Number(v.value.cardCollateralDetails[type]))\n .reduce((prev, curr) => prev + curr, 0)\n );\n }\n\n get testCardShipments(): FormArray {\n return this.controlContainer.control.get('testCardShipments') as FormArray;\n }\n\n deleteCurrentShipment(shipmentIndex: number) {\n this.testCardShipments.removeAt(shipmentIndex);\n }\n\n public setShipToListeners(): void {\n this.shipToSubscriptions.forEach(s => s?.unsubscribe());\n const shipmentsControlsArray = (this.controlContainer.control?.get('testCardShipments') as FormArray).controls as any[];\n\n this.shipToSubscriptions = shipmentsControlsArray.map(shipment => shipment.get('warehouse._name').valueChanges\n .subscribe(newValue => {\n shipment.get('warehouse').patchValue({\n mdmId: newValue?.mdmId,\n address: {\n addressLine1: newValue?.address?.addressLine1 || null,\n addressLine2: newValue?.address?.addressLine2 || null,\n addressLine3: newValue?.address?.addressLine3 || null,\n city: newValue?.address?.city || null,\n country: newValue?.address?.country || null,\n postalCode: newValue?.address?.postalCode || null,\n stateProvince: newValue?.address?.stateProvince || null\n },\n contact: {\n email: newValue?.contact?.email || null,\n phone: newValue?.contact?.phone || null,\n cell: newValue?.contact?.cell || null,\n attention: newValue?.contact?.attention || null\n },\n name: newValue?.name\n });\n })\n );\n }\n\n onAddShipment() {\n this.addShipment.next(this);\n }\n}\n","
\n \n
\n

SOW â„–{{ sow.id }}

\n\n
\n \n\n \n \n {{ 'common.button.delete' | translate }}\n \n\n \n {{ 'common.button.save' | translate }}\n \n\n \n
\n
\n\n \n\n \n
\n
\n {{ 'module.requests.sow.request' | translate }}:\n {{ 'module.requests.details.print-production-manager' | translate }}:\n {{ 'module.requests.po.printer' | translate }}:\n
\n
\n {{ sow.requestName }}\n {{ sow.stakeholders.buyer.firstName }} {{ sow.stakeholders.buyer.lastName }}\n {{ sow.printerInfo.name }}\n
\n
\n\n \n\n
\n
\n {{ 'module.requests.sow.sow-information' | translate }}\n\n \n
\n\n
\n \n
\n
\n\n \n\n
\n \n \n\n
\n
\n \n
\n
\n
\n {{ 'module.requests.po.component-description' | translate }}:\n {{ miscItem.description }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.po.qty-each' | translate }}:\n {{ miscItem.productionQuantity.quantityEaches }}\n
\n\n
\n {{ 'module.requests.po.unit-price-pure' | translate }}:\n ${{ miscItem.productionQuantity.unitPrice || 0 | number: '1.4-4' }}\n
\n\n
\n {{ 'module.requests.po.total-price-pure' | translate }}:\n ${{ miscItem.productionQuantity.totalPrice | number: '1.2-2' }}\n
\n
\n
\n \n
\n
\n
\n {{ 'module.requests.finance.ship-to' | translate }}:\n {{ shipment.warehouse.name }}\n
\n
\n {{ 'module.requests.finance.quantity' | translate }}:\n {{ shipment.quantity }}\n
\n
\n
\n
\n
\n {{ 'module.requests.po.address1' | translate }}:\n {{ shipment.warehouse.address.addressLine1 || '-' }}\n
\n
\n {{ 'module.requests.po.address2' | translate }}:\n {{ shipment.warehouse.address.addressLine2 || '-' }}\n
\n
\n {{ 'module.requests.po.city' | translate }}:\n {{ shipment.warehouse.address.city || '-' }}\n
\n
\n {{ 'module.requests.po.state' | translate }}:\n {{ shipment.warehouse.address.stateProvince || '-' }}\n
\n
\n {{ 'module.requests.po.zip' | translate }}:\n {{ shipment.warehouse.address.postalCode || '-' }}\n
\n
\n {{ 'module.requests.po.country' | translate }}:\n {{ shipment.warehouse.address.country || '-' }}\n
\n
\n
\n
\n {{ 'module.requests.po.attention' | translate }}:\n {{ shipment.warehouse.contact.attention || '-' }}\n
\n
\n {{ 'module.requests.po.email' | translate }}:\n {{ shipment.warehouse.contact.email || '-' }}\n
\n
\n {{ 'module.requests.po.phone' | translate }}:\n {{ shipment.warehouse.contact.phone || '-' }}\n
\n
\n {{ 'module.requests.po.cell' | translate }}:\n {{ shipment.warehouse.contact.cell || '-' }}\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n\n
\n
\n {{ 'module.requests.sow.total-cost' | translate }}:\n\n
\n \n
\n
\n
\n
\n
\n \n
{{ 'module.requests.sow.packaging-requirements' | translate }}
\n\n \n
\n \n
{{ 'module.requests.sow.additional-specs' | translate }}
\n\n
\n
{{ 'module.requests.sow.encoding-format' | translate }}:
\n
\n \n {{ encodingType }}\n ,\n \n
\n
\n \n
\n\n \n\n \n \n {{ 'common.restrictions.upload-pdf-only' | translate }}\n \n
\n
\n\n
\n
\n \n\n

{{ 'module.requests.sow.notice1' | translate }}

\n\n

{{ 'module.requests.sow.notice2' | translate }}

\n

{{ 'module.requests.sow.invoice' | translate | uppercase }}

\n

\n {{ 'module.requests.sow.notice3' | translate }}\n
\n {{ 'module.requests.sow.notice4' | translate }}\n

\n

\n {{ 'module.requests.sow.address1' | translate }}\n {{ 'module.requests.sow.address2' | translate }}\n {{ 'module.requests.sow.address3' | translate }}\n

\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormGroup, ValidatorFn } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isArray from 'lodash/isArray';\nimport isEqual from 'lodash/isEqual';\nimport isEqualWith from 'lodash/isEqualWith';\nimport isObject from 'lodash/isObject';\nimport mergeWith from 'lodash/mergeWith';\nimport transform from 'lodash/transform';\nimport { merge as rxjsMerge, of, Subject } from 'rxjs';\nimport { first, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { FILE_TYPES, FileTypes } from '../../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../../shared/models/upload-file-restrictions.model';\nimport { MessageService } from '../../../../../../shared/services/message-service.service';\nimport { ThirdPartyCardCollateralDetails, ThirdPartyRequestModel } from '../../../../../models/third-party-request.model';\nimport {\n ThirdPartyTestCardShipment,\n ThirdPoModel,\n ThirdSowItemModel,\n ThirdSowModel,\n} from '../../../../../models/third-po-model';\nimport { ThirdPartyProductionService } from '../../../../../services/third-party-production.service';\nimport { ThirdPartyPoSowManageService } from '../../../../../services/third-party-sow-manage.service';\nimport { ThirdSowFormItemComponent } from '../third-sow-form-item/third-sow-form-item.component';\n\nexport interface ThirdSowFormDataModel {\n sow: ThirdSowModel | ThirdPoModel;\n request: ThirdPartyRequestModel;\n isDisabled: boolean;\n}\n\nconst checkShipmentQuantityValidatorFn = (sowItem: ThirdSowItemModel, type: keyof ThirdPartyCardCollateralDetails): ValidatorFn => (ac: AbstractControl) => {\n const {value, parent} = ac;\n\n const shipmentSum =\n ((parent?.parent?.parent?.controls as AbstractControl[]) || []).reduce((acc, control) => {\n const currentQty = control.get(`cardCollateralDetails.${type}`) === ac ? value : control.get(`cardCollateralDetails.${type}`).value;\n return acc + +currentQty || 0;\n }, 0) || 0;\n if (shipmentSum > sowItem.cardCollateralDetails[type]) {\n return {totalQuantityGte: true};\n }\n\n return null;\n };\n\n@Component({\n selector: 'app-third-sow-form',\n templateUrl: './third-sow-form.component.html',\n styleUrls: ['./third-sow-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ThirdPartyPoSowManageService],\n encapsulation: ViewEncapsulation.None\n})\nexport class ThirdSowFormComponent implements OnInit, OnDestroy {\n public fileTypes: FileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n request: ThirdPartyRequestModel;\n isDisabled: boolean;\n\n private ngUnsubscribe = new Subject();\n private filesWereChanged = false;\n public sow: ThirdSowModel;\n public sowCopy: ThirdSowModel;\n public form: FormGroup;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) data: ThirdSowFormDataModel,\n private dialogRef: MatDialogRef,\n private poSowManageService: ThirdPartyPoSowManageService,\n private translate: TranslatePipe,\n private fb: FormBuilder,\n private thirdProductionService: ThirdPartyProductionService,\n private messageService: MessageService,\n private cd: ChangeDetectorRef\n ) {\n this.sow = !data.sow.sowCreated ? this.createSowFromPo(data.sow) : (data.sow as ThirdSowModel);\n\n this.sowCopy = cloneDeep(this.sow);\n this.request = data.request;\n this.isDisabled = data.isDisabled;\n }\n\n ngOnInit(): void {\n this.filesWereChanged = false;\n this.form = this.getPreparedForm(this.sow);\n this.setShipToListeners();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private getEmptyShipmentItem(): ThirdPartyTestCardShipment {\n return {\n cardCollateralDetails: {\n confirmed: true,\n finishedProdCardQuantity: 0,\n whiteDevCardQuantity: 0,\n whiteProdCardQuantity: 0\n },\n quantity: null,\n warehouse: {\n mdmId: null,\n name: null,\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n postalCode: null,\n stateProvince: null\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null\n }\n }\n };\n }\n\n private createSowFromPo(po: ThirdPoModel): ThirdSowModel {\n const clonedPo = cloneDeep(po);\n\n const items = clonedPo.items.map(poItem => ({\n ...poItem,\n testCardShipments: [this.getEmptyShipmentItem()]\n }));\n\n return {\n ...clonedPo,\n sowAttachments: [],\n sowPackagingSpec: po.sowPackagingSpec || {\n files: []\n },\n sowEncodingSpec: po.sowEncodingSpec || {\n encodingTypes: [],\n files: []\n },\n sowNotes: '',\n items\n };\n }\n\n public uploadSowFileFunction = file => {\n this.filesWereChanged = true;\n return this.thirdProductionService.uploadSOWFile(this.request.id, this.sow.id, file);\n };\n\n public removeSowFileFunction = attachmentId => {\n this.filesWereChanged = true;\n return this.thirdProductionService.deleteSOWFile(this.request.id, this.sow.id, attachmentId);\n };\n\n private getPreparedForm(sow: ThirdSowModel) {\n const form = this.fb.group({\n sowCreated: true,\n items: this.fb.array(\n sow.items.map(sowItem =>\n this.fb.group({\n id: this.fb.control(sowItem.id),\n testCardShipments: this.fb.array(\n sowItem.testCardShipments.map(testCardShipment => this.itemShipment(testCardShipment, sowItem))\n ),\n sowNotes: this.fb.control(sowItem.sowNotes)\n })\n )\n ),\n total: this.fb.control({value: this.sow.billingInfo.total, disabled: true}),\n sowNotes: this.fb.control(this.sow.sowNotes)\n });\n if (this.isDisabled) {\n form.disable();\n }\n\n return form;\n }\n // NOSONAR\n private itemShipment(testCardShipment: ThirdPartyTestCardShipment, sowItem: ThirdSowItemModel) {\n return this.fb.group({\n cardCollateralDetails: this.fb.group({\n confirmed: this.fb.control(true),\n finishedProdCardQuantity: this.fb.control(testCardShipment?.cardCollateralDetails?.finishedProdCardQuantity || 0, [\n checkShipmentQuantityValidatorFn(sowItem, 'finishedProdCardQuantity')\n ]),\n whiteDevCardQuantity: this.fb.control(testCardShipment?.cardCollateralDetails?.whiteDevCardQuantity || 0, [\n checkShipmentQuantityValidatorFn(sowItem, 'whiteDevCardQuantity')\n ]),\n whiteProdCardQuantity: this.fb.control(testCardShipment?.cardCollateralDetails?.whiteProdCardQuantity || 0, [\n checkShipmentQuantityValidatorFn(sowItem, 'whiteProdCardQuantity')\n ])\n }),\n quantity: this.fb.control(testCardShipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(testCardShipment?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(testCardShipment?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(testCardShipment?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(testCardShipment?.warehouse?.address?.city || null),\n country: this.fb.control(testCardShipment?.warehouse?.address?.country || null),\n postalCode: this.fb.control(testCardShipment?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(testCardShipment?.warehouse?.address?.stateProvince || null)\n }),\n contact: this.fb.group({\n attention: this.fb.control(testCardShipment?.warehouse?.contact?.attention || null),\n cell: this.fb.control(testCardShipment?.warehouse?.contact?.cell || null),\n email: this.fb.control(testCardShipment?.warehouse?.contact?.email || null),\n phone: this.fb.control(testCardShipment?.warehouse?.contact?.phone || null)\n }),\n name: this.fb.control(testCardShipment?.warehouse?.name || null, []),\n _name: this.fb.control(testCardShipment?.warehouse || null, []),\n mdmId: this.fb.control(testCardShipment?.warehouse?.mdmId || null)\n })\n });\n }\n deleteSOW(shouldShowSuccessMessage?: boolean) {\n this.poSowManageService.deleteSOWItem(\n this.request.id,\n (this.sow as unknown) as ThirdSowModel,\n this.dialogRef,\n shouldShowSuccessMessage\n );\n }\n onSave() {\n this.form.markAllAsTouched();\n this.form.updateValueAndValidity();\n const arrayComparrator = (objValue, srcValue) => {\n if (isArray(objValue) && isArray(srcValue)) {\n // filteredArray\n return srcValue\n .map((sv, sk) => {\n if (!objValue[sk]) {\n return sv;\n }\n return mergeWith(objValue[sk], sv, arrayComparrator);\n })\n .filter(ov => ov !== undefined);\n }\n };\n const poToSave = mergeWith({}, this.sow, this.form.value, arrayComparrator);\n this.cd.markForCheck();\n\n if (!this.form.valid) {\n // eslint-disable-next-line no-console\n console.debug(this.form.errors);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n return;\n }\n\n this.thirdProductionService\n .updatePO(this.request.id, poToSave.id, poToSave)\n .pipe(first())\n .subscribe(data => {\n this.sow = data;\n this.sowCopy = cloneDeep({\n ...this.sow,\n sowNotes: poToSave.sowNotes,\n items: this.sow.items.map((item, indx) => ({...item, sowNotes: poToSave.items[indx].sowNotes}))\n });\n\n this.ngOnInit();\n this.cd.markForCheck();\n\n this.messageService.showSystemMessage('success', null, this.translate.transform('common.message.sow-saved'));\n });\n }\n\n printSOW() {\n this.thirdProductionService.downloadPoPdf(this.request.id, this.sow.id, 'sow');\n }\n\n onClose(): void {\n function difference(object: any, base: any) {\n function changes(o: any, b: any) {\n return transform(o, (result, value, key) => {\n if (!isEqual(value, b[key])) {\n result[key] = isObject(value) && isObject(b[key]) ? changes(value, b[key]) : value;\n }\n });\n }\n return changes(object, base);\n }\n\n const activeValue = this.form.value;\n const persistedValue = this.getPreparedForm(this.sowCopy).value;\n\n /**\n * Compairing form controlled values\n */\n const isDataChanged =\n this.filesWereChanged ||\n !isEqualWith(activeValue, persistedValue, (obj1, obj2) => {\n if ((obj1 === null && obj2 === '') || (obj1 === '' && obj2 === null)) {\n return true;\n }\n });\n\n // eslint-disable-next-line no-console\n console.debug('Sow form changes', difference(activeValue, persistedValue), 'File changed', this.filesWereChanged);\n\n this.poSowManageService.onCloseSOW(\n this.dialogRef,\n isDataChanged,\n this.request.id,\n this.filesWereChanged,\n (this.sow as unknown) as ThirdSowModel\n );\n }\n\n addShipment(itemIndex: number, itemComponent?: ThirdSowFormItemComponent) {\n (this.form.get(`items.${itemIndex}.testCardShipments`) as FormArray).push(\n this.itemShipment({} as ThirdPartyTestCardShipment, this.sow.items[itemIndex])\n );\n itemComponent.setShipToListeners();\n }\n\n private setShipToListeners(): void {\n rxjsMerge(of([]), ...(this.form.get('items') as FormArray).controls.map(i => i.get('testCardShipments').valueChanges))\n .pipe(\n switchMap(() => {\n const itemsControlsArray = (this.form?.get('items') as FormArray).controls as any[];\n\n const types = ['whiteProdCardQuantity', 'finishedProdCardQuantity', 'whiteDevCardQuantity'];\n const controls = types.flatMap(type => {\n const typedControls = itemsControlsArray.flatMap(item => {\n const testCardShipmentControls = (item?.get('testCardShipments') as FormArray).controls as FormArray[];\n return testCardShipmentControls.flatMap(testCardShipmentControl => testCardShipmentControl.get(`cardCollateralDetails.${type}`));\n });\n\n return rxjsMerge(...typedControls.map(c => c.valueChanges)).pipe(\n tap(() => {\n typedControls.forEach(typedControl => {\n typedControl.markAsTouched();\n typedControl.updateValueAndValidity({\n onlySelf: true,\n emitEvent: false\n });\n });\n })\n );\n });\n\n return rxjsMerge(...controls);\n }),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe();\n }\n}\n","\n
\n {{ 'module.requests.finance.wpn-description' | translate }}:\n {{ item?.wpnDescription }}\n \n \n \n
\n\n
\n
\n
\n {{ 'module.requests.finance.product-upc' | translate }}:\n {{ item.productUpc }}\n
\n
\n \n {{ 'module.requests.finance.wpn' | translate }}\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ item.wpn }}\n
\n
\n {{ 'module.requests.po.merchant' | translate }}:\n \n {{ merchant.name }}\n ,\n \n
\n
\n
\n
\n
\n
\n {{ 'module.requests.finance.dieline' | translate }}:\n \n {{ utilsService.getItemName(dielines, item.dielineTypeCode) }}\n \n
\n
\n {{ 'module.requests.finance.encoding-type' | translate }}:\n {{ item.encodingType }}\n
\n
\n {{ 'module.requests.finance.bundle-size' | translate }}:\n {{ item.bundleSize }}\n
\n
\n {{ 'module.requests.third-party.items.case-size' | translate }}:\n {{ item.caseSize }}\n
\n
\n {{ 'module.requests.third-party.items.master-size' | translate }}:\n {{ item.masterCaseSize }}\n
\n
\n\n {{ 'module.requests.third-party.items.total-print-qty' | translate }}:\n {{ item.totalPrintQuantity }}\n
\n
\n
\n\n
\n \n
\n \n
\n
\n
\n 0 ? idx + 1 : ''\n }}\"\n [itemsFormCtrl]=\"shipmentControl.get('warehouse._name')\"\n [itemsList]=\"shipmentsOptions$ | async | toSelectDropdownOptions: 'value' : getWarehouseLabel : true\"\n testId=\"ship_to_{{ idx }}\"\n >\n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n\n \n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {FormArray, FormGroup} from '@angular/forms';\nimport {Store} from '@ngrx/store';\nimport {merge as rxjsMerge, merge, of, Subject, Subscription} from 'rxjs';\nimport {filter, map, switchMap, takeUntil, tap} from 'rxjs/operators';\nimport {ThirdPartyTestCardShipment, ThirdSowItemModel} from 'src/app/requests/models/third-po-model';\nimport {Warehouse} from 'src/app/requests/models/warehouse.model';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\n\nimport {selectDielines, selectWarehouses} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport {ThirdPartyCardCollateralDetails, ThirdPartyRequestItemModel} from '../../../../../models/third-party-request.model';\nimport {ThirdPoService} from '../../../../../services/third-po.service';\nimport { lazyLoadWarehouses } from '../../../../../../reducers/ref-data/refdata.actions';\n\n@Component({\n selector: 'app-third-sow-standalone-form-item',\n templateUrl: './third-sow-standalone-form-item.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdSowStandaloneFormItemComponent implements OnInit, OnDestroy {\n @Input() public item: ThirdPartyRequestItemModel & ThirdSowItemModel;\n @Input() public itemIndex: number;\n @Input() public itemsLength: number;\n @Input() public isDisabled: boolean;\n @Input() public itemForm: FormGroup;\n\n @Output() public deleteItem: EventEmitter = new EventEmitter();\n\n public dielines: CodeNameModel[];\n public shipmentsFormArr: FormArray;\n private ngUnsubscribe = new Subject();\n\n private warehouses$ = this.store.select(selectWarehouses).pipe(\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n public shipmentsOptions$ = this.warehouses$.pipe(\n map((shipments: Warehouse[]) => shipments.map(shipment => ({value: shipment, name: shipment.name})))\n );\n\n constructor(\n private cd: ChangeDetectorRef,\n private store: Store,\n public utilsService: UtilsService,\n private thirdPoService: ThirdPoService\n ) {}\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadWarehouses());\n\n this.getDielines();\n this.setListeners();\n\n this.shipmentsFormArr = this.itemForm?.get('shipments') as FormArray;\n }\n\n private getDielines(): void {\n this.store\n .select(selectDielines)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.dielines = Object.assign([], data);\n }\n });\n }\n\n public delete(): void {\n this.deleteItem.emit(this.itemIndex);\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getWarehouseLabel(warehouse: Warehouse) {\n return warehouse.name;\n }\n\n availableTestCardsQuantity(type: keyof ThirdPartyCardCollateralDetails) {\n return (\n (this.item.cardCollateralDetails[type] as number) -\n (this.itemForm.get(`testCardShipments`) as FormArray).controls\n .map(v => Number(v.value.cardCollateralDetails[type]))\n .reduce((prev, curr) => prev + curr, 0)\n );\n }\n\n get testCardShipments(): FormArray {\n return this.itemForm.get('testCardShipments') as FormArray;\n }\n\n deleteCurrentShipment(shipmentIndex: number) {\n this.testCardShipments.removeAt(shipmentIndex);\n }\n\n addShipment() {\n (this.itemForm.get(`testCardShipments`) as FormArray).push(\n this.thirdPoService.getSowItemShipment({} as ThirdPartyTestCardShipment, this.item)\n );\n this.setListeners();\n }\n private shipToSubscriptions: Array = [];\n private setListeners(): void {\n merge(of([]), this.itemForm.get('testCardShipments').valueChanges)\n .pipe(\n switchMap(() => {\n const itemsControlsArray = [this.itemForm];\n\n const types = ['whiteProdCardQuantity', 'finishedProdCardQuantity', 'whiteDevCardQuantity'];\n const controls = types.flatMap(type => {\n const typedControls = itemsControlsArray.flatMap(item => {\n const testCardShipmentControls = (item?.get('testCardShipments') as FormArray).controls as FormArray[];\n return testCardShipmentControls.flatMap(testCardShipmentControl =>\n testCardShipmentControl.get(`cardCollateralDetails.${type}`)\n );\n });\n\n return rxjsMerge(...typedControls.map(c => c.valueChanges)).pipe(\n tap(() => {\n typedControls.forEach(typedControl => {\n typedControl.markAsTouched();\n typedControl.updateValueAndValidity({\n onlySelf: true,\n emitEvent: false\n });\n });\n })\n );\n });\n\n return rxjsMerge(...controls);\n }),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe();\n\n this.shipToSubscriptions.forEach(s => s?.unsubscribe());\n const shipmentsControlsArray = (this.itemForm?.get('testCardShipments') as FormArray).controls as any[];\n\n this.shipToSubscriptions = shipmentsControlsArray.map(shipment =>\n shipment.get('warehouse._name').valueChanges.subscribe(newValue => {\n shipment.get('warehouse').patchValue({\n mdmId: newValue?.mdmId,\n address: {\n addressLine1: newValue?.address?.addressLine1 || null,\n addressLine2: newValue?.address?.addressLine2 || null,\n addressLine3: newValue?.address?.addressLine3 || null,\n city: newValue?.address?.city || null,\n country: newValue?.address?.country || null,\n postalCode: newValue?.address?.postalCode || null,\n stateProvince: newValue?.address?.stateProvince || null\n },\n contact: {\n email: newValue?.contact?.email || null,\n phone: newValue?.contact?.phone || null,\n cell: newValue?.contact?.cell || null,\n attention: newValue?.contact?.attention || null\n },\n name: newValue?.name\n });\n })\n );\n }\n}\n","
\n
\n

\n {{ 'module.requests.po.sow-number' | translate: {sowNumber: dialogData.po?.id} }}\n {{ 'module.requests.po.new-sow' | translate }}\n

\n
\n \n \n {{ 'common.button.printer' | translate }}\n \n\n \n \n {{ 'common.button.delete' | translate }}\n \n \n {{ 'common.button.save' | translate }}\n \n \n
\n
\n \n
\n \n
\n
\n \n {{ 'module.requests.sow.request' | translate }}:\n \n \n {{ 'module.requests.details.print-production-manager' | translate }}:\n \n
\n
\n \n {{ sow.requestName }}\n \n \n {{ sow.stakeholders.buyer.firstName }} {{ sow.stakeholders.buyer.lastName }}\n \n
\n
\n \n\n
\n {{ 'module.requests.po.printer-info' | translate }}:\n
\n \n
\n \n
\n \n
\n {{ 'module.requests.po.item-info' | translate }}\n \n
\n \n
\n {{ 'module.requests.po.special' | translate }}\n
\n
\n
{{ 'module.requests.po.additional-instructions' | translate }}:
\n \n
\n\n
\n
\n
\n\n
\n
\n \n
{{ 'module.requests.sow.packaging-requirements' | translate }}
\n\n \n
\n \n
{{ 'module.requests.sow.additional-specs' | translate }}
\n\n
\n
{{ 'module.requests.sow.encoding-format' | translate }}:
\n
\n \n {{ encodingType }}\n ,\n \n
\n
\n \n
\n\n \n\n \n \n {{ 'common.restrictions.upload-pdf-only' | translate }}\n \n
\n
\n\n
\n
\n \n\n

{{ 'module.requests.sow.notice1' | translate }}

\n\n

{{ 'module.requests.sow.notice2' | translate }}

\n

{{ 'module.requests.sow.invoice' | translate | uppercase }}

\n

\n {{ 'module.requests.sow.notice3' | translate }}\n
\n {{ 'module.requests.sow.notice4' | translate }}\n

\n

\n {{ 'module.requests.sow.address1' | translate }}\n {{ 'module.requests.sow.address2' | translate }}\n {{ 'module.requests.sow.address3' | translate }}\n

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

\n {{ 'module.requests.po.item-info' | translate }}\n \n

\n \n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {ThirdPartyProductionService} from 'src/app/requests/services/third-party-production.service';\nimport {ThirdPoManageService} from 'src/app/requests/services/third-po-manage.service';\nimport {ThirdPoService} from 'src/app/requests/services/third-po.service';\nimport {FILE_TYPES, FileTypes} from 'src/app/shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from 'src/app/shared/models/upload-file-restrictions.model';\n\nimport {selectPrinters} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {Events, EventService} from '../../../../../../shared/services/event-service.service';\nimport {MessageService} from '../../../../../../shared/services/message-service.service';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {SelectPrinterProvider} from '../../../../../classes/select-printer-provider';\nimport {ThirdPartyRequestItemModel, ThirdPartyRequestModel} from '../../../../../models/third-party-request.model';\nimport {ThirdPartyTestCardShipment, ThirdPoModel, ThirdSowModel} from '../../../../../models/third-po-model';\nimport {ThirdPoDialogData} from '../third-po-form/third-po-dialog-data';\nimport { lazyLoadPrinters } from '../../../../../../reducers/ref-data/refdata.actions';\n\n@Component({\n selector: 'app-third-sow-form-standalone',\n styleUrls: ['./third-sow-form-standalone.component.scss'],\n templateUrl: './third-sow-form-standalone.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ThirdSowFormStandaloneComponent implements OnInit, OnDestroy {\n public readonly fileTypes: FileTypes = FILE_TYPES;\n public readonly fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n\n public sowStandaloneForm: FormGroup;\n public itemsArr: FormArray;\n public dialogData: ThirdPoDialogData;\n public isPoProcessing = false;\n public availableItems: ThirdPartyRequestItemModel[] = [];\n public printerList = [];\n public request: ThirdPartyRequestModel;\n public isDisabled = true;\n testId = 'third_sow_standalone';\n\n private poDetailsCopy: ThirdPoModel;\n private ngUnsubscribe = new Subject();\n private selectPrinterProvider;\n\n private printers$ = this.store.select(selectPrinters).pipe(\n filter(v => v.length > 0),\n take(1)\n );\n\n public sow: ThirdSowModel;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: ThirdPoDialogData,\n private thirdPoService: ThirdPoService,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private poManageService: ThirdPoManageService,\n private dialogRef: MatDialogRef,\n private thirdProductionService: ThirdPartyProductionService,\n private eventService: EventService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private utilsService: UtilsService,\n private store: Store\n ) {\n this.sow = !data.po.id ? this.createSowFromRequest(data.po, data.items) : (data.po as ThirdSowModel);\n this.request = data.request;\n this.isDisabled = data.isDisabled;\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPrinters());\n this.initDialogData();\n this.initForm();\n\n this.printers$.subscribe((...args) => this.onPrintersRecieved(...args));\n this.setPoDetailsCopy();\n this.setAvailableItems();\n }\n\n private createSowFromRequest(po: ThirdPoModel, items: ThirdPartyRequestItemModel[]): ThirdSowModel {\n const clonedStandaloneSow = cloneDeep(po);\n\n return {\n ...clonedStandaloneSow,\n sowAttachments: [],\n items: items.map(poItem => ({\n ...poItem,\n testCardShipments: [this.getEmptyShipmentItem()]\n })),\n sowNotes: ''\n };\n }\n\n private getEmptyShipmentItem(): ThirdPartyTestCardShipment {\n return {\n cardCollateralDetails: {\n confirmed: true,\n finishedProdCardQuantity: 0,\n whiteDevCardQuantity: 0,\n whiteProdCardQuantity: 0\n },\n quantity: null,\n warehouse: {\n mdmId: null,\n name: null,\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n postalCode: null,\n stateProvince: null\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null\n }\n }\n };\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private onPrintersRecieved = (printers) => {\n this.selectPrinterProvider = new SelectPrinterProvider(printers, 'INTERNAL');\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.dialogData.items);\n this.setPrinterSubscription();\n this.initPrinter();\n };\n\n private setAvailableItems(): void {\n this.availableItems = this.dialogData.request.items.filter(\n item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id)\n );\n }\n\n private initDialogData() {\n this.dialogData = {\n ...cloneDeep(this.data)\n };\n }\n private printerSubscription: Subscription = null;\n private setPrinterSubscription() {\n if (this.printerSubscription) {\n this.printerSubscription.unsubscribe();\n }\n this.printerSubscription = this.selectPrinterProvider\n .getFilteredPrintersSubscription()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(printers => {\n this.printerList = printers;\n if (!this.selectPrinterProvider.isPrinterInList(this.sowStandaloneForm.get('printerInfo').value, this.printerList)) {\n this.sowStandaloneForm.get('printerInfo').reset();\n }\n });\n }\n\n private initForm(): void {\n this.sowStandaloneForm = this.thirdPoService.getInitialSowStandaloneForm();\n\n this.sowStandaloneForm.patchValue(this.dialogData.po);\n\n this.sow.items.forEach(reqItem => {\n (this.sowStandaloneForm.get('items') as FormArray).push(this.thirdPoService.getSowStandaloneItemForm(reqItem));\n });\n\n this.itemsArr = this.sowStandaloneForm.get('items') as FormArray;\n\n if (this.isDisabled) {\n this.sowStandaloneForm.disable({emitEvent: false});\n }\n\n this.sowStandaloneForm\n .get('printerInfo.name')\n .statusChanges.pipe(filter(status => status === 'VALID'))\n .subscribe(status => {\n const printerInfo = {...this.sowStandaloneForm.get('printerInfo.name').value};\n this.sowStandaloneForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n });\n }\n\n private checkIfDataChanged(): boolean {\n return !isEqualWith(\n {\n ...this.dialogData.po,\n ...this.getPreparedForm()\n },\n this.poDetailsCopy,\n this.dataCheckCustomizer\n );\n }\n\n private setPoDetailsCopy(): void {\n this.poDetailsCopy = cloneDeep({...this.dialogData.po, ...this.getPreparedForm()});\n }\n\n private getPreparedForm(): any {\n const form = {...this.dialogData.po, ...this.sowStandaloneForm.getRawValue(), sowOnly: true};\n\n form.items = form.items?.map((item, idx) => ({\n ...this.dialogData.items[idx],\n ...item,\n shipments: item.shipments.map(shipment => ({\n ...shipment,\n quantity: shipment.quantity || 0,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name || shipment.warehouse?.name\n }\n }))\n }));\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo.id || null;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private dataCheckCustomizer(obj1: any, obj2: any): boolean {\n if ((obj1 === null && obj2 === '') || (obj1 === '' && obj2 === null)) {\n return true;\n }\n\n if (\n ((typeof obj1 === 'number' || obj1 === null) && typeof obj2 === 'string') ||\n (typeof obj1 === 'string' && (typeof obj2 === 'number' || obj2 === null))\n ) {\n return Number(obj1) === Number(obj2);\n }\n }\n\n private saveOrUpdateSowStandalone(form): void {\n const poSource = this.dialogData.po.id\n ? this.thirdProductionService.updatePO(this.dialogData.requestId, this.dialogData.po.id, form)\n : this.thirdProductionService.createPO(this.dialogData.requestId, form);\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource.pipe(take(1)).subscribe(\n (newPo: ThirdPoModel) => {\n this.onSuccessSowStandalone(newPo);\n this.cd.markForCheck();\n },\n () => {\n this.isPoProcessing = false;\n },\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n );\n }\n\n private onSuccessSowStandalone(po: ThirdPoModel): void {\n this.dialogData.po = {...po};\n this.sow = this.dialogData.po as ThirdSowModel;\n this.initForm();\n\n this.printers$.pipe(take(1)).subscribe((...args) => this.onPrintersRecieved(...args));\n this.setPoDetailsCopy();\n this.setAvailableItems();\n\n this.messageService.showSystemMessage('success', this.translate.transform('common.message.sow-saved'), null);\n }\n\n private initPrinter(): void {\n const printer = this.printerList?.find(item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId);\n if (printer) {\n this.sowStandaloneForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n }\n\n getPrinterLabel(printer: any): string {\n return printer?.name || '';\n }\n\n onAddItem(itemsToAdd: ThirdPartyRequestItemModel[]): void {\n if (itemsToAdd.length) {\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.thirdPoService.getSowStandaloneItemForm(item as unknown as any));\n });\n\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.dialogData.items);\n this.setAvailableItems();\n }\n }\n\n onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.selectPrinterProvider.checkPOPrinterTypeChanged(this.dialogData.items);\n this.setAvailableItems();\n }\n\n closePO(): void {\n const isDataChanged = this.isDisabled ? false : this.checkIfDataChanged();\n this.poManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n printSOW(): void {\n this.thirdProductionService.downloadPoPdf(this.request.id, this.sow.id, 'sow');\n }\n\n deleteSowStandalone(): void {\n this.isPoProcessing = true;\n this.poManageService.deleteSowStandaloneItem(this.dialogData.requestId, this.dialogData.po).subscribe(\n () => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n () => {\n this.isPoProcessing = false;\n },\n () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n );\n }\n\n onSave(): void {\n this.eventService.emit({eventName: Events.PoSubmit});\n\n if (this.sowStandaloneForm.valid) {\n const form = this.getPreparedForm();\n this.saveOrUpdateSowStandalone(form);\n } else {\n this.utilsService.touchFormControls(this.sowStandaloneForm);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n }\n }\n\n public uploadSowFileFunction = (file) => this.thirdProductionService.uploadSOWFile(this.request.id, this.sow.id, file);\n\n public removeSowFileFunction = (attachmentId) => this.thirdProductionService.deleteSOWFile(this.request.id, this.sow.id, attachmentId);\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { API } from 'src/app/shared/constants/api.constants';\n\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\nimport { EmailTpsDto } from '../components/request-types/third-party/third-po-sow-tps/tps/models/tps-dialog-data.model';\nimport {\n EmailTpsTemplate,\n} from '../components/request-types/third-party/third-po-sow-tps/tps/models/tps-email-template.model';\n\n@Injectable()\nexport class EmailTpsService {\n constructor(private errorHandlingHttpClient: ErrorHandlingHttpClient, private errorHandlingHttp: ErrorHandlingHttpClient) {}\n\n getEmailTpsTemplates(): Observable> {\n return this.errorHandlingHttp.get(API.emailTpsTemplates());\n }\n\n sendEmail(form: EmailTpsDto): Observable {\n return this.errorHandlingHttpClient.post(API.emailTps(), form);\n }\n}\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MatChipInputEvent } from '@angular/material/chips';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\nimport moment from 'moment';\nimport { BehaviorSubject, combineLatest, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap, takeUntil } from 'rxjs/operators';\nimport { SETTINGS_GROUPS } from 'src/app/nav-header/components/settings-modal/settings-modal.model';\nimport { EmailTpsService } from 'src/app/requests/services/email-tps.service';\nimport {\n SelectSearchDropdownOptionsInput,\n} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\nimport { CodeNameModel } from 'src/app/shared/models/code-name.model';\nimport { LoaderService } from 'src/app/shared/services/loader.service';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { UserSettingsService } from 'src/app/shared/services/user-settings.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { ThirdPartyRequestModel } from '../../../../../../models/third-party-request.model';\nimport { TpsDetailsModel } from '../models/tps-dialog-data.model';\n\nexport interface EmailTpsDialogData {\n tps: TpsDetailsModel;\n request: ThirdPartyRequestModel;\n refData: {\n dielineTypeCodes: CodeNameModel[];\n tpsReturnFileTypeCodes: CodeNameModel[];\n };\n}\n\nfunction arrayEmailValidator(ac: AbstractControl) {\n const hasError = ac.value?.reduce((acc, val) => acc || Validators.email(new FormControl(val)), false);\n if (hasError) {\n return {\n email: true\n };\n }\n return null;\n}\n\nfunction arrayRequiredValidator(ac: AbstractControl) {\n const hasError = !ac.value || ac.value?.length === 0;\n if (hasError) {\n return {\n required: true\n };\n }\n return null;\n}\n\nconst EMAIL_STYLES = `\n\n`;\n\n@Component({\n selector: 'app-email-tps',\n templateUrl: './email-tps.component.html',\n styleUrls: ['./email-tps.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [EmailTpsService]\n})\nexport class EmailTpsComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n private errorSubject = new BehaviorSubject(null);\n\n emailForm: FormGroup;\n testId = 'email_tps';\n error$ = this.errorSubject.asObservable().pipe(distinctUntilChanged(), takeUntil(this.ngUnsubscribe));\n inputHasError: null;\n emailTpsTemplateOptions$: Observable>;\n private loadSignatureSubject!: BehaviorSubject;\n signature$: Observable;\n visibleFields = ['to'];\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private dialogData: EmailTpsDialogData,\n private dialogRef: MatDialogRef,\n private fb: FormBuilder,\n private emailTpsService: EmailTpsService,\n private loaderService: LoaderService,\n private translate: TranslateService,\n public messageService: MessageService,\n public userSettingsService: UserSettingsService\n ) {\n this.loadSignatureSubject = new BehaviorSubject(undefined);\n const emailTpsTemplates$ = this.emailTpsService.getEmailTpsTemplates();\n this.signature$ = this.loadSignatureSubject.pipe(\n switchMap(\n () => this.userSettingsService.getEmailSignature$()\n )\n ).pipe(\n map(s => s.value || ''),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n this.emailTpsTemplateOptions$ = emailTpsTemplates$.pipe(\n map(templates =>\n templates.map(t => ({\n label: t.name,\n value: t\n }))\n )\n );\n }\n\n ngOnInit(): void {\n this.emailForm = this.createForm();\n // initial signature load on init\n this.loadSignatureSubject.next(undefined);\n // disable body in case on loading intent\n this.loadSignatureSubject.subscribe(() => {\n this.emailForm.get('body').disable();\n });\n\n // disable body in case on loading intent\n this.signature$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(sign => {\n if(sign) {\n this.emailForm.get('body').setValue(`

${sign}`);\n }\n this.emailForm.get('body').enable();\n });\n this.emailForm.valueChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.errorSubject.next(null);\n });\n combineLatest([this.emailForm.get('emailTemplate').valueChanges, this.signature$])\n .subscribe(([template, sign]) => {\n if (template) {\n this.emailForm.get('body').setValue(`${template.html}${sign}`);\n }\n });\n }\n ngOnDestroy(): void {\n this.loadSignatureSubject.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n emails = {\n to: new Set([]),\n cc: new Set([]),\n bcc: new Set([])\n };\n\n private createForm(): FormGroup {\n return this.fb.group({\n to: this.fb.control(\n {\n value: [],\n disabled: false\n },\n [arrayRequiredValidator, arrayEmailValidator]\n ),\n cc: this.fb.control(\n {\n value: [],\n disabled: false\n },\n [arrayEmailValidator]\n ),\n bcc: this.fb.control(\n {\n value: [],\n disabled: false\n },\n [arrayEmailValidator]\n ),\n subject: this.fb.control(\n {\n value: this.defaultSubject(),\n disabled: false\n },\n [Validators.required]\n ),\n emailTemplate: this.fb.control(null),\n body: this.fb.control(\n {\n value: null,\n disabled: false\n },\n [Validators.required, UtilsService.maxBytesLength(5 * 1000 * 1000, '5 MB')]\n )\n });\n }\n\n private defaultSubject(): string {\n const {request, tps} = this.dialogData;\n return [request.id, request.details.issuer?.name.replace(' ', '_'), 'Production Order', moment(tps.createdAt).format('MM.DD.YYYY')]\n .filter(a => a != null)\n .join('_');\n }\n\n public onClose(): void {\n this.dialogRef.close(null);\n }\n\n public async onSubmit(): Promise {\n if (this.emailForm.valid) {\n const value = this.emailForm.value;\n this.loaderService.showLoader();\n try {\n await this.emailTpsService\n .sendEmail({\n emailOptions: {\n ...value,\n html: `${EMAIL_STYLES}${value.body}`\n },\n tpsData: this.dialogData\n })\n .toPromise();\n\n this.messageService.showSystemMessage(\n 'success',\n this.translate.instant('module.requests.third-party.tps.email.message-sent-title'),\n this.translate.instant('module.requests.third-party.tps.email.message-sent-description', {\n to: Array.from(new Set([\n ...(this.emailForm.get('to').value || []),\n ...(this.emailForm.get('cc').value || []),\n ...(this.emailForm.get('bcc').value || [])\n ])).join(', ')\n })\n );\n this.dialogRef.close(null);\n } catch (e) {\n if (e?.error?.message) {\n this.errorSubject.next(e?.error?.message);\n }\n } finally {\n this.loaderService.hideLoader();\n }\n } else {\n this.emailForm.markAllAsTouched();\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.instant('common.modal.errors.invalid-form-header'),\n this.translate.instant('common.modal.errors.invalid-form-desc'),\n 5000\n );\n }\n }\n\n addEmailFromInput(field: string, event: MatChipInputEvent): void {\n if (event.value) {\n const multipleValues = event.value\n .split(/[,; \\t\\n]/g)\n .map(v => v.trim())\n .filter(v => !!v);\n multipleValues.forEach(value => {\n this.emails[field].add(value);\n this.emailForm.get(field).setValue([...(this.emailForm.get(field).value || []), value]);\n });\n event.chipInput.inputElement.value = '';\n }\n }\n\n removeEmail(field: string, email: string): void {\n this.emails[field].delete(email);\n this.emailForm.get(field).setValue([...this.emails[field]]);\n }\n\n validEmail(value: string): boolean {\n return Validators.email(new FormControl(value)) !== null;\n }\n\n openSignatureSettings() {\n this.userSettingsService\n .openModal({\n section: SETTINGS_GROUPS.EMAIL_SIGNATURE\n })\n .afterClosed()\n .subscribe(() => {\n this.loadSignatureSubject.next(undefined);\n });\n }\n}\n","
\n
\n

{{ 'module.requests.third-party.tps.email-tps' | translate }}

\n \n \n
\n
\n \n \n {{ 'module.requests.third-party.tps.email.' + field | translate }}\n *\n :\n \n \n \n {{ email }}\n cancel\n \n \n \n \n \n {{ messageService.getControlErrorMessage(emailForm.get(field).errors) }}\n \n \n
\n \n {{ 'module.requests.third-party.tps.email.add-cc' | translate }}\n \n \n {{ 'module.requests.third-party.tps.email.add-bcc' | translate }}\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n \n \n \n You may set up personal email signature via\n Settings\n dialog.\n \n \n \n \n \n
\n
\n \n \n {{ error }}\n \n
\n
\n\n
\n \n {{ 'common.button.send' | translate }}\n \n
\n
\n
\n","
\n
\n
\n \n
\n
\n {{ 'module.requests.po.merchant' | translate }}\n {{ getMerchantsList() }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ item?.productUpc }}\n
\n\n
\n {{ 'module.requests.third-party.items.wpn' | translate }}\n {{ item?.wpn }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-description' | translate }}\n {{ item?.productDescription }}\n
\n
\n
\n
\n {{ 'module.requests.third-party.items.denom' | translate }}\n {{ item?.denom }}\n
\n\n
\n {{ 'module.requests.tps.open-denom-range-first' | translate }}\n {{ 'module.requests.tps.open-denom-range-second' | translate }}\n {{ item?.openDenomRange }}\n
\n\n
\n {{ 'module.requests.third-party.items.encoding-type' | translate }}\n {{ item?.encodingType }}\n
\n\n
\n {{ 'module.requests.third-party.items.dieline' | translate }}\n {{ dieline$ | async }}\n
\n\n
\n {{ 'module.requests.third-party.items.production-qty' | translate }}\n {{ item?.productionQuantity }}\n
\n\n
\n {{ 'module.requests.tps.white-prod-card-qty' | translate }}\n {{ item?.cardCollateralDetails?.whiteProdCardQuantity }}\n
\n\n
\n {{ 'module.requests.tps.finished-prod-qty' | translate }}\n {{ item?.cardCollateralDetails?.finishedProdCardQuantity }}\n
\n\n
\n {{ 'module.requests.tps.total-print-qty' | translate }}\n {{ item?.totalPrintQuantity }}\n
\n
\n
\n
\n {{ 'module.requests.tps.white-dev-qty' | translate }}\n {{ item?.cardCollateralDetails.whiteDevCardQuantity }}\n
\n\n
\n {{ 'module.requests.tps.packout' | translate }}\n {{ item?.packout }}\n
\n\n
\n {{ 'module.requests.tps.printer' | translate }}\n {{ getItemPrinter() }}\n
\n
\n
\n
\n {{ 'module.requests.tps.pid-id' | translate }}\n {{ item.pidIdNumber }}\n
\n\n
\n {{ 'module.requests.tps.encoding-identifier' | translate }}\n {{ item.encodingId }}\n
\n\n
\n {{ 'module.requests.details.microsoft' | translate }}\n {{ item.microsoftData }}\n
\n\n
\n {{ 'module.requests.third-party.items.costco-item' | translate }}\n {{ item.costcoItemNumber }}\n
\n\n
\n {{ 'module.requests.tps.product-id' | translate }}\n {{ item.productId }}\n
\n\n
\n {{ 'module.requests.tps.sku' | translate }}\n {{ item.skuNumber }}\n
\n\n
\n {{ 'module.requests.tps.item-number' | translate }}\n {{ item.itemNumber }}\n
\n\n
\n {{ 'module.requests.tps.vendor-stock' | translate }}\n {{ item.vendorStockNumber }}\n
\n
\n \n
\n
\n {{ 'module.requests.details.child-card-item-details' | translate }}\n
\n
\n
\n \n
\n
\n
\n
\n {{ 'module.requests.third-party.items.product-description' | translate }}\n {{ childCard?.productDescription }}\n
\n\n
\n {{ 'module.requests.third-party.items.no-of-child-cards' | translate }}\n {{ childCard?.childNumber }}\n
\n\n
\n {{ 'module.requests.third-party.items.encoding-type' | translate }}\n {{ childCard?.encodingType }}\n
\n\n
\n {{ 'module.requests.third-party.items.dieline' | translate }}\n {{ childCard?.dieline }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ childCard?.productUpc }}\n
\n\n
\n
\n
\n {{ 'module.requests.third-party.items.production-qty' | translate }}\n {{ item?.productionQuantity * childCard.childNumber }}\n
\n\n
\n {{ 'module.requests.tps.white-prod-card-qty' | translate }}\n \n {{ item?.cardCollateralDetails?.whiteProdCardQuantity * childCard.childNumber }}\n \n
\n\n
\n {{ 'module.requests.tps.finished-prod-qty' | translate }}\n \n {{ item?.cardCollateralDetails?.finishedProdCardQuantity * childCard.childNumber}}\n \n
\n\n
\n {{ 'module.requests.tps.total-print-qty' | translate }}\n \n {{ item?.totalPrintQuantity * childCard.childNumber }}\n
\n\n
\n {{ 'module.requests.tps.white-dev-qty' | translate }}\n \n {{ item?.cardCollateralDetails.whiteDevCardQuantity * childCard.childNumber }}\n
\n
\n
\n
\n
\n
\n {{ 'module.requests.tps.ship-to-location' | translate }}\n {{ shipment?.warehouse?.name }}\n
\n
\n {{ 'module.requests.tps.quantity' | translate }}\n {{ shipment?.quantity }}\n
\n
\n {{ 'module.requests.third-party.items.delivery-date' | translate }}\n \n {{ item?.deliveryDate | date :'MM/dd/yyyy' | uppercase}}\n
\n
\n\n
\n","import {Component, Input, OnInit} from '@angular/core';\nimport {TpsFileType, TpsItemModel, TpsPrinter} from '../models/tps-dialog-data.model';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { Store } from '@ngrx/store';\nimport { selectDielines } from 'src/app/reducers/ref-data/refdata.selectors';\nimport { filter, map } from 'rxjs/operators';\nimport { lazyLoadDielines } from 'src/app/reducers/ref-data/refdata.actions';\n\n@Component({\n selector: 'app-tps-item',\n templateUrl: './tps-item.component.html'\n})\nexport class TpsItemComponent implements OnInit {\n @Input() item: TpsItemModel;\n @Input() tpsPrinters: TpsPrinter[];\n @Input() fileTypes: TpsFileType[];\n @Input() isDisabled: boolean;\n @Input() itemIndex: number;\n\n dieline$ = this.store.select(selectDielines).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.dielineTypeCode))\n );\n\n public tpsItemForm: FormGroup;\n\n get childsReturnFile(): FormArray {\n return this.tpsItemForm?.get('childsReturnFile') as FormArray;\n }\n\n constructor(private fb: FormBuilder,\n private utilsService: UtilsService,\n private store: Store) {\n }\n\n ngOnInit(): void {\n this.tpsItemForm = this.fb.group({\n tpsReturnFileTypeCode: [{value: this.item.tpsReturnFileTypeCode, disabled: this.isDisabled}, Validators.required],\n childsReturnFile: this.fb.array([])\n });\n if (this.item?.childCards?.length) {\n const childsReturnFile = this.tpsItemForm.get('childsReturnFile') as FormArray;\n this.item.childCards.forEach(card => {\n childsReturnFile.push(\n this.fb.control({value: card.tpsReturnFileTypeCode, disabled: this.isDisabled}, Validators.required)\n );\n });\n }\n this.store.dispatch(lazyLoadDielines());\n }\n\n public getMerchantsList(): string {\n return this.item?.merchants.map(merchant => merchant.name).join(',');\n }\n\n\n public getItemPrinter(): string {\n return this.item?.tpsPrinterName || this.tpsPrinters?.find(printer => printer.id === this.item.id).tpsPrinterName;\n }\n\n}\n","import {ChangeDetectionStrategy, Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {TpsFileType} from '../models/tps-dialog-data.model';\nimport {EventService, ThirdPartyEvents} from '../../../../../../../shared/services/event-service.service';\n\ninterface DialogData {\n fileTypes: TpsFileType[];\n itemIds: number[];\n}\n\n@Component({\n selector: 'app-tps-bulk-change',\n templateUrl: './tps-bulk-change.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TpsBulkChangeComponent implements OnInit {\n public bulkForm: FormGroup;\n\n constructor(private dialogRef: MatDialogRef,\n private fb: FormBuilder,\n private eventService: EventService,\n @Inject(MAT_DIALOG_DATA) public dialogData: DialogData,\n ) { }\n\n ngOnInit(): void {\n this.buildForm();\n }\n\n private buildForm(): void{\n this.bulkForm = this.fb.group({\n tpsReturnFileTypeCode: this.fb.control(null, Validators.required),\n });\n }\n\n public onClose(): void {\n this.dialogRef.close(null);\n }\n\n public onSubmit(): void{\n this.eventService.emit({eventName: ThirdPartyEvents.BulkChangeTps,\n value: {tpsReturnFileTypeCode: this.bulkForm.get('tpsReturnFileTypeCode').value,\n itemsIds: this.dialogData.itemIds}});\n\n this.dialogRef.close(null);\n }\n\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n \n \n
\n
\n \n
\n
\n
\n
\n \n \n {{ 'common.button.step-submit' | translate }}\n \n
\n
\n","
\n
\n

\n TPS #{{ dialogData?.id }}\n {{'module.requests.third-party.details.new-tps' | translate}}\n

\n
\n \n \n\n \n\n \n \n
\n
\n \n \n
\n {{'module.requests.po.item-info' | translate}}\n
\n

\n {{'module.requests.po.item-info' | translate}}\n \n

\n \n \n
\n\n
\n \n \n
\n\n\n
\n
\n \n \n
\n \n\n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Inject, OnDestroy,\n OnInit,\n QueryList,\n ViewChildren\n} from '@angular/core';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {TpsDetailsModel, TpsDialogData, TpsItemModel} from './models/tps-dialog-data.model';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {Events, EventService, ThirdPartyEvents} from '../../../../../../shared/services/event-service.service';\nimport {TpsItemComponent} from './tps-item/tps-item.component';\nimport {MessageService} from '../../../../../../shared/services/message-service.service';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {ThirdPartyProductionService} from '../../../../../services/third-party-production.service';\nimport {Observable, Subject} from 'rxjs';\nimport {take} from 'rxjs/operators';\nimport {ThirdPoManageService} from '../../../../../services/third-po-manage.service';\nimport {ModalService} from '../../../../../../shared/services/modal-service.service';\nimport {TpsBulkChangeComponent} from './tps-bulk-change/tps-bulk-change.component';\nimport { EmailTpsComponent, EmailTpsDialogData } from './email-tps/email-tps.component';\nimport { LoaderService } from 'src/app/shared/services/loader.service';\n\n@Component({\n selector: 'app-tps',\n templateUrl: './tps.component.html',\n styleUrls: ['./tps.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TpsComponent implements OnInit, OnDestroy {\n @ViewChildren(TpsItemComponent) tpsItems: QueryList;\n public itemsArr: TpsItemModel[];\n public dialogData: TpsDialogData;\n public isTpsProcessing = false;\n public availableItems: TpsItemModel[] = [];\n public tpsForm: FormGroup;\n public selectedBulkItems = {};\n public isBulkDisabled = true;\n private ngUnsubscribe = new Subject();\n\n constructor(@Inject(MAT_DIALOG_DATA) private data: TpsDialogData,\n private cd: ChangeDetectorRef,\n private dialogRef: MatDialogRef,\n private eventService: EventService,\n private messageService: MessageService,\n private thirdProductionService: ThirdPartyProductionService,\n private poManageService: ThirdPoManageService,\n private fb: FormBuilder,\n private modalService: ModalService,\n private translate: TranslatePipe,\n private loaderService: LoaderService\n ) { }\n\n ngOnInit(): void {\n this.dialogData = cloneDeep(this.data);\n this.itemsArr = cloneDeep(this.data.items);\n this.initSelectedItemsArr();\n if (!this.dialogData.id || !this.dialogData.isDisabled) {\n this.setAvailableItems();\n }\n this.tpsForm = this.fb.group({\n additionalComments: this.fb.control({\n value: this.dialogData.additionalComments,\n disabled: !!this.dialogData.id || this.dialogData.isDisabled\n }),\n });\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setAvailableItems(): void {\n this.availableItems = this.itemsArr.filter(item => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id));\n }\n\n public onDeleteItem(itemIndex: number): void {\n const deletedItem = this.dialogData.items.splice(itemIndex, 1);\n delete this.selectedBulkItems[deletedItem[0].id];\n this.setAvailableItems();\n this.isBulkDisabled = this.getBulkStatus();\n this.cd.markForCheck();\n }\n\n public onAddItem(itemsToAdd: TpsItemModel[]): void {\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd];\n itemsToAdd.forEach(item => this.selectedBulkItems[item.id] = false);\n this.setAvailableItems();\n }\n\n public onGenerateExcel(): void {\n this.thirdProductionService.downloadTpsReport(\n this.data.request,\n this.dialogData,\n this.data.dielineTypes,\n this.data.fileTypes\n );\n }\n\n onEmailTps(): void {\n this.modalService.openModal(EmailTpsComponent, {\n tps: this.dialogData,\n request: this.data.request,\n refData: {\n dielineTypeCodes: this.data.dielineTypes,\n tpsReturnFileTypeCodes: this.data.fileTypes\n }\n }, 'email-tps-modal');\n }\n\n public onDeleteTps(): void {\n this.isTpsProcessing = true;\n this.poManageService.deleteTps(this.dialogData.requestId, this.dialogData.id, (res) => {\n if(res) {\n this.loaderService.showLoader();\n }\n })\n .subscribe(() => {\n this.dialogRef.close();\n this.isTpsProcessing = false;\n this.loaderService.hideLoader();\n },\n () => {\n this.isTpsProcessing = false;\n this.loaderService.hideLoader();\n },\n () => {\n const subscr = this.thirdProductionService.callTps(this.dialogData.requestId);\n subscr.add(() => {\n this.loaderService.hideLoader();\n });\n this.isTpsProcessing = false;\n this.cd.markForCheck();\n });\n }\n\n public onSave(): void {\n this.eventService.emit({eventName: Events.TpsSubmit});\n if (this.isTpsItemsValid(this.tpsItems)) {\n const tpsFormValue = this.tpsForm.getRawValue();\n const data = this.prepareDataForSave(this.tpsItems);\n if (tpsFormValue?.additionalComments) {\n data.additionalComments = tpsFormValue.additionalComments;\n }\n const tpsSource = this.thirdProductionService.createTps(this.dialogData.requestId, data);\n this.handleTpsAction(tpsSource);\n } else {\n this.tpsItems.forEach(item => item.tpsItemForm.markAllAsTouched());\n this.messageService.showSystemMessage('warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation'));\n }\n }\n\n private isTpsItemsValid(tpsItems: QueryList): boolean {\n for (const item of tpsItems) {\n if (!item.tpsItemForm.valid) {\n return false;\n }\n }\n return true;\n }\n\n public onClose(): void {\n const isDataChanged = this.dialogData.isDisabled || this.dialogData.id ? false : this.checkIfDataChanged();\n this.poManageService.onCloseTps(this.dialogRef, isDataChanged);\n }\n\n public isAllItemsChecked(): boolean {\n return !Object.values(this.selectedBulkItems).includes(false);\n }\n\n public getBulkLabel(): string {\n return !Object.values(this.selectedBulkItems).includes(true)\n ? this.translate.transform('common.label.select-all')\n : this.translate.transform('common.label.selected-of', {\n selected: Object.values(this.selectedBulkItems).filter(selected => !!selected).length,\n all: Object.values(this.selectedBulkItems).length\n });\n }\n\n public selectItem(isChecked: boolean, itemId: number): void {\n this.selectedBulkItems[itemId] = isChecked;\n this.isBulkDisabled = this.getBulkStatus();\n }\n\n public selectAllItems(isChecked: boolean): void {\n Object.keys(this.selectedBulkItems).forEach((property) => {\n this.selectedBulkItems[property] = isChecked;\n });\n\n this.isBulkDisabled = this.getBulkStatus();\n }\n\n public openBulkModal(): void {\n this.modalService.openModal(TpsBulkChangeComponent, {\n fileTypes: this.dialogData.fileTypes,\n itemIds: this.getSelectedItems()\n });\n }\n\n private getSelectedItems(): number[] {\n return Object.keys(this.selectedBulkItems)\n .filter(prop => this.selectedBulkItems[prop])\n .map(prop => Number(prop));\n }\n\n private initSelectedItemsArr(): void {\n this.dialogData.items.forEach((item: TpsItemModel) => {\n this.selectedBulkItems[item.id] = false;\n });\n\n this.eventService.on(ThirdPartyEvents.BulkChangeTps, ({tpsReturnFileTypeCode, itemsIds}) => {\n for (const item of this.tpsItems) {\n if (itemsIds.includes(item.item.id)) {\n item.tpsItemForm.get('tpsReturnFileTypeCode').setValue(tpsReturnFileTypeCode);\n }\n }\n }, this.ngUnsubscribe);\n }\n\n private getBulkStatus(): boolean {\n return Object.values(this.selectedBulkItems).filter(selected => selected).length <= 1;\n }\n\n private checkIfDataChanged(): boolean {\n for (const item of this.tpsItems) {\n if (!!item.tpsItemForm.getRawValue()?.tpsReturnFileTypeCode ||\n !!item.tpsItemForm.getRawValue()?.childsReturnFile?.length ||\n !!this.tpsForm.getRawValue()?.additionalComments) {\n return true;\n }\n }\n return false;\n }\n\n private handleTpsAction(tpsSource: Observable): void {\n this.isTpsProcessing = true;\n tpsSource.pipe(take(1))\n .subscribe({\n next: tps => {\n this.onSuccessTps(tps);\n this.tpsForm.disable();\n this.cd.markForCheck();\n },\n complete: () => {\n this.thirdProductionService.callTps(this.dialogData.requestId);\n this.isTpsProcessing = false;\n this.cd.markForCheck();\n }\n });\n }\n\n private onSuccessTps(tps: TpsDetailsModel): void {\n this.dialogData = {...this.dialogData, ...tps};\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.messageService.showSystemMessage('success',\n this.translate.transform('common.message.tps-saved'), null);\n }\n\n private prepareDataForSave(tpsItems: QueryList): TpsDetailsModel {\n this.dialogData.items.forEach((item, index) => {\n const currentItemFormValues = tpsItems.toArray()[index].tpsItemForm.getRawValue();\n item.tpsReturnFileTypeCode = currentItemFormValues.tpsReturnFileTypeCode;\n item.tpsPrinterName = this.dialogData.tpsPrinters.find(printer => printer.id === item.id).tpsPrinterName || 'TBD';\n if (currentItemFormValues.childsReturnFile?.length && item.childCards?.length) {\n item.childCards.forEach((card, childCardIndex) => {\n card.tpsReturnFileTypeCode = currentItemFormValues.childsReturnFile[childCardIndex];\n });\n }\n });\n return {\n items: this.dialogData.items\n };\n }\n\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n \n \n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n {{ 'module.requests.third-party.modals.zero-dev-qty-desc' | translate }}\n
\n\n \n\n
\n
\n
\n \n \n {{ 'common.button.step-submit' | translate }}\n \n
\n
\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { requestDetailsActions } from '../../../../../reducers/request-details/request-details.actions';\nimport { ThirdPartyFormBuilderService } from '../../../../../services/third-party-form-builder.service';\nimport { ThirdPartyProductionService } from '../../../../../services/third-party-production.service';\n\n@Component({\n selector: 'app-cc-bulk-change',\n templateUrl: './cc-bulk-change.component.html',\n styleUrls: ['./cc-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CcBulkChangeComponent implements OnInit, OnDestroy {\n public bulkForm: FormGroup;\n public isZeroDevQtyWarningVisible: boolean;\n\n private ngUnsubscribe = new Subject();\n\n constructor(private dialogRef: MatDialogRef,\n private thirdPartyFormBuilderService: ThirdPartyFormBuilderService,\n private fb: FormBuilder,\n private store: Store,\n private thirdProductionService: ThirdPartyProductionService,\n @Inject(MAT_DIALOG_DATA) private dialogData: any,\n ) { }\n\n ngOnInit(): void {\n this.buildForm();\n }\n\n public ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onClose(): void {\n this.dialogRef.close(null);\n }\n\n private buildForm(): void{\n this.bulkForm = this.fb.group({\n finishedProdCardQuantity: this.fb.control(null),\n whiteDevCardQuantity: this.fb.control(null),\n whiteProdCardQuantity: this.fb.control(null),\n confirmed: this.fb.control(false)\n }, {\n updateOn: 'change',\n validators: (ac: AbstractControl) => (ac?.value\n && !ac.value.finishedProdCardQuantity\n && !ac.value.whiteDevCardQuantity\n && !ac.value.whiteProdCardQuantity\n && !ac.value.confirmed\n )\n ? {noChanges: true}\n : null\n });\n\n this.bulkForm.get('whiteDevCardQuantity').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.isZeroDevQtyWarningVisible = (value === '0');\n });\n }\n\n public onSubmit(): void {\n this.bulkForm.markAllAsTouched();\n if (!this.bulkForm.valid) {\n return;\n }\n\n const body = {\n itemIds: this.dialogData.itemIds,\n details: this.bulkForm.getRawValue()\n };\n\n this.thirdProductionService.bulkUpdateCCItems(this.dialogData.requestId, body).subscribe(res => {\n this.store.dispatch(requestDetailsActions.loadRequestDetailsSuccess({data: res}));\n this.dialogRef.close(true);\n });\n }\n\n}\n","
\n \n \n\n
\n
\n \n \n {{ 'module.requests.at-printer.bulk-change' | translate }}\n \n
\n \n
\n \n\n \n
\n \n
\n\n
\n
\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ requestItems[processorGroupItem.itemIndex].productUpc }}\n
\n\n
\n {{ 'module.requests.third-party.items.wpn' | translate }}\n {{ requestItems[processorGroupItem.itemIndex].wpn }}\n
\n\n
\n {{ 'module.requests.third-party.items.order-type' | translate }}\n \n {{ utilsService.getItemName(orderTypes$ | async, requestItems[processorGroupItem.itemIndex].orderTypeCode) }}\n \n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.third-party.items.production-qty' | translate }}\n {{ requestItems[processorGroupItem.itemIndex].productionQuantity }}\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n {{ 'module.requests.third-party.items.total-print-qty' | translate }}\n {{ getTotalPrintQty(processorGroupItem.itemIndex) }}\n
\n
\n\n
\n \n\n \n \n {{ 'module.requests.third-party.items.mark-confirmed' | translate }}\n \n\n \n \n {{ 'module.requests.third-party.items.cancel-confirmation' | translate }}\n \n
\n
\n \n
\n
\n\n \n \n
\n {{ 'module.requests.third-party.items.processor' | translate }}:\n {{ processorGroup.label }}\n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n \n\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { filter } from 'rxjs/operators';\nimport {\n ThirdPartyCardCollateralDetails,\n ThirdPartyRequestItemModel,\n} from '../../../../../models/third-party-request.model';\nimport { selectThirdPartyOrderTypes } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { ThirdPartyFormBuilderService } from '../../../../../services/third-party-form-builder.service';\nimport { thirdPartyActions } from '../../../../../reducers/request-details/third-party.actions';\nimport { ModalService } from 'src/app/shared/services/modal-service.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport {CcBulkChangeComponent} from '../cc-bulk-change/cc-bulk-change.component';\nimport groupBy from 'lodash/groupBy';\nimport { orderBy } from 'lodash';\n\ninterface ProcessorGroup {\n item: ThirdPartyRequestItemModel;\n itemIndex: number;\n processorCompany: string | null;\n}\n\n@Component({\n selector: 'app-third-card-collateral-confirmation',\n templateUrl: './third-card-collateral-confirmation.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: [\n './third-card-collateral-confirmation.component.scss'\n ],\n})\nexport class ThirdCardCollateralConfirmationComponent implements OnInit, OnChanges {\n @Input() public requestItems: ThirdPartyRequestItemModel[];\n @Input() public requestId: string;\n @Input() public isDisabled: boolean;\n\n public form: FormGroup;\n public orderTypes$ = this.store.select(selectThirdPartyOrderTypes).pipe(\n filter(v => v?.length > 0),\n );\n public selectedCC: boolean[];\n public isBulkDisabled = true;\n public itemsGroups: any;\n public processorGroupedRequestItems: Array<{\n label: null| string;\n items: ProcessorGroup[];\n }>;\n\n constructor(\n public utilsService: UtilsService,\n private store: Store,\n private modalService: ModalService,\n private translate: TranslateService,\n private fb: FormBuilder,\n private thirdPartyFormBuilderService: ThirdPartyFormBuilderService,\n private cd: ChangeDetectorRef\n ) { }\n\n public ngOnInit(): void {\n this.buildForm();\n this.initSelectedCCArray();\n this.toggleFormDisabling();\n }\n\n private buildProcessorGroupedRequestItems(requestItems: ThirdPartyRequestItemModel[]) {\n const groupedItems = requestItems.map(( item, itemIndex) => ({\n itemIndex,\n processorCompany: item?.processorCompany ? item?.processorCompany : undefined,\n item\n }));\n return orderBy(Object.entries(groupBy(groupedItems, ({processorCompany}) => processorCompany)).map(([label, items]) => ({\n label: label === 'undefined' ? null : label,\n items\n })), ({label}) => label == null ? -1 : 0);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (!changes?.requestItems.firstChange) {\n this.patchForm();\n }\n this.toggleFormDisabling();\n this.processorGroupedRequestItems = this.buildProcessorGroupedRequestItems(this.requestItems);\n this.cd.markForCheck();\n }\n\n private patchForm() {\n this.requestItems.forEach((item, itemIndex) => {\n const ccd = item?.cardCollateralDetails;\n ['whiteProdCardQuantity', 'finishedProdCardQuantity', 'whiteDevCardQuantity'].forEach(elementName => {\n const element = this.form?.get(`items.${itemIndex}.${elementName}`);\n if(element.pristine) {\n element.setValue(ccd?.[elementName] == null ? '' : ccd?.[elementName]);\n }\n });\n });\n }\n\n public getTotalPrintQty(itemIndex: number): number {\n return this.requestItems[itemIndex].productionQuantity +\n Number(this.itemsArray.get(`${itemIndex}.whiteProdCardQuantity`).value) +\n Number(this.itemsArray.get(`${itemIndex}.finishedProdCardQuantity`).value);\n }\n\n public updateCardCollateral(itemIndex: number, details: ThirdPartyCardCollateralDetails) {\n this.store.dispatch(thirdPartyActions.updateCardCollateralDetails({\n requestId: this.requestId,\n itemId: this.requestItems[itemIndex].id,\n details,\n }));\n }\n\n public onMarkConfirmed(itemIndex: number, isConfirmed: boolean): void {\n const details = {\n ...this.form.get(`items.${itemIndex}`).value as ThirdPartyCardCollateralDetails,\n confirmed: isConfirmed,\n };\n\n if(!this.requestItems[itemIndex].cardCollateralDetails?.confirmed &&\n this.requestItems[itemIndex].operationsDetails?.devCardRanges.length &&\n this.form.get(`items.${itemIndex}`).value.whiteDevCardQuantity === '0'){\n this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.third-party.modals.zero-dev-qty-header'),\n this.translate.instant('module.requests.third-party.modals.zero-dev-qty-desc'),\n this.translate.instant('common.button.continue'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed().subscribe((isModalConfirmed: boolean) => {\n if (isModalConfirmed) {\n this.updateCardCollateral(itemIndex, details);\n }\n });\n } else {\n this.updateCardCollateral(itemIndex, details);\n }\n\n }\n\n public get itemsArray(): FormArray {\n return this.form?.get('items') as FormArray;\n }\n\n public get isSomeCardNotConfirmed(): boolean {\n return this.requestItems.some(item => !item?.cardCollateralDetails?.confirmed);\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n items: this.fb.array(\n this.requestItems.map(item => this.thirdPartyFormBuilderService.itemCardCollateralDetailsFormGroup(item)),\n ),\n });\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable();\n return;\n }\n\n this.itemsArray?.controls.forEach((itemControl, idx) => {\n this.requestItems[idx]?.cardCollateralDetails?.confirmed ? itemControl.disable() : itemControl.enable();\n });\n }\n\n private initSelectedCCArray(): void {\n this.selectedCC = this.requestItems.map(() => false);\n }\n\n public selectCCItem(isChecked: boolean, index: number): void {\n this.selectedCC[index] = isChecked;\n this.isBulkDisabled = this.getBulkStatus();\n }\n\n public selectAllCCItems(isChecked: boolean): void {\n this.selectedCC.forEach((item, index, arr) => {\n arr[index] = isChecked;\n });\n this.isBulkDisabled = this.getBulkStatus();\n }\n\n private getBulkStatus(): boolean {\n return this.selectedCC.filter(selected => !!selected).length <= 1;\n }\n\n public getBulkLabel(): string {\n let resultStr = '';\n\n if (this.selectedCC.some(selected => !!selected)) {\n resultStr = this.translate.instant('common.label.selected-of', {\n selected: this.selectedCC.filter(selected => !!selected).length,\n all: this.selectedCC.length\n });\n } else {\n resultStr = this.translate.instant('common.label.select-all');\n }\n\n return resultStr;\n }\n\n public isAllCCItemsChecked(): boolean {\n return !this.selectedCC.includes(false);\n }\n\n public ccBulkChange(): void {\n this.selectedCC.forEach((selectedCc, selectedCcIndex) => {\n if (selectedCc) {\n this.form.get(`items.${selectedCcIndex}`).markAsPristine();\n }\n });\n this.modalService.openModal(CcBulkChangeComponent, {\n itemIds: this.getSelectedItems(),\n requestId: this.requestId\n });\n }\n\n private getSelectedItems(): number[] {\n return this.requestItems\n .filter((item, index) => !!this.selectedCC[index])\n .map(item => item.id);\n }\n\n trackByprocessorGroupItem(index) {\n return `processor-group-${index}`;\n }\n\n trachByGroupedRequestItems(index, processorGroup) {\n return processorGroup.label;\n }\n\n}\n","
\n \n
\n
\n
\n {{ 'module.requests.third-party.items.wpn-description' | translate }}:\n {{ reqItem.wpnDescription }}\n
\n\n
\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ reqItem.productUpc }}\n
\n
\n \n {{ 'module.requests.finance.wpn' | translate }}\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ reqItem.wpn }}\n
\n
\n\n
\n
\n
\n {{ 'module.requests.finance.ship-to' | translate }}:\n {{ 'module.requests.po.qty' | translate }}:\n
\n\n
\n
\n {{ shipmentItem?.warehouse?.name }}\n
\n
\n {{ shipmentItem?.quantity }}\n
\n
\n
\n
\n {{ 'common.button.printer' | translate }}:\n {{reqItem.tpsPrinterName || 'TBD'}}\n
\n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ThirdPartyRequestItemModel, ThirdPartyRequestModel } from 'src/app/requests/models/third-party-request.model';\n\n@Component({\n selector: 'app-third-po-sow-item-info',\n templateUrl: './third-po-sow-item-info.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdPoSowItemInfoComponent {\n @Input() request: ThirdPartyRequestModel;\n @Input() reqItem: ThirdPartyRequestItemModel;\n @Input() type?: string;\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { combineLatest, Subject, Subscription } from 'rxjs';\nimport { filter, pluck, take, takeUntil, takeWhile } from 'rxjs/operators';\nimport { EnvService } from 'src/app/env.service';\nimport {\n selectChannelTypes,\n selectCompanies,\n selectComponentTypes,\n selectDielines,\n selectInventoryTypes,\n selectPartnerGroups,\n selectPrinters,\n selectReturnFileTypes,\n selectWarehouses,\n} from 'src/app/reducers/ref-data/refdata.selectors';\nimport { ThirdPoModel } from 'src/app/requests/models/third-po-model';\nimport { ThirdPoManageService } from 'src/app/requests/services/third-po-manage.service';\nimport { LoaderService } from 'src/app/shared/services/loader.service';\n\nimport { isPPMSelectorState } from '../../../../../reducers/ppm/ppm.selectors';\nimport {\n lazyLoadChannelTypes,\n lazyLoadCompanies,\n lazyLoadComponentTypes,\n lazyLoadDielines,\n lazyLoadInventoryTypes,\n lazyLoadPartnerGroups,\n lazyLoadPrinters,\n lazyLoadReturnFileTypes,\n lazyLoadWarehouses,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { ThirdPartyRequestItemModel, ThirdPartyRequestModel } from '../../../../models/third-party-request.model';\nimport { ThirdSowModel } from '../../../../models/third-po-model';\nimport { selectThirdPartyRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { ThirdPartyProductionService } from '../../../../services/third-party-production.service';\nimport { ThirdPartyPoSowManageService } from '../../../../services/third-party-sow-manage.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { ThirdPoDialogData } from './third-po-form/third-po-dialog-data';\nimport { ThirdPoFormComponent } from './third-po-form/third-po-form.component';\nimport { ThirdSowFormComponent, ThirdSowFormDataModel } from './third-sow-form/third-sow-form.component';\nimport { ThirdSowFormStandaloneComponent } from './third-sow-standalone-form/third-sow-form-standalone.component';\nimport { ThirdSowStandaloneDialogData } from './third-sow-standalone-form/third-sow-form-standalone.model';\nimport { EmailTpsComponent, EmailTpsDialogData } from './tps/email-tps/email-tps.component';\nimport { TpsDetailsModel, TpsDialogData, TpsItemModel } from './tps/models/tps-dialog-data.model';\nimport { TpsComponent } from './tps/tps.component';\n\n@Component({\n selector: 'app-third-po-sow-tps',\n templateUrl: './third-po-sow-tps.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n ThirdPartyPoSowManageService\n ],\n})\nexport class ThirdPoSowTpsComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n poDetails: ThirdPoModel[] = [];\n sowStandaloneDetails: ThirdPoModel[] = [];\n tpsDetails: TpsDialogData[] = [];\n isBlankState = false;\n isBlankStateSow = false;\n isTpsBlankState = false;\n poDataLoaded = false;\n tpsDataLoaded = false;\n companyList: CodeNameModel[];\n isUserPPM = false;\n userRoles = UserRoles;\n documentGroups: any[] = [];\n readonly UserRoles = UserRoles;\n\n private request: ThirdPartyRequestModel;\n private ngUnsubscribe = new Subject();\n\n private inventoryList: CodeNameModel[];\n private chnList: CodeNameModel[];\n private lineOfBusinessList: CodeNameModel[];\n private componentTypesList: CodeNameModel[];\n private dielineTypeCodes: CodeNameModel[];\n private returnFileTypes: CodeNameModel[];\n\n private subscriptions: Subscription[] = [];\n\n request$ = this.store.pipe(\n select(selectThirdPartyRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n );\n\n private refData$ = combineLatest([\n this.store.select(selectCompanies).pipe(filter(v => v.length > 0)),\n this.store.select(selectInventoryTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPartnerGroups).pipe(filter(v => v.length > 0)),\n this.store.select(selectChannelTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectPrinters).pipe(filter(v => v.length > 0)),\n this.store.select(selectComponentTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectDielines).pipe(filter(v => v.length > 0)),\n this.store.select(selectReturnFileTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectWarehouses).pipe(filter(v => v.length > 0))\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n );\n\n constructor(\n private store: Store,\n private modalService: ModalService,\n private utilsService: UtilsService,\n private thirdProductionService: ThirdPartyProductionService,\n private cd: ChangeDetectorRef,\n private thirdPoManageService: ThirdPoManageService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private translate: TranslateService,\n private thirdPartyPoSowManageService: ThirdPartyPoSowManageService,\n public envService: EnvService,\n public loaderService: LoaderService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadRefData();\n this.initRefData();\n this.initPODetailsSubscription();\n this.initUserData();\n this.initStageListeners();\n this.initTpsSubscription();\n\n this.request$.subscribe((request) => {\n this.request = cloneDeep(request);\n });\n\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private loadRefData(): void {\n this.store.dispatch(lazyLoadCompanies());\n this.store.dispatch(lazyLoadInventoryTypes());\n this.store.dispatch(lazyLoadPartnerGroups());\n this.store.dispatch(lazyLoadChannelTypes());\n this.store.dispatch(lazyLoadPrinters());\n this.store.dispatch(lazyLoadComponentTypes());\n this.store.dispatch(lazyLoadDielines());\n this.store.dispatch(lazyLoadReturnFileTypes());\n this.store.dispatch(lazyLoadWarehouses());\n }\n\n public onEdit(item: ThirdPoModel | TpsDialogData, type: string): void {\n if (type === 'po') {\n this.openPO(item as ThirdPoModel, 'edit');\n } else if (type === 'tps') {\n this.openTps(item as TpsDialogData);\n } else if (type === 'sow_standalone') {\n this.openSowStandalone(item as ThirdSowModel);\n } else {\n this.openSow(item as ThirdSowModel);\n }\n }\n\n public onPrint(requestId: string, poId: number, type: string): void {\n this.thirdProductionService.downloadPoPdf(requestId, poId, type);\n }\n\n public onDelete(item: ThirdPoModel | TpsDialogData, type: string): void {\n if (type === 'po' || type === 'sow_standalone') {\n this.thirdPoManageService.deletePoItem(this.requestId, item as ThirdPoModel, type === 'sow_standalone').subscribe();\n } else if (type === 'tps') {\n this.thirdPoManageService.deleteTps(this.requestId, item.id as string, (res) => {\n if(res) {\n this.loaderService.showLoader();\n }\n }).subscribe({\n next: () => {\n const subscr = this.thirdProductionService.callTps(this.requestId);\n subscr.add(() => {\n this.loaderService.hideLoader();\n });\n },\n error: () => {\n this.loaderService.hideLoader();\n }\n });\n } else {\n this.thirdPartyPoSowManageService.deleteSOWItem(\n this.request.id,\n (item as unknown) as ThirdSowModel,\n null,\n true\n );\n }\n }\n\n public isEveryCardCollateralConfirmed(arr: ThirdPartyRequestItemModel[]): boolean {\n return arr.every(el => el?.cardCollateralDetails?.confirmed === true);\n }\n\n private initRefData() {\n this.refData$.subscribe((\n [companyList, inventoryList, lineOfBusinessList, chnList, printerList, componentTypes, dielineTypeCodes, returnFileTypes]\n ) => {\n this.companyList = companyList;\n this.inventoryList = inventoryList;\n this.lineOfBusinessList = this.utilsService.getParentChild(cloneDeep(lineOfBusinessList));\n this.chnList = chnList;\n this.componentTypesList = componentTypes;\n this.dielineTypeCodes = dielineTypeCodes;\n this.returnFileTypes = returnFileTypes;\n });\n }\n\n private initUserData() {\n this.store\n .pipe(\n select(isPPMSelectorState),\n takeWhile(val => !val.initialized, true),\n pluck('isPPM')\n )\n .subscribe(isUserPPM => {\n this.isUserPPM = isUserPPM;\n });\n }\n\n private initTpsSubscription(): void {\n this.thirdProductionService.getRequestTpsListener().pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(tps => {\n if (tps && tps.length) {\n this.tpsDetails = cloneDeep(tps);\n this.tpsDetails.sort(this.utilsService.sortByDate);\n this.isTpsBlankState = false;\n } else {\n this.isTpsBlankState = true;\n this.tpsDetails = [];\n }\n this.tpsDataLoaded = true;\n this.cd.markForCheck();\n });\n this.thirdProductionService.callTps(this.requestId);\n }\n\n private get emptyPo() {\n return {\n accountingInfo: {channel: null, company: null, inventoryType: null, lineOfBusiness: null},\n printerInfo: {\n address: {\n addressLine1: null, addressLine2: null, addressLine3: null, city: null,\n country: null, stateProvince: null, postalCode: null,\n },\n contact: {\n attention: null, cell: null, email: null, phone: null,\n },\n name: null, mdmId: null, id: null,\n },\n stakeholders: {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n },\n accountingSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n apSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n items: [],\n };\n }\n\n private get emptySowStandalone() {\n return {\n requestName: this.request.name,\n printerInfo: {\n address: {\n addressLine1: null, addressLine2: null, addressLine3: null, city: null,\n country: null, stateProvince: null, postalCode: null,\n },\n contact: {\n attention: null, cell: null, email: null, phone: null,\n },\n name: null, mdmId: null, id: null,\n },\n stakeholders: {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n },\n accountingSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n apSummary: {\n Acct: null, Amt: null, CC: null, CHN: null, CO: null, 'I/C': null, LOB: null, 'Inventory Type': null\n },\n items: [],\n };\n }\n\n private async openPO(po: ThirdPoModel, type: 'new' | 'edit') {\n await this.refData$.pipe(take(1)).toPromise();\n\n const data: ThirdPoDialogData = {\n po,\n requestId: this.requestId,\n request: this.request,\n companyList: this.companyList,\n inventoryList: this.inventoryList,\n chnList: this.chnList,\n lineOfBusinessList: this.lineOfBusinessList,\n componentTypesList: this.componentTypesList,\n items: type === 'new' ? [...this.request.items] : po.items,\n miscItems: [],\n isDisabled: !this.request.details.incommPurchased || this.isDisabled && this.isUserPPM,\n fundingList: [],\n };\n\n this.modalService.openModal(ThirdPoFormComponent, data, 'po-form-dialog', false);\n }\n\n addNewPO(): void {\n this.openPO(this.emptyPo, 'new');\n }\n\n public addNewSOW(po: ThirdPoModel): void {\n this.modalService.openModal(ThirdSowFormComponent, {\n sow: po,\n request: this.request,\n isDisabled: this.isDisabled\n }, 'sow-form-dialog');\n }\n\n public async addNewSOWStandalone(): Promise {\n const sowStandalone = this.emptySowStandalone;\n this.openSowStandalone(sowStandalone );\n }\n\n public async openSowStandalone(sowStandalone: any): Promise {\n await this.refData$.pipe(take(1)).toPromise();\n\n const data: ThirdSowStandaloneDialogData = {\n po: sowStandalone,\n requestId: this.requestId,\n request: this.request,\n companyList: this.companyList,\n inventoryList: this.inventoryList,\n chnList: this.chnList,\n lineOfBusinessList: this.lineOfBusinessList,\n componentTypesList: this.componentTypesList,\n items: !sowStandalone.id ? [...this.request.items] : sowStandalone.items,\n miscItems: [],\n isDisabled: this.request.details.incommPurchased || this.isDisabled && this.isUserPPM,\n fundingList: [],\n };\n\n this.modalService.openModal(\n ThirdSowFormStandaloneComponent, data, 'sow-form-dialog', false\n );\n }\n\n public openSow(poOrSow: ThirdPoModel | ThirdSowModel): void {\n this.modalService.openModal(ThirdSowFormComponent, {\n sow: poOrSow,\n request: this.request,\n isDisabled: this.isDisabled\n }, 'sow-form-dialog');\n }\n\n private initPODetailsSubscription(): void {\n this.thirdProductionService.getPOListener().pipe(\n takeUntil(this.ngUnsubscribe),\n ).subscribe((data) => {\n if (data?.length) {\n this.poDetails = cloneDeep(data).filter(po => po.sowOnly !== true);\n this.sowStandaloneDetails = cloneDeep(data).filter(po => po.sowOnly === true);\n\n this.poDetails.sort(this.utilsService.sortByDate);\n this.isBlankState = this.poDetails.length === 0;\n this.isBlankStateSow = this.sowStandaloneDetails.length === 0;\n } else {\n this.poDetails = [];\n this.sowStandaloneDetails = [];\n this.isBlankState = true;\n this.isBlankStateSow = true;\n }\n this.poDataLoaded = true;\n this.createDocumentGroups();\n this.cd.markForCheck();\n });\n\n this.thirdProductionService.callPO(this.requestId);\n }\n\n get incommPurchasedType(): 'po' | 'sow_standalone' {\n return this.request?.details?.incommPurchased ? 'po' : 'sow_standalone';\n }\n\n private createDocumentGroups() {\n this.documentGroups = [];\n if(this.poDetails?.length || this.incommPurchasedType === 'po') {\n this.documentGroups.push({\n type: 'po',\n itemsLength: this.poDetails?.length || 0,\n isBlankState: this.isBlankState\n });\n }\n if(this.sowStandaloneDetails?.length || this.incommPurchasedType === 'sow_standalone') {\n this.documentGroups.push({\n type: 'sow_standalone',\n itemsLength: this.sowStandaloneDetails?.length || 0,\n isBlankState: this.isBlankStateSow\n });\n }\n }\n\n public getItemName(array, code: string): string {\n return this.utilsService.getItemName(array, code);\n }\n\n public trackByItemIdFn(index: number, itemDetails: {id: number}) {\n return itemDetails.id;\n }\n\n private initStageListeners() {\n this.subscriptions.push(\n this.eventService.on(\n Events.PoSowSubmitValidated, elementRef => {\n if (this.isEveryCardCollateralConfirmed(this.request.items) && this.tpsDetails.length) {\n if (this.request.details.incommPurchased && this.poDetails.length ||\n !this.request.details.incommPurchased) {\n this.submitStep(elementRef);\n return;\n }\n }\n if (!this.isEveryCardCollateralConfirmed(this.request.items)) {\n this.showCollateralRequiredMessage();\n }\n if (this.request.details.incommPurchased && !this.poDetails.length) {\n this.showPoRequiredMessage();\n }\n if (!this.tpsDetails.length) {\n this.showTpsRequiredMessage();\n }\n }\n )\n );\n }\n\n private showPoRequiredMessage() {\n this.messageService.showSystemMessage(\n 'error',\n this.translate.instant('module.requests.po.po-required'),\n this.translate.instant('module.requests.po.po-stage-error')\n );\n }\n\n private showTpsRequiredMessage() {\n this.messageService.showSystemMessage(\n 'error',\n this.translate.instant('module.requests.third-party.tps.tps-required'),\n this.translate.instant('module.requests.third-party.tps.tps-stage-error')\n );\n }\n\n private showCollateralRequiredMessage() {\n this.messageService.showSystemMessage(\n 'error',\n this.translate.instant('module.requests.third-party.tps.collateral-required'),\n this.translate.instant('module.requests.third-party.tps.collateral-error')\n );\n }\n\n private submitStep(elementRef) {\n this.stepActionsService.addReason(\n elementRef, 'step-submit', 'step-submit', Events.StepSubmit, 'right'\n );\n }\n\n openTps(tps?: TpsDialogData): void {\n this.subscriptions.push(\n this.thirdProductionService\n .getItemPrinters(this.requestId)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((tpsPrinters) => {\n const data: TpsDialogData = tps\n ? {\n ...tps,\n isDisabled: this.isDisabled,\n tpsPrinters,\n requestId: this.requestId,\n request: this.request,\n fileTypes: this.returnFileTypes,\n dielineTypes: this.dielineTypeCodes\n }\n : {\n items: this.request.items,\n isDisabled: this.isDisabled,\n requestId: this.requestId,\n request: this.request,\n tpsPrinters,\n fileTypes: this.returnFileTypes,\n dielineTypes: this.dielineTypeCodes\n };\n this.modalService.openModal(TpsComponent, data, 'po-form-dialog', false);\n })\n );\n }\n\n generateExcel(tps: TpsDetailsModel) {\n this.thirdProductionService.downloadTpsReport(\n this.request,\n tps,\n this.dielineTypeCodes,\n this.returnFileTypes\n );\n }\n\n openEmailTpsModal(details: TpsDetailsModel): void {\n this.modalService.openModal(EmailTpsComponent, {\n tps: details,\n request: this.request,\n refData: {\n dielineTypeCodes: this.dielineTypeCodes,\n tpsReturnFileTypeCodes: this.returnFileTypes\n }\n }, 'email-tps-modal');\n }\n\n getTotalPrintQty(tpsItems: TpsItemModel[]) {\n return tpsItems.reduce((acc, item) => acc + Number(item.totalPrintQuantity), 0);\n }\n}\n","\n \n\n \n \n \n\n \n \n \n \n \n \n\n \n
\n
\n {{ 'module.requests.tps.tps' | translate }}\n \n
\n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n \n
\n \n \n {{ 'common.button.delete' | translate }}\n \n
\n
\n
\n \n
\n \n \n {{ 'module.requests.third-party.tps.add-tps' | translate }}\n \n
\n
\n
\n
\n \n
\n {{ 'module.requests.text.purchase-orders' | translate }}\n {{ 'module.requests.text.sow' | translate }}\n \n
\n
\n\n \n \n
\n \n \n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n \n
\n \n
\n
\n \n
\n
\n
\n \n
\n \n \n {{ 'common.button.delete' | translate }}\n \n
\n
\n
\n \n
\n \n \n {{ 'module.requests.text.add-po-sow' | translate }}\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n
\n \n
\n \n \n {{ 'common.button.delete' | translate }}\n \n
\n
\n
\n \n
\n \n \n {{ 'module.requests.text.add-sow' | translate }}\n \n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n\n \n
\n
\n {{ label | translate }}\n
\n \n \n \n \n \n \n \n {{ 'module.requests.po.po-actions.view-edit' | translate }}\n {{ 'module.requests.po.po-actions.view-edit' | translate }}\n {{ 'module.requests.po.po-actions.view-edit' | translate }}\n {{ 'module.requests.po.po-actions.view' | translate }}\n \n \n \n \n {{ 'module.requests.po.po-actions.print-finance' | translate }}\n \n \n \n {{ printer | translate }}\n \n \n \n \n {{ printer | translate }}\n \n \n \n {{ emailTps | translate }}\n \n \n \n \n {{ 'module.requests.po.po-actions.delete' | translate }}\n \n \n \n {{ 'module.requests.po.po-actions.delete' | translate }}\n \n \n
\n
\n
\n
\n
\n {{ 'common.button.printer' | translate }}:\n {{ 'module.requests.po.company' | translate }}:\n
\n
\n {{ itemDetails?.printerInfo?.name }}\n {{ getItemName(companyList, itemDetails?.accountingInfo?.company) }}\n
\n
\n {{ 'module.requests.po.date' | translate }}:\n \n {{ 'module.requests.third-party.items.production-qty' | translate }}:\n \n
\n
\n \n {{ itemDetails?.sowCreatedAt | date: 'MM/dd/yyyy' | uppercase }}\n {{ itemDetails?.createdAt | date: 'MM/dd/yyyy' | uppercase }}\n {{ itemDetails?.createdAt | date: 'MM/dd/yyyy' | uppercase }}\n \n {{ itemDetails?.billingInfo?.totalQuantity }}\n
\n
\n
\n \n
\n
\n {{ 'module.requests.third-party.details.issuer' | translate }}:\n
\n
\n {{ request.details.issuer.name }}\n
\n
\n {{ 'module.requests.po.date' | translate }}:\n {{ 'module.requests.third-party.tps.total-print-qty' | translate }}:\n
\n
\n {{ itemDetails?.createdAt | date: 'MM/dd/yyyy' | uppercase }}\n {{ getTotalPrintQty(itemDetails.items) }}\n
\n
\n
\n \n
\n \n
\n","\n
0; else noItemsMsg\">\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n \n\n
\n \n\n
\n \n
\n\n
\n \n
\n\n
\n \n\n
\n \n
\n
\n\n \n
\n \n
\n
\n \n
\n

\n \n

\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Action, ActionsSubject, select, Store} from '@ngrx/store';\nimport {TranslateService} from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {combineLatest, Subject, Subscription} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {lazyLoadPrinters} from 'src/app/reducers/ref-data/refdata.actions';\nimport {\n ThirdPartyConfirmedPrinterItems,\n ThirdPartyConfirmedPrintersDetails,\n ThirdPartyRequestItemModel,\n ThirdPartyRequestModel\n} from 'src/app/requests/models/third-party-request.model';\nimport {selectThirdPartyRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {ThirdPartyActions, thirdPartyActions} from 'src/app/requests/reducers/request-details/third-party.actions';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {Events, EventService, ThirdPartyEvents} from 'src/app/shared/services/event-service.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {selectPrinters} from '../../../../../reducers/ref-data/refdata.selectors';\nimport {SelectPrinterProvider} from '../../../../classes/select-printer-provider';\n\n@Component({\n selector: 'app-third-confirm-printer',\n templateUrl: './third-confirm-printer.component.html',\n styleUrls: ['./third-confirm-printer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdConfirmPrinterComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n\n private subscriptions: Subscription [] = [];\n private ngUnsubscribe = new Subject();\n private selectPrinterProvider;\n public request: ThirdPartyRequestModel;\n public listedItems: ThirdPartyRequestItemModel[];\n public itemsForm: FormArray;\n public confirmedPrinters = {} as ThirdPartyConfirmedPrinterItems;\n public cachedPrinters = new Map();\n\n request$ = this.store.pipe(\n select(selectThirdPartyRequestDetails),\n filter(v => !!v)).pipe(takeUntil(this.ngUnsubscribe));\n\n stepData$ = combineLatest([\n this.store.select(selectPrinters).pipe(filter(v => v.length > 0), take(1)),\n this.request$.pipe(take(1))\n ]);\n\n constructor(public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private fb: FormBuilder,\n private messageService: MessageService,\n private translate: TranslateService,\n private store: Store,\n private actions: ActionsSubject) {\n super();\n }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadPrinters());\n this.request$.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((request) => {\n this.request = cloneDeep(request);\n this.filterListedItems(this.request.items);\n this.setPrintersForListedItems();\n this.buildItemsForm();\n this.cd.markForCheck();\n });\n this.initSubscriptions();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n private toggleForm(): void {\n this.isDisabled ? this.itemsForm?.disable() : this.itemsForm?.enable();\n this.cd.markForCheck();\n }\n\n private buildItemsForm(): void {\n this.itemsForm = this.fb.array([]);\n\n this.listedItems?.forEach((item) => {\n this.itemsForm.push(\n this.fb.group({\n printer: this.fb.control(item.printer, Validators.required),\n id: this.fb.control(item.id)\n })\n );\n });\n\n this.toggleForm();\n\n }\n\n private isPrinterConfirmed(): boolean {\n return this.itemsForm.getRawValue().every(item => !!item.printer);\n }\n\n private initSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(ThirdPartyEvents.ConfirmPrinterValidation, (elementRef) => {\n if (this.isPrinterConfirmed()) {\n this.stepActionsService.addReason(\n elementRef, 'step-submit', 'step-submit', ThirdPartyEvents.ConfirmPrinter, 'right');\n } else {\n this.itemsForm.controls.forEach((fg: FormGroup) => this.utilsService.touchFormControls(fg));\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.third-party.messages.confirm-printer-head'),\n this.translate.instant('module.requests.third-party.messages.confirm-printer-desc')\n );\n }\n }, this.ngUnsubscribe),\n\n this.eventService.on(ThirdPartyEvents.ConfirmPrinter, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === ThirdPartyActions.UpdateConfirmedPrintersSuccess),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n }, this.ngUnsubscribe)\n );\n }\n\n private saveRequest(): void {\n const itemsForm: ThirdPartyConfirmedPrintersDetails[] = cloneDeep(this.itemsForm.getRawValue());\n this.confirmedPrinters.items = [] as ThirdPartyConfirmedPrintersDetails[];\n\n this.listedItems.forEach(storedItem => {\n const relatedItem = itemsForm.find(formItem => formItem.id === storedItem.id);\n if (relatedItem) {\n relatedItem.printer.id = storedItem.printer ? storedItem.printer.id : null;\n }\n });\n\n this.confirmedPrinters.items = itemsForm;\n\n this.store.dispatch(thirdPartyActions.updateConfirmedPrinters({\n requestId: this.requestId,\n items: this.confirmedPrinters,\n }));\n }\n\n filterListedItems(requestItems) {\n this.listedItems = requestItems.filter(item => !item.printer);\n return this.listedItems;\n }\n\n private setPrintersForListedItems() {\n this.stepData$\n .subscribe(([printers]) => {\n this.selectPrinterProvider = new SelectPrinterProvider(printers, 'EXTERNAL');\n this.listedItems.forEach((item, index) => {\n this.cachedPrinters.set(index, this.selectPrinterProvider.getFilteredPrintersForItem(item));\n });\n });\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {ThirdBulkChangeData, ThirdBulkChangeResponse} from './models/third-bulk-change.model';\nimport {ThirdPartyProductionService} from '../../../../../services/third-party-production.service';\nimport {ThirdPartyItemsOperationsDetails} from '../../../../../models/third-party-request.model';\nimport {Store} from '@ngrx/store';\nimport {requestDetailsActions} from '../../../../../reducers/request-details/request-details.actions';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-third-bulk-change',\n templateUrl: './third-bulk-change.component.html',\n styleUrls: ['./third-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdBulkChangeComponent implements OnInit {\n public bulkForm: FormGroup;\n protected validationObject = {\n artApprovedDate: null,\n devReturnFileReceivedDate: null,\n devReturnFileLoadedDate: null,\n prodReturnFileReceivedDate: null,\n prodReturnFileLoadedDate: null,\n devTestCardsReceivedDate: null,\n whiteProdCardsReceivedDate: null,\n prodCardsActivatedForPartnerDate: null,\n prodCardsSentToPartnerDate: null,\n prodCardsRedeemedSuccessfullyDate: null,\n approvedDataProofToPrinterDate: null,\n approvedLabelProofToPrinterDate: null,\n inCommDataFileUploadedToCfsDate: null,\n };\n\n constructor(private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: ThirdBulkChangeData,\n private fb: FormBuilder,\n private store: Store,\n private cd: ChangeDetectorRef,\n private thirdProductionService: ThirdPartyProductionService) {\n }\n\n ngOnInit(): void {\n this.initForm();\n }\n\n private initForm(): void {\n this.bulkForm = this.fb.group({\n artApprovedDate: this.fb.control(null),\n devReturnFileReceivedDate: this.fb.control(null),\n devReturnFileLoadedDate: this.fb.control(null),\n prodReturnFileReceivedDate: this.fb.control(null),\n prodReturnFileLoadedDate: this.fb.control(null),\n devTestCardsReceivedDate: this.fb.control(null),\n whiteProdCardsReceivedDate: this.fb.control(null),\n prodCardsActivatedForPartnerDate: this.fb.control(null),\n prodCardsSentToPartnerDate: this.fb.control(null),\n prodCardsRedeemedSuccessfullyDate: this.fb.control(null),\n approvedDataProofToPrinterDate: this.fb.control(null),\n approvedLabelProofToPrinterDate: this.fb.control(null),\n inCommDataFileUploadedToCfsDate: this.fb.control(null),\n },\n {\n updateOn: 'change',\n validators: UtilsService.bulkFormValidationFn(this.validationObject)\n });\n }\n\n public onClose(): void {\n this.dialogRef.close(null);\n }\n\n public onSubmit(): void {\n this.bulkForm.markAllAsTouched();\n const formValues = this.bulkForm.getRawValue();\n const body: ThirdPartyItemsOperationsDetails = {\n itemIds: this.dialogData.selectedItems.map(item => item.id),\n ...formValues\n };\n this.thirdProductionService.bulkUpdateItems(this.dialogData.requestId, body).subscribe(res => {\n this.store.dispatch(requestDetailsActions.loadRequestDetailsSuccess({data: res}));\n this.dialogRef.close();\n });\n }\n\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n \n \n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n {{ 'module.pages.reports.third-party.columns.b2b-uploaded' | translate }}\n
\n \n
\n
\n
\n
\n \n \n {{ 'common.button.step-submit' | translate }}\n \n
\n
\n","
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ControlContainer } from '@angular/forms';\n\n@Component({\n selector: 'app-manage-card-filter',\n templateUrl: './manage-card-filter.component.html',\n styleUrls: ['./manage-card-filter.component.scss']\n})\nexport class ManageCardFilterComponent {\n @Input() testId = 'manage_card_filter';\n @Output() submitChange = new EventEmitter();\n constructor(public form: ControlContainer) {}\n}\n","
\n \n \n \n\n \n
\n {{ 'module.requests.third-party.items.wpn-description' | translate }}: \n {{ item?.wpnDescription }}\n
\n\n
\n {{ 'module.requests.third-party.items.wpn' | translate }}: \n {{ item?.wpn }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}: \n {{ item?.productUpc }}\n
\n
\n\n \n
\n {{ 'module.requests.third-party.items.product-description' | translate }}: \n {{ card?.productDescription }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}: \n {{ card?.productUpc }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { ThirdPartyChildCard, ThirdPartyRequestItemModel } from 'src/app/requests/models/third-party-request.model';\n\n@Component({\n selector: 'app-card-range-table-header',\n templateUrl: './card-range-table-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CardRangeTableHeaderComponent {\n @Input() item: ThirdPartyRequestItemModel;\n @Input() card: ThirdPartyChildCard;\n @Input() testId: string;\n @Input() isError?: boolean;\n}\n","
\n \n \n Card range table\n \n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.add-range' | translate }}\n \n \n
\n
\n \n \n {{ option.label }}\n \n \n
\n
\n \n \n \n
\n
\n \n
\n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.start-range' | translate }}\n \n \n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.end-range' | translate }}\n \n \n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.date-received' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.date-requested' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.launch-manager' | translate }}\n \n \n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.range-load-complete' | translate }}\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.bin-load-required' | translate }}\n \n \n \n \n \n\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.columns.s-now-ticket' | translate }}\n \n \n \n \n \n \n \n\n \n \n \n
\n
\n
\n","import { Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { AbstractControl, ControlContainer, FormArray } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport {\n DatePickerHeaderComponent,\n} from 'src/app/shared/components/app-date-picker/date-picker-header/date-picker-header.component';\n\nimport { ThirdPartyRequestItemModel } from '../../../../../../models/third-party-request.model';\nimport { ManageCardRangesTableRow } from '../models/manage-card-ranges-bulk.model';\n\n@Component({\n selector: 'app-card-ranges-table',\n templateUrl: './card-ranges-table.component.html',\n styleUrls: ['./card-ranges-table.component.scss'],\n})\nexport class CardRangesTableComponent implements OnDestroy {\n private ngUnsubscribe = new Subject();\n\n @Input() testId = 'card_ranges_table';\n @Input() displayedColumns: Array;\n @Output() rangeDelete = new EventEmitter();\n\n readonly sizes: {\n [k in keyof Omit]: string;\n } = {\n addRange: '214px',\n startRange: 'auto',\n endRange: 'auto',\n dateReceived: 'auto',\n rangeLoadRequestDate: 'auto',\n launchManager: 'auto',\n rangeLoadCompleteDate: 'auto',\n binLoadRequired: null,\n snowTicket: 'auto'\n };\n readonly addRangeOptions = [\n {label: this.translateService.instant('module.pages.reports.third-party.manage-card-bulk.dev'), value: 'dev'},\n {label: this.translateService.instant('module.pages.reports.third-party.manage-card-bulk.prod'), value: 'prod'}\n ];\n readonly datePickerHeaderHeader = DatePickerHeaderComponent;\n readonly cardRangeControlOptions = {\n digitGroupSeparator: '',\n decimalCharacter: '.',\n decimalCharacterAlternative: '.',\n currencySymbol: '',\n currencySymbolPlacement: 's',\n roundingMethod: 'U',\n minimumValue: '0',\n maximumValue: '9'.repeat(64),\n decimalPlaces: 0,\n decimalPlacesShownOnBlur: 0,\n watchExternalChanges: true\n };\n\n constructor(public formDirective: ControlContainer, private translateService: TranslateService) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n get tableFormItems(): Array {\n return [...(this.formDirective?.control.get('ranges') as FormArray).controls];\n }\n\n removeRange(id: symbol): void {\n this.rangeDelete.emit(id);\n }\n\n disableRemoveRange(rangeType: string): boolean {\n if (\n rangeType === 'dev' &&\n ((this.formDirective.control.get('item').value) as ThirdPartyRequestItemModel)\n ?.cardCollateralDetails?.whiteDevCardQuantity === 0\n ) {\n return false;\n }\n const currentRanges = this.formDirective.control.get('ranges').value;\n return currentRanges.filter(r => r.addRange === rangeType).length <= 1;\n }\n\n rangeTypeDisabled(currentRangeType: string, optionRangeType: string): boolean {\n if (\n optionRangeType === 'dev' &&\n ((this.formDirective.control.get('item').value) as ThirdPartyRequestItemModel)\n ?.cardCollateralDetails?.whiteDevCardQuantity === 0\n ) {\n return true;\n }\n const currentRanges = this.formDirective.control.get('ranges').value;\n return currentRanges.filter(r => r.addRange === currentRangeType).length <= 1;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormArray, FormBuilder, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { TranslateService } from '@ngx-translate/core';\nimport { differenceWith } from 'lodash';\nimport isEqual from 'lodash/isEqual';\nimport moment from 'moment';\nimport { merge, Observable, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { THIRD_MAX_RANGES_PER_ITEM } from 'src/app/requests/constants/request-details.constants';\nimport {\n CardRangesBulkPayloadItem,\n ThirdPartyChildCard,\n ThirdPartyOperationsCardRangeModel,\n ThirdPartyRequestItemModel,\n} from 'src/app/requests/models/third-party-request.model';\nimport { ModalService } from 'src/app/shared/services/modal-service.service';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\n\nimport { LoaderService } from '../../../../../../shared/services/loader.service';\nimport { ThirdPartyProductionService } from '../../../../../services/third-party-production.service';\nimport {\n ManageCardRangedBulkData,\n ManageCardRangedBulkResponse,\n ManageCardRangesTableBulkData,\n ManageCardRangesTableRow,\n} from './models/manage-card-ranges-bulk.model';\n\n@Component({\n selector: 'app-manage-card-ranges-bulk',\n templateUrl: './manage-card-ranges-bulk.component.html',\n styleUrls: ['./manage-card-ranges-bulk.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ManageCardRangedBulkComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n public readonly THIRD_MAX_RANGES_PER_ITEM = THIRD_MAX_RANGES_PER_ITEM;\n displayedColumns: Array = [\n 'addRange',\n 'startRange',\n 'endRange',\n 'dateReceived',\n 'rangeLoadRequestDate',\n 'launchManager',\n 'rangeLoadCompleteDate',\n 'binLoadRequired',\n 'snowTicket'\n ];\n\n items: Array<\n [ThirdPartyRequestItemModel, Array, Array<[ThirdPartyChildCard, Array]>]\n > = [];\n\n filterForm: FormGroup;\n\n tableForm: FormGroup = null;\n\n testId = 'card_ranges_bulk';\n\n public bulkForm: FormGroup;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private dialogData: ManageCardRangedBulkData,\n private dialogRef: MatDialogRef,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private thirdProductionService: ThirdPartyProductionService,\n private utilsService: UtilsService,\n private translate: TranslateService,\n private modalService: ModalService,\n private loaderService: LoaderService\n ) {}\n\n ngOnInit(): void {\n this.initFilterForm();\n this.initItemsForm();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private initialFormValue = null;\n\n private cardRangeToCardRow(addRange: string, cr: ThirdPartyOperationsCardRangeModel) {\n return {\n ...cr,\n id: Symbol(),\n addRange,\n dateReceived: cr.dateReceived ? moment(cr.dateReceived) : null,\n rangeLoadRequestDate: cr.rangeLoadRequestDate ? moment(cr.rangeLoadRequestDate) : null,\n rangeLoadCompleteDate: cr.rangeLoadCompleteDate ? moment(cr.rangeLoadCompleteDate) : null\n };\n }\n\n initItemsForm(): void {\n this.items = this.dialogData.selectedItems\n .filter(\n item =>\n item.operationsDetails?.cardRangesRequired ||\n item.childCards?.reduce((acc, card) => acc || card.operationsDetails?.cardRangesRequired, false)\n )\n .map(item => {\n const whiteDevCardQuantityIsZeroItem = item?.cardCollateralDetails?.whiteDevCardQuantity === 0;\n return [\n item,\n item.operationsDetails?.cardRangesRequired\n ? [\n ...(!whiteDevCardQuantityIsZeroItem\n ? item.operationsDetails?.devCardRanges.map(cr => this.cardRangeToCardRow('dev', cr)) || []\n : []),\n ...(item.operationsDetails?.prodCardRanges.map(cr => this.cardRangeToCardRow('prod', cr)) || [])\n ]\n : [],\n (item.childCards || [])\n .filter(card => card.operationsDetails?.cardRangesRequired)\n .map(childCard => {\n const whiteDevCardQuantityIsZeroCard = childCard?.cardCollateralDetails?.whiteDevCardQuantity === 0;\n return [\n childCard,\n [\n ...(!whiteDevCardQuantityIsZeroCard\n ? childCard.operationsDetails?.devCardRanges.map(cr => this.cardRangeToCardRow('dev', cr)) || []\n : []),\n ...(childCard.operationsDetails?.prodCardRanges.map(cr => this.cardRangeToCardRow('prod', cr)) || [])\n ]\n ];\n })\n ];\n });\n\n this.tableForm = this.fb.group({\n items: this.fb.array(\n this.items.map(([item, ranges, cards]) =>\n this.fb.group({\n item: this.fb.control(item),\n ranges: this.fb.array(\n ranges.map(range => {\n const [rangeFormGroup, rowListeners] = this.rangeFactory(range);\n this.activateListener(rangeFormGroup.get('id').value, rowListeners);\n\n return rangeFormGroup;\n })\n ),\n cards: this.fb.array(\n cards.map(([card, cardRanges]) =>\n this.fb.group({\n item: this.fb.control(card),\n ranges: this.fb.array(\n cardRanges.map(range => {\n const [rangeFormGroup, rowListeners] = this.rangeFactory(range);\n this.activateListener(rangeFormGroup.get('id').value, rowListeners);\n\n return rangeFormGroup;\n })\n )\n })\n )\n )\n })\n )\n )\n });\n\n this.initialFormValue = this.tableForm.value;\n }\n\n private listenerRegistry = new Map();\n\n private activateListener(rowId: symbol, listeners: Observable[]): void {\n this.listenerRegistry.set(\n rowId,\n listeners.map(listener => listener.subscribe())\n );\n }\n\n addRange(itemIndex: number, cardIndex?: number): void {\n const whiteDevCardQuantityIsZero =\n (cardIndex ? this.dialogData.selectedItems[itemIndex].childCards[cardIndex] : this.dialogData.selectedItems[itemIndex])\n ?.cardCollateralDetails?.whiteDevCardQuantity === 0;\n const [rangeFormGroup, rowListeners] = this.rangeFactory(this.blankRangeFactory(whiteDevCardQuantityIsZero ? 'prod' : 'dev'));\n const rangesRow = (\n cardIndex != null\n ? this.tableForm.get(`items.${itemIndex}.cards.${cardIndex}.ranges`)\n : this.tableForm.get(`items.${itemIndex}.ranges`)\n ) as FormArray;\n\n rangesRow.push(rangeFormGroup);\n this.activateListener(rangeFormGroup.get('id').value, rowListeners);\n\n this.cd.markForCheck();\n }\n\n removeRange(itemIndex: number, rowId: symbol, cardIndex?: number): void {\n const rangesRow = (\n cardIndex != null\n ? this.tableForm.get(`items.${itemIndex}.cards.${cardIndex}.ranges`)\n : this.tableForm.get(`items.${itemIndex}.ranges`)\n ) as FormArray;\n const rangeFormGroupIndex = rangesRow.controls.findIndex(c => c.get('id').value === rowId);\n if (rangeFormGroupIndex !== -1) {\n rangesRow.removeAt(rangeFormGroupIndex);\n }\n\n if (this.listenerRegistry.has(rowId)) {\n const rowListeners = this.listenerRegistry.get(rowId);\n rowListeners.forEach(rl => rl.unsubscribe());\n }\n }\n\n private blankRangeFactory(addRange = 'dev') {\n return {\n id: Symbol(),\n addRange,\n startRange: '',\n endRange: '',\n dateReceived: null,\n rangeLoadRequestDate: null,\n launchManager: '',\n rangeLoadCompleteDate: null,\n binLoadRequired: false,\n snowTicket: ''\n };\n }\n\n private rangeFactory(range: ManageCardRangesTableRow): [FormGroup, Observable[]] {\n const rangeGroup = this.fb.group({\n id: this.fb.control(Symbol()),\n addRange: this.fb.control(range.addRange, []),\n startRange: this.fb.control(range.startRange, []),\n endRange: this.fb.control(range.endRange, []),\n dateReceived: this.fb.control(range.dateReceived, []),\n rangeLoadRequestDate: this.fb.control(range.rangeLoadRequestDate, []),\n launchManager: this.fb.control(range.launchManager, []),\n rangeLoadCompleteDate: this.fb.control(range.rangeLoadCompleteDate, []),\n binLoadRequired: this.fb.control(range.binLoadRequired, []),\n snowTicket: this.fb.control(range.snowTicket, [])\n });\n\n rangeGroup.get('startRange').addValidators([UtilsService.startRangeValidationFn(rangeGroup.get('endRange'))]);\n rangeGroup.get('endRange').addValidators([UtilsService.endRangeValidationFn(rangeGroup.get('startRange'))]);\n\n const disableFieldsObservable = merge(of(rangeGroup.get('addRange').value), rangeGroup.get('addRange').valueChanges).pipe(\n tap(addRange => {\n if (addRange === 'dev') {\n rangeGroup.get('binLoadRequired').setValue(null);\n rangeGroup.get('binLoadRequired').disable();\n rangeGroup.get('snowTicket').setValue(null);\n rangeGroup.get('snowTicket').disable();\n } else {\n rangeGroup.get('binLoadRequired').enable();\n rangeGroup.get('snowTicket').enable();\n }\n }),\n takeUntil(this.ngUnsubscribe),\n );\n\n const startRangeObservable = merge(of(rangeGroup.get('startRange').value), rangeGroup.get('startRange').valueChanges).pipe(\n tap(() => {\n rangeGroup.get('endRange').updateValueAndValidity({\n emitEvent: false\n });\n }),\n takeUntil(this.ngUnsubscribe),\n );\n\n const endRangeObservable = merge(of(rangeGroup.get('endRange').value), rangeGroup.get('endRange').valueChanges).pipe(\n tap(() => {\n rangeGroup.get('startRange').updateValueAndValidity({\n emitEvent: false\n });\n }),\n takeUntil(this.ngUnsubscribe),\n );\n\n const observables = [disableFieldsObservable, startRangeObservable, endRangeObservable];\n\n return [rangeGroup, observables];\n }\n\n initFilterForm(): void {\n this.filterForm = this.fb.group({\n addRange: this.fb.control(null, []),\n startRange: this.fb.control(null, []),\n endRange: this.fb.control(null, []),\n dateReceived: this.fb.control(null, []),\n rangeLoadRequestDate: this.fb.control(null, []),\n launchManager: this.fb.control(null, []),\n rangeLoadCompleteDate: this.fb.control(null, []),\n binLoadRequired: this.fb.control(null, []),\n snowTicket: this.fb.control(null, [])\n } as {\n [k in keyof ManageCardRangesTableBulkData]: AbstractControl;\n });\n }\n\n applyBulk(bulk: Partial): void {\n this.confirmAction()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(confirmed => {\n if (confirmed) {\n (this.tableForm.get('items') as FormArray).controls.forEach((itemFormGroup: FormGroup) => {\n (itemFormGroup.get('ranges') as FormArray).controls.forEach(range => {\n Object.entries(bulk).forEach(([bulkFieldName, bulkFieldValue]) => {\n if (bulkFieldValue != null && range.get(bulkFieldName).enabled) {\n range.get(bulkFieldName).setValue(bulkFieldValue);\n }\n });\n });\n (itemFormGroup.get('cards') as FormArray).controls.forEach((cardFormGroup: FormGroup) => {\n (cardFormGroup.get('ranges') as FormArray).controls.forEach(cardRange => {\n Object.entries(bulk).forEach(([bulkFieldName, bulkFieldValue]) => {\n if (bulkFieldValue != null && cardRange.get(bulkFieldName).enabled) {\n cardRange.get(bulkFieldName).setValue(bulkFieldValue);\n }\n });\n });\n });\n });\n }\n });\n }\n\n public resetFilter(): void {\n this.filterForm.reset();\n }\n\n get hasChanges(): boolean {\n return JSON.stringify(this.tableForm.value) !== JSON.stringify(this.initialFormValue);\n }\n\n public onClose(): void {\n const hasChanges = this.hasChanges;\n const confirmSubscription = hasChanges ? this.confirmAction().pipe(takeUntil(this.ngUnsubscribe)) : of(true);\n\n confirmSubscription.subscribe(confirmed => {\n if (confirmed) {\n this.dialogRef.close(null);\n }\n });\n }\n\n get filterFormChanged(): boolean {\n return (\n differenceWith(\n Object.entries(this.filterForm.value),\n Object.entries({\n addRange: null,\n binLoadRequired: null,\n dateReceived: null,\n endRange: null,\n launchManager: null,\n rangeLoadCompleteDate: null,\n rangeLoadRequestDate: null,\n snowTicket: null,\n startRange: null\n }),\n isEqual\n ).length > 0\n );\n }\n\n private confirmAction(): Observable {\n return this.modalService\n .openConfirmationModal(\n this.translate.instant('common.modal.proceed'),\n this.translate.instant('common.modal.altered-overwritten'),\n this.translate.instant('common.button.continue'),\n this.translate.instant('common.button.cancel')\n )\n .afterClosed();\n }\n private rowToCardRange({\n id,\n addRange,\n dateReceived,\n rangeLoadRequestDate,\n rangeLoadCompleteDate,\n ...range\n }: ManageCardRangesTableRow): ThirdPartyOperationsCardRangeModel {\n return {\n dateReceived: dateReceived && dateReceived.isValid() ? dateReceived.format('YYYY-MM-DD') : null,\n rangeLoadRequestDate: rangeLoadRequestDate && rangeLoadRequestDate.isValid() ? rangeLoadRequestDate.format('YYYY-MM-DD') : null,\n rangeLoadCompleteDate: rangeLoadCompleteDate && rangeLoadCompleteDate.isValid() ? rangeLoadCompleteDate.format('YYYY-MM-DD') : null,\n ...range\n };\n }\n\n public onSubmit(): void {\n this.utilsService.logInvalidControls(this.tableForm);\n this.tableForm.markAllAsTouched();\n (this.tableForm.controls.items as FormArray).controls.forEach(item => item.markAllAsTouched());\n this.cd.detectChanges();\n\n const hasNoChanges = JSON.stringify(this.tableForm.value) === JSON.stringify(this.initialFormValue);\n const confirmSubscription = hasNoChanges ? of(false) : this.confirmAction().pipe(takeUntil(this.ngUnsubscribe));\n\n confirmSubscription.subscribe(async (confirmed: boolean) => {\n if (confirmed) {\n const formValue = this.tableForm.getRawValue();\n\n const body: CardRangesBulkPayloadItem[] = (\n formValue.items as {\n item: ThirdPartyRequestItemModel;\n ranges: ManageCardRangesTableRow[];\n cards: Array<{item: ThirdPartyRequestItemModel; ranges: ManageCardRangesTableRow[]}>;\n }[]\n ).map(({item, ranges, cards}) => ({\n id: item.id,\n devCardRanges: ranges.filter(r => r.addRange === 'dev').map(this.rowToCardRange),\n prodCardRanges: ranges.filter(r => r.addRange === 'prod').map(this.rowToCardRange),\n childCards: cards.map(({item: card, ranges: cardRanges}) => ({\n id: card.id,\n devCardRanges: cardRanges.filter(r => r.addRange === 'dev').map(this.rowToCardRange),\n prodCardRanges: cardRanges.filter(r => r.addRange === 'prod').map(this.rowToCardRange)\n }))\n }));\n\n try {\n this.loaderService.showLoader();\n const res = await this.thirdProductionService\n .bulkUpdateCardRanges(this.dialogData.requestId, {\n items: body\n })\n .toPromise();\n this.dialogRef.close(res);\n } finally {\n this.loaderService.hideLoader();\n }\n }\n });\n }\n\n public hasItemToShow(itemFormGroup: FormGroup): boolean {\n const cards = (itemFormGroup.get('cards') as FormArray).controls || [];\n const items = (itemFormGroup.get('ranges') as FormArray)?.controls || [];\n return (\n items.length > 0 ||\n cards.reduce((acc, card) => {\n const cardRanges = (card.get('ranges') as FormArray)?.controls || [];\n return acc || cardRanges.length > 0;\n }, false)\n );\n }\n}\n","
\n

{{ 'module.pages.reports.third-party.manage-card-bulk.title' | translate }}

\n \n \n \n
\n
\n \n {{ 'common.button.reset' | translate }}\n \n \n {{ 'common.button.apply' | translate }}\n \n
\n
\n
\n \n \n
\n \n {{ 'module.pages.reports.third-party.manage-card-bulk.header.item' | translate: {num: itemIndex + 1} }} â€”\n \n
\n
\n \n \n\n
\n \n \n {{ 'module.requests.third-party.items.add-range' | translate }}\n \n
\n
\n \n \n
\n \n \n {{ 'module.pages.reports.third-party.manage-card-bulk.header.card' | translate: {num: cardIndex + 1} }} â€”\n \n \n
\n
\n \n\n
\n \n \n {{ 'module.requests.third-party.items.add-range' | translate }}\n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n","/* eslint-disable @angular-eslint/no-host-metadata-property */\n/* eslint-disable no-underscore-dangle */\nimport { Directive, forwardRef, Input, OnDestroy } from '@angular/core';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {MAT_RADIO_GROUP, MatRadioGroup} from '@angular/material/radio';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport const MAT_RADIO_GROUP_INTERCEPT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AppInterceptableRadioGroupDirective),\n multi: true\n};\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'app-interceptable-radio-group',\n exportAs: 'matRadioGroup',\n providers: [\n MAT_RADIO_GROUP_INTERCEPT_CONTROL_VALUE_ACCESSOR,\n {provide: MAT_RADIO_GROUP, useExisting: AppInterceptableRadioGroupDirective}\n ],\n host: {\n role: 'radiogroup',\n class: 'mat-radio-group'\n }\n})\nexport class AppInterceptableRadioGroupDirective extends MatRadioGroup implements OnDestroy {\n private oldValue: unknown = null;\n private ngUnsubscribe = new Subject();\n @Input() shouldConfirm: (oldValue: unknown, newValue: unknown) => boolean = () => true;\n @Input() public confirmDialog: () => Observable;\n\n private _controlValueAccessorChangeFnReal;\n public _controlValueAccessorChangeFn: (value: any) => void = (value: any) => {\n if (this.shouldConfirm(this.oldValue, value)) {\n this.confirmDialog().pipe(takeUntil(this.ngUnsubscribe)).subscribe(confirmed => {\n if(confirmed) {\n this._controlValueAccessorChangeFnReal(value);\n this.oldValue = value;\n } else {\n this._controlValueAccessorChangeFnReal(this.oldValue);\n }\n });\n } else {\n this._controlValueAccessorChangeFnReal(value);\n this.oldValue = value;\n }\n };\n\n registerOnChange(fn: (value: unknown) => void): void {\n this._controlValueAccessorChangeFnReal = fn;\n }\n\n writeValue(value: unknown): void {\n this.oldValue = value;\n super.writeValue(value);\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n \n \n {{item.name}}\n \n
\n\n \n \n {{inputHint}}\n \n\n \n \n {{warningMessage}}\n \n\n \n \n {{getErrorMessage()}}\n \n
\n","import {\n ChangeDetectionStrategy, ChangeDetectorRef,\n Component, DoCheck,\n Input,\n OnInit,\n Optional,\n Self,\n ViewEncapsulation\n} from '@angular/core';\nimport {RadioGroupInputValue} from '../../models/radioGroupInputValue';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MessageService } from '../../services/message-service.service';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'app-radio-group-form-confirm',\n templateUrl: './radio-group-form-confirm.component.html',\n styleUrls: ['./radio-group-form-confirm.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class RadioGroupFormConfirmComponent implements ControlValueAccessor, OnInit, DoCheck {\n\n @Input() public buttonValues: RadioGroupInputValue[];\n @Input() public label?: string;\n @Input() public inputHint?: string;\n @Input() public hintIconExist?: boolean;\n @Input() public errorMessage?: string;\n @Input() public testId?: string;\n @Input() public warningMessage?: string;\n @Input() public isWarningVisible?: boolean;\n @Input() public isRequired?: boolean;\n @Input() private defaultSelectedIndex?: number;\n @Input() public isLabelInColumn = true;\n @Input() public shouldConfirm: (oldValue: unknown, newValue: unknown) => boolean = () => true;\n @Input() public confirmDialog: () => Observable;\n public isDisabled: boolean;\n\n private oldTouched = null;\n\n onChange: any = (event) => {\n this.ctrl?.control.setValue(event);\n };\n onTouched: any = () => {};\n\n constructor(@Self() @Optional() public ctrl: NgControl,\n private cd: ChangeDetectorRef, private messageService: MessageService) {\n if (this.ctrl) {\n this.ctrl.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n if (\n typeof this.ctrl.value !== 'boolean' &&\n typeof this.defaultSelectedIndex === 'number' &&\n this.buttonValues?.length\n ) {\n this.selectItem(this.buttonValues[this.defaultSelectedIndex].code);\n }\n }\n\n ngDoCheck() {\n if (this.ctrl.touched !== this.oldTouched) {\n this.oldTouched = this.ctrl.touched;\n }\n this.cd.markForCheck();\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n writeValue(value) {}\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n selectItem(value) {\n if (!this.isDisabled) {\n this.ctrl?.control.setValue(value);\n }\n }\n\n setDisabledState?(disabled: boolean) {\n this.isDisabled = disabled;\n }\n\n public getErrorMessage(): string {\n if (!this.errorMessage) {\n if (this.ctrl?.invalid) {\n return this.messageService.getControlErrorMessage(this.ctrl.errors);\n } return null;\n }\n return this.errorMessage;\n }\n}\n","
\n \n
\n
\n {{'module.requests.third-party.items.date-received' | translate}}\n *:\n \n\n \n
\n\n
\n {{'module.requests.third-party.items.start-range' | translate}}\n *:\n \n\n \n
\n\n
\n {{'module.requests.third-party.items.end-range' | translate}}\n *:\n \n\n \n
\n\n
\n {{'module.requests.third-party.items.range-load-request' | translate}}\n *:\n \n\n \n
\n\n
\n {{'module.requests.third-party.items.launch-manager' | translate}}\n *:\n \n\n \n
\n\n
\n {{'module.requests.third-party.items.range-load-complete' | translate}}\n *:\n \n\n \n
\n\n
\n \n
\n\n
\n {{'module.requests.third-party.items.snow-ticket' | translate}}*:\n \n \n
\n
\n \n\n
\n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ControlContainer, FormGroup, Validators } from '@angular/forms';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'app-third-operations-range-details',\n templateUrl: './third-operations-range-details.component.html',\n styleUrls: ['./third-operations-range-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdOperationsRangeDetailsComponent implements OnInit {\n @Input() public rangeIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public isProdRange: boolean;\n @Input() testId: string;\n @Input() public formValidationTrigger: Subject;\n @Output() public remove = new EventEmitter();\n\n constructor(\n private translateService: TranslateService,\n private controlContainer: ControlContainer,\n private cd: ChangeDetectorRef,\n ) {\n }\n\n ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n if (this.isProdRange) {\n this.form.get('binLoadRequired').setValidators(Validators.required);\n }\n }\n\n public get form(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get panelTitle(): string {\n return this.isProdRange ?\n this.translateService.instant('module.requests.third-party.items.prod-range') :\n this.translateService.instant('module.requests.third-party.items.dev-range');\n }\n\n}\n","
\n
\n {{ 'module.requests.third-party.items.return-file-type' | translate }}:\n\n \n {{ utilsService.getItemName(returnFileTypes, returnFileTypeControl.value) }}\n \n
\n\n
\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n

\n {{'module.requests.third-party.items.snow-ticket' | translate}}\n *:\n

\n
\n \n
\n
\n
\n
\n
\n\n
\n \n
\n\n
\n
0\">\n
{{'module.requests.third-party.items.dev-ranges-details' | translate}}:
\n\n \n\n
\n \n \n {{'module.requests.third-party.items.add-range' | translate}}\n \n
\n
\n\n
\n
{{'module.requests.third-party.items.prod-ranges-details' | translate}}:
\n\n \n\n
\n \n \n {{'module.requests.third-party.items.add-range' | translate}}\n \n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormArray, FormGroup, Validators } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { lazyLoadReturnFileTypes } from '../../../../../../reducers/ref-data/refdata.actions';\nimport { selectReturnFileTypes } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { ModalService } from '../../../../../../shared/services/modal-service.service';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { THIRD_MAX_RANGES_PER_ITEM } from '../../../../../constants/request-details.constants';\nimport { ThirdPartyRequestItemModel } from '../../../../../models/third-party-request.model';\n\n@Component({\n selector: 'app-third-operations-card-info',\n templateUrl: './third-operations-card-info.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ThirdOperationsCardInfoComponent implements OnInit, OnDestroy, OnChanges {\n @Input() public itemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isDevDataRequest: boolean;\n @Input() public isProdDataRequest: boolean;\n @Input() public isItChildCard: boolean;\n @Input() public item: ThirdPartyRequestItemModel;\n @Input() public formValidationTrigger: Subject;\n @Input() public emptyDevRangeForm: FormGroup;\n @Input() public emptyProdRangeForm: FormGroup;\n @Input() testId: string;\n\n @Output() cardRangeRemove = new EventEmitter();\n\n public returnFileTypes$ = this.store.select(selectReturnFileTypes).pipe(filter(v => v.length > 0));\n public THIRD_MAX_RANGES_PER_ITEM = THIRD_MAX_RANGES_PER_ITEM;\n public isChildFlagBlockVisible = false;\n\n private ngUnsubscribe = new Subject();\n\n constructor(\n public utilsService: UtilsService,\n private controlContainer: ControlContainer,\n private store: Store,\n private cd: ChangeDetectorRef,\n private modalService: ModalService,\n private translate: TranslateService\n ) {}\n\n public ngOnInit(): void {\n this.store.dispatch(lazyLoadReturnFileTypes());\n this.formValidationTrigger.subscribe(() => this.cd.markForCheck());\n\n let cardRangesRequired = this.form.get('cardRangesRequired').value;\n this.form\n .get('cardRangesRequired')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n if (cardRangesRequired === value) {\n return;\n }\n this.devCardRangesArray.clear();\n this.prodCardRangesArray.clear();\n if (value) {\n if (this.item.cardCollateralDetails?.whiteDevCardQuantity !== 0) {\n this.devCardRangesArray.push(this.emptyDevRangeForm);\n }\n this.prodCardRangesArray.push(this.emptyProdRangeForm);\n }\n cardRangesRequired = value;\n this.cd.markForCheck();\n });\n\n this.setChildFlagValidators();\n\n this.form\n .get('childFlagRequired')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n if (!value) {\n this.form.get('snowTicket').clearValidators();\n } else {\n this.form.get('snowTicket').setValidators(Validators.required);\n }\n });\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.item && !changes.item.firstChange) {\n this.setChildFlagValidators();\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setChildFlagValidators(): void {\n if (!this.isItChildCard && this.item.countryCode === 'CAN' && this.item.operationsDetails?.returnFileTypeCode === 'MP_FILE') {\n this.form.get('childFlagRequired').setValidators(Validators.required);\n this.isChildFlagBlockVisible = true;\n } else {\n this.form.get('childFlagRequired').clearValidators();\n this.isChildFlagBlockVisible = false;\n }\n\n if (!this.form.get('childFlagRequired').value) {\n this.form.get('snowTicket').clearValidators();\n } else {\n this.form.get('snowTicket').setValidators(Validators.required);\n }\n }\n\n public get form(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get returnFileTypeControl(): AbstractControl {\n return this.form.get('returnFileTypeCode');\n }\n\n public get devCardRangesArray(): FormArray {\n return this.form.get('devCardRanges') as FormArray;\n }\n\n public get prodCardRangesArray(): FormArray {\n return this.form.get('prodCardRanges') as FormArray;\n }\n\n public get isFileTypeFieldsRequired(): boolean {\n return this.returnFileTypeControl.value === 'MP_FILE' || this.returnFileTypeControl.value === 'POST_RT_FILE';\n }\n\n public removeProdCardRange(rangeIndex: number): void {\n this.cardRangeRemove.next(this.prodCardRangesArray.at(rangeIndex));\n this.prodCardRangesArray.removeAt(rangeIndex);\n }\n\n public shouldConfirm = (oldValue: boolean, newValue: boolean) => {\n if (oldValue === true && newValue === false) {\n // isNotEmpty\n return [...this.prodCardRangesArray.value, ...this.devCardRangesArray.value].some(cr =>\n Object.entries(cr).some(([k, v]) => v || v === 0)\n );\n }\n };\n\n public confirmCardRangeRequired = () =>\n this.modalService\n .openConfirmationModal(\n this.translate.instant('module.requests.third-party.items.card-range-required-change-confirm-title'),\n this.translate.instant('module.requests.third-party.items.card-range-required-change-confirm-description'),\n this.translate.instant('module.requests.third-party.items.card-range-required-change-confirm-submit'),\n this.translate.instant('module.requests.third-party.items.card-range-required-change-confirm-reject')\n )\n .afterClosed();\n}\n","
\n
\n
\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n\n \n
\n\n
\n \n
{{ 'module.requests.details.child-card-item-details' | translate }}
\n\n
\n
\n {{ 'module.requests.third-party.items.product-description' | translate }}\n {{ item?.childCards[childCardIdx].productDescription }}\n
\n\n
\n {{ 'module.requests.third-party.items.no-of-child-cards' | translate }}\n {{ item?.childCards[childCardIdx].childNumber }}\n
\n\n
\n {{ 'module.requests.third-party.items.production-qty' | translate }}\n {{ item?.childCards[childCardIdx].productionQuantity }}\n
\n\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ item?.childCards[childCardIdx].productUpc }}\n
\n
\n\n \n
\n
\n\n
\n
\n
0\">\n \n
\n\n
0\">\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n \n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormArray, FormGroup } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\n\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { ThirdPartyRequestItemModel } from '../../../../../models/third-party-request.model';\nimport { thirdPartyActions } from '../../../../../reducers/request-details/third-party.actions';\n\n@Component({\n selector: 'app-third-operations-item-form',\n templateUrl: './third-operations-item-form.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdOperationsItemFormComponent implements OnInit, OnDestroy {\n @Input() public itemIndex: number;\n @Input() public requestId: string;\n @Input() public item: ThirdPartyRequestItemModel;\n @Input() public isDisabled: boolean;\n @Input() public emptyDevRangeForm: FormGroup;\n @Input() public emptyProdRangeForm: FormGroup;\n @Input() public formValidationTrigger: Subject;\n\n @Output() cardRangeRemove = new EventEmitter();\n\n private ngUnsubscribe = new Subject();\n private isLoading = false;\n\n constructor(\n public utilsService: UtilsService,\n private controlContainer: ControlContainer,\n private cd: ChangeDetectorRef,\n private store: Store,\n ) {\n }\n\n public ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => this.cd.markForCheck());\n this.setControlsSubs();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public get itemForm(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get operationsDetailsForm(): FormGroup {\n return this.itemForm.get('operationsDetails') as FormGroup;\n }\n\n public get devDataRequestControl(): AbstractControl {\n return this.operationsDetailsForm.get('inCommDevDataRequest');\n }\n\n public get devDataRequestRelatedControls(): AbstractControl[] {\n return [\n this.operationsDetailsForm.get('inCommDevDataRequestDate'),\n this.operationsDetailsForm.get('inCommDevIdmsFfid'),\n this.operationsDetailsForm.get('inCommDevDataPostedToPrinterDate'),\n this.operationsDetailsForm.get('devReturnFileReceivedDate'),\n this.operationsDetailsForm.get('devReturnFileLoadedDate'),\n ];\n }\n\n public get prodDataRequestRelatedControls(): AbstractControl[] {\n return [\n this.operationsDetailsForm.get('inCommProdDataRequestDate'),\n this.operationsDetailsForm.get('inCommProdIdmsFfid'),\n this.operationsDetailsForm.get('inCommProdDataPostedToPrinterDate'),\n this.operationsDetailsForm.get('prodReturnFileReceivedDate'),\n this.operationsDetailsForm.get('prodReturnFileLoadedDate'),\n ];\n }\n\n public get prodDataRequestControl(): AbstractControl {\n return this.operationsDetailsForm.get('inCommProdDataRequest');\n }\n\n public get returnFileTypeControl(): AbstractControl {\n return this.operationsDetailsForm.get('returnFileTypeCode');\n }\n\n public get childCardsArray(): FormArray {\n return this.itemForm.get('childCards') as FormArray;\n }\n\n public getChildProdCardRangesArray(childIdx: number): FormArray {\n return this.childCardsArray.get(`${childIdx}.operationsDetails.prodCardRanges`) as FormArray;\n }\n\n public get prodCardRangesArray(): FormArray {\n return this.operationsDetailsForm.get('prodCardRanges') as FormArray;\n }\n\n public get isDevDataRequest(): boolean {\n return !!this.devDataRequestControl.value;\n }\n\n public get isProdDataRequest(): boolean {\n return !!this.prodDataRequestControl.value;\n }\n\n public isFileTypeFieldsRequired(fileType: string): boolean {\n return fileType === 'MP_FILE' || fileType === 'POST_RT_FILE';\n }\n\n public get isShipmentsContainCfs(): boolean {\n return this.item?.shipments\n .some(shipment => shipment.warehouse.name.toLowerCase().includes('cfs'));\n }\n\n private setControlsSubs(): void {\n this.controlContainer.control.valueChanges\n .pipe(\n map(() => this.controlContainer.control.value),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe((item: Partial) => {\n if (!this.isLoading) {\n this.store.dispatch(thirdPartyActions.updateItemOperationsDetails(\n { requestId: this.requestId, itemId: this.item.id, operationsDetails: item },\n ));\n }\n });\n\n let devDataRequestControlValue = this.devDataRequestControl.value;\n this.devDataRequestControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((value) => {\n if(value === devDataRequestControlValue) {\n return;\n }\n devDataRequestControlValue = value;\n this.devDataRequestRelatedControls.forEach(control => {\n control.reset();\n control.clearValidators();\n });\n\n this.childCardsArray.controls.forEach(childForm => {\n [\n childForm.get('operationsDetails.devReturnFileReceivedDate'),\n childForm.get('operationsDetails.devReturnFileLoadedDate'),\n ].forEach(control => {\n control.reset();\n control.clearValidators();\n });\n });\n });\n let prodDataRequestControlValue = this.prodDataRequestControl.value;\n this.prodDataRequestControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((value) => {\n if(value === prodDataRequestControlValue) {\n return;\n }\n prodDataRequestControlValue = value;\n this.prodDataRequestRelatedControls.forEach(control => {\n control.reset();\n control.clearValidators();\n });\n\n this.childCardsArray.controls.forEach(childForm => {\n [\n childForm.get('operationsDetails.prodReturnFileReceivedDate'),\n childForm.get('operationsDetails.prodReturnFileLoadedDate'),\n ].forEach(control => {\n control.reset();\n control.clearValidators();\n });\n });\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { select, Store } from '@ngrx/store';\nimport { Subject, Subscription, combineLatest, merge } from 'rxjs';\nimport { filter, takeUntil, switchMap, shareReplay, tap, takeWhile, take, map } from 'rxjs/operators';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { selectThirdPartyRequestDetails, selectRequestDetailsLoading, selectThirdPartyItemOperationsDetailUpdates, selectThirdPartyPendingOperationNotes } from '../../../../reducers/request-details/request-details.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { ThirdPartyProductionService } from '../../../../services/third-party-production.service';\nimport { ThirdPartyRequestItemModel, ThirdPartyRequestModel } from '../../../../models/third-party-request.model';\nimport { Events, EventService, ThirdPartyEvents } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { thirdPartyActions } from '../../../../reducers/request-details/third-party.actions';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { ThirdBulkChangeComponent } from './third-bulk-change/third-bulk-change.component';\nimport { ThirdBulkChangeData, ThirdBulkChangeResponse } from './third-bulk-change/models/third-bulk-change.model';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport {requestDetailsActions} from '../../../../reducers/request-details/request-details.actions';\nimport { of } from 'rxjs';\nimport memoize from 'lodash/memoize';\nimport { TpsPrinter } from '../third-po-sow-tps/tps/models/tps-dialog-data.model';\nimport { ManageCardRangedBulkComponent } from './manage-card-ranges-bulk/manage-card-ranges-bulk.component';\nimport { RequestModel } from 'src/app/requests/models/request.model';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\nimport { LoaderService } from '../../../../../shared/services/loader.service';\n\n@Component({\n selector: 'app-third-int-ext-operations',\n templateUrl: './third-int-ext-operations.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ThirdIntExtOperationsComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n public request: ThirdPartyRequestModel;\n public form: FormGroup;\n public readonly operationsAttachmentsRestriction = {\n fileType: FILE_TYPES.THIRD_PARTY_PRODUCTION.OPS,\n fileSize: FILE_SIZE_RESTRICTIONS.THIRD_PARTY_PRODUCTION.OPS,\n };\n public formValidationTrigger = new Subject();\n\n private ngUnsubscribe = new Subject();\n private prodRangeListeners = new Map();\n private subscriptions: Subscription[] = [];\n private request$ = this.store.pipe(\n select(selectThirdPartyRequestDetails),\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n );\n public selectedItems: boolean[];\n public itemPrinters: Map = new Map();\n private pendingItemUpdates = this.store.select(selectThirdPartyItemOperationsDetailUpdates);\n private pendingNotesUpdates = this.store.select(selectThirdPartyPendingOperationNotes);\n\n public openedState: Map = new Map();\n\n constructor(\n private store: Store,\n private fb: FormBuilder,\n private eventService: EventService,\n private messageService: MessageService,\n private stepActionsService: StepActionsService,\n private cd: ChangeDetectorRef,\n private translate: TranslatePipe,\n private thirdPartyProductionService: ThirdPartyProductionService,\n private modalService: ModalService,\n private loaderService: LoaderService,\n ) {\n super();\n }\n\n private async validatePendingItemsSaved() {\n const hasPendingUpdates = await this.pendingItemUpdates\n .pipe(\n map(pendingUpdates => pendingUpdates.length > 0),\n take(1)\n )\n .toPromise();\n const hasPendingNotesUpdates = await this.pendingNotesUpdates\n .pipe(\n map(pendingNoteUpdates => pendingNoteUpdates != null),\n take(1)\n )\n .toPromise();\n\n if(hasPendingUpdates || hasPendingNotesUpdates) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.third-party.details.warning'),\n this.translate.transform('module.requests.third-party.details.items-should-be-saved-before-operation')\n );\n\n return false;\n }\n return true;\n }\n\n public ngOnInit(): void {\n this.buildForm();\n this.setControlSubs();\n this.setEventsSubs();\n\n const getPrintersCached = memoize(\n (request: ThirdPartyRequestModel) =>\n this.thirdPartyProductionService.getItemPrinters(request.id as unknown as string).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n ),\n (request: ThirdPartyRequestModel) => `${request.id}-${request.stage}-${request.items.map(i => i.id).join('-')}`\n );\n this.request$.pipe(\n switchMap((r) => {\n this.loaderService.showLoader();\n return combineLatest([of(r), getPrintersCached(r)]);\n }),\n takeUntil(this.ngUnsubscribe)\n ).subscribe(([request, printers]) => {\n const printerEntries = request.items.map(i => ([i.id, printers.find(p => p.id === i.id)] as const));\n this.itemPrinters = new Map(printerEntries);\n this.request = cloneDeep(request);\n if(!this.selectedItems) {\n this.selectedItems = this.request.items.map(() => false);\n }\n this.request.items.forEach((i, itemIndex) => {\n if(!this.openedState.has(itemIndex)) {\n this.openedState.set(itemIndex, false);\n }\n });\n\n this.updateForm(request);\n this.toggleFormDisabling();\n this.cd.markForCheck();\n setTimeout(() => {\n this.loaderService.hideLoader();\n }, 0);\n });\n }\n\n public async editCardRanges(): Promise {\n if(! await this.validatePendingItemsSaved()) {\n return;\n }\n this.modalService.openModal(\n ManageCardRangedBulkComponent,\n {\n requestId: this.requestId,\n selectedItems: this.getSelectedItems()\n },\n 'bulk-change-modal',\n true,\n true,\n {\n maxWidth: '96vw',\n minWidth: '80vw',\n }\n )\n .afterClosed()\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(res => {\n if (res === null) {\n return;\n }\n this.selectedItems = this.request.items.map(() => false);\n this.cd.markForCheck();\n this.buildForm();\n this.setControlSubs();\n this.store.dispatch(requestDetailsActions.loadRequestDetailsSuccess({data: res as RequestModel}));\n });\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public uploadOperationsAttachmentFunction = (file) =>\n this.thirdPartyProductionService.uploadOperationsAttachment(this.requestId, file);\n\n public removeOperationsAttachmentFunction = (attachmentId: any) =>\n this.thirdPartyProductionService.deleteOperationsAttachment(this.requestId, attachmentId);\n\n public onUpdateOperationsAttachment(): void {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId}));\n }\n\n public get itemsArray(): FormArray {\n return this.form?.get('items') as FormArray;\n }\n\n public get emptyDevRangeForm(): FormGroup {\n const form = this.fb.group({\n dateReceived: [null],\n startRange: [null],\n endRange: [null],\n rangeLoadRequestDate: [null],\n launchManager: [null],\n rangeLoadCompleteDate: [null],\n });\n\n form.get('startRange').setValidators(UtilsService.startRangeValidationFn(form.get('endRange')));\n form.get('endRange').setValidators(UtilsService.endRangeValidationFn(form.get('startRange')));\n\n return form;\n }\n\n public get emptyProdRangeForm(): FormGroup {\n const form = this.emptyDevRangeForm;\n\n form.addControl('binLoadRequired', this.fb.control(null));\n form.addControl('snowTicket', this.fb.control(null, UtilsService.requiredIfSiblingTrue('binLoadRequired')));\n\n return form;\n }\n\n public get emptyChildForm(): FormGroup {\n return this.fb.group({\n id: [null],\n operationsDetails: this.fb.group({\n devCardRanges: this.fb.array([]),\n prodCardRanges: this.fb.array([]),\n devReturnFileReceivedDate: [null],\n devReturnFileLoadedDate: [null],\n prodReturnFileReceivedDate: [null],\n prodReturnFileLoadedDate: [null],\n childFlagRequired: [null],\n snowTicket: [null], // add\n cardRangesRequired: [null],\n returnFileTypeCode: [{ value: null, disabled: true }],\n }),\n });\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n details: this.fb.group({\n operationsNotes: null,\n }),\n items: this.fb.array([]),\n });\n }\n\n private updateForm(request: ThirdPartyRequestModel): void {\n this.form.patchValue(request, { emitEvent: false });\n\n if (!this.itemsArray.length) {\n request.items.forEach(item => {\n const itemForm = this.emptyItemForm;\n itemForm.patchValue({ ...item }, { emitEvent: false });\n\n this.populateItemArrays(item, itemForm);\n\n this.itemsArray.push(itemForm);\n });\n }\n }\n\n private setControlSubs(): void {\n this.form.get('details.operationsNotes').valueChanges\n .pipe(\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(operationsNotes => {\n this.store.dispatch(thirdPartyActions.updateOperationsNotes({ requestId: this.requestId, operationsNotes }));\n });\n }\n\n public itemOpenedStateChanged(index: number, openedState: boolean) {\n this.openedState.set(index, openedState);\n }\n\n private renewFromServer() {\n this.buildForm();\n this.setControlSubs();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId}));\n return this.store.select(selectRequestDetailsLoading).pipe(\n takeWhile(rdLoading => rdLoading === true, true),\n tap(() => this.cd.detectChanges()),\n takeUntil(this.ngUnsubscribe)\n ).toPromise();\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.eventService.on(ThirdPartyEvents.InternalExternalOperationsValidation, async (elementRef) => {\n if(! await this.validatePendingItemsSaved()) {\n return;\n }\n await this.renewFromServer();\n if (this.form.valid) {\n if (this.request.items.some(item => !item?.operationsDetails?.returnFileTypeCode)) {\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('module.requests.third-party.details.warning'),\n this.translate.transform('module.requests.third-party.details.items-in-tps-error')\n );\n\n return;\n }\n setTimeout(() => {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', ThirdPartyEvents.InternalExternalOperationsSubmit, 'right');\n });\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message'),\n );\n\n this.form.markAllAsTouched();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n\n this.cd.markForCheck();\n }, this.ngUnsubscribe),\n this.eventService.on(ThirdPartyEvents.InternalExternalOperationsSubmit, (event) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n }, this.ngUnsubscribe),\n );\n }\n\n private get emptyItemForm(): FormGroup {\n return this.fb.group({\n id: [null],\n operationsDetails: this.fb.group({\n artApprovedDate: [null, Validators.required],\n inCommDevDataRequest: [null, Validators.required],\n inCommDevDataRequestDate: [null],\n inCommDevIdmsFfid: [null],\n inCommDevDataPostedToPrinterDate: [null],\n inCommProdDataRequest: [null, Validators.required],\n inCommProdDataRequestDate: [null],\n inCommProdIdmsFfid: [null],\n inCommProdDataPostedToPrinterDate: [null],\n returnFileTypeCode: [{ value: null, disabled: true }],\n childFlagRequired: [null],\n snowTicket: [null],\n cardRangesRequired: [null, Validators.required],\n devCardRanges: this.fb.array([]),\n prodCardRanges: this.fb.array([]),\n devReturnFileReceivedDate: [null],\n devReturnFileLoadedDate: [null],\n prodReturnFileReceivedDate: [null],\n prodReturnFileLoadedDate: [null],\n devTestCardsReceivedDate: [null],\n whiteProdCardsReceivedDate: [null],\n prodCardsActivatedForPartnerDate: [null],\n prodCardsSentToPartnerDate: [null],\n prodCardsRedeemedSuccessfullyDate: [null],\n approvedDataProofToPrinterDate: [null],\n approvedLabelProofToPrinterDate: [null],\n inCommDataFileUploadedToCfsDate: [null],\n }),\n childCards: this.fb.array([]),\n });\n }\n // NOSONAR\n private populateItemArrays(item: ThirdPartyRequestItemModel, itemForm: FormGroup): void {\n const devCardRanges = itemForm.get('operationsDetails.devCardRanges') as FormArray;\n const prodCardRanges = itemForm.get('operationsDetails.prodCardRanges') as FormArray;\n\n const childCards = itemForm.get('childCards') as FormArray;\n\n if (item?.operationsDetails?.devCardRanges?.length) {\n item.operationsDetails.devCardRanges.forEach(rangeItem => {\n const devRangeForm = this.emptyDevRangeForm;\n devRangeForm.patchValue(rangeItem);\n\n devCardRanges.push(devRangeForm);\n });\n } else {\n if(item.cardCollateralDetails?.whiteDevCardQuantity !== 0) {\n devCardRanges.push(this.emptyDevRangeForm);\n }\n }\n if (item?.operationsDetails?.prodCardRanges?.length) {\n item.operationsDetails.prodCardRanges.forEach(rangeItem => {\n const prodRangeForm = this.emptyProdRangeForm;\n prodRangeForm.patchValue(rangeItem);\n\n prodCardRanges.push(prodRangeForm);\n this.addProdRangeFormListener(prodRangeForm);\n });\n } else {\n const prodRangeForm = this.emptyProdRangeForm;\n prodCardRanges.push(prodRangeForm);\n this.addProdRangeFormListener(prodRangeForm);\n }\n\n if (item?.childCards?.length) {\n childCards.clear();\n item.childCards.forEach(childCard => {\n const childForm = this.emptyChildForm;\n\n childForm.patchValue(childCard);\n\n const childDevCardRanges = childForm.get('operationsDetails.devCardRanges') as FormArray;\n const childProdCardRanges = childForm.get('operationsDetails.prodCardRanges') as FormArray;\n\n if (childCard?.operationsDetails?.devCardRanges?.length) {\n childCard.operationsDetails.devCardRanges.forEach(rangeItem => {\n const devRangeForm = this.emptyDevRangeForm;\n devRangeForm.patchValue(rangeItem);\n\n childDevCardRanges.push(devRangeForm);\n });\n } else {\n if(item.cardCollateralDetails?.whiteDevCardQuantity !== 0) {\n childDevCardRanges.push(this.emptyDevRangeForm);\n }\n }\n\n if (childCard?.operationsDetails?.prodCardRanges?.length) {\n childCard.operationsDetails.prodCardRanges.forEach(rangeItem => {\n const prodRangeForm = this.emptyProdRangeForm;\n prodRangeForm.patchValue(rangeItem);\n\n childProdCardRanges.push(prodRangeForm);\n this.addProdRangeFormListener(prodRangeForm);\n });\n } else {\n const prodRangeForm = this.emptyProdRangeForm;\n childProdCardRanges.push(this.emptyProdRangeForm);\n this.addProdRangeFormListener(prodRangeForm);\n }\n\n childCards.push(childForm);\n });\n }\n }\n\n public async onBulkChange(): Promise {\n if(!await this.validatePendingItemsSaved()) {\n return;\n }\n this.modalService.openModal(\n ThirdBulkChangeComponent,\n {\n requestId: this.requestId,\n selectedItems: this.getSelectedItems()\n },\n 'bulk-change-modal'\n ).afterClosed().subscribe(() => {\n this.selectedItems = this.request.items.map(() => false);\n this.cd.markForCheck();\n });\n }\n\n private getSelectedItems(): ThirdPartyRequestItemModel[] {\n return this.request.items.filter((item, index) => !!this.selectedItems[index]);\n }\n\n public onSelectAllChange(isChecked: boolean): void {\n this.selectedItems.forEach((item, index, arr) => {\n if (this.request.items[index]?.operationsDetails?.returnFileTypeCode) {\n arr[index] = isChecked;\n }\n });\n }\n\n public isAllChecked(): boolean {\n return !this.selectedItems.includes(false);\n }\n\n public onSelectItemChange(isChecked: boolean, itemIndex): void {\n this.selectedItems[itemIndex] = isChecked;\n }\n\n public getSelectAllLabel(): string {\n return !this.selectedItems.includes(true)\n ? this.translate.transform('common.label.select-all')\n : this.translate.transform('common.label.selected-of', {\n selected: this.selectedItems.filter(item => !!item).length,\n all: this.selectedItems.length\n });\n }\n\n public isBulkChangeDisabled(): boolean {\n return this.selectedItems?.filter(item => item).length <= 1;\n }\n\n public isCardRangeBulkDisabled(): boolean {\n return (\n this.getSelectedItems()?.filter(\n item =>\n item?.operationsDetails?.cardRangesRequired ||\n (item.childCards || []).reduce((acc, c) => acc || c.operationsDetails?.cardRangesRequired, false)\n ).length < 1\n );\n }\n\n public isBulkCheckBoxDisabled(items: ThirdPartyRequestItemModel[]): boolean {\n const enabledItemsCount = this.itemsArray.controls.filter(itemForm => itemForm.get('operationsDetails.returnFileTypeCode').value);\n return items?.length <= 1 || enabledItemsCount?.length <= 1;\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable({ emitEvent: false });\n return;\n }\n\n this.form?.enable({ emitEvent: false });\n this.request?.items?.forEach((item, idx) => {\n if (!item?.operationsDetails?.returnFileTypeCode) {\n this.itemsArray.at(idx).disable({ emitEvent: false });\n }\n });\n }\n\n private addProdRangeFormListener(formGroup: FormGroup): void {\n this.prodRangeListeners.set(formGroup, merge(\n of(formGroup.get('binLoadRequired').value),\n formGroup.get('binLoadRequired').valueChanges\n ).pipe(\n tap(() => {\n formGroup.get('snowTicket').updateValueAndValidity({\n emitEvent: false\n });\n this.cd.markForCheck();\n this.cd.detectChanges();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n }),\n takeUntil(this.ngUnsubscribe),\n ).subscribe()\n );\n }\n\n public removeCardRangeListeners(formGroup: FormGroup): void {\n if (this.prodRangeListeners.has(formGroup)) {\n this.prodRangeListeners.get(formGroup).unsubscribe();\n }\n }\n}\n","
\n
\n {{'module.requests.text.request-items' | translate}}\n
\n
\n \n
\n
\n \n \n
\n
\n
\n
\n \n
\n \n
\n \n
\n\n
\n
\n
\n {{ 'module.requests.third-party.items.product-upc' | translate }}\n {{ request.items[itemIndex]?.productUpc }}\n
\n\n
\n {{ 'module.requests.third-party.items.wpn' | translate }}\n {{ request.items[itemIndex]?.wpn }}\n
\n\n
\n {{ 'module.requests.third-party.items.production-qty' | translate }}\n \n {{ request.items[itemIndex]?.productionQuantity }}\n \n
\n
\n {{ 'module.requests.third-party.items.printer' | translate }}\n \n {{ itemPrinters.get(request.items[itemIndex]?.id)?.tpsPrinterName }}\n \n
\n
\n
\n\n
\n
\n
\n {{ 'module.requests.third-party.items.white-prod-card-qty' | translate }}\n {{ request.items[itemIndex]?.cardCollateralDetails?.whiteProdCardQuantity }}\n
\n\n
\n {{ 'module.requests.third-party.items.finished-prod-card-qty' | translate }}\n {{ request.items[itemIndex]?.cardCollateralDetails?.finishedProdCardQuantity }}\n
\n\n
\n {{ 'module.requests.third-party.items.white-dev-card-qty' | translate }}\n {{ request.items[itemIndex]?.cardCollateralDetails?.whiteDevCardQuantity }}\n
\n\n
\n {{ 'module.requests.third-party.items.total-print-qty' | translate }}\n {{ request.items[itemIndex]?.totalPrintQuantity }}\n
\n
\n\n \n
\n \n
\n
\n\n
\n {{'module.requests.third-party.details.ops-files' | translate}}\n\n
\n \n \n
\n\n
\n \n
\n
\n
\n","import { Injectable } from '@angular/core';\nimport {MilestoneItem, PrinterItemModel} from '../models/printer-item.model';\nimport {API} from '../../shared/constants/api.constants';\nimport {AtPrinterService} from './at-printer.service';\nimport {Observable, of} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {HttpEventType} from '@angular/common/http';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThirdAtPrinterService extends AtPrinterService {\n public getRequestPrinterWorkItems(requestId: string | number) {\n return this.errorHandlingHttpClient.get(`${API.getThirdProdPrinterWorkItems(requestId)}`);\n }\n\n public updateMilestoneDetails(\n requestId: number | string,\n printerItem: PrinterItemModel,\n milestone: MilestoneItem,\n data: any\n ): Observable {\n return this.errorHandlingHttpClient.put(\n API.updateThirdProdMilestoneDetails(requestId, printerItem.printerDetails.id, printerItem.id, milestone.id),\n data\n );\n }\n\n\n\n\n public uploadWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n file: File\n ): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'asn', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n protected createWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n uploadId: string\n ): Observable {\n return this.errorHandlingHttpClient.post(\n `${API.createThirdProdWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId)}`,\n null,\n {\n reportProgress: true,\n observe: 'events',\n params: {uploadId}\n }\n );\n }\n\n public deleteWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n attachmentId: number\n ): Observable {\n return this.errorHandlingHttpClient.delete(\n `${API.deleteThirdProdWorkItemMilestoneAsn(requestId, printerId, itemId, milestoneId, attachmentId)}`\n );\n }\n\n public bulkUpdateAtPrinter(requestId: string, printerId: number, itemId: number, data: any): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.put(`${API.doThirdProdBulkWorkItemMilestoneUpdate(requestId, printerId, itemId)}`, data);\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { merge } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { MilestoneItem, PrinterItemModel } from '../../../../../models/printer-item.model';\nimport { AtPrinterService } from '../../../../../services/at-printer.service';\nimport { FileUploadService } from '../../../../../services/file-upload.service';\nimport { ThirdAtPrinterService } from '../../../../../services/third-at-printer.service';\nimport { BulkChangeComponent } from '../../../common/bulk-change/bulk-change.component';\nimport {\n MilestoneDetailsPayload,\n ThirdProdBulkChangeComponentData,\n ThirdProdBulkChangeComponentResponse,\n} from '../third-bulk-change.interface';\n\n@Component({\n selector: 'app-third-in-production-bulk-change',\n templateUrl: './third-in-production-bulk-change.component.html',\n styleUrls: ['./third-in-production-bulk-change.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: ThirdAtPrinterService\n }\n ]\n})\nexport class ThirdInProductionBulkChangeComponent extends BulkChangeComponent implements OnInit {\n\n protected validationObject = {\n shipDate: null,\n finishedProdCardsReceivedDate: null,\n completed: false,\n files: [],\n bigBoxSamplesProvided: false,\n notes: ''\n };\n\n bulkForm: FormGroup = this.fb.group(\n this.bulkFormTemplate,\n {\n updateOn: 'change',\n validators: (ac: AbstractControl) => (ac?.value\n && !ac.value.shipDate\n && !ac.value.finishedProdCardsReceivedDate\n && !ac.value.completed\n && !ac.value.bigBoxSamplesProvided\n && !ac.value.files?.length\n && !ac.value.notes\n )\n ? {noChanges: true}\n : null\n }\n );\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: ThirdProdBulkChangeComponentData,\n protected cd: ChangeDetectorRef,\n private fb: FormBuilder,\n protected fileUploadService: FileUploadService,\n protected atPrinterService: AtPrinterService\n ) {\n super(cd, atPrinterService, fileUploadService);\n }\n\n ngOnInit(): void {\n this.bulkForm.get('bigBoxSamplesProvided').valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(isBigBoxSamplesChecked => {\n const completed = this.bulkForm.get('completed');\n if (isBigBoxSamplesChecked) {\n completed.patchValue(false);\n completed.enable();\n } else {\n completed.patchValue(false);\n completed.disable();\n }\n completed.updateValueAndValidity();\n });\n\n merge(...[\n this.bulkForm.get('completed').valueChanges,\n this.bulkForm.get('shipDate').valueChanges,\n this.bulkForm.get('finishedProdCardsReceivedDate').valueChanges,\n this.bulkForm.get('notes').valueChanges,\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.bulkForm.get('shipDate').updateValueAndValidity({emitEvent: false});\n this.bulkForm.get('finishedProdCardsReceivedDate').updateValueAndValidity({emitEvent: false});\n this.bulkForm.get('notes').updateValueAndValidity({emitEvent: false});\n this.bulkForm.updateValueAndValidity();\n });\n }\n\n private get bulkFormTemplate(): any {\n return {\n shipDate: this.fb.control(null),\n finishedProdCardsReceivedDate: this.fb.control(null),\n completed: this.fb.control({value: false, disabled: true}),\n files: this.fb.control([]),\n bigBoxSamplesProvided: this.fb.control(false),\n notes: this.fb.control('')\n };\n }\n\n onClose(): void {\n this.dialogRef.close(false);\n }\n\n onCancel(): void {\n this.dialogRef.close(false);\n }\n\n async onSubmit(): Promise {\n if (!this.bulkForm.valid) {\n return;\n }\n\n this.bulkForm.markAllAsTouched();\n this.bulkForm.updateValueAndValidity();\n const {files, ...details}: {files: (File & {progress: number})[]} & MilestoneDetailsPayload['details'] = this.bulkForm.getRawValue();\n\n this.loadingSubject.next(true);\n\n const uploadedFiles = await this.getUploadedFiles(files, this.dialogData.requestId);\n\n const payload: MilestoneDetailsPayload = {\n milestoneIds: this.dialogData.selectedItems.map(sI => sI.id),\n details: { ...details },\n asnFileIds: uploadedFiles\n };\n\n this.getSubmitRequestObservable(payload, this.dialogData.requestId, this.dialogData.printerId, this.dialogData.itemId)\n .subscribe(response => {\n // lest skip response data and just simply trigger reload in the parent element\n this.dialogRef.close(response);\n });\n }\n\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n\n \n\n \n
\n \n {{ error?.error?.message }}\n
\n\n
\n
\n \n {{'module.requests.at-printer.ship-date' | translate}}\n *:\n \n \n
\n
\n \n {{'module.requests.at-printer.finished-received-date' | translate}}\n *:\n \n \n
\n
\n\n \n\n
\n
\n \n
\n
\n\n \n {{ 'module.requests.pop-prod.details.notes-will-be-overwritten' | translate }}\n \n\n \n\n \n\n
\n\n
\n \n \n \n  \n \n
\n \n
\n
\n \n {{ 'common.button.step-submit' | translate }}\n \n \n \n
\n
\n","
\n
\n
\n \n
\n
\n \n {{ 'module.requests.finance.wpn-description' | translate }}:\n {{ milestone.productItem.wpnDescription }}\n \n \n {{ 'module.requests.pop-prod.details.item-description' | translate }}:\n {{ milestone.productItem.itemDescription }}\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n \n \n \n \n
\n \n {{ label | translate }}\n \n \n \n {{ 'module.requests.po.wpn' | translate }}\n \n \n \n {{ data }}\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n\n
\n \n\n \n
\n\n \n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, OnDestroy} from '@angular/core';\nimport {MilestoneItem, PrinterItemModel} from '../../../../../models/printer-item.model';\nimport {combineLatest, Subject, Subscription} from 'rxjs';\nimport {FormGroup} from '@angular/forms';\nimport {debounceTime, filter, takeUntil} from 'rxjs/operators';\nimport {STATUSES} from '../../../../../constants/request-statuses.constant';\nimport {AtPrinterService} from '../../../../../services/at-printer.service';\nimport {ThirdAtPrinterService} from '../../../../../services/third-at-printer.service';\nimport {FILE_TYPES} from '../../../../../../shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from '../../../../../../shared/models/upload-file-restrictions.model';\nimport {selectDielines} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {Store} from '@ngrx/store';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\nimport {lazyLoadDielines} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {selectRequestDetails} from '../../../../../reducers/request-details/request-details.selectors';\n\n@Component({\n selector: 'app-third-printer-milestone',\n templateUrl: './third-printer-milestone.component.html',\n styleUrls: ['./third-printer-milestone.component.scss'],\n encapsulation: ViewEncapsulation.Emulated,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: ThirdAtPrinterService\n }\n ]\n})\nexport class ThirdPrinterMilestoneComponent implements OnInit, OnDestroy {\n @Input() public milestone: MilestoneItem;\n @Input() public isDisabled: boolean;\n @Input() public milestoneIndex: number;\n @Input() public printerIndex: number;\n @Input() public requestId: string;\n @Input() public printerId: number;\n @Input() public itemId: number;\n @Input() public isBigBoxSamplesAvailable: boolean;\n @Output() public milestoneCheck = new EventEmitter();\n @Output() public milestoneValuesChange = new EventEmitter();\n\n public readonly fileRestrictionOptions = {\n fileType: FILE_TYPES.THIRD_PARTY_PRODUCTION.ASN,\n fileSize: FILE_SIZE_RESTRICTIONS.THIRD_PARTY_PRODUCTION.ASN,\n };\n\n private formGroup: FormGroup;\n\n private milestoneFormSubscriptions: Subscription[] = [];\n @Input() public set milestoneForm(milestoneForm: FormGroup) {\n this.formGroup = milestoneForm;\n this.milestoneFormSubscriptions.forEach(s => s.unsubscribe());\n this.milestoneFormSubscriptions = [];\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('finishedProdCardsReceivedDate').valueChanges,\n milestoneForm.get('finishedProdCardsReceivedDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n finishedProdCardsReceivedDate: value,\n completed: this.milestone.details.completed,\n notes: milestoneForm.get('notes').value,\n bigBoxSamplesProvided: milestoneForm.get('bigBoxSamplesProvided')?.value,\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('shipDate').valueChanges,\n milestoneForm.get('shipDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: value,\n finishedProdCardsReceivedDate: milestoneForm.get('finishedProdCardsReceivedDate').value,\n completed: this.milestone.details.completed,\n notes: milestoneForm.get('notes').value,\n bigBoxSamplesProvided: milestoneForm.get('bigBoxSamplesProvided')?.value,\n });\n })\n );\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('notes').valueChanges,\n milestoneForm.get('notes').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(debounceTime(300), takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: milestoneForm.get('shipDate').value,\n finishedProdCardsReceivedDate: milestoneForm.get('finishedProdCardsReceivedDate').value,\n completed: this.milestone.details.completed,\n notes: value,\n bigBoxSamplesProvided: milestoneForm.get('bigBoxSamplesProvided')?.value,\n });\n })\n );\n\n if (this.milestone.details.completed || this.isDisabled) {\n milestoneForm.disable();\n }\n }\n public get milestoneForm(): FormGroup {\n return this.formGroup;\n }\n\n public dielines: CodeNameModel[];\n public status: {status: string};\n private ngUnsubscribe = new Subject();\n\n constructor(\n private atPrinterService: AtPrinterService,\n private store: Store,\n public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void {\n this.status = {\n status: this.milestone.details.completed ? STATUSES.COMPLETED : STATUSES.IN_PROGRESS\n };\n\n if (this.isBigBoxSamplesAvailable) {\n this.milestoneFormSubscriptions.push(\n combineLatest([\n this.milestoneForm.get('bigBoxSamplesProvided').valueChanges,\n this.milestoneForm.get('bigBoxSamplesProvided').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value ]) => {\n this.milestoneValuesChange.emit({\n shipDate: this.milestoneForm.get('shipDate').value,\n finishedProdCardsReceivedDate: this.milestoneForm.get('finishedProdCardsReceivedDate').value,\n completed: this.milestone.details.completed,\n notes: this.milestoneForm.get('notes').value,\n bigBoxSamplesProvided: value,\n });\n })\n );\n }\n\n this.store\n .select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(details => {\n if (details?.status === STATUSES.TERMINATED || this.isDisabled) {\n this.milestoneForm?.disable({emitEvent: false});\n } else if (details && !this.milestone.details.completed) {\n this.milestoneForm?.enable({emitEvent: false});\n }\n });\n\n this.store.dispatch(lazyLoadDielines());\n this.getDielines();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onMilestoneCheck(isChecked: boolean): void {\n this.milestoneCheck.emit(isChecked);\n }\n\n public get isSelectDisabled(): boolean {\n return this.status.status === STATUSES.COMPLETED;\n }\n\n public getTestId(elementId: string): string {\n return `printer_${this.printerIndex}_milestone_${this.milestoneIndex}_${elementId}`;\n }\n\n public uploadFileFunction = (file: File) => this.atPrinterService.uploadWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n file\n );\n\n public removeFileFunction = (attachmentId: number) => this.atPrinterService.deleteWorkItemMilestoneAsn(\n this.requestId,\n this.printerId,\n this.itemId,\n this.milestone.id,\n attachmentId\n );\n\n public updateMilestoneWithUploadedFile(obj: {action: string; data: any}): void {\n if (obj.action === 'add') {\n this.milestone.asnFiles.push(obj.data);\n } else {\n const index = this.milestone.asnFiles.findIndex(item => item?.id === obj.data.id);\n this.milestone.asnFiles.splice(index, 1);\n }\n }\n\n private getDielines(): void {\n this.store.select(selectDielines)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n if (data.length) {\n this.dielines = Object.assign([], data);\n this.cd.markForCheck();\n }\n });\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { filter, map, shareReplay, startWith, switchMap, take, takeUntil } from 'rxjs/operators';\nimport { ThirdAtPrinterService } from 'src/app/requests/services/third-at-printer.service';\n\nimport { API } from '../../../../../shared/constants/api.constants';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { ModalService } from '../../../../../shared/services/modal-service.service';\nimport { MilestoneItem, PrinterItemModel } from '../../../../models/printer-item.model';\nimport { selectThirdPartyRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { AtPrinterService } from '../../../../services/at-printer.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { ThirdProdBulkChangeComponentData, ThirdProdBulkChangeComponentResponse } from './third-bulk-change.interface';\nimport {\n ThirdInProductionBulkChangeComponent,\n} from './third-in-production-bulk-change/third-in-production-bulk-change.component';\n\ninterface PDFFile {\n fileName: string;\n id: number;\n type: string;\n}\n\ninterface PrinterItemModelView extends PrinterItemModel {\n isChecked: boolean;\n formPDFArray: PDFFile[];\n}\n\n@Component({\n selector: 'app-third-in-production',\n templateUrl: './third-in-production.component.html',\n styleUrls: ['./third-in-production.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: ThirdAtPrinterService\n }\n ]\n})\nexport class ThirdInProductionComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n private ngUnsubscribe = new Subject();\n\n request$ = this.store.select(selectThirdPartyRequestDetails).pipe(\n filter(v => !!v),\n );\n\n private printerItemsSubject = new BehaviorSubject(null);\n printerItems$ = this.printerItemsSubject.asObservable().pipe(filter(v => v != null),\n takeUntil(this.ngUnsubscribe));\n\n isBlankState$ = this.printerItems$.pipe(\n map(pi => pi.length === 0),\n startWith(true)\n );\n\n checkedMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => milestone.isChecked)))\n );\n checkableMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => !milestone.details.completed)))\n );\n\n printerForm$ = this.printerItems$.pipe(\n map(pi => this.fb.group({\n printerItems: this.fb.array(\n pi.map(printer =>\n this.fb.group({\n milestones: this.fb.array(\n printer.milestones.map(milestone => {\n const milestoneForm = this.fb.group({\n shipDate: this.fb.control(\n {\n value: milestone.details.shipDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n finishedProdCardsReceivedDate: this.fb.control(\n {\n value: milestone.details.finishedProdCardsReceivedDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n notes: this.fb.control(milestone.details.notes || '', {\n updateOn: 'blur',\n validators: [Validators.maxLength(10000)]\n })\n });\n\n if (this.isBigBoxSamplesAvailable(milestone)) {\n milestoneForm.addControl('bigBoxSamplesProvided',\n this.fb.control({\n value: milestone.details.bigBoxSamplesProvided || false,\n disabled: this.isDisabled || milestone.details.completed,\n }, {\n updateOn: 'blur',\n })\n );\n }\n return milestoneForm;\n }\n )\n )\n })\n )\n )\n })),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(private store: Store,\n private fb: FormBuilder,\n private atPrinterService: AtPrinterService,\n private translateService: TranslateService,\n private modalService: ModalService,\n private eventService: EventService,\n private cd: ChangeDetectorRef,\n private stepActionsService: StepActionsService,\n private translate: TranslateService,\n private messageService: MessageService\n ) {\n super();\n }\n\n private get printerItems(): PrinterItemModelView[] {\n return this.printerItemsSubject.getValue();\n }\n\n ngOnInit(): void {\n this.request$\n .pipe(\n switchMap(request => this.atPrinterService.getRequestPrinterWorkItems(request.id)),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(printerItems => {\n this.setPrinterItems(printerItems);\n });\n\n this.eventService.on(\n Events.AtPrinterSubmitValidated,\n elementRef => {\n if (this.isDisabled) {\n return;\n }\n const isAllMilestonesCompleted = this.printerItems.every(printer =>\n printer.milestones.every(milestone => milestone.details.completed)\n );\n\n if (isAllMilestonesCompleted) {\n this.stepActionsService.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.instant('module.requests.at-printer.mark-complete-required'),\n this.translate.instant('module.requests.at-printer.mark-complete-error')\n );\n },\n this.ngUnsubscribe\n );\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setPrinterItems(printerItems: PrinterItemModel[]) {\n this.printerItemsSubject.next(\n printerItems.map(pi => ({\n /**\n * isChecked aggredated computed property\n */\n get isChecked(): boolean {\n const uncompletedRequests = (this.milestones as MilestoneItem[]).filter(m => !m.details.completed);\n /**\n * Checked if all checkable milestones are checked\n */\n return uncompletedRequests.reduce((c, m) => c && m.isChecked === true, uncompletedRequests.length >= 1);\n },\n set isChecked(isChecked: boolean) {\n this.milestones = this.milestones.map(m => ({...m, isChecked: m.details.completed ? false : isChecked}));\n },\n ...pi,\n milestones: pi.milestones.map(ms => ({...ms, isChecked: false})),\n formPDFArray: pi.purchaseOrderReferences.flatMap(ref => [\n {\n type: 'printer',\n id: ref.id,\n fileName: `PO #${ref.id}.pdf`,\n url: API.thirdProdPoPdfDownload(this.requestId, ref.id, 'printer')\n },\n ...(ref.sowCreated\n ? [\n {\n type: 'sow',\n id: ref.id,\n fileName: `SOW #${ref.id}.pdf`,\n url: API.thirdProdPoPdfDownload(this.requestId, ref.id, 'sow')\n }\n ]\n : [])\n ])\n }))\n );\n }\n\n public getBulkLabel(printerItem: PrinterItemModelView, printerIdx: number): Observable {\n if (printerItem.isChecked) {\n return combineLatest([this.checkedMilestones$, this.checkableMilestones$]).pipe(\n map(([checkedMilestones, checkableMilestones]) => this.translateService.instant('common.label.selected-of', {\n selected: checkedMilestones[printerIdx].length,\n all: checkableMilestones[printerIdx].length\n }))\n );\n }\n return of(this.translateService.instant('common.label.select-all'));\n }\n\n public isBulkCheckboxDisabled(printerIdx: number): Observable {\n return this.checkableMilestones$.pipe(\n map(checkableMilestones => checkableMilestones[printerIdx].length <= 1)\n );\n }\n\n public isBulkDisabled(printerIdx: number): Observable {\n return this.checkedMilestones$.pipe(map(checkedMilestones => checkedMilestones[printerIdx].length <= 1));\n }\n\n public onSelectAllChange(isChecked: boolean, pIdx: number) {\n this.printerItems[pIdx].isChecked = isChecked;\n }\n\n public onBulkClick(printerIdx: number): void {\n const selectedItems: MilestoneItem[] = this.printerItems[printerIdx].milestones.filter(value => value.isChecked);\n\n const dialogRef = this.modalService.openModal(\n ThirdInProductionBulkChangeComponent,\n {\n requestId: this.requestId,\n itemId: this.printerItems[printerIdx].id,\n printerId: this.printerItems[printerIdx].printerDetails.id,\n selectedItems\n },\n 'bulk-change-modal'\n );\n\n dialogRef.afterClosed().subscribe(async dialogResponse => {\n // reload the data if the dialog was not just simply closed\n if (dialogResponse !== false) {\n const data = this.printerItems.map((p, i) => {\n const {isChecked, ...printerItem} = p;\n if (i === printerIdx) {\n return dialogResponse;\n }\n return printerItem;\n });\n this.setPrinterItems([...data]);\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n });\n }\n\n public onMilestoneCheck(isChecked: boolean, printerIdx: number, milestoneIdx: number): void {\n this.printerItems[printerIdx].milestones[milestoneIdx].isChecked = isChecked;\n this.cd.markForCheck();\n }\n\n public onMilestoneValuesChange(details: any, printerIdx: number, milestoneIdx: number): void {\n this.atPrinterService\n .updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n details\n )\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, details.completed);\n });\n }\n\n public isMarkAsCompletedDisabled(printerIdx: number, milestoneIdx: number): Observable {\n return this.printerForm$.pipe(\n map(printerForm => {\n const shipDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.shipDate`);\n const finishedProdCardsReceivedDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.finishedProdCardsReceivedDate`);\n const bigBoxSamplesProvided = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.bigBoxSamplesProvided`);\n\n return (this.isBigBoxSamplesAvailable(this.printerItems[printerIdx]?.milestones[milestoneIdx]) && !bigBoxSamplesProvided?.value)\n || !(shipDate.value && shipDate.valid)\n || !(finishedProdCardsReceivedDate.value && finishedProdCardsReceivedDate.valid);\n })\n );\n }\n\n public onMarkComplete(printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n this.atPrinterService\n .updateMilestoneDetails(this.requestId, this.printerItems[printerIdx], this.printerItems[printerIdx].milestones[milestoneIdx], {\n bigBoxSamplesProvided: this.printerItems[printerIdx].milestones[milestoneIdx].details?.bigBoxSamplesProvided,\n notes: this.printerItems[printerIdx].milestones[milestoneIdx].details?.notes,\n completed: isCompleted,\n shipDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.shipDate || null,\n finishedProdCardsReceivedDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.finishedProdCardsReceivedDate || null\n })\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, isCompleted);\n });\n }\n\n public isBigBoxSamplesAvailable(milestoneItem: MilestoneItem): boolean {\n return milestoneItem.productItem?.encodingType === 'Barcode-UAB'\n && milestoneItem.productItem?.orderTypeCode === 'EXISTING_PARTNER_EXISTING_PRODUCT';\n }\n\n private async onSuccessMilestoneUpdate(data: any, printerIdx: number, milestoneIdx: number, isCompleted: boolean): Promise {\n // Restrict updating with invalid data\n const currentMilestoneForm = (await this.printerForm$.pipe(take(1)).toPromise())\n .get('printerItems.' + printerIdx).get('milestones.' + milestoneIdx);\n\n if (!currentMilestoneForm.valid && !currentMilestoneForm.disabled) {\n return;\n }\n\n const milestone = this.printerItems[printerIdx].milestones[milestoneIdx];\n this.printerItems[printerIdx].milestones[milestoneIdx] = {\n ...milestone,\n details: data,\n isChecked: isCompleted ? false : milestone.isChecked\n };\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.cd.markForCheck();\n }\n}\n","\n \n\n\n \n \n \n
\n {{ 'module.requests.at-printer.printer' | translate }}:\n {{ printerItem.printerDetails.name }}\n
\n
\n
\n

{{ 'module.requests.at-printer.files' | translate }}

\n \n
\n
\n

{{ 'module.requests.at-printer.milestones' | translate }}

\n
\n \n \n {{ 'module.requests.at-printer.bulk-change' | translate }}\n \n
\n
\n \n \n \n {{ 'module.requests.at-printer.mark-complete' | translate }}\n \n\n \n \n {{ 'module.requests.at-printer.cancel-completion' | translate }}\n \n \n
\n
\n
\n
\n
\n
\n\n","import {AbstractControl, FormArray, ValidatorFn} from '@angular/forms';\n\nconst OTHER = 'OTHER';\n\nexport const UniqueComponentCodeValidator: ValidatorFn = (ac: AbstractControl) => {\n if (ac?.parent?.parent && ac.value !== OTHER) {\n const values = ac?.parent?.parent as FormArray;\n\n const hasSame = Array.prototype.reverse.call([...values.controls]).some(control => control.get('componentCode') !== ac && control.get('componentCode').value?.trim() === ac.value?.trim());\n\n if (hasSame) {\n return {\n unique: true\n };\n }\n }\n return null;\n};\n","
\n\n
\n
\n \n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n \n \n
\n
\n\n \n {{ 'module.requests.ih.items.qty-multiplicity-error' | translate : {multiplier: IH_LABELS_QUANTITY_MULTIPLIER.toLocaleString()} }}\n \n\n
\n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n} from '@angular/core';\nimport { AbstractControl, ControlContainer, FormGroup, Validators } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { selectIhComponents } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { UtilsService } from '../../../../../../shared/services/utils.service';\nimport { IH_LABELS_QUANTITY_MULTIPLIER } from '../../../../../constants/request-details.constants';\n\n@Component({\n selector: 'app-ih-prod-item-component-detail',\n templateUrl: './ih-prod-item-component-detail.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhProdItemComponentDetailComponent implements OnInit, OnDestroy {\n @Input() public isDisabled: boolean;\n @Input() public isDeleteBtnVisible: boolean;\n @Input() public itemIndex: number;\n @Input() public componentIdx: number;\n @Input() public formValidationTrigger: Subject;\n @Output() public deleteComponent = new EventEmitter();\n\n public components$ = this.store.select(selectIhComponents)\n .pipe(\n map(items => items.map(({ code, name }) => ({ value: code, label: name }))),\n );\n public IH_LABELS_QUANTITY_MULTIPLIER = IH_LABELS_QUANTITY_MULTIPLIER;\n\n private ngUnsubscribe = new Subject();\n private _isComponentDescriptionRequired: boolean;\n\n constructor(\n @Optional() private controlContainer: ControlContainer,\n private store: Store,\n private cd: ChangeDetectorRef,\n ) {\n }\n\n public ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n this.updateQtyValidators();\n\n this.componentCodeControl.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((code) => {\n this.updateQtyValidators();\n this.isComponentDescriptionRequired = code === 'OTHER';\n });\n\n if (this.componentCodeControl.value === 'OTHER') {\n this.updateQtyValidators();\n this.isComponentDescriptionRequired = true;\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public get componentForm(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get quantityControl(): AbstractControl {\n return this.componentForm.get('quantity');\n }\n\n public get isComponentDescriptionRequired(): boolean {\n return this._isComponentDescriptionRequired;\n }\n\n public set isComponentDescriptionRequired(value) {\n const control = this.componentForm.get('componentDescription');\n\n if (value) {\n control.setValidators(Validators.required);\n } else {\n control.reset();\n control.clearValidators();\n }\n\n control.updateValueAndValidity({ emitEvent: false });\n\n this._isComponentDescriptionRequired = value;\n }\n\n private get componentCodeControl(): AbstractControl {\n return this.componentForm.get('componentCode');\n }\n\n private updateQtyValidators(): void {\n if (this.componentCodeControl.value === 'LABELS') {\n this.quantityControl.setValidators(UtilsService.multiplicityValidationFn(this.IH_LABELS_QUANTITY_MULTIPLIER));\n } else {\n this.quantityControl.clearValidators();\n this.quantityControl.setValidators(Validators.required);\n }\n this.quantityControl.updateValueAndValidity();\n }\n\n}\n","
\n \n
\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n \n
\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n\n
\n
\n
\n \n
\n\n
\n \n
\n\n
1\">\n \n \n \n
\n
\n\n
\n \n \n {{'module.requests.ih.items.add-package' | translate}}\n \n
\n
\n\n
\n
\n \n
\n
\n \n
\n
\n\n
\n \n {{ 'module.requests.ih.items.component-details' | translate }}\n \n\n 1\"\n [formValidationTrigger]=\"formValidationTrigger\"\n (deleteComponent)=\"components.removeAt($event)\"\n >\n\n
\n \n \n {{'module.requests.ih.items.add-component' | translate}}\n \n
\n
\n
\n\n
\n
\n \n \n {{'module.requests.label.duplicate-item' | translate}}\n \n\n \n \n {{'module.requests.label.remove-item' | translate}}\n \n
\n
\n \n\n
\n \n \n \n\n \n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\nimport { ControlContainer, FormArray, FormGroup, Validators } from '@angular/forms';\nimport { Store } from '@ngrx/store';\nimport { Subject } from 'rxjs';\nimport { distinctUntilChanged, map, takeUntil } from 'rxjs/operators';\nimport { selectIhPrioritiesPrioterized, selectRequestItemTypes } from '../../../../../../reducers/ref-data/refdata.selectors';\nimport { DateService } from '../../../../../../shared/services/date-service.service';\nimport { IH_MAX_COMPONENTS_PER_ITEM, IH_MAX_PACKAGES } from '../../../../../constants/request-details.constants';\n\n@Component({\n selector: 'app-ih-prod-item',\n templateUrl: './ih-prod-item.component.html',\n styleUrls: ['./ih-prod-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IhProdItemComponent implements OnInit, OnDestroy, OnChanges {\n @Input() public itemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public emptyPackageForm: FormGroup;\n @Input() public emptyComponentDetailsForm: FormGroup;\n @Input() public isRemoveDisabled: boolean;\n @Input() public formValidationTrigger: Subject;\n @Input() public isExpanded: boolean;\n @Output() private removeItem = new EventEmitter();\n @Output() private copyItem = new EventEmitter();\n\n public IH_MAX_PACKAGES = IH_MAX_PACKAGES;\n public IH_MAX_COMPONENTS_PER_ITEM = IH_MAX_COMPONENTS_PER_ITEM;\n public itemTypes$ = this.store.select(selectRequestItemTypes);\n public priorities$ = this.store\n .select(selectIhPrioritiesPrioterized)\n .pipe(map(items => items.map(({code, name}) => ({value: code, label: name}))));\n\n private ngUnsubscribe = new Subject();\n private _isReplenishRequired: boolean;\n private _isFulfillmentTypeRequired: boolean;\n private _isPriorityCodeRequired: boolean;\n\n constructor(\n private store: Store,\n private controlContainer: ControlContainer,\n private cd: ChangeDetectorRef,\n public dateService: DateService\n ) {}\n\n public ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n this.isReplenishRequired = this.isTypeReplenishment;\n this.isFulfillmentTypeRequired = this.isPackageIdNew;\n this.isPriorityCodeRequired = this.isRushOrder;\n this.setControlsSubs();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onRemove(): void {\n this.removeItem.emit(this.itemIndex);\n }\n\n public onCopy(): void {\n this.copyItem.emit(this.itemIndex);\n }\n\n public onAddPackage(): void {\n this.packages.push(this.emptyPackageForm);\n }\n\n public get itemForm(): FormGroup {\n return this.controlContainer.control as FormGroup;\n }\n\n public get isPackageIdNew(): boolean {\n return this.itemForm.get('packageIdTypeCode').value === 'NEW';\n }\n\n public get isRushOrder(): boolean {\n return !!this.itemForm.get('rushOrder').value;\n }\n\n public get isReplenishRequired(): boolean {\n return this._isReplenishRequired;\n }\n\n public set isReplenishRequired(value: boolean) {\n const control = this.itemForm.get('replenishWithArtChanges');\n\n value ? control.setValidators(Validators.required) : control.clearValidators();\n control.updateValueAndValidity({emitEvent: false});\n\n this._isReplenishRequired = value;\n }\n\n public get isFulfillmentTypeRequired(): boolean {\n return this._isFulfillmentTypeRequired;\n }\n\n public set isFulfillmentTypeRequired(value: boolean) {\n const control = this.itemForm.get('fulfillmentTypeCode');\n\n value ? control.setValidators(Validators.required) : control.clearValidators();\n control.updateValueAndValidity({emitEvent: false});\n\n this._isFulfillmentTypeRequired = value;\n }\n\n public get isPriorityCodeRequired(): boolean {\n return this._isPriorityCodeRequired;\n }\n\n public set isPriorityCodeRequired(value: boolean) {\n const control = this.itemForm.get('priorityCode');\n\n value ? control.setValidators(Validators.required) : control.clearValidators();\n control.updateValueAndValidity({emitEvent: false});\n\n this._isPriorityCodeRequired = value;\n }\n\n public get packages(): FormArray {\n return this.itemForm.get('packages') as FormArray;\n }\n\n public get components(): FormArray {\n return this.itemForm.get('componentDetails') as FormArray;\n }\n\n public get isTypeReplenishment(): boolean {\n return this.itemForm.get('type').value === 'REPLENISHMENT';\n }\n\n public get isTypeNew(): boolean {\n return this.itemForm.get('type').value === null ? null : this.itemForm.get('type').value === 'NEW';\n }\n\n public get isPackageIdTypeCodeNew(): boolean {\n return this.itemForm.get('packageIdTypeCode').value === null ? null : this.itemForm.get('packageIdTypeCode').value === 'NEW';\n }\n\n private setControlsSubs(): void {\n this.itemForm\n .get('type')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => {\n this.isReplenishRequired = this.isTypeReplenishment;\n this.itemForm.get('replenishWithArtChanges').reset();\n });\n this.itemForm\n .get('packageIdTypeCode')\n .valueChanges.pipe(\n distinctUntilChanged(),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.isFulfillmentTypeRequired = this.isPackageIdNew;\n\n [this.itemForm.get('fulfillmentTypeCode'), this.itemForm.get('expirationDateOnCard'), this.itemForm.get('nameOnCard')].forEach(\n ctrl => ctrl.reset()\n );\n });\n\n this.itemForm\n .get('rushOrder')\n .valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => (this.isPriorityCodeRequired = value));\n }\n private toggleForm(): void {\n this.isDisabled ? this.itemForm?.disable() : this.itemForm?.enable();\n this.packages.controls.forEach((p: FormGroup) => (this.isDisabled ? p?.disable() : p?.enable()));\n this.cd.markForCheck();\n }\n\n public dayFilter(date: Date): boolean {\n return this.dateService.isBeforeToday(date);\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Action, ActionsSubject, select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { filter, first, map, takeUntil } from 'rxjs/operators';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\n\nimport {\n clearIhHealthPrograms,\n lazyLoadIhComponents,\n lazyLoadIhHealthPlans,\n lazyLoadIhPriorities,\n lazyLoadRequestItemTypes,\n loadIhHealthPrograms,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport { selectIhHealthPlans, selectIhHealthPrograms } from '../../../../../reducers/ref-data/refdata.selectors';\nimport {\n SelectSearchDropdownOptionsInput,\n} from '../../../../../shared/components/multiselect-search-dropdown/multiselect-search-dropdown.component';\nimport { UserGroups } from '../../../../../shared/constants/user-groups.enum';\nimport { UserModel } from '../../../../../shared/models/user.model';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { MAX_ITEMS_PER_REQUEST } from '../../../../constants/request-details.constants';\nimport { IH_PRODUCTION_REQUEST } from '../../../../constants/request-types.constant';\nimport { IhProductionRequestItemModel, IhProductionRequestModel } from '../../../../models/ih-production-request.model';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport { selectIhRequestDetails, selectAdditionalOtherContacts } from '../../../../reducers/request-details/request-details.selectors';\nimport { RequestsService } from '../../../../services/requests.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { UniqueComponentCodeValidator } from './component-code.validator';\n\n@Component({\n selector: 'app-ih-details',\n templateUrl: './ih-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhDetailsComponent extends AbstractRequestStepComponent\n implements OnInit, OnDestroy, OnChanges, RequestDetailsStageController {\n @Output() private deleteDraft = new EventEmitter();\n\n public form: FormGroup;\n public ppmList: { value: UserModel }[] = [];\n public healthPlans$: Observable = this.store.select(selectIhHealthPlans)\n .pipe(\n map(items => items.map(({ code, name }) => ({ value: code, label: name }))),\n );\n public healthPrograms$: Observable = this.store.select(selectIhHealthPrograms)\n .pipe(\n map(items => items.map(({ code, name }) => ({ value: code, label: name }))),\n );\n public request: IhProductionRequestModel;\n public formValidationTrigger: Subject = new Subject();\n public MAX_ITEMS_PER_REQUEST = MAX_ITEMS_PER_REQUEST;\n public newItemIndex: number;\n\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n private isShowSavedMessage = false;\n\n private request$ = this.store.pipe(\n select(selectIhRequestDetails),\n filter(request => request !== null && request?.type === IH_PRODUCTION_REQUEST),\n takeUntil(this.ngUnsubscribe),\n );\n private additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n\n constructor(\n public utilsService: UtilsService,\n private store: Store,\n private actions: ActionsSubject,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private requestsService: RequestsService,\n private eventService: EventService,\n private messageService: MessageService,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadIhComponents());\n this.store.dispatch(lazyLoadIhHealthPlans());\n this.store.dispatch(lazyLoadIhPriorities());\n this.store.dispatch(lazyLoadRequestItemTypes());\n\n this.buildForm();\n this.toggleFormDisabling();\n this.setControlsSubs();\n this.setEventsSubs();\n this.getPpmList();\n this.getRequest();\n\n this.formValidationTrigger.pipe(takeUntil(this.ngUnsubscribe));\n this.additionalOtherContacts$.pipe(takeUntil(this.ngUnsubscribe)).subscribe((contacts) => {\n this.updateContacts(contacts);\n });\n }\n\n private updateContacts(contacts: UserModel[]) {\n const formArray = this.form.get('details.contacts') as FormArray;\n while (formArray?.length !== 0) {\n formArray?.removeAt(0);\n }\n if (contacts?.length) {\n contacts.forEach(contact => {\n this.pushStakeholderContact(contact);\n });\n } else {\n this.pushStakeholderContact(null);\n }\n if(this.isDisabled) {\n formArray.disable({\n emitEvent: false\n });\n }\n this.cd.markForCheck();\n }\n\n public ngOnDestroy(): void {\n this.store.dispatch(clearIhHealthPrograms());\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public onAddStakeholdersDetails(): void {\n this.pushStakeholderContact(null);\n }\n\n public onRemoveStakeholdersDetails(index: number): void {\n this.additionalStakeholdersDetailsControls.removeAt(index);\n }\n\n public onAddRequestItem(): void {\n this.requestItemsControls.push(this.emptyItemForm);\n this.updateNewItemIndex();\n }\n\n public onRemoveRequestItem(index: number): void {\n this.requestItemsControls.removeAt(index);\n }\n\n public onCopyRequestItem(index: number): void {\n const item: IhProductionRequestItemModel = cloneDeep((this.requestItemsControls.at(index) as FormGroup).getRawValue());\n this.pushItemForm(item);\n this.updateNewItemIndex();\n }\n\n public get additionalStakeholdersDetailsControls(): FormArray {\n return this.form?.get('details.contacts') as FormArray;\n }\n\n public get requestItemsControls(): FormArray {\n return this.form?.get('items') as FormArray;\n }\n\n public pushItemForm(item: IhProductionRequestItemModel, isNew = true): void {\n const itemForm = this.emptyItemForm;\n\n if (item) {\n itemForm.patchValue({ ...item });\n }\n\n if (isNew) {\n itemForm.patchValue({ id: null });\n }\n\n this.populateItemArrays(item, itemForm, isNew);\n\n this.requestItemsControls.push(itemForm);\n if (isNew) {\n this.updateNewItemIndex();\n }\n }\n\n public get emptyPackageForm(): FormGroup {\n return this.fb.group({\n id: [null],\n packageId: [null],\n packageDescription: [null, Validators.required],\n });\n }\n\n public get emptyComponentDetailsForm(): FormGroup {\n return this.fb.group({\n id: [null],\n componentCode: [null, [Validators.required, UniqueComponentCodeValidator]],\n componentDescription: [null],\n fileName: [null, Validators.required],\n quantity: [null, Validators.required],\n notes: [null],\n });\n }\n\n private get emptyItemForm(): FormGroup {\n return this.fb.group({\n id: [null],\n type: [null, Validators.required],\n replenishWithArtChanges: [null],\n deliveryDate: [null, Validators.required],\n packageIdTypeCode: [null, Validators.required],\n fulfillmentTypeCode: [null],\n expirationDateOnCard: [null],\n nameOnCard: [null],\n packages: this.fb.array([]),\n rushOrder: [null, Validators.required],\n priorityCode: [null],\n componentDetails: this.fb.array([]),\n });\n }\n\n private buildForm(): void {\n this.form = this.fb.group({\n details: this.fb.group({\n printProductionManager: [null, Validators.required],\n healthPlanCode: [null, Validators.required],\n healthProgramCode: null,\n contacts: this.fb.array([null]),\n }),\n items: this.fb.array([]),\n });\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable({ emitEvent: false });\n return;\n }\n\n this.form?.enable({ emitEvent: false });\n }\n\n private setControlsSubs(): void {\n this.form.get('details.healthPlanCode').valueChanges\n .pipe(\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(healthPlanCode => {\n this.store.dispatch(loadIhHealthPrograms({ healthPlanCode }));\n this.form.get('details.healthProgramCode').reset();\n });\n }\n\n private updateForm(request: IhProductionRequestModel): void {\n this.form.patchValue(request);\n this.setPPM();\n\n if (request?.details?.contacts?.length) {\n this.additionalStakeholdersDetailsControls.clear();\n request.details.contacts.forEach(contact => this.pushStakeholderContact(contact));\n }\n\n if (request?.items?.length) {\n this.requestItemsControls.clear();\n request.items.forEach(item => this.pushItemForm(item, false));\n } else {\n this.pushItemForm(null);\n }\n }\n\n public async validate(): Promise {\n if(this.form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n this.form.markAllAsTouched();\n this.formValidationTrigger.next(null);\n this.cd.markForCheck();\n return Promise.resolve(this.form.valid);\n }\n\n private setEventsSubs(): void {\n this.subscriptions.push(\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }, this.ngUnsubscribe),\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n this.saveRequest();\n }, this.ngUnsubscribe),\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n if (this.form.valid) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'),\n );\n\n this.form.markAllAsTouched();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n this.utilsService.logInvalidControls(this.form);\n this.cd.markForCheck();\n }, this.ngUnsubscribe),\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n }, this.ngUnsubscribe),\n );\n }\n\n saveRequest(): void {\n const form = this.form.getRawValue();\n\n const items = form.items.map((formItem, idx) => {\n const item = this.request.items[idx];\n\n const componentDetails = formItem.componentDetails.map((formComponent, componentIdx) => {\n const component = item ? item.componentDetails[componentIdx] : {};\n\n return {\n ...component,\n ...formComponent,\n };\n });\n\n return {\n ...(item ? item : {}),\n ...formItem,\n componentDetails,\n };\n });\n\n const request: IhProductionRequestModel = {\n ...this.request,\n details: { ...this.request.details, ...form.details },\n items,\n };\n\n this.getLabelForCode(this.healthPlans$, request.details.healthPlanCode)\n .subscribe(label => {\n request.details.healthPlanName = label || null;\n });\n\n this.getLabelForCode(this.healthPrograms$, request.details.healthProgramCode)\n .subscribe(label => {\n request.details.healthProgramName = label || null;\n });\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({ requestId: this.requestId, details: request,\n excludeParts: ['contacts']\n }));\n }\n\n private getLabelForCode(\n options$: Observable,\n targetCode: string,\n ): Observable {\n return options$.pipe(\n map((options: { label: string; value: string }[]) =>\n options.find(option => option?.value === targetCode)?.label\n ),\n first(),\n );\n }\n\n private getRequest(): void {\n this.request$.subscribe(request => {\n this.request = request;\n\n this.updateForm(this.request);\n this.toggleFormDisabling();\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', this.translateService.instant('common.message.step-saved'), '');\n this.isShowSavedMessage = false;\n }\n });\n }\n\n private getPpmList(): void {\n this.requestsService.getUsers('', [UserGroups.IH_PPM])\n .subscribe(ppmList => {\n this.ppmList = ppmList.map(item => ({ value: item , label: this.utilsService.getFullUserName(item), extras: [item.userName]}));\n this.setPPM();\n });\n }\n\n private setPPM(): void {\n const currentVal = this.ppmList?.find(\n manager => manager?.value?.userName === this.request?.details?.printProductionManager?.userName,\n );\n\n if (currentVal?.value) {\n this.form.get('details.printProductionManager').setValue(currentVal.value);\n }\n }\n\n private pushStakeholderContact(contact: UserModel): void {\n const item = this.fb.control(contact, [UtilsService.userValidationFn()]);\n this.additionalStakeholdersDetailsControls.push(item);\n }\n\n private populateItemArrays(item: IhProductionRequestItemModel, itemForm: FormGroup, isNew: boolean): void {\n const packages = itemForm.get('packages') as FormArray;\n const components = itemForm.get('componentDetails') as FormArray;\n\n if (item?.packages?.length) {\n item.packages.forEach(packageItem => {\n const packageForm = this.emptyPackageForm;\n packageForm.patchValue(packageItem);\n\n if (isNew) {\n packageForm.patchValue({ id: null });\n }\n\n packages.push(packageForm);\n });\n } else {\n packages.push(this.emptyPackageForm);\n }\n\n if (item?.componentDetails?.length) {\n item.componentDetails.forEach(componentItem => {\n const componentForm = this.emptyComponentDetailsForm;\n componentForm.patchValue(componentItem);\n\n if (isNew) {\n componentForm.patchValue({ id: null });\n }\n\n components.push(componentForm);\n });\n } else {\n components.push(this.emptyComponentDetailsForm);\n }\n }\n\n private updateNewItemIndex(): void {\n this.newItemIndex = this.requestItemsControls.controls.length - 1;\n }\n}\n","
\n
\n {{'module.requests.stages.REQUEST_DETAILS' | translate}}\n\n
\n
\n \n \n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n\n \n\n
\n {{'module.requests.text.request-items' | translate}}\n\n \n \n\n
\n \n
\n \n\n \n \n {{'module.requests.details.add-one-item' | translate}}\n \n
\n\n \n\n
\n \n {{'module.requests.details.stakeholder-details' | translate}}\n \n\n
\n
\n \n \n
\n\n \n
\n
\n
\n","import { BaseRequestDetails, BaseRequestModel } from './request.model';\nimport { BaseRequestItemModel } from './request-item.model';\nimport { ArtworkFilesAwareModel, ArtworkFilesAware } from './card-design-request.model';\n\nexport interface IhProductionRequestModel extends BaseRequestModel {\n details: IhProductionRequestDetails;\n items: IhProductionRequestItemModel[];\n}\n\nexport interface IhProductionRequestDetails extends BaseRequestDetails, ArtworkFilesAware<'artworkNotes', 'finalArtFilePath', 'artworks'> {\n estimatedCostTotal: string;\n healthPlanCode: string;\n healthProgramCode: string;\n healthPlanName: string;\n healthProgramName: string;\n\n printerProofs?: any;\n printerProofNotes?: string;\n}\n\nexport interface IhProductionRequestItemModel extends BaseRequestItemModel {\n expirationDateOnCard: boolean;\n fulfillmentTypeCode: string;\n nameOnCard: boolean;\n packageIdTypeCode: string;\n priorityCode: string;\n replenishWithArtChanges: boolean;\n rushOrder: boolean;\n componentDetails: IhComponentDetailsModel[];\n packages: IhPackageModel[];\n itemDescription?: string;\n}\n\nexport interface IhComponentDetailsModel {\n id: number;\n componentCode: string;\n componentDescription?: string;\n costQuote: string;\n fileName: string;\n notes: string;\n quantity: number;\n unitCost: string;\n}\n\n\nexport class IhArtworkFilesAwareModel extends ArtworkFilesAwareModel {\n public files = 'artworks' as const;\n notes = 'artworkNotes' as const;\n path = 'finalArtFilePath' as const;\n constructor() {\n super();\n }\n}\n\nexport interface IhPackageModel {\n id: number;\n packageDescription: string;\n packageId: string;\n}\n","
\n
\n {{'module.requests.upload.upload-artwork-files' | translate}}\n
\n
\n \n \n \n \n {{ 'module.requests.ih.messages.upload-control-error' | translate }}\n \n
\n\n
\n \n \n
\n\n
\n \n
\n
\n
\n
\n
\n\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport {\n FILE_SIZE_RESTRICTIONS,\n RestrictionOptionsObject,\n} from '../../../../../shared/models/upload-file-restrictions.model';\nimport { EventService } from '../../../../../shared/services/event-service.service';\nimport { REQUEST_TYPE } from '../../../../constants/request-types.constant';\nimport {\n ArtworkFileAttachment,\n ArtworkFilesAwareFromModel,\n ArtworkFilesAwareModel,\n} from '../../../../models/card-design-request.model';\nimport { FileUploadService } from '../../../../services/file-upload.service';\n\n@Component({\n selector: 'app-upload-artwork-details-shared',\n templateUrl: './upload-artwork-details-shared.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UploadArtworkDetailsSharedComponent implements OnInit, OnChanges, OnDestroy {\n @Input() public requestModel = new ArtworkFilesAwareModel();\n @Input() public requestDetails: ArtworkFilesAwareFromModel;\n @Input() public requestId: number;\n @Input() public isDisabled: boolean;\n @Input() public requestType: REQUEST_TYPE;\n @Output() costQuoteValueChange?: EventEmitter = new EventEmitter();\n public requestTypes = REQUEST_TYPE;\n public uploadArtworkForm: FormGroup;\n public UserRoles = UserRoles;\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n private subscriptions: Subscription[] = [];\n public uploadArtworkControl = new FormControl(null);\n @Input() testId = 'upload_artwork_details_shared';\n private parentForm: FormGroup;\n @Input() set form(fg: FormGroup) {\n this.uploadArtworkForm = fg;\n this.parentForm = fg;\n }\n get form(): FormGroup {\n return this.parentForm;\n }\n\n get files(): Array {\n return this.requestDetails[this.requestModel.files] || [];\n }\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private fileUploadService: FileUploadService,\n private eventService: EventService\n ) {}\n\n get initialFiles() {\n return this.requestDetails[this.requestModel.files];\n }\n\n ngOnInit(): void {\n this.buildUploadArtworkForm();\n this.subscriptions.push(\n this.eventService.on('upload-form-update', () => {\n this.uploadArtworkForm.patchValue({\n ...(this.requestModel.notes ? {\n artworkNotes: this.requestDetails[this.requestModel.notes],\n }: {}),\n ...(this.requestModel.path ? {\n artworkPath: this.requestDetails[this.requestModel.path]\n }: {})\n });\n this.cd.markForCheck();\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n private buildUploadArtworkForm(): void {\n this.uploadArtworkForm = this.form || this.fb.group({\n ...(this.requestModel.notes ? {\n artworkNotes: this.requestDetails[this.requestModel.notes],\n }: {}),\n ...(this.requestModel.path ? {\n artworkPath: this.requestDetails[this.requestModel.path]\n }: {})\n });\n\n this.toggleForm();\n }\n\n private toggleForm(): void {\n if (this.isDisabled) {\n this.uploadArtworkForm?.disable();\n } else {\n this.uploadArtworkForm?.enable();\n }\n\n this.cd.markForCheck();\n }\n\n public getPermissions(): string | string[] {\n switch (this.requestType) {\n case REQUEST_TYPE.PPR: {\n return UserRoles.POP_PRODUCTION_REQUEST.UPLOAD_ARTWORK['step-submit'];\n }\n default: {\n return '';\n }\n }\n }\n\n public getFileRestrictions(): RestrictionOptionsObject {\n switch (this.requestType) {\n case REQUEST_TYPE.IPR: {\n return {\n fileType: this.fileTypes.IH_PRODUCTION.ARTWORK,\n fileSize: this.fileSizeRestrictions.IH_PRODUCTION.ARTWORK\n };\n }\n case REQUEST_TYPE.PPR: {\n return {\n fileType: this.fileTypes.POP_PRODUCTION.ARTWORK,\n fileSize: this.fileSizeRestrictions.POP_PRODUCTION.ARTWORK\n };\n }\n }\n }\n\n public uploadArtworkFunction = (file) => {\n const type = 'artwork';\n return this.fileUploadService.uploadArtworkForRequestItem(file, this.requestId, this.requestType, type);\n };\n\n public removeArtworkFunction = (attachmentId: string | number) =>\n this.fileUploadService.deleteArtwork(this.requestId, undefined, attachmentId, this.requestType);\n\n public updateAttachments({action, data}: {action: string; data: any}) {\n if (action === 'add') {\n this.requestDetails[this.requestModel.files] = [...this.requestDetails[this.requestModel.files], data];\n this.uploadArtworkControl.setErrors({artworkRequired: null});\n } else {\n const index = this.requestDetails[this.requestModel.files].findIndex(item => item?.id === data);\n this.requestDetails[this.requestModel.files].splice(index, 1);\n }\n }\n\n public populateData(): void {\n const form = this.uploadArtworkForm.getRawValue();\n if(this.requestModel.notes) {\n this.requestDetails[this.requestModel.notes] = form.artworkNotes;\n }\n if(this.requestModel.path) {\n this.requestDetails[this.requestModel.path] = form.artworkPath;\n }\n }\n\n public markControlsAsTouched(): void {\n this.uploadArtworkForm.markAllAsTouched();\n this.cd.markForCheck();\n }\n\n public setErrorAndMarkArtworkControlAsTouched(): void {\n this.uploadArtworkControl.setErrors({artworkRequired: true});\n this.uploadArtworkControl.markAsTouched();\n this.cd.markForCheck();\n }\n\n public ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n}\n","\n
\n
\n
\n {{ 'module.requests.ih.items.component' | translate }}\n {{ component$ | async }}\n
\n
\n \n {{ 'module.requests.ih.items.component-description' | translate }}\n {{ componentDetails.componentDescription }}\n \n
\n
\n
\n
\n {{ 'module.requests.ih.items.file-name-part-no' | translate }}\n {{ componentDetails.fileName }}\n
\n
\n
\n
\n {{ 'common.label.qty' | translate }}\n {{ componentDetails.quantity }}\n
\n \n
\n {{ 'module.requests.ih.items.unit-cost' | translate }}\n ${{ componentDetails.unitCost }}\n
\n
\n \n
\n \n \n
\n
\n
\n {{ 'module.requests.ih.items.cost-quote' | translate }}\n {{ componentDetails.costQuote | currency : 'USD' }}\n
\n
\n
\n
\n {{ 'common.label.notes' | translate }}\n {{ componentDetails.notes }}\n
\n
\n
\n
\n\n\n
\n
\n
\n {{ 'module.requests.ih.items.component' | translate }}\n {{ component$ | async }}\n
\n
\n \n {{ 'module.requests.ih.items.component-description' | translate }}\n {{ componentDetails.componentDescription }}\n \n
\n
\n {{ 'common.label.qty' | translate }}\n {{ componentDetails.quantity }}\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self\n} from '@angular/core';\nimport {IhComponentDetailsModel} from '../../../../../models/ih-production-request.model';\nimport {ControlContainer, FormBuilder} from '@angular/forms';\nimport {debounceTime, filter, map, takeUntil} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {Store} from '@ngrx/store';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {selectIhComponents} from '../../../../../../reducers/ref-data/refdata.selectors';\n\n@Component({\n selector: 'app-ih-item-component',\n templateUrl: './ih-item-component.component.html',\n styleUrls: ['./ih-item-component.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhItemComponentComponent implements OnInit, OnDestroy {\n @Input() componentDetails: IhComponentDetailsModel;\n @Input() isLastComponent: boolean;\n @Input() isUploadArtworkStep?: boolean;\n @Input() isDisabled?: boolean;\n @Input() isPoStage?: boolean;\n\n private ngUnsubscribe = new Subject();\n\n component$ = this.store.select(selectIhComponents).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.componentDetails.componentCode)),\n );\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private store: Store,\n private utilsService: UtilsService,\n @Optional() @Self() public controlContainer: ControlContainer\n ) { }\n\n ngOnInit(): void {\n if (this.isUploadArtworkStep) {\n this.controlContainer.control.get('unitCost').valueChanges\n .pipe(\n debounceTime(500),\n takeUntil(this.ngUnsubscribe)\n ).subscribe(value => {\n this.componentDetails.costQuote = `${value * this.componentDetails.quantity}`;\n this.cd.markForCheck();\n });\n }\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public runChangeDetection(): void {\n this.cd.markForCheck();\n }\n}\n","
\n \n {{ 'module.requests.ih.items.health-plan-program' | translate }}:\n \n {{ requestDetails.healthPlanName }} - {{requestDetails.healthProgramName}}\n \n \n {{ 'module.requests.ih.items.health-plan' | translate }}:\n {{ requestDetails.healthPlanName }}\n \n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { IhProductionRequestDetails } from 'src/app/requests/models/ih-production-request.model';\n\n@Component({\n selector: 'app-ih-item-header',\n templateUrl: './ih-item-header.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhItemHeaderComponent {\n @Input() requestDetails: IhProductionRequestDetails;\n @Input() isItemInvalid?: boolean;\n\n}\n","
\n
\n
\n {{ 'module.requests.ih.items.type-options' | translate }}\n {{ itemTypes$ | async }}\n
\n\n
\n \n {{ 'module.requests.ih.items.replenish' | translate }}\n {{ (item.replenishWithArtChanges ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n\n
\n {{ 'module.requests.ih.items.target-delivery-date' | translate }}\n {{ item.deliveryDate | date : 'MM/dd/yyyy' }}\n
\n\n
\n {{ 'module.requests.ih.items.rush-order' | translate }}\n {{ (item.rushOrder ? 'common.label.yes' : 'common.label.no') | translate }}\n
\n\n
\n {{ 'module.requests.ih.items.priority' | translate }}\n {{ priorities$ | async }}\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport {IhProductionRequestItemModel} from '../../../../../models/ih-production-request.model';\nimport {lazyLoadIhPriorities} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {selectIhPriorities, selectRequestItemTypes} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {filter, map} from 'rxjs/operators';\n\n@Component({\n selector: 'app-ih-item-subheader',\n templateUrl: './ih-item-subheader.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhItemSubheaderComponent implements OnInit{\n @Input() item: IhProductionRequestItemModel;\n\n\n priorities$ = this.store.select(selectIhPriorities).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.priorityCode))\n );\n itemTypes$ = this.store.select(selectRequestItemTypes).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.item.type))\n );\n\n constructor(private utilsService: UtilsService,\n private store: Store) { }\n\n ngOnInit(): void {\n this.store.dispatch(lazyLoadIhPriorities());\n }\n\n}\n","
\n
\n
\n {{ 'module.requests.ih.items.package-id-type' | translate }}\n \n {{ (item.packageIdTypeCode === 'NEW' ? 'module.requests.ih.items.new' : 'module.requests.ih.items.existing') | translate }}\n \n
\n\n \n
\n {{ 'module.requests.ih.items.fulfillment-type' | translate }}\n \n {{ (item.fulfillmentTypeCode === 'BULK' ? 'module.requests.ih.items.bulk' : 'module.requests.ih.items.individual') | translate }}\n \n
\n\n
\n {{ 'module.requests.ih.items.date-on-front' | translate }}\n \n {{ (item.expirationDateOnCard ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n\n
\n {{ 'module.requests.ih.items.name-on-front' | translate }}\n \n {{ (item.nameOnCard ? 'common.label.yes' : 'common.label.no') | translate }}\n \n
\n
\n
\n\n \n
\n
\n {{ 'module.pages.reports.ih.columns.package-id' | translate }}\n {{ packageItem.packageId }}\n
\n\n
\n {{ 'module.pages.reports.ih.columns.package-description' | translate }}\n \n {{ packageItem.packageDescription }}\n \n
\n
\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport {IhProductionRequestItemModel} from '../../../../../models/ih-production-request.model';\n\n\n@Component({\n selector: 'app-ih-item-body',\n templateUrl: './ih-item-body.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhItemBodyComponent {\n @Input() testId = 'ih_item_body';\n @Input() item: IhProductionRequestItemModel;\n @Input() shouldShowPackages = true;\n}\n","\n
\n
\n
\n {{ 'module.requests.ih.items.component' | translate }}\n {{ component$ | async }}\n
\n
\n \n {{ 'module.requests.ih.items.component-description' | translate }}\n {{ componentDetails.componentDescription }}\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n\n
\n \n
\n
\n {{ 'module.requests.ih.items.cost-quote' | translate }}\n {{ componentDetails.costQuote | currency : 'USD' }}\n
\n
\n
\n
\n {{ 'common.label.notes' | translate }}\n {{ componentDetails.notes }}\n
\n
\n
\n
\n\n\n
\n
\n
\n {{ 'module.requests.ih.items.component' | translate }}\n {{ component$ | async }}\n
\n
\n \n {{ 'module.requests.ih.items.component-description' | translate }}\n {{ componentDetails.componentDescription }}\n \n
\n
\n {{ 'common.label.qty' | translate }}\n {{ componentDetails.quantity }}\n
\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit, Optional, Self, SkipSelf} from '@angular/core';\nimport {IhComponentDetailsModel} from '../../../../../models/ih-production-request.model';\nimport {ControlContainer, FormBuilder} from '@angular/forms';\nimport {debounceTime, filter, map, scan, takeUntil} from 'rxjs/operators';\nimport {merge, of, Subject} from 'rxjs';\nimport {Store} from '@ngrx/store';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {selectIhComponents} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport BigJs from 'big.js';\nimport { UpdateTriggerContainer } from '../../../../../../shared/constants/form-field.constant';\n\n@Component({\n selector: 'app-ih-upload-artwork-item-component',\n templateUrl: './ih-upload-artwork-item-component.component.html',\n styleUrls: ['./ih-upload-artwork-item-component.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IhUploadArtworkItemComponentComponent implements OnInit, OnDestroy {\n @Input() componentDetails: IhComponentDetailsModel;\n @Input() isLastComponent: boolean;\n @Input() isDisabled?: boolean;\n @Input() itemIndex = 0;\n @Input() componentIdx = 0;\n\n private ngUnsubscribe = new Subject();\n component$ = this.store.select(selectIhComponents).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.componentDetails.componentCode))\n );\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private store: Store,\n private utilsService: UtilsService,\n @Self() public controlContainer: ControlContainer,\n @Optional() @SkipSelf() private updateTriggerContainer: UpdateTriggerContainer\n ) {}\n\n ngOnInit(): void {\n merge<{unitCost: number; quantity: number}>(\n of({}),\n this.controlContainer.control.get('unitCost').valueChanges.pipe(\n map(value => ({\n unitCost: value || 0\n }))\n ),\n this.controlContainer.control.get('quantity').valueChanges.pipe(\n map(value => ({\n quantity: value || 0\n }))\n )\n )\n .pipe(\n debounceTime(500),\n scan((acc, value) => ({unitCost: value.unitCost ?? acc.unitCost, quantity: value.quantity ?? acc.quantity}), {\n unitCost: this.controlContainer.control.get('unitCost').value,\n quantity: this.controlContainer.control.get('quantity').value\n }),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(({unitCost, quantity}) => {\n this.componentDetails.costQuote = `${new BigJs(unitCost || '0').times(new BigJs(quantity || '0'))}`;\n this.cd.markForCheck();\n });\n\n this.updateTriggerContainer?.updateFormTrigger.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.cd.markForCheck();\n this.cd.detectChanges();\n });\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public runChangeDetection(): void {\n this.cd.markForCheck();\n }\n}\n","\n
\n
\n
\n
\n \n {{ 'module.requests.text.request-items' | translate }}\n \n \n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n \n \n \n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n {{ 'module.pages.reports.ih.upload-artwork.estimated-cost-total' | translate }}\n
\n
\n {{ getEstimatedCostTotal() | currency : 'USD' }}\n
\n
\n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n QueryList,\n SimpleChanges,\n ViewChildren\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {Action, ActionsSubject, Store} from '@ngrx/store';\nimport {TranslateService} from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {Subject} from 'rxjs';\nimport {find, takeUntil} from 'rxjs/operators';\n\nimport {WithPanelExpanded} from '../../../../../shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport {UpdateTriggerContainer, UpdateTriggerContainerInterface} from '../../../../../shared/constants/form-field.constant';\nimport {Events, EventService, IhEvents} from '../../../../../shared/services/event-service.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {RequestStageActions} from '../../../../../shared/services/request-stages.enum';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {REQUEST_TYPE} from '../../../../constants/request-types.constant';\nimport {\n IhArtworkFilesAwareModel,\n IhProductionRequestItemModel,\n IhProductionRequestModel\n} from '../../../../models/ih-production-request.model';\nimport {requestDetailsActions} from '../../../../reducers/request-details/request-details.actions';\nimport {selectIhRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {UploadArtworkItemSharedComponent} from '../../../shared/upload-artwork-shared/upload-artwork-item-shared/upload-artwork-item-shared.component';\nimport {UploadArtworkDetailsSharedComponent} from '../../../shared/upload-artwork-shared/upload-artwork-shared/upload-artwork-details-shared.component';\nimport {IhItemComponentComponent} from '../common/ih-item-component/ih-item-component.component';\n\n@Component({\n selector: 'app-ih-upload-artwork',\n templateUrl: './ih-upload-artwork.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: UpdateTriggerContainer,\n useExisting: forwardRef(() => IhUploadArtworkComponent)\n }\n ]\n})\nexport class IhUploadArtworkComponent\n extends WithPanelExpanded('first')\n implements OnInit, OnDestroy, OnChanges, UpdateTriggerContainerInterface\n{\n @Input() requestId: string = null;\n @Input() isDisabled: boolean = null;\n @ViewChildren(UploadArtworkItemSharedComponent) uploadArtworkItemComponents: QueryList;\n @ViewChildren(IhItemComponentComponent) ihItemComponents: QueryList;\n @ViewChildren(UploadArtworkDetailsSharedComponent) uploadArtworkDetailsComponents: QueryList;\n\n public requestItems: IhProductionRequestItemModel[] = [];\n public requestDetails: IhProductionRequestModel;\n public requestType = REQUEST_TYPE.IPR;\n private ngUnsubscribe = new Subject();\n public uploadArtworkIhForm: FormGroup;\n public uploadRequestDetailsModel = new IhArtworkFilesAwareModel();\n public updateFormTrigger = new Subject();\n\n public get uploadArtworkArray(): FormArray {\n return this.uploadArtworkIhForm.get('itemsArray') as FormArray;\n }\n\n constructor(\n private store: Store,\n private actions: ActionsSubject,\n private cd: ChangeDetectorRef,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private fb: FormBuilder,\n private translateService: TranslateService,\n private utilsService: UtilsService,\n private messageService: MessageService\n ) {\n super();\n }\n ngOnChanges(changes: SimpleChanges): void {\n this.updateFormTrigger.next();\n this.uploadArtworkIhForm && this.uploadArtworkArray?.[this.isDisabled ? 'disable' : 'enable']();\n }\n\n ngOnInit(): void {\n this.uploadArtworkIhForm = this.fb.group({\n itemsArray: this.fb.array([])\n });\n this.store\n .select(selectIhRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n if (requestData?.items?.length) {\n this.initData(requestData);\n }\n });\n\n this.subscribeToEvent();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private initData(requestData: IhProductionRequestModel): void {\n this.requestItems = cloneDeep(requestData.items);\n this.uploadArtworkArray.clear();\n this.requestDetails = cloneDeep(requestData);\n this.buildForm();\n this.eventService.emit({eventName: 'upload-form-update'});\n this.cd.markForCheck();\n this.initExpandedPanels(requestData.items);\n }\n\n private buildForm(): void {\n this.requestItems.forEach((item, itemIndex) => {\n this.uploadArtworkArray.push(\n this.fb.group({\n packages: this.fb.array([]),\n componentDetails: this.fb.array([])\n })\n );\n item.packages.forEach(packageItem => {\n const packagesArray = this.uploadArtworkArray.get(`${itemIndex}.packages`) as FormArray;\n packagesArray.push(\n this.fb.group({\n packageId: this.fb.control(\n {\n value: packageItem.packageId,\n disabled: this.isDisabled\n },\n []\n ),\n packageDescription: this.fb.control(\n {\n value: packageItem?.packageDescription,\n disabled: this.isDisabled\n },\n Validators.required\n )\n })\n );\n });\n item.componentDetails.forEach(componentDetailsItem => {\n const componentDetails = this.uploadArtworkArray.get(`${itemIndex}.componentDetails`) as FormArray;\n componentDetails.push(\n this.fb.group({\n fileName: this.fb.control(\n {\n value: componentDetailsItem.fileName,\n disabled: this.isDisabled\n },\n [Validators.required, Validators.min(0)]\n ),\n quantity: this.fb.control(\n {\n value: componentDetailsItem.quantity,\n disabled: this.isDisabled\n },\n [Validators.required, Validators.min(0)]\n ),\n unitCost: this.fb.control(\n {\n value: componentDetailsItem.unitCost,\n disabled: this.isDisabled\n },\n Validators.required\n )\n })\n );\n });\n });\n }\n\n private subscribeToEvent(): void {\n this.eventService.on(\n IhEvents.UploadArtworkValidation,\n elementRef => {\n if (!this.uploadArtworkIhForm.valid) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message')\n );\n this.uploadArtworkIhForm.markAllAsTouched();\n this.uploadArtworkItemComponents.forEach(uploadArtworkItem => {\n if (uploadArtworkItem.item?.artworks?.length < 1) {\n uploadArtworkItem.setErrorAndMarkArtworkControlAsTouched();\n }\n });\n\n this.uploadArtworkDetailsComponents.forEach(uploadArtworkDetailsComponent => {\n if (uploadArtworkDetailsComponent.files?.length < 1) {\n uploadArtworkDetailsComponent.setErrorAndMarkArtworkControlAsTouched();\n }\n });\n this.ihItemComponents.forEach(ihItem => ihItem.runChangeDetection());\n } else {\n if (!this.checkIsFileUploaded(true)) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('module.requests.ih.messages.upload-artwork-head'),\n this.translateService.instant('module.requests.ih.messages.upload-artwork-desc')\n );\n this.uploadArtworkIhForm.markAllAsTouched();\n return;\n }\n const limitsExceeded = this.isLimitExceed();\n if (limitsExceeded.costQuote || limitsExceeded.costTotal) {\n if (limitsExceeded.costQuote && limitsExceeded.costTotal) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translateService.instant('module.requests.ih.messages.upload-artwork-head'),\n this.translateService.instant('module.requests.ih.messages.unit-cost-limit-both')\n );\n } else {\n this.messageService.showSystemMessage(\n 'warning',\n this.translateService.instant('module.requests.ih.messages.upload-artwork-head'),\n limitsExceeded.costQuote\n ? this.translateService.instant('module.requests.ih.messages.unit-cost-limit-cost-quote')\n : this.translateService.instant('module.requests.ih.messages.unit-cost-limit-cost-total')\n );\n }\n return;\n }\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', IhEvents.UploadArtworkSubmit, 'right');\n }\n this.cd.markForCheck();\n },\n this.ngUnsubscribe\n );\n\n this.eventService.on(\n IhEvents.UploadArtworkSubmit,\n action => {\n this.uploadStepSubmit(action.comment);\n },\n this.ngUnsubscribe\n );\n }\n\n private uploadStepSubmit(comment?: string) {\n this.uploadArtworkItemComponents.forEach(item => item.populateData());\n this.uploadArtworkDetailsComponents.forEach(uploadArtworkDetailsComponent => uploadArtworkDetailsComponent.populateData());\n this.populateData();\n this.requestDetails.items = this.requestItems;\n this.store.dispatch(\n requestDetailsActions.updateRequestDetails({\n requestId: this.requestId,\n details: this.requestDetails\n })\n );\n\n this.actions\n .pipe(\n find(a =>\n [requestDetailsActions.updateRequestDetailsSuccess.type, requestDetailsActions.updateRequestDetailsFailure.type].includes(a.type)\n ),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n this.messageService.showSystemMessage('success', 'Step data was successfully saved', '');\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment\n }\n });\n }\n });\n }\n\n public populateData(): void {\n this.requestItems.forEach((item, itemIndex) => {\n item.packages.forEach((packageItem, packageIndex) => {\n packageItem.packageId = this.uploadArtworkIhForm.get(`itemsArray.${itemIndex}.packages.${packageIndex}.packageId`).value;\n packageItem.packageDescription = this.uploadArtworkIhForm.get(\n `itemsArray.${itemIndex}.packages.${packageIndex}.packageDescription`\n ).value;\n });\n item.componentDetails.forEach((componentDetailsItem, detailsIndex) => {\n componentDetailsItem.fileName = this.uploadArtworkIhForm.get(\n `itemsArray.${itemIndex}.componentDetails.${detailsIndex}.fileName`\n ).value;\n componentDetailsItem.quantity = this.uploadArtworkIhForm.get(\n `itemsArray.${itemIndex}.componentDetails.${detailsIndex}.quantity`\n ).value;\n componentDetailsItem.unitCost = this.uploadArtworkIhForm.get(\n `itemsArray.${itemIndex}.componentDetails.${detailsIndex}.unitCost`\n ).value;\n componentDetailsItem.costQuote = `${Number(componentDetailsItem.unitCost) * componentDetailsItem.quantity}`;\n });\n });\n }\n\n public checkIsFileUploaded(shouldSetErrors?: boolean): boolean {\n let fileUploaded = true;\n this.uploadArtworkItemComponents?.forEach(uploadArtworkItem => {\n if (uploadArtworkItem.item?.artworks?.length < 1) {\n if (shouldSetErrors) {\n uploadArtworkItem.setErrorAndMarkArtworkControlAsTouched();\n }\n fileUploaded = false;\n }\n });\n this.uploadArtworkDetailsComponents?.forEach(uploadArtworkDetailsComponent => {\n if (uploadArtworkDetailsComponent.files?.length < 1) {\n if (shouldSetErrors) {\n uploadArtworkDetailsComponent.setErrorAndMarkArtworkControlAsTouched();\n }\n fileUploaded = false;\n }\n });\n return fileUploaded;\n }\n\n private isLimitExceed(): {costQuote: boolean; costTotal: boolean} {\n let isLimitExceededForCostQuote = false;\n let isLimitExceededForCostTotal = false;\n this.requestItems.forEach(item => {\n item.componentDetails.forEach(componentDetailsItem => {\n if (componentDetailsItem?.costQuote?.split('.')[0].length > 7) {\n isLimitExceededForCostQuote = true;\n }\n });\n });\n if (this.getEstimatedCostTotal()?.toString().split('.')[0].length > 8) {\n isLimitExceededForCostTotal = true;\n }\n return {costQuote: isLimitExceededForCostQuote, costTotal: isLimitExceededForCostTotal};\n }\n\n public getEstimatedCostTotal(): number {\n let sum = 0.0;\n this.requestItems.forEach(item => {\n item.componentDetails.forEach(componentDetailsItem => {\n sum += Number(componentDetailsItem.costQuote);\n });\n });\n return sum ?? 0.0;\n }\n\n public isUploadArtworkSharedInvalidByIndex(itemIndex: number): boolean {\n let isFileUploaded = true;\n this.uploadArtworkItemComponents?.forEach((uploadArtworkItemComponent, index) => {\n if (uploadArtworkItemComponent?.item?.artworks?.length < 1 && index === itemIndex) {\n isFileUploaded = false;\n }\n });\n return !isFileUploaded;\n }\n}\n","
\n \n
\n {{'module.pages.reports.ih.upload-artwork.estimated-cost-total' | translate}}\n
\n
\n \n
\n {{'module.pages.reports.ih.upload-artwork.final-cost-total' | translate}}\n
\n
\n
\n {{ costTotal | currency : 'USD'}}\n
\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-ih-cost-total',\n templateUrl: './ih-cost-total.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhCostTotalComponent {\n @Input() costTotal: string;\n @Input() isEstimatedCost?: boolean;\n\n}\n","\n
\n
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n\n
\n
\n {{ 'module.requests.upload.artwork-files' | translate }}\n\n \n
\n
\n \n\n
\n
\n {{'module.requests.upload.final-art-file-path' | translate}}:\n {{requestDetails?.details && requestDetails?.details[uploadRequestDetailsModel.path]}}\n
\n
\n {{'common.label.note' | translate}}:\n {{requestDetails?.details && requestDetails?.details[uploadRequestDetailsModel.notes]}}\n
\n
\n\n
\n
\n\n \n
\n
\n
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Subject, Subscription } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { IhProductionRequestItemModel, IhProductionRequestModel } from 'src/app/requests/models/ih-production-request.model';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport cloneDeep from 'lodash/cloneDeep';\nimport flatten from 'lodash/flatten';\nimport includes from 'lodash/includes';\nimport _map from 'lodash/map';\nimport { UtilsService } from 'src/app/shared/services/utils.service';\nimport { ARTWORK_STATUSES } from 'src/app/requests/constants/artwork-file-statuses.constants';\nimport { MessageService } from 'src/app/shared/services/message-service.service';\nimport { Events, EventService, IhEvents } from 'src/app/shared/services/event-service.service';\nimport { StepActionsService } from 'src/app/requests/services/step-actions.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\nimport { IhArtworkFilesAwareModel } from '../../../../models/ih-production-request.model';\nimport { selectIhRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\n\n@Component({\n selector: 'app-ih-requester-review',\n templateUrl: './ih-requester-review.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhRequesterReviewComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n public requestItems: IhProductionRequestItemModel[] = [];\n public requestDetails: IhProductionRequestModel;\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n public uploadRequestDetailsModel = new IhArtworkFilesAwareModel();\n\n constructor(private store: Store,\n private cd: ChangeDetectorRef,\n private messageService: MessageService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private translate: TranslateService) {\n super();\n }\n\n ngOnInit(): void {\n this.store.select(selectIhRequestDetails)\n .pipe(\n filter(requestData => !!requestData?.items?.length),\n takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n this.initData(requestData);\n });\n this.setStepSubmitSubscription();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private initData(requestData: IhProductionRequestModel) {\n this.requestItems = cloneDeep(requestData.items);\n this.requestDetails = cloneDeep(requestData);\n this.cd.markForCheck();\n }\n\n public getFilesStatus(files): string {\n return UtilsService.getFilesAggregatedStatus(files);\n }\n\n private isAllArtworkItemsApproved(): boolean {\n const statuses = _map(flatten(_map(this.requestItems, (item) => item.artReview)), (artReview) => artReview.status);\n const hasUnreviewed = includes(statuses, ARTWORK_STATUSES.unreviewed);\n const hasRejected = includes(statuses, ARTWORK_STATUSES.rejected);\n\n return !(hasUnreviewed || hasRejected);\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(IhEvents.ArtworkApproveValidation, (elementRef) => {\n\n if (this.isAllArtworkItemsApproved()) {\n this.stepActionsService.addReason(elementRef,\n 'step-approve', 'step-approve', IhEvents.ArtworkApprove, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.approve.approve-required'),\n this.translate.instant('module.requests.approve.approve-stage-error'));\n }\n }),\n this.eventService.on(IhEvents.ArtworkApprove, ({comment}) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n })\n );\n }\n}\n","import {Component, Input, OnDestroy} from '@angular/core';\nimport {Subscription, Subject} from 'rxjs';\n\n@Component({template: ''})\nexport abstract class AbstractUnsubscribableRequestStepComponent implements OnDestroy {\n @Input() requestId: string;\n @Input() isDisabled: boolean;\n\n protected ngUnsubscribe = new Subject();\n protected subscriptions: Subscription[] = [];\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n this.subscriptions.forEach(s => s.unsubscribe());\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Actions } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\n\nimport { API } from '../../shared/constants/api.constants';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\nimport { Events, EventService } from '../../shared/services/event-service.service';\nimport { IhProdPoModel } from '../models/ih-prod-po.model';\nimport { FileDownloadService } from './file-download.service';\nimport { FileUploadService } from './file-upload.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IhProductionRequestService {\n private poDetails = new ReplaySubject(1);\n\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private fileUploadService: FileUploadService,\n private http: HttpClient,\n private actions$: Actions,\n private store: Store,\n private fileDownloadService: FileDownloadService,\n private eventService: EventService\n ) {}\n\n public getPOListener(): Observable {\n return this.poDetails.asObservable();\n }\n\n public callPO(requestId: number | string): void {\n this.errorHandlingHttp.get(`${API.ihProdPo(requestId)}`).subscribe((data: IhProdPoModel[]) => {\n this.poDetails.next(data);\n });\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n }\n\n public resetPO(): void {\n this.poDetails.next([]);\n }\n\n public downloadPoPdf(requestId: string | number, poId: number, type: string): void {\n this.fileDownloadService.downloadFile(API.ihProdPoPdfDownload(requestId, poId, type));\n }\n\n public createPO(requestId: number | string, data: any): Observable {\n const reqObj = Object.assign(data);\n return this.errorHandlingHttp.post(`${API.ihProdPo(requestId)}`, reqObj);\n }\n\n public updatePO(requestId: number | string, poId: number, data: any): Observable {\n const observable = new Subject();\n\n const reqObj = Object.assign(data);\n this.errorHandlingHttp.put(`${API.ihProdUpdatePO(requestId, poId)}`, reqObj)\n .subscribe(response => {\n this.callPO(requestId);\n observable.next(response);\n }, error => observable.error(error));\n return observable.asObservable();\n }\n\n public deletePO(requestId: number | string, poId: number): Observable {\n const observable = new Subject();\n\n this.errorHandlingHttp.delete(`${API.ihProdUpdatePO(requestId, poId)}`)\n .subscribe(() => {\n this.callPO(requestId);\n observable.next();\n }, err => observable.error(err));\n\n return observable.asObservable();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport {switchMap, tap} from 'rxjs/operators';\nimport { MessageService } from '../../shared/services/message-service.service';\nimport { ModalService } from '../../shared/services/modal-service.service';\nimport { BasePoModel } from '../models/po.model';\nimport { requestDetailsActions } from '../reducers/request-details/request-details.actions';\nimport {EMPTY, Observable} from 'rxjs';\nimport { IhProductionRequestService } from 'src/app/requests/services/ih-production-requests.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IhPoManageService {\n\n constructor(\n private ihRequestsService: IhProductionRequestService,\n private messageService: MessageService,\n private modalService: ModalService,\n private translate: TranslateService,\n private store: Store,\n ) {}\n\n public deletePoItem(requestId: string | number, poItem: BasePoModel): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.delete-po-header', {number: poItem.id}),\n this.translate.instant('module.requests.po.modal.delete-po-desc2'),\n this.translate.instant('common.button.delete'),\n this.translate.instant('common.button.cancel'),\n ).afterClosed()\n .pipe(\n switchMap((v) => v ? this.ihRequestsService.deletePO(requestId, poItem.id) : EMPTY),\n tap(() => {\n this.messageService.showSystemMessage('success',\n this.translate.instant('module.requests.po.po-deleted', {id: poItem.id}));\n })\n );\n }\n\n public onClosePO(dialogRef: MatDialogRef,\n showModal: boolean,\n requestId: string | number): void {\n if (showModal) {\n this.modalService.openConfirmationModal(\n this.translate.instant('common.modal.close-header'),\n this.translate.instant('common.modal.close-desc', {type: 'PO'}),\n ).afterClosed().subscribe((isConfirmed: boolean) => {\n if (isConfirmed) {\n this.onCloseSuccess(dialogRef, requestId);\n }\n });\n } else {\n this.onCloseSuccess(dialogRef, requestId);\n }\n }\n\n private onCloseSuccess(dialogRef: MatDialogRef, requestId: string | number): void {\n dialogRef.close();\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: requestId as string}));\n this.ihRequestsService.callPO(requestId);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {ItemShipments} from '../models/request-item.model';\nimport {UtilsService} from '../../shared/services/utils.service';\nimport {IhProductionRequestItemModel, IhComponentDetailsModel} from '../models/ih-production-request.model';\nimport BigJs from 'big.js';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IhPoFormService {\n constructor(private fb: FormBuilder) {}\n\n get initialPoForm(): FormGroup {\n return this.fb.group({\n printerInfo: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(null),\n addressLine2: this.fb.control(null),\n addressLine3: this.fb.control(null),\n city: this.fb.control(null),\n country: this.fb.control(null),\n postalCode: this.fb.control(null),\n stateProvince: this.fb.control(null)\n }),\n contact: this.fb.group({\n attention: this.fb.control(null),\n cell: this.fb.control(null),\n email: this.fb.control(null),\n phone: this.fb.control(null)\n }),\n name: this.fb.control(null, [Validators.required, UtilsService.printerInfoValidationFn()]),\n mdmId: this.fb.control(null),\n id: this.fb.control(null)\n }),\n billingInfo: this.fb.group({\n additionalCosts: this.fb.control('0'),\n credit: this.fb.control('0'),\n freight: this.fb.control('0'),\n otherFee: this.fb.control('0'),\n packageIdSetupFee: this.fb.control('0'),\n rebillRate: this.fb.control('0'),\n rebillTotalAmount: this.fb.control('0'),\n rushFee: this.fb.control('0'),\n taxes: this.fb.control('0')\n }),\n items: this.fb.array([]),\n miscItems: this.fb.array([]),\n instructions: this.fb.control(null, [Validators.maxLength(1024)]),\n stakeholders: this.fb.group({\n approver3: this.fb.control(null)\n })\n });\n }\n\n getFormItem(item: IhProductionRequestItemModel): FormGroup {\n return this.fb.group({\n componentDetails: this.initItemComponentDetails(item),\n shipments: this.getFormitemShipments(item)\n });\n }\n\n getSubtotalByItem(item: IhProductionRequestItemModel) {\n return item.componentDetails.reduce((acc, componentDetails) => acc.add(this.getSubtotalByComponent(componentDetails)), new BigJs('0'));\n }\n\n getSubtotalByComponent(componentDetails: IhComponentDetailsModel) {\n return new BigJs(componentDetails?.unitCost || '0').times(componentDetails?.quantity || 0);\n }\n\n getTotalQtyByItem(item: IhProductionRequestItemModel) {\n return item.componentDetails.reduce((acc, componentDetails) => acc + (componentDetails?.quantity || 0), 0);\n }\n\n getEmptyFormComponentDetails(componentDetails?: IhComponentDetailsModel) {\n return this.getFormItemComponentDetails(componentDetails);\n }\n\n getFormItemShipment(shipment?: ItemShipments): FormGroup {\n return this.fb.group({\n quantity: this.fb.control(shipment?.quantity ?? null),\n warehouse: this.fb.group(\n {\n address: this.fb.group({\n addressLine1: [shipment?.warehouse?.address?.addressLine1 || null],\n addressLine2: [shipment?.warehouse?.address?.addressLine2 || null],\n city: [shipment?.warehouse?.address?.city || null],\n country: [shipment?.warehouse?.address?.country || null],\n postalCode: [shipment?.warehouse?.address?.postalCode || null],\n stateProvince: [shipment?.warehouse?.address?.stateProvince || null]\n }),\n contact: this.fb.group({\n email: [shipment?.warehouse?.contact?.email || null],\n phone: [shipment?.warehouse?.contact?.phone || null],\n cell: [shipment?.warehouse?.contact?.cell || null],\n attention: [shipment?.warehouse?.contact?.attention || null]\n }),\n name: this.fb.control(shipment?.warehouse || null, [Validators.required, ac => ac?.value?.name ? null : {required: true}]),\n id: this.fb.control(shipment?.warehouse?.id || null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null)\n },\n {validators: [Validators.required]}\n )\n });\n }\n\n isItemsOrdersQtyAllocated(items: IhProductionRequestItemModel[]): boolean {\n return items.every(this.isItemOrderQtyAllocated);\n }\n\n isItemOrderQtyAllocated(item: IhProductionRequestItemModel): boolean {\n const shipmentsQty = item.shipments.reduce((qty, shipment) => Number(qty) + Number(shipment?.quantity) || 0, 0);\n return shipmentsQty === item.componentDetails.reduce((acc, componentDetails) => acc + Number(componentDetails.quantity), 0);\n }\n\n private getFormitemShipments(item: IhProductionRequestItemModel): FormArray {\n return this.fb.array(item.shipments.length ? item.shipments.map(this.getFormItemShipment.bind(this)) : [this.getFormItemShipment()]);\n }\n\n private initItemComponentDetails(item?: IhProductionRequestItemModel): FormArray {\n if (!item?.componentDetails?.length) {\n return this.fb.array(item.componentDetails.map(cd => this.getEmptyFormComponentDetails(cd)));\n }\n\n return this.fb.array(item.componentDetails.map(this.getFormItemComponentDetails.bind(this)));\n }\n\n private getFormItemComponentDetails(details: IhComponentDetailsModel): FormGroup {\n return this.fb.group({\n id: this.fb.control(details?.id || null),\n componentCode: this.fb.control(details?.componentCode || null),\n componentDescription: this.fb.control(details?.componentDescription || null),\n costQuote: this.fb.control(details?.costQuote || null),\n fileName: this.fb.control(details?.fileName || null),\n notes: this.fb.control(details?.notes || null),\n quantity: this.fb.control(details?.quantity ?? null),\n unitCost: this.fb.control(details?.unitCost || null)\n });\n }\n\n public getEmptyShipmentItem(): ItemShipments {\n return {\n quantity: null,\n warehouse: {\n mdmId: null,\n name: null,\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n postalCode: null,\n stateProvince: null\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null\n }\n }\n };\n }\n}\n","
\n
\n {{ 'module.requests.ih.po.component-type' | translate }}:\n {{ details?.componentCode }}\n
\n
\n \n {{ 'module.requests.ih.items.component-description' | translate }}* :\n {{ details.componentDescription }}\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n {{ 'module.requests.ih.po.subtotal-by-component' | translate }}:\n \n ${{ getSubtotalByComponent(form.getRawValue()) || 0}}\n \n
\n
\n","import {ChangeDetectionStrategy, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {Subject} from 'rxjs';\nimport {filter, map, takeUntil} from 'rxjs/operators';\n\nimport {selectIhComponents} from '../../../../../../../../reducers/ref-data/refdata.selectors';\nimport {UtilsService} from '../../../../../../../../shared/services/utils.service';\nimport {IhComponentDetailsModel} from '../../../../../../../models/ih-production-request.model';\nimport {IhPoFormService} from '../../../../../../../services/ih-po-form.service';\nimport {ControlContainer, FormArray, FormGroup} from '@angular/forms';\n\n@Component({\n selector: 'app-ih-po-form-component-details',\n templateUrl: './ih-po-form-component-details.component.html',\n styleUrls: ['./ih-po-form-component-details.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IhPoFormComponentDetailsComponent implements OnInit, OnDestroy {\n @Input() testId = 'ih_po_component_details';\n @Input() details: IhComponentDetailsModel;\n @Input() detailIndex: number;\n @Input() isOneComponentDescriptionExist: boolean;\n protected ngUnsubscribe = new Subject();\n\n component$ = this.store.select(selectIhComponents).pipe(\n filter(v => v?.length > 0),\n map(v => this.utilsService.getItemName(v, this.details?.componentCode)),\n takeUntil(this.ngUnsubscribe)\n );\n\n form: FormGroup;\n\n constructor(public ihPoFormService: IhPoFormService,\n private store: Store,\n private utilsService: UtilsService,\n private controlContainer: ControlContainer) {\n }\n\n ngOnInit(): void {\n this.form = ((this.controlContainer.control as FormGroup).get('componentDetails') as FormArray).controls[this.detailIndex] as FormGroup;\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public getSubtotalByComponent(details: IhComponentDetailsModel) {\n return this.ihPoFormService?.getSubtotalByComponent(details);\n }\n}\n","\n
\n \n\n \n \n \n
\n\n
\n \n \n
\n
\n \n {{ 'module.requests.ih.po.health-plan' | translate }}* :\n \n {{ request.details.healthPlanName }}\n
\n
\n \n {{ 'module.requests.ih.po.health-program' | translate }}* :\n \n {{ request.details.healthProgramName }}\n
\n
\n\n
\n {{ 'module.requests.ih.po.item-and-component-details' | translate }}:\n\n
\n
\n
\n
\n
\n
\n {{ 'module.pages.reports.ih.columns.package-id' | translate }}:\n {{ packageItem.packageId }}\n
\n
\n
\n
\n {{ 'module.pages.reports.ih.columns.package-description' | translate }}:\n {{ packageItem.packageDescription }}\n
\n
\n
\n
\n
\n {{ 'module.requests.ih.po.total-by-item' | translate }}:\n \n ${{ ihPoFormService.getSubtotalByItem(itemForm.value) || 0 }}\n \n
\n
\n \n
\n\n \n\n \n \n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {FormArray, FormGroup} from '@angular/forms';\n\nimport {CodeNameModel} from '../../../../../../../shared/models/code-name.model';\nimport {IhProductionRequestItemModel, IhProductionRequestModel} from '../../../../../../models/ih-production-request.model';\nimport {IhPoFormService} from '../../../../../../services/ih-po-form.service';\nimport memoize from 'lodash/memoize';\n\n@Component({\n selector: 'app-ih-po-form-item',\n templateUrl: './ih-po-form-item.component.html',\n styleUrls: ['./ih-po-form-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IhPoFormItemComponent implements OnInit {\n @Input() item: IhProductionRequestItemModel;\n @Input() itemForm: FormGroup;\n @Input() itemIndex: number;\n @Input() isDisabled: boolean;\n @Input() componentList: CodeNameModel[];\n @Input() request: IhProductionRequestModel;\n\n @Output() public deleteItem: EventEmitter = new EventEmitter();\n\n testId = memoize(() => ['ih_po_form_item', this.itemIndex].join('_'))();\n public isOneComponentDescriptionExist: boolean;\n\n constructor(public ihPoFormService: IhPoFormService, private cd: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.isComponentDescriptionExist();\n }\n\n get componentDetails(): FormArray {\n return this.itemForm?.get('componentDetails') as FormArray;\n }\n\n get itemTotalPrice(): number {\n return this.componentDetails?.controls.reduce(\n (acc, currControls) => acc + Number(currControls.get('unitCost').value) * Number(currControls.get('quantity').value),\n 0\n );\n }\n\n get emptyShipmentControl(): FormGroup {\n return this.ihPoFormService.getFormItemShipment();\n }\n\n get totalQty() {\n return (this.itemForm.controls.componentDetails as FormArray).controls.reduce((acc, control) => acc + Number(control.get('quantity').value), 0);\n }\n\n public delete(): void {\n this.cd.markForCheck();\n this.deleteItem.emit(this.itemIndex);\n }\n\n private isComponentDescriptionExist(): void {\n this.isOneComponentDescriptionExist = this.item.componentDetails.some(details => details.componentDescription);\n }\n}\n","
\n
\n

\n PO â„–{{ dialogData.po?.id }}\n {{ 'module.requests.po.new-po' | translate }}\n

\n
\n \n \n {{ 'module.requests.po.printer' | translate }}\n \n \n \n {{ 'common.button.delete' | translate }}\n \n \n {{ 'common.button.save' | translate }}\n \n \n
\n
\n \n
\n \n \n
\n {{ 'module.requests.po.printer-info' | translate }}:\n
\n \n
\n \n
\n \n
\n {{ 'module.requests.po.item-info' | translate }}\n \n
\n \n
\n {{ 'module.requests.po.miscellaneous-items' | translate }}\n \n
\n \n
\n {{ 'module.requests.po.special' | translate }}\n\n
\n {{ 'module.requests.po.additional-fees' | translate }}:\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n\n \n
\n\n
\n
\n
\n {{ 'module.requests.po.total-quantity' | translate }}:\n
\n
\n {{ getTotalQty() }}\n
\n
\n\n
\n
\n {{ 'module.requests.po.sub-total' | translate }}:\n
\n
\n ${{ subTotal }}\n
\n
\n\n
\n
\n {{ 'module.requests.ih.po.rush-fee' | translate }}:\n
\n
\n {{poForm?.get('billingInfo')?.get('rushFee').value | currency}}\n
\n
\n\n
\n
\n {{ 'module.requests.ih.po.package-id-setup-fee' | translate }}:\n
\n
\n {{poForm?.get('billingInfo')?.get('packageIdSetupFee').value | currency}}\n
\n
\n\n
\n
\n {{ 'module.requests.ih.po.other-fee' | translate }}:\n
\n
\n {{poForm?.get('billingInfo')?.get('otherFee').value | currency}}\n
\n
\n\n
\n
\n {{ 'module.requests.ih.po.credit' | translate }}:\n
\n
\n \n
\n
\n\n
\n
\n {{ 'module.requests.po.total' | translate }}:\n
\n
\n {{ getTotal() | currency }}\n\n \n \n {{ 'module.requests.pop-prod.details.version-qty-max' | translate }}\n \n
\n
\n
\n
\n
\n stakeholders\n
\n
\n
\n
\n
\n {{ 'module.requests.po.requestor-approver' | translate }}\n {{ 'module.requests.po.signature' | translate }}\n {{ 'module.requests.po.date' | translate }}\n
\n
\n
\n
\n {{ 'module.requests.po.buyer' | translate }}\n \n {{ poDetails.stakeholders.buyer.firstName + ' ' + poDetails.stakeholders.buyer.lastName }}\n \n \n -\n \n
\n
\n {{ 'module.requests.po.approval1' | translate }}\n \n {{ poDetails.stakeholders.approver1 }}\n \n -\n
\n
\n {{ 'module.requests.po.approval2' | translate }}\n \n {{ poDetails.stakeholders.approver2 }}\n \n -\n
\n
\n {{ 'module.requests.po.approval3' | translate }}\n
\n \n
\n
\n
\n
\n
\n
\n {{'module.requests.ih.po.gl-code'|translate}}\n
\n\n

{{ 'module.requests.po.notice' | translate }}

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

\n {{ 'module.requests.po.item-info' | translate }}\n \n

\n \n
\n
\n\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core';\nimport {FormArray, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {Observable, Subject, Subscription} from 'rxjs';\nimport {filter, take, takeUntil} from 'rxjs/operators';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {IhPoDialogData} from './ih-po-dialog-data.model';\nimport {Events, EventService} from '../../../../../../shared/services/event-service.service';\nimport {MessageService} from '../../../../../../shared/services/message-service.service';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqualWith from 'lodash/isEqualWith';\nimport BigJs from 'big.js';\nimport {MAX_PO_TOTAL} from '../../../../../constants/request-details.constants';\nimport {IhPoManageService} from '../../../../../services/ih-po-manage.service';\nimport {IhProdPoModel} from '../../../../../models/ih-prod-po.model';\nimport {IhProductionRequestService} from '../../../../../services/ih-production-requests.service';\nimport {IhProductionRequestItemModel} from '../../../../../models/ih-production-request.model';\nimport {IhPoFormService} from '../../../../../services/ih-po-form.service';\n\n@Component({\n selector: 'app-ih-po-form',\n templateUrl: './ih-po-form.component.html',\n styleUrls: ['./ih-po-form.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IhPoManageService]\n})\nexport class IhPoFormComponent implements OnInit, OnDestroy {\n poForm: FormGroup;\n itemsArr: FormArray;\n dialogData: IhPoDialogData;\n availableItems: IhProductionRequestItemModel[];\n price: number;\n itemsLengthChanged = true;\n shouldRecalculatePrice = true;\n isPoProcessing = false;\n testId = 'ih_po_form';\n\n private poDetailsCopy: IhProdPoModel;\n private maxIhProdCostTotal = new BigJs(MAX_PO_TOTAL);\n private subscriptions: Subscription[] = [];\n private ngUnsubscribe = new Subject();\n\n constructor(\n @Inject(MAT_DIALOG_DATA) private data: IhPoDialogData,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n private eventService: EventService,\n private poManageService: IhPoManageService,\n private ihProductionRequestService: IhProductionRequestService,\n private ihPoFormService: IhPoFormService,\n private messageService: MessageService,\n private translate: TranslatePipe,\n private dialogRef: MatDialogRef,\n public utilsService: UtilsService\n ) {}\n\n ngOnInit(): void {\n this.initDialogData();\n this.initForm();\n this.initItemsArr();\n this.initPrinter();\n this.initAvailableItems();\n this.initSubscriptions();\n this.setPoDetailsCopy();\n\n this.price = 0;\n\n this.poForm\n ?.get('billingInfo')\n ?.valueChanges.pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(() => (this.shouldRecalculatePrice = true));\n\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach((sub) => sub?.unsubscribe());\n }\n\n public getItemLabel = (item: IhProductionRequestItemModel & {itemIndex: number}) => {\n const details = this.dialogData.request.details;\n return [\n details.healthPlanName,\n details.healthProgramName\n ].join(' - ') + `: ${(item.itemIndex + 1)}`;\n };\n\n getMiscItemControl(miscItem?: any) {\n return this.fb.group({\n description: this.fb.control(miscItem?.description || null),\n productionQuantity: this.fb.group({\n quantityEaches: this.fb.control(miscItem?.productionQuantity?.quantityEaches || null),\n unitPrice: this.fb.control(miscItem?.productionQuantity?.unitPrice || null),\n totalPrice: this.fb.control(miscItem?.productionQuantity?.totalPrice || null),\n shipments: this.fb.array(\n miscItem?.productionQuantity?.shipments?.map(shipment =>\n this.fb.group({\n id: this.fb.control(shipment?.id || null),\n quantity: this.fb.control(shipment?.quantity || null),\n warehouse: this.fb.group({\n address: this.fb.group({\n addressLine1: this.fb.control(shipment?.warehouse?.address?.addressLine1 || null),\n addressLine2: this.fb.control(shipment?.warehouse?.address?.addressLine2 || null),\n addressLine3: this.fb.control(shipment?.warehouse?.address?.addressLine3 || null),\n city: this.fb.control(shipment?.warehouse?.address?.city || null),\n country: this.fb.control(shipment?.warehouse?.address?.country || null),\n postalCode: this.fb.control(shipment?.warehouse?.address?.postalCode || null),\n stateProvince: this.fb.control(shipment?.warehouse?.address?.stateProvince || null)\n }),\n contact: this.fb.group({\n attention: this.fb.control(shipment?.warehouse?.contact?.attention || null),\n cell: this.fb.control(shipment?.warehouse?.contact?.cell || null),\n email: this.fb.control(shipment?.warehouse?.contact?.email || null),\n phone: this.fb.control(shipment?.warehouse?.contact?.phone || null)\n }),\n name: this.fb.control(shipment?.warehouse?.name ? shipment.warehouse : null),\n mdmId: this.fb.control(shipment?.warehouse?.mdmId || null),\n id: this.fb.control(shipment?.warehouse?.id || null)\n }, {validators: [Validators.required]})\n })\n )\n )\n })\n });\n }\n\n onSave(): void {\n this.eventService.emit({eventName: Events.PoSubmit});\n\n this.poForm.get('billingInfo').patchValue({\n ...this.poForm.get('billingInfo')?.value,\n totalQuantity: this.getTotalQty(),\n total: this.getTotal(),\n subTotal: this.subTotal\n });\n\n if (this.poForm.valid) {\n if (this.isTotalMaxError) {\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('module.requests.po.max-total-header'),\n this.translate.transform('module.requests.po.max-total-desc')\n );\n } else {\n const form = this.getPreparedForm();\n this.saveOrUpdatePO(form);\n }\n } else {\n this.utilsService.touchFormControls(this.poForm);\n this.utilsService.logInvalidControls(this.poForm);\n this.messageService.showSystemMessage(\n 'warning',\n this.translate.transform('common.message.validation'),\n this.translate.transform('common.message.form-validation')\n );\n }\n }\n\n getPrinterLabel(printer: any): string {\n return printer?.name || '';\n }\n\n onDeleteItem(itemIndex: number): void {\n this.itemsArr.removeAt(itemIndex);\n this.dialogData.items.splice(itemIndex, 1);\n this.initAvailableItems();\n }\n\n onAddItem(itemsToAdd: IhProductionRequestItemModel[]): void {\n if (!itemsToAdd?.length) {\n return;\n }\n\n this.dialogData.items = [...this.dialogData.items, ...itemsToAdd.map(i => this.initItem(i))];\n itemsToAdd.forEach(item => {\n this.itemsArr.push(this.ihPoFormService.getFormItem(item));\n });\n\n this.initAvailableItems();\n }\n\n onPrintPo(requestId: string, poId: number, type: string): void {\n this.ihProductionRequestService.downloadPoPdf(requestId, poId, type);\n }\n\n closePO(): void {\n const isDataChanged = this.dialogData.isDisabled ? false : this.checkIfDataChanged();\n this.poManageService.onClosePO(this.dialogRef, isDataChanged, this.dialogData.requestId);\n }\n\n deletePO(): void {\n this.isPoProcessing = true;\n this.poManageService.deletePoItem(this.dialogData.requestId, this.dialogData.po).subscribe({\n next: () => {\n this.dialogRef.close();\n this.isPoProcessing = false;\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n });\n }\n\n getTotalQty(): string {\n return new BigJs(this.dialogData.items.reduce((prev, item) => prev + this.ihPoFormService.getTotalQtyByItem(item), 0));\n }\n\n get subTotal(): string {\n const componentTotals = (this.itemsArr.getRawValue() as IhProductionRequestItemModel[]).reduce(\n (acc, item) => acc + item.componentDetails.reduce((acc1, details) => acc1 + Number(details.unitCost) * Number(details.quantity), 0),\n 0\n );\n const mistTotals = this.poForm.getRawValue().miscItems.reduce((acc, item) => acc + Number(item.productionQuantity.totalPrice), 0);\n\n return new BigJs(componentTotals).add(mistTotals).toFixed(2);\n }\n\n public getTotal(): number {\n if (this.dialogData.po?.billingInfo?.total && !this.shouldRecalculatePrice && !this.itemsLengthChanged) {\n return new BigJs(this.dialogData.po?.billingInfo?.total).toFixed(2);\n }\n\n const billingInfo = this.poForm?.get('billingInfo');\n const total = new BigJs(this.subTotal);\n const otherFee = Number(billingInfo?.get('otherFee')?.value);\n const rushFee = Number(billingInfo?.get('rushFee')?.value);\n const packageIdSetupFee = Number(billingInfo?.get('packageIdSetupFee')?.value);\n const credit = Number(billingInfo?.get('credit')?.value);\n\n return total.plus(otherFee).plus(rushFee).plus(packageIdSetupFee).minus(credit).toFixed(2);\n }\n\n public get isTotalMaxError(): boolean {\n return new BigJs(this.getTotal()).gt(this.maxIhProdCostTotal);\n }\n\n private initSubscriptions(): void {\n this.subscriptions.push(this.setPriceChangeListener());\n }\n\n private setPriceChangeListener(): Subscription {\n return this.eventService.on(Events.StartRecalculatePoTotalPrice, () => {\n this.shouldRecalculatePrice = true;\n this.cd.markForCheck();\n });\n }\n\n private setPoDetailsCopy(): void {\n this.poDetailsCopy = cloneDeep({...this.dialogData.po, ...this.getPreparedForm()});\n }\n\n private checkIfDataChanged(): boolean {\n return !isEqualWith(\n {\n ...this.dialogData.po,\n ...this.getPreparedForm()\n },\n this.poDetailsCopy,\n this.dataCheckCustomizer\n );\n }\n\n private dataCheckCustomizer(obj1: any, obj2: any): boolean {\n if ((obj1 === null && obj2 === '') || (obj1 === '' && obj2 === null)) {\n return true;\n }\n\n if (\n ((typeof obj1 === 'number' || obj1 === null) && typeof obj2 === 'string') ||\n (typeof obj1 === 'string' && (typeof obj2 === 'number' || obj2 === null))\n ) {\n return Number(obj1) === Number(obj2);\n }\n }\n\n private initItem(item: IhProductionRequestItemModel){\n return ({...item, shipments: item.shipments.length ? item.shipments : [this.ihPoFormService.getEmptyShipmentItem()]});\n }\n\n private initDialogData() {\n const data = cloneDeep(this.data);\n data.items = data.items.map(i => this.initItem(i));\n this.dialogData = {\n ...data,\n printerList: this.initDialogPrinterList()\n };\n }\n\n private initDialogPrinterList() {\n return this.data?.printerList?.map(item => ({value: item, name: item.name, label: item.name}));\n }\n\n private initForm(): void {\n this.poForm = this.ihPoFormService.initialPoForm;\n\n this.poForm.patchValue(this.dialogData.po);\n this.poForm.setControl('miscItems', this.fb.array(this.dialogData?.po?.miscItems?.map(this.getMiscItemControl.bind(this)) || []));\n\n if (!this.dialogData.po.id) {\n this.poForm?.get('billingInfo').patchValue(this.dialogData.request.details);\n }\n\n if (this.dialogData.isDisabled) {\n this.poForm.disable({emitEvent: false});\n }\n\n this.poForm\n .get('printerInfo.name')\n .statusChanges.pipe(filter(status => status === 'VALID'))\n .subscribe(status => {\n const printerInfo = {...this.poForm.get('printerInfo.name').value};\n this.poForm.get('printerInfo').patchValue({\n address: {\n addressLine1: printerInfo.address?.addressLine1,\n addressLine2: printerInfo.address?.addressLine2,\n addressLine3: printerInfo.address?.addressLine3,\n city: printerInfo.address?.city,\n country: printerInfo.address?.country,\n postalCode: printerInfo.address?.postalCode,\n stateProvince: printerInfo.address?.stateProvince\n },\n contact: {\n attention: printerInfo.contact?.attention,\n cell: printerInfo.contact?.cell,\n email: printerInfo.contact?.email,\n phone: printerInfo.contact?.phone\n },\n mdmId: printerInfo.mdmId,\n id: printerInfo.id\n });\n\n this.cd.markForCheck();\n });\n }\n\n private initItemsArr(): void {\n this.itemsArr = this.poForm.get('items') as FormArray;\n this.dialogData.items.forEach(item => {\n this.itemsArr.push(this.ihPoFormService.getFormItem(item));\n });\n }\n\n private initAvailableItems(): void {\n this.availableItems = this.dialogData.request.items.map((i, itemIndex)=>({...i, itemIndex})).filter((item) => !this.dialogData.items.find(assignedItem => assignedItem.id === item.id));\n }\n\n private initPrinter(): void {\n const printer = this.dialogData?.printerList?.find(item => item.value.mdmId === this.dialogData.po.printerInfo.mdmId);\n this.poForm.get('printerInfo.name').setValue({...printer?.value, ...this.dialogData.po.printerInfo});\n }\n\n private getPreparedForm(): any {\n const form = this.poForm.getRawValue();\n\n form.items = form.items.map((item, idx) => ({\n ...this.dialogData.items[idx],\n componentDetails: item.componentDetails,\n shipments: item.shipments.length\n ? item.shipments.map(shipment => ({\n ...shipment,\n quantity: shipment.quantity || 0,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name || shipment.warehouse?.name\n }\n }))\n : this.ihPoFormService.getEmptyShipmentItem()\n }));\n\n form.miscItems = form.miscItems.map(miscItem => ({\n ...miscItem,\n productionQuantity: {\n ...miscItem.productionQuantity,\n shipments: miscItem?.productionQuantity?.shipments.map(shipment => ({\n ...shipment,\n warehouse: {\n ...shipment.warehouse,\n name: shipment.warehouse?.name?.name\n }\n }))\n }\n }));\n\n form.printerInfo.name = form.printerInfo?.name?.name;\n form.printerInfo.id = this.dialogData.po.printerInfo.id || null;\n\n form.merchants = this.dialogData.request.details.merchants;\n\n return form;\n }\n\n private saveOrUpdatePO(form): void {\n const poSource = this.dialogData.po.id\n ? this.ihProductionRequestService.updatePO(this.dialogData.requestId, this.dialogData.po.id, form)\n : this.ihProductionRequestService.createPO(this.dialogData.requestId, form);\n\n if (!this.ihPoFormService.isItemsOrdersQtyAllocated(form.items)) {\n this.messageService.showSystemMessage('warning', this.translate.transform('module.requests.po.unallocated-qty'));\n }\n\n this.handlePoAction(poSource);\n }\n\n private handlePoAction(poSource: Observable) {\n this.isPoProcessing = true;\n poSource.pipe(take(1)).subscribe({\n next: (newPo: IhProdPoModel) => {\n this.onSuccessPO(newPo);\n this.cd.markForCheck();\n },\n complete: () => {\n this.isPoProcessing = false;\n this.cd.markForCheck();\n }\n });\n }\n\n private onSuccessPO(po: IhProdPoModel): void {\n this.dialogData.po = {...po};\n this.dialogData.items = po.items;\n this.initPrinter();\n this.setPoDetailsCopy();\n\n this.messageService.showSystemMessage('success', this.translate.transform('common.message.po-saved'), null);\n }\n}\n","
\n \n
\n \n
\n
\n
\n
\n {{ 'module.pages.reports.ih.columns.package-id' | translate }}:\n {{ packageItem.packageId }}\n
\n
\n {{ 'module.pages.reports.ih.columns.package-description' | translate }}:\n {{ packageItem.packageDescription }}\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n {{'module.requests.finance.ship-to' | translate}}\n \n {{address}}\n \n
\n
\n {{'module.requests.po.qty' | translate}}\n \n {{shipment.quantity}}\n \n
\n
\n
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {\n IhProductionRequestItemModel,\n IhProductionRequestModel\n} from '../../../../../models/ih-production-request.model';\n\n@Component({\n selector: 'app-ih-po-item',\n templateUrl: './ih-po-item.component.html',\n styleUrls: ['./ih-po-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhPoItemComponent {\n @Input() request: IhProductionRequestModel;\n @Input() reqItem: IhProductionRequestItemModel;\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport { combineLatest, of, Observable } from 'rxjs';\nimport {AbstractUnsubscribableRequestStepComponent} from '../../../request-step-details/abstract-unsubscribable-request-step.class';\nimport {filter, map, pluck, shareReplay, take, takeUntil, takeWhile, tap} from 'rxjs/operators';\nimport {UtilsService} from '../../../../../shared/services/utils.service';\nimport {IhProdPoModel} from '../../../../models/ih-prod-po.model';\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {IhPoDialogData} from './ih-po-form/ih-po-dialog-data.model';\nimport {IhPoFormComponent} from './ih-po-form/ih-po-form.component';\nimport {select, Store} from '@ngrx/store';\nimport {selectIhRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {lazyLoadComponentTypes, lazyLoadPrinters} from '../../../../../reducers/ref-data/refdata.actions';\nimport {selectComponentTypes, selectPrinters} from '../../../../../reducers/ref-data/refdata.selectors';\nimport {IhProductionRequestService} from 'src/app/requests/services/ih-production-requests.service';\nimport {isPPMSelectorState} from '../../../../../reducers/ppm/ppm.selectors';\nimport { EventService, Events } from '../../../../../shared/services/event-service.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IhPoFormService } from '../../../../services/ih-po-form.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { IhPoManageService } from '../../../../services/ih-po-manage.service';\nimport {UserRoles} from '../../../../../shared/constants/user-roles.constant';\n\n@Component({\n selector: 'app-ih-po',\n templateUrl: './ih-po.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IhPoComponent extends AbstractUnsubscribableRequestStepComponent implements OnInit, OnDestroy {\n @Input() isRequestor: boolean;\n\n public isBlankState = true;\n public poDataLoaded = false;\n public userRoles = UserRoles;\n\n public poDetails$ = this.ihProductionRequestService.getPOListener()?.pipe(\n map(data => {\n if (data?.length) {\n return data.sort(this.utilsService.sortByDate);\n }\n return [];\n\n }),\n tap(data => {\n if (data?.length) {\n this.isBlankState = false;\n } else {\n this.isBlankState = true;\n }\n this.poDataLoaded = true;\n this.cd.markForCheck();\n }),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n get poDetails(): Promise {\n return this.poDetails$.pipe(take(1)).toPromise();\n }\n\n public isUserPPM$ = this.store.pipe(\n select(isPPMSelectorState),\n takeWhile(val => !val.initialized, true),\n pluck('isPPM'),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n public request$ = this.store.select(selectIhRequestDetails).pipe(takeUntil(this.ngUnsubscribe));\n\n public printers$ = this.store.select(selectPrinters).pipe(\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n public componentTypes$ = this.store.select(selectComponentTypes).pipe(\n filter(v => v.length > 0),\n takeUntil(this.ngUnsubscribe)\n );\n\n public refData$ = combineLatest([this.printers$, this.componentTypes$]);\n\n constructor(\n private ihProductionRequestService: IhProductionRequestService,\n private ihPoFormService: IhPoFormService,\n public utilsService: UtilsService,\n private cd: ChangeDetectorRef,\n private modalService: ModalService,\n private store: Store,\n private eventService: EventService,\n private translate: TranslateService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private poManageService: IhPoManageService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.ihProductionRequestService.callPO(this.requestId);\n this.loadRefData();\n this.setStepSubmitSubscription();\n }\n\n ngOnDestroy(): void {\n this.ihProductionRequestService.resetPO();\n\n super.ngOnDestroy();\n }\n\n get emptyPo(): IhProdPoModel {\n return {\n accountingInfo: {channel: null, company: null, inventoryType: null, lineOfBusiness: null},\n printerInfo: {\n address: {\n addressLine1: null,\n addressLine2: null,\n addressLine3: null,\n city: null,\n country: null,\n stateProvince: null,\n postalCode: null\n },\n contact: {\n attention: null,\n cell: null,\n email: null,\n phone: null\n },\n name: null,\n mdmId: null,\n id: null\n },\n stakeholders: {\n approver1: null,\n approver2: null,\n approver3: null,\n buyer: {userName: null, firstName: null, lastName: null}\n },\n accountingSummary: {\n Acct: null,\n Amt: null,\n CC: null,\n CHN: null,\n CO: null,\n 'I/C': null,\n LOB: null,\n 'Inventory Type': null\n },\n apSummary: {\n Acct: null,\n Amt: null,\n CC: null,\n CHN: null,\n CO: null,\n 'I/C': null,\n LOB: null,\n 'Inventory Type': null\n },\n items: []\n };\n }\n\n addNewPO() {\n this.openPO(this.emptyPo, 'new');\n }\n\n onEdit(item: IhProdPoModel): void {\n this.openPO(item, 'edit');\n }\n\n onPrint(requestId: string, poId: number, type: string): void {\n this.ihProductionRequestService.downloadPoPdf(requestId, poId, type);\n }\n\n onDelete(item: IhProdPoModel) {\n return this.poManageService.deletePoItem(this.requestId, item).toPromise();\n }\n\n private loadRefData(): void {\n this.store.dispatch(lazyLoadPrinters());\n this.store.dispatch(lazyLoadComponentTypes());\n }\n\n private openPO(po: IhProdPoModel, type: 'new' | 'edit') {\n combineLatest([this.request$, this.refData$])\n .pipe(take(1), takeUntil(this.ngUnsubscribe))\n .subscribe({\n next: ([request, [printers, componentTypes]]) => {\n const data: IhPoDialogData = {\n po,\n requestId: this.requestId,\n request,\n printerList: printers,\n componentTypesList: componentTypes,\n items: type === 'new' ? [...request.items] : po.items,\n miscItems: [],\n isDisabled: this.isDisabled,\n isRequestor: this.isRequestor\n };\n\n this.modalService.openModal(IhPoFormComponent, data, 'po-form-dialog', false);\n }\n });\n }\n private setStepSubmitSubscription() {\n this.eventService.on(Events.PoSowSubmitValidated, async (elementRef) => {\n const poDetails = await this.poDetails;\n if ((poDetails).length) {\n this.submitStep(elementRef);\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.po.po-required'),\n this.translate.instant('module.requests.po.po-stage-error'));\n }\n }, this.ngUnsubscribe);\n }\n\n private async submitStep(elementRef: any) {\n const poDetails = await this.poDetails;\n const poItems = poDetails?.flatMap((po) => po.items) || [];\n const stepSubmitObservable = this.ihPoFormService.isItemsOrdersQtyAllocated(poItems)\n ? of(true)\n : this.confirmStepSubmit();\n\n stepSubmitObservable\n .subscribe((confirmed) => {\n if(!confirmed) {\n return;\n }\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.StepSubmit, 'right');\n });\n }\n\n private confirmStepSubmit(): Observable {\n return this.modalService.openConfirmationModal(\n this.translate.instant('module.requests.po.modal.submit-po-unalloc-items-header'),\n this.translate.instant('module.requests.po.modal.submit-po-unalloc-items-desc'),\n this.translate.instant('common.button.yes'),\n this.translate.instant('common.button.no'),\n ).afterClosed();\n }\n}\n","\n \n\n\n
\n
\n {{ 'module.requests.text.purchase-orders' | translate }}\n \n
\n\n \n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n {{ 'common.button.delete' | translate }}\n \n
\n
\n
\n \n
\n \n \n {{ 'module.requests.text.add-po-sow' | translate }}\n \n
\n
\n
\n
\n\n\n
\n
\n {{ label | translate }}\n
\n \n \n \n \n \n \n \n \n {{ 'module.requests.po.po-actions.view-edit' | translate }}\n \n \n {{ 'module.requests.po.po-actions.view' | translate }}\n \n \n \n \n {{ printer | translate }}\n \n \n \n
\n
\n
\n
\n
\n {{ 'common.button.printer' | translate }}:\n {{ poItemDetails.printerInfo?.name }}\n
\n
\n {{ 'module.requests.po.date' | translate }}:\n {{ poItemDetails?.createdAt | date: 'MM/dd/yyyy' | uppercase }}\n
\n
\n {{ 'module.requests.bif.po.prod-qty' | translate }}:\n {{ poItemDetails?.billingInfo.totalQuantity }}\n
\n
\n
\n \n
\n\n","\n
\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n
\n\n \n\n \n
\n \n
\n\n
\n \n
\n\n
\n \n\n
\n \n
\n
\n \n\n \n
\n
\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { filter, map } from 'rxjs/operators';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\nimport { IhProductionRequestService } from '../../../../services/ih-production-requests.service';\nimport { API } from '../../../../../shared/constants/api.constants';\nimport { selectIhRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\n\n@Component({\n selector: 'app-ih-quote-process',\n templateUrl: './ih-quote-process.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhQuoteProcessComponent extends AbstractRequestStepComponent implements OnInit {\n public request$ = this.store.select(selectIhRequestDetails);\n\n public poDetails$ = this.ihProductionRequestService.getPOListener().pipe(\n filter(v => !!v?.length),\n map(v => v.map(({ id }) => ({\n id,\n fileName: `PO #${id}.pdf`,\n url: API.ihProdPoPdfDownload(this.requestId, id, 'printer') ,\n }))),\n );\n\n constructor(\n private store: Store,\n private ihProductionRequestService: IhProductionRequestService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.ihProductionRequestService.callPO(this.requestId);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpEventType, HttpParams} from '@angular/common/http';\nimport {Observable, of} from 'rxjs';\nimport {map, switchMap} from 'rxjs/operators';\nimport {ErrorHandlingHttpClient} from '../../shared/services/error-handling-http-client.service';\nimport {IH_PRODUCTION_REQUEST} from '../constants/request-types.constant';\nimport {STATUSES} from '../constants/request-statuses.constant';\nimport {API} from '../../shared/constants/api.constants';\nimport {FileUploadService} from './file-upload.service';\nimport {IhProductionRequestModel} from 'src/app/requests/models/ih-production-request.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IhProductionService {\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private fileUploadService: FileUploadService,\n ) {}\n\n public getIhId(searchString: string): Observable<{ name: any; id: any }[] | undefined> {\n const params = new HttpParams()\n .append('requestId', searchString)\n .append('types', IH_PRODUCTION_REQUEST)\n .append('statuses', STATUSES.IN_PROGRESS);\n\n return this.errorHandlingHttp.get(API.searchRequests, { params }).pipe(\n map(data => data?.documents.map(item => ({ id: item.id, name: item.name }))),\n );\n }\n\n\n public uploadPrinterProofForRequest(\n file: File,\n requestId: string\n ): Observable> {\n const createUploadItemPrinterProofUrl = API.createIhPrinterProof(requestId);\n return this.uploadAndCreateAttachment(file, requestId, createUploadItemPrinterProofUrl, 'printer-proof');\n }\n\n private uploadAndCreateAttachment(\n file: File,\n requestId: number | string,\n createAttachmentUrl: string,\n attachmentFileType: string\n ) {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, attachmentFileType, file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createIhAttachment(createAttachmentUrl, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n private createIhAttachment(createAttachmentUrl: string, uploadId: string): Observable {\n return this.errorHandlingHttp.post(createAttachmentUrl, null,\n {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public deletePrinterProof(requestId: string, attachmentId: number): Observable {\n return this.errorHandlingHttp.delete( `${API.ihDeletePrinterProof(requestId, attachmentId)}`);\n }\n}\n","\n
\n
\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n
\n
\n
\n \n\n
\n \n
\n\n
\n \n
\n
\n
\n \n \n\n
\n \n
\n
\n
\n
\n\n
\n
\n
\n
\n \n \n \n \n {{ 'module.requests.ih.messages.upload-printer-proof-control-error' | translate }}\n \n
\n\n
\n \n \n
\n
\n
\n
\n \n \n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport {Action, ActionsSubject, Store} from '@ngrx/store';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {IhProductionRequestModel} from 'src/app/requests/models/ih-production-request.model';\nimport {Subject, Subscription} from 'rxjs';\nimport {FILE_TYPES} from 'src/app/shared/constants/upload-restrictions.constants';\nimport {FILE_SIZE_RESTRICTIONS} from 'src/app/shared/models/upload-file-restrictions.model';\nimport {IH_PRODUCTION_REQUEST} from 'src/app/requests/constants/request-types.constant';\nimport {selectIhRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\nimport {Events, EventService} from 'src/app/shared/services/event-service.service';\nimport {IhProductionService} from 'src/app/requests/services/ih-production.service';\nimport {RequestStageActions} from 'src/app/shared/services/request-stages.enum';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {StepActionsService} from 'src/app/requests/services/step-actions.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {filter, first, takeUntil} from 'rxjs/operators';\nimport {TranslateService} from '@ngx-translate/core';\n\n@Component({\n selector: 'app-ih-printer-proof',\n templateUrl: './ih-printer-proof.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhPrinterProofComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n\n private subscriptions: Subscription [] = [];\n private ngUnsubscribe = new Subject();\n\n public fileTypes = FILE_TYPES;\n public fileSizeRestrictions = FILE_SIZE_RESTRICTIONS;\n public requestDetails: IhProductionRequestModel;\n public itemsForm: FormArray;\n public form: FormGroup;\n public uploadPrinterProofControlsArray: FormControl[] = [];\n\n request$ = this.store.select(selectIhRequestDetails).pipe(\n filter(request => request !== null && request?.type === IH_PRODUCTION_REQUEST),\n );\n\n\n constructor(\n private store: Store,\n private actions: ActionsSubject,\n private eventService: EventService,\n private fb: FormBuilder,\n private stepActionsService: StepActionsService,\n private ihProductionService: IhProductionService,\n private messageService: MessageService,\n private translate: TranslateService,\n private cd: ChangeDetectorRef,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.getRequestDetails();\n this.buildForm();\n this.buildItemsForm();\n this.initSubscriptions();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.isDisabled) {\n this.toggleForm();\n }\n }\n\n private getRequestDetails(): void {\n this.request$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((request) => {\n this.requestDetails = cloneDeep(request);\n });\n }\n private buildForm(): void {\n this.form = this.fb.group({\n printerProofNotes: this.fb.control(this.requestDetails.details.printerProofNotes)\n });\n }\n private buildItemsForm(): void {\n this.uploadPrinterProofControlsArray.push(new FormControl(null));\n this.itemsForm = this.fb.array([]);\n\n this.requestDetails?.items?.forEach(() => {\n this.itemsForm.push(\n this.fb.group({})\n );\n });\n\n this.toggleForm();\n }\n\n private initSubscriptions(): void {\n this.subscriptions.push(\n this.eventService.on(Events.UploadPrinterProofValidation, (elementRef) => {\n if (this.isFilesUploaded()) {\n this.stepActionsService.addReason(\n elementRef, 'step-submit', 'step-submit', Events.UploadPrinterProofSubmit, 'right');\n } else {\n this.showMatErrorForUpload();\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.ih.messages.printer-proof-head'),\n this.translate.instant('module.requests.ih.messages.printer-proof-desc')\n );\n }\n }),\n\n this.eventService.on(Events.UploadPrinterProofSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n first(),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n })\n );\n }\n\n private showMatErrorForUpload(): void {\n if (this.requestDetails.details.printerProofs.length < 1) {\n this.uploadPrinterProofControlsArray[0]?.setErrors({printerProofRequired: true});\n this.uploadPrinterProofControlsArray[0]?.markAsTouched();\n }\n this.cd.markForCheck();\n }\n\n private isFilesUploaded(): boolean {\n return this.requestDetails.details?.printerProofs?.length !== 0;\n }\n\n private saveRequest(): void {\n const itemsForm = this.itemsForm.getRawValue();\n\n this.requestDetails.items.forEach((item, index) => {\n item.printerProofNotes = itemsForm[index].printerProofNotes;\n });\n\n this.requestDetails.details.printerProofNotes = this.form.get('printerProofNotes').value;\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({ requestId: this.requestId, details: this.requestDetails }));\n }\n\n public uploadPrinterProofFunction = (file) => this.ihProductionService.uploadPrinterProofForRequest(file, this.requestId);\n\n public removePrinterProofFunction = (attachmentId: number) => this.ihProductionService.deletePrinterProof(this.requestId, attachmentId);\n\n public updateProofAttachments({ action, data }: { action: string; data: any }): void {\n if (action === 'add') {\n this.requestDetails.details.printerProofs.push(data);\n this.uploadPrinterProofControlsArray[0]?.setErrors({printerProofRequired: null});\n } else {\n const index = this.requestDetails.details.printerProofs\n .findIndex(item => item?.attachmentId === data.attachmentId);\n this.requestDetails.details.printerProofs.splice(index, 1);\n }\n }\n\n private toggleForm(): void {\n this.isDisabled ? this.itemsForm?.disable() : this.itemsForm?.enable();\n this.isDisabled ? this.form?.disable() : this.form?.enable();\n this.cd.markForCheck();\n }\n}\n","\n
\n
\n
\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n
\n
\n \n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n \n \n
\n
\n
\n\n
\n
\n
{{'module.pages.reports.ih.internal-printer-proof.approved-artwork-files' | translate}}
\n \n
\n
\n
{{'module.pages.reports.ih.internal-printer-proof.active-printer-proof-files' | translate}}
\n \n\n
\n
\n {{'common.label.note' | translate}}:\n {{requestDetails?.details?.printerProofNotes}}\n
\n
\n
\n
\n\n \n
\n
\n
\n","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport flatten from 'lodash/flatten';\nimport includes from 'lodash/includes';\nimport _map from 'lodash/map';\nimport { Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { selectIhRequestDetails } from 'src/app/requests/reducers/request-details/request-details.selectors';\n\nimport { Events, EventService, IhEvents } from '../../../../../shared/services/event-service.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { ARTWORK_STATUSES } from '../../../../constants/artwork-file-statuses.constants';\nimport { IhArtworkFilesAwareModel, IhProductionRequestModel } from '../../../../models/ih-production-request.model';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-ih-internal-printer-proof',\n templateUrl: './ih-internal-printer-proof.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IhInternalPrinterProofComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n\n public requestDetails: IhProductionRequestModel;\n\n private ngUnsubscribe = new Subject();\n private subscriptions: Subscription[] = [];\n public uploadRequestDetailsModel = new IhArtworkFilesAwareModel();\n\n constructor(private store: Store,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private translate: TranslateService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.store.select(selectIhRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestData => {\n this.requestDetails = cloneDeep(requestData);\n });\n\n this.setStepSubmitSubscription();\n }\n\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private setStepSubmitSubscription(): void {\n this.subscriptions.push(\n this.eventService.on(IhEvents.InternalPrinterProofValidation, (elementRef) => {\n\n if (this.isAllPrinterProofsApproved()) {\n this.stepActionsService.addReason(elementRef,\n 'step-approve', 'step-approve', IhEvents.InternalPrinterProofApprove, 'right');\n } else {\n this.messageService.showSystemMessage('error',\n this.translate.instant('module.requests.approve.approve-required'),\n this.translate.instant('module.requests.approve.approve-stage-error'));\n }\n }),\n this.eventService.on(IhEvents.InternalPrinterProofApprove, ({comment}) => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment,\n },\n });\n })\n );\n }\n\n private isAllPrinterProofsApproved(): boolean {\n const statuses = _map(flatten(_map(this.requestDetails.items,\n (item) => item.printerProofReview)),\n (printerProofFile) => printerProofFile.status);\n const hasUnreviewed = includes(statuses, ARTWORK_STATUSES.unreviewed);\n const hasRejected = includes(statuses, ARTWORK_STATUSES.rejected);\n\n return !(hasUnreviewed || hasRejected);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\nimport { API } from '../../shared/constants/api.constants';\nimport { MilestoneItem, PrinterItemModel } from '../models/printer-item.model';\nimport { AtPrinterService } from './at-printer.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IhAtPrinterService extends AtPrinterService {\n getRequestPrinterWorkItems(requestId: string | number): Observable {\n return this.errorHandlingHttpClient.get(\n `${API.IH_PRODUCTION_PRINTER.getPrinterWorkItems(requestId)}`\n );\n }\n\n updateMilestoneDetails(\n requestId: number | string,\n printerItem: PrinterItemModel,\n milestone: MilestoneItem,\n data: any\n ): Observable {\n const printerId = printerItem.printerDetails.id;\n return this.errorHandlingHttpClient.put(\n API.IH_PRODUCTION_PRINTER.updateMilestoneDetails(requestId, printerId, printerItem.id, milestone.id),\n data\n );\n }\n\n bulkUpdateAtPrinter(\n requestId: string,\n printerId: number,\n itemId: number,\n data: any\n ): Observable {\n /**\n * Important to use http client in order to catch errors\n */\n return this.httpClient.put(\n `${API.IH_PRODUCTION_PRINTER.doBulkWorkItemMilestoneUpdate(requestId, printerId, itemId)}`,\n data\n );\n }\n\n uploadWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n file: File\n ): Observable {\n /**\n * Asn missing in IH Production Requests\n */\n return of();\n }\n\n deleteWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n attachmentId: number\n ): Observable {\n /**\n * Asn missing in IH Production Requests\n */\n return of();\n }\n\n protected createWorkItemMilestoneAsn(\n requestId: string,\n printerId: number,\n itemId: number,\n milestoneId: number,\n uploadId: string\n ): Observable {\n /**\n * Asn missing in IH Production Requests\n */\n return of();\n }\n\n}\n","import {ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit} from '@angular/core';\nimport {AtPrinterService} from '../../../../../services/at-printer.service';\nimport {IhAtPrinterService} from '../../../../../services/ih-at-printer.service';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {MilestoneItem, PrinterItemModel} from '../../../../../models/printer-item.model';\nimport {BehaviorSubject, of, Subject, throwError} from 'rxjs';\nimport {FormBuilder, FormGroup} from '@angular/forms';\nimport {catchError, finalize, shareReplay, switchMap, takeUntil, tap} from 'rxjs/operators';\nimport {MilestoneDetailsPayload} from '../../../financial-services/fsr-at-printer/fsr-bulk-change/fsr-bulk-change.interface';\nimport moment from 'moment';\n\nexport type IhBulkChangeComponentResponse = PrinterItemModel | false;\nexport interface IhBulkChangeComponentData {\n requestId: string;\n itemId: number;\n printerId: number;\n selectedItems: MilestoneItem[];\n}\nexport interface IhMilestoneDetailsPayload {\n details: {\n completed: boolean;\n estimatedArrivalDate: Date;\n };\n milestoneIds: Array;\n}\n\n@Component({\n selector: 'app-ih-bulk-change',\n templateUrl: './ih-bulk-change.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: IhAtPrinterService\n }\n ]\n})\nexport class IhBulkChangeComponent implements OnInit, OnDestroy {\n\n private ngUnsubscribe = new Subject();\n private loadingSubject = new BehaviorSubject(false);\n private errorSubject = new BehaviorSubject(null);\n\n public loading$ = this.loadingSubject.asObservable();\n public error$ = this.errorSubject.asObservable();\n public bulkForm: FormGroup;\n public minDate: Date = moment().startOf('day').toDate();\n\n constructor(\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) private dialogData: IhBulkChangeComponentData,\n private atPrinterService: AtPrinterService,\n private fb: FormBuilder,\n ) { }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n ngOnInit(): void {\n this.bulkForm = this.fb.group(\n {\n estimatedArrivalDate: this.fb.control(null),\n completed: this.fb.control(false),\n });\n }\n\n public onClose(): void {\n this.dialogRef.close(false);\n }\n\n public onCancel(): void {\n this.dialogRef.close(false);\n }\n\n public async onSubmit(): Promise {\n if (!this.bulkForm.valid) {\n return;\n }\n\n this.bulkForm.markAllAsTouched();\n this.bulkForm.updateValueAndValidity();\n\n this.loadingSubject.next(true);\n\n const payload: MilestoneDetailsPayload = {\n milestoneIds: this.dialogData.selectedItems.map(sI => sI.id),\n details: {...this.bulkForm.getRawValue() || null},\n };\n\n const request = of(true)\n .pipe(\n tap(() => {\n this.loadingSubject.next(true);\n }),\n switchMap(() => this.atPrinterService\n .bulkUpdateAtPrinter(this.dialogData.requestId, this.dialogData.printerId, this.dialogData.itemId, payload)\n .pipe(\n catchError(err => {\n this.errorSubject.next(err);\n return throwError(err);\n })\n ))\n )\n .pipe(\n takeUntil(this.ngUnsubscribe),\n finalize(() => {\n this.loadingSubject.next(false);\n }),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n request.subscribe(response => {\n // lest skip response data and just simply trigger reload in the parent element\n this.dialogRef.close(response);\n });\n }\n\n}\n","
\n

{{ 'module.requests.at-printer.bulk-change' | translate }}

\n\n \n\n
\n \n {{ error?.error?.message }}\n
\n\n
\n
\n \n
\n
\n\n \n\n
\n \n \n \n \n
\n \n
\n
\n \n {{ 'common.button.step-submit' | translate }}\n \n \n \n
\n
\n","
\n
\n
\n \n
\n
\n \n \n {{'module.requests.ih.items.health-plan-program' | translate}}:\n {{ request.details.healthPlanName }} - {{ request.details.healthProgramName }}\n \n \n \n {{'module.requests.ih.items.health-plan' | translate}}:\n {{ request.details.healthPlanName }}\n \n \n \n
\n
\n \n
\n
\n
\n \n
\n {{ label | translate }}\n {{ data }}\n
\n
\n\n
\n \n
\n
\n \n \n \n \n
\n
\n
\n \n
\n
\n \n
\n
\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core';\nimport {MilestoneItem} from '../../../../../models/printer-item.model';\nimport {FormGroup} from '@angular/forms';\nimport {combineLatest, Subject, Subscription} from 'rxjs';\nimport {filter, map, takeUntil} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport {STATUSES} from '../../../../../constants/request-statuses.constant';\nimport {selectIhRequestDetails} from '../../../../../reducers/request-details/request-details.selectors';\nimport {IH_PRODUCTION_REQUEST} from '../../../../../constants/request-types.constant';\nimport {selectRequestItemTypes} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport moment from 'moment';\n\n@Component({\n selector: 'app-ih-printer-milestone',\n templateUrl: './ih-printer-milestone.component.html',\n styleUrls: ['./ih-printer-milestone.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n})\nexport class IhPrinterMilestoneComponent implements OnInit, OnDestroy {\n @Input() public milestone: MilestoneItem;\n @Input() public requestId: string;\n @Input() public printerId: number;\n @Input() public itemId: number;\n @Input() public milestoneIndex: number;\n @Input() public printerIndex: number;\n @Input() public isDisabled: boolean;\n @Output() public milestoneCheck = new EventEmitter();\n @Output() public milestoneValuesChange = new EventEmitter();\n public minDate: Date;\n\n private formGroup: FormGroup;\n\n private milestoneFormSubscriptions: Subscription[] = [];\n\n @Input()\n public set milestoneForm(milestoneForm: FormGroup) {\n this.formGroup = milestoneForm;\n this.milestoneFormSubscriptions.forEach(s => s.unsubscribe());\n this.milestoneFormSubscriptions = [];\n\n this.milestoneFormSubscriptions.push(\n combineLatest([\n milestoneForm.get('estimatedArrivalDate').valueChanges,\n milestoneForm.get('estimatedArrivalDate').statusChanges.pipe(filter(s => s.toLowerCase() === 'valid'))\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([value]) => {\n this.milestoneValuesChange.emit({\n estimatedArrivalDate: value,\n completed: this.milestone.details.completed,\n });\n })\n );\n\n if (this.milestone.details.completed || this.isDisabled) {\n milestoneForm.disable();\n }\n }\n\n public get milestoneForm(): FormGroup {\n return this.formGroup;\n }\n\n public status: { status: string };\n private ngUnsubscribe = new Subject();\n\n constructor(\n private store: Store,\n ) {\n }\n\n request$ = this.store.select(selectIhRequestDetails).pipe(\n filter(request => request !== null && request?.type === IH_PRODUCTION_REQUEST),\n );\n\n itemTypesMap$ = this.store.select(selectRequestItemTypes).pipe(\n map(types => types.reduce((typeNameMap, type) => {\n typeNameMap[type.code] = type.name;\n return typeNameMap;\n }, {}))\n );\n\n public ngOnInit(): void {\n this.minDate = moment().startOf('day').toDate();\n\n this.status = {\n status: this.milestone.details.completed ? STATUSES.COMPLETED : STATUSES.IN_PROGRESS\n };\n\n this.request$\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(details => {\n if (details?.status === STATUSES.TERMINATED || this.isDisabled) {\n this.milestoneForm?.disable({emitEvent: false});\n } else if (details && !this.milestone.details.completed) {\n this.milestoneForm?.enable({emitEvent: false});\n }\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onMilestoneCheck(isChecked: boolean): void {\n this.milestoneCheck.emit(isChecked);\n }\n\n public get isSelectDisabled(): boolean {\n return this.status.status === STATUSES.COMPLETED;\n }\n\n public getTestId(elementId: string): string {\n return `printer_${this.printerIndex}_milestone_${this.milestoneIndex}_${elementId}`;\n }\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit} from '@angular/core';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {BehaviorSubject, combineLatest, Observable, of, Subject} from 'rxjs';\nimport {filter, map, shareReplay, startWith, switchMap, take, takeUntil} from 'rxjs/operators';\nimport {MilestoneItem, PrinterItemModel} from '../../../../models/printer-item.model';\nimport {selectIhRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {IH_PRODUCTION_REQUEST} from '../../../../constants/request-types.constant';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe, TranslateService} from '@ngx-translate/core';\nimport {FormBuilder} from '@angular/forms';\nimport {AtPrinterService} from '../../../../services/at-printer.service';\nimport {IhAtPrinterService} from '../../../../services/ih-at-printer.service';\nimport {API} from '../../../../../shared/constants/api.constants';\nimport {Events, EventService} from '../../../../../shared/services/event-service.service';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {ModalService} from '../../../../../shared/services/modal-service.service';\nimport {\n IhBulkChangeComponent,\n IhBulkChangeComponentData,\n IhBulkChangeComponentResponse\n} from './ih-bulk-change/ih-bulk-change.component';\n\n@Component({\n selector: 'app-ih-print',\n templateUrl: './ih-print.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AtPrinterService,\n useExisting: IhAtPrinterService,\n }\n ]\n})\nexport class IhPrintComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy {\n private ngUnsubscribe = new Subject();\n private printerItemsSubject = new BehaviorSubject(null);\n\n printerItems$ = this.printerItemsSubject.asObservable().pipe(filter(v => v != null));\n isBlankState$ = this.printerItems$.pipe(\n map(pi => pi.length === 0),\n startWith(true)\n );\n request$ = this.store.select(selectIhRequestDetails).pipe(\n filter(request => request !== null && request?.type === IH_PRODUCTION_REQUEST),\n );\n printerForm$ = this.printerItems$.pipe(\n map(pi => this.fb.group({\n printerItems: this.fb.array(\n pi.map(printer =>\n this.fb.group({\n milestones: this.fb.array(\n printer.milestones.map(milestone =>\n this.fb.group({\n estimatedArrivalDate: this.fb.control(\n {\n value: milestone.details.estimatedArrivalDate || null,\n disabled: this.isDisabled || milestone.details.completed\n },\n {updateOn: 'blur'}\n ),\n })\n )\n )\n })\n )\n )\n })),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n checkedMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => milestone.isChecked)))\n );\n checkableMilestones$ = this.printerItems$.pipe(\n map(printerItems => printerItems.map(printerItem => printerItem.milestones.filter(milestone => !milestone.details.completed)))\n );\n\n constructor(\n private store: Store,\n private translateService: TranslateService,\n private fb: FormBuilder,\n private atPrinterService: AtPrinterService,\n private eventService: EventService,\n private cd: ChangeDetectorRef,\n private translate: TranslatePipe,\n private stepActionsService: StepActionsService,\n private messageService: MessageService,\n private modalService: ModalService,\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.request$\n .pipe(\n switchMap(request => this.atPrinterService.getRequestPrinterWorkItems(request.id)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n )\n .subscribe(printerItems => {\n this.setPrinterItems(printerItems);\n });\n\n this.eventService.on(\n Events.AtPrinterSubmitValidated,\n elementRef => {\n if (this.isDisabled) {\n return;\n }\n const isAllMilestonesCompleted = this.printerItems.every(printer =>\n printer.milestones.every(milestone => milestone.details.completed)\n );\n\n if (isAllMilestonesCompleted) {\n this.stepActionsService.addReason(elementRef, 'step-close', 'step-close', Events.StepClose, 'right');\n return;\n }\n\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('module.requests.at-printer.mark-complete-required'),\n this.translate.transform('module.requests.at-printer.mark-complete-error')\n );\n },\n this.ngUnsubscribe\n );\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n private setPrinterItems(printerItems: PrinterItemModel[]) {\n this.printerItemsSubject.next(\n printerItems.map(pi => ({\n /**\n * isChecked aggredated computed property\n */\n get isChecked(): boolean {\n const uncompletedRequests = (this.milestones as MilestoneItem[]).filter(m => !m.details.completed);\n /**\n * Checked if all checkable milestones are checked\n */\n return uncompletedRequests.reduce((c, m) => c && m.isChecked === true, uncompletedRequests.length >= 1);\n },\n set isChecked(isChecked: boolean) {\n this.milestones = this.milestones.map(m => ({...m, isChecked: m.details.completed ? false : isChecked}));\n },\n ...pi,\n milestones: pi.milestones.map(ms => ({...ms, isChecked: false})),\n pdfReferences: pi.purchaseOrderReferences.flatMap(ref => [\n {\n type: 'printer',\n id: ref.id,\n fileName: `PO #${ref.id}.pdf`,\n url: API.ihProdPoPdfDownload(this.requestId, ref.id, 'printer')\n },\n ])\n }))\n );\n }\n\n public getBulkLabel(printerItem: PrinterItemModel, printerIdx: number): Observable {\n if (printerItem.milestones.some(milestone => milestone.isChecked)) {\n return combineLatest([this.checkedMilestones$, this.checkableMilestones$]).pipe(\n map(([checkedMilestones, checkableMilestones]) => this.translateService.instant('common.label.selected-of', {\n selected: checkedMilestones[printerIdx].length,\n all: checkableMilestones[printerIdx].length\n }))\n );\n }\n return of(this.translateService.instant('common.label.select-all'));\n }\n\n public isBulkCheckboxDisabled(printerIdx: number): Observable {\n return this.checkableMilestones$.pipe(\n map(checkableMilestones => checkableMilestones[printerIdx].length <= 1)\n );\n }\n\n public isBulkDisabled(printerIdx: number): Observable {\n return this.checkedMilestones$.pipe(\n map(checkedMilestones => checkedMilestones[printerIdx].length <= 1));\n }\n\n private get printerItems(): PrinterItemModel[] {\n return this.printerItemsSubject.getValue();\n }\n\n public onSelectAllChange(isChecked: boolean, pIdx: number) {\n this.printerItems[pIdx].isChecked = isChecked;\n }\n\n public onBulkClick(printerIdx: number): void {\n const selectedItems: MilestoneItem[] = this.printerItems[printerIdx].milestones.filter(value => value.isChecked);\n\n const dialogRef = this.modalService.openModal(\n IhBulkChangeComponent,\n {\n requestId: this.requestId,\n itemId: this.printerItems[printerIdx].id,\n printerId: this.printerItems[printerIdx].printerDetails.id,\n selectedItems\n },\n 'bulk-change-modal'\n );\n\n dialogRef.afterClosed().subscribe(async dialogResponse => {\n // reload the data if the dialog was not just simply closed\n if (!dialogResponse) {\n return;\n }\n\n const data = this.printerItems.map((p, i) => {\n const {isChecked, ...printerItem} = p;\n if (i === printerIdx) {\n return dialogResponse;\n }\n return printerItem;\n });\n this.setPrinterItems([...data]);\n\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n });\n }\n\n public onMarkComplete(printerIdx: number, milestoneIdx: number, isCompleted: boolean): void {\n this.atPrinterService\n .updateMilestoneDetails(this.requestId, this.printerItems[printerIdx], this.printerItems[printerIdx].milestones[milestoneIdx], {\n completed: isCompleted,\n estimatedArrivalDate: this.printerItems[printerIdx].milestones[milestoneIdx].details?.estimatedArrivalDate || null\n })\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, isCompleted);\n });\n }\n\n public isMarkAsCompletedDisabled(printerIdx: number, milestoneIdx: number): Observable {\n return this.printerForm$.pipe(\n map(printerForm => {\n const estimatedArrivalDate = printerForm.get(`printerItems.${printerIdx}.milestones.${milestoneIdx}.estimatedArrivalDate`);\n\n return !(estimatedArrivalDate.value && estimatedArrivalDate.valid);\n })\n );\n }\n\n public onMilestoneCheck(isChecked: boolean, printerIdx: number, milestoneIdx: number): void {\n this.printerItems[printerIdx].milestones[milestoneIdx].isChecked = isChecked;\n this.cd.markForCheck();\n }\n\n public onMilestoneValuesChange(details: any, printerIdx: number, milestoneIdx: number): void {\n this.atPrinterService\n .updateMilestoneDetails(\n this.requestId,\n this.printerItems[printerIdx],\n this.printerItems[printerIdx].milestones[milestoneIdx],\n details\n )\n .subscribe(data => {\n this.onSuccessMilestoneUpdate(data, printerIdx, milestoneIdx, details.completed);\n });\n }\n\n private async onSuccessMilestoneUpdate(data: any, printerIdx: number, milestoneIdx: number, isCompleted: boolean): Promise {\n // Restrict updating with invalid data\n const currentMilestoneForm = (await this.printerForm$.pipe(take(1)).toPromise())\n .get('printerItems.' + printerIdx).get('milestones.' + milestoneIdx);\n\n if (!currentMilestoneForm.valid && !currentMilestoneForm.disabled) {\n return;\n }\n\n const milestone = this.printerItems[printerIdx].milestones[milestoneIdx];\n this.printerItems[printerIdx].milestones[milestoneIdx] = {\n ...milestone,\n details: data,\n isChecked: isCompleted ? false : milestone.isChecked\n };\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.cd.markForCheck();\n }\n\n}\n","\n \n\n\n \n \n \n
\n {{ 'module.requests.at-printer.printer' | translate }}:\n {{ printerItem.printerDetails.name }}\n
\n
\n
\n

{{ 'module.requests.at-printer.po-files' | translate }}

\n \n
\n
\n

{{ 'module.requests.at-printer.milestones' | translate }}

\n
\n \n \n {{ 'module.requests.at-printer.bulk-change' | translate }}\n \n
\n
\n \n \n \n {{ 'module.requests.at-printer.mark-complete' | translate }}\n \n\n \n \n {{ 'module.requests.at-printer.cancel-completion' | translate }}\n \n \n
\n
\n
\n
\n
\n
\n\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {combineLatest, Observable} from 'rxjs';\nimport {distinctUntilKeyChanged, map, pluck, take, takeUntil} from 'rxjs/operators';\nimport {RoleProviderAggregator} from 'src/app/requests/classes/role-provider-aggregator';\nimport {AbstractRoleUpdateAwareProvider} from 'src/app/requests/classes/role-update-aware-provider';\nimport {SpecificRoles} from 'src/app/shared/constants/user-roles.constant';\nimport {UserService} from 'src/app/shared/services/user.service';\n\nimport {WithDestroy} from '../../../../../shared/components/with-destroy/with-destroy.mixin';\nimport {selectImageRequestDetails} from 'src/app/requests/reducers/request-details/request-details.selectors';\n\nexport const ASSIGNED_TM_FIELD_NAME = 'trafficManager';\n\n@Component({\n selector: 'app-image-host',\n template: `\n \n `,\n styles: [\n `\n :host {\n display: contents;\n }\n `\n ]\n})\nexport class ImageHostComponent extends WithDestroy(AbstractRoleUpdateAwareProvider) implements OnInit, OnDestroy {\n constructor(private roleProviderAggregator: RoleProviderAggregator, private store: Store, private userService: UserService) {\n super();\n }\n ngOnDestroy(): void {\n this.roleProviderAggregator.removeRoleProvider(this);\n }\n ngOnInit(): void {\n this.roleProviderAggregator.addRoleProvider(this);\n }\n\n private trafficManagerAssigned(): Observable {\n return combineLatest([this.store.select(selectImageRequestDetails), this.userService.getUserDetails$()]).pipe(\n map(([rd, u]) => UserService.userApplicable(u, rd.details[ASSIGNED_TM_FIELD_NAME])),\n map(isAssigned => (isAssigned ? SpecificRoles.ASSIGNED_TM : null))\n );\n }\n\n public async getRoles(): Promise {\n const specificRole = await this.trafficManagerAssigned().pipe(take(1)).toPromise();\n return [specificRole].filter(s => !!s);\n }\n\n roleUpdates$ = this.store.select(selectImageRequestDetails).pipe(\n pluck('details'),\n distinctUntilKeyChanged(ASSIGNED_TM_FIELD_NAME),\n map(details => ({\n source: this,\n data: details[ASSIGNED_TM_FIELD_NAME]\n })),\n takeUntil(this.ngUnsubscribe$)\n );\n}\n","import {Injectable} from '@angular/core';\nimport {HttpEvent, HttpEventType} from '@angular/common/http';\nimport {Observable, of} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {FileDownloadService} from './file-download.service';\nimport {FileUploadService} from './file-upload.service';\nimport {API} from '../../shared/constants/api.constants';\nimport {ErrorHandlingHttpClient} from '../../shared/services/error-handling-http-client.service';\nimport {ImageRequestItemCompleted, ImageRequestModel} from '../models/image-request.model';\nimport {ArtworkItemModel} from 'src/app/requests/models/artwork-item.model';\nimport {UserModel} from '../../shared/models/user.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ImageRequestService {\n constructor(\n private errorHandlingHttp: ErrorHandlingHttpClient,\n private fileUploadService: FileUploadService,\n private fileDownloadService: FileDownloadService,\n ) {\n }\n\n public getBrands(name: string): Observable> {\n return this.errorHandlingHttp.get(API.imageBrand, {params: {name}});\n }\n\n public uploadArtFile(requestId: string | number, file: File): Observable {\n return this.fileUploadService.requestAttachmentUploadLink(requestId, 'art', file).pipe(\n switchMap(uploadLink => this.fileUploadService.uploadFileWithProgress(uploadLink, file).pipe(\n switchMap(event => event.type === HttpEventType.Response\n ? this.createArtFile(requestId, uploadLink.uploadId)\n : of(event))\n ))\n );\n }\n\n public deleteArtFile(requestId: string | number, attachmentId: string | number): Observable {\n return this.errorHandlingHttp.delete(`${API.imageDeleteArtFile(requestId, attachmentId)}`);\n }\n\n private createArtFile(requestId: string | number, uploadId: string): Observable> {\n return this.errorHandlingHttp.post(`${API.imageCreateArtFile(requestId)}`, null, {\n reportProgress: true,\n observe: 'events',\n params: { uploadId },\n });\n }\n\n public updateDesigner(requestId: number, designer: UserModel): Observable {\n return this.errorHandlingHttp.put(API.imageUpdateDesigner(requestId), designer);\n }\n\n public deleteDesigner(requestId: number): Observable {\n return this.errorHandlingHttp.delete(API.imageUpdateDesigner(requestId));\n }\n\n public updateFinalArtFilePath(requestId: string, data: string): Observable {\n return this.errorHandlingHttp.put(API.imageUpdateArtFilePath(requestId), data);\n }\n\n public updateItemCompletedFlag(requestId: string, date: string): Observable {\n return this.errorHandlingHttp.put(API.imageUpdateRequestItemsCompleted(requestId), date);\n }\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageFormatService {\n\n readonly BUY_ONLINE = 'BUY_ONLINE';\n readonly TOKENIZATION = 'TOKENIZATION';\n\n public isBuyOnlineTipVisible(value: string): boolean {\n return value === this.BUY_ONLINE;\n }\n\n public isTokenizationTipVisible(value: string): boolean {\n return value === this.TOKENIZATION;\n }\n\n}\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, Optional, OnDestroy} from '@angular/core';\nimport {ControlContainer} from '@angular/forms';\nimport {Subject} from 'rxjs';\nimport {ImageRequestService} from '../../../../../services/image-request.service';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-image-brand',\n templateUrl: './image-brand.component.html',\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ImageBrandComponent implements OnInit, OnDestroy {\n @Input() public formValidationTrigger: Subject;\n\n public brandDataLoading: Subject = new Subject();\n public brandList = [];\n\n private ngUnsubscribe = new Subject();\n\n constructor(@Optional() public controlContainer: ControlContainer,\n private imageRequestService: ImageRequestService,\n private cd: ChangeDetectorRef) {}\n\n ngOnInit() {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n public getBrandData(brandName: string) {\n this.brandDataLoading.next(true);\n this.controlContainer.control?.get('brand')?.updateValueAndValidity();\n this.imageRequestService.getBrands(brandName)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(data => {\n this.brandList = Object.assign(data);\n this.cd.detectChanges();\n this.brandDataLoading.next(false);\n },\n () => this.brandDataLoading.next(false));\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","
\n
\n \n \n
\n
\n","
\n
\n
\n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, OnDestroy} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {selectDielines} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {Store} from '@ngrx/store';\nimport {lazyLoadDielines} from '../../../../../../reducers/ref-data/refdata.actions';\nimport {merge, of, Subject} from 'rxjs';\nimport {RequestsService} from '../../../../../services/requests.service';\nimport {WpnResponse} from '../../../../../models/wpn-response';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-image-item-form',\n templateUrl: './image-item-form.component.html',\n styleUrls: ['./image-item-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageItemFormComponent implements OnInit, OnDestroy {\n @Input() public itemForm: FormGroup;\n @Input() public requestItemIndex: number;\n @Input() public isDisabled: boolean;\n @Input() public isRemoveDisabled: boolean;\n @Input() public formValidationTrigger: Subject;\n\n @Output() public remove: EventEmitter = new EventEmitter();\n\n public dielines$ = this.store.select(selectDielines);\n public isWpnExistInMDM: boolean;\n public isWpnLoading = false;\n\n private ngUnsubscribe = new Subject();\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private requestService: RequestsService,\n ) { }\n\n ngOnInit(): void {\n this.formValidationTrigger.subscribe(() => {\n this.cd.markForCheck();\n });\n\n this.store.dispatch(lazyLoadDielines());\n this.setWpnSubscriptions();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public removeItem(): void {\n this.remove.emit(this.requestItemIndex);\n }\n\n private setWpnSubscriptions(): void {\n merge(of(this.itemForm?.get('wpn').value), this.itemForm?.get('wpn').valueChanges)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(newVal => {\n if (this.isDisabled) {\n return;\n }\n\n if (newVal && this.itemForm.get('wpn')?.valid) {\n this.getWPNData();\n } else {\n this.clearWpnInfo();\n }\n\n this.cd.markForCheck();\n });\n }\n\n private clearWpnInfo(): void {\n if (this.isWpnExistInMDM) {\n this.itemForm.get('wpnDescription').reset();\n this.itemForm.get('denom').reset();\n } else {\n this.itemForm.get('wpnDescription').updateValueAndValidity({onlySelf: true, emitEvent: false});\n this.itemForm.get('denom').updateValueAndValidity({onlySelf: true, emitEvent: false});\n }\n this.isWpnExistInMDM = false;\n }\n\n private getWPNData(): void{\n this.isWpnExistInMDM = false;\n this.isWpnLoading = true;\n const wpn = this.itemForm.get('wpn').value;\n this.itemForm.get('wpnDescription').reset();\n this.itemForm.get('denom').reset();\n this.requestService.getWPNdata(wpn).subscribe((wpnResponse: WpnResponse[]) => {\n if(wpnResponse.length) {\n this.isWpnExistInMDM = true;\n const maxDcmsIdItem = wpnResponse.reduce((maxValue, item) => item.dcmsId > maxValue.dcmsId ? item : maxValue);\n\n this.itemForm.get('wpnDescription').setValue(maxDcmsIdItem.packageDescription);\n this.itemForm.get('denom').setValue(maxDcmsIdItem.denom);\n } else {\n this.itemForm.get('wpn').reset();\n this.clearWpnInfo();\n }\n },\n () => {\n this.isWpnExistInMDM = false;\n this.itemForm.get('wpn').reset();\n this.clearWpnInfo();\n }, () => {\n this.isWpnLoading = false;\n this.cd.markForCheck();\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Action, ActionsSubject, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { combineLatest, Subject } from 'rxjs';\nimport { filter, shareReplay, takeUntil } from 'rxjs/operators';\nimport { ArtworkFileAttachment } from 'src/app/requests/models/card-design-request.model';\nimport { RequestDetailsStageController } from 'src/app/requests/models/request-details-stage-controller.model';\nimport { RandomUtilsService } from 'src/app/shared/services/random-utils.service';\n\nimport {\n lazyLoadArtLocationsTypes,\n lazyLoadDesignLineOfBusiness,\n lazyLoadImageFormatTypes,\n lazyLoadRegions,\n} from '../../../../../reducers/ref-data/refdata.actions';\nimport {\n selectArtLocationTypes,\n selectDesignLineOfBusiness,\n selectImageFormatTypes,\n selectRegions,\n} from '../../../../../reducers/ref-data/refdata.selectors';\nimport { FILE_TYPES } from '../../../../../shared/constants/upload-restrictions.constants';\nimport { UserRoles } from '../../../../../shared/constants/user-roles.constant';\nimport { CodeNameModel } from '../../../../../shared/models/code-name.model';\nimport { FILE_SIZE_RESTRICTIONS } from '../../../../../shared/models/upload-file-restrictions.model';\nimport { DateService } from '../../../../../shared/services/date-service.service';\nimport { Events, EventService } from '../../../../../shared/services/event-service.service';\nimport { ImageFormatService } from '../../../../../shared/services/image-format.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { RequestStageActions } from '../../../../../shared/services/request-stages.enum';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport {\n IMAGE_DENOM_PATTERN,\n INTEGER_PATTERN,\n MAX_ITEMS_PER_IMAGE_REQUEST,\n} from '../../../../constants/request-details.constants';\nimport { IMAGE_REQUEST } from '../../../../constants/request-types.constant';\nimport { ImageRequestItemModel, ImageRequestModel } from '../../../../models/image-request.model';\nimport { requestDetailsActions } from '../../../../reducers/request-details/request-details.actions';\nimport { selectImageRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { ImageRequestService } from '../../../../services/image-request.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { REQUEST_CONTROLLER } from '../../../request-details/request-details.constants';\nimport { RequestController } from '../../../request-details/request-details.model';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-image-details',\n templateUrl: './image-details.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageDetailsComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges, RequestDetailsStageController {\n @Output() private deleteDraft = new EventEmitter();\n\n public userRoles = UserRoles;\n public form: FormGroup;\n public requestItemsControls: FormArray;\n\n public designLineOfBusinessList: any[] = [];\n public regions: CodeNameModel[] = [];\n public imageFormatTypes: CodeNameModel[] = [];\n public artLocationTypes: CodeNameModel[] = [];\n public request: ImageRequestModel;\n public formValidationTrigger: Subject = new Subject();\n public MAX_ITEMS_PER_REQUEST = MAX_ITEMS_PER_IMAGE_REQUEST;\n public readonly artFileRestriction = {\n fileType: FILE_TYPES.IMAGE.ART_FILE,\n fileSize: FILE_SIZE_RESTRICTIONS.IMAGE.ART_FILE,\n };\n\n private ngUnsubscribe = new Subject();\n private isShowSavedMessage = false;\n\n private data$ = combineLatest([\n this.store.select(selectImageRequestDetails).pipe(\n filter(request => request !== null && request?.type === IMAGE_REQUEST),\n ),\n this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)),\n this.store.select(selectRegions).pipe(filter(v => v.length > 0)),\n this.store.select(selectImageFormatTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectArtLocationTypes).pipe(filter(v => v.length > 0))\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private store: Store,\n private actions: ActionsSubject,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n private eventService: EventService,\n private messageService: MessageService,\n private imageRequestService: ImageRequestService,\n private imageFormatService: ImageFormatService,\n public utilsService: UtilsService,\n public dateService: DateService,\n @Optional() @Inject(REQUEST_CONTROLLER) private requestController: RequestController\n ) {\n super();\n }\n\n public async ngOnInit(): Promise {\n this.requestController.registerRequestDetailsController(this);\n this.store.dispatch(lazyLoadDesignLineOfBusiness());\n this.store.dispatch(lazyLoadRegions());\n this.store.dispatch(lazyLoadImageFormatTypes());\n this.store.dispatch(lazyLoadArtLocationsTypes());\n\n this.setEventsSubs();\n this.getData();\n }\n\n public async validate(): Promise {\n if(this.form.disabled) {\n // Form is disabled - we should skip save operation\n return Promise.resolve(true);\n }\n\n this.form.markAllAsTouched();\n this.cd.markForCheck();\n this.formValidationTrigger.next(null);\n return Promise.resolve(this.form.valid);\n }\n\n public ngOnDestroy(): void {\n this.formValidationTrigger.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n public uploadArtFileFunction = (file) => this.imageRequestService.uploadArtFile(this.requestId, file);\n\n public removeArtFileFunction = (attachmentId: number) => this.imageRequestService.deleteArtFile(this.requestId, attachmentId);\n\n public onUpdateArtFile(obj: { action: string; data: ArtworkFileAttachment }): void {\n if (obj.action === 'add') {\n this.request.details.artFiles.push(obj.data);\n } else {\n const index = this.request.details.artFiles.findIndex(item => item?.id === obj.data);\n this.request.details.artFiles.splice(index, 1);\n }\n }\n\n private buildForm(request?: ImageRequestModel): void {\n this.form = this.form || this.fb.group({\n details: this.fb.group({\n brand: [request?.details.brand || null, [Validators.required, Validators.maxLength(100)]],\n existingPartner: [request?.details.existingPartner || false, Validators.required],\n deliveryDate: [request?.details.deliveryDate || null, Validators.required],\n lineOfBusiness: [request?.details.lineOfBusiness || null, Validators.required],\n regionCode: [request?.details.regionCode || null, Validators.required],\n imageFormatTypeCode: [request?.details.imageFormatTypeCode || null, Validators.required],\n artworkLocationTypeCode: [request?.details.artworkLocationTypeCode || null, Validators.required],\n notes: request?.details.notes || null,\n artFiles: this.fb.array(request?.details.artFiles || []),\n }),\n items: this.fb.array([]),\n });\n\n this.requestItemsControls = this.form.get('items') as FormArray;\n this.requestItemsControls.clear();\n\n if (request?.items?.length) {\n request.items.forEach(item => this.requestItemsControls.push(this.getItemForm(item)));\n } else {\n this.requestItemsControls.push(this.getItemForm(this.emptyItemDetails));\n }\n\n this.toggleFormDisabling();\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.form?.disable();\n this.cd.markForCheck();\n return;\n }\n\n this.form?.enable();\n this.cd.markForCheck();\n }\n\n private setEventsSubs(): void {\n this.eventService.on(Events.RequestDetailsDelete, () => {\n this.deleteDraft.emit();\n }, this.ngUnsubscribe);\n\n this.eventService.on(Events.RequestDetailsSave, () => {\n this.isShowSavedMessage = true;\n this.saveRequest();\n }, this.ngUnsubscribe);\n\n this.eventService.on(Events.RequestDetailsValidation, (elementRef) => {\n if (this.form.valid) {\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', Events.RequestDetailsSubmit, 'right');\n } else {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'),\n );\n\n this.form.markAllAsTouched();\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n\n this.cd.markForCheck();\n }\n }, this.ngUnsubscribe);\n\n this.eventService.on(Events.RequestDetailsSubmit, (event) => {\n this.saveRequest();\n\n this.actions\n .pipe(\n filter((action: Action) => action.type === requestDetailsActions.updateRequestDetailsSuccess.type),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment,\n },\n });\n });\n }, this.ngUnsubscribe);\n }\n\n private getData(): void {\n this.data$.subscribe((\n [request, designLineOfBusiness, regions, imageFormatTypes, artLocationTypes]:\n [ImageRequestModel, CodeNameModel[], CodeNameModel[], CodeNameModel[], CodeNameModel[]]\n ) => {\n this.request = cloneDeep(request);\n\n this.designLineOfBusinessList = this.utilsService.getParentChild(cloneDeep(designLineOfBusiness));\n this.regions = regions;\n this.imageFormatTypes = imageFormatTypes;\n this.artLocationTypes = artLocationTypes;\n\n this.buildForm(this.request);\n\n if (this.isShowSavedMessage) {\n this.messageService.showSystemMessage('success', this.translateService.instant('common.message.step-saved'), '');\n this.isShowSavedMessage = false;\n }\n\n this.formValidationTrigger.next(RandomUtilsService.randomNumberUnsafe());\n this.cd.markForCheck();\n });\n }\n\n saveRequest(): void {\n const form = this.form.getRawValue();\n\n if (this.request.details.brand?.id && form.details.brand) {\n form.details.brand = {\n id: this.request.details.brand.id,\n ...form.details.brand,\n };\n }\n\n const request: ImageRequestModel = {\n ...this.request,\n details: { ...this.request.details, ...form.details },\n items: form.items,\n };\n\n this.store.dispatch(requestDetailsActions.updateRequestDetails({ requestId: this.requestId, details: request }));\n }\n\n public get isBuyOnlineTipVisible(): boolean {\n return this.imageFormatService.isBuyOnlineTipVisible(this.form.get('details.imageFormatTypeCode').value);\n }\n\n public get isTokenizationTipVisible(): boolean {\n return this.imageFormatService.isTokenizationTipVisible(this.form.get('details.imageFormatTypeCode').value);\n }\n\n public onAddRequestItem(): void {\n this.requestItemsControls.push(this.getItemForm(this.emptyItemDetails));\n }\n\n public onRemoveRequestItem(index: number): void {\n if (this.requestItemsControls.controls?.length > 1) {\n this.requestItemsControls.removeAt(index);\n }\n }\n\n private getItemForm(item?: ImageRequestItemModel): FormGroup {\n return this.fb.group({\n id: this.fb.control(item.id || null),\n wpn: this.fb.control(item.wpn, {\n updateOn: 'blur',\n validators: [Validators.minLength(12), Validators.maxLength(13), Validators.pattern(INTEGER_PATTERN)],\n }),\n wpnDescription: this.fb.control(item.wpnDescription, [Validators.required, Validators.maxLength(100)]),\n denom: this.fb.control(item.denom, [Validators.required, Validators.maxLength(50), Validators.pattern(IMAGE_DENOM_PATTERN)]),\n dielineTypeCode: this.fb.control(item.dielineTypeCode, [Validators.required])\n });\n }\n\n private get emptyItemDetails(): ImageRequestItemModel {\n return {\n id: null,\n wpn: null,\n wpnDescription: null,\n denom: null,\n dielineTypeCode: null,\n completed: null,\n };\n }\n}\n","
\n
\n {{'module.requests.stages.REQUEST_DETAILS' | translate}}\n
\n \n
\n \n
\n
\n
\n
\n \n
\n
\n\n
\n
\n
\n \n
\n
\n \n
\n
\n\n
\n
\n
\n \n
\n
\n \n
\n \n \n {{ 'module.requests.image.details.buy-online-hint' | translate }}\n \n \n \n {{ 'module.requests.image.details.tokenization-hint' | translate }}\n \n
\n\n
\n
\n \n
\n\n
\n \n \n
\n
\n\n \n\n
\n {{'module.requests.text.request-items' | translate}}\n\n \n \n\n
\n \n \n
\n\n \n\n \n \n {{'module.requests.details.add-one-item' | translate}}\n \n
\n
\n","import {updateRequestDetailsDesignerChoiceCreator} from './request-details.utils';\n\nexport enum ImageActions {\n UpdateDesigner = '[RequestDetails ImageRequest] Update designer',\n}\n\nconst updateDesignerChoice = updateRequestDetailsDesignerChoiceCreator(\n ImageActions.UpdateDesigner,\n);\n\nexport const imageActions = {\n updateDesignerChoice,\n};\n","
\n
\n {{'module.requests.image.details.brand-name' | translate}}:\n {{reqDetails?.brand.name}}\n
\n
\n {{'module.requests.image.details.delivery-date' | translate}}:\n {{reqDetails?.deliveryDate | date: 'MM/dd/yyyy'}}\n
\n
\n
\n
\n {{'module.requests.image.details.partner-type' | translate}}:\n {{reqDetails?.existingPartner\n ? ('module.requests.image.details.existing-partner' | translate)\n : ('module.requests.image.details.new-partner' | translate)}}\n \n
\n
\n
\n
\n {{'module.requests.image.details.line-of-business' | translate}}:\n {{utilsService.getItemName(designLineOfBusinessList, reqDetails?.lineOfBusiness)}}\n
\n
\n {{'module.requests.image.details.region' | translate}}:\n {{utilsService.getItemName(regions, reqDetails?.regionCode)}}\n
\n
\n
\n
\n {{'module.requests.image.details.image-format' | translate}}:\n {{utilsService.getItemName(imageFormatTypes, reqDetails?.imageFormatTypeCode)}}\n
\n
\n {{'module.requests.image.details.artwork-location' | translate}}:\n {{utilsService.getItemName(artLocationTypes, reqDetails?.artworkLocationTypeCode)}}\n
\n
\n
\n
\n {{'module.requests.image.details.notes' | translate}}:\n {{reqDetails?.notes}}\n
\n
\n\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, OnDestroy} from '@angular/core';\nimport {ImageRequestDetails} from 'src/app/requests/models/image-request.model';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {\n selectArtLocationTypes,\n selectImageFormatTypes,\n selectRegions,\n selectDesignLineOfBusiness\n} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {Store} from '@ngrx/store';\nimport {combineLatest, Subject} from 'rxjs';\nimport {CodeNameModel} from '../../../../../../shared/models/code-name.model';\nimport cloneDeep from 'lodash/cloneDeep';\n\n@Component({\n selector: 'app-image-details-block',\n templateUrl: './image-details-block.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageDetailsBlockComponent implements OnInit, OnDestroy {\n @Input() public reqDetails: ImageRequestDetails;\n @Input() public hideFirstRow?: boolean;\n\n private ngUnsubscribe = new Subject();\n\n public designLineOfBusinessList: any[] = [];\n public regions: CodeNameModel[] = [];\n public imageFormatTypes: CodeNameModel[] = [];\n public artLocationTypes: CodeNameModel[] = [];\n\n $refData = combineLatest([\n this.store.select(selectDesignLineOfBusiness).pipe(filter(v => v.length > 0)),\n this.store.select(selectRegions).pipe(filter(v => v.length > 0)),\n this.store.select(selectImageFormatTypes).pipe(filter(v => v.length > 0)),\n this.store.select(selectArtLocationTypes).pipe(filter(v => v.length > 0))\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(\n public utilsService: UtilsService,\n private store: Store,\n private cd: ChangeDetectorRef,\n ) { }\n\n ngOnInit(): void {\n this.$refData.subscribe(([designLineOfBusinessList, regions, imageFormatTypes, artLocationTypes]) => {\n this.designLineOfBusinessList = this.utilsService.getParentChild(cloneDeep(designLineOfBusinessList));\n this.regions = regions;\n this.imageFormatTypes = imageFormatTypes;\n this.artLocationTypes = artLocationTypes;\n\n this.cd.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","
\n
\n
\n {{'module.requests.details.wpn' | translate}}:\n {{item?.wpn}}\n
\n
\n {{'module.requests.image.items.wpn-description' | translate}}:\n {{item?.wpnDescription}}\n
\n
\n {{'module.requests.finance.denom' | translate}}:\n {{item?.denom}}\n
\n
\n {{'module.requests.finance.dieline' | translate}}:\n {{utilsService.getItemName(dielines$ | async, item?.dielineTypeCode)}}\n
\n
\n \n \n \n {{'module.requests.image.tm-review.complete-all-checkbox' | translate}}\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self\n} from '@angular/core';\nimport {ImageRequestItemModel} from '../../../../../models/image-request.model';\nimport {UtilsService} from '../../../../../../shared/services/utils.service';\nimport {selectDielines} from '../../../../../../reducers/ref-data/refdata.selectors';\nimport {Store} from '@ngrx/store';\nimport {shareReplay, takeUntil} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {ControlContainer, FormControl} from '@angular/forms';\n\n@Component({\n selector: 'app-image-item-block',\n templateUrl: './image-item-block.component.html',\n styleUrls: ['./image-item-block.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageItemBlockComponent implements OnInit, OnDestroy {\n @Input() public item: ImageRequestItemModel;\n @Input() shouldHideCompleteCheckbox?: boolean;\n @Input() formValidationTrigger?: Subject;\n\n private ngUnsubscribe = new Subject();\n public showError: boolean;\n\n public dielines$ = this.store.select(selectDielines).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n\n constructor(\n public utilsService: UtilsService,\n private store: Store,\n @Optional() @Self() public controlContainer: ControlContainer,\n private cd: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n this.formValidationTrigger?.subscribe(_ => {\n const completedControl: FormControl = this.controlContainer.control.get('completed') as FormControl;\n this.showError = !completedControl?.value && completedControl?.hasError('checkboxTrueValidator');\n this.cd.markForCheck();\n });\n this.controlContainer?.control.valueChanges\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(value => {\n this.showError = false;\n });\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","\n
\n
\n \n \n \n
\n
\n \n
\n \n \n
\n
\n \n
\n\n \n\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n\n
\n \n \n
\n
\n\n \n\n
\n\n
\n
{{'module.requests.image.tm-review.designer-assign-and-confirmation-path' | translate}}
\n \n\n
\n \n
\n
\n\n
\n
{{'module.requests.image.tm-review.confirmation-path' | translate}}
\n\n
\n \n
\n
\n
\n
\n","import {ChangeDetectionStrategy, Component, OnInit, OnDestroy, ChangeDetectorRef, SimpleChanges, OnChanges, Input} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {selectImageRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, switchMap, take, takeUntil} from 'rxjs/operators';\nimport {BehaviorSubject, Subject} from 'rxjs';\nimport {ImageRequestModel} from 'src/app/requests/models/image-request.model';\nimport {UserModel} from '../../../../../shared/models/user.model';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {imageActions} from '../../../../reducers/request-details/image.actions';\nimport {EventService, ImageEvents, Events} from '../../../../../shared/services/event-service.service';\nimport {MessageService} from '../../../../../shared/services/message-service.service';\nimport {TranslateService} from '@ngx-translate/core';\nimport {RequestStageActions} from '../../../../../shared/services/request-stages.enum';\nimport {StepActionsService} from '../../../../services/step-actions.service';\nimport {ImageRequestService} from '../../../../services/image-request.service';\nimport {TrafficManagers, UserRoles} from '../../../../../shared/constants/user-roles.constant';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {WithTmAssignment} from '../../../shared/tm-assignment/tm-assignment.mixin';\nimport {WithPanelExpanded} from 'src/app/shared/components/expansion-panel-state-controller/expansion-panel-expand-state';\nimport {UserService} from 'src/app/shared/services/user.service';\nimport {UserPermissionsService} from 'src/app/shared/services/user-permissions.service';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport {Actions, ofType} from '@ngrx/effects';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ImageTmReviewComponentBase = WithTmAssignment(WithPanelExpanded('first'));\n\n@Component({\n selector: 'app-image-tm-review',\n templateUrl: './image-tm-review.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageTmReviewComponent extends ImageTmReviewComponentBase implements OnInit, OnDestroy, OnChanges {\n @Input() requestId: string;\n @Input() isDisabled: boolean;\n isStepDisabledSubject = new BehaviorSubject(null);\n @Input() public set isStepDisabled(isStepDisabled: boolean) {\n this.isStepDisabledSubject.next(isStepDisabled);\n }\n get isStepDisabled(): boolean {\n return this.isStepDisabledSubject.value;\n }\n\n private ngUnsubscribe = new Subject();\n\n public request: ImageRequestModel;\n public tmForm: FormGroup;\n public designerControl: FormControl;\n public userRoles = UserRoles;\n\n request$ = this.store.select(selectImageRequestDetails).pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false\n })\n );\n readonly AssignTrafficManagerGroups = [TrafficManagers.IR];\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private fb: FormBuilder,\n private eventService: EventService,\n private messageService: MessageService,\n private translateService: TranslateService,\n private stepActionsService: StepActionsService,\n private imageRequestService: ImageRequestService,\n userService: UserService,\n userPermissionsService: UserPermissionsService,\n private loaderService: LoaderService,\n private actions: Actions\n ) {\n super(\n store,\n cd,\n fb,\n eventService,\n messageService,\n translateService,\n stepActionsService,\n imageRequestService,\n userService,\n userPermissionsService,\n loaderService,\n actions\n );\n }\n\n ngOnInit(): void {\n super.ngOnInit();\n this.buildTmForm();\n this.request$.pipe(takeUntil(this.ngUnsubscribe)).subscribe(request => {\n this.request = request ? cloneDeep(request) : null;\n this.tmForm.patchValue(\n {\n designer: this.request.details.designer,\n finalArtFilePath: this.tmForm?.get('finalArtFilePath')?.value ?? this.request.details.finalArtFilePath\n },\n {\n emitEvent: false\n }\n );\n this.cd.markForCheck();\n });\n\n this.setStepSubmitListeners();\n this.handleDesignerChange();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes?.isDisabled) {\n this.toggleControlsDisabling();\n this.cd.markForCheck();\n }\n }\n\n private handleDesignerChange(): void {\n this.designerControl.valueChanges\n .pipe(\n filter(() => !this.isDisabled),\n switchMap(designer => {\n this.loaderService.showLoader();\n this.store.dispatch(\n imageActions.updateDesignerChoice({\n designer\n })\n );\n return this.actions.pipe(\n ofType(requestDetailsActions.updateRequestDetailsSuccess, requestDetailsActions.updateRequestDetailsDesignerChoiceFailure),\n take(1),\n takeUntil(this.ngUnsubscribe)\n );\n }),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(() => {\n this.loaderService.hideLoader();\n });\n }\n\n private buildTmForm(): void {\n this.tmForm = this.fb.group({\n designer: [null, Validators.required],\n finalArtFilePath: [null, [Validators.required, Validators.maxLength(1024)]]\n });\n\n this.designerControl = this.tmForm.get('designer') as FormControl;\n this.toggleControlsDisabling();\n }\n\n public onDesignerChange(value: UserModel): void {\n console.log(value);\n this.designerControl.setValue(value);\n this.designerControl.updateValueAndValidity();\n this.cd.markForCheck();\n }\n\n private toggleControlsDisabling(): void {\n if (this.isDisabled) {\n this.tmForm?.disable({emitEvent: false});\n } else {\n this.tmForm?.enable({emitEvent: false});\n }\n }\n\n private setStepSubmitListeners(): void {\n this.eventService.on(\n ImageEvents.TmReviewSubmitValidated,\n elementRef => {\n this.tmForm.markAllAsTouched();\n this.cd.markForCheck();\n\n if (this.tmForm.invalid) {\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.modal.errors.invalid-form-header'),\n this.translateService.instant('common.modal.errors.invalid-form-desc')\n );\n\n return;\n }\n\n this.stepActionsService.addReason(elementRef, 'step-submit', 'step-submit', ImageEvents.TmReviewSubmit, 'right');\n },\n this.ngUnsubscribe\n );\n\n this.eventService.on(\n ImageEvents.TmReviewSubmit,\n event => {\n this.imageRequestService.updateFinalArtFilePath(this.requestId, this.tmForm.get('finalArtFilePath').value || '').subscribe(() => {\n this.eventService.emit({\n eventName: Events.ChangeRequestStage,\n value: {\n requestId: this.requestId,\n actionType: RequestStageActions.Complete,\n comment: event.comment\n }\n });\n });\n },\n this.ngUnsubscribe\n );\n }\n}\n","\n
\n {{ 'module.requests.image.details.request-details-label' | translate }}\n
\n
\n
\n
\n {{'module.requests.image.details.brand-name' | translate}}:\n {{reqDetails?.brand.name}}\n
\n
\n {{'module.requests.image.details.delivery-date' | translate}}:\n {{reqDetails?.deliveryDate | date: 'MM/dd/yyyy'}}\n
\n
\n
\n
\n \n \n
\n \n
\n
\n\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {ImageRequestDetails} from '../../../../../models/image-request.model';\n\n@Component({\n selector: 'app-image-details-accordion',\n templateUrl: './image-details-accordion.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageDetailsAccordionComponent {\n @Input() public reqDetails: ImageRequestDetails;\n @Input() public requestId?: string;\n @Input() public shouldShowFiles?: boolean;\n\n}\n","
\n \n
\n
\n {{ 'module.requests.image.details.art-file-path' | translate }}:\n \n {{ request?.details?.finalArtFilePath }}\n \n
\n
\n\n \n\n
\n
\n {{ 'module.requests.text.request-items' | translate }}\n \n
\n\n
\n \n
\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { select, Store } from '@ngrx/store';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, finalize, shareReplay, takeUntil } from 'rxjs/operators';\nimport {\n ImageRequestItemCompleted,\n ImageRequestItemModel,\n ImageRequestModel,\n} from 'src/app/requests/models/image-request.model';\n\nimport { Events, EventService, ImageEvents } from '../../../../../shared/services/event-service.service';\nimport { LoaderService } from '../../../../../shared/services/loader.service';\nimport { MessageService } from '../../../../../shared/services/message-service.service';\nimport { UtilsService } from '../../../../../shared/services/utils.service';\nimport { selectImageRequestDetails } from '../../../../reducers/request-details/request-details.selectors';\nimport { ImageRequestService } from '../../../../services/image-request.service';\nimport { StepActionsService } from '../../../../services/step-actions.service';\nimport { AbstractRequestStepComponent } from '../../../request-step-details/abstract-request-step.class';\n\n@Component({\n selector: 'app-image-design-process',\n templateUrl: './image-design-process.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageDesignProcessComponent extends AbstractRequestStepComponent implements OnInit, OnDestroy, OnChanges {\n private ngUnsubscribe = new Subject();\n public formValidationTrigger: Subject = new Subject();\n\n public tmForm: FormGroup;\n\n public request: ImageRequestModel;\n\n request$ = this.store.select(selectImageRequestDetails).pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n get itemsArray(): FormArray {\n return this.tmForm.get('items') as FormArray;\n }\n\n constructor(\n private eventService: EventService,\n private store: Store,\n private fb: FormBuilder,\n private cd: ChangeDetectorRef,\n private stepActionsService: StepActionsService,\n private imageRequestService: ImageRequestService,\n private loaderService: LoaderService,\n private messageService: MessageService,\n private translateService: TranslateService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.request$ = this.store.select(selectImageRequestDetails).pipe(filter(v => !!v)).pipe(\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n this.store\n .pipe(\n select(selectImageRequestDetails),\n filter(v => v !== null),\n takeUntil(this.ngUnsubscribe),\n )\n .subscribe(requestData => {\n this.buildForm(requestData);\n });\n\n this.setStepSubmitListeners();\n this.toggleFormDisabling();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n this.formValidationTrigger.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes?.isDisabled) {\n this.toggleFormDisabling();\n this.cd.markForCheck();\n }\n }\n\n private toggleFormDisabling(): void {\n if (this.isDisabled) {\n this.tmForm?.disable({ emitEvent: false });\n return;\n }\n this.tmForm?.enable({ emitEvent: false });\n }\n\n private buildForm(request: ImageRequestModel): void {\n this.tmForm = this.fb.group({\n items: this.fb.array(\n request.items.map((item: ImageRequestItemModel) =>\n this.fb.group({\n id: this.fb.control(item.id),\n completed: this.fb.control(item.completed, [Validators.required, UtilsService.checkboxTrueValidationFn()])\n })\n )\n )\n });\n this.toggleFormDisabling();\n }\n\n private setStepSubmitListeners(): void {\n this.eventService.on(ImageEvents.DesignProcessSubmitValidated, (elementRef) => {\n if (this.tmForm.invalid) {\n this.formValidationTrigger.next();\n this.messageService.showSystemMessage(\n 'error',\n this.translateService.instant('common.message.invalid-form'),\n this.translateService.instant('common.message.invalid-form-message'),\n );\n this.tmForm.markAllAsTouched();\n this.cd.markForCheck();\n } else {\n this.loaderService.showLoader();\n this.updateItemCompletedFlag()\n .pipe(finalize(() => {\n this.loaderService.hideLoader();\n }))\n .subscribe(res => {\n this.stepActionsService.addReason(elementRef,\n 'step-submit', 'step-submit', Events.StepSubmit, 'right');\n });\n }\n }, this.ngUnsubscribe);\n }\n\n private updateItemCompletedFlag(): Observable {\n const data = this.tmForm.getRawValue().items.map(item => ({\n requestItemId: item.id,\n completed: item.completed\n }));\n return this.imageRequestService.updateItemCompletedFlag(this.requestId, data);\n }\n}\n","
\n \n
\n
\n {{'module.requests.image.details.art-file-path' | translate}}:\n {{request?.details?.finalArtFilePath}}\n
\n
\n\n \n\n
\n
\n {{'module.requests.text.request-items' | translate}}\n \n
\n\n
\n \n \n
\n
\n\n
\n","import {ChangeDetectionStrategy, Component, OnDestroy} from '@angular/core';\nimport {AbstractRequestStepComponent} from '../../../request-step-details/abstract-request-step.class';\nimport {Store} from '@ngrx/store';\nimport {selectImageRequestDetails} from '../../../../reducers/request-details/request-details.selectors';\nimport {filter, shareReplay, takeUntil} from 'rxjs/operators';\nimport {Subject} from 'rxjs';\nimport {ImageRequestModel} from 'src/app/requests/models/image-request.model';\n\n@Component({\n selector: 'app-image-tm-review2',\n templateUrl: './image-tm-review2.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ImageTmReview2Component extends AbstractRequestStepComponent implements OnDestroy {\n\n private ngUnsubscribe = new Subject();\n\n public request: ImageRequestModel;\n\n request$ = this.store.select(selectImageRequestDetails).pipe(\n filter(v => !!v),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n bufferSize: 1,\n refCount: false,\n })\n );\n\n constructor(private store: Store) {\n super();\n }\n\n public ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit, Output,\n Injector\n} from '@angular/core';\nimport { RequestStage } from '../../models/request-stage.model';\nimport { RequestStageState } from '../../../shared/services/request-stages.enum';\nimport { STATUSES } from 'src/app/requests/constants/request-statuses.constant';\nimport { Store } from '@ngrx/store';\nimport { selectRequestDetails } from '../../reducers/request-details/request-details.selectors';\nimport { filter, map, pluck, takeUntil, takeWhile, timeoutWith } from 'rxjs/operators';\nimport { Subject, throwError } from 'rxjs';\nimport { isPPMSelectorState } from '../../../reducers/ppm/ppm.selectors';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserRoles } from '../../../shared/constants/user-roles.constant';\nimport { RequestModel } from '../../models/request.model';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {REQUEST_TYPE} from '../../constants/request-types.constant';\nimport {PopProductionService} from 'src/app/requests/services/pop-production.service';\nimport { selectIsRequester } from 'src/app/reducers/submitter/submitter.selectors';\nimport { FsRequestService } from '../../services/fs-request.service';\n\n@Component({\n selector: 'app-request-step-details',\n templateUrl: './request-step-details.component.html',\n styleUrls: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RequestStepDetailsComponent implements OnInit, OnDestroy {\n @Input() public step: RequestStage;\n @Input() public requestId: string | number;\n @Input() public stepInProgress: RequestStage;\n @Input() public selectedIndex: number;\n @Output() private deleteDraft = new EventEmitter();\n\n public requestDetails: RequestModel;\n public isUserPPM: boolean;\n public userRoles = UserRoles;\n public requestTypes = REQUEST_TYPE;\n private ngUnsubscribe = new Subject();\n private isRequester$ = this.store.select(selectIsRequester).pipe(\n filter(isRequesterState => isRequesterState.initialized),\n map(isRequesterState => isRequesterState.isRequester)\n );\n public isRequester: boolean;\n private popProductionService?: PopProductionService;\n private fsRequestService?: FsRequestService;\n\n request$ = this.store.select(selectRequestDetails)\n .pipe(\n filter(details => details?.id === +this.requestId),\n takeUntil(this.ngUnsubscribe),\n );\n isBlankState$ = this.request$.pipe(\n map(r => r.status === STATUSES.DRAFT && this.step.code !== 'REQUEST_DETAILS')\n );\n\n constructor(\n private store: Store,\n private cd: ChangeDetectorRef,\n private translateService: TranslateService,\n private injector: Injector\n ) {}\n\n ngOnInit(): void {\n this.request$.subscribe((requestDetails) => {\n if (requestDetails) {\n this.requestDetails = cloneDeep(requestDetails);\n\n if (this.requestDetails?.type === this.requestTypes.PPR) {\n this.popProductionService = this.injector.get(PopProductionService);\n }\n\n if (this.requestDetails?.type === this.requestTypes.FSR) {\n this.fsRequestService = this.injector.get(FsRequestService);\n }\n }\n this.cd.markForCheck();\n });\n\n this.isRequester$.pipe(\n takeUntil(this.ngUnsubscribe)\n ).subscribe(isRequester => {\n this.isRequester = isRequester;\n });\n\n this.selectValueOfPPM();\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public async print(): Promise {\n if (this.requestDetails.type === this.requestTypes.PPR && this.step.code === 'PRINTER_QUOTE_REQUEST') {\n return this.popProductionService.downloadPrinterQuoteStagePdf(this.requestId);\n } else if (\n this.requestDetails.type === this.requestTypes.FSR &&\n this.step.code === 'REQUEST_DETAILS' &&\n (await this.fsRequestService.isPpm())\n ) {\n return this.fsRequestService.downloadFsrDetailsStagePdf(this.requestId);\n }\n window.print();\n }\n\n public get isStepDisabled(): boolean {\n return this.isNotInProgress() || this.requestDetails?.status === STATUSES.TERMINATED;\n }\n\n public get isUserRequester(): boolean {\n // Allow editing draft: check if creator is current user if the request has been submitted\n if (this.requestDetails?.submitter) {\n return this.isRequester;\n }\n return true;\n }\n\n private selectValueOfPPM(): void {\n this.store.select(isPPMSelectorState).pipe(\n takeWhile(val => !val.initialized, true),\n pluck('isPPM'),\n timeoutWith(7000,\n throwError(new Error(this.translateService.instant('common.errors.data-not-initialized')))\n )\n ).subscribe((isUserPPM) => {\n this.isUserPPM = isUserPPM;\n });\n }\n\n private isNotInProgress(): boolean {\n return !this.stepInProgress || this.stepInProgress.code !== this.step.code;\n }\n\n public get isPrintBtnDisabled(): boolean {\n const { status } = this.step;\n return status === RequestStageState.Planned || status === RequestStageState.Canceled || status === RequestStageState.CanceledBySystem;\n }\n\n public onDeleteDraft(): void {\n this.deleteDraft.emit();\n }\n}\n","
\n

\n {{ 'module.requests.stages.PRINT' | translate}}\n {{ 'module.requests.stages.POST_ARTIFACTS' | translate}}\n {{'module.requests.stages.IN_PRODUCTION'|translate}}\n

\n \n

{{step.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 \n \n \n \n \n \n \n \n \n \n
\n
\n\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'requestActionButtonFilter'\n})\nexport class RequestActionButtonFilterPipe implements PipeTransform {\n\n transform(items: any[], field: string, value: string): any[] {\n if (!items) {\n return [];\n }\n return items.filter(it => it[field] === value);\n }\n\n}\n","
\n
\n
\n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n
\n\n\n \n \n {{ actionButton.label | translate }}\n \n\n\n\n \n \n {{ actionButton.label | translate }}\n \n\n","import { Component, ElementRef, Input } from '@angular/core';\n\nimport { UserRoles } from '../../../shared/constants/user-roles.constant';\nimport { RequestActionButton } from '../../models/request-actions.model';\n\n@Component({\n selector: 'app-request-actions',\n templateUrl: './request-actions.component.html',\n styleUrls: ['./request-actions.component.scss']\n})\nexport class RequestActionsComponent {\n @Input() public actionButtons: Array;\n @Input() public active = false;\n\n public userRoles = UserRoles;\n\n constructor(private element: ElementRef) {\n }\n\n callActionOnButton(actionButton: RequestActionButton) {\n if (actionButton?.action) {\n actionButton.action(this.element);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { selectRequestCurrentStage } from '../reducers/request-steps/request-steps.selectors';\nimport { filter } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionsNotesService {\n\n private actionNotesSubscription: Subject = new Subject();\n\n constructor(private store: Store) {\n this.store.select(selectRequestCurrentStage).pipe(\n filter(v => v !== null)\n ).subscribe(stage => {\n this.actionNotesSubscription.next(stage.action);\n });\n }\n\n public getActionNotesSubscription(): Observable {\n return this.actionNotesSubscription.asObservable();\n }\n\n public updateNotes(notes): void {\n this.actionNotesSubscription.next(notes);\n }\n}\n","
\n
\n \n \n \n
\n
\n

\n {{getDescription()}}\n

\n

{{action?.comment}}

\n
\n
\n \n {{'common.label.hide' | translate}}\n \n \n {{'common.label.show' | translate}}\n \n
\n
\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {DatePipe} from '@angular/common';\nimport {RequestStageActions} from '../../../shared/services/request-stages.enum';\nimport {ActionsNotesService} from '../../services/actions-notes.service';\n\n@Component({\n selector: 'app-request-action-note',\n templateUrl: './request-action-note.component.html',\n styleUrls: ['./request-action-note.component.scss']\n})\nexport class RequestActionNoteComponent implements OnInit, OnDestroy {\n\n public showDetails = true;\n public action;\n public actions = RequestStageActions;\n\n private stepperSubscription: Subscription;\n\n constructor(private translate: TranslatePipe,\n private datePipe: DatePipe,\n private actionsNotesService: ActionsNotesService) { }\n\n ngOnInit(): void {\n this.stepperSubscription = this.actionsNotesService.getActionNotesSubscription().subscribe(\n notes => {\n this.action = Object.assign({}, notes);\n });\n }\n\n public getDescription(): string {\n if (this.action?.submitter && this.action?.submittedAt) {\n return this.translate.transform('common.message.comments-by-on',\n {submitter: `${this.action?.submitter?.firstName} ${this.action?.submitter?.lastName}`,\n submittedAt: this.datePipe.transform(this.action?.submittedAt, 'MM/dd/yyyy, hh:mm a', 'America/New_York')}\n );\n }\n return '';\n }\n\n ngOnDestroy() {\n this.stepperSubscription?.unsubscribe();\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {API} from '../../shared/constants/api.constants';\nimport {ActionHistoryEntryModel} from '../models/action-history-entry.model';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionHistoryService {\n\n constructor(private errorHandlingHttpClient: ErrorHandlingHttpClient) { }\n\n public getRequestActionHistory(requestId: string | number): Observable> {\n return this.errorHandlingHttpClient.get>(API.getActionHistory(requestId));\n }\n}\n","
\n
\n

{{'module.requests.text.comments' | translate}}

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

\n
\n
\n
\n
{{entry.createdAt | date: 'MM/dd/yyyy, hh:mm a'}}
\n
\n {{'module.requests.action-history.comment' | translate | uppercase}}\n {{entry.userComment}}\n
\n
\n
\n
\n
\n\n
\n
\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges\n} from '@angular/core';\nimport {ActionHistoryService} from '../../services/action-history.service';\nimport {Events, EventService} from '../../../shared/services/event-service.service';\nimport {ActionHistoryEntryModel} from '../../models/action-history-entry.model';\nimport {Subscription} from 'rxjs';\nimport {finalize} from 'rxjs/operators';\nimport {TranslateService} from '@ngx-translate/core';\n\n@Component({\n selector: 'app-request-comments-tab',\n templateUrl: './request-comments-tab.component.html',\n styleUrls: ['./request-comments-tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestCommentsTabComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() requestId: string | number;\n\n readonly iconMapping = {\n REQUEST_CREATED: 'green-text icon-action-approved',\n REQUEST_COMPLETED: 'green-text icon-action-approved',\n REQUEST_ACTIVATED: 'green-text icon-action-approved',\n REQUEST_TERMINATED: 'red-text icon-action-rejected',\n STAGE_ROUTE_BACK: 'red-text icon-action-route-back',\n STAGE_PERFORMED: 'green-text icon-action-performed',\n STAGE_CANCELED: 'red-text icon-action-rejected',\n FILE_APPROVED: 'green-text icon-file-approved',\n FILE_REJECTED: 'red-text icon-file-rejected',\n FILE_UPLOADED: 'green-text icon-file-uploaded',\n FILE_REMOVED: 'red-text icon-file-rejected',\n PRINTER_MILESTONE_COMPLETED: 'green-text icon-action-approved',\n PRINTER_MILESTONE_COMPLETION_CANCELED: 'red-text icon-action-rejected',\n PRINTER_WORKITEM_COMPLETED: 'green-text icon-action-approved',\n STAGE_ACTIVATED: 'green-text icon-action-approved',\n FS_PRODUCT_LINE_REJECTED: 'red-text icon-action-approved',\n FS_PRODUCT_LINE_APPROVED: 'green-text icon-action-approved',\n REQUEST_REASSIGNED: 'green-text icon-action-reassigned',\n TPS_CREATED: 'green-text icon-file-uploaded',\n TPS_DELETED: 'red-text icon-file-rejected',\n REQUEST_OWNER_CHANGED: 'green-text icon-action-reassigned',\n PRODUCT_OWNERS_REFRESHED: 'green-text icon-refresh',\n PO_CREATED: 'green-text icon-file-uploaded',\n SOW_CREATED: 'green-text icon-file-uploaded',\n PO_EDITED: 'ember-text icon-warning',\n PO_AND_SOW_EDITED: 'ember-text icon-warning',\n SOW_EDITED: 'ember-text icon-warning',\n PO_DELETED: 'red-text icon-file-rejected',\n PO_AND_SOW_DELETED: 'red-text icon-file-rejected',\n SOW_DELETED: 'red-text icon-file-rejected',\n STAGE_ASSIGNED: 'green-text icon-user-profile',\n STAGE_UNASSIGNED: 'red-text icon-action-route-back',\n REQUEST_ASSIGNED: 'green-text icon-user-profile',\n REQUEST_UNASSIGNED: 'red-text icon-action-route-back',\n CONTACTS_UPDATED: 'green-text icon-user-profile',\n };\n\n historyEntries: Array = [];\n loading = false;\n errorState = false;\n subscriptions: Array = [];\n\n\n constructor(private actionHistoryService: ActionHistoryService,\n private eventService: EventService,\n private translateService: TranslateService,\n private cd: ChangeDetectorRef) {\n }\n\n ngOnInit(): void {\n this.subscriptions.push(\n this.eventService.on(Events.UpdateActionHistory, () => this.updateActionHistory()));\n }\n\n private updateActionHistory() {\n if (!this.requestId) {\n return;\n }\n\n this.loading = true;\n this.actionHistoryService.getRequestActionHistory(this.requestId)\n .pipe(finalize(() => {\n this.loading = false;\n this.cd.detectChanges();\n this.eventService.emit({eventName: Events.UpdateCommentCount, value: this.historyEntries.length});\n }))\n .subscribe((values) => {\n this.historyEntries = values || [];\n this.errorState = false;\n }, () => {\n this.errorState = true;\n this.historyEntries = [];\n });\n\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.updateActionHistory();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n formatMessage(entry: ActionHistoryEntryModel): string {\n // Might cause issue. https://github.com/ngx-translate/core/issues/517#issuecomment-299637956\n return this.translateService.instant(entry.actionType, entry.actionData);\n }\n\n getIconClass(key: string) {\n return this.iconMapping[key] || 'icon-action-approved';\n }\n\n}\n","import { Directive } from '@angular/core';\nimport { MatMenu, MatMenuItem } from '@angular/material/menu';\n\n@Directive()\nexport class MatMenuProxy {\n matMenuItem: MatMenuItem;\n matMenu: MatMenu;\n\n\n setMatMenu(matMenu: MatMenu) {\n this.matMenu = matMenu;\n }\n setMatMenuItem(matMenuItem: MatMenuItem) {\n this.matMenuItem = matMenuItem;\n }\n get _parentMenu() {\n return this.matMenu;\n }\n _getHostElement() {\n return this.matMenuItem._getHostElement();\n }\n get _hovered() {\n return this.matMenuItem._hovered;\n }\n get _focused() {\n return this.matMenuItem._focused;\n }\n focus() {\n this.matMenuItem.focus();\n }\n getLabel() {\n this.matMenuItem.getLabel();\n }\n}\n","
\n \n\n

\n {{ 'module.requests.label.edit-additional-other-contacts' | translate }}\n

\n\n
\n
\n \n
\n\n \n \n {{ 'module.requests.details.add-other-contact' | translate }}\n \n
\n\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n","import {Component, OnInit, ChangeDetectionStrategy, OnDestroy, Inject} from '@angular/core';\nimport {AbstractControl, FormControl, FormGroup, FormArray} from '@angular/forms';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {Observable} from 'rxjs';\nimport {\n SelectSearchDropdownOptionsInput,\n userNameComparator\n} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport {UtilsService} from 'src/app/shared/services/utils.service';\nimport {WithDestroy} from '../../../../shared/components/with-destroy/with-destroy.mixin';\nimport {AddAdditionalOtherContactsFormData} from './add-additional-other-contacts-form.model';\n\n@Component({\n selector: 'app-add-additional-other-contacts-form',\n templateUrl: './add-additional-other-contacts-form.component.html',\n styleUrls: ['./add-additional-other-contacts-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AddAdditionalOtherContactsFormComponent extends WithDestroy() implements OnDestroy, OnInit {\n public form!: FormGroup;\n public get userControl(): AbstractControl {\n return this.form.get('user');\n }\n testId = 'add_additional_other_contacts_form';\n\n users$!: Observable;\n public userControlComparators = [userNameComparator];\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public dialogData: AddAdditionalOtherContactsFormData,\n public utilsService: UtilsService,\n private dialogRef: MatDialogRef\n ) {\n super();\n this.form = new FormGroup({\n contacts: new FormArray(\n (dialogData.additionalOtherContacts?.length > 0 ? dialogData.additionalOtherContacts : [null]).map(\n c => new FormControl(c, [UtilsService.userValidationFn()])\n )\n )\n });\n }\n pushNewStakeholderContact(contact?: UserModel): void {\n const item = new FormControl(contact, [UtilsService.userValidationFn()]);\n (this.form.get('contacts') as FormArray).push(item);\n }\n\n onRemoveStakeholdersDetails(index: number): void {\n (this.form.get('contacts') as FormArray).removeAt(index);\n }\n\n ngOnInit(): void {}\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n }\n\n onClose(): void {\n this.dialogRef.close();\n }\n\n onSubmit(): void {\n if (this.form.valid) {\n this.dialogRef.close({\n additionalOtherContacts: this.form.get('contacts').value\n });\n }\n }\n}\n","import {AfterViewInit, ChangeDetectionStrategy, Component, Input, OnInit, Optional, ViewChild} from '@angular/core';\nimport {MatMenu, MatMenuItem} from '@angular/material/menu';\nimport {Actions} from '@ngrx/effects';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {filter, find, switchMap, takeUntil, tap} from 'rxjs/operators';\nimport {RequestModel} from 'src/app/requests/models/request.model';\nimport {requestDetailsActions} from 'src/app/requests/reducers/request-details/request-details.actions';\nimport {WithDestroy} from 'src/app/shared/components/with-destroy/with-destroy.mixin';\nimport {MatMenuProxy} from 'src/app/shared/directives/mat-menu-item-proxy.directive';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport { Events } from 'src/app/shared/services/event-service.service';\nimport {LoaderService} from 'src/app/shared/services/loader.service';\nimport {MessageService} from 'src/app/shared/services/message-service.service';\nimport {ModalService} from 'src/app/shared/services/modal-service.service';\n\nimport {AddAdditionalOtherContactsFormComponent} from '../add-additional-other-contacts-form/add-additional-other-contacts-form.component';\nimport { EventService } from '../../../../shared/services/event-service.service';\nimport {\n AddAdditionalOtherContactsFormData,\n AddAdditionalOtherContactsFormReturn\n} from '../add-additional-other-contacts-form/add-additional-other-contacts-form.model';\n\n@Component({\n selector: 'app-add-additional-other-contacts-button',\n templateUrl: './add-additional-other-contacts-button.component.html',\n styleUrls: ['./add-additional-other-contacts-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n MatMenuProxy,\n {\n provide: MatMenuItem,\n useExisting: MatMenuProxy\n }\n ]\n})\nexport class AddAdditionalOtherContactsButtonComponent extends WithDestroy() implements OnInit, AfterViewInit {\n @Input() isDisabled = false;\n @Input() labelId = '';\n @Input() testId = 'add_additional_other_contacts';\n @Input() requestDetails: RequestModel;\n @Input() additionalOtherContacts: UserModel[];\n @ViewChild('matMenuItem') matMenuItem: MatMenuItem;\n\n constructor(\n private translate: TranslatePipe,\n private messageService: MessageService,\n private store: Store,\n private modalService: ModalService,\n private actions: Actions,\n private loaderService: LoaderService,\n private eventService: EventService,\n @Optional() public matMenuProxy: MatMenuProxy,\n @Optional() parentMenu: MatMenu\n ) {\n super();\n this.matMenuProxy.setMatMenu(parentMenu);\n }\n\n ngOnInit(): void {}\n\n ngAfterViewInit(): void {\n this.matMenuProxy.setMatMenuItem(this.matMenuItem);\n }\n\n onChangeAddAdditionalContacts() {\n this.modalService\n .openModal(\n AddAdditionalOtherContactsFormComponent,\n {\n additionalOtherContacts: this.additionalOtherContacts\n },\n undefined,\n undefined,\n false\n )\n .afterClosed()\n .pipe(\n filter(v => !!v),\n tap(({additionalOtherContacts}) => {\n this.store.dispatch(\n requestDetailsActions.addAdditionalOtherContacts({\n request: this.requestDetails,\n additionalOtherContacts: (additionalOtherContacts.filter(c => !!c) || [])\n })\n );\n }),\n tap(() => this.loaderService.showLoader()),\n switchMap(() =>\n this.actions.pipe(\n find(a =>\n [\n requestDetailsActions.addAdditionalOtherContactsFailure.type as string,\n requestDetailsActions.addAdditionalOtherContactsSuccess.type as string\n ].includes(a.type)\n ),\n tap(a => {\n if (\n [\n requestDetailsActions.addAdditionalOtherContactsSuccess.type as string,\n requestDetailsActions.addAdditionalOtherContactsFailure.type as string\n ].includes(a.type)\n ) {\n this.loaderService.hideLoader();\n }\n })\n )\n ),\n takeUntil(this.ngUnsubscribe$)\n )\n .subscribe(action => {\n if (action.type === requestDetailsActions.addAdditionalOtherContactsSuccess.type) {\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.messageService.showSystemMessage(\n 'success',\n null,\n this.translate.transform('module.requests.text.additional-other-contacts-updated')\n );\n }\n });\n }\n}\n","\n \n {{ 'module.requests.text.change-contacts' | translate }}\n\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { Actions, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { map, take, takeUntil, tap } from 'rxjs/operators';\n\nimport { Events, EventService } from '../../../../shared/services/event-service.service';\nimport { LoaderService } from '../../../../shared/services/loader.service';\nimport { MessageService } from '../../../../shared/services/message-service.service';\nimport { RequestModel } from '../../../models/request.model';\nimport { requestDetailsActions } from '../../../reducers/request-details/request-details.actions';\nimport { loadRequestSteps } from '../../../reducers/request-steps/request-steps.actions';\n\n@Component({\n selector: 'app-refresh-product-owner-button',\n templateUrl: './refresh-product-owner-button.component.html',\n styleUrls: ['./refresh-product-owner-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RefreshProductOwnerButtonComponent implements OnDestroy {\n @Input() isDisabled = false;\n @Input() labelId: string;\n @Input() requestDetails: RequestModel;\n @Input() testId = 'refresh_product_owner_button';\n\n private ngUnsubscribe = new Subject();\n\n constructor(\n private translate: TranslatePipe,\n private messageService: MessageService,\n private store: Store,\n private actions: Actions,\n private loaderService: LoaderService,\n private eventService: EventService\n ) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n onRefreshOwner(): void {\n this.loaderService.showLoader();\n this.store.dispatch(requestDetailsActions.refreshProductOwner({request: this.requestDetails}));\n\n this.actions\n .pipe(ofType(requestDetailsActions.refreshProductOwnerSuccess, requestDetailsActions.refreshProductOwnerFailure), take(1))\n .pipe(\n map(action => {\n if (action.type === requestDetailsActions.refreshProductOwnerSuccess.type) {\n return true;\n }\n return false;\n }),\n tap(() => {\n this.store.dispatch(loadRequestSteps({requestId: this.requestDetails.id as any}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n\n this.loaderService.hideLoader();\n }),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(success => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: `${this.requestDetails.id}`}));\n if (success) {\n this.messageService.showSystemMessage(\n 'success',\n this.translate.transform('module.requests.text.success-refresh-product-owner'),null\n );\n }\n });\n }\n}\n","\n \n {{ 'module.requests.text.refresh-product-owner' | translate }}\n\n","import {ChangeDetectionStrategy, Component, Inject} from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\n\nimport {UtilsService} from '../../../../shared/services/utils.service';\n\n@Component({\n selector: 'app-change-owner-form',\n templateUrl: './change-owner-form.component.html',\n styleUrls: ['./change-owner-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ChangeOwnerFormComponent {\n public form = new FormGroup({\n user: new FormControl(null, [Validators.required])\n });\n public userControl: AbstractControl = this.form.get('user');\n testId = 'change_owner_form';\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public dialogData,\n public utilsService: UtilsService,\n private dialogRef: MatDialogRef\n ) {}\n\n public onClose(): void {\n this.dialogRef.close();\n }\n\n public onSubmit(): void {\n if (this.form.get('user').valid) {\n const {firstName, lastName, userName} = this.form.value.user;\n this.dialogRef.close({firstName, lastName, userName});\n }\n }\n}\n","
\n \n\n

\n {{ 'module.requests.text.change-request-owner' | translate }}\n

\n\n
\n \n
\n\n \n
\n
\n \n
\n
\n \n
\n
\n
\n\n","import { ChangeDetectionStrategy, Component, Input, OnDestroy, Optional, ViewChild, AfterViewInit, Directive } from '@angular/core';\nimport {MatMenu, MatMenuItem} from '@angular/material/menu';\nimport {Actions, ofType} from '@ngrx/effects';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {Subject} from 'rxjs';\nimport {filter, map, switchMap, take, takeUntil, tap} from 'rxjs/operators';\n\nimport {UserModel} from '../../../../shared/models/user.model';\nimport {Events, EventService} from '../../../../shared/services/event-service.service';\nimport {LoaderService} from '../../../../shared/services/loader.service';\nimport {MessageService} from '../../../../shared/services/message-service.service';\nimport {ModalService} from '../../../../shared/services/modal-service.service';\nimport {UtilsService} from '../../../../shared/services/utils.service';\nimport {RequestModel} from '../../../models/request.model';\nimport {requestDetailsActions} from '../../../reducers/request-details/request-details.actions';\nimport {loadRequestSteps} from '../../../reducers/request-steps/request-steps.actions';\nimport {RequestsService} from '../../../services/requests.service';\nimport {ChangeOwnerFormComponent} from '../change-owner-form/change-owner-form.component';\n@Directive()\nclass MatMenuProxy {\n matMenuItem: MatMenuItem;\n matMenu: MatMenu;\n\n\n setMatMenu(matMenu: MatMenu) {\n this.matMenu = matMenu;\n }\n setMatMenuItem(matMenuItem: MatMenuItem) {\n this.matMenuItem = matMenuItem;\n }\n get _parentMenu() {\n return this.matMenu;\n }\n _getHostElement() {\n return this.matMenuItem._getHostElement();\n }\n get _hovered() {\n return this.matMenuItem._hovered;\n }\n get _focused() {\n return this.matMenuItem._focused;\n }\n focus() {\n this.matMenuItem.focus();\n }\n getLabel() {\n this.matMenuItem.getLabel();\n }\n}\n\n@Component({\n selector: 'app-change-owner-button',\n templateUrl: './change-owner-button.component.html',\n styleUrls: ['./change-owner-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n MatMenuProxy,\n {\n provide: MatMenuItem,\n useExisting: MatMenuProxy\n }\n ]\n})\nexport class ChangeOwnerButtonComponent implements OnDestroy, AfterViewInit {\n @Input() isDisabled = false;\n @Input() labelId: string;\n @Input() requestDetails: RequestModel;\n @ViewChild('matMenuItem') matMenuItem: MatMenuItem;\n\n private ngUnsubscribe = new Subject();\n\n constructor(\n private utilsService: UtilsService,\n private translate: TranslatePipe,\n private messageService: MessageService,\n private store: Store,\n private requestService: RequestsService,\n private modalService: ModalService,\n private actions: Actions,\n private loaderService: LoaderService,\n private eventService: EventService,\n @Optional() public _parentMenu: MatMenu,\n @Optional() public matMenuProxy: MatMenuProxy\n ) {\n this.matMenuProxy.setMatMenu(this._parentMenu);\n }\n\n ngAfterViewInit(): void {\n this.matMenuProxy.setMatMenuItem(this.matMenuItem);\n this.matMenuProxy.setMatMenu(this._parentMenu);\n }\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n onChangeOwner(): void {\n const users$ = this.requestService.getUsers('', []).pipe(\n filter(users => users?.length > 0),\n map(users => users.map(user => ({value: user, label: this.utilsService.getFullUserName(user), extras: [user.userName]})))\n );\n\n this.modalService\n .openModal(\n ChangeOwnerFormComponent,\n {\n users$\n },\n undefined,\n undefined,\n false\n )\n .afterClosed()\n .pipe(\n filter(v => !!v),\n tap(user => this.store.dispatch(requestDetailsActions.changeRequestOwner({request: this.requestDetails, user}))),\n tap(() => this.loaderService.showLoader()),\n switchMap(user =>\n this.actions.pipe(\n ofType(requestDetailsActions.changeRequestOwnerSuccess),\n take(1),\n tap(() => {\n this.store.dispatch(loadRequestSteps({requestId: this.requestDetails.id as any}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n\n this.loaderService.hideLoader();\n }),\n map(({data}) => ({user, request: data})),\n takeUntil(this.ngUnsubscribe)\n )\n ),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(({user}) => {\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: `${this.requestDetails.id}`}));\n\n this.messageService.showSystemMessage(\n 'success',\n null,\n this.translate.transform('module.requests.text.success-change-owner', {\n requestType: this.translate.transform('module.requests.types.PRODUCTION_REQUEST'),\n userName: this.utilsService.getFullUserName(user),\n oldUserName: this.utilsService.getFullUserName(this.requestDetails.creator),\n requestId: this.requestDetails.id,\n requestName: this.requestDetails.name\n })\n );\n });\n\n this.actions\n .pipe(\n ofType(requestDetailsActions.changeRequestOwnerFailure),\n take(1),\n tap(() => this.loaderService.hideLoader()),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe();\n }\n}\n","\n \n {{ 'module.requests.text.change-request-owner' | translate }}\n\n","import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { combineLatest, merge, Observable, of, Subject } from 'rxjs';\nimport { shareReplay, takeUntil } from 'rxjs/operators';\nimport { UsersService } from 'src/app/requests/services/users.service';\nimport {\n SelectSearchDropdownOptionsInput,\n} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\n\nimport { userNameComparator } from '../../../../shared/components/select-search-dropdown/select-search-dropdown.component';\nimport { UserService } from '../../../../shared/services/user.service';\nimport { UtilsService } from '../../../../shared/services/utils.service';\nimport { ChangeTrafficManagerFormData } from './change-traffic-manager-form.model';\n\n@Component({\n selector: 'app-change-traffic-manager-form',\n templateUrl: './change-traffic-manager-form.component.html',\n styleUrls: ['./change-traffic-manager-form.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ChangeTrafficManagerFormComponent implements OnDestroy, OnInit {\n private ngUnsubscribe = new Subject();\n public form!: FormGroup;\n public get userControl(): AbstractControl {\n return this.form.get('user');\n }\n testId = 'change_traffic_manager_form';\n\n users$!: Observable;\n public userControlComparators = [userNameComparator];\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public dialogData: ChangeTrafficManagerFormData,\n public utilsService: UtilsService,\n private dialogRef: MatDialogRef,\n private usersService: UsersService,\n private userService: UserService\n ) {\n this.form = new FormGroup({\n user: new FormControl(\n {\n value: dialogData.selectedTM,\n disabled: true\n },\n [\n (ac: AbstractControl) => ac?.value?.userName === dialogData.selectedTM?.userName ? {\n assigned: true\n } : null\n ]\n )\n });\n\n this.users$ = this.usersService.getUserOptions$({\n groupKeys: dialogData.userRoles\n }, 'model').pipe(\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n }\n ngOnInit(): void {\n merge(of(null), this.users$)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(users => {\n if (users != null) {\n this.form.get('user').enable();\n }\n });\n\n combineLatest([this.userService.getUserDetails$(), this.users$])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([user]) => {\n if (user?.userName !== this.userControl.value?.userName) {\n this.userControl.setValue(user, {\n emitEvent: true\n });\n }\n });\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n public onClose(): void {\n this.dialogRef.close();\n }\n\n public onSubmit(): void {\n if (this.form.valid) {\n this.dialogRef.close(this.userControl.value);\n }\n }\n}\n","
\n \n\n

\n {{ 'module.requests.text.change-traffic-manager' | translate }}\n

\n\n
\n \n
\n\n \n
\n
\n \n {{ 'module.requests.text.change-tm' | translate }}\n \n
\n
\n \n
\n
\n
\n\n","import {ChangeDetectionStrategy, Component, Input, OnDestroy} from '@angular/core';\nimport {Actions} from '@ngrx/effects';\nimport {Store} from '@ngrx/store';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport {Subject} from 'rxjs';\nimport {filter, find, mapTo, switchMap, takeUntil, tap, withLatestFrom} from 'rxjs/operators';\nimport {UserService} from 'src/app/shared/services/user.service';\n\nimport {UserModel} from '../../../../shared/models/user.model';\nimport {LoaderService} from '../../../../shared/services/loader.service';\nimport {MessageService} from '../../../../shared/services/message-service.service';\nimport {ModalService} from '../../../../shared/services/modal-service.service';\nimport {UtilsService} from '../../../../shared/services/utils.service';\nimport {TrafficManagerAwareRequestModel} from '../../../models/request.model';\nimport {requestDetailsActions} from '../../../reducers/request-details/request-details.actions';\nimport {loadRequestStepsFailure, loadRequestStepsSuccess} from '../../../reducers/request-steps/request-steps.actions';\nimport {ChangeTrafficManagerFormComponent} from '../change-traffic-manager-form/change-traffic-manager-form.component';\nimport {ChangeTrafficManagerFormData} from '../change-traffic-manager-form/change-traffic-manager-form.model';\n\n@Component({\n selector: 'app-change-traffic-manager-button',\n templateUrl: './change-traffic-manager-button.component.html',\n styleUrls: ['./change-traffic-manager-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ChangeTrafficManagerButtonComponent implements OnDestroy {\n private _isDisabled = false;\n @Input() set isDisabled(isDisabled) {\n this._isDisabled = isDisabled;\n }\n\n get isDisabled() {\n return this._isDisabled;\n }\n @Input() labelId: string;\n @Input() requestDetails: TrafficManagerAwareRequestModel;\n @Input() userRoles: string[] = [];\n @Input() testId = 'button_menu_change_trafic_manager';\n\n private ngUnsubscribe = new Subject();\n\n constructor(\n private utilsService: UtilsService,\n private translate: TranslatePipe,\n private messageService: MessageService,\n private store: Store,\n private modalService: ModalService,\n private actions: Actions,\n private loaderService: LoaderService,\n private userService: UserService\n ) {}\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n onChangeTrafficManager(): void {\n this.modalService\n .openModal(\n ChangeTrafficManagerFormComponent,\n {\n selectedTM: null, // todo implement TM transfer\n userRoles: this.userRoles\n },\n undefined,\n undefined,\n false\n )\n .afterClosed()\n .pipe(\n filter(v => !!v),\n tap(user => this.store.dispatch(requestDetailsActions.changeRequestTrafficManager({trafficManager: user}))),\n tap(() => this.loaderService.showLoader()),\n switchMap(user =>\n this.actions.pipe(\n find(a =>\n [\n requestDetailsActions.changeRequestTrafficManagerFailure.type,\n loadRequestStepsSuccess.type as string,\n loadRequestStepsFailure.type as string\n ].includes(a.type)\n ),\n tap(a => {\n if (\n [requestDetailsActions.changeRequestTrafficManagerFailure.type as string, loadRequestStepsFailure.type as string].includes(\n a.type\n )\n ) {\n this.loaderService.hideLoader();\n }\n }),\n mapTo({user})\n )\n ),\n withLatestFrom(this.userService.getUserDetails$()),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(([{user}, changedBy]) => {\n this.messageService.showSystemMessage(\n 'success',\n null,\n this.translate.transform('module.requests.text.success-change-traffic-manager', {\n userName: this.utilsService.getFullUserName(user),\n changedBy: this.utilsService.getFullUserName(changedBy),\n requestId: this.requestDetails.id,\n requestName: this.requestDetails.name\n })\n );\n });\n }\n}\n","\n \n {{ 'module.requests.text.change-traffic-manager' | translate }}\n\n","import { HttpResponse } from '@angular/common/http';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ofType } from '@ngrx/effects';\nimport { Action, ActionsSubject, Store } from '@ngrx/store';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport cloneDeep from 'lodash/cloneDeep';\nimport memoize from 'lodash/memoize';\nimport { combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs';\nimport { exhaustMap, filter, finalize, find, first, map, shareReplay, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport {\n SelectSearchDropdownOptionsInput,\n} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\n\nimport { isPPMSelector } from '../../../reducers/ppm/ppm.selectors';\nimport { PAGES_CONFIG } from '../../../shared/constants/pages.constants';\nimport { UserGroups } from '../../../shared/constants/user-groups.enum';\nimport { TrafficManagers, UserRoles } from '../../../shared/constants/user-roles.constant';\nimport { UserModel } from '../../../shared/models/user.model';\nimport { Events, EventService } from '../../../shared/services/event-service.service';\nimport { LoaderService } from '../../../shared/services/loader.service';\nimport { MessageService } from '../../../shared/services/message-service.service';\nimport { ModalService } from '../../../shared/services/modal-service.service';\nimport { RequestStageActions, RequestStageState } from '../../../shared/services/request-stages.enum';\nimport { UserPermissionsService } from '../../../shared/services/user-permissions.service';\nimport { UtilsService } from '../../../shared/services/utils.service';\nimport { AbstractRoleProvider } from '../../classes/role-provider';\nimport { STATUSES } from '../../constants/request-statuses.constant';\nimport {\n CHANGE_OWNER_REQUEST_TYPES,\n DUPLICATE_SUPPORTED_REQUEST_TYPES,\n REQUEST_TYPE,\n} from '../../constants/request-types.constant';\nimport { PopDesignRequestModel } from '../../models/pop-design-request.model';\nimport { PopProductionRequestModel } from '../../models/pop-production-request.model';\nimport { RequestActionButton } from '../../models/request-actions.model';\nimport { RequestStage } from '../../models/request-stage.model';\nimport { RefreshProductOwnerRequestModels } from '../../models/request.model';\nimport { requestDetailsActions } from '../../reducers/request-details/request-details.actions';\nimport { selectRequestDetails, selectRequestDetailsLoading, selectAdditionalOtherContacts, selectRequestDetailsCombined } from '../../reducers/request-details/request-details.selectors';\nimport { loadRequestSteps, selectStage } from '../../reducers/request-steps/request-steps.actions';\nimport {\n selectRequestCurrentStage,\n selectRequestDetailsSteps,\n selectRequestStepInProgress,\n selectRequestStepLoading,\n} from '../../reducers/request-steps/request-steps.selectors';\nimport { ActionsReasonService } from '../../services/actions-reason.service';\nimport { FinalizeStageService } from '../../services/finalize-stage.service';\nimport { RequestSpecificRoleProvider } from '../../services/request-specific-role.provider';\nimport { RequestsService } from '../../services/requests.service';\nimport { StepActionsService } from '../../services/step-actions.service';\nimport {\n ConfirmCloseModalComponent,\n} from '../request-types/card-production/po-sow/confirm-close-modal/confirm-close-modal.component';\nimport { ReassignPpmFormComponent } from './reassign-ppm-form/reassign-ppm-form.component';\n\nimport type { BaseRequestModel } from '../../models/request.model';\nimport { RequestDetailsStageController } from '../../models/request-details-stage-controller.model';\nimport { NO_RELOAD_COMPONENT_STAGES, REQUEST_CONTROLLER } from './request-details.constants';\nimport { RoleProviderAggregator } from '../../classes/role-provider-aggregator';\nimport { AbstractRoleUpdateAwareProvider } from '../../classes/role-update-aware-provider';\nexport class EventRequestAction {\n requestId: string | number;\n actionType: string;\n comment?: string;\n}\n\n@Component({\n selector: 'app-request-details',\n templateUrl: './request-details.component.html',\n styleUrls: ['./request-details.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n RoleProviderAggregator,\n RequestSpecificRoleProvider,\n {\n provide: AbstractRoleUpdateAwareProvider,\n useExisting: RoleProviderAggregator\n },\n {\n provide: AbstractRoleProvider,\n useExisting: RequestSpecificRoleProvider\n },\n {\n provide: REQUEST_CONTROLLER,\n useExisting: forwardRef(() => RequestDetailsComponent),\n }\n ]\n})\nexport class RequestDetailsComponent implements OnInit, OnDestroy {\n @ViewChild('associatedPopDesign') associatedPopDesign: TemplateRef;\n\n constructor(private router: Router,\n private route: ActivatedRoute,\n private requestService: RequestsService,\n private eventService: EventService,\n private stepActionsService: StepActionsService,\n private modalService: ModalService,\n private cd: ChangeDetectorRef,\n private loaderService: LoaderService,\n private store: Store,\n private actions: ActionsSubject,\n private translate: TranslatePipe,\n private userPermissionsService: UserPermissionsService,\n private finalizeStageService: FinalizeStageService,\n private messageService: MessageService,\n public utilsService: UtilsService,\n private titleService: Title,\n private actionsReasonService: ActionsReasonService,\n private requestSpecificRoleProvider: RequestSpecificRoleProvider,\n private roleProviderAggregator: RoleProviderAggregator,\n ) {\n }\n\n public requestSteps: Array = [];\n\n public requestActionsActive: boolean;\n public pagesConfig = PAGES_CONFIG;\n public requestId: string;\n public requestDetails: any = {};\n public requestDetailsCombined: any = {};\n public REQUEST_STATUSES = STATUSES;\n public REQUEST_TYPES = REQUEST_TYPE;\n public UserRoles = UserRoles;\n\n private subscriptions: Array = [];\n public requestActionButtons: Array = [];\n public deliveryDate: any;\n public designDeliveryDate: any;\n public stepInProgress: RequestStage;\n public currentStage: RequestStage;\n public commentCount: number = null;\n private ngUnsubscribe = new Subject();\n public currentAction: any;\n public canDuplicate$ = this.store.select(selectRequestDetails).pipe(\n map(rd => rd?.status !== STATUSES.DRAFT && DUPLICATE_SUPPORTED_REQUEST_TYPES.includes(rd?.type) )\n );\n public canChangeOwner$ = this.store.select(selectRequestDetails).pipe(\n map(rd => CHANGE_OWNER_REQUEST_TYPES.includes(rd?.type) && this.changeRequestOwnerInfo(rd)?.isMenuItemVisible )\n );\n\n public isPPM$ = this.store.select(isPPMSelector);\n\n public isCardDesignTM$ = merge(of(null), this.roleProviderAggregator.roleUpdates$).pipe(\n switchMap(() =>\n this.userPermissionsService.isActionAvailable(UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator)\n ),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n\n public isPopDesignTM$ = merge(of(null), this.roleProviderAggregator.roleUpdates$).pipe(\n switchMap(() =>\n this.userPermissionsService.isActionAvailable(UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator)\n ),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n\n public isImageTM$ = merge(of(null), this.roleProviderAggregator.roleUpdates$).pipe(\n switchMap(() =>\n this.userPermissionsService.isActionAvailable(UserRoles.IMAGE_REQUEST.TRAFFIC_MANAGER, this.roleProviderAggregator)\n ),\n shareReplay({\n bufferSize: 1,\n refCount: false\n }),\n takeUntil(this.ngUnsubscribe)\n );\n additionalOtherContacts$ = this.store.select(selectAdditionalOtherContacts);\n\n private cachedStepsSet = new Set();\n private requestDetailsStageController: RequestDetailsStageController;\n public registerRequestDetailsController(requestDetailsController: RequestDetailsStageController) {\n this.requestDetailsStageController = requestDetailsController;\n }\n public async validateStepChange(fromStage: RequestStage, toStage: RequestStage): Promise {\n if(fromStage.code === 'REQUEST_DETAILS') {\n const valid = await this.requestDetailsStageController.validate();\n\n if (valid) {\n return valid;\n }\n this.messageService.showSystemMessage(\n 'error',\n this.translate.transform('common.message.invalid-form'),\n this.translate.transform('common.message.invalid-form-message'),\n );\n return false;\n }\n\n return true;\n }\n\n public async stageChangeReady(fromStage: RequestStage, toStage: RequestStage) {\n // No need to perform any additional preparations in case if step editing is disabled\n if (this.requestDetailsStageController.isDisabled) {\n return true;\n }\n if(fromStage.code === 'REQUEST_DETAILS') {\n this.requestDetailsStageController.saveRequest();\n const saved = await this.waitForRequestSave().toPromise();\n return saved;\n }\n return true;\n }\n\n public waitForRequestSave(): Observable {\n return this.actions.pipe(\n find(\n a =>\n [requestDetailsActions.updateRequestDetailsSuccess.type, requestDetailsActions.updateRequestDetailsFailure.type].includes(\n a.type\n )\n ),\n map((action: Action) => {\n if (action.type === requestDetailsActions.updateRequestDetailsSuccess.type) {\n return true;\n }\n return false;\n }),\n takeUntil(this.ngUnsubscribe),\n );\n }\n\n refreshProductOwnerInfo = memoize((requestDetails: RefreshProductOwnerRequestModels): {\n visible: boolean;\n } => {\n let visible = false;\n const enabled = [this.REQUEST_STATUSES.IN_PROGRESS, this.REQUEST_STATUSES.DRAFT].includes(requestDetails?.status);\n switch (requestDetails.type) {\n // case this.REQUEST_TYPES.CDR: We don't show product owner info here\n case this.REQUEST_TYPES.CPR:\n case this.REQUEST_TYPES.FSR:\n case this.REQUEST_TYPES.TPPR:\n visible = enabled;\n }\n return {\n visible\n };\n });\n addAdditionalOtherContacts = memoize((requestDetails: BaseRequestModel): {\n roles?: string[];\n isMenuItemVisible: boolean;\n labelId: string;\n } => {\n const isRequestInProgress = requestDetails?.status === this.REQUEST_STATUSES.IN_PROGRESS;\n\n const {roles} = {\n roles: [],\n };\n\n const itSupportedRequestType = ((type) => {\n switch (requestDetails.type) {\n case this.REQUEST_TYPES.IR:\n case this.REQUEST_TYPES.FSR:\n case this.REQUEST_TYPES.PPR:\n return false;\n }\n return true;\n })(requestDetails.type);\n\n return {\n roles,\n labelId: `module.requests.types.${requestDetails.type}`,\n isMenuItemVisible: isRequestInProgress && itSupportedRequestType\n };\n });\n changeRequestOwnerInfo = memoize((requestDetails: BaseRequestModel): {\n roles?: string[];\n isMenuItemVisible: boolean;\n labelId: string;\n } => {\n const isRequestInProgress = requestDetails?.status === this.REQUEST_STATUSES.IN_PROGRESS;\n\n const {roles} = (() => {\n switch (requestDetails.type) {\n case this.REQUEST_TYPES.CPR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n UserRoles.PRODUCTION_REQUEST.TRAFFIC_MANAGER\n ],\n };\n\n case this.REQUEST_TYPES.CDR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGERS,\n ],\n };\n case this.REQUEST_TYPES.PPR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.POP_PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n UserRoles.POP_PRODUCTION_REQUEST.TRAFFIC_MANAGER\n ],\n };\n case this.REQUEST_TYPES.PDR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGERS,\n ],\n };\n\n case this.REQUEST_TYPES.FSR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.FINANCIAL_SERVICES_REQUEST.PRODUCTION_MANAGER\n ],\n };\n\n case this.REQUEST_TYPES.BPR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.BIF_PRODUCTION_REQUEST.PRODUCTION_MANAGER\n ],\n };\n case this.REQUEST_TYPES.TPPR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.PRODUCTION_REQUEST_3RD_PARTY.PRODUCTION_MANAGER,\n UserRoles.PRODUCTION_REQUEST_3RD_PARTY.TRAFFIC_MANAGER\n ],\n };\n case this.REQUEST_TYPES.DAR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n ],\n };\n\n case this.REQUEST_TYPES.IPR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.IH_PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n ],\n };\n case this.REQUEST_TYPES.IR:\n return {\n roles: [\n UserRoles.APP.ADMIN,\n UserRoles.APP.SUPER_USER,\n UserRoles.IMAGE_REQUEST.TRAFFIC_MANAGERS\n ],\n };\n }\n return {\n roles: [],\n };\n })();\n\n return {roles, labelId: `module.requests.types.${requestDetails.type}`, isMenuItemVisible: isRequestInProgress};\n });\n changeTrafficManagerInfo = memoize((requestDetails: BaseRequestModel): {\n /**\n * Indicates is button may be visible\n */\n roles?: string[];\n /**\n * Target user group\n */\n selectionRoles?: string[];\n isMenuItemVisible: boolean;\n labelId: string;\n } => {\n const isMenuItemVisible = [this.REQUEST_STATUSES.IN_PROGRESS, this.REQUEST_STATUSES.TERMINATED].includes(requestDetails?.status);\n\n const {roles, selectionRoles = []} = (() => {\n switch (requestDetails.type) {\n case this.REQUEST_TYPES.CDR:\n return {\n roles: [\n UserRoles.CARD_DESIGN_REQUEST.TRAFFIC_MANAGERS\n ],\n selectionRoles: [\n TrafficManagers.CDR\n ],\n };\n\n case this.REQUEST_TYPES.PDR:\n return {\n roles: [\n UserRoles.POP_DESIGN_REQUEST.TRAFFIC_MANAGERS\n ],\n selectionRoles: [\n TrafficManagers.PDR\n ],\n };\n case this.REQUEST_TYPES.IR:\n return {\n roles: [\n UserRoles.IMAGE_REQUEST.TRAFFIC_MANAGERS\n ],\n selectionRoles: [\n TrafficManagers.IR\n ],\n };\n }\n return {\n roles: [],\n selectionRoles: [],\n };\n })();\n\n return {roles, selectionRoles, labelId: `module.requests.types.${requestDetails.type}`, isMenuItemVisible: isMenuItemVisible && roles.length > 0};\n });\n\n @ViewChild('menuTrigger') menuTrigger;\n ngOnInit(): void {\n this.roleProviderAggregator.addRoleProvider(this.requestSpecificRoleProvider);\n this.setRequestActionButtonsListeners();\n\n this.subscriptions.push(\n this.route.params.subscribe(params => {\n this.requestId = params.id;\n this.titleService.setTitle(`ProduceIT - Requests - ${this.requestId}`);\n this.store.dispatch(loadRequestSteps({requestId: this.requestId}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId}));\n this.cachedStepsSet = new Set();\n\n this.cd.markForCheck();\n }),\n\n this.requestService.getRequestNameListener().subscribe(name => {\n this.requestDetails.name = name;\n this.cd.markForCheck();\n }),\n\n this.eventService.on(Events.ChangeRequestStage, action => {\n this.changeCurrentState(action);\n }),\n this.eventService.on(Events.StepBack, (event) => {\n this.fireStepChangeEvent(event, RequestStageActions.RouteBack);\n }),\n this.eventService.on(Events.StepCancel, (event) => {\n this.fireStepChangeEvent(event, RequestStageActions.Cancel);\n }),\n this.eventService.on(Events.StepApprove, (event) => {\n this.fireStepChangeEvent(event, RequestStageActions.Complete);\n }),\n this.eventService.on(Events.StepSubmit, (event) => {\n this.fireStepChangeEvent(event, RequestStageActions.Complete);\n }),\n this.eventService.on(Events.StepClose, (event) => {\n this.fireStepChangeEvent(event, RequestStageActions.Complete);\n }),\n this.eventService.on(Events.UpdateCommentCount, value => {\n this.commentCount = value;\n this.cd.markForCheck();\n })\n );\n\n this.store.select(selectRequestDetails)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestDetails => {\n if (requestDetails) {\n this.requestDetails = cloneDeep(requestDetails);\n if (requestDetails.type === this.REQUEST_TYPES.CDR) {\n this.designDeliveryDate = this.requestDetails.details.finalArtDueDate;\n }\n this.deliveryDate = this.calculateDeliveryDate(this.requestDetails);\n if (this.currentAction) {\n this.updateCurrentStepActions(this.currentAction);\n }\n }\n this.cd.markForCheck();\n });\n\n this.store.select(selectRequestDetailsCombined)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(requestDetails => {\n this.requestDetailsCombined = cloneDeep(requestDetails);\n });\n\n /**\n * Sync actions\n */\n this.store.select(selectRequestCurrentStage).pipe(\n filter((v) => v !== null),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(currentStage => {\n this.currentAction = currentStage;\n this.updateCurrentStepActions(currentStage);\n });\n\n /**\n * Retrieve steps for request\n */\n combineLatest([\n this.store.select(selectRequestDetailsSteps),\n this.store.select(selectRequestCurrentStage),\n this.store.select(selectRequestStepInProgress)\n ])\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(([requestSteps, currentStage, stepInProgress]) => {\n if (requestSteps?.length && requestSteps) {\n this.requestSteps = requestSteps;\n this.currentStage = currentStage;\n this.stepInProgress = stepInProgress;\n }\n this.cd.markForCheck();\n });\n\n combineLatest([\n this.store.select(selectRequestStepLoading),\n this.store.select(selectRequestDetailsLoading)\n ]).pipe(\n takeUntil(this.ngUnsubscribe),\n finalize( () => {this.loaderService.hideLoader();}))\n .subscribe(([stepLoading, detailsLoading]) => {\n if (stepLoading || detailsLoading) {\n this.loaderService.showLoader();\n } else {\n this.loaderService.hideLoader();\n }\n });\n }\n\n public onNameEdit(): void {\n this.modalService.openRequestNameModal(this.requestDetails.name, this.requestDetails.type)\n .pipe(filter(v => v.name !== this.requestDetails.name))\n .subscribe(({ name }) => {\n this.store.dispatch(requestDetailsActions.updateRequestName({ requestId: this.requestId, name }));\n });\n }\n\n public onReassignPpm(): void {\n const users$: Observable = this.requestService.getUsers('', [\n this.reassignPpmInfo.ppmSearchGroup\n ]).pipe(\n filter(users => users?.length > 0),\n map(users => users.map(user => ({value: user, label: this.utilsService.getFullUserName(user), extras: [user.userName]})))\n );\n\n this.modalService\n .openModal(\n ReassignPpmFormComponent, { users$ }, undefined, undefined, false,\n )\n .afterClosed()\n .pipe(\n filter(v => !!v),\n tap(user => this.store.dispatch(requestDetailsActions.updatePpm({ request: this.requestDetails, user }))),\n tap(() => this.loaderService.showLoader()),\n switchMap(user => this.actions.pipe(\n ofType(requestDetailsActions.updatePpmSuccess),\n take(1),\n tap(() => {\n this.store.dispatch(loadRequestSteps({requestId: this.requestId}));\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n\n this.loaderService.hideLoader();\n }),\n map(({ data }) => ({ user, request: data })),\n )),\n )\n .subscribe(({ user, request }) => {\n this.store.dispatch(requestDetailsActions.updateRequestDetailsSuccess({ data: request }));\n\n this.messageService.showSystemMessage('success', null, this.translate.transform(\n 'module.requests.text.success-reassigning', {\n requestType: this.translate.transform(this.reassignPpmInfo.labelId),\n ppmName: this.utilsService.getFullUserName(user),\n requestId: this.requestDetails.id,\n requestName: this.requestDetails.name,\n },\n ),\n );\n });\n\n this.actions.pipe(\n ofType(requestDetailsActions.updatePpmFailure),\n first(),\n tap(() => this.loaderService.hideLoader()),\n )\n .subscribe();\n }\n\n private getTerminationModalReasoned() {\n\n const {overlayRef} = this.stepActionsService.createReasonAndOverlay('terminate', true, 'terminate');\n\n return this.actionsReasonService.getReason()\n .pipe(\n take(1),\n finalize(() => {\n overlayRef.detach();\n this.cd.markForCheck();\n })\n );\n }\n\n public updateRequestStatus(status: string): void {\n if (this.requestDetails.type === this.REQUEST_TYPES.PDR &&\n this.requestDetails.status !== this.REQUEST_STATUSES.TERMINATED &&\n !this.requestDetails?.details?.linkedProductionRequestReferences?.every(item => item.status === this.REQUEST_STATUSES.TERMINATED)) {\n this.messageService.showSystemMessage('error',\n this.translate.transform('common.modal.association-termination-pdr'));\n return;\n }\n\n const isConfirmed$ = status === STATUSES.TERMINATED ?\n this.getTerminationModalReasoned().pipe(map((confirmResult) => [confirmResult.buttonClicked === 'confirm', confirmResult.comment])) :\n of([true, null]);\n isConfirmed$.pipe(\n filter(([isConfirmed]: [boolean, string?]) => isConfirmed),\n tap(([, comment]) => this.store.dispatch(requestDetailsActions.updateRequestStatus({\n request: this.requestDetails,\n status,\n comment\n }))),\n exhaustMap(() =>\n this.actions.pipe(\n find>(\n a => a.type === requestDetailsActions.updateRequestStatusSuccess.type\n ),\n )\n ),\n ).subscribe(({ data }) => {\n this.eventService.emit({ eventName: Events.UpdateActionHistory });\n this.store.dispatch(requestDetailsActions.updateRequestDetailsSuccess({ data }));\n });\n }\n\n private getTerminationModal(): MatDialogRef {\n return this.requestDetails.type === this.REQUEST_TYPES.PPR && this.getLinkedItem && !this.getLinkedItem?.external &&\n this.getLinkedItem?.status !== this.REQUEST_STATUSES.TERMINATED ?\n // new wish to continue modal\n this.modalService.openConfirmationModal(\n this.translate.transform('module.requests.text.terminate-request'),\n this.translate.transform('common.modal.association-termination-ppr'),\n this.translate.transform('common.button.yes'),\n this.translate.transform('common.button.no'),\n ) :\n // old confirm modal when terminate\n this.modalService.openConfirmationModal(\n this.translate.transform('module.requests.text.terminate-request'),\n this.translate.transform('common.modal.lost-data-desc'),\n this.translate.transform('module.requests.text.terminate'),\n this.translate.transform('common.button.cancel'),\n );\n }\n\n private updateCurrentStepActions(currentStep) {\n const isDisabled = !this.isInProgress(currentStep) || this.requestDetails.status === STATUSES.TERMINATED;\n\n this.stepActionsService.updateCurrentStepActions(this.requestDetails?.type, currentStep?.code, isDisabled);\n this.requestActionsActive = currentStep?.status === RequestStageState.InProgress;\n }\n\n private setRequestActionButtonsListeners(): void {\n this.stepActionsService.getActionsButtons().subscribe(actions => {\n this.requestActionButtons = actions;\n });\n }\n\n changeCurrentState(action: EventRequestAction) {\n const currentStep = this.findCurrentStep();\n\n if (!currentStep) {\n return;\n }\n this.loaderService.showLoader();\n this.requestService.performAction(action.requestId, action.actionType, currentStep.code, action.comment)\n .subscribe((response: HttpResponse) => {\n this.loaderService.hideLoader();\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n this.store.dispatch(requestDetailsActions.loadRequestDetails({requestId: this.requestId}));\n this.store.dispatch(loadRequestSteps({requestId: this.requestId}));\n }, () => this.loaderService.hideLoader());\n }\n\n public updateSelectedStage(stage: RequestStage) {\n this.store.dispatch(selectStage({stage}));\n }\n\n private fireStepChangeEvent(event, actionType) {\n this.finalizeStageService.finalizePendingOperations();\n this.changeCurrentState({\n requestId: this.requestId,\n actionType,\n comment: event.comment\n });\n }\n\n private findCurrentStep(): RequestStage {\n return this.requestSteps.find(value => this.isInProgress(value)) ||\n (this.requestSteps.length > 1 ? this.requestSteps[this.requestSteps.length - 1] : null);\n }\n\n private isInProgress(value) {\n return value?.status === RequestStageState.InProgress;\n }\n\n ngOnDestroy() {\n this.roleProviderAggregator.removeRoleProvider(this.requestSpecificRoleProvider);\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n\n this.store.dispatch(requestDetailsActions.resetRequestDetails());\n this.subscriptions.forEach(sub => sub?.unsubscribe());\n }\n\n private calculateDeliveryDate(requestDetails: any) {\n if (!requestDetails || !requestDetails.items || !requestDetails.items.length) {\n return;\n }\n return requestDetails.items.map(item => item.deliveryDate)\n .reduce((a, b) => {\n if (!a) {\n return b;\n }\n if (!b) {\n return a;\n }\n return a < b ? a : b;\n });\n }\n\n public shouldShowDesignDeliveryDate() {\n return this.currentStage?.code !== 'TM_REVIEW' && this.currentStage?.code !== 'REQUEST_DETAILS' && this.designDeliveryDate;\n }\n\n public get getLinkedItem(): {\n id?: string | number;\n external?: string;\n status?: string;\n name: string;\n } {\n return (this.requestDetails as PopProductionRequestModel)?.details?.designRequestReference ||\n (this.requestDetails as PopDesignRequestModel)?.details?.productionRequestReference ||\n ((this.requestDetails as PopProductionRequestModel)?.details?.inQueueJobReference ? {\n external: 'InQ',\n name: (this.requestDetails as PopProductionRequestModel)?.details?.inQueueJobReference\n } : null);\n }\n\n public get getLinkedItems() {\n return (this.requestDetails as PopProductionRequestModel)?.details?.designRequestReference ||\n (this.requestDetails as PopProductionRequestModel)?.details?.inQueueJobReference ||\n (this.requestDetails as PopDesignRequestModel)?.details?.productionRequestReference ||\n (this.requestDetails as PopDesignRequestModel)?.details?.linkedProductionRequestReferences?.length;\n }\n\n public get getPopDesignLinkedItems() {\n return (this.requestDetails as PopDesignRequestModel)?.details?.linkedProductionRequestReferences\n .sort((a, b) => Number(a.id) - Number(b.id));\n }\n\n public openAssociatedModal(): void {\n this.modalService.openModal(this.associatedPopDesign);\n }\n\n public get reassignPpmInfo(): { ppmGroup?: string; ppmSearchGroup?: UserGroups; isMenuItemVisible: boolean; labelId: string } {\n const isRequestInProgress = this.requestDetails?.status === this.REQUEST_STATUSES.IN_PROGRESS;\n\n switch (this.requestDetails?.type) {\n case this.REQUEST_TYPES.CPR:\n return {\n isMenuItemVisible: isRequestInProgress,\n ppmSearchGroup: UserGroups.PPM,\n ppmGroup: UserRoles.PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n labelId: 'module.requests.types.PRODUCTION_REQUEST',\n };\n case this.REQUEST_TYPES.PPR:\n return {\n isMenuItemVisible: isRequestInProgress,\n ppmGroup: UserRoles.POP_PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n ppmSearchGroup: UserGroups.POP_PPM,\n labelId: 'module.requests.types.POP_PRODUCTION_REQUEST',\n };\n case this.REQUEST_TYPES.FSR:\n return {\n isMenuItemVisible: isRequestInProgress,\n ppmGroup: UserRoles.FINANCIAL_SERVICES_REQUEST.PRODUCTION_MANAGER,\n ppmSearchGroup: UserGroups.FSR_PPM,\n labelId: 'module.requests.types.FINANCIAL_SERVICES_REQUEST',\n };\n case this.REQUEST_TYPES.BPR:\n return {\n isMenuItemVisible: isRequestInProgress,\n ppmGroup: UserRoles.BIF_PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n ppmSearchGroup: UserGroups.BIF_PPM,\n labelId: 'module.requests.types.BIF_PRODUCTION_REQUEST',\n };\n case this.REQUEST_TYPES.TPPR:\n return {\n isMenuItemVisible: isRequestInProgress,\n ppmGroup: UserRoles.PRODUCTION_REQUEST_3RD_PARTY.PRODUCTION_MANAGER,\n ppmSearchGroup: UserGroups.THIRD_PARTY_PPM,\n labelId: 'module.requests.types.PRODUCTION_REQUEST_3RD_PARTY',\n };\n case this.REQUEST_TYPES.IPR:\n return {\n isMenuItemVisible: isRequestInProgress,\n ppmGroup: UserRoles.IH_PRODUCTION_REQUEST.PRODUCTION_MANAGER,\n ppmSearchGroup: UserGroups.IH_PPM,\n labelId: 'module.requests.types.IH_PRODUCTION_REQUEST',\n };\n }\n }\n\n /**\n * Store initialized steps for lazy initialization\n */\n public cachedSteps(stepIndex: number, currentStepIndex: number) {\n this.cachedStepsSet.add(currentStepIndex);\n return this.cachedStepsSet.has(stepIndex);\n }\n\n public canActivate(sub) {\n return this.requestDetails?.status !== this.REQUEST_STATUSES.DRAFT && this.hasUserPermission(sub);\n }\n\n public canTerminate(sub) {\n return this.requestDetails?.status !== this.REQUEST_STATUSES.DRAFT && this.hasUserPermission(sub);\n }\n\n public getDuplicateRequestPermissions(): string | string[] {\n if (this.requestIsBifProductionMonthlyBilling()) {\n return UserRoles.BIF_PRODUCTION_REQUEST.PRODUCTION_MANAGER;\n }\n\n return '';\n }\n\n private requestIsBifProductionMonthlyBilling() {\n return this.requestDetails?.type === this.REQUEST_TYPES.BPR && this.requestDetails?.details?.monthlyBilling;\n }\n\n private hasUserPermission(sub: any): boolean {\n switch (this.requestDetails?.type) {\n case this.REQUEST_TYPES.CPR:\n return sub.isPPM;\n case this.REQUEST_TYPES.CDR:\n return sub.isCardDesignTM;\n case this.REQUEST_TYPES.PDR:\n return sub.isPopDesignTM;\n case this.REQUEST_TYPES.PPR:\n return sub.isPPM;\n case this.REQUEST_TYPES.FSR:\n return sub.isPPM;\n case this.REQUEST_TYPES.BPR:\n return sub.isPPM;\n case this.REQUEST_TYPES.TPPR:\n return sub.isPPM;\n case this.REQUEST_TYPES.IPR:\n return sub.isPPM;\n case this.REQUEST_TYPES.IR:\n return sub.isImageTM;\n default:\n return false;\n }\n }\n\n public onDeleteDraft(): void {\n if (this.getLinkedItem) {\n this.messageService.showSystemMessage(\n 'error',\n this.requestDetails.type === this.REQUEST_TYPES.PPR ?\n this.translate.transform('common.message.delete-with-association-ppr') :\n this.translate.transform('common.message.delete-with-association-pdr')\n );\n return;\n }\n\n this.modalService.openConfirmationModal(\n this.translate.transform('common.button.step-delete'),\n this.translate.transform('common.modal.lost-data-desc'),\n this.translate.transform('common.button.delete'),\n this.translate.transform('common.button.cancel'),\n )\n .afterClosed()\n .pipe(\n filter((isConfirmed: boolean) => isConfirmed),\n tap(() => this.loaderService.showLoader()),\n switchMap(() =>\n this.requestService.deleteRequest(this.requestId).pipe(finalize(() => {\n this.loaderService.hideLoader();\n }))\n ),\n )\n .subscribe(() => {\n this.router.navigate([`${PAGES_CONFIG.REQUESTS}`]);\n });\n }\n\n async duplicateRequest() {\n this.loaderService.showLoader();\n try {\n const duplicatedRequest = await this.requestService.duplicateRequest(this.requestId).pipe(takeUntil(this.ngUnsubscribe)).toPromise();\n this.router.navigate([`/${PAGES_CONFIG.REQUESTS}`, duplicatedRequest.id]);\n } catch (e) {\n } finally {\n this.loaderService.hideLoader();\n }\n }\n requestStepTrackFn = (index: number, object: RequestStage) => {\n if (NO_RELOAD_COMPONENT_STAGES.includes([this.requestDetails?.type, object?.code].join('.'))) {\n return object.code;\n }\n return object;\n };\n}\n","
\n
\n \n
\n
\n
\n

\n {{requestDetails.id}} - {{requestDetails?.country || requestDetails?.details?.countryCode}} –\n {{requestDetails.details?.csJobId}}/\n \n {{requestDetails.name}}\n \n \n \n \n \n \n \n \n {{deliveryDate | date: 'd MMM' | uppercase}}\n \n \n \n \n \n \n {{designDeliveryDate | date: 'd MMM' | uppercase}}\n \n \n \n \n \n \n \n \n \n \n {{getLinkedItem.external}} {{getLinkedItem.name}}\n \n \n \n \n \n {{getLinkedItem.id}} â€“ {{getLinkedItem.name}}\n \n \n \n \n \n \n \n \n \n \n \n

\n
\n
\n
\n \n
\n \n {{'module.requests.text.submitted-by' | translate}}: \n {{requestDetails.submitter.firstName}} {{requestDetails.submitter.lastName}}, \n {{requestDetails.submittedAt | date : 'MM/dd/yyyy, hh:mm a'}}\n \n \n
\n
{{'module.requests.text.delivery-date' | translate}}:
\n  {{deliveryDate | date: 'MM/dd/yyyy' | uppercase}}\n
\n \n
\n
{{'module.requests.text.delivery-date' | translate}}:
\n  {{designDeliveryDate | date: 'MM/dd/yyyy' | uppercase}}\n
\n
\n
\n
\n\n\n\n\n \n \n \n {{'module.requests.text.details' | translate}}\n \n \n
\n\n \n \n \n \n \n\n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n {{'module.requests.text.duplicate-request' | translate}}\n \n \n \n \n \n
\n\n\n
\n \n
\n

{{'module.requests.pop-design.association' | translate}}

\n
\n \n
\n
\n\n","import {ListSort} from './list-sort.model';\n\ninterface FieldFilter {\n [value: string]: Array;\n}\n\nexport type ListFilterModes = 'all'|'my'|'draft'|'to-do';\n\nexport const REQUEST_LIST_SEARCH_MODES: {\n all: 'ALL_REQUESTS';\n my: 'MY_REQUESTS';\n draft: 'DRAFTS';\n 'to-do': 'MY_TODO';\n} = {\n all: 'ALL_REQUESTS',\n my: 'MY_REQUESTS',\n draft: 'DRAFTS',\n 'to-do': 'MY_TODO'\n};\n\n\nexport interface ListFilter {\n mode: ListFilterModes;\n sort: ListSort;\n filter: FieldFilter;\n search: string;\n dateRange: {\n startDate: string;\n endDate: string;\n };\n}\n\nexport const DEFAULT_REQUEST_LIST: Readonly = {\n mode: 'my',\n sort: {\n order: 'desc',\n property: 'id'\n },\n filter: {\n stage: [],\n assignee: [],\n status: [],\n type: [],\n submitter: [],\n },\n search: null,\n dateRange: null,\n};\n","import { CollectionViewer } from '@angular/cdk/collections';\nimport { Observable, Subscription, BehaviorSubject } from 'rxjs';\nimport { RequestSearchItem } from '../../models/request-search-item.model';\nimport { RequestListService } from '../../services/request-list.service';\nimport { ListFilter } from '../../models/list-filter.model';\nimport { DataSource } from '@angular/cdk/table';\nimport { debounceTime } from 'rxjs/operators';\n\nexport class RequestSearchItemDataSource extends DataSource {\n private cachedData: Array = [];\n private fetchedPages = new Set([0]); // first page is concidered to be loaded\n private dataStream = new BehaviorSubject<(RequestSearchItem|null)[]>(this.cachedData);\n private subscription = new Subscription();\n public get length() {\n return this.cachedData.length;\n }\n\n constructor(\n firstPage: RequestSearchItem[],\n public totalCount: number,\n private pageSize: number,\n private filter: ListFilter,\n private requestListService: RequestListService\n ) {\n super();\n\n this.cachedData = [...firstPage, ...(Array.from({length: totalCount - firstPage.length }) as null[])];\n this.dataStream.next(this.cachedData);\n }\n\n connect(collectionViewer: CollectionViewer): Observable<(RequestSearchItem|null)[]> {\n this.subscription.add(collectionViewer.viewChange.pipe(debounceTime(100)).subscribe(range => {\n const startPage = this.getPageForIndex(range.start);\n const endPage = this.getPageForIndex(range.end - 1);\n for (let i = startPage; i <= endPage; i++) {\n this.fetchPage(i);\n }\n }));\n return this.dataStream;\n }\n\n disconnect(): void {\n this.subscription.unsubscribe();\n }\n\n private getPageForIndex(index: number): number {\n return Math.floor(index / this.pageSize);\n }\n\n private fetchPage(page: number) {\n if (this.fetchedPages.has(page)) {\n return;\n }\n this.fetchedPages.add(page);\n\n const fetchRequestList$ = this.requestListService.fetchRequestList(({...this.filter}), page + 1);\n\n fetchRequestList$.subscribe(({documents}) => {\n this.cachedData.splice(\n page * this.pageSize,\n documents.length,\n ...documents\n );\n this.dataStream.next(this.cachedData);\n });\n }\n}\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element ().\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","\n/**\n * Request service mapping\n */\nexport const REQUEST_LIST_ORDER_DIRECTIONS: {\n asc: 'ASC';\n desc: 'DESC';\n} = {\n asc: 'ASC',\n desc: 'DESC'\n};\n\n/**\n * Request service mapping\n */\nexport const REQUEST_LIST_SORT_BY: {\n id: 'Id';\n name: 'Name';\n type: 'Type';\n status: 'Status';\n stage: 'Stage';\n deadline: 'Deadline';\n createdAt: 'CreationDate';\n} = {\n id: 'Id',\n name: 'Name',\n type: 'Type',\n status: 'Status',\n stage: 'Stage',\n deadline: 'Deadline',\n createdAt: 'CreationDate',\n};\n\nexport type SORT_FIELDS = keyof typeof REQUEST_LIST_SORT_BY;\nexport type SORT_ORDER_DIRECTIONS = keyof typeof REQUEST_LIST_ORDER_DIRECTIONS;\n\nexport interface ListSort {\n order: SORT_ORDER_DIRECTIONS;\n property: SORT_FIELDS;\n}\n","import {Injectable} from '@angular/core';\nimport {ListFilter, REQUEST_LIST_SEARCH_MODES} from '../models/list-filter.model';\nimport {HttpParams} from '@angular/common/http';\nimport {RequestSearchItem} from '../models/request-search-item.model';\nimport {API} from '../../shared/constants/api.constants';\nimport { REQUEST_LIST_SORT_BY, REQUEST_LIST_ORDER_DIRECTIONS } from '../models/list-sort.model';\nimport { ErrorHandlingHttpClient } from '../../shared/services/error-handling-http-client.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RequestListService {\n readonly PAGE_SIZE = 50;\n\n constructor(private errorHandlingHttpClient: ErrorHandlingHttpClient) {}\n\n fetchRequestList(filter: ListFilter, page: number) {\n let httpParams = new HttpParams()\n .append('page.number', `${page - 1}`)\n .append('page.size', `${this.PAGE_SIZE}`)\n .append('searchMode', REQUEST_LIST_SEARCH_MODES[filter.mode])\n .append('sortBy', REQUEST_LIST_SORT_BY[filter.sort.property])\n .append('sortDirection', REQUEST_LIST_ORDER_DIRECTIONS[filter.sort.order]);\n\n filter.filter?.stage.forEach(stage => {\n httpParams = httpParams.append('stages', `${stage}`);\n });\n\n filter.filter?.assignee.forEach(assignee => {\n httpParams = httpParams.append('assignees', `${assignee}`);\n });\n\n filter.filter?.submitter?.forEach(submitter => {\n httpParams = httpParams.append('submitters', `${submitter}`);\n });\n\n filter.filter?.status.forEach(status => {\n httpParams = httpParams.append('statuses', `${status}`);\n });\n\n filter.filter?.type.forEach(type => {\n httpParams = httpParams.append('types', `${type}`);\n });\n\n if (filter.search) {\n httpParams = httpParams.append('searchRequest', filter.search);\n }\n\n if (filter.dateRange) {\n httpParams = httpParams.append('creationDate.from', filter.dateRange.startDate);\n httpParams = httpParams.append('creationDate.to', filter.dateRange.endDate);\n }\n\n return this.errorHandlingHttpClient.get<{\n documents: RequestSearchItem[];\n totalDocuments: number;\n }>(`${API.searchRequests}`, {\n params: httpParams\n });\n }\n}\n","
\n
\n \n \n \n\n
\n {{'module.requests.label.submitted-by' | translate}}\n\n \n \n \n \n
\n \n\n \n
\n {{'module.requests.label.assign' | translate}}\n\n -1\">\n \n \n \n
\n \n
\n
\n\n\n
\n {{label | translate}}\n -1\">\n \n \n \n \n \n \n \n
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport uniqBy from 'lodash/uniqBy';\nimport {\n SelectSearchDropdownOptionsInput,\n} from 'src/app/shared/components/select-search-dropdown/select-search-dropdown.component';\n\nimport { ItemListProvider } from '../../../shared/components/multiselect-search-dropdown/item-list.provider';\nimport { STATUSES } from '../../constants/request-statuses.constant';\nimport { ListFilter, REQUEST_LIST_SEARCH_MODES } from '../../models/list-filter.model';\nimport { ListSort, SORT_FIELDS } from '../../models/list-sort.model';\nimport { RequestTypeModel } from '../../models/request-type.model';\n\nconst MODE_FILTERS: {\n [k in keyof typeof REQUEST_LIST_SEARCH_MODES]: string[];\n} = {\n draft: ['id', 'name', 'type', 'deadline'],\n all: ['id', 'name', 'type', 'submitter', 'status', 'stage', 'assignee', 'deadline'],\n my: ['id', 'name', 'type', 'submitter', 'status', 'stage', 'assignee', 'deadline'],\n 'to-do': ['id', 'name', 'type', 'submitter', 'status', 'stage', 'assignee', 'deadline']\n};\n\n@Component({\n selector: 'app-filter-menu',\n templateUrl: './filter-menu.component.html',\n styleUrls: ['./filter-menu.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilterMenuComponent implements OnChanges {\n @Input() public assigneeRequestListDataSource: ItemListProvider;\n\n /**\n * Request stages\n */\n public stageOptions: Array<{\n label: string;\n value: string;\n requestTypeCode: string;\n }> = [];\n public stages = [];\n\n /**\n * Request types\n */\n public requestTypeOptions: Array = [];\n\n /**\n * Filtered and sorted fields visible for the current filter mode\n */\n public columnFilters: Array = [];\n\n /**\n * Request status selector options\n */\n public Statuses: Array = Object.entries(STATUSES)\n .filter(([key]) => key !== STATUSES.DRAFT)\n .map(([key, val]) => ({\n label: this.translateService.instant(`module.requests.request-status.${val}`),\n value: val\n }));\n\n public activeSort: ListSort;\n\n /**\n * Filter\n */\n private storedFilter: ListFilter = null;\n @Input() set filter(filter: ListFilter) {\n this.storedFilter = filter;\n this.activeSort = filter.sort;\n this.columnFilters = MODE_FILTERS[filter.mode];\n }\n get filter() {\n return this.storedFilter;\n }\n @Output() filterChange = new EventEmitter();\n\n @Input() public set requestTypes(requestTypes: RequestTypeModel[]) {\n this.requestTypeOptions = (requestTypes || [])\n .filter(requestType => requestType.requestStageTypes.length)\n .map((requestType) => ({\n label: requestType.name,\n value: requestType.type\n }));\n\n this.stageOptions = (requestTypes || []).flatMap(requestType =>\n requestType.requestStageTypes.map(stageType => ({\n label: stageType.searchStageName,\n value: stageType.code,\n requestTypeCode: requestType.type\n }))\n ).sort((a, b) => a.label > b.label ? 1 : (a.label < b.label ? -1 : 0));\n }\n\n private DEFAULT_INITIAL_SORT: ListSort['order'] = 'asc';\n\n constructor(private translateService: TranslateService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if ('requestTypes' in changes || 'filter' in changes) {\n if (this.filter.filter.type.length > 0) {\n this.stages = uniqBy(\n this.stageOptions.filter(stOptions => this.filter.filter.type.includes(stOptions.requestTypeCode)),\n result => result.value\n );\n } else {\n this.stages = uniqBy(this.stageOptions, result => result.value);\n }\n }\n }\n\n toggleSort(field: SORT_FIELDS): void {\n let order!: ListSort['order'];\n if (this.activeSort.property === field) {\n order = this.activeSort.order === 'asc' ? 'desc' : 'asc';\n } else {\n order = this.DEFAULT_INITIAL_SORT;\n }\n const currentSort: ListSort = {\n order,\n property: field\n };\n this.filterChange.emit({\n ...this.storedFilter,\n sort: currentSort\n });\n }\n\n applyFilter(field: string, value: string[]): void {\n this.filterChange.emit({\n ...this.storedFilter,\n filter: {\n ...this.storedFilter.filter,\n [field]: value\n }\n });\n }\n}\n","export const REQUEST_ACTIONS: Array = [\n // 'edit',\n // // 'back',\n // 'cancel',\n // 'hold'\n];\n","import {Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output, Renderer2} from '@angular/core';\n\n/**\n * Prevents click if selection has been started\n *\n * @example ```html\n *
Some selectable content
\n * ```\n */\n@Directive({\n // tslint:disable-next-line: directive-selector\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[click.prevent-default]'\n})\nexport class ClickPreventDefaultDirective implements OnInit, OnDestroy {\n private subscription: () => void;\n @Output('click.prevent-default') public defaultPrevented = new EventEmitter();\n\n constructor(private renderer: Renderer2, private element: ElementRef) {}\n\n ngOnInit() {\n this.subscription = this.renderer.listen(this.element.nativeElement, 'click', event => {\n event.preventDefault();\n event.stopPropagation();\n this.defaultPrevented.next(event);\n });\n }\n\n ngOnDestroy() {\n this.subscription();\n }\n}\n","import {Component, ChangeDetectionStrategy, Input, OnDestroy} from '@angular/core';\nimport {RequestSearchItem} from '../../../models/request-search-item.model';\nimport {DUPLICATE_SUPPORTED_REQUEST_TYPES} from '../../../constants/request-types.constant';\nimport {LoaderService} from '../../../../shared/services/loader.service';\nimport {RequestsService} from '../../../services/requests.service';\nimport {takeUntil, distinctUntilChanged} from 'rxjs/operators';\nimport {Subject, BehaviorSubject} from 'rxjs';\nimport {Router} from '@angular/router';\nimport {PAGES_CONFIG} from 'src/app/shared/constants/pages.constants';\nimport { STATUSES } from '../../../constants/request-statuses.constant';\n\n@Component({\n selector: 'app-request-item-actions',\n templateUrl: './request-item-actions.component.html',\n styleUrls: ['./request-item-actions.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'requestItemActions'\n})\nexport class RequestItemActionsComponent implements OnDestroy {\n private ngUnsubscribe = new Subject();\n public canDuplicate = false;\n\n private _item: RequestSearchItem;\n @Input() public set item(item: RequestSearchItem) {\n this.canDuplicate = item?.status !== STATUSES.DRAFT && DUPLICATE_SUPPORTED_REQUEST_TYPES.includes(item?.type);\n this.checkActions();\n this._item = item;\n }\n public get item(): RequestSearchItem {\n return this._item;\n }\n public hasActionsSubject = new BehaviorSubject(false);\n public hasActions$ = this.hasActionsSubject.pipe(distinctUntilChanged());\n\n constructor(private loaderService: LoaderService, private requestService: RequestsService, private router: Router) {}\n\n private checkActions() {\n this.hasActionsSubject.next([this.canDuplicate].some(condition => condition));\n }\n\n async duplicate() {\n this.loaderService.showLoader();\n try {\n const duplicatedRequest = await this.requestService.duplicateRequest(this.item.id).pipe(takeUntil(this.ngUnsubscribe)).toPromise();\n this.router.navigate([`/${PAGES_CONFIG.REQUESTS}`, duplicatedRequest.id]);\n } catch (e) {\n } finally {\n this.loaderService.hideLoader();\n }\n }\n\n ngOnDestroy(): void {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\n","\n \n {{ 'module.requests.text.duplicate-request' | translate }}\n\n","
\n
\n
{{item.id}}
\n
\n
{{item.name}}
\n
\n \n \n {{item.submitter.firstName}} {{item.submitter.lastName}}\n {{item.creator.firstName}} {{item.creator.lastName}}\n \n\n \n \n {{ 'module.requests.text.submitted-on' | translate }}: {{item.submittedAt | date : 'MM/dd/yyyy' | uppercase}}\n \n \n \n
\n
\n
\n
\n {{item.creator | lowercase}}\n
\n
\n \n
\n
\n
\n \n {{person | lowercase}}, \n \n
\n
\n \n \n \n {{item.deadline | date : 'dd MMM' | uppercase}}\n
\n
\n \n \n \n \n
\n
\n
\n","import {Component, OnInit, Input, ChangeDetectionStrategy, OnChanges} from '@angular/core';\nimport {REQUEST_ACTIONS} from '../../constants/request-actions.constants';\nimport {RequestSearchItem} from '../../models/request-search-item.model';\nimport moment from 'moment';\nimport { STATUSES } from '../../constants/request-statuses.constant';\n\nconst STATUS_DEFAULT = 'normal';\nconst STATUS_CLOSE = 'close';\nconst STATUS_DUE = 'due';\nconst STATUS_HURRY = 'hurry';\n\nconst defaultDeadlineRequests = ['IH_PRODUCTION_REQUEST', 'IMAGE_REQUEST', 'POP_DESIGN_REQUEST', 'CARD_DESIGN_REQUEST'];\nconst daysTillDelivery = {\n PRODUCTION_REQUEST: 42,\n BIF_PRODUCTION_REQUEST: 14,\n PRODUCTION_REQUEST_3RD_PARTY: 42,\n FINANCIAL_SERVICES_REQUEST: 56,\n POP_PRODUCTION_REQUEST: 42\n};\n\n@Component({\n selector: 'app-request-item',\n templateUrl: './request-item.component.html',\n styleUrls: ['./request-item.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestItemComponent implements OnInit, OnChanges {\n @Input() public item: RequestSearchItem;\n @Input() tabType: string;\n public isMenuVisible: boolean;\n public deadlineStatus: string = STATUS_DEFAULT;\n public requestActionsList: string[] = REQUEST_ACTIONS;\n\n ngOnInit(): void {\n this.isMenuVisible = false;\n }\n\n ngOnChanges(): void {\n this.getDeadlineIcon();\n }\n\n private getDeadlineIcon(): void {\n if([STATUSES.TERMINATED, STATUSES.COMPLETED, STATUSES.DRAFT].includes(this.item.status)) {\n this.deadlineStatus = STATUS_DEFAULT;\n return;\n }\n if (this.getDaysTillDeadline(this.item) >= 7) {\n if (\n this.item.deliveryDate &&\n (moment(this.item.deliveryDate).valueOf() - moment(this.item.createdAt).valueOf()) / (1000 * 3600 * 24) <\n daysTillDelivery[this.item.type] &&\n defaultDeadlineRequests.some(el => el !== this.item.type)\n ) {\n this.deadlineStatus = STATUS_HURRY;\n } else {\n this.deadlineStatus = STATUS_DEFAULT;\n }\n }\n if (this.getDaysTillDeadline(this.item) < 7) {\n this.deadlineStatus = STATUS_CLOSE;\n }\n if (this.getDaysTillDeadline(this.item) <= 0) {\n this.deadlineStatus = STATUS_DUE;\n }\n }\n\n private getDaysTillDeadline(item) {\n const millisecondsTillDeadline = moment(item.deadline).valueOf() - moment().valueOf();\n // daysTillDeadline\n return millisecondsTillDeadline / (1000 * 3600 * 24);\n }\n}\n","import {Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output, Renderer2} from '@angular/core';\n\n/**\n * Prevents click if selection has been started\n *\n * @example ```html\n *
Some selectable content
\n * ```\n */\n@Directive({\n // tslint:disable-next-line: directive-selector\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[click.no-selection]'\n})\nexport class ClickNoSelectionDirective implements OnInit, OnDestroy {\n private subscription: () => void;\n @Output('click.no-selection') public clickNoSelection = new EventEmitter();\n\n constructor(private renderer: Renderer2, private element: ElementRef) {}\n\n ngOnInit() {\n this.subscription = this.renderer.listen(this.element.nativeElement, 'click', event => {\n const selection = window.getSelection();\n\n if (selection.type !== 'Range' || selection.toString().length === 0) {\n this.clickNoSelection.emit(event);\n }\n });\n }\n\n ngOnDestroy() {\n this.subscription();\n }\n}\n","import {\n Component,\n OnInit,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n AfterContentChecked,\n ElementRef,\n ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\nimport {CdkVirtualScrollViewport} from '@angular/cdk/scrolling';\nimport {MatSort} from '@angular/material/sort';\nimport {RequestsService} from '../../services/requests.service';\nimport {combineLatest, Subject, BehaviorSubject, Observable, of, merge, EMPTY} from 'rxjs';\nimport {FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {SORT_FIELDS, SORT_ORDER_DIRECTIONS} from '../../models/list-sort.model';\nimport {ModalService} from '../../../shared/services/modal-service.service';\nimport {Router, ActivatedRoute, Params} from '@angular/router';\nimport {PAGES_CONFIG} from '../../../shared/constants/pages.constants';\nimport {Title} from '@angular/platform-browser';\nimport {RequestSearchItem} from '../../models/request-search-item.model';\nimport {ListFilter, ListFilterModes, DEFAULT_REQUEST_LIST} from '../../models/list-filter.model';\nimport {\n takeUntil,\n distinctUntilChanged,\n skip,\n switchMap,\n map,\n shareReplay,\n startWith,\n pairwise,\n debounceTime,\n catchError,\n take,\n pluck\n} from 'rxjs/operators';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport isEmpty from 'lodash/isEmpty';\nimport get from 'lodash/get';\nimport {RequestListService} from '../../services/request-list.service';\nimport moment from 'moment';\nimport {RequestSearchItemDataSource} from './request-list.data-source';\nimport {MessageService} from '../../../shared/services/message-service.service';\nimport {AssigneeService} from '../../services/assignee.service';\nimport {ItemListProvider, MultiSelectSearchDropdownOption} from '../../../shared/components/multiselect-search-dropdown/item-list.provider';\nimport {UserModel} from 'src/app/shared/models/user.model';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { LoaderService } from '../../../shared/services/loader.service';\n\ninterface FilterQueryParams extends Params {\n mode: string;\n sort_by: ListFilter['sort']['property'];\n sort_direction: ListFilter['sort']['order'];\n filter_stages?: string;\n filter_types?: string;\n filter_assignees?: string;\n filter_statuses?: string;\n filter_submitters?: string;\n search: string;\n date_range: string;\n}\n\nclass AssigneeRequestListDataSource extends ItemListProvider {\n constructor(private assigneeService: AssigneeService) {\n super();\n }\n\n private makeLabel(user: UserModel) {\n return [user.firstName, user.lastName].filter(v => v).join(' ');\n }\n\n loadValues(values: string[]): Observable {\n return this.assigneeService\n .loadValues(values)\n .pipe(map(users => users.map(user => ({label: this.makeLabel(user), value: user.userName}))));\n }\n searchValues(query: string): Observable {\n return this.assigneeService\n .searchValues(query)\n .pipe(map(users => users.map(user => ({label: this.makeLabel(user), value: user.userName}))));\n }\n}\n\n@Component({\n selector: 'app-requests-list',\n templateUrl: './requests-list.component.html',\n styleUrls: ['./requests-list.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestsListComponent implements OnInit, OnDestroy, AfterContentChecked {\n public readonly PAGE_SIZE = 50;\n public readonly DATE_SERIALIZE_PATTERN = 'YYYY-MM-DD';\n @ViewChild(CdkVirtualScrollViewport) viewport: CdkVirtualScrollViewport;\n\n public requestListDataSource$: Observable;\n\n public requestList$: Observable;\n public requestsLoading: boolean;\n public requestFilter: string;\n public get activeTab(): string {\n return ['all', 'my'].indexOf(this.requestListFilter.mode) > -1 ? this.requestListFilter.mode : 'my';\n }\n public buttonLoader = false;\n private MIN_LENGTH = 3;\n public form: FormGroup;\n\n @ViewChild(MatSort, {static: true}) sort: MatSort;\n @ViewChild('formContainer', {static: true, read: ElementRef}) formContainer: ElementRef;\n @ViewChild('cdkVirtualScrollViewport', {static: true, read: ElementRef}) viewportElement: ElementRef;\n\n private ngUnsubscribe = new Subject();\n\n private loadingSubject = new BehaviorSubject(false);\n public loading$ = this.loadingSubject.asObservable();\n\n private readonly defaultListFilter: Readonly = DEFAULT_REQUEST_LIST;\n private defaultStoredFilter = JSON.parse(window.localStorage.getItem('REQUEST_LIST_FILTERS'))?.[this.defaultListFilter.mode]\n || this.defaultListFilter;\n\n private requestListFilterSubject = new BehaviorSubject(this.defaultStoredFilter);\n public get requestListFilter(): Readonly {\n return this.requestListFilterSubject.getValue();\n }\n public set requestListFilter(filterObj: Readonly) {\n const objectFromStorage = JSON.parse(window.localStorage.getItem('REQUEST_LIST_FILTERS')) || {};\n\n if (objectFromStorage.last?.mode !== filterObj?.mode && objectFromStorage[filterObj.mode]) {\n objectFromStorage.last = objectFromStorage[filterObj.mode];\n window.localStorage.setItem('REQUEST_LIST_FILTERS', JSON.stringify(objectFromStorage));\n this.requestListFilterSubject.next(objectFromStorage[filterObj.mode]);\n } else {\n objectFromStorage[filterObj.mode] = filterObj;\n objectFromStorage.last = filterObj;\n window.localStorage.setItem('REQUEST_LIST_FILTERS', JSON.stringify(objectFromStorage));\n this.requestListFilterSubject.next(filterObj);\n }\n }\n /**\n * Resize Observer\n */\n private resizeObserver$ = new ResizeObserver((entries) => {\n this.checkFromContainerWidth();\n });\n\n /**\n * Navigation change planner\n */\n public scheduleRouterNavigate = this.requestListFilterSubject.pipe(\n skip(1), // skiping initial state\n distinctUntilChanged((a, b) => isEqual(a, b))\n );\n\n private scheduleUpdateData = this.requestListFilterSubject.pipe(distinctUntilChanged((a, b) => isEqual(a, b)));\n\n public requestTypes$ = this.requestService.createRequest();\n\n public assigneeRequestListDataSource = new AssigneeRequestListDataSource(this.assigneeService);\n\n constructor(\n private requestService: RequestsService,\n private modalService: ModalService,\n private router: Router,\n private fb: FormBuilder,\n private titleService: Title,\n private route: ActivatedRoute,\n private requestListService: RequestListService,\n private messageService: MessageService,\n private assigneeService: AssigneeService,\n private cd: ChangeDetectorRef,\n private loaderService: LoaderService,\n ) {}\n\n ngOnInit(): void {\n this.titleService.setTitle('ProduceIT - Requests');\n\n /**\n * Fullscreen\n */\n document.getElementsByTagName('body')[0].style.overflow = 'hidden';\n\n this.buildForm();\n /**\n * Filter data syncronizer\n */\n this.scheduleRouterNavigate.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {\n this.router.navigate([], {queryParams: this.serializeFilterParams()});\n });\n\n /**\n * Query params restore subscription\n */\n this.route.queryParams.pipe(\n takeUntil(this.ngUnsubscribe)).subscribe((params: FilterQueryParams) => {\n if (isEmpty(params)) {\n const objectFromStorage = JSON.parse(window.localStorage.getItem('REQUEST_LIST_FILTERS')) || {};\n this.requestListFilter = objectFromStorage[this.defaultListFilter.mode];\n } else {\n this.requestListFilter = this.restoreFilterParams(params);\n }\n });\n\n /**\n * Creates data source stream for scroll viewport\n */\n this.requestListDataSource$ = this.scheduleUpdateData.pipe(\n startWith(this.defaultListFilter),\n pairwise(),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n switchMap(([, filterObj]) => {\n this.loadingSubject.next(true);\n return this.requestListService.fetchRequestList(filterObj, 1).pipe(\n map(data => {\n this.loadingSubject.next(false);\n return new RequestSearchItemDataSource(data.documents, data.totalDocuments, this.PAGE_SIZE, filterObj, this.requestListService);\n }),\n catchError(error => {\n this.loadingSubject.next(false);\n\n this.messageService.showSystemMessage('error', `Something went wrong...`);\n console.warn(error); // Some error handing window, please advice\n return of([]);\n })\n );\n }),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n refCount: false,\n bufferSize: 1,\n }),\n );\n }\n\n private compareDefaultFilterValues(path: string): string {\n const currentFilterValue = get(this.requestListFilter, path);\n const defaultFilterValue = get(this.defaultListFilter, path);\n\n const stringValue =\n typeof currentFilterValue === 'string'\n ? currentFilterValue\n : Array.isArray(currentFilterValue)\n ? currentFilterValue.join(',')\n : currentFilterValue;\n\n return isEqual(currentFilterValue, defaultFilterValue) ? null : stringValue;\n }\n\n private serializeFilterParams(): FilterQueryParams {\n const dateRanges = this.requestListFilter.dateRange;\n\n return {\n sort_by: this.compareDefaultFilterValues('sort.property') as SORT_FIELDS,\n sort_direction: this.compareDefaultFilterValues('sort.order') as SORT_ORDER_DIRECTIONS,\n mode: this.compareDefaultFilterValues('mode'),\n filter_stages: this.compareDefaultFilterValues('filter.stage'),\n filter_types: this.compareDefaultFilterValues('filter.type'),\n filter_assignees: this.compareDefaultFilterValues('filter.assignee'),\n filter_statuses: this.compareDefaultFilterValues('filter.status'),\n filter_submitters: this.compareDefaultFilterValues('filter.submitter'),\n search: this.compareDefaultFilterValues('search') || null,\n date_range: dateRanges ? [dateRanges.startDate, dateRanges.endDate].join('..') : null\n };\n }\n\n private restoreTopFilter(params: FilterQueryParams) {\n const dateRange = params.date_range\n ? ((rangeString: string) => {\n const ranges = rangeString.split('..');\n if (!ranges.length) {\n return null;\n }\n return {\n startDate: moment(ranges[0], this.DATE_SERIALIZE_PATTERN).set('h', 0).set('m', 0).set('s', 0).set('ms', 0),\n endDate: moment(ranges[1], this.DATE_SERIALIZE_PATTERN).set('h', 23).set('m', 59).set('s', 59).set('ms', 999)\n };\n })(params.date_range)\n : null;\n\n const search = params.search || null;\n const mode = params.mode || this.defaultListFilter.mode;\n\n return {\n dateRange,\n search,\n mode\n };\n }\n\n private restoreFilterParams(params: FilterQueryParams): ListFilter {\n const {dateRange, search, mode} = this.restoreTopFilter(params);\n\n this.form.setValue(\n {\n search,\n dateRange,\n mode\n },\n {\n emitEvent: true\n }\n );\n\n return {\n mode: (params.mode ? params.mode : this.defaultListFilter.mode) as ListFilterModes,\n sort: {\n property: params.sort_by ? params.sort_by : this.defaultListFilter.sort.property,\n order: params.sort_direction ? params.sort_direction : this.defaultListFilter.sort.order\n },\n filter: {\n stage: params.filter_stages?.split(',') || [],\n type: params.filter_types?.split(',') || [],\n assignee: params.filter_assignees?.split(',') || [],\n status: params.filter_statuses?.split(',') || [],\n submitter: params.filter_submitters?.split(',') || [],\n },\n search,\n dateRange: dateRange\n ? {\n startDate: dateRange.startDate.format(this.DATE_SERIALIZE_PATTERN),\n endDate: dateRange.endDate.format(this.DATE_SERIALIZE_PATTERN)\n }\n : null\n };\n }\n\n private checkFromContainerWidth() {\n const formContainer: HTMLElement = this.formContainer.nativeElement;\n const scrollContentWrapper: HTMLElement = this.viewportElement.nativeElement.querySelector('.cdk-virtual-scroll-content-wrapper');\n\n if (formContainer.offsetWidth !== scrollContentWrapper?.offsetWidth) {\n formContainer.style.width = scrollContentWrapper.offsetWidth + 'px';\n this.cd.markForCheck();\n }\n }\n\n ngAfterContentChecked() {\n this.checkFromContainerWidth();\n this.resizeObserver$.observe(this.viewportElement.nativeElement);\n }\n\n public filterRequests(selector: ListFilterModes): void {\n if (selector !== this.form.get('mode').value) {\n this.form.get('mode').setValue(selector);\n this.requestListFilter = {...this.defaultListFilter, mode: selector};\n }\n }\n\n public clearAllFiltersForMode(mode: ListFilterModes): void {\n this.form.get('search').reset();\n this.form.get('dateRange').reset();\n this.requestListFilter = {...this.defaultListFilter, mode};\n }\n\n public isFilterOfModeClear(): boolean {\n return isEqual(\n omit(this.requestListFilter, ['mode']),\n omit(this.defaultListFilter, ['mode'])\n );\n }\n\n public openRequest(event: Event, id: number): void {\n this.router.navigate([`/${PAGES_CONFIG.REQUESTS}`, id]);\n }\n\n public createNewRequest(): void {\n this.requestService.createRequest()\n .pipe(\n switchMap(requestTypes => this.modalService.openNewRequestModal(requestTypes)),\n switchMap(({ name, type, redirect }) => {\n if (!redirect) {\n return this.requestService.postCreateNewRequest(name, type);\n }\n return EMPTY;\n }),\n )\n .subscribe(({ id }) => {\n if(id) {\n this.router.navigate([`/${PAGES_CONFIG.REQUESTS}`, id]);\n }\n });\n }\n\n private buildForm(): void {\n this.requestListFilter = this.defaultStoredFilter;\n this.form = this.fb.group({\n search: [this.requestListFilter.search, [Validators.minLength(this.MIN_LENGTH)]],\n dateRange: [this.requestListFilter.dateRange],\n mode: [this.requestListFilter.mode]\n });\n\n /**\n * Data restored initially from query params\n */\n const initialFilterData$ = merge(\n this.route.queryParams.pipe(\n take(1),\n map(params => this.restoreTopFilter(params as FilterQueryParams)),\n takeUntil(this.ngUnsubscribe),\n shareReplay({\n refCount: false,\n bufferSize: 1,\n }),\n )\n );\n\n /**\n * Update filter state by top form data\n */\n combineLatest([\n // tslint:disable-next-line:deprecation\n merge(initialFilterData$.pipe(pluck('search')), this.form.get('search').valueChanges.pipe(debounceTime(300))),\n // tslint:disable-next-line:deprecation\n merge(initialFilterData$.pipe(pluck('dateRange')), this.form.get('dateRange').valueChanges),\n ])\n .pipe(\n skip(1),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n takeUntil(this.ngUnsubscribe)\n )\n .subscribe(([search, dateRange]) => {\n if (this.form.valid) {\n this.requestListFilter = {\n sort: this.requestListFilter.sort,\n filter: this.requestListFilter.filter,\n mode: this.requestListFilter.mode,\n search: search || null,\n dateRange: dateRange\n ? {\n startDate: dateRange.startDate.format(this.DATE_SERIALIZE_PATTERN),\n endDate: dateRange.endDate.format(this.DATE_SERIALIZE_PATTERN)\n }\n : null\n };\n }\n });\n }\n\n public getErrorMessage(): string {\n if (this.form.invalid) {\n if (this.form.get('search').hasError('minlength')) {\n return `Minimum length is ${this.MIN_LENGTH}`;\n }\n\n return 'Invalid value';\n }\n return null;\n\n }\n\n ngOnDestroy() {\n /**\n * Reset fullscreen\n */\n document.getElementsByTagName('body')[0].style.overflow = 'auto';\n\n this.resizeObserver$.disconnect();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n\n markForCheck() {\n this.cd.markForCheck();\n }\n async duplicateRequest(requestId) {\n this.loaderService.showLoader();\n try {\n const duplicatedRequest = await this.requestService.duplicateRequest(requestId).pipe(takeUntil(this.ngUnsubscribe)).toPromise();\n this.router.navigate([`/${PAGES_CONFIG.REQUESTS}`, duplicatedRequest.id]);\n } catch (e) {\n console.error(e);\n } finally {\n this.loaderService.hideLoader();\n }\n }\n}\n","
\n
\n
\n
\n
\n {{'module.requests.label.to-do' | translate}}\n \n
\n\n
\n \n \n {{'module.requests.label.' + activeTab + '-requests' | translate}}\n \n \n \n \n \n \n \n
\n\n
\n {{'module.requests.label.drafts' | translate}}
\n
\n\n
\n
\n \n \n \n \n\n \n\n \n
\n\n \n \n
\n
\n\n \n \n
\n \n\n \n
\n \n

{{'common.label.not-found' | translate}}

\n
\n
\n\n
\n
\n
\n \n {{'common.statuses.loading' | translate}}\n
\n
\n \n
\n\n
\n
\n \n {{'common.statuses.loading' | translate}}\n
\n
\n
\n
\n
\n","import {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {MsalGuard} from '@azure/msal-angular';\n\nimport {AuthGuard} from '../shared/guards/auth.guard';\nimport {RequestDetailsComponent} from './components/request-details/request-details.component';\nimport {RequestsListComponent} from './components/requests-list/requests-list.component';\nimport {ROUTER_CONFIG} from './constants/pages.constants';\n\nconst REQUESTS_ROUTES: Routes = [\n {\n path: ROUTER_CONFIG.DETAILS,\n component: RequestDetailsComponent,\n canActivate: [MsalGuard, AuthGuard]\n },\n {\n path: ROUTER_CONFIG.INDEX,\n component: RequestsListComponent,\n canActivate: [MsalGuard, AuthGuard]\n }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(REQUESTS_ROUTES)],\n exports: [RouterModule]\n})\nexport class RequestsRoutingModule {}\n","export const ROUTER_CONFIG = {\n INDEX: '',\n DETAILS: ':id',\n};\n","import {Injectable, Optional} from '@angular/core';\nimport {Actions, createEffect, ofType} from '@ngrx/effects';\nimport {of, merge} from 'rxjs';\nimport {catchError, concatMap, exhaustMap, map, withLatestFrom} from 'rxjs/operators';\n\nimport {API} from 'src/app/shared/constants/api.constants';\nimport {RequestModel, TrafficManagerAwareRequestModel} from '../../models/request.model';\nimport {requestDetailsActions} from './request-details.actions';\nimport {ErrorHandlingHttpClient} from '../../../shared/services/error-handling-http-client.service';\nimport {UserModel} from '../../../shared/models/user.model';\nimport {PAGES_CONFIG} from '../../../shared/constants/pages.constants';\nimport {Router} from '@angular/router';\nimport { selectRequestDetailsCombined, selectRequestDetailsParts} from './request-details.selectors';\nimport {Store} from '@ngrx/store';\nimport {RequestsService} from '../../services/requests.service';\nimport {loadRequestSteps} from '../request-steps/request-steps.actions';\nimport {Events, EventService} from 'src/app/shared/services/event-service.service';\nimport {ASSIGNED_TM_FIELD_NAME} from '../../components/request-types/image/image-host/image-host.component';\nimport {combineWithParts} from './request-details.reducer';\nimport { PopDesignRequestModel } from '../../models/pop-design-request.model';\nimport { CardDesignRequestModel } from '../../models/card-design-request.model';\n\n@Injectable()\nexport class RequestDetailsEffects {\n constructor(\n private store: Store,\n private actions$: Actions,\n private router: Router,\n private requestsService: RequestsService,\n private errorHandlingHttp: ErrorHandlingHttpClient,\n @Optional() private eventService: EventService\n ) {}\n\n loadRequestDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.loadRequestDetails),\n exhaustMap(({requestId}) =>\n this.errorHandlingHttp.get(`${API.getRequestId(requestId)}`).pipe(\n map((data: RequestModel) => requestDetailsActions.loadRequestDetailsSuccess({data})),\n catchError(error => {\n if (error?.status === 404) {\n this.router.navigate([PAGES_CONFIG.ERROR]);\n }\n return of(requestDetailsActions.loadRequestDetailsFailure({error}));\n })\n )\n )\n )\n );\n\n updateRequestDetails$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.updateRequestDetails),\n withLatestFrom(this.store.select(selectRequestDetailsParts)),\n exhaustMap(([{requestId, details, draft = undefined, excludeParts, pendingUpdateRequestPointer}, parts]) => {\n if (!excludeParts) {\n const partsToInclude = {\n // additionalOtherContacts\n ...(!excludeParts || excludeParts?.includes('contacts') ? {} : {additionalOtherContacts: parts.additionalOtherContacts})\n };\n details = combineWithParts(details, partsToInclude);\n }\n return this.requestsService.updateRequestDetails(requestId, details, draft).pipe(\n map((data: RequestModel) => requestDetailsActions.updateRequestDetailsSuccess({data, pendingUpdateRequestPointer})),\n catchError(error => of(requestDetailsActions.updateRequestDetailsFailure({error, pendingUpdateRequestPointer})))\n );\n })\n )\n );\n\n updatePpm$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.updatePpm),\n exhaustMap(({request, user}) =>\n this.errorHandlingHttp\n .put(API.updatePpm(request.id), user)\n .pipe(\n concatMap(userUpdated =>\n this.errorHandlingHttp\n .get(`${API.getRequestId(request.id)}`)\n .pipe(map(requestUpdated => [userUpdated, requestUpdated] as const))\n )\n )\n .pipe(\n map(([userUpdated, requestUpdated]) => {\n const updatedRequest = {...requestUpdated};\n updatedRequest.details = {...updatedRequest.details, printProductionManager: userUpdated};\n\n return requestDetailsActions.updatePpmSuccess({data: updatedRequest});\n }),\n catchError(error => of(requestDetailsActions.updatePpmFailure({error})))\n )\n )\n )\n );\n\n changeRequestOwner$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.changeRequestOwner),\n exhaustMap(({request, user}) =>\n this.errorHandlingHttp.put(API.changeRequestOwner(request.id), user).pipe(\n map(() => {\n const updatedRequest = {...request, creator: user};\n\n return requestDetailsActions.changeRequestOwnerSuccess({data: updatedRequest});\n }),\n catchError(error => of(requestDetailsActions.changeRequestOwnerFailure({error})))\n )\n )\n )\n );\n\n refreshProductOwner$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.refreshProductOwner),\n exhaustMap(({request}) =>\n this.errorHandlingHttp.post(API.refreshProductOwner(request.id), {}).pipe(\n map(() => requestDetailsActions.refreshProductOwnerSuccess()),\n catchError(error => of(requestDetailsActions.refreshProductOwnerFailure({error})))\n )\n )\n )\n );\n\n updateRequestStatus$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.updateRequestStatus),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(([{status, comment}, request]) =>\n this.errorHandlingHttp.put(API.updateRequestStatus(request.id), {value: status, comment}).pipe(\n map(() => {\n const data = {...request, status};\n return requestDetailsActions.updateRequestStatusSuccess({data});\n }),\n catchError(error => of(requestDetailsActions.updateRequestStatusFailure({error})))\n )\n )\n )\n );\n\n updateRequestName$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.updateRequestName),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(([{requestId, name}, request]) =>\n this.errorHandlingHttp.put(API.updateRequestName(requestId), {value: name}).pipe(\n map(() => {\n const updatedRequest = {...request, name};\n return requestDetailsActions.updateRequestDetailsSuccess({data: updatedRequest});\n }),\n catchError(error => of(requestDetailsActions.updateRequestDetailsFailure({error})))\n )\n )\n )\n );\n\n changeRequestTrafficManager$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.changeRequestTrafficManager),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(([{trafficManager: user, skipLoading}, request]) =>\n this.errorHandlingHttp.put(API.changeRequestTrafficManager(request.id), user).pipe(\n exhaustMap(response => {\n const updatedRequest = {\n ...request,\n details: {\n ...request.details,\n [ASSIGNED_TM_FIELD_NAME]: response.details.trafficManager\n }\n };\n\n // call actions history refresh\n this.eventService?.emit({eventName: Events.UpdateActionHistory});\n const actions = merge([\n requestDetailsActions.changeRequestTrafficManagerSuccess({data: updatedRequest as RequestModel, skipLoading}),\n loadRequestSteps({requestId: response.id as unknown as string})\n ]);\n return actions;\n }),\n catchError(error => of(requestDetailsActions.changeRequestTrafficManagerFailure({error, skipLoading})))\n )\n )\n )\n );\n\n addAdditionalOtherContacts$ = createEffect(() =>\n this.actions$.pipe(\n ofType(requestDetailsActions.addAdditionalOtherContacts),\n exhaustMap(({request, additionalOtherContacts, skipLoading}) =>\n this.errorHandlingHttp.put(`${API.editAdditionalOtherContacts(request.id)}`, additionalOtherContacts).pipe(\n exhaustMap(() =>\n of(\n requestDetailsActions.addAdditionalOtherContactsSuccess({\n additionalOtherContacts: additionalOtherContacts as UserModel[],\n skipLoading\n })\n )\n ),\n catchError(error => of(requestDetailsActions.addAdditionalOtherContactsFailure({error, skipLoading})))\n )\n )\n )\n );\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { of } from 'rxjs';\nimport { catchError, concatMap, map, switchMap, withLatestFrom } from 'rxjs/operators';\nimport { RequestStageActions } from 'src/app/shared/services/request-stages.enum';\n\nimport { API } from '../../../shared/constants/api.constants';\nimport { ErrorHandlingHttpClient } from '../../../shared/services/error-handling-http-client.service';\nimport { Events, EventService } from '../../../shared/services/event-service.service';\nimport { UserService } from '../../../shared/services/user.service';\nimport { RequestStage } from '../../models/request-stage.model';\nimport { requestDetailsActions } from '../request-details/request-details.actions';\nimport {\n activateStage,\n activateStageFailure,\n activateStageSuccess,\n cancelStage,\n cancelStageFailure,\n cancelStageSuccess,\n goToStage,\n loadRequestSteps,\n loadRequestStepsFailure,\n loadRequestStepsSuccess,\n selectStage,\n} from './request-steps.actions';\nimport { selectRequestSteps } from './request-steps.selectors';\n\n@Injectable()\nexport class RequestStepsEffects {\n loadRequestSteps$ = createEffect(() => this.actions$.pipe(\n ofType(loadRequestSteps),\n concatMap(({requestId}) => this.errorHandlingHttp.get>(API.getRequestSteps(requestId)).pipe(\n map(data => loadRequestStepsSuccess({data})),\n catchError(error => of(loadRequestStepsFailure({error})))\n )\n )\n ));\n\n activateStage$ = createEffect(() => this.actions$.pipe(\n ofType(activateStage),\n concatMap(({stage, requestId, comment}) => this.errorHandlingHttp\n .post(\n API.performAction(requestId),\n {\n actionType: RequestStageActions.Activate,\n stageCode: stage.code,\n comment: comment ?? null\n },\n {\n headers: {\n username: this.userService.getCurrentUserName()\n },\n observe: 'response'\n }\n )\n .pipe(\n catchError(e => of(e)),\n switchMap(data => {\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n return of(\n activateStageSuccess({data}),\n requestDetailsActions.loadRequestDetails({requestId}),\n loadRequestSteps({requestId}),\n );\n }),\n catchError(error => of(activateStageFailure({error})))\n ))\n ));\n\n cancelStage$ = createEffect(() => this.actions$.pipe(\n ofType(cancelStage),\n concatMap(({stage, requestId}) => this.errorHandlingHttp\n .post(\n API.performAction(requestId),\n {\n actionType: RequestStageActions.Cancel,\n stageCode: stage.code,\n comment: null\n },\n {\n headers: {\n username: this.userService.getCurrentUserName()\n },\n observe: 'response'\n }\n )\n .pipe(\n catchError(e => of(e)),\n switchMap(data => {\n this.eventService.emit({eventName: Events.UpdateActionHistory});\n return of(\n cancelStageSuccess({data}),\n requestDetailsActions.loadRequestDetails({requestId}),\n loadRequestSteps({requestId}),\n );\n }),\n catchError(error => of(cancelStageFailure({error})))\n ))\n ));\n\n goToStage$ = createEffect(() => this.actions$.pipe(\n ofType(goToStage),\n withLatestFrom(this.store.select(selectRequestSteps)),\n map(([{stageCode}, steps]) => selectStage({\n stage: steps.find(step => step.code === stageCode)\n }))\n ));\n\n constructor(\n private actions$: Actions,\n private userService: UserService,\n private eventService: EventService,\n private store: Store,\n private errorHandlingHttp: ErrorHandlingHttpClient\n ) {}\n}\n","import {Injectable} from '@angular/core';\nimport {Actions, createEffect, ofType} from '@ngrx/effects';\nimport {of} from 'rxjs';\nimport {catchError, exhaustMap, map, withLatestFrom} from 'rxjs/operators';\n\nimport {popDesignActions} from './pop-design.actions';\nimport {requestDetailsActions} from './request-details.actions';\nimport {PopDesignService} from '../../services/pop-design.service';\nimport { selectRequestDetailsCombined} from './request-details.selectors';\nimport {Store} from '@ngrx/store';\nimport {PopDesignRequestModel} from '../../models/pop-design-request.model';\n\n@Injectable()\nexport class PopDesignEffects {\n constructor(private actions$: Actions, private popDesignService: PopDesignService, private store: Store) {}\n\n popDesignTmReview2Stage$ = createEffect(() =>\n this.actions$.pipe(\n ofType(popDesignActions.updateTmReview2Stage),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(([{cdReviewRequired, quantityOfFiles}, request]) =>\n this.popDesignService.updateTmReview2Stage(request.id, cdReviewRequired, quantityOfFiles).pipe(\n map(() =>\n requestDetailsActions.updateRequestDetailsSuccess({\n data: {\n ...request,\n details: {\n ...request.details,\n cdReviewRequired,\n quantityOfFiles\n }\n }\n })\n ),\n catchError(error => of(requestDetailsActions.cdReviewRequiredFailure({error})))\n )\n )\n )\n );\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport {catchError, exhaustMap, map, withLatestFrom} from 'rxjs/operators';\n\nimport { CardDesignService } from '../../services/card-design.service';\nimport { cardDesignActions } from './card-design.actions';\nimport { requestDetailsActions } from './request-details.actions';\nimport { selectRequestDetailsCombined} from './request-details.selectors';\nimport {Store} from '@ngrx/store';\nimport { CardDesignRequestModel } from '../../models/card-design-request.model';\n\n@Injectable()\nexport class CardDesignEffects {\n\n constructor(\n private actions$: Actions,\n private cardDesignService: CardDesignService,\n private store: Store\n ) {}\n\n cardDesignTmReview2Stage$ = createEffect(() => this.actions$.pipe(\n ofType(cardDesignActions.updateTmReview2Stage),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(([{ cdReviewRequired, quantityOfFiles }, request]) =>\n this.cardDesignService.updateTmReview2Stage(request.id, cdReviewRequired, quantityOfFiles)\n .pipe(\n map(() => requestDetailsActions.updateRequestDetailsSuccess({\n data: {\n ...request,\n details: {\n ...request.details,\n cdReviewRequired,\n quantityOfFiles,\n }\n }\n })),\n catchError((error) => of(requestDetailsActions.cdReviewRequiredFailure({error}))),\n ),\n ),\n ));\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActionCreator, Store } from '@ngrx/store';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { catchError, exhaustMap, map, withLatestFrom, concatMap, debounceTime, mapTo } from 'rxjs/operators';\nimport { of, combineLatest } from 'rxjs';\nimport { selectRequestDetailsCombined, selectThirdPartyItemOperationsDetailUpdates, selectThirdPartyPendingOperationNotes, selectThirdPartyRequestDetails } from './request-details.selectors';\nimport { requestDetailsActions } from './request-details.actions';\nimport { PendingItemOperationUpdate, thirdPartyActions } from './third-party.actions';\nimport { ThirdPartyProductionService } from '../../services/third-party-production.service';\nimport { ThirdPartyRequestModel } from '../../models/third-party-request.model';\n\nexport declare type ActionProps = A extends ActionCreator ? ReturnType & {\n type: T;\n} : never;\n@Injectable()\nexport class ThirdPartyEffects {\n\n constructor(\n private store: Store,\n private actions$: Actions,\n private thirdPartyProductionService: ThirdPartyProductionService,\n ) {\n }\n\n thirdPartyUpdateCardCollateralDetails$ = createEffect(() => this.actions$.pipe(\n ofType(thirdPartyActions.updateCardCollateralDetails),\n withLatestFrom(this.store.select(selectThirdPartyRequestDetails)),\n exhaustMap(([{ requestId, itemId, details }, request]) =>\n this.thirdPartyProductionService.updateCardCollateralDetails(requestId, itemId, details)\n .pipe(\n map(() => requestDetailsActions.loadRequestDetails({requestId})),\n catchError(error => of(requestDetailsActions.updateRequestDetailsFailure({ error }))),\n ),\n ),\n ));\n\n thirdPartyUpdateConfirmedPrinters$ = createEffect(() => this.actions$.pipe(\n ofType(thirdPartyActions.updateConfirmedPrinters),\n exhaustMap(({ requestId, items }) => this.thirdPartyProductionService.updateConfirmPrinters(requestId, items).pipe(\n map(() => {\n const data = { requestId, items };\n return thirdPartyActions.updateConfirmedPrintersSuccess({ data });\n }),\n catchError(error => of(requestDetailsActions.updateRequestStatusFailure({ error })))\n )\n )\n ));\n\n\n thirdPartyUpdateItemOperationsDetails$ = createEffect(\n () => this.actions$.pipe(\n ofType(thirdPartyActions.updateItemOperationsDetails, thirdPartyActions.updateOperationsNotes),\n debounceTime(2000),\n withLatestFrom(\n this.store.select(selectThirdPartyItemOperationsDetailUpdates),\n this.store.select(selectThirdPartyPendingOperationNotes)\n ),\n concatMap(\n ([, batchedUpdates, pendingOperationNotes]) => {\n const requestItemUpdates: PendingItemOperationUpdate[] = Object.values(batchedUpdates.reduce((acc, update) => ({\n ...acc, [`${update.requestId}-${update.itemId}`]: update\n }), {}));\n\n return of(thirdPartyActions.batchUpdateItemOperationsDetails({ items: requestItemUpdates , operationNotes: pendingOperationNotes}));\n }\n )\n ));\n\n thirdPartyUpdateItemOperationsDetailsBatch$ = createEffect(() =>\n this.actions$.pipe(\n ofType(thirdPartyActions.batchUpdateItemOperationsDetails),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n concatMap(([{items: batchedItems, operationNotes: batchedOperationNotes}, request]:\n [ActionProps, ThirdPartyRequestModel]) => combineLatest([\n // aggregating pending operation notes\n batchedOperationNotes != null ?\n this.thirdPartyProductionService.updateOperationsNotes(request.id as unknown as string, batchedOperationNotes)\n .pipe(mapTo(batchedOperationNotes)) : of(null),\n\n // aggregating pending items changes\n ...batchedItems.map(({requestId, itemId, operationsDetails}) =>\n this.thirdPartyProductionService\n .updateItemOperationsDetails(requestId, itemId, operationsDetails)\n .pipe(map(() => ({requestId, itemId, operationsDetails})))\n ),\n ]).pipe(\n map(([operationNotes, ...operationDetailUpdateResults]) => {\n let result = {...request};\n if (operationNotes != null) {\n result = {...result, details: { ...request.details, operationsNotes: operationNotes }};\n }\n const items = request.items.map(item => {\n for(const {itemId, operationsDetails} of operationDetailUpdateResults) {\n if (item.id === itemId) {\n const newItem = {\n ...item,\n operationsDetails: {...item.operationsDetails, ...operationsDetails.operationsDetails}\n };\n\n if (operationsDetails.childCards.length) {\n newItem.childCards = newItem.childCards.map((card, idx) => ({\n ...card,\n operationsDetails: {...operationsDetails.childCards[idx].operationsDetails}\n }));\n }\n\n return newItem;\n }\n }\n return item;\n });\n\n return requestDetailsActions.updateRequestDetailsSuccess({data: {...result, items}});\n }),\n catchError(error => of(requestDetailsActions.updateRequestDetailsFailure({error})))\n ))\n )\n );\n}\n\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport { of } from 'rxjs';\nimport { catchError, exhaustMap, map, withLatestFrom } from 'rxjs/operators';\n\nimport { imageActions } from './image.actions';\nimport { requestDetailsActions } from './request-details.actions';\nimport { Store } from '@ngrx/store';\nimport {ImageRequestService} from '../../services/image-request.service';\nimport { selectRequestDetailsCombined } from './request-details.selectors';\nimport { ImageRequestModel } from '../../models/image-request.model';\n\n@Injectable()\nexport class ImageEffects {\n\n constructor(\n private actions$: Actions,\n private imageRequestService: ImageRequestService,\n private store: Store\n ) {}\n\n imageUpdateDesigner$ = createEffect(() => this.actions$.pipe(\n ofType(imageActions.updateDesignerChoice),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(([{designer}, request]) => (designer ?\n this.imageRequestService.updateDesigner(request.id, designer) :\n this.imageRequestService.deleteDesigner(request.id))\n .pipe(\n map(() => requestDetailsActions.updateRequestDetailsSuccess({\n data: {\n ...request,\n details: {\n ...request.details,\n designer\n }\n }\n })),\n catchError((error) => of(requestDetailsActions.updateRequestDetailsDesignerChoiceFailure({error})))\n )),\n ));\n}\n","import {Injectable} from '@angular/core';\nimport {Store} from '@ngrx/store';\nimport {Actions, createEffect, ofType} from '@ngrx/effects';\nimport {catchError, exhaustMap, map, withLatestFrom} from 'rxjs/operators';\nimport {of} from 'rxjs';\nimport { selectRequestDetailsCombined} from './request-details.selectors';\nimport {requestDetailsActions} from './request-details.actions';\nimport {cardProdActions} from './card-prod.actions';\nimport {API} from 'src/app/shared/constants/api.constants';\nimport {ErrorHandlingHttpClient} from 'src/app/shared/services/error-handling-http-client.service';\nimport { ProductionRequestModel } from '../../models/production-request.model';\n\n@Injectable()\nexport class CardProdEffects {\n\n constructor(\n private store: Store,\n private actions$: Actions,\n private errorHandlingHttp: ErrorHandlingHttpClient,\n ) {\n }\n\n cardProdUpdateOperationsNotes$ = createEffect(\n () => this.actions$.pipe(\n ofType(cardProdActions.updateOperationsNotes),\n withLatestFrom(this.store.select(selectRequestDetailsCombined)),\n exhaustMap(\n ([{requestId, operationsNotes}, request]) => this.errorHandlingHttp.put(API.cardProductionUpdateOperationsNotes(requestId), {value: operationsNotes})\n .pipe(\n map(() => {\n const updatedRequest = {...request, details: { ...request.details, operationsNotes}};\n return requestDetailsActions.updateRequestDetailsSuccess({data: updatedRequest as ProductionRequestModel});\n }),\n catchError(error => of(requestDetailsActions.updateRequestDetailsFailure({error}))),\n )\n ),\n )\n );\n\n}\n\n","import { NgModule } from '@angular/core';\nimport {CommonModule} from '@angular/common';\n\nimport {SharedModule} from '../shared/shared.module';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {CdkStepperModule} from '@angular/cdk/stepper';\n\nimport {RequestsListComponent} from './components/requests-list/requests-list.component';\nimport {ScrollingModule} from '@angular/cdk/scrolling';\nimport {OverlayModule} from '@angular/cdk/overlay';\nimport { RequestItemComponent } from './components/request-item/request-item.component';\nimport { FilterMenuComponent } from './components/filter-menu/filter-menu.component';\nimport { NewRequestComponent } from './components/new-request/new-request.component';\nimport { RequestDetailsComponent } from './components/request-details/request-details.component';\nimport { RequestsRoutingModule } from './requests-routing.module';\nimport { RequestNameFormComponent } from './components/request-name-form/request-name-form.component';\nimport { CustomStepperComponent } from './components/custom-stepper/custom-stepper.component';\nimport { RequestActionsComponent } from './components/request-actions/request-actions.component';\nimport { RequestActionNoteComponent } from './components/request-action-note/request-action-note.component';\nimport { RequestActionReasonComponent } from './components/request-action-reason/request-action-reason.component';\nimport { ProductionDetailsComponent } from './components/request-types/card-production/production-details/production-details.component';\nimport { FinanceApprovalComponent } from './components/request-types/card-production/finance-approval/finance-approval.component';\nimport { ApproveRequestComponent } from './components/request-types/card-production/approve-request/approve-request.component';\nimport { PoSowComponent } from './components/request-types/card-production/po-sow/po-sow.component';\nimport { CommitteeApprovalComponent } from './components/request-types/card-production/committee-approval/committee-approval.component';\nimport { AtPrinterComponent } from './components/request-types/card-production/at-printer/at-printer.component';\nimport { RequestStepDetailsComponent } from './components/request-step-details/request-step-details.component';\nimport { RequestItemFormComponent } from './components/request-types/card-production/production-details/request-item-form/request-item-form.component';\nimport { MerchantDetailsComponent } from './components/request-types/card-production/production-details/merchant-details/merchant-details.component';\nimport { MerchantFormComponent } from './components/request-types/card-production/production-details/merchant-form/merchant-form.component';\nimport { StakeholderDetailsComponent } from './components/request-types/card-production/production-details/stakeholder-details/stakeholder-details.component';\nimport { FormFactorFormComponent } from './components/request-types/card-production/production-details/form-factor-form/form-factor-form.component';\nimport { ProductionQuntityFormComponent } from './components/request-types/card-production/production-details/production-quntity-form/production-quntity-form.component';\nimport { PoFormComponent } from './components/request-types/card-production/po-sow/po-form/po-form.component';\nimport { SowFormInfoComponent } from './components/request-types/card-production/po-sow/sow-form-info/sow-form-info-component';\nimport { SowFormComponent } from './components/request-types/card-production/po-sow/sow-form/sow-form.component';\nimport { ItemInformationComponent } from './components/request-types/card-production/po-sow/item-information/item-information.component';\nimport { ItemShipmentComponent } from './components/request-types/card-production/po-sow/item-shipment/item-shipment.component';\nimport {TranslatePipe} from '@ngx-translate/core';\nimport { RequestActionButtonFilterPipe } from './components/request-actions/request-action-button-filter.pipe';\nimport { StatusLabelComponent } from './components/status-label/status-label.component';\nimport { ItemsInformationComponent } from './components/request-types/card-production/po-sow/items-information/items-information.component';\nimport { RequestItemFieldsPanelComponent } from './components/request-types/card-production/request-item-fields-panel/request-item-fields-panel.component';\nimport { MiscellaneousItemComponent } from './components/request-types/common/miscellaneous-item/miscellaneous-item.component';\nimport { ShipmentsAddressComponent } from './components/shipments-address/shipments-address.component';\nimport { PrinterMilestoneComponent } from './components/request-types/card-production/at-printer/printer-milestone/printer-milestone.component';\nimport { CardProductionBulkChangeComponent } from './components/request-types/card-production/at-printer/cp-bulk-change/cp-bulk-change.component';\nimport { RequestCommentsTabComponent } from './components/request-comments-tab/request-comments-tab.component';\nimport { StoreModule } from '@ngrx/store';\nimport { EffectsModule } from '@ngrx/effects';\nimport { RequestDetailsEffects } from './reducers/request-details/request-details.effects';\nimport { ConfirmCloseModalComponent } from './components/request-types/card-production/po-sow/confirm-close-modal/confirm-close-modal.component';\nimport { RequestStepsEffects } from './reducers/request-steps/request-steps.effects';\nimport { RequestStageMenuComponent } from './components/request-stage-menu/request-stage-menu.component';\nimport { DesignDetailsComponent } from './components/request-types/card-design/design-details/design-details.component';\nimport { TmReviewComponent } from './components/request-types/card-design/tm-review/tm-review.component';\nimport { DesignProcessComponent } from './components/request-types/card-design/design-process/design-process.component';\nimport { ArtworkItemHeaderComponent } from './components/request-types/card-design/design-process/artwork-item-header/artwork-item-header.component';\nimport { CdItemComponent } from './components/request-types/card-design/design-details/cd-item/cd-item.component';\nimport { ClientProofComponent } from './components/request-types/card-design/client-proof/client-proof.component';\nimport { CreativeReviewComponent } from './components/request-types/card-design/creative-review/creative-review.component';\nimport { TmReview2Component } from './components/request-types/card-design/tm-review2/tm-review2.component';\nimport { ArtworkDetailsComponent } from './components/request-types/card-design/common/artwork-details/artwork-details.component';\nimport { PopDetailsComponent } from './components/request-types/pop-design/pop-details/pop-details.component';\nimport { PopDesignProcessComponent } from './components/request-types/pop-design/pop-design-process/pop-design-process.component';\nimport { PopFinancialReview2Component } from './components/request-types/pop-design/pop-financial-review2/pop-financial-review2.component';\nimport { PopFinancialReviewComponent } from './components/request-types/pop-design/pop-financial-review/pop-financial-review.component';\nimport { PopClientProofComponent } from './components/request-types/pop-design/pop-client-proof/pop-client-proof.component';\nimport { PopTmReviewComponent } from './components/request-types/pop-design/pop-tm-review/pop-tm-review.component';\nimport { PopTmReview2Component } from './components/request-types/pop-design/pop-tm-review2/pop-tm-review2.component';\nimport { PopArtworkDetailsComponent } from './components/request-types/pop-design/common/pop-artwork-details/pop-artwork-details.component';\nimport { PopRequestItemComponent } from './components/request-types/pop-design/common/pop-request-item/pop-request-item.component';\nimport { PopItemComponent } from './components/request-types/pop-design/pop-details/pop-item/pop-item.component';\nimport { PopRequestItemInfoHeaderComponent } from './components/request-types/pop-design/common/pop-request-item-info-header/pop-request-item-info-header.component';\nimport { PopRequestItemInfoBodyComponent } from './components/request-types/pop-design/common/pop-request-item-info-body/pop-request-item-info-body.component';\nimport { PopDesignEffects } from './reducers/request-details/pop-design.effects';\nimport { CardDesignEffects } from './reducers/request-details/card-design.effects';\nimport { PopProductionAssociationComponent } from './components/request-types/pop-design/common/pop-production-association/pop-production-association.component';\nimport { PopStakeholderDetailsComponent } from './components/request-types/pop-design/common/pop-stakeholder-details/pop-stakeholder-details.component';\nimport { PopDatesSectionComponent } from './components/request-types/pop-design/common/pop-dates-section/pop-dates-section.component';\nimport { PopRequestItemTypeHeaderComponent } from './components/request-types/pop-design/common/pop-request-item-type-header/pop-request-item-type-header.component';\nimport { PopRequestChannelComponent } from './components/request-types/pop-design/common/pop-request-channel/pop-request-channel.component';\nimport { PopProdDetailsComponent } from './components/request-types/pop-production/pop-prod-details/pop-prod-details.component';\nimport { PopProdProductionReviewComponent } from './components/request-types/pop-production/pop-prod-production-review/pop-prod-production-review.component';\nimport { PopProdPrinterQuoteComponent } from './components/request-types/pop-production/pop-prod-printer-quote/pop-prod-printer-quote.component';\nimport { PopProdRequesterReviewComponent } from './components/request-types/pop-production/pop-prod-requester-review/pop-prod-requester-review.component';\nimport { PopProdFinanceApprovalComponent } from './components/request-types/pop-production/pop-prod-finance-approval/pop-prod-finance-approval.component';\nimport { PopProdPoSowComponent } from './components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-sow.component';\nimport { PopProdVendorProofComponent } from './components/request-types/pop-production/pop-prod-vendor-proof/pop-prod-vendor-proof.component';\nimport { PopProdVendorProofIntComponent } from './components/request-types/pop-production/pop-prod-vendor-proof-int/pop-prod-vendor-proof-int.component';\nimport { PopProdPrintComponent } from './components/request-types/pop-production/pop-prod-print/pop-prod-print.component';\nimport { PopProdRequestDetailsBlockComponent } from './components/request-types/pop-production/common/pop-prod-request-details-block/pop-prod-request-details-block.component';\nimport { PopProdFinanceDetailsBlockComponent } from './components/request-types/pop-production/common/pop-prod-finance-details-block/pop-prod-finance-details-block.component';\nimport { PopProdMerchantDetailsBlockComponent } from './components/request-types/pop-production/common/pop-prod-merchant-details-block/pop-prod-merchant-details-block.component';\nimport { PopProdArtworkDetailsBlockComponent } from './components/request-types/pop-production/common/pop-prod-artwork-details-block/pop-prod-artwork-details-block.component';\nimport { PopProdItemComponent } from './components/request-types/pop-production/pop-prod-details/pop-prod-item/pop-prod-item.component';\nimport { PopProdItemCommonComponent } from './components/request-types/pop-production/common/pop-prod-item-common/pop-prod-item-common.component';\nimport { PopProdRequestItemSubheaderComponent } from './components/request-types/pop-production/common/pop-prod-request-item-subheader/pop-prod-request-item-subheader.component';\nimport { PopProdRequestItemHeaderComponent } from './components/request-types/pop-production/common/pop-prod-request-item-header/pop-prod-request-item-header.component';\nimport { ColorTypeSelectComponent } from './components/request-types/pop-design/common/color-type-select/color-type-select.component';\nimport { ItemTypeSelectComponent } from './components/request-types/pop-design/common/item-type-select/item-type-select.component';\nimport { PopProdItemCommonFormComponent } from './components/request-types/pop-production/common/pop-prod-item-common-form/pop-prod-item-common-form.component';\nimport { PopProdPoSowItemInfoComponent } from './components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-sow-item-info/pop-prod-po-sow-item-info.component';\nimport { PopProdSowFormComponent } from './components/request-types/pop-production/pop-prod-po-sow/pop-prod-sow-form/pop-prod-sow-form.component';\nimport { PopProdSowFormInfoComponent } from './components/request-types/pop-production/pop-prod-po-sow/pop-prod-sow-form-info/pop-prod-sow-form-info.component';\nimport { PopProdVersionListComponent } from './components/request-types/pop-production/common/pop-prod-version-list/pop-prod-version-list.component';\nimport { PopProdPoFormComponent } from './components/request-types/pop-production/pop-prod-po-sow/pop-prod-po-form/pop-prod-po-form.component';\nimport { ItemShipmentFormComponent } from './components/request-types/pop-production/pop-prod-po-sow/item-shipment-form/item-shipment-form.component';\nimport { PopProdPrinterMilestoneComponent } from './components/request-types/pop-production/pop-prod-print/pop-prod-printer-milestone/pop-prod-printer-milestone.component';\nimport { PopBulkChangeComponent } from './components/request-types/pop-production/pop-prod-print/pop-bulk-change/pop-bulk-change.component';\nimport { FsrDetailsComponent } from './components/request-types/financial-services/fsr-details/fsr-details.component';\nimport { FsrFinanceApprovalComponent } from './components/request-types/financial-services/fsr-finance-approval/fsr-finance-approval.component';\nimport { FsrPoComponent } from './components/request-types/financial-services/fsr-po/fsr-po.component';\nimport { FsrAtPrinterComponent } from './components/request-types/financial-services/fsr-at-printer/fsr-at-printer.component';\nimport { FsrApproveRequestComponent } from './components/request-types/financial-services/fsr-approve-request/fsr-approve-request.component';\nimport { FsrItemHeaderComponent } from './components/request-types/financial-services/common/fsr-item-header/fsr-item-header.component';\nimport { FsrItemSubheaderComponent } from './components/request-types/financial-services/common/fsr-item-subheader/fsr-item-subheader.component';\nimport { FsrRequestItemFormComponent } from './components/request-types/financial-services/fsr-details/fsr-request-item-form/fsr-request-item-form.component';\nimport { FsrPoFormComponent } from './components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form.component';\nimport { FsrPoFormItemComponent } from './components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form-item/fsr-po-form-item.component';\nimport { PoAccountingComponent } from './components/request-types/common/po-accounting/po-accounting.component';\nimport { PoSowAddComponent } from './components/request-types/common/po-sow-add/po-sow-add.component';\nimport { FsrPoItemComponent } from './components/request-types/financial-services/fsr-po/fsr-po-item/fsr-po-item.component';\nimport { MiscellaneousItemsSectionComponent } from './components/request-types/common/miscellaneous-items-section/miscellaneous-items-section.component';\nimport { FsrPoFormItemDetailsComponent } from './components/request-types/financial-services/fsr-po/fsr-po-form/fsr-po-form-item/fsr-po-form-item-details/fsr-po-form-item-details.component';\nimport { FsrBulkChangeComponent } from './components/request-types/financial-services/fsr-at-printer/fsr-bulk-change/fsr-bulk-change.component';\nimport { FsrPrinterMilestoneComponent } from './components/request-types/financial-services/fsr-at-printer/fsr-printer-milestone/fsr-printer-milestone.component';\nimport { RequestItemShipmentsComponent } from './components/request-types/common/request-item-shipments/request-item-shipments.component';\nimport { RequestItemShipmentComponent } from './components/request-types/common/request-item-shipments/request-item-shipment/request-item-shipment.component';\nimport { BlankStateComponent } from './components/request-types/common/blank-state/blank-state.component';\nimport { ReassignPpmFormComponent } from './components/request-details/reassign-ppm-form/reassign-ppm-form.component';\nimport { BifDetailsComponent } from './components/request-types/bif-production/bif-details/bif-details.component';\nimport { BifFinanceApprovalComponent } from './components/request-types/bif-production/bif-finance-approval/bif-finance-approval.component';\nimport { BifPoComponent } from './components/request-types/bif-production/bif-po/bif-po.component';\nimport { BifPrinterProofComponent } from './components/request-types/bif-production/bif-printer-proof/bif-printer-proof.component';\nimport { BifInternalPrinterProofComponent } from './components/request-types/bif-production/bif-internal-printer-proof/bif-internal-printer-proof.component';\nimport { BifPrintComponent } from './components/request-types/bif-production/bif-print/bif-print.component';\nimport {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {UsernameHeaderInterceptor} from '../shared/interceptors/username-header.interceptor';\nimport { BifItemHeaderComponent } from './components/request-types/bif-production/common/bif-item-header/bif-item-header.component';\nimport { BifItemSubheaderComponent } from './components/request-types/bif-production/common/bif-item-subheader/bif-item-subheader.component';\nimport { BifItemInfoBodyComponent } from './components/request-types/bif-production/common/bif-item-info-body/bif-item-info-body.component';\nimport { BifRequestTotalCostComponent } from './components/request-types/bif-production/common/bif-request-total-cost/bif-request-total-cost.component';\nimport { BifPoFormComponent } from './components/request-types/bif-production/bif-po/bif-po-form/bif-po-form.component';\nimport { BifPoFormItemComponent } from './components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item/bif-po-form-item.component';\nimport { BifPoFormItemDetailsComponent } from './components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item-details/bif-po-form-item-details.component';\nimport { BifPoFormItemSubheaderComponent } from './components/request-types/bif-production/bif-po/bif-po-form/bif-po-form-item-subheader/bif-po-form-item-subheader.component';\nimport { BifProdItemComponent } from './components/request-types/bif-production/bif-details/bif-prod-item/bif-prod-item.component';\nimport { BifPoItemComponent } from './components/request-types/bif-production/bif-po/bif-po-item/bif-po-item.component';\nimport { BifPoFeesComponent } from './components/request-types/bif-production/bif-po/bif-po-form/bif-po-fees/bif-po-fees.component';\nimport { BifPoMonthlyFormComponent } from './components/request-types/bif-production/bif-po/bif-po-monthly-form/bif-po-monthly-form.component';\nimport { BifPoMonthlyFormItemComponent } from './components/request-types/bif-production/bif-po/bif-po-monthly-form/bif-po-monthly-form-item/bif-po-monthly-form-item.component';\nimport { ThirdDetailsComponent } from './components/request-types/third-party/third-details/third-details.component';\nimport { ThirdFinanceApprovalComponent } from './components/request-types/third-party/third-finance-approval/third-finance-approval.component';\nimport { ThirdArtApprovalComponent } from './components/request-types/third-party/third-art-approval/third-art-approval.component';\nimport { ThirdPoSowTpsComponent } from './components/request-types/third-party/third-po-sow-tps/third-po-sow-tps.component';\nimport { ThirdConfirmPrinterComponent } from './components/request-types/third-party/third-confirm-printer/third-confirm-printer.component';\nimport { ThirdIntExtOperationsComponent } from './components/request-types/third-party/third-int-ext-operations/third-int-ext-operations.component';\nimport { ThirdInProductionComponent } from './components/request-types/third-party/third-in-production/third-in-production.component';\nimport { BifPrinterMilestoneComponent } from './components/request-types/bif-production/bif-print/bif-printer-milestone/bif-printer-milestone.component';\nimport { BifBulkChangeComponent } from './components/request-types/bif-production/bif-print/bif-bulk-change/bif-bulk-change.component';\nimport { BulkChangeComponent } from './components/request-types/common/bulk-change/bulk-change.component';\nimport { ThirdPartyItemComponent } from './components/request-types/third-party/third-details/third-party-item/third-party-item.component';\nimport { ThirdPartyItemHeaderComponent } from './components/request-types/third-party/common/third-party-item-header/third-party-item-header.component';\nimport { ThirdPartyItemSubheaderComponent } from './components/request-types/third-party/common/third-party-item-subheader/third-party-item-subheader.component';\nimport { ThirdPartyItemChildCardComponent } from './components/request-types/third-party/common/third-party-item-child-card/third-party-item-child-card.component';\nimport { ThirdPartyItemShipmentsComponent } from './components/request-types/third-party/third-details/third-party-item-shipments/third-party-item-shipments.component';\nimport { ThirdFinanceDetailsComponent } from './components/request-types/third-party/third-details/third-finance-details/third-finance-details.component';\nimport { ThirdPartyChildCardComponent } from './components/request-types/third-party/third-details/third-party-child-card/third-party-child-card.component';\nimport { ThirdPartyChildCardsComponent } from './components/request-types/third-party/third-details/third-party-child-cards/third-party-child-cards.component';\nimport {ThirdPrinterOwnerComponent} from './components/request-types/third-party/third-details/third-printer-owner/third-printer-owner.component';\nimport { ThirdPartyItemFormFactorComponent } from './components/request-types/third-party/third-details/third-party-item-form-factor/third-party-item-form-factor.component';\nimport { ThirdPartyItemBodyComponent } from './components/request-types/third-party/common/third-party-item-body/third-party-item-body.component';\nimport { ThirdPartyProductionQtyComponent } from './components/request-types/third-party/third-details/third-party-production-qty/third-party-production-qty.component';\nimport { ThirdCardCollateralConfirmationComponent } from './components/request-types/third-party/third-po-sow-tps/third-card-collateral-confirmation/third-card-collateral-confirmation.component';\nimport { ThirdPartyEffects } from './reducers/request-details/third-party.effects';\nimport { ImageEffects } from './reducers/request-details/image.effects';\nimport { UploadArtworkSharedComponent } from './components/shared/upload-artwork-shared/upload-artwork-shared.component';\nimport { UploadArtworkItemSharedComponent } from './components/shared/upload-artwork-shared/upload-artwork-item-shared/upload-artwork-item-shared.component';\nimport { ThirdPoFormComponent } from './components/request-types/third-party/third-po-sow-tps/third-po-form/third-po-form.component';\nimport { IhDetailsComponent } from './components/request-types/ih-production/ih-details/ih-details.component';\nimport { IhUploadArtworkComponent } from './components/request-types/ih-production/ih-upload-artwork/ih-upload-artwork.component';\nimport { IhRequesterReviewComponent } from './components/request-types/ih-production/ih-requester-review/ih-requester-review.component';\nimport { IhPoComponent } from './components/request-types/ih-production/ih-po/ih-po.component';\nimport { IhQuoteProcessComponent } from './components/request-types/ih-production/ih-quote-process/ih-quote-process.component';\nimport { IhPrinterProofComponent } from './components/request-types/ih-production/ih-printer-proof/ih-printer-proof.component';\nimport { IhInternalPrinterProofComponent } from './components/request-types/ih-production/ih-internal-printer-proof/ih-internal-printer-proof.component';\nimport { IhPrintComponent } from './components/request-types/ih-production/ih-print/ih-print.component';\nimport { TpsComponent } from './components/request-types/third-party/third-po-sow-tps/tps/tps.component';\nimport { TpsItemComponent } from './components/request-types/third-party/third-po-sow-tps/tps/tps-item/tps-item.component';\nimport { ThirdPoFormItemComponent } from './components/request-types/third-party/third-po-sow-tps/third-po-form-item/third-po-form-item.component';\nimport { IhProdItemComponent } from './components/request-types/ih-production/ih-details/ih-prod-item/ih-prod-item.component';\nimport { ThirdPoSowItemInfoComponent } from './components/request-types/third-party/third-po-sow-tps/third-po-sow-item-info/third-po-sow-item-info.component';\nimport { IhProdItemComponentDetailComponent } from './components/request-types/ih-production/ih-details/ih-prod-item-component-detail/ih-prod-item-component-detail.component';\nimport { ThirdPrinterMilestoneComponent } from './components/request-types/third-party/third-in-production/third-printer-milestone/third-printer-milestone.component';\nimport { ThirdOperationsItemFormComponent } from './components/request-types/third-party/third-int-ext-operations/third-operations-item-form/third-operations-item-form.component';\nimport { ThirdOperationsRangeDetailsComponent } from './components/request-types/third-party/third-int-ext-operations/third-operations-range-details/third-operations-range-details.component';\nimport { ThirdSowFormComponent } from './components/request-types/third-party/third-po-sow-tps/third-sow-form/third-sow-form.component';\nimport { ThirdSowFormItemComponent } from './components/request-types/third-party/third-po-sow-tps/third-sow-form-item/third-sow-form-item.component';\nimport { ThirdBulkChangeComponent } from './components/request-types/third-party/third-int-ext-operations/third-bulk-change/third-bulk-change.component';\nimport {ThirdInProductionBulkChangeComponent} from './components/request-types/third-party/third-in-production/third-in-production-bulk-change/third-in-production-bulk-change.component';\nimport { ThirdOperationsCardInfoComponent } from './components/request-types/third-party/third-int-ext-operations/third-operations-card-info/third-operations-card-info.component';\nimport { ImageDetailsComponent } from './components/request-types/image/image-details/image-details.component';\nimport { ImageTmReviewComponent } from './components/request-types/image/image-tm-review/image-tm-review.component';\nimport { ImageDesignProcessComponent } from './components/request-types/image/image-design-process/image-design-process.component';\nimport { ImageTmReview2Component } from './components/request-types/image/image-tm-review2/image-tm-review2.component';\nimport { ImageItemFormComponent } from './components/request-types/image/image-details/image-item-form/image-item-form.component';\nimport { ImageBrandComponent } from './components/request-types/image/image-details/image-brand/image-brand.component';\nimport { ImageDetailsBlockComponent } from './components/request-types/image/common/image-details-block/image-details-block.component';\nimport { ImageItemBlockComponent } from './components/request-types/image/common/image-item-block/image-item-block.component';\nimport { IhPoFormComponent } from './components/request-types/ih-production/ih-po/ih-po-form/ih-po-form.component';\nimport { IhPoFormItemComponent } from './components/request-types/ih-production/ih-po/ih-po-form/ih-po-form-item/ih-po-form-item.component';\nimport { IhPoFormComponentDetailsComponent } from './components/request-types/ih-production/ih-po/ih-po-form/ih-po-form-item/ih-po-form-component-details/ih-po-form-component-details.component';\nimport { IhPoItemComponent } from './components/request-types/ih-production/ih-po/ih-po-item/ih-po-item.component';\nimport {IhItemComponentComponent} from './components/request-types/ih-production/common/ih-item-component/ih-item-component.component';\nimport {IhItemSubheaderComponent} from './components/request-types/ih-production/common/ih-item-subheader/ih-item-subheader.component';\nimport {IhItemBodyComponent} from './components/request-types/ih-production/common/ih-item-body/ih-item-body.component';\nimport { IhItemHeaderComponent } from './components/request-types/ih-production/common/ih-item-header/ih-item-header.component';\nimport { IhCostTotalComponent } from './components/request-types/ih-production/common/ih-cost-total/ih-cost-total.component';\nimport { IhPrinterMilestoneComponent } from './components/request-types/ih-production/ih-print/ih-printer-milestone/ih-printer-milestone.component';\nimport { IhBulkChangeComponent } from './components/request-types/ih-production/ih-print/ih-bulk-change/ih-bulk-change.component';\nimport { ImageDetailsAccordionComponent } from './components/request-types/image/common/image-details-accordion/image-details-accordion.component';\nimport {SelectProductUPCDirective} from './directives/select-product-upc.directive';\nimport { RequestItemActionsComponent } from './components/request-item/request-item-actions/request-item-actions.component';\nimport { CardProdEffects } from './reducers/request-details/card-prod.effects';\nimport { CcBulkChangeComponent } from './components/request-types/third-party/third-po-sow-tps/cc-bulk-change/cc-bulk-change.component';\nimport { TpsBulkChangeComponent } from './components/request-types/third-party/third-po-sow-tps/tps/tps-bulk-change/tps-bulk-change.component';\nimport { ChangeOwnerButtonComponent } from './components/request-details/change-owner-button/change-owner-button.component';\nimport { ChangeOwnerFormComponent } from './components/request-details/change-owner-form/change-owner-form.component';\nimport { UploadArtworkDetailsSharedComponent } from './components/shared/upload-artwork-shared/upload-artwork-shared/upload-artwork-details-shared.component';\nimport { DownloadAllComponent } from './components/download-all/download-all.component';\nimport { RefreshProductOwnerButtonComponent } from './components/request-details/refresh-product-owner-button/refresh-product-owner-button.component';\nimport { CardDesignArtworkComponent } from './components/request-types/card-design/common/card-design-artwork/card-design-artwork.component';\nimport { CardDesignPartnerDetailsComponent } from './components/request-types/card-design/common/card-design-partner-details/card-design-partner-details.component';\nimport { PopDesignArtworkFieldsetComponent } from './components/request-types/pop-design/common/pop-design-artwork-fieldset/pop-design-artwork-fieldset.component';\nimport { PopRequestItemFsProductLinesComponent } from './components/request-types/pop-design/common/pop-request-item-fs-product-lines/pop-request-item-fs-product-lines.component';\nimport { PopRequestItemFsProductLinesFormComponent } from './components/request-types/pop-design/common/pop-request-item-fs-product-lines-form/pop-request-item-fs-product-lines-form.component';\nimport { ManageCardRangedBulkComponent } from './components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/manage-card-ranges-bulk.component';\nimport { CardRangesTableComponent } from './components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/card-ranges-table/card-ranges-table.component';\nimport { ManageCardFilterComponent } from './components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/manage-card-filter/manage-card-filter.component';\nimport { CardRangeTableHeaderComponent } from './components/request-types/third-party/third-int-ext-operations/manage-card-ranges-bulk/card-range-table-header/card-range-table-header.component';\nimport { ThirdSowFormStandaloneComponent } from './components/request-types/third-party/third-po-sow-tps/third-sow-standalone-form/third-sow-form-standalone.component';\nimport { ThirdSowStandaloneFormItemComponent } from './components/request-types/third-party/third-po-sow-tps/third-sow-standalone-form-item/third-sow-standalone-form-item.component';\nimport { EmailTpsComponent } from './components/request-types/third-party/third-po-sow-tps/tps/email-tps/email-tps.component';\nimport { requestFeatureKey, requestReducers } from './reducers';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { TmReview3Component } from './components/request-types/card-design/tm-review3/tm-review3.component';\nimport { PrepArtifactComponent } from './components/request-types/card-design/prep-artifact/prep-artifact.component';\nimport { PostArtifactComponent } from './components/request-types/card-design/post-artifact/post-artifact.component';\nimport { PopPostArtifactComponent } from './components/request-types/pop-design/pop-post-artifact/pop-post-artifact.component';\nimport { PopTmReview3Component } from './components/request-types/pop-design/pop-tm-review3/pop-tm-review3.component';\nimport { PopPrepArtifactComponent } from './components/request-types/pop-design/pop-prep-artifact/pop-prep-artifact.component';\nimport { ChangeTrafficManagerButtonComponent } from './components/request-details/change-traffic-manager-button/change-traffic-manager-button.component';\nimport { ChangeTrafficManagerFormComponent } from './components/request-details/change-traffic-manager-form/change-traffic-manager-form.component';\nimport { CardDesignHostComponent } from './components/request-types/card-design/card-design-host/card-design-host.component';\nimport { PopDesignHostComponent } from './components/request-types/pop-design/pop-design-host/pop-design-host.component';\nimport { ImageHostComponent } from './components/request-types/image/image-host/image-host.component';\nimport { BifUploadArtworkComponent } from './components/request-types/bif-production/bif-upload-artwork/bif-upload-artwork.component';\nimport { IhUploadArtworkItemComponentComponent } from './components/request-types/ih-production/ih-upload-artwork/ih-upload-artwork-item-component/ih-upload-artwork-item-component.component';\nimport { PopFinanceDetailsComponent } from './components/request-types/pop-production/common/pop-finance-details/pop-finance-details.component';\nimport { AddAdditionalOtherContactsButtonComponent } from './components/request-details/add-additional-other-contacts-button/add-additional-other-contacts-button.component';\nimport { AddAdditionalOtherContactsFormComponent } from './components/request-details/add-additional-other-contacts-form/add-additional-other-contacts-form.component';\nimport { PopFinanceDetailsRequestorReviewComponent } from './components/request-types/pop-production/common/pop-finance-details-requestor-review/pop-finance-details-requestor-review.component';\n\n@NgModule({\n declarations: [\n RequestsListComponent,\n RequestItemComponent,\n FilterMenuComponent,\n NewRequestComponent,\n RequestDetailsComponent,\n RequestNameFormComponent,\n CustomStepperComponent,\n RequestActionsComponent,\n RequestActionNoteComponent,\n RequestActionReasonComponent,\n ProductionDetailsComponent,\n FinanceApprovalComponent,\n ApproveRequestComponent,\n PoSowComponent,\n CommitteeApprovalComponent,\n AtPrinterComponent,\n RequestStepDetailsComponent,\n RequestItemFormComponent,\n MerchantDetailsComponent,\n MerchantFormComponent,\n StakeholderDetailsComponent,\n FormFactorFormComponent,\n ProductionQuntityFormComponent,\n PoFormComponent,\n SowFormInfoComponent,\n SowFormComponent,\n ItemInformationComponent,\n ItemShipmentComponent,\n RequestActionButtonFilterPipe,\n StatusLabelComponent,\n ItemsInformationComponent,\n RequestItemFieldsPanelComponent,\n MiscellaneousItemsSectionComponent,\n MiscellaneousItemComponent,\n ShipmentsAddressComponent,\n PrinterMilestoneComponent,\n CardProductionBulkChangeComponent,\n BulkChangeComponent,\n RequestCommentsTabComponent,\n ConfirmCloseModalComponent,\n RequestStageMenuComponent,\n DesignDetailsComponent,\n TmReviewComponent,\n CdItemComponent,\n DesignProcessComponent,\n ArtworkItemHeaderComponent,\n ClientProofComponent,\n CreativeReviewComponent,\n TmReview2Component,\n TmReview3Component,\n PopTmReview3Component,\n PopPrepArtifactComponent,\n PopPostArtifactComponent,\n PrepArtifactComponent,\n PostArtifactComponent,\n ArtworkDetailsComponent,\n PopDetailsComponent,\n PopDesignProcessComponent,\n PopFinancialReview2Component,\n PopFinancialReviewComponent,\n PopClientProofComponent,\n PopTmReviewComponent,\n PopTmReview2Component,\n PopArtworkDetailsComponent,\n PopRequestItemComponent,\n PopItemComponent,\n PopTmReviewComponent,\n PopRequestItemInfoHeaderComponent,\n PopRequestItemInfoBodyComponent,\n PopProductionAssociationComponent,\n PopStakeholderDetailsComponent,\n PopDatesSectionComponent,\n PopRequestItemTypeHeaderComponent,\n PopRequestChannelComponent,\n PopProdDetailsComponent,\n PopProdProductionReviewComponent,\n PopProdPrinterQuoteComponent,\n PopProdRequesterReviewComponent,\n PopProdFinanceApprovalComponent,\n PopProdPoSowComponent,\n PopProdVendorProofComponent,\n PopProdVendorProofIntComponent,\n PopProdPrintComponent,\n PopProdRequestDetailsBlockComponent,\n PopProdFinanceDetailsBlockComponent,\n PopProdMerchantDetailsBlockComponent,\n PopProdArtworkDetailsBlockComponent,\n PopProdItemComponent,\n PopProdItemCommonComponent,\n PopProdRequestItemSubheaderComponent,\n PopProdRequestItemHeaderComponent,\n ColorTypeSelectComponent,\n ItemTypeSelectComponent,\n PopProdItemCommonFormComponent,\n PopProdPoSowItemInfoComponent,\n PopProdSowFormComponent,\n PopProdSowFormInfoComponent,\n PopProdVersionListComponent,\n PopProdPoFormComponent,\n ItemShipmentFormComponent,\n PopProdPrinterMilestoneComponent,\n PopBulkChangeComponent,\n FsrDetailsComponent,\n FsrFinanceApprovalComponent,\n FsrPoComponent,\n FsrAtPrinterComponent,\n FsrApproveRequestComponent,\n FsrItemHeaderComponent,\n FsrItemSubheaderComponent,\n FsrRequestItemFormComponent,\n FsrPoFormComponent,\n FsrPoFormItemComponent,\n PoAccountingComponent,\n PoSowAddComponent,\n FsrBulkChangeComponent,\n FsrPrinterMilestoneComponent,\n FsrPoItemComponent,\n FsrPoFormItemDetailsComponent,\n RequestItemShipmentsComponent,\n RequestItemShipmentComponent,\n BlankStateComponent,\n ReassignPpmFormComponent,\n BifDetailsComponent,\n BifFinanceApprovalComponent,\n BifPoComponent,\n BifPrinterProofComponent,\n BifInternalPrinterProofComponent,\n BifPrintComponent,\n BifItemHeaderComponent,\n BifItemSubheaderComponent,\n BifItemInfoBodyComponent,\n BifRequestTotalCostComponent,\n BifPoFormComponent,\n BifPoMonthlyFormComponent,\n BifPoMonthlyFormItemComponent,\n BifPoFormItemComponent,\n BifPoFormItemDetailsComponent,\n BifPoFormItemSubheaderComponent,\n BifProdItemComponent,\n BifPoItemComponent,\n BifPoFeesComponent,\n ThirdDetailsComponent,\n ThirdFinanceApprovalComponent,\n ThirdArtApprovalComponent,\n ThirdPoSowTpsComponent,\n ThirdConfirmPrinterComponent,\n ThirdIntExtOperationsComponent,\n ThirdInProductionComponent,\n BifPrinterMilestoneComponent,\n BifBulkChangeComponent,\n ThirdPartyItemComponent,\n ThirdPartyItemHeaderComponent,\n ThirdPartyItemSubheaderComponent,\n ThirdPartyItemChildCardComponent,\n ThirdPartyItemComponent,\n ThirdPartyItemShipmentsComponent,\n ThirdPartyItemFormFactorComponent,\n ThirdFinanceDetailsComponent,\n ThirdPartyChildCardsComponent,\n ThirdPartyChildCardComponent,\n ThirdPrinterOwnerComponent,\n ThirdPartyItemBodyComponent,\n ThirdPartyProductionQtyComponent,\n ThirdCardCollateralConfirmationComponent,\n UploadArtworkSharedComponent,\n UploadArtworkItemSharedComponent,\n UploadArtworkDetailsSharedComponent,\n ThirdPartyProductionQtyComponent,\n ThirdPoFormComponent,\n ThirdPartyProductionQtyComponent,\n IhDetailsComponent,\n IhUploadArtworkComponent,\n IhRequesterReviewComponent,\n IhPoComponent,\n IhQuoteProcessComponent,\n IhPrinterProofComponent,\n IhInternalPrinterProofComponent,\n IhPrintComponent,\n IhPrinterMilestoneComponent,\n IhBulkChangeComponent,\n ThirdPartyProductionQtyComponent,\n TpsComponent,\n TpsItemComponent,\n ThirdPoFormItemComponent,\n IhProdItemComponent,\n ThirdPoSowItemInfoComponent,\n IhProdItemComponentDetailComponent,\n ThirdOperationsItemFormComponent,\n ThirdOperationsRangeDetailsComponent,\n ThirdPrinterMilestoneComponent,\n ThirdBulkChangeComponent,\n ManageCardRangedBulkComponent,\n ThirdSowFormComponent,\n ThirdSowFormStandaloneComponent,\n ThirdSowStandaloneFormItemComponent,\n ThirdSowFormItemComponent,\n ThirdInProductionBulkChangeComponent,\n ThirdOperationsCardInfoComponent,\n ImageDetailsComponent,\n ImageTmReviewComponent,\n ImageDesignProcessComponent,\n ImageTmReview2Component,\n ImageItemFormComponent,\n ImageBrandComponent,\n ImageDetailsBlockComponent,\n ImageItemBlockComponent,\n IhPoItemComponent,\n IhPoFormComponent,\n IhPoFormItemComponent,\n IhPoFormComponentDetailsComponent,\n IhItemSubheaderComponent,\n IhItemBodyComponent,\n IhItemComponentComponent,\n IhItemHeaderComponent,\n IhCostTotalComponent,\n ImageDetailsAccordionComponent,\n SelectProductUPCDirective,\n RequestItemActionsComponent,\n CcBulkChangeComponent,\n TpsBulkChangeComponent,\n ChangeOwnerButtonComponent,\n ChangeOwnerFormComponent,\n ChangeTrafficManagerButtonComponent,\n ChangeTrafficManagerFormComponent,\n DownloadAllComponent,\n RefreshProductOwnerButtonComponent,\n CardDesignArtworkComponent,\n CardDesignPartnerDetailsComponent,\n PopDesignArtworkFieldsetComponent,\n PopRequestItemFsProductLinesComponent,\n PopRequestItemFsProductLinesFormComponent,\n CardRangesTableComponent,\n CardRangeTableHeaderComponent,\n ManageCardFilterComponent,\n EmailTpsComponent,\n CardDesignHostComponent,\n PopDesignHostComponent,\n ImageHostComponent,\n BifUploadArtworkComponent,\n IhUploadArtworkItemComponentComponent,\n AddAdditionalOtherContactsButtonComponent,\n AddAdditionalOtherContactsFormComponent,\n PopFinanceDetailsComponent,\n PopFinanceDetailsRequestorReviewComponent\n ],\n imports: [\n MatProgressBarModule,\n CommonModule,\n SharedModule,\n ScrollingModule,\n RequestsRoutingModule,\n ReactiveFormsModule,\n FormsModule,\n CdkStepperModule,\n OverlayModule,\n StoreModule.forFeature(requestFeatureKey, requestReducers),\n EffectsModule.forFeature([\n RequestDetailsEffects,\n RequestStepsEffects,\n CardDesignEffects,\n PopDesignEffects,\n ThirdPartyEffects,\n ImageEffects,\n CardProdEffects,\n ]),\n ],\n providers: [\n TranslatePipe,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: UsernameHeaderInterceptor,\n multi: true\n },\n ],\n})\nexport class RequestsModule { }\n","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;\n","var baseIndexOf = require('./_baseIndexOf');\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nmodule.exports = arrayIncludes;\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","var baseEach = require('./_baseEach');\n\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = baseFindIndex;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIsNaN = require('./_baseIsNaN'),\n strictIndexOf = require('./_strictIndexOf');\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nmodule.exports = baseIndexOf;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nmodule.exports = baseIsNaN;\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nmodule.exports = baseSlice;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var castPath = require('./_castPath'),\n last = require('./last'),\n parent = require('./_parent'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nmodule.exports = baseValues;\n","var identity = require('./identity');\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nmodule.exports = castFunction;\n","var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\nfunction createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var baseIteratee = require('./_baseIteratee'),\n isArrayLike = require('./isArrayLike'),\n keys = require('./keys');\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nmodule.exports = createFind;\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var baseGet = require('./_baseGet'),\n baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nmodule.exports = strictIndexOf;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","/**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\nfunction defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n}\n\nmodule.exports = defaultTo;\n","var createFind = require('./_createFind'),\n findIndex = require('./findIndex');\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nmodule.exports = find;\n","var baseFindIndex = require('./_baseFindIndex'),\n baseIteratee = require('./_baseIteratee'),\n toInteger = require('./toInteger');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nmodule.exports = findIndex;\n","var baseFlatten = require('./_baseFlatten'),\n map = require('./map');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\nfunction flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n}\n\nmodule.exports = flatMapDeep;\n","var arrayEach = require('./_arrayEach'),\n baseEach = require('./_baseEach'),\n castFunction = require('./_castFunction'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nmodule.exports = forEach;\n","var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\nvar groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n});\n\nmodule.exports = groupBy;\n","var baseIndexOf = require('./_baseIndexOf'),\n isArrayLike = require('./isArrayLike'),\n isString = require('./isString'),\n toInteger = require('./toInteger'),\n values = require('./values');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\nmodule.exports = includes;\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\nfunction isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\n\nmodule.exports = isEqualWith;\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '